diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 0000000000..b626fbad94 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json +reviews: + auto_review: + enabled: false + auto_incremental_review: false + base_branches: + - stable* + enable_prompt_for_ai_agents: false + review_status: false diff --git a/.github/workflows/appstore-build-publish.yml b/.github/workflows/appstore-build-publish.yml index 2ea9ac80a7..2f5c2c261d 100644 --- a/.github/workflows/appstore-build-publish.yml +++ b/.github/workflows/appstore-build-publish.yml @@ -35,7 +35,7 @@ jobs: echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false path: ${{ env.APP_NAME }} @@ -71,9 +71,10 @@ jobs: - name: Set up node ${{ steps.versions.outputs.nodeVersion }} # Skip if no package.json if: ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ steps.versions.outputs.nodeVersion }} + package-manager-cache: false - name: Set up npm ${{ steps.versions.outputs.npmVersion }} # Skip if no package.json @@ -82,12 +83,12 @@ jobs: - name: Get php version id: php-versions - uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 with: filename: ${{ env.APP_NAME }}/appinfo/info.xml - name: Set up php ${{ steps.php-versions.outputs.php-min }} - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # v2.36.0 + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 with: php-version: ${{ steps.php-versions.outputs.php-min }} coverage: none @@ -96,7 +97,7 @@ jobs: - name: Check composer.json id: check_composer - uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 with: files: "${{ env.APP_NAME }}/composer.json" @@ -118,7 +119,7 @@ jobs: - name: Check Krankerl config id: krankerl - uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 with: files: ${{ env.APP_NAME }}/krankerl.toml @@ -156,7 +157,7 @@ jobs: unzip nextcloud.zip - name: Checkout server master fallback - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 if: ${{ steps.server-download.outcome != 'success' }} with: persist-credentials: false @@ -181,7 +182,7 @@ jobs: tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }} - name: Attach tarball to github release - uses: svenstaro/upload-release-action@6b7fa9f267e90b50a19fef07b3596790bb941741 # v2.11.3 + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # 2.11.5 id: attach_to_release with: repo_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/appstore-conventional-build-publish.yml b/.github/workflows/appstore-conventional-build-publish.yml index 9dd34167b9..3d5c87ebde 100644 --- a/.github/workflows/appstore-conventional-build-publish.yml +++ b/.github/workflows/appstore-conventional-build-publish.yml @@ -47,7 +47,7 @@ jobs: echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: token: ${{ secrets.RELEASE_PAT }} fetch-depth: 0 diff --git a/.github/workflows/block-unconventional-commits.yml b/.github/workflows/block-unconventional-commits.yml index 5026087ca5..378bfbc18c 100644 --- a/.github/workflows/block-unconventional-commits.yml +++ b/.github/workflows/block-unconventional-commits.yml @@ -27,16 +27,16 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - uses: webiny/action-conventional-commits@8bc41ff4e7d423d56fa4905f6ff79209a78776c7 # v1.3.0 + - uses: webiny/action-conventional-commits@7f91b1595ca1951cdb671ddc9f07a49081ec5b69 # v1.4.2 if: ${{ github.base_ref == 'main' }} with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - uses: webiny/action-conventional-commits@8bc41ff4e7d423d56fa4905f6ff79209a78776c7 # v1.3.0 + - uses: webiny/action-conventional-commits@7f91b1595ca1951cdb671ddc9f07a49081ec5b69 # v1.4.2 if: ${{ github.base_ref != 'main' }} with: allowed-commit-types: "fix,docs,style,refactor,test,build,perf,ci,chore,revert,merge" # Anything but "feat" https://github.com/webiny/action-conventional-commits/blob/8bc41ff4e7d423d56fa4905f6ff79209a78776c7/action.yml#L9C15-L9C85 diff --git a/.github/workflows/lint-eslint.yml b/.github/workflows/lint-eslint.yml index 1ce230755c..fe436c9add 100644 --- a/.github/workflows/lint-eslint.yml +++ b/.github/workflows/lint-eslint.yml @@ -28,7 +28,7 @@ jobs: src: ${{ steps.changes.outputs.src}} steps: - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: changes continue-on-error: true with: @@ -56,7 +56,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false @@ -68,7 +68,7 @@ jobs: fallbackNpm: '^11.3' - name: Set up node ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ steps.versions.outputs.nodeVersion }} diff --git a/.github/workflows/lint-info-xml.yml b/.github/workflows/lint-info-xml.yml index 50375dc115..f2335b70ea 100644 --- a/.github/workflows/lint-info-xml.yml +++ b/.github/workflows/lint-info-xml.yml @@ -24,7 +24,7 @@ jobs: name: info.xml lint steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false diff --git a/.github/workflows/lint-php-cs.yml b/.github/workflows/lint-php-cs.yml index 7491115ae1..fc215b4a94 100644 --- a/.github/workflows/lint-php-cs.yml +++ b/.github/workflows/lint-php-cs.yml @@ -25,16 +25,16 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Get php version id: versions - uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 - name: Set up php${{ steps.versions.outputs.php-min }} - uses: shivammathur/setup-php@85c019fd025f731a83ac9fbc1cdd9ba69d76b6e3 # v2.36.0 with verbose logging due to stuck runs + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 with: php-version: ${{ steps.versions.outputs.php-min }} extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite diff --git a/.github/workflows/lint-php.yml b/.github/workflows/lint-php.yml index 17519f7231..19d4bbac8c 100644 --- a/.github/workflows/lint-php.yml +++ b/.github/workflows/lint-php.yml @@ -21,34 +21,35 @@ jobs: matrix: runs-on: ubuntu-latest-low outputs: - php-versions: ${{ steps.versions.outputs.php-versions }} + php-min: ${{ steps.versions.outputs.php-min }} + php-max: ${{ steps.versions.outputs.php-max }} steps: - name: Checkout app - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Get version matrix id: versions - uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0 + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 php-lint: - runs-on: ubuntu-latest + runs-on: ubuntu-latest-low needs: matrix strategy: matrix: - php-versions: ${{fromJson(needs.matrix.outputs.php-versions)}} + php-versions: ['${{ needs.matrix.outputs.php-min }}', '${{ needs.matrix.outputs.php-max }}'] name: php-lint steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Set up php ${{ matrix.php-versions }} - uses: shivammathur/setup-php@85c019fd025f731a83ac9fbc1cdd9ba69d76b6e3 # v2.36.0 with verbose logging due to stuck runs + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 with: php-version: ${{ matrix.php-versions }} extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite diff --git a/.github/workflows/lint-stylelint.yml b/.github/workflows/lint-stylelint.yml index f743901c9a..a7f139e631 100644 --- a/.github/workflows/lint-stylelint.yml +++ b/.github/workflows/lint-stylelint.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false @@ -37,7 +37,7 @@ jobs: fallbackNpm: '^11.3' - name: Set up node ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ steps.versions.outputs.nodeVersion }} diff --git a/.github/workflows/npm-audit-fix.yml b/.github/workflows/npm-audit-fix.yml index d44b9c9e9d..d2d73ca993 100644 --- a/.github/workflows/npm-audit-fix.yml +++ b/.github/workflows/npm-audit-fix.yml @@ -26,16 +26,15 @@ jobs: matrix: branches: - ${{ github.event.repository.default_branch }} - - 'stable5.8' - - 'stable5.7' - - 'stable5.6' + - 'stable5.10' + - 'stable5.9' name: npm-audit-fix-${{ matrix.branches }} steps: - name: Checkout id: checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false ref: ${{ matrix.branches }} @@ -49,7 +48,7 @@ jobs: fallbackNpm: '^11.3' - name: Set up node ${{ steps.versions.outputs.nodeVersion }} - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ steps.versions.outputs.nodeVersion }} @@ -70,7 +69,7 @@ jobs: - name: Create Pull Request if: steps.checkout.outcome == 'success' - uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0 + uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 with: token: ${{ secrets.COMMAND_BOT_PAT }} commit-message: 'fix(deps): Fix npm audit' diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml index 3dc9f90363..13b2ccdfd5 100644 --- a/.github/workflows/openapi.yml +++ b/.github/workflows/openapi.yml @@ -26,16 +26,16 @@ jobs: steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Get php version id: php_versions - uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 - name: Set up php - uses: shivammathur/setup-php@85c019fd025f731a83ac9fbc1cdd9ba69d76b6e3 # v2.36.0 with verbose logging due to stuck runs + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 with: php-version: ${{ steps.php_versions.outputs.php-available }} extensions: xml @@ -46,7 +46,7 @@ jobs: - name: Check Typescript OpenApi types id: check_typescript_openapi - uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 with: files: "src/types/openapi/openapi*.ts" @@ -62,7 +62,7 @@ jobs: - name: Set up node ${{ steps.node_versions.outputs.nodeVersion }} if: ${{ steps.node_versions.outputs.nodeVersion }} - uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0 + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: node-version: ${{ steps.node_versions.outputs.nodeVersion }} diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 248d7ae7d3..63b5d58fe7 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -12,9 +12,9 @@ jobs: name: Build release tarball steps: - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Read package.json node and npm engines version - uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2 + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 id: versions - name: Set up Nextcloud env uses: nextcloud/setup-server-action@34b73d5b0e3633f83a52227d00cc2a6c41d01d9a # v1.0.0 diff --git a/.github/workflows/psalm-matrix.yml b/.github/workflows/psalm-matrix.yml index 58d04b028b..2168da5a36 100644 --- a/.github/workflows/psalm-matrix.yml +++ b/.github/workflows/psalm-matrix.yml @@ -22,15 +22,16 @@ jobs: runs-on: ubuntu-latest-low outputs: ocp-matrix: ${{ steps.versions.outputs.ocp-matrix }} + php-min: ${{ steps.versions.outputs.php-min }} steps: - name: Checkout app - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - name: Get version matrix id: versions - uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 - name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml @@ -46,14 +47,14 @@ jobs: name: static-psalm-analysis ${{ matrix.ocp-version }} steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false - - name: Set up php${{ matrix.php-min }} - uses: shivammathur/setup-php@85c019fd025f731a83ac9fbc1cdd9ba69d76b6e3 # v2.36.0 with verbose logging due to stuck runs + - name: Set up php${{ needs.matrix.outputs.php-min }} + uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 with: - php-version: ${{ matrix.php-min }} + php-version: ${{ needs.matrix.outputs.php-min }} extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite coverage: none ini-file: development @@ -67,9 +68,6 @@ jobs: composer remove nextcloud/ocp --dev --no-scripts composer i - - name: Check for vulnerable PHP dependencies - run: composer require --dev roave/security-advisories:dev-latest - - name: Install dependencies # zizmor: ignore[template-injection] run: composer require --dev 'nextcloud/ocp:${{ matrix.ocp-version }}' --ignore-platform-reqs --with-dependencies diff --git a/.github/workflows/release-relay.yml b/.github/workflows/release-relay.yml new file mode 100644 index 0000000000..0890831536 --- /dev/null +++ b/.github/workflows/release-relay.yml @@ -0,0 +1,38 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Notify release-relay on release + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + notify: + name: Dispatch release to release-relay + runs-on: ubuntu-latest + + # Only allowed to run on nextcloud-releases repositories + if: ${{ github.repository_owner == 'nextcloud-releases' }} + + steps: + - name: Check actor permission + uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0 + with: + require: write + + - name: Dispatch to release-relay + uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1 + with: + token: ${{ secrets.DISPATCH_PAT }} + repository: nextcloud-gmbh/release-relay + event-type: app-tagged + client-payload: '{"app": "${{ github.repository }}", "tag": "${{ github.event.release.tag_name }}"}' diff --git a/.github/workflows/reuse.yml b/.github/workflows/reuse.yml index 00fb5e2e03..a60e9e262a 100644 --- a/.github/workflows/reuse.yml +++ b/.github/workflows/reuse.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest-low steps: - name: Checkout - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 with: persist-credentials: false diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 8f2588741f..d735725384 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -17,7 +17,7 @@ jobs: issues: write steps: - - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10 + - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 with: repo-token: ${{ secrets.COMMAND_BOT_PAT }} stale-issue-message: > diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d676d8585d..c41049d105 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,6 +24,8 @@ jobs: nextcloud-versions: 'stable32' - php-versions: '8.2' nextcloud-versions: 'stable33' + - php-versions: '8.2' + nextcloud-versions: 'stable34' - php-versions: '8.3' nextcloud-versions: 'master' name: Nextcloud ${{ matrix.nextcloud-versions }} php${{ matrix.php-versions }} unit tests ${{ matrix.coverage && '(coverage)' || ''}} @@ -38,7 +40,7 @@ jobs: node-version: 'false' install: true - name: Checkout Mail - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: nextcloud/apps/mail fetch-depth: 2 @@ -51,7 +53,7 @@ jobs: env: XDEBUG_MODE: ${{ matrix.coverage && 'coverage' || 'off' }} - name: Report coverage - uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5.5.4 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 if: ${{ !cancelled() && matrix.coverage }} with: token: ${{ secrets.CODECOV_TOKEN }} @@ -88,6 +90,10 @@ jobs: db: 'mysql' cache: 'redis' coverage: true + - php-versions: 8.4 + nextcloud-versions: 'stable34' + db: 'mysql' + cache: 'redis' - php-versions: 8.5 nextcloud-versions: 'master' db: 'mysql' @@ -95,7 +101,7 @@ jobs: name: ${{ matrix.nextcloud-versions }} w/ php${{ matrix.php-versions }}-${{ matrix.db }}-${{ matrix.cache }} integration tests ${{ matrix.coverage && '(coverage)' || ''}} services: mail-service: - image: ghcr.io/christophwurst/docker-imap-devel:latest + image: ghcr.io/christophwurst/docker-imap-devel:latest@sha256:b76a062268d7342ccec549f5323a0b6dc1b6ac55b03367f474934927653f5cb5 env: MAILNAME: mail.domain.tld MAIL_ADDRESS: user@domain.tld @@ -106,7 +112,7 @@ jobs: - 993:993 - 4190:4190 mariadb-service: - image: ghcr.io/nextcloud/continuous-integration-mariadb-11.4:latest + image: ghcr.io/nextcloud/continuous-integration-mariadb-11.8:latest@sha256:9232089007ddc49b42e5a7e4cc158ac373efebed6885ea0f76e3d4e5f8532bac env: MARIADB_ROOT_PASSWORD: my-secret-pw MARIADB_DATABASE: nextcloud @@ -120,7 +126,7 @@ jobs: --health-timeout=2s --health-retries=5 postgres-service: - image: ghcr.io/nextcloud/continuous-integration-postgres-15:latest + image: ghcr.io/nextcloud/continuous-integration-postgres-15:latest@sha256:1939108b31fd841cf01906c431c1802cd984fcfb0e57fb0d714b9e6895c340b0 env: POSTGRES_USER: nextcloud POSTGRES_DB: nextcloud @@ -133,7 +139,7 @@ jobs: --health-timeout 5s --health-retries 5 redis: - image: ghcr.io/nextcloud/continuous-integration-redis:latest + image: ghcr.io/nextcloud/continuous-integration-redis:latest@sha256:4ae220629fc544cd1396b35723137628a4cf7e5355b1d86649073f30249d7cbe options: >- --health-cmd "redis-cli ping" --health-interval 10s @@ -158,7 +164,7 @@ jobs: php -f nextcloud/occ config:system:set memcache.local --value='\OC\Memcache\Redis' php -f nextcloud/occ config:system:set memcache.distributed --value='\OC\Memcache\Redis' - name: Checkout Mail - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: nextcloud/apps/mail fetch-depth: 2 @@ -169,7 +175,7 @@ jobs: if: ${{ matrix.php-versions == '8.6' }} run: sed -i 's/max-version="8.5"/max-version="8.6"/' nextcloud/apps/mail/appinfo/info.xml - name: Install Mail - run: php -f nextcloud/occ app:enable mail + run: php -f nextcloud/occ app:enable mail --force - name: Configure Nextcloud for testing run: | php -f nextcloud/occ config:system:set app.mail.debug --type bool --value true @@ -192,7 +198,7 @@ jobs: if: ${{ always() }} run: cat nextcloud/data/mail-*-*-imap.log - name: Report coverage - uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5.5.4 + uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 if: ${{ !cancelled() && matrix.coverage }} with: token: ${{ secrets.CODECOV_TOKEN }} @@ -202,12 +208,12 @@ jobs: fail_ci_if_error: ${{ !github.event.pull_request.head.repo.fork }} verbose: true frontend-unit-test: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Front-end unit tests steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Read package.json node and npm engines version - uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2 + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 id: versions with: fallbackNode: '^14' @@ -232,7 +238,7 @@ jobs: branches-min: ${{ steps.versions.outputs.branches-min }} steps: - name: Checkout app - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - name: Get version matrix id: versions uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 @@ -258,14 +264,14 @@ jobs: php -f nextcloud/occ config:system:set app.mail.debug --type=bool --value=true php -f nextcloud/occ config:system:set app.mail.verify-tls-peer --type=bool --value=false - name: Check out the app - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: path: nextcloud/apps/mail - name: Install php dependencies working-directory: nextcloud/apps/mail run: composer install - name: Install the app - run: php -f nextcloud/occ app:enable mail + run: php -f nextcloud/occ app:enable mail --force - name: Set up node ${{ env.E2E_NODE_VERSION }} uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 with: diff --git a/.github/workflows/update-public-suffix-list.yml b/.github/workflows/update-public-suffix-list.yml index 949179c5a2..c122dd4223 100644 --- a/.github/workflows/update-public-suffix-list.yml +++ b/.github/workflows/update-public-suffix-list.yml @@ -16,14 +16,13 @@ jobs: matrix: branches: - 'main' - - 'stable5.8' - - 'stable5.7' - - 'stable5.6' + - 'stable5.10' + - 'stable5.9' name: update-public-suffix-list-${{ matrix.branches }} steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: ref: ${{ matrix.branches }} submodules: true @@ -32,7 +31,7 @@ jobs: run: curl --output resources/public_suffix_list.dat https://publicsuffix.org/list/public_suffix_list.dat - name: Create Pull Request - uses: peter-evans/create-pull-request@22a9089034f40e5a961c8808d113e2c98fb63676 # v7.0.11 + uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1 with: token: ${{ secrets.COMMAND_BOT_PAT }} commit-message: 'fix(dns): Update public suffix list' diff --git a/.gitignore b/.gitignore index 91c74878f8..3754dd232b 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,6 @@ tests/.phpunit.result.cache /playwright /playwright-report /test-results + +# Agents +.claude/ diff --git a/.nextcloudignore b/.nextcloudignore index 0c05728aeb..02c80b50fd 100644 --- a/.nextcloudignore +++ b/.nextcloudignore @@ -4,12 +4,15 @@ /babel.config.js /.babelrc /build +CLAUDE.md codecov.yml +/.coderabbit.yaml /composer.* /CONTRIBUTING.md /coverage /.editorconfig /.eslintrc.js +/eslint.config.mjs .git .git-blame-ignore-revs .gitattributes @@ -44,3 +47,9 @@ codecov.yml /webpack.* /vitest.config.* /patches +/.patches +/patches.json +/patches.lock.json +/playwright.config.js +/stylelint.config.js +/tsconfig.json diff --git a/.patches/horde-mail-rfc822-isAtext-empty-zero.patch b/.patches/horde-mail-rfc822-isAtext-empty-zero.patch new file mode 100644 index 0000000000..3b6b2f5c50 --- /dev/null +++ b/.patches/horde-mail-rfc822-isAtext-empty-zero.patch @@ -0,0 +1,11 @@ +--- a/lib/Horde/Mail/Rfc822.php ++++ b/lib/Horde/Mail/Rfc822.php +@@ -802,7 +802,7 @@ + return strcspn($chr, $validate); + } + +- $ord = empty($chr) ? 0 : ord($chr); ++ $ord = ($chr === '' || $chr === false) ? 0 : ord($chr); + + /* UTF-8 characters check. */ + if ($ord > 127) { diff --git a/.tx/backport b/.tx/backport index 637deba5db..411afc796c 100644 --- a/.tx/backport +++ b/.tx/backport @@ -1,3 +1,2 @@ -stable5.8 -stable5.7 -stable5.6 +stable5.10 +stable5.9 diff --git a/AGENTS.md b/AGENTS.md index 3932e36426..2826b4299d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -111,10 +111,21 @@ After completing code changes: - There is a [contributing doc](./.github/CONTRIBUTING.md) with suggestions 8. The user will review and commit when ready +### PR Review Workflow + +Once a branch is pushed and under review, **do not force-push**. Reviewers track changes incrementally — a force-push destroys that history and forces them to re-read the full diff from scratch. + +Instead, address feedback with **fixup commits**: +```bash +git commit --fixup= # targets the specific commit being corrected +``` + +The branch will be rebased and squashed into a clean history before merge (CI enforces this). The failing "clean history" CI check is intentional and expected during review — ignore it until the PR has a positive review, then rebase to clean up. + ### Commit Message Format -All commits must include two lines at the end: -1. Agent/model attribution: `AI-assisted: (model)` +All commits must include two trailers at the end: +1. Agent/model attribution: `Assisted-by: :` 2. DCO sign-off: Use `git commit -s` to add automatically When committing, use: `git commit -m "message" -s` @@ -123,11 +134,19 @@ This ensures the sign-off includes your configured Git user email. Example: ``` -fix(deps): Update package dependencies +fix(deps): update package dependencies -- Updated package X to latest stable version -- Verified all tests pass +- update package X to latest stable version +- verify all tests pass -AI-assisted: OpenCode (Claude Haiku 4.5) +Assisted-by: Claude:claude-sonnet-4-6 Signed-off-by: Name ``` + +### Styling + +For all CSS colors, spacing, and dimensions, you must use the standard Nextcloud CSS variables. + +Do not leave any magic numbers. If you need more specific control over dimensions use `calc(x*var)` when necessary. + +You can find the CSS variables already in use in this repository, and the full documentation available at this link: https://docs.nextcloud.com/server/latest/developer_manual/html_css_design/css.html. diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a53f5ce2..97519e347a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,36 @@ # Changelog All notable changes to this project will be documented in this file. +## 5.10.0 – 2026-06-18 +### Added +* Shortcut to change the password in account server settings +* AI hint when replying with a meeting +### Changed +* Translations +### Fixed +* Printing messages +* Drag and drop into sub-mailboxes blocked by a disabled parent mailbox +* Prefer sans-serif font over Noto Color Emoji for text rendering + +## 5.9.0 – unreleased +### Added +* Nextcloud 35 support +* Account delegation with notifications +* HTML and source editing support in composer/signature editor +* Per-message To/Cc/Bcc recipients in thread view +* Paste or copy several email addresses into address fields at once +* Keep inline images when forwarding messages +### Changed +* Translations +### Performance +* Reuse IMAP client connections during initial sync +### Fixed +* Attachment actions menu closes after Download or Save to Files +* Correct favorite/unfavorite bulk action behavior +* Detect and warn about Microsoft accounts without OAuth configured +* Important message icon not displayed in message list +* Load translations via filesystem path + ## 5.8.0 – unreleased ### Added * Deep link support for opening messages by Message-ID diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000000..43c994c2d3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/REUSE.toml b/REUSE.toml index 6925a14daf..b39e489efc 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -5,6 +5,12 @@ SPDX-PackageName = "mail" SPDX-PackageSupplier = "Nextcloud " SPDX-PackageDownloadLocation = "https://github.com/nextcloud/mail" +[[annotations]] +path = "CLAUDE.md" +precedence = "aggregate" +SPDX-FileCopyrightText = "2026 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + [[annotations]] path = ["l10n/**.js", "l10n/**.json", "js/**.js.map", "js/**.js"] precedence = "aggregate" @@ -144,7 +150,7 @@ SPDX-FileCopyrightText = "2018-2024 Google LLC, 2016-2024 Nextcloud GmbH and Nex SPDX-License-Identifier = "Apache-2.0" [[annotations]] -path = ["img/mail.png", "img/mail.svg", "img/mail-dark.svg", "img/important.svg", "img/star.png", "img/star.svg", "img/mail-notification.png", "img/mail-notification.svg", "img/text_snippet.svg", "img/format-pilcrow-arrow-right.svg", "img/format-pilcrow-arrow-left.svg"] +path = ["img/mail.png", "img/mail.svg", "img/mail-dark.svg", "img/important.svg", "img/star.png", "img/star.svg", "img/mail-notification.png", "img/mail-notification.svg", "img/text_snippet.svg", "img/format-pilcrow-arrow-right.svg", "img/format-pilcrow-arrow-left.svg", "img/delegation.svg"] precedence = "aggregate" SPDX-FileCopyrightText = "2018-2026 Google LLC" SPDX-License-Identifier = "Apache-2.0" @@ -179,6 +185,12 @@ precedence = "aggregate" SPDX-FileCopyrightText = "angrychimp, Teon d.o.o. - Bostjan Skufca, Marcus Bointon" SPDX-License-Identifier = "MIT" +[[annotations]] +path = [".patches/horde-mail-rfc822-isAtext-empty-zero.patch"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2026 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + [[annotations]] path = [".patches/url-normalizer-fix-deprecation-warning-on-PHP-8.5.patch"] precedence = "aggregate" diff --git a/appinfo/info.xml b/appinfo/info.xml index 82d365bbd8..0fdb533cd0 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -34,7 +34,7 @@ The rating depends on the installed text processing backend. See [the rating ove Learn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/). ]]> - 5.9.0-dev.2 + 5.10.0-rc.1 agpl Christoph Wurst GretaD @@ -53,7 +53,7 @@ Learn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud https://user-images.githubusercontent.com/12728974/266270227-86b99bbb-03ea-468b-8408-e248e1730bed.png - + OCA\Mail\BackgroundJob\CleanupJob diff --git a/appinfo/routes.php b/appinfo/routes.php index d70a83e257..0e116e1349 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -210,6 +210,11 @@ 'url' => '/api/messages/{id}/attachment/{attachmentId}', 'verb' => 'POST' ], + [ + 'name' => 'messages#saveFile', + 'url' => '/api/messages/{id}/file', + 'verb' => 'POST' + ], [ 'name' => 'messages#getBody', 'url' => '/api/messages/{id}/body', @@ -475,6 +480,11 @@ 'url' => '/integration/microsoft-auth', 'verb' => 'GET', ], + [ + 'name' => 'oauth#generateState', + 'url' => '/api/oauth/state', + 'verb' => 'POST', + ], [ 'name' => 'list#unsubscribe', 'url' => '/api/list/unsubscribe/{id}', @@ -505,6 +515,21 @@ 'url' => '/api/follow-up/check-message-ids', 'verb' => 'POST', ], + [ + 'name' => 'delegation#getDelegatedUsers', + 'url' => '/api/delegations/{accountId}', + 'verb' => 'GET', + ], + [ + 'name' => 'delegation#delegate', + 'url' => '/api/delegations/{accountId}', + 'verb' => 'POST', + ], + [ + 'name' => 'delegation#unDelegate', + 'url' => '/api/delegations/{accountId}/{userId}', + 'verb' => 'DELETE', + ], [ 'name' => 'textBlockShares#getTextBlockShares', 'url' => '/api/textBlocks/{id}/shares', diff --git a/composer.json b/composer.json index ac760bbf23..1fe2a5557e 100644 --- a/composer.json +++ b/composer.json @@ -42,7 +42,7 @@ "phpmailer/dkimvalidator": "^0.3.1", "psr/log": "^3.0.2", "rubix/ml": "2.5.3", - "sabberworm/php-css-parser": "^9.3.0", + "sabberworm/php-css-parser": "^9.4.0", "wamania/php-stemmer": "4.0 as 3.0", "youthweb/urllinker": "^2.1.0" }, @@ -64,7 +64,12 @@ "scripts": { "cs:check": "php-cs-fixer fix --dry-run --diff", "cs:fix": "php-cs-fixer fix", - "lint": "find . -name \\*.php -not -path './vendor*/*' -not -path './tests/stubs/*' -print0 | xargs -0 -n1 php -l", + "lint": [ + "@lint-8.2-or-earlier", + "@lint-8.3-or-later" + ], + "lint-8.2-or-earlier": "[ $(php -r \"echo PHP_VERSION_ID;\") -ge 80300 ] || find . -type f -name '*.php' -not -path './vendor/*' -not -path './vendor-bin/*' -not -path './tests/stubs/*' -print0 | xargs -0 -n1 -P$(nproc) php -l", + "lint-8.3-or-later": "[ $(php -r \"echo PHP_VERSION_ID;\") -lt 80300 ] || find . -type f -name '*.php' -not -path './vendor/*' -not -path './vendor-bin/*' -not -path './tests/stubs/*' -print0 | xargs -0 -n200 -P$(nproc) php -l", "psalm": "psalm.phar", "psalm:fix": "psalm.phar --alter --issues=InvalidReturnType,InvalidNullableReturnType,MismatchingDocblockParamType,MismatchingDocblockReturnType,MissingParamType,InvalidFalsableReturnType", "post-install-cmd": [ diff --git a/composer.lock b/composer.lock index 9322a23fb2..345bc4b54c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b0c4764ba63b0a3726e60bf2f7a19a22", + "content-hash": "0b7206fc1061851cf7de747579bbf413", "packages": [ { "name": "amphp/amp", @@ -2745,16 +2745,16 @@ }, { "name": "sabberworm/php-css-parser", - "version": "v9.3.0", + "version": "v9.4.0", "source": { "type": "git", "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", - "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949" + "reference": "fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949", - "reference": "88dbd0f7f91abbfe4402d0a3071e9ff4d81ed949", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f", + "reference": "fd3bf9fb173e0df649bc4e3e0d088a1b2417c08f", "shasum": "" }, "require": { @@ -2765,15 +2765,15 @@ "require-dev": { "php-parallel-lint/php-parallel-lint": "1.4.0", "phpstan/extension-installer": "1.4.3", - "phpstan/phpstan": "1.12.32 || 2.1.32", - "phpstan/phpstan-phpunit": "1.4.2 || 2.0.8", - "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.7", + "phpstan/phpstan": "1.12.33 || 2.2.2", + "phpstan/phpstan-phpunit": "1.4.2 || 2.0.16", + "phpstan/phpstan-strict-rules": "1.6.2 || 2.0.11", "phpunit/phpunit": "8.5.52", "rawr/phpunit-data-provider": "3.3.1", - "rector/rector": "1.2.10 || 2.2.8", - "rector/type-perfect": "1.0.0 || 2.1.0", + "rector/rector": "1.2.10 || 2.4.6", + "rector/type-perfect": "1.0.0 || 2.1.3", "squizlabs/php_codesniffer": "4.0.1", - "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.1" + "thecodingmachine/phpstan-safe-rule": "1.2.0 || 1.4.3" }, "suggest": { "ext-mbstring": "for parsing UTF-8 CSS" @@ -2781,7 +2781,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "9.4.x-dev" + "dev-main": "9.5.x-dev" } }, "autoload": { @@ -2819,9 +2819,9 @@ ], "support": { "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", - "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.3.0" + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v9.4.0" }, - "time": "2026-03-03T17:31:43+00:00" + "time": "2026-06-18T15:10:53+00:00" }, { "name": "symfony/deprecation-contracts", diff --git a/css/html-response.css b/css/html-response.css index c9520f7a64..3b5a28baaf 100644 --- a/css/html-response.css +++ b/css/html-response.css @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ * { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', Arial, 'Noto Color Emoji', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Cantarell, Ubuntu, 'Helvetica Neue', Arial, sans-serif, 'Noto Color Emoji', 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; } html { diff --git a/css/mail.scss b/css/mail.scss index 8bdf76b29e..de334d5eef 100755 --- a/css/mail.scss +++ b/css/mail.scss @@ -309,6 +309,13 @@ opacity: .6; } +.app-settings .modal-wrapper .modal-container { + overflow: visible !important; + + .modal-container__content { + border-radius: var(--border-radius-container, var(--border-radius-rounded)); + } +} /* compose (handling mailto links) */ diff --git a/eslint.config.mjs b/eslint.config.mjs index 7e6b247a6e..5abec4249c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -22,7 +22,7 @@ export default defineConfig([ }, }, rules: { - 'no-console': 'warn', + 'no-console': 'error', 'no-unused-vars': 'warn', // 'jsdoc/no-undefined-types': 'error', diff --git a/img/delegation.svg b/img/delegation.svg new file mode 100644 index 0000000000..dac6d654f5 --- /dev/null +++ b/img/delegation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/l10n/af.js b/l10n/af.js index 2ee520029e..e2e51849fb 100644 --- a/l10n/af.js +++ b/l10n/af.js @@ -38,8 +38,8 @@ OC.L10N.register( "Signature" : "Handtekening", "Default folders" : "Verstekvouers", "Mail server" : "E-posbediener", - "Go back" : "Gaan terug", "Email address" : "E-posadres", + "Go back" : "Gaan terug", "Cancel" : "Kanselleer", "General" : "Algemeen", "Add mail account" : "Voeg posrekening toe", @@ -68,9 +68,9 @@ OC.L10N.register( "Monday morning" : "Maandagoggend", "Custom date and time" : "Pasgemaakte datum en tyd", "Enter a date" : "Voer ’n datum in", - "Choose" : "Kies", "Confirm" : "Bevestig", "Plain text" : "Skoonteks", + "Choose" : "Kies", "No subject" : "Geen onderwerp", "Favorite" : "Gunsteling", "Back" : "Terug", @@ -86,6 +86,7 @@ OC.L10N.register( "Favorites" : "Gunstelinge", "Other" : "Ander", "Forward" : "Stuur aan", + "Link copied" : "Skakel gekopieer", "View source" : "Bekyk bron", "Message body" : "Boodskaplyfteks", "Unnamed" : "Naamloos", @@ -99,6 +100,7 @@ OC.L10N.register( "Reply" : "Antwoord", "Retry" : "Herprobeer", "Add" : "Voeg by", + "Close" : "Close", "Date" : "Datum", "Tags" : "Etikette", "Custom" : "Eie", diff --git a/l10n/af.json b/l10n/af.json index f6594147cc..83fbab53f5 100644 --- a/l10n/af.json +++ b/l10n/af.json @@ -36,8 +36,8 @@ "Signature" : "Handtekening", "Default folders" : "Verstekvouers", "Mail server" : "E-posbediener", - "Go back" : "Gaan terug", "Email address" : "E-posadres", + "Go back" : "Gaan terug", "Cancel" : "Kanselleer", "General" : "Algemeen", "Add mail account" : "Voeg posrekening toe", @@ -66,9 +66,9 @@ "Monday morning" : "Maandagoggend", "Custom date and time" : "Pasgemaakte datum en tyd", "Enter a date" : "Voer ’n datum in", - "Choose" : "Kies", "Confirm" : "Bevestig", "Plain text" : "Skoonteks", + "Choose" : "Kies", "No subject" : "Geen onderwerp", "Favorite" : "Gunsteling", "Back" : "Terug", @@ -84,6 +84,7 @@ "Favorites" : "Gunstelinge", "Other" : "Ander", "Forward" : "Stuur aan", + "Link copied" : "Skakel gekopieer", "View source" : "Bekyk bron", "Message body" : "Boodskaplyfteks", "Unnamed" : "Naamloos", @@ -97,6 +98,7 @@ "Reply" : "Antwoord", "Retry" : "Herprobeer", "Add" : "Voeg by", + "Close" : "Close", "Date" : "Datum", "Tags" : "Etikette", "Custom" : "Eie", diff --git a/l10n/ar.js b/l10n/ar.js index 78884a5bcc..6e55418674 100644 --- a/l10n/ar.js +++ b/l10n/ar.js @@ -85,7 +85,6 @@ OC.L10N.register( "SMTP Port" : "منفذ SMTP", "SMTP User" : "مستخدم SMTP", "SMTP Password" : "كلمة مرور SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "لكي يعمل حساب Google مع هذا التطبيق، يلزمك تمكين التحقق ثنائي العوامل من الهويّة 2FA لـ Google وإنشاء كلمة مرور للتطبيق.", "Account settings" : "إعدادت الحساب", "Aliases" : "أسماء مسعارة", "Alias to S/MIME certificate mapping" : "أسماء مُستعارة Alias لربط شهادات S/MIME", @@ -106,13 +105,13 @@ OC.L10N.register( "Sieve script editor" : "محرر سكريبتات \"الغربال\" Sieve", "Mail server" : "خادم البريد", "Sieve server" : "خادم \"الغربال\" Sieve", + "Email address" : "عنوان البريد الإلكتروني", "Update alias" : "تحديث الاسم المُستعار alias ", "Rename alias" : "تغيير تسمية اسم مُستعار alias", "Show update alias form" : "عرض نموذج تحديث الاسم المُستعار alias", "Delete alias" : "حذف اسم مُستعار alias", "Go back" : "عودة", "Change name" : "تغيير الاسم", - "Email address" : "عنوان البريد الإلكتروني", "Add alias" : "إضافة اسم مُستعار alias", "Create alias" : "إنشاء اسم مُستعار alias", "Cancel" : "إلغاء", @@ -130,6 +129,7 @@ OC.L10N.register( "Sorting" : "ترتيب", "Newest first" : "الأحدث أولاً", "Oldest first" : "الأقدم أولاً", + "Ok" : "موافق", "Shared with me" : "تمّت مُشاركته معي", "Privacy" : "الخصوصية", "Security" : "الأمان", @@ -148,7 +148,6 @@ OC.L10N.register( "Refresh" : "تحديث", "About" : "حول", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "هذا التطبيق يشتمل على CKEditor والذي هو محرر نصوص حر مفتوح المصدر. جميع الحقوق محفوطة © لمساهمي CKEditor. مرخص وفقاً لـ GPLv2.", - "Ok" : "موافق", "No certificate" : "لا شهادة", "Certificate updated" : "تمّ تحديث الشهادة", "Could not update certificate" : "تعذّر تحديث الشهادة", @@ -187,7 +186,6 @@ OC.L10N.register( "Disable formatting" : "إيقاف التنسيق", "Upload attachment" : "رفع المُرفَقات", "Add attachment from Files" : "إضافة مرفقات من الملفات", - "Add share link from Files" : "إضافة رابط المشاركة من الملفات", "Smart picker" : "اللاقط الذكي Smart picker", "Request a read receipt" : "طلب إيصال بالتسليم read reciept", "Sign message with S/MIME" : "توقيع الرسالة مع S/MIME", @@ -199,21 +197,21 @@ OC.L10N.register( "Monday morning" : "أول صباح عمل في الأسبوع", "Custom date and time" : "وقت وتاريخ مخصص", "Enter a date" : "أدخِل تاريخاً", - "Choose" : "إختر", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك."], - "Choose a file to add as attachment" : "إختَر ملفاً لإضافته كمُرفَقٍ", - "Choose a file to share as a link" : "إختَر ملفاً لمُشاركته كرابطٍ", + "Choose a file" : "إختيار ملف", "_{count} attachment_::_{count} attachments_" : ["{count} مرفقات","{count} مرفق","{count} مرفقات","{count} مرفقات","{count} مرفقات","{count} مُرفَقات"], "Untitled message" : "رسالة بدون عنوان", "Expand composer" : "تمديد الناظِم composer", "Close composer" : "إغلاق الناظِم composer", "Confirm" : "تأكيد", + "Revoke" : "سحب ", "Tag: {name} deleted" : "تمّ حذف السمة: {name} ", "An error occurred, unable to delete the tag." : "حدث خطأ؛ تعذّرَ حذف السِّمَة.", "The tag will be deleted from all messages." : "سوف يتم حذف الوسم من جميع الرسائل.", "Plain text" : "نصٌّ جَلِيٌّ plain text", "Rich text" : "نصٌّ مُنسَّقٌ rich text", "No messages" : "لاتوجد رسائل", + "Choose" : "إختر", "Blind copy recipients only" : "مُستَلِمِي النُّسخ المَخفِيّة bcc فقط", "No subject" : "لا يوجد موضوع", "Later today – {timeLocale}" : "في وقت لاحقٍ اليوم – {timeLocale}", @@ -246,14 +244,14 @@ OC.L10N.register( "Move thread" : "أنقُل النَّظْمَة thread", "Archive thread" : "نشِّط النَّظْمَة thread", "Archive message" : "أَرْشِفِ الرسالة", - "Delete thread" : "حذف الموضوع", - "Delete message" : "إحْذِفِ الرسالة", "More actions" : "إجراءات أخرى", "Back" : "عودة", "Set custom snooze" : "تعيين غفوة مخصصة", "Edit as new message" : "تحرير كرسالة جديدة", "Create task" : "إنشاء مُهِمَّة task", "Download message" : "تنزيل الرسالة", + "Delete thread" : "حذف الموضوع", + "Delete message" : "إحْذِفِ الرسالة", "Load more" : "حمّل أكثر", "_Mark {number} read_::_Mark {number} read_" : ["ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء"], "_Mark {number} unread_::_Mark {number} unread_" : ["ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء"], @@ -274,6 +272,7 @@ OC.L10N.register( "Event created" : "تمّ إنشاء الحدث", "Could not create event" : "تعذّر إنشاء الحدث", "Create event" : "إنشاء حَدَثٍ event", + "Title" : "العنوان", "All day" : "طِوَال اليوم", "Attendees" : "المشاركون", "Select calendar" : "إختر التقويم", @@ -325,7 +324,9 @@ OC.L10N.register( "Could not snooze message" : "تعذّر غَفْوُ snooze الرسالة ", "Message was unsnoozed" : "تمّ خروج الرسالة من الغفوة", "Could not unsnooze message" : "تعذّر خروج الرسالة من الغفوة", + "Direct link copied to clipboard" : "تمّ نسخ الرابط المباشر إلى الحافظة", "Forward" : "إعادة توجيه ", + "Link copied" : "تمّ نسخ الرابط", "Move message" : "أنقُل الرسالة", "Translate" : "ترجِم", "Forward message as attachment" : "أعِد توجيه الرسالة كمُرفَقٍٍ", @@ -362,6 +363,7 @@ OC.L10N.register( "Moving" : "النقل جارٍ...", "Moving thread" : "نقل النَّظْمَة thread ", "Moving message" : "نقل الرسالة", + "Change password" : "تغيير كلمة المرور", "Remove account" : "حذف حساب", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "ستتم إزالة حساب {email} وبيانات البريد الإلكتروني المخزنة مؤقتًا من نكست كلاود، ولكن ليس من مُزوِّد بريدك الإلكتروني.", "Remove {email}" : "إزالة {email}", @@ -518,6 +520,7 @@ OC.L10N.register( "Reply to sender only" : "الرَّدَ على المُرسِل فقط", "Mark as unfavorite" : "تمييز كـ\"غَيْرَ مُفضّلَةٍ\"", "Mark as favorite" : "تمييز كـ\"مُفضّلَةٍ\"", + "From:" : "من :", "Unsubscribe via link" : "إلغاء الاشتراك عبر الرابط", "Unsubscribing will stop all messages from the mailing list {sender}" : "إلغاء الاشتراك سوف يُوقف تلقِّي جميع الرسائل من قائمة البريد {sender}", "Send unsubscribe email" : "إرسال إيميلاً لإلغاء الاشتراك", @@ -667,6 +670,7 @@ OC.L10N.register( "Certificate imported successfully" : "تمّ بنجاح استيراد الشهادة", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "فشل استيراد الشهادة. يرجى التأكد من أن المفتاح الخاص يطابق الشهادة وأنه غير محمي بعبارة مرور.", "Failed to import the certificate" : "فشل استيراد الشهادة", + "Import S/MIME certificate" : "إستيراد شهادة S/MIME ", "S/MIME certificates" : "شهادات S/MIME", "Certificate name" : "اسم الشهادة", "E-mail address" : "عنوان البريد الالكتروني", @@ -674,7 +678,6 @@ OC.L10N.register( "Delete certificate" : "حذف الشهادة", "No certificate imported yet" : "لم يتمّ استيراد أي شهادةٍ حتى الآن", "Import certificate" : "إستيراد شهادة", - "Import S/MIME certificate" : "إستيراد شهادة S/MIME ", "PKCS #12 Certificate" : "شهادة PKCS ـ #12 ", "PEM Certificate" : "شهادة PEM ", "Certificate" : "الشهادة", @@ -716,9 +719,8 @@ OC.L10N.register( "Could not load the desired message" : "تعذّر تحميل الرسالة المطلوبة", "Could not load the message" : "تعذّر تحميل الرسالة", "Error loading message" : "حدث خطأ أثناء تحميل الرسالة", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "سيتم وضع علامة على الرسائل تلقائيًا على أنها مهمة بناءً على الرسائل التي تفاعلت معها أو تم وضع علامة عليها كمهمة. في البداية، قد تضطر إلى تغيير الأهمية يدويّاً من أجل تعليم النظام، لكنه سيتحسن بمرور الوقت.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "الرسائل التي أرسلتها أنت وتتطلب ردّاً لكن مرت عدة أيام و لم يتم إرساله ستظهر هنا. ", - "Last 7 days" : "آخر 7 أيام", - "From me" : "مِنِّي أنا" + "Add share link from Files" : "إضافة رابط المشاركة من الملفات", + "Choose a file to add as attachment" : "إختَر ملفاً لإضافته كمُرفَقٍ", + "Choose a file to share as a link" : "إختَر ملفاً لمُشاركته كرابطٍ" }, "nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/l10n/ar.json b/l10n/ar.json index eb6e03efc0..cbf7b152b2 100644 --- a/l10n/ar.json +++ b/l10n/ar.json @@ -83,7 +83,6 @@ "SMTP Port" : "منفذ SMTP", "SMTP User" : "مستخدم SMTP", "SMTP Password" : "كلمة مرور SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "لكي يعمل حساب Google مع هذا التطبيق، يلزمك تمكين التحقق ثنائي العوامل من الهويّة 2FA لـ Google وإنشاء كلمة مرور للتطبيق.", "Account settings" : "إعدادت الحساب", "Aliases" : "أسماء مسعارة", "Alias to S/MIME certificate mapping" : "أسماء مُستعارة Alias لربط شهادات S/MIME", @@ -104,13 +103,13 @@ "Sieve script editor" : "محرر سكريبتات \"الغربال\" Sieve", "Mail server" : "خادم البريد", "Sieve server" : "خادم \"الغربال\" Sieve", + "Email address" : "عنوان البريد الإلكتروني", "Update alias" : "تحديث الاسم المُستعار alias ", "Rename alias" : "تغيير تسمية اسم مُستعار alias", "Show update alias form" : "عرض نموذج تحديث الاسم المُستعار alias", "Delete alias" : "حذف اسم مُستعار alias", "Go back" : "عودة", "Change name" : "تغيير الاسم", - "Email address" : "عنوان البريد الإلكتروني", "Add alias" : "إضافة اسم مُستعار alias", "Create alias" : "إنشاء اسم مُستعار alias", "Cancel" : "إلغاء", @@ -128,6 +127,7 @@ "Sorting" : "ترتيب", "Newest first" : "الأحدث أولاً", "Oldest first" : "الأقدم أولاً", + "Ok" : "موافق", "Shared with me" : "تمّت مُشاركته معي", "Privacy" : "الخصوصية", "Security" : "الأمان", @@ -146,7 +146,6 @@ "Refresh" : "تحديث", "About" : "حول", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "هذا التطبيق يشتمل على CKEditor والذي هو محرر نصوص حر مفتوح المصدر. جميع الحقوق محفوطة © لمساهمي CKEditor. مرخص وفقاً لـ GPLv2.", - "Ok" : "موافق", "No certificate" : "لا شهادة", "Certificate updated" : "تمّ تحديث الشهادة", "Could not update certificate" : "تعذّر تحديث الشهادة", @@ -185,7 +184,6 @@ "Disable formatting" : "إيقاف التنسيق", "Upload attachment" : "رفع المُرفَقات", "Add attachment from Files" : "إضافة مرفقات من الملفات", - "Add share link from Files" : "إضافة رابط المشاركة من الملفات", "Smart picker" : "اللاقط الذكي Smart picker", "Request a read receipt" : "طلب إيصال بالتسليم read reciept", "Sign message with S/MIME" : "توقيع الرسالة مع S/MIME", @@ -197,21 +195,21 @@ "Monday morning" : "أول صباح عمل في الأسبوع", "Custom date and time" : "وقت وتاريخ مخصص", "Enter a date" : "أدخِل تاريخاً", - "Choose" : "إختر", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك.","تجاوزت المرفقات حجم المرفقات المسموح به وهو {size}. يرجى مشاركة الملفات عبر رابط بدلا من ذلك."], - "Choose a file to add as attachment" : "إختَر ملفاً لإضافته كمُرفَقٍ", - "Choose a file to share as a link" : "إختَر ملفاً لمُشاركته كرابطٍ", + "Choose a file" : "إختيار ملف", "_{count} attachment_::_{count} attachments_" : ["{count} مرفقات","{count} مرفق","{count} مرفقات","{count} مرفقات","{count} مرفقات","{count} مُرفَقات"], "Untitled message" : "رسالة بدون عنوان", "Expand composer" : "تمديد الناظِم composer", "Close composer" : "إغلاق الناظِم composer", "Confirm" : "تأكيد", + "Revoke" : "سحب ", "Tag: {name} deleted" : "تمّ حذف السمة: {name} ", "An error occurred, unable to delete the tag." : "حدث خطأ؛ تعذّرَ حذف السِّمَة.", "The tag will be deleted from all messages." : "سوف يتم حذف الوسم من جميع الرسائل.", "Plain text" : "نصٌّ جَلِيٌّ plain text", "Rich text" : "نصٌّ مُنسَّقٌ rich text", "No messages" : "لاتوجد رسائل", + "Choose" : "إختر", "Blind copy recipients only" : "مُستَلِمِي النُّسخ المَخفِيّة bcc فقط", "No subject" : "لا يوجد موضوع", "Later today – {timeLocale}" : "في وقت لاحقٍ اليوم – {timeLocale}", @@ -244,14 +242,14 @@ "Move thread" : "أنقُل النَّظْمَة thread", "Archive thread" : "نشِّط النَّظْمَة thread", "Archive message" : "أَرْشِفِ الرسالة", - "Delete thread" : "حذف الموضوع", - "Delete message" : "إحْذِفِ الرسالة", "More actions" : "إجراءات أخرى", "Back" : "عودة", "Set custom snooze" : "تعيين غفوة مخصصة", "Edit as new message" : "تحرير كرسالة جديدة", "Create task" : "إنشاء مُهِمَّة task", "Download message" : "تنزيل الرسالة", + "Delete thread" : "حذف الموضوع", + "Delete message" : "إحْذِفِ الرسالة", "Load more" : "حمّل أكثر", "_Mark {number} read_::_Mark {number} read_" : ["ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء","ميز {number} بمقروء"], "_Mark {number} unread_::_Mark {number} unread_" : ["ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء","ميز {number} بغير مقروء"], @@ -272,6 +270,7 @@ "Event created" : "تمّ إنشاء الحدث", "Could not create event" : "تعذّر إنشاء الحدث", "Create event" : "إنشاء حَدَثٍ event", + "Title" : "العنوان", "All day" : "طِوَال اليوم", "Attendees" : "المشاركون", "Select calendar" : "إختر التقويم", @@ -323,7 +322,9 @@ "Could not snooze message" : "تعذّر غَفْوُ snooze الرسالة ", "Message was unsnoozed" : "تمّ خروج الرسالة من الغفوة", "Could not unsnooze message" : "تعذّر خروج الرسالة من الغفوة", + "Direct link copied to clipboard" : "تمّ نسخ الرابط المباشر إلى الحافظة", "Forward" : "إعادة توجيه ", + "Link copied" : "تمّ نسخ الرابط", "Move message" : "أنقُل الرسالة", "Translate" : "ترجِم", "Forward message as attachment" : "أعِد توجيه الرسالة كمُرفَقٍٍ", @@ -360,6 +361,7 @@ "Moving" : "النقل جارٍ...", "Moving thread" : "نقل النَّظْمَة thread ", "Moving message" : "نقل الرسالة", + "Change password" : "تغيير كلمة المرور", "Remove account" : "حذف حساب", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "ستتم إزالة حساب {email} وبيانات البريد الإلكتروني المخزنة مؤقتًا من نكست كلاود، ولكن ليس من مُزوِّد بريدك الإلكتروني.", "Remove {email}" : "إزالة {email}", @@ -516,6 +518,7 @@ "Reply to sender only" : "الرَّدَ على المُرسِل فقط", "Mark as unfavorite" : "تمييز كـ\"غَيْرَ مُفضّلَةٍ\"", "Mark as favorite" : "تمييز كـ\"مُفضّلَةٍ\"", + "From:" : "من :", "Unsubscribe via link" : "إلغاء الاشتراك عبر الرابط", "Unsubscribing will stop all messages from the mailing list {sender}" : "إلغاء الاشتراك سوف يُوقف تلقِّي جميع الرسائل من قائمة البريد {sender}", "Send unsubscribe email" : "إرسال إيميلاً لإلغاء الاشتراك", @@ -665,6 +668,7 @@ "Certificate imported successfully" : "تمّ بنجاح استيراد الشهادة", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "فشل استيراد الشهادة. يرجى التأكد من أن المفتاح الخاص يطابق الشهادة وأنه غير محمي بعبارة مرور.", "Failed to import the certificate" : "فشل استيراد الشهادة", + "Import S/MIME certificate" : "إستيراد شهادة S/MIME ", "S/MIME certificates" : "شهادات S/MIME", "Certificate name" : "اسم الشهادة", "E-mail address" : "عنوان البريد الالكتروني", @@ -672,7 +676,6 @@ "Delete certificate" : "حذف الشهادة", "No certificate imported yet" : "لم يتمّ استيراد أي شهادةٍ حتى الآن", "Import certificate" : "إستيراد شهادة", - "Import S/MIME certificate" : "إستيراد شهادة S/MIME ", "PKCS #12 Certificate" : "شهادة PKCS ـ #12 ", "PEM Certificate" : "شهادة PEM ", "Certificate" : "الشهادة", @@ -714,9 +717,8 @@ "Could not load the desired message" : "تعذّر تحميل الرسالة المطلوبة", "Could not load the message" : "تعذّر تحميل الرسالة", "Error loading message" : "حدث خطأ أثناء تحميل الرسالة", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "سيتم وضع علامة على الرسائل تلقائيًا على أنها مهمة بناءً على الرسائل التي تفاعلت معها أو تم وضع علامة عليها كمهمة. في البداية، قد تضطر إلى تغيير الأهمية يدويّاً من أجل تعليم النظام، لكنه سيتحسن بمرور الوقت.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "الرسائل التي أرسلتها أنت وتتطلب ردّاً لكن مرت عدة أيام و لم يتم إرساله ستظهر هنا. ", - "Last 7 days" : "آخر 7 أيام", - "From me" : "مِنِّي أنا" + "Add share link from Files" : "إضافة رابط المشاركة من الملفات", + "Choose a file to add as attachment" : "إختَر ملفاً لإضافته كمُرفَقٍ", + "Choose a file to share as a link" : "إختَر ملفاً لمُشاركته كرابطٍ" },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" } \ No newline at end of file diff --git a/l10n/ast.js b/l10n/ast.js index 0f65971691..6a49397d40 100644 --- a/l10n/ast.js +++ b/l10n/ast.js @@ -35,9 +35,9 @@ OC.L10N.register( "Calendar settings" : "Configuración del calendariu", "Filters" : "Filtros", "Mail server" : "Sirvidor de corréu electrónicu", + "Email address" : "Direición de corréu electrónicu", "Go back" : "Dir p'atrás", "Change name" : "Camudar el nome", - "Email address" : "Direición de corréu electrónicu", "Cancel" : "Encaboxar", "General" : "Xeneral", "Appearance" : "Aspeutu", @@ -47,6 +47,7 @@ OC.L10N.register( "Sorting" : "Orde", "Newest first" : "Primero lo nuevo", "Oldest first" : "Primero lo antiguo", + "Ok" : "D'acuerdu", "Shared with me" : "Compartióse conmigo", "Privacy" : "Privacidá", "Security" : "Seguranza", @@ -57,7 +58,6 @@ OC.L10N.register( "Send" : "Unviar", "Refresh" : "Anovar", "About" : "Tocante a", - "Ok" : "D'acuerdu", "Certificate updated" : "Anovóse'l certificáu", "Could not update certificate" : "Nun se pudo anovar el certificáu", "Send later" : "Unviar dempués", @@ -80,15 +80,16 @@ OC.L10N.register( "Tomorrow afternoon" : "Mañana pela tarde", "Monday morning" : "Llunes pela mañana", "Enter a date" : "Introduz una data", - "Choose" : "Escoyer", "Untitled message" : "Mensaxe ensin títulu", "Expand composer" : "Espander el compositor", "Close composer" : "Zarrar el compositor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "An error occurred, unable to delete the tag." : "Prodúxose un error, nun ye posible desaniciar la etiqueta.", "Plain text" : "Testu ensin formatu", "Rich text" : "Testu arriquecíu", "No messages" : "Nun hai nengún mensaxe", + "Choose" : "Escoyer", "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", "This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}", "Next week – {timeLocale}" : "La próxima selmana – {timeLocale}", @@ -103,17 +104,18 @@ OC.L10N.register( "Move thread" : "Mover el filu", "Archive thread" : "Archivar el filu", "Archive message" : "Archivar el mensaxe", - "Delete thread" : "Desaniciar el filu", - "Delete message" : "Desaniciar el mensaxe", "More actions" : "Más aiciones", "Back" : "Atrás", "Create task" : "Crear la xera", "Download message" : "Baxar el mensaxe", + "Delete thread" : "Desaniciar el filu", + "Delete message" : "Desaniciar el mensaxe", "Load more" : "Cargar más", "Report this bug" : "Informar d'esti fallu", "Event created" : "Creóse l'eventu", "Could not create event" : "Nun se pudo crear l'eventu", "Create event" : "Crear un eventu", + "Title" : "Títulu", "All day" : "Tol día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -148,6 +150,7 @@ OC.L10N.register( "Favorites" : "Favoritos", "Important info" : "Información importante", "Forward" : "Avanzar", + "Link copied" : "Copióse l'enllaz", "Move message" : "Mover el mensaxe", "Translate" : "Traducir", "View source" : "Ver l'orixe", @@ -161,6 +164,7 @@ OC.L10N.register( "Show images temporarily" : "Amosar les imáxenes temporalmente", "Quoted text" : "Cita", "Move" : "Mover", + "Change password" : "Camudar la contraseña", "Remove account" : "Quitar la cuenta", "Remove {email}" : "Quitar {email}", "Add folder" : "Amestar una carpeta", @@ -235,6 +239,8 @@ OC.L10N.register( "Could not load your message thread" : "Nun se pudo cargar el filu de mensaxes", "Loading thread" : "Cargando'l filu", "Not found" : "Nun s'atopó", + "From:" : "De:", + "To:" : "A:", "Go to latest message" : "Dir al últimu mensaxe", "The message could not be translated" : "Nun se pudo traducir el mensaxe", "Translation copied to clipboard" : "La traducción copióse al cartafueyu", @@ -308,7 +314,6 @@ OC.L10N.register( "Could not load your message" : "Nun se pudo cargar el mensaxe", "Could not load the desired message" : "Nun se pudo cargar el mensaxe deseáu", "Could not load the message" : "Nun se pudo cargar el mensaxe", - "Error loading message" : "Hebo un error al cargar el mensaxe", - "Last 7 days" : "Los últimos 7 díes" + "Error loading message" : "Hebo un error al cargar el mensaxe" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/ast.json b/l10n/ast.json index bfbdb3ba74..71be4919ce 100644 --- a/l10n/ast.json +++ b/l10n/ast.json @@ -33,9 +33,9 @@ "Calendar settings" : "Configuración del calendariu", "Filters" : "Filtros", "Mail server" : "Sirvidor de corréu electrónicu", + "Email address" : "Direición de corréu electrónicu", "Go back" : "Dir p'atrás", "Change name" : "Camudar el nome", - "Email address" : "Direición de corréu electrónicu", "Cancel" : "Encaboxar", "General" : "Xeneral", "Appearance" : "Aspeutu", @@ -45,6 +45,7 @@ "Sorting" : "Orde", "Newest first" : "Primero lo nuevo", "Oldest first" : "Primero lo antiguo", + "Ok" : "D'acuerdu", "Shared with me" : "Compartióse conmigo", "Privacy" : "Privacidá", "Security" : "Seguranza", @@ -55,7 +56,6 @@ "Send" : "Unviar", "Refresh" : "Anovar", "About" : "Tocante a", - "Ok" : "D'acuerdu", "Certificate updated" : "Anovóse'l certificáu", "Could not update certificate" : "Nun se pudo anovar el certificáu", "Send later" : "Unviar dempués", @@ -78,15 +78,16 @@ "Tomorrow afternoon" : "Mañana pela tarde", "Monday morning" : "Llunes pela mañana", "Enter a date" : "Introduz una data", - "Choose" : "Escoyer", "Untitled message" : "Mensaxe ensin títulu", "Expand composer" : "Espander el compositor", "Close composer" : "Zarrar el compositor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "An error occurred, unable to delete the tag." : "Prodúxose un error, nun ye posible desaniciar la etiqueta.", "Plain text" : "Testu ensin formatu", "Rich text" : "Testu arriquecíu", "No messages" : "Nun hai nengún mensaxe", + "Choose" : "Escoyer", "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", "This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}", "Next week – {timeLocale}" : "La próxima selmana – {timeLocale}", @@ -101,17 +102,18 @@ "Move thread" : "Mover el filu", "Archive thread" : "Archivar el filu", "Archive message" : "Archivar el mensaxe", - "Delete thread" : "Desaniciar el filu", - "Delete message" : "Desaniciar el mensaxe", "More actions" : "Más aiciones", "Back" : "Atrás", "Create task" : "Crear la xera", "Download message" : "Baxar el mensaxe", + "Delete thread" : "Desaniciar el filu", + "Delete message" : "Desaniciar el mensaxe", "Load more" : "Cargar más", "Report this bug" : "Informar d'esti fallu", "Event created" : "Creóse l'eventu", "Could not create event" : "Nun se pudo crear l'eventu", "Create event" : "Crear un eventu", + "Title" : "Títulu", "All day" : "Tol día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -146,6 +148,7 @@ "Favorites" : "Favoritos", "Important info" : "Información importante", "Forward" : "Avanzar", + "Link copied" : "Copióse l'enllaz", "Move message" : "Mover el mensaxe", "Translate" : "Traducir", "View source" : "Ver l'orixe", @@ -159,6 +162,7 @@ "Show images temporarily" : "Amosar les imáxenes temporalmente", "Quoted text" : "Cita", "Move" : "Mover", + "Change password" : "Camudar la contraseña", "Remove account" : "Quitar la cuenta", "Remove {email}" : "Quitar {email}", "Add folder" : "Amestar una carpeta", @@ -233,6 +237,8 @@ "Could not load your message thread" : "Nun se pudo cargar el filu de mensaxes", "Loading thread" : "Cargando'l filu", "Not found" : "Nun s'atopó", + "From:" : "De:", + "To:" : "A:", "Go to latest message" : "Dir al últimu mensaxe", "The message could not be translated" : "Nun se pudo traducir el mensaxe", "Translation copied to clipboard" : "La traducción copióse al cartafueyu", @@ -306,7 +312,6 @@ "Could not load your message" : "Nun se pudo cargar el mensaxe", "Could not load the desired message" : "Nun se pudo cargar el mensaxe deseáu", "Could not load the message" : "Nun se pudo cargar el mensaxe", - "Error loading message" : "Hebo un error al cargar el mensaxe", - "Last 7 days" : "Los últimos 7 díes" + "Error loading message" : "Hebo un error al cargar el mensaxe" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/az.js b/l10n/az.js index 1951c15732..d1541e541b 100644 --- a/l10n/az.js +++ b/l10n/az.js @@ -16,17 +16,16 @@ OC.L10N.register( "Signature" : "İmza", "Cancel" : "Dayandır", "General" : "Ümumi", + "Ok" : "Oldu", "Archive" : "Arxiv", "Delete" : "Sil", "Search" : "Axtarış", "Send" : "Göndər", "Refresh" : "Yenilə", - "Ok" : "Oldu", "Subject" : "Mövzu", "Enter a date" : "Tarixi əlavə edin", - "Choose" : "Seç", - "Choose a file to add as attachment" : "Əlavə ediləcək faylı seçin", "Confirm" : "Təsdiq edin", + "Choose" : "Seç", "Favorite" : "İstəkli", "Read" : "Oxu", "Back" : "Geri", @@ -41,6 +40,7 @@ OC.L10N.register( "Today" : "Bu gün", "Favorites" : "Sevimlilər", "Other" : "Digər", + "Link copied" : "Link kopyalandı", "Choose a folder to store the attachment in" : "Əlavələrin saxlanılması üçün qovluğu seçin", "Move" : "Move", "Folder name" : "Qovluq adı", @@ -54,6 +54,8 @@ OC.L10N.register( "Date" : "Date", "Tags" : "Işarələr", "Not found" : "Tapılmadı", + "From:" : "Kimdən:", + "To:" : "Kimə:", "Deleted" : "Silinib", "Help" : "Kömək", "Actions" : "İşlər", @@ -76,6 +78,7 @@ OC.L10N.register( "Junk" : "Önəmsiz", "Sent" : "Göndərildi", "Trash" : "Zibil", - "Error loading message" : "Mesajın yüklənməsində səhv baş verdi" + "Error loading message" : "Mesajın yüklənməsində səhv baş verdi", + "Choose a file to add as attachment" : "Əlavə ediləcək faylı seçin" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/az.json b/l10n/az.json index 65ea965f4c..51140dfb18 100644 --- a/l10n/az.json +++ b/l10n/az.json @@ -14,17 +14,16 @@ "Signature" : "İmza", "Cancel" : "Dayandır", "General" : "Ümumi", + "Ok" : "Oldu", "Archive" : "Arxiv", "Delete" : "Sil", "Search" : "Axtarış", "Send" : "Göndər", "Refresh" : "Yenilə", - "Ok" : "Oldu", "Subject" : "Mövzu", "Enter a date" : "Tarixi əlavə edin", - "Choose" : "Seç", - "Choose a file to add as attachment" : "Əlavə ediləcək faylı seçin", "Confirm" : "Təsdiq edin", + "Choose" : "Seç", "Favorite" : "İstəkli", "Read" : "Oxu", "Back" : "Geri", @@ -39,6 +38,7 @@ "Today" : "Bu gün", "Favorites" : "Sevimlilər", "Other" : "Digər", + "Link copied" : "Link kopyalandı", "Choose a folder to store the attachment in" : "Əlavələrin saxlanılması üçün qovluğu seçin", "Move" : "Move", "Folder name" : "Qovluq adı", @@ -52,6 +52,8 @@ "Date" : "Date", "Tags" : "Işarələr", "Not found" : "Tapılmadı", + "From:" : "Kimdən:", + "To:" : "Kimə:", "Deleted" : "Silinib", "Help" : "Kömək", "Actions" : "İşlər", @@ -74,6 +76,7 @@ "Junk" : "Önəmsiz", "Sent" : "Göndərildi", "Trash" : "Zibil", - "Error loading message" : "Mesajın yüklənməsində səhv baş verdi" + "Error loading message" : "Mesajın yüklənməsində səhv baş verdi", + "Choose a file to add as attachment" : "Əlavə ediləcək faylı seçin" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/be.js b/l10n/be.js index 9a7edc6318..da4750568d 100644 --- a/l10n/be.js +++ b/l10n/be.js @@ -37,8 +37,8 @@ OC.L10N.register( "Default folders" : "Прадвызначаныя папкі", "Filters" : "Фільтры", "Quick actions" : "Хуткія дзеянні", - "Go back" : "Назад", "Email address" : "Адрас электроннай пошты", + "Go back" : "Назад", "Cancel" : "Скасаваць", "General" : "Агульныя", "Appearance" : "Знешні выгляд", @@ -47,6 +47,7 @@ OC.L10N.register( "Sorting" : "Сартаванне", "Newest first" : "Спачатку новыя", "Oldest first" : "Спачатку старыя", + "Ok" : "ОК", "Privacy" : "Прыватнасць", "Security" : "Бяспека", "S/MIME" : "S/MIME", @@ -61,7 +62,6 @@ OC.L10N.register( "Send" : "Адправіць", "Refresh" : "Абнавіць", "About" : "Аб праграме", - "Ok" : "ОК", "Send later" : "Адправіць пазней", "From" : "Ад", "Select account" : "Выберыце ўліковы запіс", @@ -85,12 +85,12 @@ OC.L10N.register( "Tomorrow morning" : "Заўтра ранкам", "Tomorrow afternoon" : "Заўтра ў другой палове дня", "Enter a date" : "Увядзіце дату", - "Choose" : "Выбраць", "_{count} attachment_::_{count} attachments_" : ["{count} далучэнне","{count} далучэнні","{count} далучэнняў","{count} далучэнняў"], "Confirm" : "Пацвердзіць", "Rich text" : "Фарматаваны тэкст", "No messages in this folder" : "У гэтай папцы няма паведамленняў", "No messages" : "Няма паведамленняў", + "Choose" : "Выбраць", "Later today – {timeLocale}" : "Пазней сёння – {timeLocale}", "Set reminder for later today" : "Задаць напамін на пазней сёння", "Tomorrow – {timeLocale}" : "Заўтра – {timeLocale}", @@ -104,13 +104,14 @@ OC.L10N.register( "Unread" : "Непрачытанае", "Read" : "Чытаць", "Edit tags" : "Рэдагаваць тэгі", - "Delete message" : "Выдаліць паведамленне", "More actions" : "Больш дзеянняў", "Back" : "Назад", "Create task" : "Стварыць заданне", + "Delete message" : "Выдаліць паведамленне", "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне"], "Mark as unread" : "Пазначыць як непрачытанае", "Mark as read" : "Пазначыць як прачытанае", + "Title" : "Загаловак", "All day" : "Увесь дзень", "Attendees" : "Удзельнікі", "Description" : "Апісанне", @@ -130,7 +131,9 @@ OC.L10N.register( "Choose target folder" : "Выберыце мэтавую папку", "Favorites" : "Абранае", "Other" : "Іншае", + "Direct link copied to clipboard" : "Прамая спасылка скапіявана ў буфер абмену", "Forward" : "Пераслаць", + "Link copied" : "Спасылка скапіявана", "Move message" : "Перамясціць паведамленне", "Translate" : "Перакласці", "Forward message as attachment" : "Пераслаць паведамленне як далучэнне", @@ -138,6 +141,7 @@ OC.L10N.register( "Download Zip" : "Спампаваць Zip", "Quoted text" : "Цытаваны тэкст", "Move" : "Перамясціць", + "Change password" : "Змяніць пароль", "Used quota: {quota}% ({limit})" : "Выкарыстана квота: {quota}% ({limit})", "Used quota: {quota}%" : "Выкарыстана квота: {quota}%", "Remove account" : "Выдаліць уліковы запіс", @@ -192,6 +196,8 @@ OC.L10N.register( "Could not create task" : "Не ўдалося стварыць заданне", "No calendars with task list support" : "Няма календароў з падтрымкай спісаў заднняў", "Not found" : "Не знойдзена", + "From:" : "З:", + "To:" : "Да:", "Go to latest message" : "Перайсці да апошняга паведамлення", "Newest message" : "Апошняе паведамленне", "Please select languages to translate to and from" : "Выберыце, з якой мовы на якую перакладаць", @@ -278,7 +284,6 @@ OC.L10N.register( "There was a problem loading {tag}{name}{endtag}" : "Узнікла праблема з загрузкай {tag}{name}{endtag}", "Could not load your message" : "Не ўдалося загрузіць ваша паведамленне", "Could not load the message" : "Не ўдалося загрузіць паведамленне", - "Error loading message" : "Памылка пры загрузцы паведамлення", - "Last 7 days" : "Апошнія 7 дзён" + "Error loading message" : "Памылка пры загрузцы паведамлення" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/be.json b/l10n/be.json index 09b946a6b7..2a2e692a3d 100644 --- a/l10n/be.json +++ b/l10n/be.json @@ -35,8 +35,8 @@ "Default folders" : "Прадвызначаныя папкі", "Filters" : "Фільтры", "Quick actions" : "Хуткія дзеянні", - "Go back" : "Назад", "Email address" : "Адрас электроннай пошты", + "Go back" : "Назад", "Cancel" : "Скасаваць", "General" : "Агульныя", "Appearance" : "Знешні выгляд", @@ -45,6 +45,7 @@ "Sorting" : "Сартаванне", "Newest first" : "Спачатку новыя", "Oldest first" : "Спачатку старыя", + "Ok" : "ОК", "Privacy" : "Прыватнасць", "Security" : "Бяспека", "S/MIME" : "S/MIME", @@ -59,7 +60,6 @@ "Send" : "Адправіць", "Refresh" : "Абнавіць", "About" : "Аб праграме", - "Ok" : "ОК", "Send later" : "Адправіць пазней", "From" : "Ад", "Select account" : "Выберыце ўліковы запіс", @@ -83,12 +83,12 @@ "Tomorrow morning" : "Заўтра ранкам", "Tomorrow afternoon" : "Заўтра ў другой палове дня", "Enter a date" : "Увядзіце дату", - "Choose" : "Выбраць", "_{count} attachment_::_{count} attachments_" : ["{count} далучэнне","{count} далучэнні","{count} далучэнняў","{count} далучэнняў"], "Confirm" : "Пацвердзіць", "Rich text" : "Фарматаваны тэкст", "No messages in this folder" : "У гэтай папцы няма паведамленняў", "No messages" : "Няма паведамленняў", + "Choose" : "Выбраць", "Later today – {timeLocale}" : "Пазней сёння – {timeLocale}", "Set reminder for later today" : "Задаць напамін на пазней сёння", "Tomorrow – {timeLocale}" : "Заўтра – {timeLocale}", @@ -102,13 +102,14 @@ "Unread" : "Непрачытанае", "Read" : "Чытаць", "Edit tags" : "Рэдагаваць тэгі", - "Delete message" : "Выдаліць паведамленне", "More actions" : "Больш дзеянняў", "Back" : "Назад", "Create task" : "Стварыць заданне", + "Delete message" : "Выдаліць паведамленне", "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне","Пераслаць {number} як далучэнне"], "Mark as unread" : "Пазначыць як непрачытанае", "Mark as read" : "Пазначыць як прачытанае", + "Title" : "Загаловак", "All day" : "Увесь дзень", "Attendees" : "Удзельнікі", "Description" : "Апісанне", @@ -128,7 +129,9 @@ "Choose target folder" : "Выберыце мэтавую папку", "Favorites" : "Абранае", "Other" : "Іншае", + "Direct link copied to clipboard" : "Прамая спасылка скапіявана ў буфер абмену", "Forward" : "Пераслаць", + "Link copied" : "Спасылка скапіявана", "Move message" : "Перамясціць паведамленне", "Translate" : "Перакласці", "Forward message as attachment" : "Пераслаць паведамленне як далучэнне", @@ -136,6 +139,7 @@ "Download Zip" : "Спампаваць Zip", "Quoted text" : "Цытаваны тэкст", "Move" : "Перамясціць", + "Change password" : "Змяніць пароль", "Used quota: {quota}% ({limit})" : "Выкарыстана квота: {quota}% ({limit})", "Used quota: {quota}%" : "Выкарыстана квота: {quota}%", "Remove account" : "Выдаліць уліковы запіс", @@ -190,6 +194,8 @@ "Could not create task" : "Не ўдалося стварыць заданне", "No calendars with task list support" : "Няма календароў з падтрымкай спісаў заднняў", "Not found" : "Не знойдзена", + "From:" : "З:", + "To:" : "Да:", "Go to latest message" : "Перайсці да апошняга паведамлення", "Newest message" : "Апошняе паведамленне", "Please select languages to translate to and from" : "Выберыце, з якой мовы на якую перакладаць", @@ -276,7 +282,6 @@ "There was a problem loading {tag}{name}{endtag}" : "Узнікла праблема з загрузкай {tag}{name}{endtag}", "Could not load your message" : "Не ўдалося загрузіць ваша паведамленне", "Could not load the message" : "Не ўдалося загрузіць паведамленне", - "Error loading message" : "Памылка пры загрузцы паведамлення", - "Last 7 days" : "Апошнія 7 дзён" + "Error loading message" : "Памылка пры загрузцы паведамлення" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" } \ No newline at end of file diff --git a/l10n/bg.js b/l10n/bg.js index 168097942c..e05f6c6895 100644 --- a/l10n/bg.js +++ b/l10n/bg.js @@ -63,7 +63,6 @@ OC.L10N.register( "SMTP Port" : "SMTP порт", "SMTP User" : "SMTP потребител", "SMTP Password" : "SMTP парола", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "За да може Google профил да работи с това приложение, трябва да активирате двустепенно удостоверяване за Google и да генерирате парола за приложението.", "Account settings" : "Настройки на профила", "Aliases" : "Псевдоними", "Alias to S/MIME certificate mapping" : "Съпоставка на псевдоним със S/MIME сертификат", @@ -77,13 +76,13 @@ OC.L10N.register( "Calendar settings" : "Настройки на календар", "Filters" : "Филтри", "Mail server" : "Имейл сървър", + "Email address" : "Имейл адрес", "Update alias" : "Актуализиране на псевдоним", "Rename alias" : "Преименуване на псевдоним", "Show update alias form" : "Показване на формуляр за актуализиране на псевдоним", "Delete alias" : "Изтриване на псевдоним", "Go back" : "Назад", "Change name" : "Промяна на име", - "Email address" : "Имейл адрес", "Add alias" : "Добавяне на псевдоним", "Create alias" : "Създаване на псевдоним", "Cancel" : "Отказ", @@ -96,6 +95,7 @@ OC.L10N.register( "Sorting" : "Сортиране", "Newest first" : "Първо най-новият", "Oldest first" : "Първо най-старият", + "Ok" : "Добре", "Shared with me" : "Споделено с мен", "Privacy" : "Поверителност", "Security" : "Сигурност", @@ -111,7 +111,6 @@ OC.L10N.register( "Send" : "Изпрати", "Refresh" : "Опресняване", "About" : "Относно", - "Ok" : "Добре", "No certificate" : "Няма сертификат", "Certificate updated" : "Актуализиран е сертификат", "Could not update certificate" : "Сертификата не можа да се актуализира", @@ -147,7 +146,6 @@ OC.L10N.register( "Disable formatting" : "Деактивиране на форматирането", "Upload attachment" : "Прикачи файл", "Add attachment from Files" : "Прикачи от \"Файлове\"", - "Add share link from Files" : "Сподели връзка от \"Файлове\"", "Smart picker" : "Умно избиране", "Request a read receipt" : "Заявка на разписка за прочитане", "Sign message with S/MIME" : "Подписване на съобщение със S/MIME/сертификат/", @@ -159,16 +157,16 @@ OC.L10N.register( "Monday morning" : "Понеделник сутрин", "Custom date and time" : "Персонализирана дата и час", "Enter a date" : "Въведете дата", - "Choose" : "Изберете", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Прикачените файлове надвишават разрешения размер на прикачени файлове от {size}. Моля, вместо това да споделите файловете чрез връзка.","Прикачените файлове надвишават разрешения размер на прикачени файлове от {size}. Моля, вместо това да споделите файловете чрез връзка."], - "Choose a file to add as attachment" : "Избери файл за прикачване", - "Choose a file to share as a link" : "Изберете файл, който да споделите като връзка", + "Choose a file" : "Изберете файл", "_{count} attachment_::_{count} attachments_" : ["{count} прикачени файлове","{count} прикачени файлове"], "Confirm" : "Потвърдете", + "Revoke" : "Отнемане", "Plain text" : "Обикновен текст", "Rich text" : "Форматиран текст", "No messages in this folder" : "Няма съобщения", "No messages" : "Няма съобщения.", + "Choose" : "Изберете", "Blind copy recipients only" : "Само получателите на слепи копия", "No subject" : "Без /няма/ тема", "Later today – {timeLocale}" : "По-късно днес - {timeLocale}", @@ -190,13 +188,13 @@ OC.L10N.register( "Move thread" : "Преместване на нишката", "Archive thread" : "Архивна нишка", "Archive message" : "Архивиране на съобщение", - "Delete thread" : "Изтриване на нишката", - "Delete message" : "Изтриване на съобщението", "More actions" : "Повече действия", "Back" : "Назад", "Edit as new message" : "Редактиране като ново съобщение", "Create task" : "Създаване на задача", "Download message" : "Изтегляне на съобщение", + "Delete thread" : "Изтриване на нишката", + "Delete message" : "Изтриване на съобщението", "Load more" : "Зареждане на още", "_Mark {number} read_::_Mark {number} read_" : ["Маркиране {number} прочетено","Маркиране {number} прочетено"], "_Mark {number} unread_::_Mark {number} unread_" : ["Маркиране {number} непрочетено","Маркиране {number} непрочетено"], @@ -215,6 +213,7 @@ OC.L10N.register( "Event created" : "Събитието е създадено", "Could not create event" : "Несупешно създаване на събитие", "Create event" : "Създаване на събитие", + "Title" : "Заглавие", "All day" : "Цял ден", "Attendees" : "Участници", "Description" : "Описание", @@ -256,7 +255,9 @@ OC.L10N.register( "The sender of this message has asked to be notified when you read this message." : "Подателят на това съобщение поиска да бъде уведомен, когато прочетете това съобщение.", "Notify the sender" : "Уведомяване на подателя", "You sent a read confirmation to the sender of this message." : "Изпратихте потвърждение за четене на подателя на това съобщение.", + "Direct link copied to clipboard" : "Директният адрес е копиран в клипборда", "Forward" : "Напред", + "Link copied" : "Връзката е копирана", "Move message" : "Преместване на съобщението", "Translate" : "Превод", "Forward message as attachment" : "Препращане на съобщението като прикачен файл", @@ -287,6 +288,7 @@ OC.L10N.register( "Moving" : "Преместване ", "Moving thread" : "Нишката се премества", "Moving message" : "Съобщението се премества", + "Change password" : "Промяна на парола", "Remove account" : "Изтриване", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Профилът за {email} и кешираните имейл данни ще бъдат премахнати от Nextcloud, но не и от вашия доставчик на електронна поща.", "Remove {email}" : "Премахване {email}", @@ -382,6 +384,7 @@ OC.L10N.register( "An error occurred, unable to create the tag." : "Възникна грешка, не може да се създаде етикет.", "Add default tags" : "Добавяне на етикети по подразбиране", "Add tag" : "Добавяне на етикет", + "Task created" : "Задачата е създадена", "Could not load your message thread" : " Нишката на вашето съобщение не можа да се зареди", "The thread doesn't exist or has been deleted" : "Нишката не съществува или е била изтрита", "Loading thread" : "Зареждане на нишка", @@ -397,6 +400,7 @@ OC.L10N.register( "Reply to sender only" : "Отговор само на подателя", "Mark as unfavorite" : "Маркиране като непредпочитано", "Mark as favorite" : "Маркиране като любими", + "From:" : "От:", "Unsubscribing will stop all messages from the mailing list {sender}" : "Прекратяването на абонамента ще спре всички съобщения от пощенския списък {sender}", "Could not remove trusted sender {sender}" : "Не можа да бъде премахнат доверен подател {sender}", "No senders are trusted at the moment." : "В момента няма доверени податели.", @@ -505,6 +509,7 @@ OC.L10N.register( "Certificate imported successfully" : "Успешно импортиране на сертификата", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Неуспешно импортиране на сертификата. Моля, уверете се, че частният ключ съответства на сертификата и не е защитен с парола.", "Failed to import the certificate" : "Неуспешно импортиране на сертификата", + "Import S/MIME certificate" : "Импортиране на S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име на сертификата", "E-mail address" : "Имейл адрес", @@ -512,7 +517,6 @@ OC.L10N.register( "Delete certificate" : "Изтриване на сертификат", "No certificate imported yet" : "Все още няма импортиран сертификат", "Import certificate" : "Импортиране /внасяне/ на сертификат", - "Import S/MIME certificate" : "Импортиране на S/MIME сертификат", "PKCS #12 Certificate" : "Сертификат PKCS #12", "PEM Certificate" : "Сертификат PEM", "Certificate" : "Сертификат", @@ -549,8 +553,8 @@ OC.L10N.register( "Could not load the desired message" : "Желаното съобщение не може да бъде заредено", "Could not load the message" : "Съобщението не може да бъде заредено", "Error loading message" : "Грешка при зареждане съобщението", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Съобщенията автоматично ще бъдат маркирани като важни въз основа на съобщенията, с които сте взаимодействали или маркирани като важни. В началото може да се наложи ръчно да промените важността, за да обучите системата, но тя ще се подобри с течение на времето.", - "Mark all messages of this folder as read" : "Маркирай всички съобщения в папката като прочетени", - "Last 7 days" : "Последни 7 дни" + "Add share link from Files" : "Сподели връзка от \"Файлове\"", + "Choose a file to add as attachment" : "Избери файл за прикачване", + "Choose a file to share as a link" : "Изберете файл, който да споделите като връзка" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/bg.json b/l10n/bg.json index 1df6592d8a..e6c96b6f6d 100644 --- a/l10n/bg.json +++ b/l10n/bg.json @@ -61,7 +61,6 @@ "SMTP Port" : "SMTP порт", "SMTP User" : "SMTP потребител", "SMTP Password" : "SMTP парола", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "За да може Google профил да работи с това приложение, трябва да активирате двустепенно удостоверяване за Google и да генерирате парола за приложението.", "Account settings" : "Настройки на профила", "Aliases" : "Псевдоними", "Alias to S/MIME certificate mapping" : "Съпоставка на псевдоним със S/MIME сертификат", @@ -75,13 +74,13 @@ "Calendar settings" : "Настройки на календар", "Filters" : "Филтри", "Mail server" : "Имейл сървър", + "Email address" : "Имейл адрес", "Update alias" : "Актуализиране на псевдоним", "Rename alias" : "Преименуване на псевдоним", "Show update alias form" : "Показване на формуляр за актуализиране на псевдоним", "Delete alias" : "Изтриване на псевдоним", "Go back" : "Назад", "Change name" : "Промяна на име", - "Email address" : "Имейл адрес", "Add alias" : "Добавяне на псевдоним", "Create alias" : "Създаване на псевдоним", "Cancel" : "Отказ", @@ -94,6 +93,7 @@ "Sorting" : "Сортиране", "Newest first" : "Първо най-новият", "Oldest first" : "Първо най-старият", + "Ok" : "Добре", "Shared with me" : "Споделено с мен", "Privacy" : "Поверителност", "Security" : "Сигурност", @@ -109,7 +109,6 @@ "Send" : "Изпрати", "Refresh" : "Опресняване", "About" : "Относно", - "Ok" : "Добре", "No certificate" : "Няма сертификат", "Certificate updated" : "Актуализиран е сертификат", "Could not update certificate" : "Сертификата не можа да се актуализира", @@ -145,7 +144,6 @@ "Disable formatting" : "Деактивиране на форматирането", "Upload attachment" : "Прикачи файл", "Add attachment from Files" : "Прикачи от \"Файлове\"", - "Add share link from Files" : "Сподели връзка от \"Файлове\"", "Smart picker" : "Умно избиране", "Request a read receipt" : "Заявка на разписка за прочитане", "Sign message with S/MIME" : "Подписване на съобщение със S/MIME/сертификат/", @@ -157,16 +155,16 @@ "Monday morning" : "Понеделник сутрин", "Custom date and time" : "Персонализирана дата и час", "Enter a date" : "Въведете дата", - "Choose" : "Изберете", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Прикачените файлове надвишават разрешения размер на прикачени файлове от {size}. Моля, вместо това да споделите файловете чрез връзка.","Прикачените файлове надвишават разрешения размер на прикачени файлове от {size}. Моля, вместо това да споделите файловете чрез връзка."], - "Choose a file to add as attachment" : "Избери файл за прикачване", - "Choose a file to share as a link" : "Изберете файл, който да споделите като връзка", + "Choose a file" : "Изберете файл", "_{count} attachment_::_{count} attachments_" : ["{count} прикачени файлове","{count} прикачени файлове"], "Confirm" : "Потвърдете", + "Revoke" : "Отнемане", "Plain text" : "Обикновен текст", "Rich text" : "Форматиран текст", "No messages in this folder" : "Няма съобщения", "No messages" : "Няма съобщения.", + "Choose" : "Изберете", "Blind copy recipients only" : "Само получателите на слепи копия", "No subject" : "Без /няма/ тема", "Later today – {timeLocale}" : "По-късно днес - {timeLocale}", @@ -188,13 +186,13 @@ "Move thread" : "Преместване на нишката", "Archive thread" : "Архивна нишка", "Archive message" : "Архивиране на съобщение", - "Delete thread" : "Изтриване на нишката", - "Delete message" : "Изтриване на съобщението", "More actions" : "Повече действия", "Back" : "Назад", "Edit as new message" : "Редактиране като ново съобщение", "Create task" : "Създаване на задача", "Download message" : "Изтегляне на съобщение", + "Delete thread" : "Изтриване на нишката", + "Delete message" : "Изтриване на съобщението", "Load more" : "Зареждане на още", "_Mark {number} read_::_Mark {number} read_" : ["Маркиране {number} прочетено","Маркиране {number} прочетено"], "_Mark {number} unread_::_Mark {number} unread_" : ["Маркиране {number} непрочетено","Маркиране {number} непрочетено"], @@ -213,6 +211,7 @@ "Event created" : "Събитието е създадено", "Could not create event" : "Несупешно създаване на събитие", "Create event" : "Създаване на събитие", + "Title" : "Заглавие", "All day" : "Цял ден", "Attendees" : "Участници", "Description" : "Описание", @@ -254,7 +253,9 @@ "The sender of this message has asked to be notified when you read this message." : "Подателят на това съобщение поиска да бъде уведомен, когато прочетете това съобщение.", "Notify the sender" : "Уведомяване на подателя", "You sent a read confirmation to the sender of this message." : "Изпратихте потвърждение за четене на подателя на това съобщение.", + "Direct link copied to clipboard" : "Директният адрес е копиран в клипборда", "Forward" : "Напред", + "Link copied" : "Връзката е копирана", "Move message" : "Преместване на съобщението", "Translate" : "Превод", "Forward message as attachment" : "Препращане на съобщението като прикачен файл", @@ -285,6 +286,7 @@ "Moving" : "Преместване ", "Moving thread" : "Нишката се премества", "Moving message" : "Съобщението се премества", + "Change password" : "Промяна на парола", "Remove account" : "Изтриване", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Профилът за {email} и кешираните имейл данни ще бъдат премахнати от Nextcloud, но не и от вашия доставчик на електронна поща.", "Remove {email}" : "Премахване {email}", @@ -380,6 +382,7 @@ "An error occurred, unable to create the tag." : "Възникна грешка, не може да се създаде етикет.", "Add default tags" : "Добавяне на етикети по подразбиране", "Add tag" : "Добавяне на етикет", + "Task created" : "Задачата е създадена", "Could not load your message thread" : " Нишката на вашето съобщение не можа да се зареди", "The thread doesn't exist or has been deleted" : "Нишката не съществува или е била изтрита", "Loading thread" : "Зареждане на нишка", @@ -395,6 +398,7 @@ "Reply to sender only" : "Отговор само на подателя", "Mark as unfavorite" : "Маркиране като непредпочитано", "Mark as favorite" : "Маркиране като любими", + "From:" : "От:", "Unsubscribing will stop all messages from the mailing list {sender}" : "Прекратяването на абонамента ще спре всички съобщения от пощенския списък {sender}", "Could not remove trusted sender {sender}" : "Не можа да бъде премахнат доверен подател {sender}", "No senders are trusted at the moment." : "В момента няма доверени податели.", @@ -503,6 +507,7 @@ "Certificate imported successfully" : "Успешно импортиране на сертификата", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Неуспешно импортиране на сертификата. Моля, уверете се, че частният ключ съответства на сертификата и не е защитен с парола.", "Failed to import the certificate" : "Неуспешно импортиране на сертификата", + "Import S/MIME certificate" : "Импортиране на S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име на сертификата", "E-mail address" : "Имейл адрес", @@ -510,7 +515,6 @@ "Delete certificate" : "Изтриване на сертификат", "No certificate imported yet" : "Все още няма импортиран сертификат", "Import certificate" : "Импортиране /внасяне/ на сертификат", - "Import S/MIME certificate" : "Импортиране на S/MIME сертификат", "PKCS #12 Certificate" : "Сертификат PKCS #12", "PEM Certificate" : "Сертификат PEM", "Certificate" : "Сертификат", @@ -547,8 +551,8 @@ "Could not load the desired message" : "Желаното съобщение не може да бъде заредено", "Could not load the message" : "Съобщението не може да бъде заредено", "Error loading message" : "Грешка при зареждане съобщението", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Съобщенията автоматично ще бъдат маркирани като важни въз основа на съобщенията, с които сте взаимодействали или маркирани като важни. В началото може да се наложи ръчно да промените важността, за да обучите системата, но тя ще се подобри с течение на времето.", - "Mark all messages of this folder as read" : "Маркирай всички съобщения в папката като прочетени", - "Last 7 days" : "Последни 7 дни" + "Add share link from Files" : "Сподели връзка от \"Файлове\"", + "Choose a file to add as attachment" : "Избери файл за прикачване", + "Choose a file to share as a link" : "Изберете файл, който да споделите като връзка" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/bn_BD.js b/l10n/bn_BD.js index 72cde3efab..53f7504f75 100644 --- a/l10n/bn_BD.js +++ b/l10n/bn_BD.js @@ -13,13 +13,12 @@ OC.L10N.register( "Go back" : "ফিরে যাও", "Cancel" : "বাতির", "General" : "সাধারণ", + "Ok" : "তথাস্তু", "Delete" : "মুছে", "Search" : "Search", "Send" : "পাঠাও", "Refresh" : "নবোদ্যম", - "Ok" : "তথাস্তু", "Choose" : "বেছে নিন", - "Choose a file to add as attachment" : "সংযুক্তি দেয়ার জন্য একটি ফাইল নির্বাচন করুন", "Favorite" : "প্রিয়জন", "Read" : "পড়", "Edit tags" : "ট্যাগ সম্পাদনা", @@ -44,6 +43,8 @@ OC.L10N.register( "Close" : "বন্ধ", "Date" : "Date", "Tags" : "ট্যাগ", + "From:" : "হইতে:", + "To:" : "প্রতি:", "Deleted" : "মুছে ফেলা", "Help" : "সহায়িকা", "Actions" : "পদক্ষেপসমূহ", @@ -57,6 +58,7 @@ OC.L10N.register( "Group" : "গোষ্ঠীসমূহ", "Shared" : "ভাগাভাগিকৃত", "Shares" : "ভাগাভাগি", - "All" : "সবাই" + "All" : "সবাই", + "Choose a file to add as attachment" : "সংযুক্তি দেয়ার জন্য একটি ফাইল নির্বাচন করুন" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/bn_BD.json b/l10n/bn_BD.json index 85e351fa6b..3f5a0213fb 100644 --- a/l10n/bn_BD.json +++ b/l10n/bn_BD.json @@ -11,13 +11,12 @@ "Go back" : "ফিরে যাও", "Cancel" : "বাতির", "General" : "সাধারণ", + "Ok" : "তথাস্তু", "Delete" : "মুছে", "Search" : "Search", "Send" : "পাঠাও", "Refresh" : "নবোদ্যম", - "Ok" : "তথাস্তু", "Choose" : "বেছে নিন", - "Choose a file to add as attachment" : "সংযুক্তি দেয়ার জন্য একটি ফাইল নির্বাচন করুন", "Favorite" : "প্রিয়জন", "Read" : "পড়", "Edit tags" : "ট্যাগ সম্পাদনা", @@ -42,6 +41,8 @@ "Close" : "বন্ধ", "Date" : "Date", "Tags" : "ট্যাগ", + "From:" : "হইতে:", + "To:" : "প্রতি:", "Deleted" : "মুছে ফেলা", "Help" : "সহায়িকা", "Actions" : "পদক্ষেপসমূহ", @@ -55,6 +56,7 @@ "Group" : "গোষ্ঠীসমূহ", "Shared" : "ভাগাভাগিকৃত", "Shares" : "ভাগাভাগি", - "All" : "সবাই" + "All" : "সবাই", + "Choose a file to add as attachment" : "সংযুক্তি দেয়ার জন্য একটি ফাইল নির্বাচন করুন" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/br.js b/l10n/br.js index c0c747059d..6853631f73 100644 --- a/l10n/br.js +++ b/l10n/br.js @@ -27,11 +27,13 @@ OC.L10N.register( "Search" : "Klask", "Send" : "Kas", "Refresh" : "Freskaat", - "Choose" : "Dibab", "Confirm" : "Kadarnañ", + "Revoke" : "Digargañ", + "Choose" : "Dibab", "Unfavorite" : "Digaretañ", "Favorite" : "Pennrollañ", "Back" : "Distro", + "Title" : "Titl", "Description" : "Deskrivadur", "Create" : "Krouiñ", "Select" : "Dibab", @@ -45,6 +47,7 @@ OC.L10N.register( "Important info" : "Titouroù pouezus", "Other" : "All", "Forward" : "War-raok", + "Link copied" : "Liamm eilet", "Translate" : "Treiñ", "Show images" : "Diskouzh ar skeudennoù", "Message frame" : "Fram kemenadenn", @@ -63,6 +66,8 @@ OC.L10N.register( "Close" : "Serriñ", "Date" : "Deiz", "Tags" : "Klavioù", + "From:" : "Eus :", + "To:" : "Da :", "Translate to" : "Treiñ e", "Deleted" : "Dilamet", "Help" : "Skoazell", diff --git a/l10n/br.json b/l10n/br.json index 1fe3300460..0cb4691c56 100644 --- a/l10n/br.json +++ b/l10n/br.json @@ -25,11 +25,13 @@ "Search" : "Klask", "Send" : "Kas", "Refresh" : "Freskaat", - "Choose" : "Dibab", "Confirm" : "Kadarnañ", + "Revoke" : "Digargañ", + "Choose" : "Dibab", "Unfavorite" : "Digaretañ", "Favorite" : "Pennrollañ", "Back" : "Distro", + "Title" : "Titl", "Description" : "Deskrivadur", "Create" : "Krouiñ", "Select" : "Dibab", @@ -43,6 +45,7 @@ "Important info" : "Titouroù pouezus", "Other" : "All", "Forward" : "War-raok", + "Link copied" : "Liamm eilet", "Translate" : "Treiñ", "Show images" : "Diskouzh ar skeudennoù", "Message frame" : "Fram kemenadenn", @@ -61,6 +64,8 @@ "Close" : "Serriñ", "Date" : "Deiz", "Tags" : "Klavioù", + "From:" : "Eus :", + "To:" : "Da :", "Translate to" : "Treiñ e", "Deleted" : "Dilamet", "Help" : "Skoazell", diff --git a/l10n/ca.js b/l10n/ca.js index 6528d41d94..42fcbae4ce 100644 --- a/l10n/ca.js +++ b/l10n/ca.js @@ -84,7 +84,6 @@ OC.L10N.register( "SMTP Port" : "Port SMTP", "SMTP User" : "Usuari SMTP", "SMTP Password" : "Contrasenya SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Perquè el compte de Google funcioni amb aquesta aplicació, heu d'habilitar l'autenticació de doble factor per a Google i generar una contrasenya d'aplicació.", "Account settings" : "Paràmetres del compte", "Aliases" : "Àlies", "Alias to S/MIME certificate mapping" : "Mapeig d'àlies a certificat S/MIME", @@ -105,13 +104,13 @@ OC.L10N.register( "Sieve script editor" : "Editor de scripts Sieve", "Mail server" : "Servidor de correu electrònic", "Sieve server" : "Servidor de Sieve", + "Email address" : "Adreça de correu", "Update alias" : "Actualitza l'àlies", "Rename alias" : "Canvia el nom de l'àlies", "Show update alias form" : "Mostra el formulari d'actualització d’àlies", "Delete alias" : "Suprimeix l'àlies", "Go back" : "Torna enrere", "Change name" : "Canvia el nom", - "Email address" : "Adreça de correu", "Add alias" : "Afegeix àlies", "Create alias" : "Crea un àlies", "Cancel" : "Cancel·la", @@ -129,6 +128,7 @@ OC.L10N.register( "Sorting" : "Ordenació", "Newest first" : "Més nou primer", "Oldest first" : "Més antic primer", + "Ok" : "D'acord", "Privacy" : "Privadesa", "Security" : "Seguretat", "S/MIME" : "S/MIME", @@ -147,7 +147,6 @@ OC.L10N.register( "Refresh" : "Refresca", "About" : "Quant a", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Aquesta aplicació inclou CKEditor, un editor de codi obert. Copyright © Col·laboradors de CKEditor. Amb llicència sota GPLv2.", - "Ok" : "D'acord", "No certificate" : "Sense certificat", "Certificate updated" : "Certificat actualitzat", "Could not update certificate" : "No s'ha pogut actualitzar el certificat", @@ -186,7 +185,6 @@ OC.L10N.register( "Disable formatting" : "Inhabilita el format", "Upload attachment" : "Puja l'adjunt", "Add attachment from Files" : "Afegeix adjunts des dels fitxers", - "Add share link from Files" : "Afegeix un enllaç de compartició des de Fitxers", "Smart picker" : "Selector intel·ligent", "Request a read receipt" : "Sol·licitud de rebut de lectura", "Sign message with S/MIME" : "Signa el missatge amb S/MIME", @@ -198,15 +196,14 @@ OC.L10N.register( "Monday morning" : "Dilluns al matí", "Custom date and time" : "Data i hora personalitzades", "Enter a date" : "Introduïu una data", - "Choose" : "Escolliu", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El fitxer adjunt supera la mida permesa dels fitxers adjunts de {size}. Si us plau, compartiu el fitxer mitjançant l'enllaç.","Els fitxers adjunts superen la mida permesa dels fitxers adjunts de {size}. Compartiu els fitxers mitjançant un enllaç."], - "Choose a file to add as attachment" : "Trieu un fitxer per afegir als adjunts", - "Choose a file to share as a link" : "Tria un fitxer per compartir-lo com a enllaç", + "Choose a file" : "Trieu un fitxer", "_{count} attachment_::_{count} attachments_" : ["{count} fitxer adjunt","{count} fitxers adjunts"], "Untitled message" : "Missatge sense títol", "Expand composer" : "Ampliar el compositor", "Close composer" : "Tanca finestra del compositor", "Confirm" : "Confirma", + "Revoke" : "Revoca", "Tag: {name} deleted" : "Etiqueta: {name} suprimida", "An error occurred, unable to delete the tag." : "S'ha produït un error, no s'ha pogut suprimir l'etiqueta.", "The tag will be deleted from all messages." : "L'etiqueta se suprimirà de tots els missatges.", @@ -214,6 +211,7 @@ OC.L10N.register( "Rich text" : "Text enriquit", "No messages in this folder" : "No hi ha missatges en aquesta carpeta", "No messages" : "No hi ha missatges", + "Choose" : "Escolliu", "Blind copy recipients only" : "Només destinataris de còpia cega", "No subject" : "Sense Assumpte", "Later today – {timeLocale}" : "Avui més tard: {timeLocale}", @@ -246,14 +244,14 @@ OC.L10N.register( "Move thread" : "Mou el fil", "Archive thread" : "Arxiva el fil", "Archive message" : "Arxiva el missatge", - "Delete thread" : "Esborra el fil", - "Delete message" : "Suprimeix el missatge", "More actions" : "Més accions", "Back" : "Torna", "Set custom snooze" : "Estableix una posposació personalitzada", "Edit as new message" : "Edició com a un missatge nou", "Create task" : "Crea una tasca", "Download message" : "Baixa el missatge", + "Delete thread" : "Esborra el fil", + "Delete message" : "Suprimeix el missatge", "Load more" : "Carrega'n més", "_Mark {number} read_::_Mark {number} read_" : ["Marca {number} com a llegit","Marca {number} com a llegits"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marca {number} com a no llegit","Marca {number} com a no llegits"], @@ -274,6 +272,7 @@ OC.L10N.register( "Event created" : "Esdeveniment creat", "Could not create event" : "No s’ha pogut crear l'esdeveniment", "Create event" : "Crea un esdeveniment", + "Title" : "Títol", "All day" : "Tot el dia", "Attendees" : "Assistents", "Select calendar" : "Selecció d'un calendari", @@ -325,7 +324,9 @@ OC.L10N.register( "Could not snooze message" : "No s'ha pogut posposar el missatge", "Message was unsnoozed" : "El missatge s'ha reactivat", "Could not unsnooze message" : "No s'ha pogut reactivar el missatge", + "Direct link copied to clipboard" : "Enllaç directe copiat al porta-retalls", "Forward" : "Reenvia", + "Link copied" : "S'ha copiat l'enllaç", "Move message" : "Mou el missatge", "Translate" : "Tradueix", "Forward message as attachment" : "Reenvia el missatge com a adjunt", @@ -520,6 +521,8 @@ OC.L10N.register( "Reply to sender only" : "Respon només al remitent", "Mark as unfavorite" : "Marca com a no favorit", "Mark as favorite" : "Marca'l com a preferit", + "From:" : "De:", + "To:" : "A:", "Unsubscribe via link" : "Cancel·la la subscripció mitjançant l'enllaç", "Unsubscribing will stop all messages from the mailing list {sender}" : "La cancel·lació de la subscripció aturarà tots els missatges de la llista de correu {sender}", "Send unsubscribe email" : "Envia un correu electrònic de cancel·lació de la subscripció", @@ -669,6 +672,7 @@ OC.L10N.register( "Certificate imported successfully" : "El certificat s'ha importat correctament", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "No s'ha pogut importar el certificat. Assegureu-vos que la clau privada coincideixi amb el certificat i que no estigui protegida per una frase de contrasenya.", "Failed to import the certificate" : "No s'ha pogut importar el certificat", + "Import S/MIME certificate" : "Importa el certificat S/MIME", "S/MIME certificates" : "Certificats S/MIME", "Certificate name" : "Nom del certificat", "E-mail address" : "Adreça de correu electrònic", @@ -676,7 +680,6 @@ OC.L10N.register( "Delete certificate" : "Suprimeix el certificat", "No certificate imported yet" : "Encara no s'ha importat cap certificat", "Import certificate" : "Importa el certificat", - "Import S/MIME certificate" : "Importa el certificat S/MIME", "PKCS #12 Certificate" : "Certificat PKCS #12", "PEM Certificate" : "Certificat PEM", "Certificate" : "Certificat", @@ -719,10 +722,8 @@ OC.L10N.register( "Could not load the desired message" : "No s’ha pogut carregar el missatge desitjat", "Could not load the message" : "No s’ha pogut carregar el missatge", "Error loading message" : "S'ha produït un error mentre es carregava el missatge", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Els missatges es marcaran automàticament com a importants en funció dels missatges amb els quals heu interaccionat o marcat com a importants. Al principi és possible que hageu de canviar manualment la importància per ensenyar el sistema, però millorarà amb el temps.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Aquí es mostraran els missatges enviats per tu que requereixen una resposta però que no n'hagis rebut cap al cap d'un parell de dies.", - "Mark all messages of this folder as read" : "Marca tots els missatges d'aquesta carpeta com a llegits", - "Last 7 days" : "Darrers 7 dies", - "From me" : "De mi" + "Add share link from Files" : "Afegeix un enllaç de compartició des de Fitxers", + "Choose a file to add as attachment" : "Trieu un fitxer per afegir als adjunts", + "Choose a file to share as a link" : "Tria un fitxer per compartir-lo com a enllaç" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/ca.json b/l10n/ca.json index 279febdaa4..5e53f26fec 100644 --- a/l10n/ca.json +++ b/l10n/ca.json @@ -82,7 +82,6 @@ "SMTP Port" : "Port SMTP", "SMTP User" : "Usuari SMTP", "SMTP Password" : "Contrasenya SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Perquè el compte de Google funcioni amb aquesta aplicació, heu d'habilitar l'autenticació de doble factor per a Google i generar una contrasenya d'aplicació.", "Account settings" : "Paràmetres del compte", "Aliases" : "Àlies", "Alias to S/MIME certificate mapping" : "Mapeig d'àlies a certificat S/MIME", @@ -103,13 +102,13 @@ "Sieve script editor" : "Editor de scripts Sieve", "Mail server" : "Servidor de correu electrònic", "Sieve server" : "Servidor de Sieve", + "Email address" : "Adreça de correu", "Update alias" : "Actualitza l'àlies", "Rename alias" : "Canvia el nom de l'àlies", "Show update alias form" : "Mostra el formulari d'actualització d’àlies", "Delete alias" : "Suprimeix l'àlies", "Go back" : "Torna enrere", "Change name" : "Canvia el nom", - "Email address" : "Adreça de correu", "Add alias" : "Afegeix àlies", "Create alias" : "Crea un àlies", "Cancel" : "Cancel·la", @@ -127,6 +126,7 @@ "Sorting" : "Ordenació", "Newest first" : "Més nou primer", "Oldest first" : "Més antic primer", + "Ok" : "D'acord", "Privacy" : "Privadesa", "Security" : "Seguretat", "S/MIME" : "S/MIME", @@ -145,7 +145,6 @@ "Refresh" : "Refresca", "About" : "Quant a", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Aquesta aplicació inclou CKEditor, un editor de codi obert. Copyright © Col·laboradors de CKEditor. Amb llicència sota GPLv2.", - "Ok" : "D'acord", "No certificate" : "Sense certificat", "Certificate updated" : "Certificat actualitzat", "Could not update certificate" : "No s'ha pogut actualitzar el certificat", @@ -184,7 +183,6 @@ "Disable formatting" : "Inhabilita el format", "Upload attachment" : "Puja l'adjunt", "Add attachment from Files" : "Afegeix adjunts des dels fitxers", - "Add share link from Files" : "Afegeix un enllaç de compartició des de Fitxers", "Smart picker" : "Selector intel·ligent", "Request a read receipt" : "Sol·licitud de rebut de lectura", "Sign message with S/MIME" : "Signa el missatge amb S/MIME", @@ -196,15 +194,14 @@ "Monday morning" : "Dilluns al matí", "Custom date and time" : "Data i hora personalitzades", "Enter a date" : "Introduïu una data", - "Choose" : "Escolliu", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El fitxer adjunt supera la mida permesa dels fitxers adjunts de {size}. Si us plau, compartiu el fitxer mitjançant l'enllaç.","Els fitxers adjunts superen la mida permesa dels fitxers adjunts de {size}. Compartiu els fitxers mitjançant un enllaç."], - "Choose a file to add as attachment" : "Trieu un fitxer per afegir als adjunts", - "Choose a file to share as a link" : "Tria un fitxer per compartir-lo com a enllaç", + "Choose a file" : "Trieu un fitxer", "_{count} attachment_::_{count} attachments_" : ["{count} fitxer adjunt","{count} fitxers adjunts"], "Untitled message" : "Missatge sense títol", "Expand composer" : "Ampliar el compositor", "Close composer" : "Tanca finestra del compositor", "Confirm" : "Confirma", + "Revoke" : "Revoca", "Tag: {name} deleted" : "Etiqueta: {name} suprimida", "An error occurred, unable to delete the tag." : "S'ha produït un error, no s'ha pogut suprimir l'etiqueta.", "The tag will be deleted from all messages." : "L'etiqueta se suprimirà de tots els missatges.", @@ -212,6 +209,7 @@ "Rich text" : "Text enriquit", "No messages in this folder" : "No hi ha missatges en aquesta carpeta", "No messages" : "No hi ha missatges", + "Choose" : "Escolliu", "Blind copy recipients only" : "Només destinataris de còpia cega", "No subject" : "Sense Assumpte", "Later today – {timeLocale}" : "Avui més tard: {timeLocale}", @@ -244,14 +242,14 @@ "Move thread" : "Mou el fil", "Archive thread" : "Arxiva el fil", "Archive message" : "Arxiva el missatge", - "Delete thread" : "Esborra el fil", - "Delete message" : "Suprimeix el missatge", "More actions" : "Més accions", "Back" : "Torna", "Set custom snooze" : "Estableix una posposació personalitzada", "Edit as new message" : "Edició com a un missatge nou", "Create task" : "Crea una tasca", "Download message" : "Baixa el missatge", + "Delete thread" : "Esborra el fil", + "Delete message" : "Suprimeix el missatge", "Load more" : "Carrega'n més", "_Mark {number} read_::_Mark {number} read_" : ["Marca {number} com a llegit","Marca {number} com a llegits"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marca {number} com a no llegit","Marca {number} com a no llegits"], @@ -272,6 +270,7 @@ "Event created" : "Esdeveniment creat", "Could not create event" : "No s’ha pogut crear l'esdeveniment", "Create event" : "Crea un esdeveniment", + "Title" : "Títol", "All day" : "Tot el dia", "Attendees" : "Assistents", "Select calendar" : "Selecció d'un calendari", @@ -323,7 +322,9 @@ "Could not snooze message" : "No s'ha pogut posposar el missatge", "Message was unsnoozed" : "El missatge s'ha reactivat", "Could not unsnooze message" : "No s'ha pogut reactivar el missatge", + "Direct link copied to clipboard" : "Enllaç directe copiat al porta-retalls", "Forward" : "Reenvia", + "Link copied" : "S'ha copiat l'enllaç", "Move message" : "Mou el missatge", "Translate" : "Tradueix", "Forward message as attachment" : "Reenvia el missatge com a adjunt", @@ -518,6 +519,8 @@ "Reply to sender only" : "Respon només al remitent", "Mark as unfavorite" : "Marca com a no favorit", "Mark as favorite" : "Marca'l com a preferit", + "From:" : "De:", + "To:" : "A:", "Unsubscribe via link" : "Cancel·la la subscripció mitjançant l'enllaç", "Unsubscribing will stop all messages from the mailing list {sender}" : "La cancel·lació de la subscripció aturarà tots els missatges de la llista de correu {sender}", "Send unsubscribe email" : "Envia un correu electrònic de cancel·lació de la subscripció", @@ -667,6 +670,7 @@ "Certificate imported successfully" : "El certificat s'ha importat correctament", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "No s'ha pogut importar el certificat. Assegureu-vos que la clau privada coincideixi amb el certificat i que no estigui protegida per una frase de contrasenya.", "Failed to import the certificate" : "No s'ha pogut importar el certificat", + "Import S/MIME certificate" : "Importa el certificat S/MIME", "S/MIME certificates" : "Certificats S/MIME", "Certificate name" : "Nom del certificat", "E-mail address" : "Adreça de correu electrònic", @@ -674,7 +678,6 @@ "Delete certificate" : "Suprimeix el certificat", "No certificate imported yet" : "Encara no s'ha importat cap certificat", "Import certificate" : "Importa el certificat", - "Import S/MIME certificate" : "Importa el certificat S/MIME", "PKCS #12 Certificate" : "Certificat PKCS #12", "PEM Certificate" : "Certificat PEM", "Certificate" : "Certificat", @@ -717,10 +720,8 @@ "Could not load the desired message" : "No s’ha pogut carregar el missatge desitjat", "Could not load the message" : "No s’ha pogut carregar el missatge", "Error loading message" : "S'ha produït un error mentre es carregava el missatge", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Els missatges es marcaran automàticament com a importants en funció dels missatges amb els quals heu interaccionat o marcat com a importants. Al principi és possible que hageu de canviar manualment la importància per ensenyar el sistema, però millorarà amb el temps.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Aquí es mostraran els missatges enviats per tu que requereixen una resposta però que no n'hagis rebut cap al cap d'un parell de dies.", - "Mark all messages of this folder as read" : "Marca tots els missatges d'aquesta carpeta com a llegits", - "Last 7 days" : "Darrers 7 dies", - "From me" : "De mi" + "Add share link from Files" : "Afegeix un enllaç de compartició des de Fitxers", + "Choose a file to add as attachment" : "Trieu un fitxer per afegir als adjunts", + "Choose a file to share as a link" : "Tria un fitxer per compartir-lo com a enllaç" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/cs.js b/l10n/cs.js index 5ed060fe85..65db197e05 100644 --- a/l10n/cs.js +++ b/l10n/cs.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "SMTP port", "SMTP User" : "SMTP uživatel", "SMTP Password" : "SMTP heslo", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Aby Google účet fungoval s touto aplikací, je třeba v něm zapnout dvoufaktorové ověřování a vytvořit tam heslo pro tuto aplikaci.", "Account settings" : "Nastavení účtu", "Aliases" : "Alternativní názvy", "Alias to S/MIME certificate mapping" : "Alternativní název mapování S/MIME certifikátu", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "E-mailový server", "Sieve server" : "Sieve server", "Folder search" : "Hledání ve složce", + "Email address" : "E-mailová adresa", "Update alias" : "Aktualizovat alternativní název", "Rename alias" : "Přejmenovat alternativní název", "Show update alias form" : "Zobrazit formulář pro aktualizaci alternativního názvu", "Delete alias" : "Smazat alternativní název", "Go back" : "Jít zpět", "Change name" : "Změnit název", - "Email address" : "E-mailová adresa", "Add alias" : "Přidat alternativní název", "Create alias" : "Vytvořit alternativní název", "Cancel" : "Storno", @@ -150,13 +149,16 @@ OC.L10N.register( "Sorting" : "Řazení", "Newest first" : "Nejnovější jako první", "Oldest first" : "Nejstarší jako první", + "New text block" : "Nový textový blok", + "Title of the text block" : "Nadpis textového bloku", + "Content of the text block" : "Obsah textového bloku", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Zástupné obrázky z Gravatar a favicons", "Reply position" : "Pozice odpovědi", "Top" : "Nahoře", "Bottom" : "Dole", "Text blocks" : "Textové bloky", "Reusable pieces of text that can be inserted in messages" : "Opakovaně použitelné kousky textu, které je možné vkládat do zpráv", - "New text block" : "Nový textový blok", "Shared with me" : "Sdíleno se mnou", "Privacy" : "Soukromí", "Data collection" : "Shromažďování dat", @@ -184,12 +186,12 @@ OC.L10N.register( "Search" : "Hledat", "Send" : "Odeslat", "Refresh" : "Načíst znovu", + "Heading1" : "Nadpis 1", + "Heading2" : "Nadpis 2", + "Heading3" : "Nadpis 3", "About" : "O aplikaci", "Acknowledgements" : "Poděkování", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Tato aplikace obsahuje CKEditor – opensource editor. Autorská práva © přispěvatelé do projektu CKEditor. Licencováno pod GPLv2.", - "Title of the text block" : "Nadpis textového bloku", - "Content of the text block" : "Obsah textového bloku", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automaticky vytvářet povinné schůzky v kalendáři", "No certificate" : "Žádný certifikát", "Certificate updated" : "Certifikát aktualizován", @@ -233,7 +235,6 @@ OC.L10N.register( "Disable formatting" : "Odebrat formátování", "Upload attachment" : "Nahrát přílohu", "Add attachment from Files" : "Přidat přílohu ze Souborů", - "Add share link from Files" : "Přidat odkaz na sdílení ze Souborů", "Smart picker" : "Inteligentní výběr", "Request a read receipt" : "Vyžádat potvrzení o přečtení", "Sign message with S/MIME" : "Podepsat zprávu pomocí S/MIME", @@ -245,15 +246,15 @@ OC.L10N.register( "Monday morning" : "V pondělí ráno", "Custom date and time" : "Uživatelsky určené datum a čas", "Enter a date" : "Zadejte datum", - "Choose" : "Vybrat", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Příloha překračuje povolenou velikost příloh {size}. Nasdílejte ho namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu."], - "Choose a file to add as attachment" : "Vyberte soubor k přiložení", - "Choose a file to share as a link" : "Zvolte soubor, který sdílet jako odkaz", + "Choose a file" : "Vyberte soubor", "_{count} attachment_::_{count} attachments_" : ["{count} příloha","{count} přílohy","{count} příloh","{count} přílohy"], "Untitled message" : "Zpráva bez názvu", "Expand composer" : "Rozbalit dialog psaní", "Close composer" : "Zavřít dialog psaní", "Confirm" : "Potvrdit", + "Revoke" : "Odvolat", + "Delegation" : "Delegování", "Tag: {name} deleted" : "Štítek: {name} smazán", "An error occurred, unable to delete the tag." : "Došlo k chybě, štítek se nepodařilo smazat.", "The tag will be deleted from all messages." : "Štítek bude smazán ze všech zpráv.", @@ -261,6 +262,7 @@ OC.L10N.register( "Rich text" : "Formátovaný text", "No messages in this folder" : "V této složce nejsou žádné zprávy", "No messages" : "Žádné zprávy", + "Choose" : "Vybrat", "Blind copy recipients only" : "Pouze příjemci skryté kopie", "No subject" : "Žádný předmět", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Koncept:{markup-end} {subject}", @@ -300,8 +302,6 @@ OC.L10N.register( "Move Message" : "Přesunout zprávu", "Archive thread" : "Archivovat vlákno", "Archive message" : "Archivovat zprávu", - "Delete thread" : "Smazat vlákno", - "Delete message" : "Smazat zprávu", "More actions" : "Další akce", "Back" : "Zpět", "Set custom snooze" : "Nastavit uživatelsky uživatelsky určené odložení", @@ -309,6 +309,8 @@ OC.L10N.register( "Reply with meeting" : "Odpovědět schůzkou", "Create task" : "Vytvořit úkol", "Download message" : "Stáhnout si zprávu", + "Delete thread" : "Smazat vlákno", + "Delete message" : "Smazat zprávu", "Back to all actions" : "Zpět ke všem akcím", "Manage quick actions" : "Zpravovat rychlé akce", "Load more" : "Načíst více", @@ -332,6 +334,7 @@ OC.L10N.register( "Event created" : "Událost vytvořena", "Could not create event" : "Událost se nedaří vytvořit", "Create event" : "Vytvořit událost", + "Title" : "Titul", "All day" : "Celý den", "Attendees" : "Účastníci", "You can only invite attendees if your account has an email address set" : "Účastníky můžete pozvat pouze pokud váš účet má nastavenou e-mailovou adresu", @@ -402,7 +405,9 @@ OC.L10N.register( "Could not snooze message" : "Zprávu se nepodařilo odložit", "Message was unsnoozed" : "Odložení zprávy bylo zrušeno", "Could not unsnooze message" : "Nepodařilo se zrušit odložení zprávy", + "Direct link copied to clipboard" : "Přímý odkaz zkopírován do schránky", "Forward" : "Přeposlat", + "Link copied" : "Odkaz zkopírován", "Move message" : "Přesunout zprávu", "Translate" : "Překládání", "Forward message as attachment" : "Přeposlat zprávu jako přílohu", @@ -442,6 +447,7 @@ OC.L10N.register( "Moving message" : "Přesouvá se zpráva", "This account cannot connect" : "Tento účet se nemůže připojit", "Connection failed. Please verify your information and try again" : "Připojení se nezdařilo. Ověřte své informace a zkuste to znovu", + "Change password" : "Změnit heslo", "Used quota: {quota}% ({limit})" : "Využitá kvóta: {quota}% ({limit})", "Used quota: {quota}%" : "Využitá kvóta: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Schránku nebylo možné vytvořit. Název nejspíš obsahuje neplatné znaky. Zkuste jiný název.", @@ -622,6 +628,10 @@ OC.L10N.register( "Reply to sender only" : "Odpovědět pouze odesílateli", "Mark as unfavorite" : "Zrušit označení jako oblíbeného", "Mark as favorite" : "Označit jako oblíbené", + "From:" : "Od:", + "To:" : "Pro:", + "Cc:" : "Kopie:", + "Bcc:" : "Skrytá kopie:", "Unsubscribe via link" : "Zrušit (prostřednictvím odkazu) přihlášení se k odběru", "Unsubscribing will stop all messages from the mailing list {sender}" : "Zrušení přihlášení se k odběru zastaví veškeré zprávy z e-mailové distribuce {sender}", "Send unsubscribe email" : "Odeslat e-mail ohledně zrušení odběru", @@ -818,6 +828,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certifikát úspěšně naimportován", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Certifikát se nepodařilo naimportovat. Ověřte, že se soukromý klíč shoduje s certifikátem a že není chráněn heslovou frází.", "Failed to import the certificate" : "Certifikát se nepodařilo naimportovat", + "Import S/MIME certificate" : "Naimportovat S/MIME certifikát", "S/MIME certificates" : "S/MIME certifikáty", "Certificate name" : "Název certifikátu", "E-mail address" : "E-mailová adresa", @@ -825,7 +836,6 @@ OC.L10N.register( "Delete certificate" : "Smazat certifikát", "No certificate imported yet" : "Zatím nenaimportovány žádné certifikáty", "Import certificate" : "Naimportovat certifikát", - "Import S/MIME certificate" : "Naimportovat S/MIME certifikát", "PKCS #12 Certificate" : "PKCS #12 certifkát", "PEM Certificate" : "PEM certifikát", "Certificate" : "Certifikát", @@ -886,11 +896,8 @@ OC.L10N.register( "Could not load the desired message" : "Nedaří se načíst vyžádanou zprávu", "Could not load the message" : "Zprávu se nedaří načíst", "Error loading message" : "Chyba při načtení zprávy", - "Determine importance using machine learning" : "Zjistit důležitost pomocí strojového učení", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Správy budou automaticky označené jako důležité v závislosti na tom, jakými správami jste se zabývali nebo označili jako důležité. Na začátku bude třeba měnit důležitost ručně a systém tak naučit, ale po čase se to zlepší.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Vámi zaslané zprávy, které vyžadují odpověď, ale ani po několika dnech se tak nestalo, se zobrazí zde.", - "Mark all messages of this folder as read" : "Označit všechny zprávy v této složce jako přečtené", - "Last 7 days" : "Uplynulých 7 dnů", - "From me" : "Ode mne" + "Add share link from Files" : "Přidat odkaz na sdílení ze Souborů", + "Choose a file to add as attachment" : "Vyberte soubor k přiložení", + "Choose a file to share as a link" : "Zvolte soubor, který sdílet jako odkaz" }, "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/l10n/cs.json b/l10n/cs.json index a5154e70c8..8408cf49aa 100644 --- a/l10n/cs.json +++ b/l10n/cs.json @@ -91,7 +91,6 @@ "SMTP Port" : "SMTP port", "SMTP User" : "SMTP uživatel", "SMTP Password" : "SMTP heslo", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Aby Google účet fungoval s touto aplikací, je třeba v něm zapnout dvoufaktorové ověřování a vytvořit tam heslo pro tuto aplikaci.", "Account settings" : "Nastavení účtu", "Aliases" : "Alternativní názvy", "Alias to S/MIME certificate mapping" : "Alternativní název mapování S/MIME certifikátu", @@ -115,13 +114,13 @@ "Mail server" : "E-mailový server", "Sieve server" : "Sieve server", "Folder search" : "Hledání ve složce", + "Email address" : "E-mailová adresa", "Update alias" : "Aktualizovat alternativní název", "Rename alias" : "Přejmenovat alternativní název", "Show update alias form" : "Zobrazit formulář pro aktualizaci alternativního názvu", "Delete alias" : "Smazat alternativní název", "Go back" : "Jít zpět", "Change name" : "Změnit název", - "Email address" : "E-mailová adresa", "Add alias" : "Přidat alternativní název", "Create alias" : "Vytvořit alternativní název", "Cancel" : "Storno", @@ -148,13 +147,16 @@ "Sorting" : "Řazení", "Newest first" : "Nejnovější jako první", "Oldest first" : "Nejstarší jako první", + "New text block" : "Nový textový blok", + "Title of the text block" : "Nadpis textového bloku", + "Content of the text block" : "Obsah textového bloku", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Zástupné obrázky z Gravatar a favicons", "Reply position" : "Pozice odpovědi", "Top" : "Nahoře", "Bottom" : "Dole", "Text blocks" : "Textové bloky", "Reusable pieces of text that can be inserted in messages" : "Opakovaně použitelné kousky textu, které je možné vkládat do zpráv", - "New text block" : "Nový textový blok", "Shared with me" : "Sdíleno se mnou", "Privacy" : "Soukromí", "Data collection" : "Shromažďování dat", @@ -182,12 +184,12 @@ "Search" : "Hledat", "Send" : "Odeslat", "Refresh" : "Načíst znovu", + "Heading1" : "Nadpis 1", + "Heading2" : "Nadpis 2", + "Heading3" : "Nadpis 3", "About" : "O aplikaci", "Acknowledgements" : "Poděkování", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Tato aplikace obsahuje CKEditor – opensource editor. Autorská práva © přispěvatelé do projektu CKEditor. Licencováno pod GPLv2.", - "Title of the text block" : "Nadpis textového bloku", - "Content of the text block" : "Obsah textového bloku", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automaticky vytvářet povinné schůzky v kalendáři", "No certificate" : "Žádný certifikát", "Certificate updated" : "Certifikát aktualizován", @@ -231,7 +233,6 @@ "Disable formatting" : "Odebrat formátování", "Upload attachment" : "Nahrát přílohu", "Add attachment from Files" : "Přidat přílohu ze Souborů", - "Add share link from Files" : "Přidat odkaz na sdílení ze Souborů", "Smart picker" : "Inteligentní výběr", "Request a read receipt" : "Vyžádat potvrzení o přečtení", "Sign message with S/MIME" : "Podepsat zprávu pomocí S/MIME", @@ -243,15 +244,15 @@ "Monday morning" : "V pondělí ráno", "Custom date and time" : "Uživatelsky určené datum a čas", "Enter a date" : "Zadejte datum", - "Choose" : "Vybrat", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Příloha překračuje povolenou velikost příloh {size}. Nasdílejte ho namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu.","Přílohy překračují povolenou velikost příloh {size}. Nasdílejte je namísto toho prostřednictvím odkazu."], - "Choose a file to add as attachment" : "Vyberte soubor k přiložení", - "Choose a file to share as a link" : "Zvolte soubor, který sdílet jako odkaz", + "Choose a file" : "Vyberte soubor", "_{count} attachment_::_{count} attachments_" : ["{count} příloha","{count} přílohy","{count} příloh","{count} přílohy"], "Untitled message" : "Zpráva bez názvu", "Expand composer" : "Rozbalit dialog psaní", "Close composer" : "Zavřít dialog psaní", "Confirm" : "Potvrdit", + "Revoke" : "Odvolat", + "Delegation" : "Delegování", "Tag: {name} deleted" : "Štítek: {name} smazán", "An error occurred, unable to delete the tag." : "Došlo k chybě, štítek se nepodařilo smazat.", "The tag will be deleted from all messages." : "Štítek bude smazán ze všech zpráv.", @@ -259,6 +260,7 @@ "Rich text" : "Formátovaný text", "No messages in this folder" : "V této složce nejsou žádné zprávy", "No messages" : "Žádné zprávy", + "Choose" : "Vybrat", "Blind copy recipients only" : "Pouze příjemci skryté kopie", "No subject" : "Žádný předmět", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Koncept:{markup-end} {subject}", @@ -298,8 +300,6 @@ "Move Message" : "Přesunout zprávu", "Archive thread" : "Archivovat vlákno", "Archive message" : "Archivovat zprávu", - "Delete thread" : "Smazat vlákno", - "Delete message" : "Smazat zprávu", "More actions" : "Další akce", "Back" : "Zpět", "Set custom snooze" : "Nastavit uživatelsky uživatelsky určené odložení", @@ -307,6 +307,8 @@ "Reply with meeting" : "Odpovědět schůzkou", "Create task" : "Vytvořit úkol", "Download message" : "Stáhnout si zprávu", + "Delete thread" : "Smazat vlákno", + "Delete message" : "Smazat zprávu", "Back to all actions" : "Zpět ke všem akcím", "Manage quick actions" : "Zpravovat rychlé akce", "Load more" : "Načíst více", @@ -330,6 +332,7 @@ "Event created" : "Událost vytvořena", "Could not create event" : "Událost se nedaří vytvořit", "Create event" : "Vytvořit událost", + "Title" : "Titul", "All day" : "Celý den", "Attendees" : "Účastníci", "You can only invite attendees if your account has an email address set" : "Účastníky můžete pozvat pouze pokud váš účet má nastavenou e-mailovou adresu", @@ -400,7 +403,9 @@ "Could not snooze message" : "Zprávu se nepodařilo odložit", "Message was unsnoozed" : "Odložení zprávy bylo zrušeno", "Could not unsnooze message" : "Nepodařilo se zrušit odložení zprávy", + "Direct link copied to clipboard" : "Přímý odkaz zkopírován do schránky", "Forward" : "Přeposlat", + "Link copied" : "Odkaz zkopírován", "Move message" : "Přesunout zprávu", "Translate" : "Překládání", "Forward message as attachment" : "Přeposlat zprávu jako přílohu", @@ -440,6 +445,7 @@ "Moving message" : "Přesouvá se zpráva", "This account cannot connect" : "Tento účet se nemůže připojit", "Connection failed. Please verify your information and try again" : "Připojení se nezdařilo. Ověřte své informace a zkuste to znovu", + "Change password" : "Změnit heslo", "Used quota: {quota}% ({limit})" : "Využitá kvóta: {quota}% ({limit})", "Used quota: {quota}%" : "Využitá kvóta: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Schránku nebylo možné vytvořit. Název nejspíš obsahuje neplatné znaky. Zkuste jiný název.", @@ -620,6 +626,10 @@ "Reply to sender only" : "Odpovědět pouze odesílateli", "Mark as unfavorite" : "Zrušit označení jako oblíbeného", "Mark as favorite" : "Označit jako oblíbené", + "From:" : "Od:", + "To:" : "Pro:", + "Cc:" : "Kopie:", + "Bcc:" : "Skrytá kopie:", "Unsubscribe via link" : "Zrušit (prostřednictvím odkazu) přihlášení se k odběru", "Unsubscribing will stop all messages from the mailing list {sender}" : "Zrušení přihlášení se k odběru zastaví veškeré zprávy z e-mailové distribuce {sender}", "Send unsubscribe email" : "Odeslat e-mail ohledně zrušení odběru", @@ -816,6 +826,7 @@ "Certificate imported successfully" : "Certifikát úspěšně naimportován", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Certifikát se nepodařilo naimportovat. Ověřte, že se soukromý klíč shoduje s certifikátem a že není chráněn heslovou frází.", "Failed to import the certificate" : "Certifikát se nepodařilo naimportovat", + "Import S/MIME certificate" : "Naimportovat S/MIME certifikát", "S/MIME certificates" : "S/MIME certifikáty", "Certificate name" : "Název certifikátu", "E-mail address" : "E-mailová adresa", @@ -823,7 +834,6 @@ "Delete certificate" : "Smazat certifikát", "No certificate imported yet" : "Zatím nenaimportovány žádné certifikáty", "Import certificate" : "Naimportovat certifikát", - "Import S/MIME certificate" : "Naimportovat S/MIME certifikát", "PKCS #12 Certificate" : "PKCS #12 certifkát", "PEM Certificate" : "PEM certifikát", "Certificate" : "Certifikát", @@ -884,11 +894,8 @@ "Could not load the desired message" : "Nedaří se načíst vyžádanou zprávu", "Could not load the message" : "Zprávu se nedaří načíst", "Error loading message" : "Chyba při načtení zprávy", - "Determine importance using machine learning" : "Zjistit důležitost pomocí strojového učení", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Správy budou automaticky označené jako důležité v závislosti na tom, jakými správami jste se zabývali nebo označili jako důležité. Na začátku bude třeba měnit důležitost ručně a systém tak naučit, ale po čase se to zlepší.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Vámi zaslané zprávy, které vyžadují odpověď, ale ani po několika dnech se tak nestalo, se zobrazí zde.", - "Mark all messages of this folder as read" : "Označit všechny zprávy v této složce jako přečtené", - "Last 7 days" : "Uplynulých 7 dnů", - "From me" : "Ode mne" + "Add share link from Files" : "Přidat odkaz na sdílení ze Souborů", + "Choose a file to add as attachment" : "Vyberte soubor k přiložení", + "Choose a file to share as a link" : "Zvolte soubor, který sdílet jako odkaz" },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" } \ No newline at end of file diff --git a/l10n/cy_GB.js b/l10n/cy_GB.js index 85d5581c3f..c3651c8437 100644 --- a/l10n/cy_GB.js +++ b/l10n/cy_GB.js @@ -28,14 +28,15 @@ OC.L10N.register( "SMTP Password" : "Cyfrinair SMTP", "Signature" : "Llofnod", "Mail server" : "Gweinydd e-bost", - "Go back" : "Nôl", "Email address" : "Cyfeiriad e-bost", + "Go back" : "Nôl", "Cancel" : "Diddymu", "General" : "Cyffredinol", "Add mail account" : "Ychwanegu cyfrif post", "List" : "Rhestr", "Newest first" : "Diweddaraf gyntaf", "Oldest first" : "Hynaf gyntaf", + "Ok" : "Iawn", "Security" : "Diogelwch", "Manage certificates" : "Rheoli tystysgrifau", "Compose new message" : "Ysgrifennu Neges _Newydd", @@ -49,15 +50,13 @@ OC.L10N.register( "Send" : "Anfon", "Refresh" : "Ail-lwytho", "About" : "Ynglyn â", - "Ok" : "Iawn", "Subject" : "Pwnc", "Draft saved" : "Cadwyd y drafft", "Upload attachment" : "Llwytho atodiad", "Add attachment from Files" : "Ychwanegwch atodiad o'r Ffeiliau", - "Choose" : "Dewisa", - "Choose a file to add as attachment" : "Dewiswch ffeil i'w hychwanegu fel atodiad", "Confirm" : "Cadarnhau", "No messages in this folder" : "Dim negeseuon yn y ffolder hon", + "Choose" : "Dewisa", "Favorite" : "Ffefryn", "Back" : "Nôl", "Report this bug" : "Cofnodi'r gwall", @@ -74,6 +73,7 @@ OC.L10N.register( "Today" : "Heddiw", "Favorites" : "Ffefrynnau", "Other" : "Arall", + "Link copied" : "Dolen wedi'i gopïo", "Translate" : "Cyfieithu", "Choose a folder to store the attachment in" : "Dewiswch ffolder i gadw'r atodiad ynddi", "Import into calendar" : "Mewnforio i'r calendr", @@ -99,6 +99,8 @@ OC.L10N.register( "Tags" : "Tagiau", "Custom" : "Cyfaddas", "Not found" : "Heb ei ganfod", + "From:" : "Oddi wrth:", + "To:" : "At:", "Untitled event" : "Digwyddiad di-deitl", "(organizer)" : "(trefnydd)", "Deleted" : "Wedi dileu", @@ -128,6 +130,6 @@ OC.L10N.register( "Could not load the desired message" : "Methu llwytho'r neges a ddewiswyd", "Could not load the message" : "Methu llwytho'r neges", "Error loading message" : "Gwall wrth lwytho neges", - "Mark all messages of this folder as read" : "Marcio'r holl negeseuon y ffolder hon fel y'u darllenwyd" + "Choose a file to add as attachment" : "Dewiswch ffeil i'w hychwanegu fel atodiad" }, "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); diff --git a/l10n/cy_GB.json b/l10n/cy_GB.json index fa198ab002..cbd959c9ea 100644 --- a/l10n/cy_GB.json +++ b/l10n/cy_GB.json @@ -26,14 +26,15 @@ "SMTP Password" : "Cyfrinair SMTP", "Signature" : "Llofnod", "Mail server" : "Gweinydd e-bost", - "Go back" : "Nôl", "Email address" : "Cyfeiriad e-bost", + "Go back" : "Nôl", "Cancel" : "Diddymu", "General" : "Cyffredinol", "Add mail account" : "Ychwanegu cyfrif post", "List" : "Rhestr", "Newest first" : "Diweddaraf gyntaf", "Oldest first" : "Hynaf gyntaf", + "Ok" : "Iawn", "Security" : "Diogelwch", "Manage certificates" : "Rheoli tystysgrifau", "Compose new message" : "Ysgrifennu Neges _Newydd", @@ -47,15 +48,13 @@ "Send" : "Anfon", "Refresh" : "Ail-lwytho", "About" : "Ynglyn â", - "Ok" : "Iawn", "Subject" : "Pwnc", "Draft saved" : "Cadwyd y drafft", "Upload attachment" : "Llwytho atodiad", "Add attachment from Files" : "Ychwanegwch atodiad o'r Ffeiliau", - "Choose" : "Dewisa", - "Choose a file to add as attachment" : "Dewiswch ffeil i'w hychwanegu fel atodiad", "Confirm" : "Cadarnhau", "No messages in this folder" : "Dim negeseuon yn y ffolder hon", + "Choose" : "Dewisa", "Favorite" : "Ffefryn", "Back" : "Nôl", "Report this bug" : "Cofnodi'r gwall", @@ -72,6 +71,7 @@ "Today" : "Heddiw", "Favorites" : "Ffefrynnau", "Other" : "Arall", + "Link copied" : "Dolen wedi'i gopïo", "Translate" : "Cyfieithu", "Choose a folder to store the attachment in" : "Dewiswch ffolder i gadw'r atodiad ynddi", "Import into calendar" : "Mewnforio i'r calendr", @@ -97,6 +97,8 @@ "Tags" : "Tagiau", "Custom" : "Cyfaddas", "Not found" : "Heb ei ganfod", + "From:" : "Oddi wrth:", + "To:" : "At:", "Untitled event" : "Digwyddiad di-deitl", "(organizer)" : "(trefnydd)", "Deleted" : "Wedi dileu", @@ -126,6 +128,6 @@ "Could not load the desired message" : "Methu llwytho'r neges a ddewiswyd", "Could not load the message" : "Methu llwytho'r neges", "Error loading message" : "Gwall wrth lwytho neges", - "Mark all messages of this folder as read" : "Marcio'r holl negeseuon y ffolder hon fel y'u darllenwyd" + "Choose a file to add as attachment" : "Dewiswch ffeil i'w hychwanegu fel atodiad" },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" } \ No newline at end of file diff --git a/l10n/da.js b/l10n/da.js index 1ed55def90..d49eccacd3 100644 --- a/l10n/da.js +++ b/l10n/da.js @@ -82,7 +82,6 @@ OC.L10N.register( "SMTP Port" : "SMTP port", "SMTP User" : "SMTP bruger", "SMTP Password" : "SMTP kodeord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For at din Google-konto skal kunne fungere med denne app, skal du aktivere to-faktor-godkendelse for Gmail samt generere en App-specifik adgangskode.", "Account settings" : "Kontoindstillinger", "Aliases" : "Aliases", "Signature" : "Underskrift", @@ -100,13 +99,13 @@ OC.L10N.register( "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Mappesøgning", + "Email address" : "Email adresse", "Update alias" : "Opdatér alias", "Rename alias" : "Omdøb alias", "Show update alias form" : "Vis formular til opdateringsalias", "Delete alias" : "Slet alias", "Go back" : "Gå tilbage", "Change name" : "Ændre navn", - "Email address" : "Email adresse", "Add alias" : "Tilføj alias", "Create alias" : "Opret alias", "Cancel" : "Annullér", @@ -125,10 +124,13 @@ OC.L10N.register( "Sorting" : "Sortering", "Newest first" : "Nyeste først", "Oldest first" : "Ældste først", + "New text block" : "Ny tekstblok", + "Title of the text block" : "Titel på ny tekstblok", + "Content of the text block" : "Indhold i tekstblok", + "Ok" : "OK", "Top" : "Top", "Bottom" : "Bund", "Text blocks" : "Tekstblokke", - "New text block" : "Ny tekstblok", "Shared with me" : "Delt med mig", "Privacy" : "Privatliv", "Security" : "Sikkerhed", @@ -152,9 +154,6 @@ OC.L10N.register( "Send" : "Send", "Refresh" : "Opdatér", "About" : "Om", - "Title of the text block" : "Titel på ny tekstblok", - "Content of the text block" : "Indhold i tekstblok", - "Ok" : "OK", "No certificate" : "Intet certifikat", "Certificate updated" : "Certifikat opdateret", "Could not update certificate" : "Kunne ikke opdatere certifikat", @@ -195,7 +194,6 @@ OC.L10N.register( "Disable formatting" : "Deaktiver formatering", "Upload attachment" : "Upload vedhæftning", "Add attachment from Files" : "Vedhæft fra filer", - "Add share link from Files" : "Tilføj delingslink fra Filer", "Smart picker" : "Smart Vælger", "Request a read receipt" : "Anmod om en læsekvittering", "Sign message with S/MIME" : "Underskriv besked med S/MIME", @@ -207,15 +205,14 @@ OC.L10N.register( "Monday morning" : "Mandag morgen", "Custom date and time" : "Brugerdefineret dato og tid", "Enter a date" : "Indtast en dato", - "Choose" : "Vælg", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Den vedhæftede fil overskrider den tilladte størrelse på vedhæftede filer på {size}. Del venligst filen via link i stedet.","De vedhæftede filer overskrider den tilladte størrelse på vedhæftede filer på {size}. Del venligst filerne via link i stedet."], - "Choose a file to add as attachment" : "Vælg en fil, der skal tilføjes som vedhæftning", - "Choose a file to share as a link" : "Vælg en fil der skal deles som link", + "Choose a file" : "Vælg en fil", "_{count} attachment_::_{count} attachments_" : ["{count} vedhæftet fil","{count} vedhæftede filer"], "Untitled message" : "Unavngivet besked", "Expand composer" : "Udvid composer", "Close composer" : "Luk composer", "Confirm" : "Bekræft", + "Revoke" : "Tilbagekald", "Tag: {name} deleted" : "Tag: {name} slettet", "An error occurred, unable to delete the tag." : "En fejl opstod, kunne ikke slette tagget", "The tag will be deleted from all messages." : "Tagget bliver slettet fra alle beskeder.", @@ -223,6 +220,7 @@ OC.L10N.register( "Rich text" : "Formateret tekst", "No messages in this folder" : "Ingen beskeder i denne mappe", "No messages" : "Ingen beskeder", + "Choose" : "Vælg", "Blind copy recipients only" : "Kun blinde kopi-modtagere", "No subject" : "Intet emne", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Kladde:{markup-end} {subject}", @@ -262,8 +260,6 @@ OC.L10N.register( "Move Message" : "Flyt besked", "Archive thread" : "Arkivér tråd", "Archive message" : "Arkivér besked", - "Delete thread" : "Slet tråd", - "Delete message" : "Slet besked", "More actions" : "Flere handlinger", "Back" : "Tilbage", "Set custom snooze" : "Sæt brugerdefineret snooze", @@ -271,6 +267,8 @@ OC.L10N.register( "Reply with meeting" : "Svar med møde", "Create task" : "Opret opgave", "Download message" : "Download besked", + "Delete thread" : "Slet tråd", + "Delete message" : "Slet besked", "Back to all actions" : "Tilbage til alle handlinger", "Manage quick actions" : "Styr hurtig handlinger", "Load more" : "Hent flere", @@ -294,6 +292,7 @@ OC.L10N.register( "Event created" : "Begivenhed oprettet", "Could not create event" : "Begivenheden kunne ikke oprettes", "Create event" : "Opret begivenhed", + "Title" : "Titel", "All day" : "Hele dagen", "Attendees" : "Deltagere", "You can only invite attendees if your account has an email address set" : "Du kan kun invitere deltagere hvis din konto har en e-mail tilknyttet", @@ -354,7 +353,9 @@ OC.L10N.register( "Could not snooze message" : "Kunne ikke snooze beskeden", "Message was unsnoozed" : "Snooze blev fjernet fra beskeden", "Could not unsnooze message" : "Kunne ikke fjerne snooze fra beskeden", + "Direct link copied to clipboard" : "Direkte link kopieret til udklipsholder", "Forward" : "Videresend", + "Link copied" : "Link kopieret", "Move message" : "Flyt besked", "Translate" : "Oversæt", "Forward message as attachment" : "Videresend besked som vedhæftet fil", @@ -389,6 +390,7 @@ OC.L10N.register( "Moving" : "Flytter", "Moving thread" : "Flytter tråd", "Moving message" : "Flytter besked", + "Change password" : "Skift adgangskode", "Used quota: {quota}% ({limit})" : "Anvendt kvote: {quota}% ({limit})", "Used quota: {quota}%" : "Anvendt kvote: {quota}%", "Remove account" : "Fjern konto", @@ -492,6 +494,7 @@ OC.L10N.register( "Message source" : "Beskedens kildekode", "Tag already exists" : "Mærket eksisterer allerede", "Add tag" : "Tilføj tag", + "Task created" : "Opgave oprettet", "Print" : "Udskriv", "Could not print message" : "Kunne ikke udskrive besked", "Loading thread" : "Indlæser tråd", @@ -504,6 +507,8 @@ OC.L10N.register( "Reply all" : "Besvar alle", "Disable reminder" : "Deaktivér påmindelse", "Reply to sender only" : "Besvar kun afsender", + "From:" : "Fra:", + "To:" : "Til:", "Go to latest message" : "Gå til seneste besked", "Newest message" : "Nyeste besked", "Translate from" : "Oversæt fra", @@ -524,6 +529,7 @@ OC.L10N.register( "matches" : "er lig med", "Actions" : "Handlinger", "Priority" : "Prioritet", + "Tag" : "Mærke", "delete" : "Slet", "Edit" : "Redigér", "Message View Mode" : "Besked visningstilstand", @@ -540,6 +546,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certifikatet blev importeret", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Kunne ikke importere certifikatet. Sørg for, at den private nøgle matcher certifikatet og ikke er beskyttet af en kode.", "Failed to import the certificate" : "Kunne ikke importere certifikatet", + "Import S/MIME certificate" : "Importér S/MIME-certifikat", "S/MIME certificates" : "S/MIME certifikater", "Certificate name" : "Certifikatnavn", "E-mail address" : "E-mail adresse", @@ -547,16 +554,17 @@ OC.L10N.register( "Delete certificate" : "Slet certifikat", "No certificate imported yet" : "Intet certifikat importeret endnu", "Import certificate" : "Importér certifikat", - "Import S/MIME certificate" : "Importér S/MIME-certifikat", "PKCS #12 Certificate" : "PKCS #12 Certifikat", "PEM Certificate" : "PEM Certifikat", "Certificate" : "Certifikat", "Private key (optional)" : "Privat nøgle (valgfrit)", "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Den private nøgle er kun påkrævet, hvis du har til hensigt at sende signerede og krypterede e-mails ved hjælp af dette certifikat.", "Submit" : "Send", + "Guest" : "Gæst", "Group" : "Gruppe", "Shared" : "Delt", "Edit {title}" : "Redigér {title}", + "Delete {title}" : "Slet {title}", "Shares" : "Delinger", "Insert" : "Indsæt", "Account connected" : "Kontoen er tilknyttet", @@ -581,9 +589,8 @@ OC.L10N.register( "Could not load the desired message" : "Den ønskede besked kunne ikke indlæses", "Could not load the message" : "Beskeden kunne ikke indlæses", "Error loading message" : "Fejl under indlæsning af besked", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Beskeder vil automatisk blive markeret som vigtige baseret på, hvilke meddelelser du har interageret med eller markeret som vigtige. I begyndelsen skal du muligvis manuelt ændre vigtigheden for at lære systemet, men det vil forbedres med tiden.", - "Mark all messages of this folder as read" : "Markér alle beskeder i denne mappe som læst", - "Last 7 days" : "Sidste 7 dage", - "From me" : "Fra mig" + "Add share link from Files" : "Tilføj delingslink fra Filer", + "Choose a file to add as attachment" : "Vælg en fil, der skal tilføjes som vedhæftning", + "Choose a file to share as a link" : "Vælg en fil der skal deles som link" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/da.json b/l10n/da.json index 0a71a39c53..e663adadc1 100644 --- a/l10n/da.json +++ b/l10n/da.json @@ -80,7 +80,6 @@ "SMTP Port" : "SMTP port", "SMTP User" : "SMTP bruger", "SMTP Password" : "SMTP kodeord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For at din Google-konto skal kunne fungere med denne app, skal du aktivere to-faktor-godkendelse for Gmail samt generere en App-specifik adgangskode.", "Account settings" : "Kontoindstillinger", "Aliases" : "Aliases", "Signature" : "Underskrift", @@ -98,13 +97,13 @@ "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Mappesøgning", + "Email address" : "Email adresse", "Update alias" : "Opdatér alias", "Rename alias" : "Omdøb alias", "Show update alias form" : "Vis formular til opdateringsalias", "Delete alias" : "Slet alias", "Go back" : "Gå tilbage", "Change name" : "Ændre navn", - "Email address" : "Email adresse", "Add alias" : "Tilføj alias", "Create alias" : "Opret alias", "Cancel" : "Annullér", @@ -123,10 +122,13 @@ "Sorting" : "Sortering", "Newest first" : "Nyeste først", "Oldest first" : "Ældste først", + "New text block" : "Ny tekstblok", + "Title of the text block" : "Titel på ny tekstblok", + "Content of the text block" : "Indhold i tekstblok", + "Ok" : "OK", "Top" : "Top", "Bottom" : "Bund", "Text blocks" : "Tekstblokke", - "New text block" : "Ny tekstblok", "Shared with me" : "Delt med mig", "Privacy" : "Privatliv", "Security" : "Sikkerhed", @@ -150,9 +152,6 @@ "Send" : "Send", "Refresh" : "Opdatér", "About" : "Om", - "Title of the text block" : "Titel på ny tekstblok", - "Content of the text block" : "Indhold i tekstblok", - "Ok" : "OK", "No certificate" : "Intet certifikat", "Certificate updated" : "Certifikat opdateret", "Could not update certificate" : "Kunne ikke opdatere certifikat", @@ -193,7 +192,6 @@ "Disable formatting" : "Deaktiver formatering", "Upload attachment" : "Upload vedhæftning", "Add attachment from Files" : "Vedhæft fra filer", - "Add share link from Files" : "Tilføj delingslink fra Filer", "Smart picker" : "Smart Vælger", "Request a read receipt" : "Anmod om en læsekvittering", "Sign message with S/MIME" : "Underskriv besked med S/MIME", @@ -205,15 +203,14 @@ "Monday morning" : "Mandag morgen", "Custom date and time" : "Brugerdefineret dato og tid", "Enter a date" : "Indtast en dato", - "Choose" : "Vælg", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Den vedhæftede fil overskrider den tilladte størrelse på vedhæftede filer på {size}. Del venligst filen via link i stedet.","De vedhæftede filer overskrider den tilladte størrelse på vedhæftede filer på {size}. Del venligst filerne via link i stedet."], - "Choose a file to add as attachment" : "Vælg en fil, der skal tilføjes som vedhæftning", - "Choose a file to share as a link" : "Vælg en fil der skal deles som link", + "Choose a file" : "Vælg en fil", "_{count} attachment_::_{count} attachments_" : ["{count} vedhæftet fil","{count} vedhæftede filer"], "Untitled message" : "Unavngivet besked", "Expand composer" : "Udvid composer", "Close composer" : "Luk composer", "Confirm" : "Bekræft", + "Revoke" : "Tilbagekald", "Tag: {name} deleted" : "Tag: {name} slettet", "An error occurred, unable to delete the tag." : "En fejl opstod, kunne ikke slette tagget", "The tag will be deleted from all messages." : "Tagget bliver slettet fra alle beskeder.", @@ -221,6 +218,7 @@ "Rich text" : "Formateret tekst", "No messages in this folder" : "Ingen beskeder i denne mappe", "No messages" : "Ingen beskeder", + "Choose" : "Vælg", "Blind copy recipients only" : "Kun blinde kopi-modtagere", "No subject" : "Intet emne", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Kladde:{markup-end} {subject}", @@ -260,8 +258,6 @@ "Move Message" : "Flyt besked", "Archive thread" : "Arkivér tråd", "Archive message" : "Arkivér besked", - "Delete thread" : "Slet tråd", - "Delete message" : "Slet besked", "More actions" : "Flere handlinger", "Back" : "Tilbage", "Set custom snooze" : "Sæt brugerdefineret snooze", @@ -269,6 +265,8 @@ "Reply with meeting" : "Svar med møde", "Create task" : "Opret opgave", "Download message" : "Download besked", + "Delete thread" : "Slet tråd", + "Delete message" : "Slet besked", "Back to all actions" : "Tilbage til alle handlinger", "Manage quick actions" : "Styr hurtig handlinger", "Load more" : "Hent flere", @@ -292,6 +290,7 @@ "Event created" : "Begivenhed oprettet", "Could not create event" : "Begivenheden kunne ikke oprettes", "Create event" : "Opret begivenhed", + "Title" : "Titel", "All day" : "Hele dagen", "Attendees" : "Deltagere", "You can only invite attendees if your account has an email address set" : "Du kan kun invitere deltagere hvis din konto har en e-mail tilknyttet", @@ -352,7 +351,9 @@ "Could not snooze message" : "Kunne ikke snooze beskeden", "Message was unsnoozed" : "Snooze blev fjernet fra beskeden", "Could not unsnooze message" : "Kunne ikke fjerne snooze fra beskeden", + "Direct link copied to clipboard" : "Direkte link kopieret til udklipsholder", "Forward" : "Videresend", + "Link copied" : "Link kopieret", "Move message" : "Flyt besked", "Translate" : "Oversæt", "Forward message as attachment" : "Videresend besked som vedhæftet fil", @@ -387,6 +388,7 @@ "Moving" : "Flytter", "Moving thread" : "Flytter tråd", "Moving message" : "Flytter besked", + "Change password" : "Skift adgangskode", "Used quota: {quota}% ({limit})" : "Anvendt kvote: {quota}% ({limit})", "Used quota: {quota}%" : "Anvendt kvote: {quota}%", "Remove account" : "Fjern konto", @@ -490,6 +492,7 @@ "Message source" : "Beskedens kildekode", "Tag already exists" : "Mærket eksisterer allerede", "Add tag" : "Tilføj tag", + "Task created" : "Opgave oprettet", "Print" : "Udskriv", "Could not print message" : "Kunne ikke udskrive besked", "Loading thread" : "Indlæser tråd", @@ -502,6 +505,8 @@ "Reply all" : "Besvar alle", "Disable reminder" : "Deaktivér påmindelse", "Reply to sender only" : "Besvar kun afsender", + "From:" : "Fra:", + "To:" : "Til:", "Go to latest message" : "Gå til seneste besked", "Newest message" : "Nyeste besked", "Translate from" : "Oversæt fra", @@ -522,6 +527,7 @@ "matches" : "er lig med", "Actions" : "Handlinger", "Priority" : "Prioritet", + "Tag" : "Mærke", "delete" : "Slet", "Edit" : "Redigér", "Message View Mode" : "Besked visningstilstand", @@ -538,6 +544,7 @@ "Certificate imported successfully" : "Certifikatet blev importeret", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Kunne ikke importere certifikatet. Sørg for, at den private nøgle matcher certifikatet og ikke er beskyttet af en kode.", "Failed to import the certificate" : "Kunne ikke importere certifikatet", + "Import S/MIME certificate" : "Importér S/MIME-certifikat", "S/MIME certificates" : "S/MIME certifikater", "Certificate name" : "Certifikatnavn", "E-mail address" : "E-mail adresse", @@ -545,16 +552,17 @@ "Delete certificate" : "Slet certifikat", "No certificate imported yet" : "Intet certifikat importeret endnu", "Import certificate" : "Importér certifikat", - "Import S/MIME certificate" : "Importér S/MIME-certifikat", "PKCS #12 Certificate" : "PKCS #12 Certifikat", "PEM Certificate" : "PEM Certifikat", "Certificate" : "Certifikat", "Private key (optional)" : "Privat nøgle (valgfrit)", "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Den private nøgle er kun påkrævet, hvis du har til hensigt at sende signerede og krypterede e-mails ved hjælp af dette certifikat.", "Submit" : "Send", + "Guest" : "Gæst", "Group" : "Gruppe", "Shared" : "Delt", "Edit {title}" : "Redigér {title}", + "Delete {title}" : "Slet {title}", "Shares" : "Delinger", "Insert" : "Indsæt", "Account connected" : "Kontoen er tilknyttet", @@ -579,9 +587,8 @@ "Could not load the desired message" : "Den ønskede besked kunne ikke indlæses", "Could not load the message" : "Beskeden kunne ikke indlæses", "Error loading message" : "Fejl under indlæsning af besked", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Beskeder vil automatisk blive markeret som vigtige baseret på, hvilke meddelelser du har interageret med eller markeret som vigtige. I begyndelsen skal du muligvis manuelt ændre vigtigheden for at lære systemet, men det vil forbedres med tiden.", - "Mark all messages of this folder as read" : "Markér alle beskeder i denne mappe som læst", - "Last 7 days" : "Sidste 7 dage", - "From me" : "Fra mig" + "Add share link from Files" : "Tilføj delingslink fra Filer", + "Choose a file to add as attachment" : "Vælg en fil, der skal tilføjes som vedhæftning", + "Choose a file to share as a link" : "Vælg en fil der skal deles som link" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/de.js b/l10n/de.js index 08343f4ac0..8a9ab009c2 100644 --- a/l10n/de.js +++ b/l10n/de.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Du erreichst die Grenze deines Postfach-Kontingents für {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Du nutzt derzeit {percentage} deines Postfachspeichers. Bitte schaffe etwas Platz, indem du nicht benötigte E-Mails löscht.", + "{account_email} has been delegated to you" : "{account_email} wurde an dich delegiert", + "{user} delegated {account} to you" : "{user} hat {account} an dich delegiert", + "{account_email} is no longer delegated to you" : "{account_email} ist nicht mehr an dich delegiert", + "{user} revoked delegation for {account}" : "{user} hat die Delegation von {account} widerrufen", "Mail Application" : "E-Mail Anwendung", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-Mail-Adresse des Absenders %1$s ist nicht im Adressbuch, aber der Name des Absenders %2$s ist mit der folgender E-Mail-Adresse im Adressbuch %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP-Port", "SMTP User" : "SMTP-Benutzer", "SMTP Password" : "SMTP-Passwort", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Damit das Google-Konto mit dieser App funktioniert, musst du die Zwei-Faktor-Authentifizierung für Google aktivieren und ein App-Passwort erstellen.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google erfordert eine OAuth-Authentifizierung. Wenn die Nextcloud-Administration Google OAuth nicht eingerichtet hat, kann stattdessen ein Google App-Passwort verwendet werden.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft erfordert OAuth-Authentifizierung. Bitte deine Nextcloud-Administration, Microsoft OAuth in den Administrations-Einstellungen einzurichten.", "Account settings" : "Kontoeinstellungen", "Aliases" : "Aliasse", "Alias to S/MIME certificate mapping" : "Alias einem S/MIME-Zertifikat zuordnen", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Mail-Server", "Sieve server" : "Sieve-Server", "Folder search" : "Ordnersuche", + "Alias name" : "Aliasname", + "Email address" : "E-Mail-Adresse", "Update alias" : "Alias aktualisieren", "Rename alias" : "Alias umbenennen", "Show update alias form" : "Update-Alias-Formular anzeigen", "Delete alias" : "Alias löschen", "Go back" : "Zurück", "Change name" : "Name ändern", - "Email address" : "E-Mail-Adresse", "Add alias" : "Alias hinzufügen", "Create alias" : "Alias erstellen", "Cancel" : "Abbrechen", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "Mail-Einstellungen", "General" : "Allgemein", "Set as default mail app" : "Als Standard-E-Mail-App festlegen", + "{email} (delegated)" : "{email} (Delegiert)", "Add mail account" : "E-Mail-Konto hinzufügen", "Appearance" : "Aussehen", "Show all messages in thread" : "Alle Nachrichten der Unterhaltung anzeigen", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Sortiere", "Newest first" : "Neueste zuerst", "Oldest first" : "Älteste zuerst", + "New text block" : "Neuer Textblock", + "Title of the text block" : "Titel des neuen Textblocks", + "Content of the text block" : "Inhalt des Textblocks", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatare von Gravatar und Favicons", "Reply position" : "Position der Antwort", "Top" : "Oben", "Bottom" : "Unten", "Text blocks" : "Textblöcke", "Reusable pieces of text that can be inserted in messages" : "Wiederverwendbare Textteile, die in Nachrichten eingefügt werden können", - "New text block" : "Neuer Textblock", "Shared with me" : "Mit mir geteilt", "Privacy" : "Datenschutz", "Data collection" : "Datensammlung", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Suchen", "Send" : "Senden", "Refresh" : "Aktualisieren", + "Heading1" : "Überschrift 1", + "Heading2" : "Überschrift 2", + "Heading3" : "Überschrift 3", "About" : "Über", "Acknowledgements" : "Danksagungen", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Diese Anwendung enthält CKEditor, einen Open-Source-Editor. Copyright © CKEditor Mitwirkende. Lizensiert unter GPLv2.", - "Title of the text block" : "Titel des neuen Textblocks", - "Content of the text block" : "Inhalt des Textblocks", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Automatisch vorläufige Termine im Kalender erstellen", "No certificate" : "Kein Zertifikat", "Certificate updated" : "Zertifikat aktualisiert", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Formatierung deaktivieren", "Upload attachment" : "Anhang hochladen", "Add attachment from Files" : "Anhang von \"Dateien\" hinzufügen", - "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", "Smart picker" : "Smart Picker", "Request a read receipt" : "Eine Bestätigung anfordern", "Sign message with S/MIME" : "Nachricht mit S/MIME signieren", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Montag Vormittag", "Custom date and time" : "Benutzerspezifisches Datum und Zeit", "Enter a date" : "Datum eingeben", - "Choose" : "Auswählen", + "Remove attachment {fileName}" : "Anhang {fileName} entfernen", + "Add as attachment" : "Als Anhang hinzufügen", + "Add as share link" : "Als Freigabe-Link hinzufügen", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Der Anhang überschreitet die zulässige Anhangsgröße von {size}. Bitte teilen Sie die Dateien stattdessen über einen Link.","Die Anhänge überschreiten die zulässige Anhangsgröße von {size}. Bitte die Dateien stattdessen über einen Link teilen."], - "Choose a file to add as attachment" : "Wähle eine Datei, die als Anhang angefügt werden soll", - "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Choose a file" : "Datei auswählen", "_{count} attachment_::_{count} attachments_" : ["{count} Anhang","{count} Anhänge"], "Untitled message" : "Nachricht ohne Titel", "Expand composer" : "Erstellungsbereich erweitern", "Close composer" : "Erstellungsbereich schließen", "Confirm" : "Bestätigen", + "Delegate access" : "Zugriff delegieren", + "Revoke" : "Widerrufen", + "{userId} will no longer be able to act on your behalf" : "{userId} wird nicht mehr in deinem Namen handeln können", + "Could not fetch delegates" : "Delegierte konnten nicht abgerufen werden", + "Delegated access to {displayName}" : "Zugriff delegiert an {displayName}", + "Could not delegate access" : "Zugriff konnte nicht delegiert werden", + "Revoked access for {displayName}" : "Zugriff für {displayName} widerrufen", + "Could not revoke delegation" : "Delegation konnte nicht widerrufen werden", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Benutzern ermöglichen, in deinem Namen E-Mails zu senden, zu empfangen und zu löschen", + "Revoke access" : "Zugriff widerrufen", + "Add delegate" : "Delegierten hinzufügen", + "Select a user" : "Einen Benutzer auswählen", + "They will be able to send, receive, and delete mail on your behalf" : "Diese können in deinem Namen E-Mails senden, empfangen und löschen", + "Revoke access?" : "Zugriff widerrufen?", "Tag: {name} deleted" : "Schlagwort: {name} gelöscht", "An error occurred, unable to delete the tag." : "Es ist ein Fehler aufgetreten, das Schlagwort konnte nicht gelöscht werden.", "The tag will be deleted from all messages." : "Das Schlagwort wird aus allen Nachrichten gelöscht.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Rich-Text", "No messages in this folder" : "Keine Nachrichten in diesem Ordner", "No messages" : "Keine Nachrichten", + "Choose" : "Auswählen", "Blind copy recipients only" : "Nur BCC-Empfänger", "No subject" : "Kein Betreff", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Entwurf: {markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Unterhaltung konnte nicht zurückgestellt werden", "Thread was unsnoozed" : "Zurückstellung der Unterhaltung aufgehoben", "Could not unsnooze thread" : "Zurückstellung der Unterhaltung konnte nicht aufgehoben werden", + "Message saved to Files" : "Nachricht wurde in Dateien gespeichert", + "Message could not be saved" : "Nachricht konnte nicht gespeichert werden", "This summary was AI generated" : "Diese Zusammenfassung wurde von KI generiert", "Encrypted message" : "Verschlüsselte Nachricht", "This message is unread" : "Diese Nachricht ist ungelesen", + "Choose a folder to store the message in" : "Ordner zum Speichern der Nachricht auswählen", "Unfavorite" : "Nicht favorisieren", "Favorite" : "Favorit", "Unread" : "Ungelesen", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "Nachricht verschieben", "Archive thread" : "Unterhaltung archivieren", "Archive message" : "Nachricht archivieren", - "Delete thread" : "Unterhaltung löschen", - "Delete message" : "Nachricht löschen", "More actions" : "Weitere Aktionen", "Back" : "Zurück", "Set custom snooze" : "Zurückstellen benutzerdefiniert setzen", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Mit einer Besprechung antworten", "Create task" : "Aufgabe erstellen", "Download message" : "Nachricht herunterladen", + "Save message to Files" : "Nachricht in Dateien speichern", + "Delete thread" : "Unterhaltung löschen", + "Delete message" : "Nachricht löschen", "Back to all actions" : "Zurück zu allen Aktionen", "Manage quick actions" : "Schnellaktionen verwalten", "Load more" : "Mehr laden", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Als unwichtig markieren", "Mark as important" : "Als wichtig markieren", "Report this bug" : "Diesen Bug melden", + "This description was generated by AI." : "Diese Beschreibung wurde von einer KI erstellt.", "Event created" : "Termin wurde erstellt", "Could not create event" : "Termin konnte nicht erstellt werden", "Create event" : "Termin erstellen", + "Title" : "Titel", "All day" : "Ganztägig", "Attendees" : "Teilnehmende", "You can only invite attendees if your account has an email address set" : "Du kannst nur Teilnehmer einladen, wenn in deinem Konto eine E-Mail-Adresse festgelegt ist", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Nachricht konnte nicht zurückgestellt werden", "Message was unsnoozed" : "Zurückstellung der Nachricht wurde aufgehoben", "Could not unsnooze message" : "Zurückstellung der Nachricht konnte nicht aufgehoben werden", + "Could not generate direct link: Message ID is missing" : "Direktlink konnte nicht erstellt werden: Nachrichten-ID fehlt", + "Direct link copied to clipboard" : "Direkten Link in die Zwischenablage kopiert", + "Copy direct link" : "Direktlink kopieren", "Forward" : "Weiterleiten", + "Only for message recipients" : "Nur für Nachrichtenempfänger", + "Link copied" : "Link kopiert", "Move message" : "Nachricht verschieben", "Translate" : "Übersetzen", "Forward message as attachment" : "Nachricht als Anhang weiterleiten", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Verschiebe Nachricht", "This account cannot connect" : "Dieses Konto kann keine Verbindung herstellen", "Connection failed. Please verify your information and try again" : "Verbindung fehlgeschlagen. Bitte deine Daten überprüfen und erneut versuchen", + "Change password" : "Passwort ändern", "Used quota: {quota}% ({limit})" : "Benutztes Kontingent: {quota}% ({limit})", "Used quota: {quota}%" : "Benutztes Kontingent: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postfach konnte nicht erstellt werden. Der Name enthält wahrscheinlich ungültige Zeichen. Bitte mit einem anderen Namen versuchen.", "Remove account" : "Konto entfernen", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Das Konto für {email} und zwischengespeicherte E-Mail-Daten werden aus Nextcloud entfernt, jedoch nicht von deinem E-Mail-Provider.", "Remove {email}" : "{email} entfernen", + "could not delete account" : "Konto konnte nicht gelöscht werden", "Provisioned account is disabled" : "Bereitgestelltes Konto ist deaktiviert.", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bitte melde dich mit einem Passwort an, um dieses Konto zu aktivieren. Die aktuelle Sitzung verwendet eine passwortlose Authentifizierung, z. B. SSO oder WebAuthn.", + "Delegate account" : "Konto delegieren", "Show only subscribed folders" : "Nur abonnierte Ordner anzeigen", "Add folder" : "Ordner hinzufügen", "Folder name" : "Ordnername", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Nur dem Absender antworten", "Mark as unfavorite" : "Als nicht favorisiert markieren", "Mark as favorite" : "Als favorisiert markieren", + "From:" : "Von:", + "To:" : "An:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Per Link abbestellen", "Unsubscribing will stop all messages from the mailing list {sender}" : "Die Abbestellung stoppt alle Nachrichten von der Mailingliste {sender}", "Send unsubscribe email" : "Abbestellungs-E-Mail senden", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "Zertifikat importiert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Das Zertifikat konnte nicht importiert werden. Bitte sicherstellen, dass der private Schlüssel zum Zertifikat passt und nicht durch eine Passphrase geschützt ist.", "Failed to import the certificate" : "Das Zertifikat konnte nicht importiert werden", + "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "S/MIME certificates" : "S/MIME Zertifikate", "Certificate name" : "Zertifikatsname", "E-mail address" : "E-Mail-Adresse", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Zertifikat löschen", "No certificate imported yet" : "Bislang wurde kein Zertifikat importiert", "Import certificate" : "Zertifikat importieren", - "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "PKCS #12 Certificate" : "PKCS #12-Zertifikat", "PEM Certificate" : "PEM-Zertifikat", "Certificate" : "Zertifikat", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Gewünschte Nachricht konnte nicht geladen werden", "Could not load the message" : "Nachricht konnte nicht geladen werden", "Error loading message" : "Fehler beim Laden der Nachricht", - "Determine importance using machine learning" : "Die Bedeutung mithilfe von maschinellem Lernen bestimmen", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Nachrichten werden automatisch als wichtig markiert, je nachdem, mit welchen Nachrichten du interagiert, oder als wichtig markiert hast. Am Anfang musst du möglicherweise die Wichtigkeit manuell ändern, um das System anzulernen, aber es wird sich mit der Zeit verbessern.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Von dir gesendete Nachrichten, die eine Antwort erfordern, aber nach einigen Tagen noch keine erhalten haben, werden hier angezeigt.", - "Mark all messages of this folder as read" : "Alle Nachrichten in diesem Ordner als gelesen kennzeichnen", - "Last 7 days" : "Die letzten 7 Tage", - "From me" : "Von mir" + "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", + "Choose a file to add as attachment" : "Wähle eine Datei, die als Anhang angefügt werden soll", + "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Delegated access to {userId}" : "Zugriff delegiert an {userId}", + "Revoked access for {userId}" : "Zugriff für {userId} widerrufen" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/de.json b/l10n/de.json index d6b62e70ef..dbae8227b0 100644 --- a/l10n/de.json +++ b/l10n/de.json @@ -12,6 +12,10 @@ "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Du erreichst die Grenze deines Postfach-Kontingents für {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Du nutzt derzeit {percentage} deines Postfachspeichers. Bitte schaffe etwas Platz, indem du nicht benötigte E-Mails löscht.", + "{account_email} has been delegated to you" : "{account_email} wurde an dich delegiert", + "{user} delegated {account} to you" : "{user} hat {account} an dich delegiert", + "{account_email} is no longer delegated to you" : "{account_email} ist nicht mehr an dich delegiert", + "{user} revoked delegation for {account}" : "{user} hat die Delegation von {account} widerrufen", "Mail Application" : "E-Mail Anwendung", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-Mail-Adresse des Absenders %1$s ist nicht im Adressbuch, aber der Name des Absenders %2$s ist mit der folgender E-Mail-Adresse im Adressbuch %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP-Port", "SMTP User" : "SMTP-Benutzer", "SMTP Password" : "SMTP-Passwort", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Damit das Google-Konto mit dieser App funktioniert, musst du die Zwei-Faktor-Authentifizierung für Google aktivieren und ein App-Passwort erstellen.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google erfordert eine OAuth-Authentifizierung. Wenn die Nextcloud-Administration Google OAuth nicht eingerichtet hat, kann stattdessen ein Google App-Passwort verwendet werden.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft erfordert OAuth-Authentifizierung. Bitte deine Nextcloud-Administration, Microsoft OAuth in den Administrations-Einstellungen einzurichten.", "Account settings" : "Kontoeinstellungen", "Aliases" : "Aliasse", "Alias to S/MIME certificate mapping" : "Alias einem S/MIME-Zertifikat zuordnen", @@ -115,13 +120,14 @@ "Mail server" : "Mail-Server", "Sieve server" : "Sieve-Server", "Folder search" : "Ordnersuche", + "Alias name" : "Aliasname", + "Email address" : "E-Mail-Adresse", "Update alias" : "Alias aktualisieren", "Rename alias" : "Alias umbenennen", "Show update alias form" : "Update-Alias-Formular anzeigen", "Delete alias" : "Alias löschen", "Go back" : "Zurück", "Change name" : "Name ändern", - "Email address" : "E-Mail-Adresse", "Add alias" : "Alias hinzufügen", "Create alias" : "Alias erstellen", "Cancel" : "Abbrechen", @@ -134,6 +140,7 @@ "Mail settings" : "Mail-Einstellungen", "General" : "Allgemein", "Set as default mail app" : "Als Standard-E-Mail-App festlegen", + "{email} (delegated)" : "{email} (Delegiert)", "Add mail account" : "E-Mail-Konto hinzufügen", "Appearance" : "Aussehen", "Show all messages in thread" : "Alle Nachrichten der Unterhaltung anzeigen", @@ -148,13 +155,16 @@ "Sorting" : "Sortiere", "Newest first" : "Neueste zuerst", "Oldest first" : "Älteste zuerst", + "New text block" : "Neuer Textblock", + "Title of the text block" : "Titel des neuen Textblocks", + "Content of the text block" : "Inhalt des Textblocks", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatare von Gravatar und Favicons", "Reply position" : "Position der Antwort", "Top" : "Oben", "Bottom" : "Unten", "Text blocks" : "Textblöcke", "Reusable pieces of text that can be inserted in messages" : "Wiederverwendbare Textteile, die in Nachrichten eingefügt werden können", - "New text block" : "Neuer Textblock", "Shared with me" : "Mit mir geteilt", "Privacy" : "Datenschutz", "Data collection" : "Datensammlung", @@ -182,12 +192,12 @@ "Search" : "Suchen", "Send" : "Senden", "Refresh" : "Aktualisieren", + "Heading1" : "Überschrift 1", + "Heading2" : "Überschrift 2", + "Heading3" : "Überschrift 3", "About" : "Über", "Acknowledgements" : "Danksagungen", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Diese Anwendung enthält CKEditor, einen Open-Source-Editor. Copyright © CKEditor Mitwirkende. Lizensiert unter GPLv2.", - "Title of the text block" : "Titel des neuen Textblocks", - "Content of the text block" : "Inhalt des Textblocks", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Automatisch vorläufige Termine im Kalender erstellen", "No certificate" : "Kein Zertifikat", "Certificate updated" : "Zertifikat aktualisiert", @@ -231,7 +241,6 @@ "Disable formatting" : "Formatierung deaktivieren", "Upload attachment" : "Anhang hochladen", "Add attachment from Files" : "Anhang von \"Dateien\" hinzufügen", - "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", "Smart picker" : "Smart Picker", "Request a read receipt" : "Eine Bestätigung anfordern", "Sign message with S/MIME" : "Nachricht mit S/MIME signieren", @@ -243,15 +252,31 @@ "Monday morning" : "Montag Vormittag", "Custom date and time" : "Benutzerspezifisches Datum und Zeit", "Enter a date" : "Datum eingeben", - "Choose" : "Auswählen", + "Remove attachment {fileName}" : "Anhang {fileName} entfernen", + "Add as attachment" : "Als Anhang hinzufügen", + "Add as share link" : "Als Freigabe-Link hinzufügen", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Der Anhang überschreitet die zulässige Anhangsgröße von {size}. Bitte teilen Sie die Dateien stattdessen über einen Link.","Die Anhänge überschreiten die zulässige Anhangsgröße von {size}. Bitte die Dateien stattdessen über einen Link teilen."], - "Choose a file to add as attachment" : "Wähle eine Datei, die als Anhang angefügt werden soll", - "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Choose a file" : "Datei auswählen", "_{count} attachment_::_{count} attachments_" : ["{count} Anhang","{count} Anhänge"], "Untitled message" : "Nachricht ohne Titel", "Expand composer" : "Erstellungsbereich erweitern", "Close composer" : "Erstellungsbereich schließen", "Confirm" : "Bestätigen", + "Delegate access" : "Zugriff delegieren", + "Revoke" : "Widerrufen", + "{userId} will no longer be able to act on your behalf" : "{userId} wird nicht mehr in deinem Namen handeln können", + "Could not fetch delegates" : "Delegierte konnten nicht abgerufen werden", + "Delegated access to {displayName}" : "Zugriff delegiert an {displayName}", + "Could not delegate access" : "Zugriff konnte nicht delegiert werden", + "Revoked access for {displayName}" : "Zugriff für {displayName} widerrufen", + "Could not revoke delegation" : "Delegation konnte nicht widerrufen werden", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Benutzern ermöglichen, in deinem Namen E-Mails zu senden, zu empfangen und zu löschen", + "Revoke access" : "Zugriff widerrufen", + "Add delegate" : "Delegierten hinzufügen", + "Select a user" : "Einen Benutzer auswählen", + "They will be able to send, receive, and delete mail on your behalf" : "Diese können in deinem Namen E-Mails senden, empfangen und löschen", + "Revoke access?" : "Zugriff widerrufen?", "Tag: {name} deleted" : "Schlagwort: {name} gelöscht", "An error occurred, unable to delete the tag." : "Es ist ein Fehler aufgetreten, das Schlagwort konnte nicht gelöscht werden.", "The tag will be deleted from all messages." : "Das Schlagwort wird aus allen Nachrichten gelöscht.", @@ -259,6 +284,7 @@ "Rich text" : "Rich-Text", "No messages in this folder" : "Keine Nachrichten in diesem Ordner", "No messages" : "Keine Nachrichten", + "Choose" : "Auswählen", "Blind copy recipients only" : "Nur BCC-Empfänger", "No subject" : "Kein Betreff", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Entwurf: {markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Unterhaltung konnte nicht zurückgestellt werden", "Thread was unsnoozed" : "Zurückstellung der Unterhaltung aufgehoben", "Could not unsnooze thread" : "Zurückstellung der Unterhaltung konnte nicht aufgehoben werden", + "Message saved to Files" : "Nachricht wurde in Dateien gespeichert", + "Message could not be saved" : "Nachricht konnte nicht gespeichert werden", "This summary was AI generated" : "Diese Zusammenfassung wurde von KI generiert", "Encrypted message" : "Verschlüsselte Nachricht", "This message is unread" : "Diese Nachricht ist ungelesen", + "Choose a folder to store the message in" : "Ordner zum Speichern der Nachricht auswählen", "Unfavorite" : "Nicht favorisieren", "Favorite" : "Favorit", "Unread" : "Ungelesen", @@ -298,8 +327,6 @@ "Move Message" : "Nachricht verschieben", "Archive thread" : "Unterhaltung archivieren", "Archive message" : "Nachricht archivieren", - "Delete thread" : "Unterhaltung löschen", - "Delete message" : "Nachricht löschen", "More actions" : "Weitere Aktionen", "Back" : "Zurück", "Set custom snooze" : "Zurückstellen benutzerdefiniert setzen", @@ -307,6 +334,9 @@ "Reply with meeting" : "Mit einer Besprechung antworten", "Create task" : "Aufgabe erstellen", "Download message" : "Nachricht herunterladen", + "Save message to Files" : "Nachricht in Dateien speichern", + "Delete thread" : "Unterhaltung löschen", + "Delete message" : "Nachricht löschen", "Back to all actions" : "Zurück zu allen Aktionen", "Manage quick actions" : "Schnellaktionen verwalten", "Load more" : "Mehr laden", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Als unwichtig markieren", "Mark as important" : "Als wichtig markieren", "Report this bug" : "Diesen Bug melden", + "This description was generated by AI." : "Diese Beschreibung wurde von einer KI erstellt.", "Event created" : "Termin wurde erstellt", "Could not create event" : "Termin konnte nicht erstellt werden", "Create event" : "Termin erstellen", + "Title" : "Titel", "All day" : "Ganztägig", "Attendees" : "Teilnehmende", "You can only invite attendees if your account has an email address set" : "Du kannst nur Teilnehmer einladen, wenn in deinem Konto eine E-Mail-Adresse festgelegt ist", @@ -400,7 +432,12 @@ "Could not snooze message" : "Nachricht konnte nicht zurückgestellt werden", "Message was unsnoozed" : "Zurückstellung der Nachricht wurde aufgehoben", "Could not unsnooze message" : "Zurückstellung der Nachricht konnte nicht aufgehoben werden", + "Could not generate direct link: Message ID is missing" : "Direktlink konnte nicht erstellt werden: Nachrichten-ID fehlt", + "Direct link copied to clipboard" : "Direkten Link in die Zwischenablage kopiert", + "Copy direct link" : "Direktlink kopieren", "Forward" : "Weiterleiten", + "Only for message recipients" : "Nur für Nachrichtenempfänger", + "Link copied" : "Link kopiert", "Move message" : "Nachricht verschieben", "Translate" : "Übersetzen", "Forward message as attachment" : "Nachricht als Anhang weiterleiten", @@ -442,14 +479,17 @@ "Moving message" : "Verschiebe Nachricht", "This account cannot connect" : "Dieses Konto kann keine Verbindung herstellen", "Connection failed. Please verify your information and try again" : "Verbindung fehlgeschlagen. Bitte deine Daten überprüfen und erneut versuchen", + "Change password" : "Passwort ändern", "Used quota: {quota}% ({limit})" : "Benutztes Kontingent: {quota}% ({limit})", "Used quota: {quota}%" : "Benutztes Kontingent: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postfach konnte nicht erstellt werden. Der Name enthält wahrscheinlich ungültige Zeichen. Bitte mit einem anderen Namen versuchen.", "Remove account" : "Konto entfernen", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Das Konto für {email} und zwischengespeicherte E-Mail-Daten werden aus Nextcloud entfernt, jedoch nicht von deinem E-Mail-Provider.", "Remove {email}" : "{email} entfernen", + "could not delete account" : "Konto konnte nicht gelöscht werden", "Provisioned account is disabled" : "Bereitgestelltes Konto ist deaktiviert.", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bitte melde dich mit einem Passwort an, um dieses Konto zu aktivieren. Die aktuelle Sitzung verwendet eine passwortlose Authentifizierung, z. B. SSO oder WebAuthn.", + "Delegate account" : "Konto delegieren", "Show only subscribed folders" : "Nur abonnierte Ordner anzeigen", "Add folder" : "Ordner hinzufügen", "Folder name" : "Ordnername", @@ -622,6 +662,10 @@ "Reply to sender only" : "Nur dem Absender antworten", "Mark as unfavorite" : "Als nicht favorisiert markieren", "Mark as favorite" : "Als favorisiert markieren", + "From:" : "Von:", + "To:" : "An:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Per Link abbestellen", "Unsubscribing will stop all messages from the mailing list {sender}" : "Die Abbestellung stoppt alle Nachrichten von der Mailingliste {sender}", "Send unsubscribe email" : "Abbestellungs-E-Mail senden", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "Zertifikat importiert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Das Zertifikat konnte nicht importiert werden. Bitte sicherstellen, dass der private Schlüssel zum Zertifikat passt und nicht durch eine Passphrase geschützt ist.", "Failed to import the certificate" : "Das Zertifikat konnte nicht importiert werden", + "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "S/MIME certificates" : "S/MIME Zertifikate", "Certificate name" : "Zertifikatsname", "E-mail address" : "E-Mail-Adresse", @@ -825,7 +870,6 @@ "Delete certificate" : "Zertifikat löschen", "No certificate imported yet" : "Bislang wurde kein Zertifikat importiert", "Import certificate" : "Zertifikat importieren", - "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "PKCS #12 Certificate" : "PKCS #12-Zertifikat", "PEM Certificate" : "PEM-Zertifikat", "Certificate" : "Zertifikat", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Gewünschte Nachricht konnte nicht geladen werden", "Could not load the message" : "Nachricht konnte nicht geladen werden", "Error loading message" : "Fehler beim Laden der Nachricht", - "Determine importance using machine learning" : "Die Bedeutung mithilfe von maschinellem Lernen bestimmen", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Nachrichten werden automatisch als wichtig markiert, je nachdem, mit welchen Nachrichten du interagiert, oder als wichtig markiert hast. Am Anfang musst du möglicherweise die Wichtigkeit manuell ändern, um das System anzulernen, aber es wird sich mit der Zeit verbessern.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Von dir gesendete Nachrichten, die eine Antwort erfordern, aber nach einigen Tagen noch keine erhalten haben, werden hier angezeigt.", - "Mark all messages of this folder as read" : "Alle Nachrichten in diesem Ordner als gelesen kennzeichnen", - "Last 7 days" : "Die letzten 7 Tage", - "From me" : "Von mir" + "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", + "Choose a file to add as attachment" : "Wähle eine Datei, die als Anhang angefügt werden soll", + "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Delegated access to {userId}" : "Zugriff delegiert an {userId}", + "Revoked access for {userId}" : "Zugriff für {userId} widerrufen" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/de_DE.js b/l10n/de_DE.js index ee7c5727f9..18f2a08981 100644 --- a/l10n/de_DE.js +++ b/l10n/de_DE.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Sie erreichen die Grenze Ihres Postfach-Kontingents für {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Sie nutzen derzeit {percentage} Ihres Postfachspeichers. Bitte schaffen Sie etwas Platz, indem Sie nicht benötigte E-Mails löschen.", + "{account_email} has been delegated to you" : "{account_email} wurde an Sie delegiert", + "{user} delegated {account} to you" : "{user} hat {account} an Sie delegiert", + "{account_email} is no longer delegated to you" : "{account_email} ist nicht mehr an Sie delegiert", + "{user} revoked delegation for {account}" : "{user} hat die Delegation von {account} widerrufen", "Mail Application" : "E-Mail Anwendung", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-Mail-Adresse des Absenders %1$s ist nicht im Adressbuch, aber der Name des Absenders %2$s ist mit der folgender E-Mail-Adresse im Adressbuch %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP-Port", "SMTP User" : "SMTP-Benutzer", "SMTP Password" : "SMTP-Passwort", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Damit das Google-Konto mit dieser App funktioniert, müssen Sie die Zwei-Faktor-Authentifizierung für Google aktivieren und ein App-Passwort erstellen.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google erfordert eine OAuth-Authentifizierung. Wenn die Nextcloud-Administration Google OAuth nicht eingerichtet hat, kann stattdessen ein Google App-Passwort verwendet werden.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft erfordert OAuth-Authentifizierung. Bitten Sie Ihre Nextcloud-Administration, Microsoft OAuth in den Administrations-Einstellungen einzurichten.", "Account settings" : "Kontoeinstellungen", "Aliases" : "Aliasse", "Alias to S/MIME certificate mapping" : "Alias einem S/MIME-Zertifikat zuordnen", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Mail-Server", "Sieve server" : "Sieve-Server", "Folder search" : "Ordnersuche", + "Alias name" : "Aliasname", + "Email address" : "E-Mail-Adresse", "Update alias" : "Alias aktualisieren", "Rename alias" : "Alias umbenennen", "Show update alias form" : "Update-Alias-Formular anzeigen", "Delete alias" : "Alias löschen", "Go back" : "Zurück", "Change name" : "Name ändern", - "Email address" : "E-Mail-Adresse", "Add alias" : "Alias hinzufügen", "Create alias" : "Alias erstellen", "Cancel" : "Abbrechen", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "E-Mail-Einstellungen", "General" : "Allgemein", "Set as default mail app" : "Als Standard-E-Mail-App festlegen", + "{email} (delegated)" : "{email} (Delegiert)", "Add mail account" : "E-Mail-Konto hinzufügen", "Appearance" : "Aussehen", "Show all messages in thread" : "Alle Nachrichten der Unterhaltung anzeigen", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Sortierung", "Newest first" : "Neueste zuerst", "Oldest first" : "Älteste zuerst", + "New text block" : "Neuer Textblock", + "Title of the text block" : "Titel des neuen Textblocks", + "Content of the text block" : "Inhalt des Textblocks", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatare von Gravatar und Favicons", "Reply position" : "Position der Antwort", "Top" : "Oben", "Bottom" : "Unten", "Text blocks" : "Textblöcke", "Reusable pieces of text that can be inserted in messages" : "Wiederverwendbare Textteile, die in Nachrichten eingefügt werden können", - "New text block" : "Neuer Textblock", "Shared with me" : "Mit mir geteilt", "Privacy" : "Datenschutz", "Data collection" : "Datensammlung", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Suchen", "Send" : "Senden", "Refresh" : "Aktualisieren", + "Heading1" : "Überschrift 1", + "Heading2" : "Überschrift 2", + "Heading3" : "Überschrift 3", "About" : "Über", "Acknowledgements" : "Danksagungen", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Diese Anwendung enthält CKEditor, einen Open-Source-Editor. Copyright © CKEditor Mitwirkende. Lizensiert unter GPLv2.", - "Title of the text block" : "Titel des neuen Textblocks", - "Content of the text block" : "Inhalt des Textblocks", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Automatisch vorläufige Termine im Kalender erstellen", "No certificate" : "Kein Zertifikat", "Certificate updated" : "Zertifikat aktualisiert", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Formatierung deaktivieren", "Upload attachment" : "Anhang hochladen", "Add attachment from Files" : "Anhang von \"Dateien\" hinzufügen", - "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", "Smart picker" : "Smart Picker", "Request a read receipt" : "Lesebestätigung anfordern", "Sign message with S/MIME" : "Nachricht mit S/MIME signieren", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Montag Vormittag", "Custom date and time" : "Benutzerspezifisches Datum und Zeit", "Enter a date" : "Datum eingeben", - "Choose" : "Auswählen", + "Remove attachment {fileName}" : "Anhang {fileName} entfernen", + "Add as attachment" : "Als Anhang hinzufügen", + "Add as share link" : "Als Freigabe-Link hinzufügen", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Der Anhang überschreitet die zulässige Anhangsgröße von {size}. Bitte teilen Sie die Datei stattdessen über einen Link.","Die Anhänge überschreiten die zulässige Anhangsgröße von {size}. Bitte die Dateien stattdessen über einen Link teilen."], - "Choose a file to add as attachment" : "Wählen Sie eine Datei, die als Anhang angefügt werden soll", - "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Choose a file" : "Datei auswählen", "_{count} attachment_::_{count} attachments_" : ["{count} Anhang","{count} Anhänge"], "Untitled message" : "Nachricht ohne Titel", "Expand composer" : "Erstellungsbereich erweitern", "Close composer" : "Erstellungsbereich schließen", "Confirm" : "Bestätigen", + "Delegate access" : "Zugriff delegieren", + "Revoke" : "Widerrufen", + "{userId} will no longer be able to act on your behalf" : "{userId} wird nicht mehr in Ihrem Namen handeln können", + "Could not fetch delegates" : "Delegierte konnten nicht abgerufen werden", + "Delegated access to {displayName}" : "Zugriff delegiert an {displayName}", + "Could not delegate access" : "Zugriff konnte nicht delegiert werden", + "Revoked access for {displayName}" : "Zugriff für {displayName} widerrufen", + "Could not revoke delegation" : "Delegation konnte nicht widerrufen werden", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Benutzern ermöglichen, in Ihrem Namen E-Mails zu senden, zu empfangen und zu löschen", + "Revoke access" : "Zugriff widerrufen", + "Add delegate" : "Delegierten hinzufügen", + "Select a user" : "Einen Benutzer auswählen", + "They will be able to send, receive, and delete mail on your behalf" : "Diese können in Ihrem Namen E-Mails senden, empfangen und löschen", + "Revoke access?" : "Zugriff widerrufen?", "Tag: {name} deleted" : "Schlagwort: {name} gelöscht", "An error occurred, unable to delete the tag." : "Es ist ein Fehler aufgetreten, das Schlagwort konnte nicht gelöscht werden.", "The tag will be deleted from all messages." : "Das Schlagwort wird aus allen Nachrichten gelöscht.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Rich-Text", "No messages in this folder" : "Keine Nachrichten in diesem Ordner", "No messages" : "Keine Nachrichten", + "Choose" : "Auswählen", "Blind copy recipients only" : "Nur Bcc-Empfänger", "No subject" : "Kein Betreff", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Entwurf: {markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Unterhaltung konnte nicht zurückgestellt werden", "Thread was unsnoozed" : "Zurückstellung der Unterhaltung aufgehoben", "Could not unsnooze thread" : "Zurückstellung der Unterhaltung konnte nicht aufgehoben werden", + "Message saved to Files" : "Nachricht wurde in Dateien gespeichert", + "Message could not be saved" : "Nachricht konnte nicht gespeichert werden", "This summary was AI generated" : "Diese Zusammenfassung wurde von KI generiert", "Encrypted message" : "Verschlüsselte Nachricht", "This message is unread" : "Diese Nachricht ist ungelesen", + "Choose a folder to store the message in" : "Ordner zum Speichern der Nachricht auswählen", "Unfavorite" : "Nicht favorisieren", "Favorite" : "Favorit", "Unread" : "Ungelesen", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "Nachricht verschieben", "Archive thread" : "Unterhaltung archivieren", "Archive message" : "Nachricht archivieren", - "Delete thread" : "Unterhaltung löschen", - "Delete message" : "Nachricht löschen", "More actions" : "Weitere Aktionen", "Back" : "Zurück", "Set custom snooze" : "Zurückstellen benutzerdefiniert setzen", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Mit einer Besprechung antworten", "Create task" : "Aufgabe erstellen", "Download message" : "Nachricht herunterladen", + "Save message to Files" : "Nachricht in Dateien speichern", + "Delete thread" : "Unterhaltung löschen", + "Delete message" : "Nachricht löschen", "Back to all actions" : "Zurück zu allen Aktionen", "Manage quick actions" : "Schnellaktionen verwalten", "Load more" : "Mehr laden", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Als unwichtig markieren", "Mark as important" : "Als wichtig markieren", "Report this bug" : "Diesen Fehler melden", + "This description was generated by AI." : "Diese Beschreibung wurde von einer KI erstellt.", "Event created" : "Termin wurde erstellt", "Could not create event" : "Termin konnte nicht erstellt werden", "Create event" : "Termin erstellen", + "Title" : "Titel", "All day" : "Ganztägig", "Attendees" : "Teilnehmende", "You can only invite attendees if your account has an email address set" : "Sie können Teilnehmer nur einladen, wenn in Ihrem Konto eine E-Mail-Adresse festgelegt ist", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Nachricht konnte nicht zurückgestellt werden", "Message was unsnoozed" : "Zurückstellung der Nachricht wurde aufgehoben", "Could not unsnooze message" : "Zurückstellung der Nachricht konnte nicht aufgehoben werden", + "Could not generate direct link: Message ID is missing" : "Direktlink konnte nicht erstellt werden: Nachrichten-ID fehlt", + "Direct link copied to clipboard" : "Direkten Link in die Zwischenablage kopiert", + "Copy direct link" : "Direktlink kopieren", "Forward" : "Weiterleiten", + "Only for message recipients" : "Nur für Nachrichtenempfänger", + "Link copied" : "Link kopiert", "Move message" : "Nachricht verschieben", "Translate" : "Übersetzen", "Forward message as attachment" : "Nachricht als Anhang weiterleiten", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Verschiebe Nachricht", "This account cannot connect" : "Dieses Konto kann keine Verbindung herstellen", "Connection failed. Please verify your information and try again" : "Verbindung fehlgeschlagen. Bitte Ihre Daten überprüfen und es erneut versuchen", + "Change password" : "Passwort ändern", "Used quota: {quota}% ({limit})" : "Benutztes Kontingent: {quota}% ({limit})", "Used quota: {quota}%" : "Benutztes Kontingent: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postfach konnte nicht erstellt werden. Der Name enthält wahrscheinlich ungültige Zeichen. Bitte mit einem anderen Namen versuchen.", "Remove account" : "Konto entfernen", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Das Konto für {email} und zwischengespeicherte E-Mail-Daten werden aus Nextcloud entfernt, jedoch nicht von Ihrem E-Mail-Provider.", "Remove {email}" : "{email} entfernen", + "could not delete account" : "Konto konnte nicht gelöscht werden", "Provisioned account is disabled" : "Bereitgestelltes Konto ist deaktiviert", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bitte melden Sie sich mit einem Passwort an, um dieses Konto zu aktivieren. Die aktuelle Sitzung verwendet eine passwortlose Authentifizierung, z. B. SSO oder WebAuthn.", + "Delegate account" : "Konto delegieren", "Show only subscribed folders" : "Nur abonnierte Ordner anzeigen", "Add folder" : "Ordner hinzufügen", "Folder name" : "Ordnername", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Nur dem Absender antworten", "Mark as unfavorite" : "Als nicht favorisiert markieren", "Mark as favorite" : "Als favorisiert markieren", + "From:" : "Von:", + "To:" : "An:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Per Link abbestellen", "Unsubscribing will stop all messages from the mailing list {sender}" : "Die Abbestellung stoppt alle Nachrichten von der Mailingliste {sender}", "Send unsubscribe email" : "Abbestellungs-E-Mail senden", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "Zertifikat importiert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Das Zertifikat konnte nicht importiert werden. Bitte stellen Sie sicher, dass der private Schlüssel zum Zertifikat passt und nicht durch eine Passphrase geschützt ist.", "Failed to import the certificate" : "Das Zertifikat konnte nicht importiert werden", + "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "S/MIME certificates" : "S/MIME-Zertifikate", "Certificate name" : "Zertifikatsname", "E-mail address" : "E-Mail-Adresse", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Zertifikat löschen", "No certificate imported yet" : "Bislang wurde kein Zertifikat importiert", "Import certificate" : "Zertifikat importieren", - "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "PKCS #12 Certificate" : "PKCS #12-Zertifikat", "PEM Certificate" : "PEM-Zertifikat", "Certificate" : "Zertifikat", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Gewünschte Nachricht konnte nicht geladen werden", "Could not load the message" : "Nachricht konnte nicht geladen werden", "Error loading message" : "Fehler beim Laden der Nachricht", - "Determine importance using machine learning" : "Die Bedeutung mithilfe von maschinellem Lernen bestimmen", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Nachrichten werden automatisch als wichtig markiert, je nachdem, mit welchen Nachrichten Sie interagieren, oder als wichtig markiert haben. Am Anfang müssen Sie möglicherweise die Wichtigkeit manuell ändern, um das System anzulernen, aber es wird sich mit der Zeit verbessern.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Von Ihnen gesendete Nachrichten, die eine Antwort erfordern, aber nach einigen Tagen noch keine erhalten haben, werden hier angezeigt.", - "Mark all messages of this folder as read" : "Alle Nachrichten in diesem Ordner als gelesen markieren", - "Last 7 days" : "Die letzten 7 Tage", - "From me" : "Von mir" + "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", + "Choose a file to add as attachment" : "Wählen Sie eine Datei, die als Anhang angefügt werden soll", + "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Delegated access to {userId}" : "Zugriff delegiert an {userId}", + "Revoked access for {userId}" : "Zugriff für {userId} widerrufen" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/de_DE.json b/l10n/de_DE.json index 0f6197494b..39ae56b9e7 100644 --- a/l10n/de_DE.json +++ b/l10n/de_DE.json @@ -12,6 +12,10 @@ "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Sie erreichen die Grenze Ihres Postfach-Kontingents für {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Sie nutzen derzeit {percentage} Ihres Postfachspeichers. Bitte schaffen Sie etwas Platz, indem Sie nicht benötigte E-Mails löschen.", + "{account_email} has been delegated to you" : "{account_email} wurde an Sie delegiert", + "{user} delegated {account} to you" : "{user} hat {account} an Sie delegiert", + "{account_email} is no longer delegated to you" : "{account_email} ist nicht mehr an Sie delegiert", + "{user} revoked delegation for {account}" : "{user} hat die Delegation von {account} widerrufen", "Mail Application" : "E-Mail Anwendung", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-Mail-Adresse des Absenders %1$s ist nicht im Adressbuch, aber der Name des Absenders %2$s ist mit der folgender E-Mail-Adresse im Adressbuch %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP-Port", "SMTP User" : "SMTP-Benutzer", "SMTP Password" : "SMTP-Passwort", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Damit das Google-Konto mit dieser App funktioniert, müssen Sie die Zwei-Faktor-Authentifizierung für Google aktivieren und ein App-Passwort erstellen.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google erfordert eine OAuth-Authentifizierung. Wenn die Nextcloud-Administration Google OAuth nicht eingerichtet hat, kann stattdessen ein Google App-Passwort verwendet werden.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft erfordert OAuth-Authentifizierung. Bitten Sie Ihre Nextcloud-Administration, Microsoft OAuth in den Administrations-Einstellungen einzurichten.", "Account settings" : "Kontoeinstellungen", "Aliases" : "Aliasse", "Alias to S/MIME certificate mapping" : "Alias einem S/MIME-Zertifikat zuordnen", @@ -115,13 +120,14 @@ "Mail server" : "Mail-Server", "Sieve server" : "Sieve-Server", "Folder search" : "Ordnersuche", + "Alias name" : "Aliasname", + "Email address" : "E-Mail-Adresse", "Update alias" : "Alias aktualisieren", "Rename alias" : "Alias umbenennen", "Show update alias form" : "Update-Alias-Formular anzeigen", "Delete alias" : "Alias löschen", "Go back" : "Zurück", "Change name" : "Name ändern", - "Email address" : "E-Mail-Adresse", "Add alias" : "Alias hinzufügen", "Create alias" : "Alias erstellen", "Cancel" : "Abbrechen", @@ -134,6 +140,7 @@ "Mail settings" : "E-Mail-Einstellungen", "General" : "Allgemein", "Set as default mail app" : "Als Standard-E-Mail-App festlegen", + "{email} (delegated)" : "{email} (Delegiert)", "Add mail account" : "E-Mail-Konto hinzufügen", "Appearance" : "Aussehen", "Show all messages in thread" : "Alle Nachrichten der Unterhaltung anzeigen", @@ -148,13 +155,16 @@ "Sorting" : "Sortierung", "Newest first" : "Neueste zuerst", "Oldest first" : "Älteste zuerst", + "New text block" : "Neuer Textblock", + "Title of the text block" : "Titel des neuen Textblocks", + "Content of the text block" : "Inhalt des Textblocks", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatare von Gravatar und Favicons", "Reply position" : "Position der Antwort", "Top" : "Oben", "Bottom" : "Unten", "Text blocks" : "Textblöcke", "Reusable pieces of text that can be inserted in messages" : "Wiederverwendbare Textteile, die in Nachrichten eingefügt werden können", - "New text block" : "Neuer Textblock", "Shared with me" : "Mit mir geteilt", "Privacy" : "Datenschutz", "Data collection" : "Datensammlung", @@ -182,12 +192,12 @@ "Search" : "Suchen", "Send" : "Senden", "Refresh" : "Aktualisieren", + "Heading1" : "Überschrift 1", + "Heading2" : "Überschrift 2", + "Heading3" : "Überschrift 3", "About" : "Über", "Acknowledgements" : "Danksagungen", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Diese Anwendung enthält CKEditor, einen Open-Source-Editor. Copyright © CKEditor Mitwirkende. Lizensiert unter GPLv2.", - "Title of the text block" : "Titel des neuen Textblocks", - "Content of the text block" : "Inhalt des Textblocks", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Automatisch vorläufige Termine im Kalender erstellen", "No certificate" : "Kein Zertifikat", "Certificate updated" : "Zertifikat aktualisiert", @@ -231,7 +241,6 @@ "Disable formatting" : "Formatierung deaktivieren", "Upload attachment" : "Anhang hochladen", "Add attachment from Files" : "Anhang von \"Dateien\" hinzufügen", - "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", "Smart picker" : "Smart Picker", "Request a read receipt" : "Lesebestätigung anfordern", "Sign message with S/MIME" : "Nachricht mit S/MIME signieren", @@ -243,15 +252,31 @@ "Monday morning" : "Montag Vormittag", "Custom date and time" : "Benutzerspezifisches Datum und Zeit", "Enter a date" : "Datum eingeben", - "Choose" : "Auswählen", + "Remove attachment {fileName}" : "Anhang {fileName} entfernen", + "Add as attachment" : "Als Anhang hinzufügen", + "Add as share link" : "Als Freigabe-Link hinzufügen", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Der Anhang überschreitet die zulässige Anhangsgröße von {size}. Bitte teilen Sie die Datei stattdessen über einen Link.","Die Anhänge überschreiten die zulässige Anhangsgröße von {size}. Bitte die Dateien stattdessen über einen Link teilen."], - "Choose a file to add as attachment" : "Wählen Sie eine Datei, die als Anhang angefügt werden soll", - "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Choose a file" : "Datei auswählen", "_{count} attachment_::_{count} attachments_" : ["{count} Anhang","{count} Anhänge"], "Untitled message" : "Nachricht ohne Titel", "Expand composer" : "Erstellungsbereich erweitern", "Close composer" : "Erstellungsbereich schließen", "Confirm" : "Bestätigen", + "Delegate access" : "Zugriff delegieren", + "Revoke" : "Widerrufen", + "{userId} will no longer be able to act on your behalf" : "{userId} wird nicht mehr in Ihrem Namen handeln können", + "Could not fetch delegates" : "Delegierte konnten nicht abgerufen werden", + "Delegated access to {displayName}" : "Zugriff delegiert an {displayName}", + "Could not delegate access" : "Zugriff konnte nicht delegiert werden", + "Revoked access for {displayName}" : "Zugriff für {displayName} widerrufen", + "Could not revoke delegation" : "Delegation konnte nicht widerrufen werden", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Benutzern ermöglichen, in Ihrem Namen E-Mails zu senden, zu empfangen und zu löschen", + "Revoke access" : "Zugriff widerrufen", + "Add delegate" : "Delegierten hinzufügen", + "Select a user" : "Einen Benutzer auswählen", + "They will be able to send, receive, and delete mail on your behalf" : "Diese können in Ihrem Namen E-Mails senden, empfangen und löschen", + "Revoke access?" : "Zugriff widerrufen?", "Tag: {name} deleted" : "Schlagwort: {name} gelöscht", "An error occurred, unable to delete the tag." : "Es ist ein Fehler aufgetreten, das Schlagwort konnte nicht gelöscht werden.", "The tag will be deleted from all messages." : "Das Schlagwort wird aus allen Nachrichten gelöscht.", @@ -259,6 +284,7 @@ "Rich text" : "Rich-Text", "No messages in this folder" : "Keine Nachrichten in diesem Ordner", "No messages" : "Keine Nachrichten", + "Choose" : "Auswählen", "Blind copy recipients only" : "Nur Bcc-Empfänger", "No subject" : "Kein Betreff", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Entwurf: {markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Unterhaltung konnte nicht zurückgestellt werden", "Thread was unsnoozed" : "Zurückstellung der Unterhaltung aufgehoben", "Could not unsnooze thread" : "Zurückstellung der Unterhaltung konnte nicht aufgehoben werden", + "Message saved to Files" : "Nachricht wurde in Dateien gespeichert", + "Message could not be saved" : "Nachricht konnte nicht gespeichert werden", "This summary was AI generated" : "Diese Zusammenfassung wurde von KI generiert", "Encrypted message" : "Verschlüsselte Nachricht", "This message is unread" : "Diese Nachricht ist ungelesen", + "Choose a folder to store the message in" : "Ordner zum Speichern der Nachricht auswählen", "Unfavorite" : "Nicht favorisieren", "Favorite" : "Favorit", "Unread" : "Ungelesen", @@ -298,8 +327,6 @@ "Move Message" : "Nachricht verschieben", "Archive thread" : "Unterhaltung archivieren", "Archive message" : "Nachricht archivieren", - "Delete thread" : "Unterhaltung löschen", - "Delete message" : "Nachricht löschen", "More actions" : "Weitere Aktionen", "Back" : "Zurück", "Set custom snooze" : "Zurückstellen benutzerdefiniert setzen", @@ -307,6 +334,9 @@ "Reply with meeting" : "Mit einer Besprechung antworten", "Create task" : "Aufgabe erstellen", "Download message" : "Nachricht herunterladen", + "Save message to Files" : "Nachricht in Dateien speichern", + "Delete thread" : "Unterhaltung löschen", + "Delete message" : "Nachricht löschen", "Back to all actions" : "Zurück zu allen Aktionen", "Manage quick actions" : "Schnellaktionen verwalten", "Load more" : "Mehr laden", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Als unwichtig markieren", "Mark as important" : "Als wichtig markieren", "Report this bug" : "Diesen Fehler melden", + "This description was generated by AI." : "Diese Beschreibung wurde von einer KI erstellt.", "Event created" : "Termin wurde erstellt", "Could not create event" : "Termin konnte nicht erstellt werden", "Create event" : "Termin erstellen", + "Title" : "Titel", "All day" : "Ganztägig", "Attendees" : "Teilnehmende", "You can only invite attendees if your account has an email address set" : "Sie können Teilnehmer nur einladen, wenn in Ihrem Konto eine E-Mail-Adresse festgelegt ist", @@ -400,7 +432,12 @@ "Could not snooze message" : "Nachricht konnte nicht zurückgestellt werden", "Message was unsnoozed" : "Zurückstellung der Nachricht wurde aufgehoben", "Could not unsnooze message" : "Zurückstellung der Nachricht konnte nicht aufgehoben werden", + "Could not generate direct link: Message ID is missing" : "Direktlink konnte nicht erstellt werden: Nachrichten-ID fehlt", + "Direct link copied to clipboard" : "Direkten Link in die Zwischenablage kopiert", + "Copy direct link" : "Direktlink kopieren", "Forward" : "Weiterleiten", + "Only for message recipients" : "Nur für Nachrichtenempfänger", + "Link copied" : "Link kopiert", "Move message" : "Nachricht verschieben", "Translate" : "Übersetzen", "Forward message as attachment" : "Nachricht als Anhang weiterleiten", @@ -442,14 +479,17 @@ "Moving message" : "Verschiebe Nachricht", "This account cannot connect" : "Dieses Konto kann keine Verbindung herstellen", "Connection failed. Please verify your information and try again" : "Verbindung fehlgeschlagen. Bitte Ihre Daten überprüfen und es erneut versuchen", + "Change password" : "Passwort ändern", "Used quota: {quota}% ({limit})" : "Benutztes Kontingent: {quota}% ({limit})", "Used quota: {quota}%" : "Benutztes Kontingent: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postfach konnte nicht erstellt werden. Der Name enthält wahrscheinlich ungültige Zeichen. Bitte mit einem anderen Namen versuchen.", "Remove account" : "Konto entfernen", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Das Konto für {email} und zwischengespeicherte E-Mail-Daten werden aus Nextcloud entfernt, jedoch nicht von Ihrem E-Mail-Provider.", "Remove {email}" : "{email} entfernen", + "could not delete account" : "Konto konnte nicht gelöscht werden", "Provisioned account is disabled" : "Bereitgestelltes Konto ist deaktiviert", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bitte melden Sie sich mit einem Passwort an, um dieses Konto zu aktivieren. Die aktuelle Sitzung verwendet eine passwortlose Authentifizierung, z. B. SSO oder WebAuthn.", + "Delegate account" : "Konto delegieren", "Show only subscribed folders" : "Nur abonnierte Ordner anzeigen", "Add folder" : "Ordner hinzufügen", "Folder name" : "Ordnername", @@ -622,6 +662,10 @@ "Reply to sender only" : "Nur dem Absender antworten", "Mark as unfavorite" : "Als nicht favorisiert markieren", "Mark as favorite" : "Als favorisiert markieren", + "From:" : "Von:", + "To:" : "An:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Per Link abbestellen", "Unsubscribing will stop all messages from the mailing list {sender}" : "Die Abbestellung stoppt alle Nachrichten von der Mailingliste {sender}", "Send unsubscribe email" : "Abbestellungs-E-Mail senden", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "Zertifikat importiert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Das Zertifikat konnte nicht importiert werden. Bitte stellen Sie sicher, dass der private Schlüssel zum Zertifikat passt und nicht durch eine Passphrase geschützt ist.", "Failed to import the certificate" : "Das Zertifikat konnte nicht importiert werden", + "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "S/MIME certificates" : "S/MIME-Zertifikate", "Certificate name" : "Zertifikatsname", "E-mail address" : "E-Mail-Adresse", @@ -825,7 +870,6 @@ "Delete certificate" : "Zertifikat löschen", "No certificate imported yet" : "Bislang wurde kein Zertifikat importiert", "Import certificate" : "Zertifikat importieren", - "Import S/MIME certificate" : "S/MIME-Zertifikat importieren", "PKCS #12 Certificate" : "PKCS #12-Zertifikat", "PEM Certificate" : "PEM-Zertifikat", "Certificate" : "Zertifikat", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Gewünschte Nachricht konnte nicht geladen werden", "Could not load the message" : "Nachricht konnte nicht geladen werden", "Error loading message" : "Fehler beim Laden der Nachricht", - "Determine importance using machine learning" : "Die Bedeutung mithilfe von maschinellem Lernen bestimmen", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Nachrichten werden automatisch als wichtig markiert, je nachdem, mit welchen Nachrichten Sie interagieren, oder als wichtig markiert haben. Am Anfang müssen Sie möglicherweise die Wichtigkeit manuell ändern, um das System anzulernen, aber es wird sich mit der Zeit verbessern.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Von Ihnen gesendete Nachrichten, die eine Antwort erfordern, aber nach einigen Tagen noch keine erhalten haben, werden hier angezeigt.", - "Mark all messages of this folder as read" : "Alle Nachrichten in diesem Ordner als gelesen markieren", - "Last 7 days" : "Die letzten 7 Tage", - "From me" : "Von mir" + "Add share link from Files" : "Link zum Teilen aus Dateien hinzufügen", + "Choose a file to add as attachment" : "Wählen Sie eine Datei, die als Anhang angefügt werden soll", + "Choose a file to share as a link" : "Datei auswählen welche als Link geteilt wird", + "Delegated access to {userId}" : "Zugriff delegiert an {userId}", + "Revoked access for {userId}" : "Zugriff für {userId} widerrufen" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/el.js b/l10n/el.js index d71b32e516..281ae87b42 100644 --- a/l10n/el.js +++ b/l10n/el.js @@ -85,7 +85,6 @@ OC.L10N.register( "SMTP Port" : "Πόρτα SMTP", "SMTP User" : "Χρήστης SMTP", "SMTP Password" : "Συνθηματικό SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Για να λειτουργήσει ο λογαριασμός Google με αυτήν την εφαρμογή, πρέπει να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων για το Google και να δημιουργήσετε ένα συνθηματικό για την εφαρμογή.", "Account settings" : "Ρυθμίσεις λογαριασμού", "Aliases" : "Ψευδώνυμα", "Alias to S/MIME certificate mapping" : "Αντιστοίχιση ψευδώνυμου με πιστοποιητικό S/MIME", @@ -108,13 +107,13 @@ OC.L10N.register( "Mail server" : "Διακομιστής αλληλογραφίας", "Sieve server" : "Διακομιστής Sieve", "Folder search" : "Αναζήτηση φακέλου", + "Email address" : "Διεύθυνση αλληλογραφίας", "Update alias" : "Ενημέρωση ψευδώνυμου", "Rename alias" : "Μετονομασία ψευδώνυμου", "Show update alias form" : "Εμφάνιση φόρμας ενημέρωσης ψευδώνυμου", "Delete alias" : "Διαγραφή ψευδωνύμου", "Go back" : "Πίσω", "Change name" : "Αλλαγή ονόματος", - "Email address" : "Διεύθυνση αλληλογραφίας", "Add alias" : "Προσθήκη alias", "Create alias" : "Δημιουργία ψευδωνύμου", "Cancel" : "Ακύρωση", @@ -133,8 +132,11 @@ OC.L10N.register( "Sorting" : "Ταξινόμηση", "Newest first" : "Νεότερο πρώτα", "Oldest first" : "Παλαιότερο πρώτα", - "Text blocks" : "Μπλοκ κειμένου", "New text block" : "Νέο μπλοκ κειμένου", + "Title of the text block" : "Τίτλος μπλοκ κειμένου", + "Content of the text block" : "Περιεχόμενο μπλοκ κειμένου", + "Ok" : "ΟΚ", + "Text blocks" : "Μπλοκ κειμένου", "Shared with me" : "Κοινόχρηστα μαζί μου", "Privacy" : "Ιδιωτικότητα", "Security" : "Ασφάλεια", @@ -156,9 +158,6 @@ OC.L10N.register( "Refresh" : "Ανανέωση", "About" : "Σχετικά με", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Αυτή η εφαρμογή περιλαμβάνει τον CKEditor, έναν επεξεργαστή ανοιχτού κώδικα. Πνευματικά δικαιώματα © Συνεισφέροντες του CKEditor. Άδεια χρήσης GPLv2.", - "Title of the text block" : "Τίτλος μπλοκ κειμένου", - "Content of the text block" : "Περιεχόμενο μπλοκ κειμένου", - "Ok" : "ΟΚ", "No certificate" : "Καμία βεβαίωση", "Certificate updated" : "Η βεβαίωση ενημερώθηκε", "Could not update certificate" : "Δεν ήταν δυνατή η ενημέρωση της βεβαίωσης", @@ -197,7 +196,6 @@ OC.L10N.register( "Disable formatting" : "Απενεργοποίηση μορφοποίησης", "Upload attachment" : "Μεταφόρτωση συνημμένου", "Add attachment from Files" : "Προσθήκη συνημμένου από Αρχεία", - "Add share link from Files" : "Προσθήκη συνδέσμου κοινής χρήσης από Αρχεία", "Smart picker" : "Έξυπνος επιλογέας", "Request a read receipt" : "Αίτηση βεβαίωσης ανάγνωσης", "Sign message with S/MIME" : "Υπογραφή μηνύματος με S/MIME", @@ -209,15 +207,14 @@ OC.L10N.register( "Monday morning" : "Δευτέρα πρωί", "Custom date and time" : "Επιλέξτε ημερομηνία και ώρα", "Enter a date" : "Προσθέστε ημερομηνία", - "Choose" : "Επιλογή", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Το συνημμένο υπερβαίνει το επιτρεπόμενο μέγεθος συνημμένων {size}. Παρακαλούμε διαμοιράστε το αρχείο μέσω συνδέσμου.","Τα συνημμένα υπερβαίνουν το επιτρεπόμενο μέγεθος συνημμένων {size}. Παρακαλούμε διαμοιράστε τα αρχεία μέσω συνδέσμου."], - "Choose a file to add as attachment" : "Επιλέξτε ένα αρχείο για να προσθέσετε ως συνημμένο", - "Choose a file to share as a link" : "Επιλέξτε ένα αρχείο για κοινή χρήση ως σύνδεσμο", + "Choose a file" : "Επιλογή αρχείου", "_{count} attachment_::_{count} attachments_" : ["{count} συνημμένo","{count} συνημμένα"], "Untitled message" : "Μήνυμα χωρίς τίτλο", "Expand composer" : "Ανάπτυξη συντάκτη", "Close composer" : "Κλείσιμο συντάκτη", "Confirm" : "Επιβεβαίωση", + "Revoke" : "Ανάκληση", "Tag: {name} deleted" : "Η ετικέτα «{name)» διαγράφηκε", "An error occurred, unable to delete the tag." : "Προέκυψε σφάλμα, δεν ήταν δυνατή η διαγραφή της ετικέτας.", "The tag will be deleted from all messages." : "Η ετικέτα θα διαγραφεί από όλα τα μηνύματα.", @@ -225,6 +222,7 @@ OC.L10N.register( "Rich text" : "Εμπλουτισμένο κείμενο", "No messages in this folder" : "Δεν έχει μηνύματα ο φάκελος", "No messages" : "Κανένα μήνυμα", + "Choose" : "Επιλογή", "Blind copy recipients only" : "Αποδέκτες με κρυφή κοινοποίηση μόνο", "No subject" : "Χωρίς θέμα", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Πρόχειρο:{markup-end} {subject}", @@ -264,8 +262,6 @@ OC.L10N.register( "Move Message" : "Μετακίνηση Μηνύματος", "Archive thread" : "Αρχειοθέτηση νήματος", "Archive message" : "Αρχειοθέτηση μηνύματος", - "Delete thread" : "Διαγραφή νήματος", - "Delete message" : "Διαγραφή μηνύματος", "More actions" : "Περισσότερες ενέργειες", "Back" : "Πίσω", "Set custom snooze" : "Ορισμός προσαρμοσμένης αναβολής", @@ -273,6 +269,8 @@ OC.L10N.register( "Reply with meeting" : "Απάντηση με συνάντηση", "Create task" : "Δημιουργία εργασίας", "Download message" : "Λήψη μηνύματος", + "Delete thread" : "Διαγραφή νήματος", + "Delete message" : "Διαγραφή μηνύματος", "Back to all actions" : "Επιστροφή σε όλες τις ενέργειες", "Manage quick actions" : "Διαχείριση γρήγορων ενεργειών", "Load more" : "Φόρτωση περισσότερων", @@ -296,6 +294,7 @@ OC.L10N.register( "Event created" : "Το συμβάν δημιουργήθηκε", "Could not create event" : "Αδυναμία δημιουργίας συμβάντος", "Create event" : "Δημιουργία συμβάντος", + "Title" : "Τίτλος", "All day" : "Ολοήμερο", "Attendees" : "Συμμετέχοντες", "You can only invite attendees if your account has an email address set" : "Μπορείτε να προσκαλέσετε συμμετέχοντες μόνο εάν ο λογαριασμός σας έχει ορισμένη διεύθυνση email", @@ -360,7 +359,9 @@ OC.L10N.register( "Could not snooze message" : "Αδυναμία αναβολής του μηνύματος", "Message was unsnoozed" : "Η αναβολή του μηνύματος ανακλήθηκε", "Could not unsnooze message" : "Αδυναμία ανάκλησης της αναβολής του μηνύματος", + "Direct link copied to clipboard" : "Ο άμεσος σύνδεσμος αντιγράφηκε στο πρόχειρο", "Forward" : "Προώθηση", + "Link copied" : "Ο σύνδεσμος αντιγράφηκε", "Move message" : "Μετακίνηση μηνύματος", "Translate" : "Μετάφραση", "Forward message as attachment" : "Προώθηση μηνύματος ως συνημμένο", @@ -398,6 +399,7 @@ OC.L10N.register( "Moving" : "Μετακινείται", "Moving thread" : "Μετακίνηση νήματος", "Moving message" : "Μετακίνηση μηνύματος", + "Change password" : "Αλλαγή συνθηματικού", "Used quota: {quota}% ({limit})" : "Χρησιμοποιημένη ποσόστωση: {quota}% ({limit})", "Used quota: {quota}%" : "Χρησιμοποιημένη ποσόστωση: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Αδυναμία δημιουργίας γραμματοκιβωτίου. Το όνομα πιθανώς περιέχει μη έγκυρους χαρακτήρες. Παρακαλώ δοκιμάστε ένα άλλο όνομα.", @@ -572,6 +574,8 @@ OC.L10N.register( "Reply to sender only" : "Απάντηση μόνο στον αποστολέα", "Mark as unfavorite" : "Κατάργηση επισήμανσης ως αγαπημένο", "Mark as favorite" : "Επισήμανση ως αγαπημένο", + "From:" : "Από:", + "To:" : "Μέχρι:", "Unsubscribe via link" : "Διαγραφή μέσω συνδέσμου", "Unsubscribing will stop all messages from the mailing list {sender}" : "Η διαγραφή θα σταματήσει όλα τα μηνύματα από τη λίστα αλληλογραφίας {sender}", "Send unsubscribe email" : "Αποστολή email διαγραφής", @@ -763,6 +767,7 @@ OC.L10N.register( "Certificate imported successfully" : "Το πιστοποιητικό εισήχθη με επιτυχία", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Αποτυχία εισαγωγής του πιστοποιητικού. Βεβαιωθείτε ότι το ιδιωτικό κλειδί ταιριάζει με το πιστοποιητικό και δεν προστατεύεται από φράση πρόσβασης.", "Failed to import the certificate" : "Αποτυχία εισαγωγής του πιστοποιητικού", + "Import S/MIME certificate" : "Εισαγωγή πιστοποιητικού S/MIME", "S/MIME certificates" : "Πιστοποιητικά S/MIME", "Certificate name" : "Όνομα πιστοποιητικού", "E-mail address" : "E-mail διεύθυνση", @@ -770,7 +775,6 @@ OC.L10N.register( "Delete certificate" : "Διαγραφή πιστοποιητικού", "No certificate imported yet" : "Δεν έχει εισαχθεί ακόμα πιστοποιητικό", "Import certificate" : "Εισαγωγή πιστοποιητικού", - "Import S/MIME certificate" : "Εισαγωγή πιστοποιητικού S/MIME", "PKCS #12 Certificate" : "Πιστοποιητικό PKCS #12", "PEM Certificate" : "Πιστοποιητικό PEM", "Certificate" : "Πιστοποιητικό", @@ -830,10 +834,8 @@ OC.L10N.register( "Could not load the desired message" : "Αδυναμία φόρτωσης του προτιμώμενου μηνύματος", "Could not load the message" : "Δεν ήταν δυνατή η φόρτωση του μηνύματος", "Error loading message" : "Σφάλμα φόρτωσης μηνύματος", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Τα μηνύματα θα επισημανθούν αυτόματα ως σημαντικά με βάση αυτά με τα οποία επισημαίνετε ως σημαντικά. Στην αρχή ίσως χρειαστεί να τα αλλάζετε χειροκίνητα, έως ότου εκπαιδευτεί το σύστημα, αλλά θα βελτιώνεται σταδιακά με την πάροδο του χρόνου.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Μηνύματα που στείλατε και απαιτούν απάντηση αλλά δεν έλαβαν καμία μετά από μερικές ημέρες θα εμφανίζονται εδώ.", - "Mark all messages of this folder as read" : "Σημείωση όλων των μυνημάτων ως αναγνωσμένων", - "Last 7 days" : "Τελευταίες 7 ημέρες", - "From me" : "Από εμένα" + "Add share link from Files" : "Προσθήκη συνδέσμου κοινής χρήσης από Αρχεία", + "Choose a file to add as attachment" : "Επιλέξτε ένα αρχείο για να προσθέσετε ως συνημμένο", + "Choose a file to share as a link" : "Επιλέξτε ένα αρχείο για κοινή χρήση ως σύνδεσμο" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/el.json b/l10n/el.json index 54fa0a761f..e8bc16f756 100644 --- a/l10n/el.json +++ b/l10n/el.json @@ -83,7 +83,6 @@ "SMTP Port" : "Πόρτα SMTP", "SMTP User" : "Χρήστης SMTP", "SMTP Password" : "Συνθηματικό SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Για να λειτουργήσει ο λογαριασμός Google με αυτήν την εφαρμογή, πρέπει να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων για το Google και να δημιουργήσετε ένα συνθηματικό για την εφαρμογή.", "Account settings" : "Ρυθμίσεις λογαριασμού", "Aliases" : "Ψευδώνυμα", "Alias to S/MIME certificate mapping" : "Αντιστοίχιση ψευδώνυμου με πιστοποιητικό S/MIME", @@ -106,13 +105,13 @@ "Mail server" : "Διακομιστής αλληλογραφίας", "Sieve server" : "Διακομιστής Sieve", "Folder search" : "Αναζήτηση φακέλου", + "Email address" : "Διεύθυνση αλληλογραφίας", "Update alias" : "Ενημέρωση ψευδώνυμου", "Rename alias" : "Μετονομασία ψευδώνυμου", "Show update alias form" : "Εμφάνιση φόρμας ενημέρωσης ψευδώνυμου", "Delete alias" : "Διαγραφή ψευδωνύμου", "Go back" : "Πίσω", "Change name" : "Αλλαγή ονόματος", - "Email address" : "Διεύθυνση αλληλογραφίας", "Add alias" : "Προσθήκη alias", "Create alias" : "Δημιουργία ψευδωνύμου", "Cancel" : "Ακύρωση", @@ -131,8 +130,11 @@ "Sorting" : "Ταξινόμηση", "Newest first" : "Νεότερο πρώτα", "Oldest first" : "Παλαιότερο πρώτα", - "Text blocks" : "Μπλοκ κειμένου", "New text block" : "Νέο μπλοκ κειμένου", + "Title of the text block" : "Τίτλος μπλοκ κειμένου", + "Content of the text block" : "Περιεχόμενο μπλοκ κειμένου", + "Ok" : "ΟΚ", + "Text blocks" : "Μπλοκ κειμένου", "Shared with me" : "Κοινόχρηστα μαζί μου", "Privacy" : "Ιδιωτικότητα", "Security" : "Ασφάλεια", @@ -154,9 +156,6 @@ "Refresh" : "Ανανέωση", "About" : "Σχετικά με", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Αυτή η εφαρμογή περιλαμβάνει τον CKEditor, έναν επεξεργαστή ανοιχτού κώδικα. Πνευματικά δικαιώματα © Συνεισφέροντες του CKEditor. Άδεια χρήσης GPLv2.", - "Title of the text block" : "Τίτλος μπλοκ κειμένου", - "Content of the text block" : "Περιεχόμενο μπλοκ κειμένου", - "Ok" : "ΟΚ", "No certificate" : "Καμία βεβαίωση", "Certificate updated" : "Η βεβαίωση ενημερώθηκε", "Could not update certificate" : "Δεν ήταν δυνατή η ενημέρωση της βεβαίωσης", @@ -195,7 +194,6 @@ "Disable formatting" : "Απενεργοποίηση μορφοποίησης", "Upload attachment" : "Μεταφόρτωση συνημμένου", "Add attachment from Files" : "Προσθήκη συνημμένου από Αρχεία", - "Add share link from Files" : "Προσθήκη συνδέσμου κοινής χρήσης από Αρχεία", "Smart picker" : "Έξυπνος επιλογέας", "Request a read receipt" : "Αίτηση βεβαίωσης ανάγνωσης", "Sign message with S/MIME" : "Υπογραφή μηνύματος με S/MIME", @@ -207,15 +205,14 @@ "Monday morning" : "Δευτέρα πρωί", "Custom date and time" : "Επιλέξτε ημερομηνία και ώρα", "Enter a date" : "Προσθέστε ημερομηνία", - "Choose" : "Επιλογή", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Το συνημμένο υπερβαίνει το επιτρεπόμενο μέγεθος συνημμένων {size}. Παρακαλούμε διαμοιράστε το αρχείο μέσω συνδέσμου.","Τα συνημμένα υπερβαίνουν το επιτρεπόμενο μέγεθος συνημμένων {size}. Παρακαλούμε διαμοιράστε τα αρχεία μέσω συνδέσμου."], - "Choose a file to add as attachment" : "Επιλέξτε ένα αρχείο για να προσθέσετε ως συνημμένο", - "Choose a file to share as a link" : "Επιλέξτε ένα αρχείο για κοινή χρήση ως σύνδεσμο", + "Choose a file" : "Επιλογή αρχείου", "_{count} attachment_::_{count} attachments_" : ["{count} συνημμένo","{count} συνημμένα"], "Untitled message" : "Μήνυμα χωρίς τίτλο", "Expand composer" : "Ανάπτυξη συντάκτη", "Close composer" : "Κλείσιμο συντάκτη", "Confirm" : "Επιβεβαίωση", + "Revoke" : "Ανάκληση", "Tag: {name} deleted" : "Η ετικέτα «{name)» διαγράφηκε", "An error occurred, unable to delete the tag." : "Προέκυψε σφάλμα, δεν ήταν δυνατή η διαγραφή της ετικέτας.", "The tag will be deleted from all messages." : "Η ετικέτα θα διαγραφεί από όλα τα μηνύματα.", @@ -223,6 +220,7 @@ "Rich text" : "Εμπλουτισμένο κείμενο", "No messages in this folder" : "Δεν έχει μηνύματα ο φάκελος", "No messages" : "Κανένα μήνυμα", + "Choose" : "Επιλογή", "Blind copy recipients only" : "Αποδέκτες με κρυφή κοινοποίηση μόνο", "No subject" : "Χωρίς θέμα", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Πρόχειρο:{markup-end} {subject}", @@ -262,8 +260,6 @@ "Move Message" : "Μετακίνηση Μηνύματος", "Archive thread" : "Αρχειοθέτηση νήματος", "Archive message" : "Αρχειοθέτηση μηνύματος", - "Delete thread" : "Διαγραφή νήματος", - "Delete message" : "Διαγραφή μηνύματος", "More actions" : "Περισσότερες ενέργειες", "Back" : "Πίσω", "Set custom snooze" : "Ορισμός προσαρμοσμένης αναβολής", @@ -271,6 +267,8 @@ "Reply with meeting" : "Απάντηση με συνάντηση", "Create task" : "Δημιουργία εργασίας", "Download message" : "Λήψη μηνύματος", + "Delete thread" : "Διαγραφή νήματος", + "Delete message" : "Διαγραφή μηνύματος", "Back to all actions" : "Επιστροφή σε όλες τις ενέργειες", "Manage quick actions" : "Διαχείριση γρήγορων ενεργειών", "Load more" : "Φόρτωση περισσότερων", @@ -294,6 +292,7 @@ "Event created" : "Το συμβάν δημιουργήθηκε", "Could not create event" : "Αδυναμία δημιουργίας συμβάντος", "Create event" : "Δημιουργία συμβάντος", + "Title" : "Τίτλος", "All day" : "Ολοήμερο", "Attendees" : "Συμμετέχοντες", "You can only invite attendees if your account has an email address set" : "Μπορείτε να προσκαλέσετε συμμετέχοντες μόνο εάν ο λογαριασμός σας έχει ορισμένη διεύθυνση email", @@ -358,7 +357,9 @@ "Could not snooze message" : "Αδυναμία αναβολής του μηνύματος", "Message was unsnoozed" : "Η αναβολή του μηνύματος ανακλήθηκε", "Could not unsnooze message" : "Αδυναμία ανάκλησης της αναβολής του μηνύματος", + "Direct link copied to clipboard" : "Ο άμεσος σύνδεσμος αντιγράφηκε στο πρόχειρο", "Forward" : "Προώθηση", + "Link copied" : "Ο σύνδεσμος αντιγράφηκε", "Move message" : "Μετακίνηση μηνύματος", "Translate" : "Μετάφραση", "Forward message as attachment" : "Προώθηση μηνύματος ως συνημμένο", @@ -396,6 +397,7 @@ "Moving" : "Μετακινείται", "Moving thread" : "Μετακίνηση νήματος", "Moving message" : "Μετακίνηση μηνύματος", + "Change password" : "Αλλαγή συνθηματικού", "Used quota: {quota}% ({limit})" : "Χρησιμοποιημένη ποσόστωση: {quota}% ({limit})", "Used quota: {quota}%" : "Χρησιμοποιημένη ποσόστωση: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Αδυναμία δημιουργίας γραμματοκιβωτίου. Το όνομα πιθανώς περιέχει μη έγκυρους χαρακτήρες. Παρακαλώ δοκιμάστε ένα άλλο όνομα.", @@ -570,6 +572,8 @@ "Reply to sender only" : "Απάντηση μόνο στον αποστολέα", "Mark as unfavorite" : "Κατάργηση επισήμανσης ως αγαπημένο", "Mark as favorite" : "Επισήμανση ως αγαπημένο", + "From:" : "Από:", + "To:" : "Μέχρι:", "Unsubscribe via link" : "Διαγραφή μέσω συνδέσμου", "Unsubscribing will stop all messages from the mailing list {sender}" : "Η διαγραφή θα σταματήσει όλα τα μηνύματα από τη λίστα αλληλογραφίας {sender}", "Send unsubscribe email" : "Αποστολή email διαγραφής", @@ -761,6 +765,7 @@ "Certificate imported successfully" : "Το πιστοποιητικό εισήχθη με επιτυχία", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Αποτυχία εισαγωγής του πιστοποιητικού. Βεβαιωθείτε ότι το ιδιωτικό κλειδί ταιριάζει με το πιστοποιητικό και δεν προστατεύεται από φράση πρόσβασης.", "Failed to import the certificate" : "Αποτυχία εισαγωγής του πιστοποιητικού", + "Import S/MIME certificate" : "Εισαγωγή πιστοποιητικού S/MIME", "S/MIME certificates" : "Πιστοποιητικά S/MIME", "Certificate name" : "Όνομα πιστοποιητικού", "E-mail address" : "E-mail διεύθυνση", @@ -768,7 +773,6 @@ "Delete certificate" : "Διαγραφή πιστοποιητικού", "No certificate imported yet" : "Δεν έχει εισαχθεί ακόμα πιστοποιητικό", "Import certificate" : "Εισαγωγή πιστοποιητικού", - "Import S/MIME certificate" : "Εισαγωγή πιστοποιητικού S/MIME", "PKCS #12 Certificate" : "Πιστοποιητικό PKCS #12", "PEM Certificate" : "Πιστοποιητικό PEM", "Certificate" : "Πιστοποιητικό", @@ -828,10 +832,8 @@ "Could not load the desired message" : "Αδυναμία φόρτωσης του προτιμώμενου μηνύματος", "Could not load the message" : "Δεν ήταν δυνατή η φόρτωση του μηνύματος", "Error loading message" : "Σφάλμα φόρτωσης μηνύματος", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Τα μηνύματα θα επισημανθούν αυτόματα ως σημαντικά με βάση αυτά με τα οποία επισημαίνετε ως σημαντικά. Στην αρχή ίσως χρειαστεί να τα αλλάζετε χειροκίνητα, έως ότου εκπαιδευτεί το σύστημα, αλλά θα βελτιώνεται σταδιακά με την πάροδο του χρόνου.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Μηνύματα που στείλατε και απαιτούν απάντηση αλλά δεν έλαβαν καμία μετά από μερικές ημέρες θα εμφανίζονται εδώ.", - "Mark all messages of this folder as read" : "Σημείωση όλων των μυνημάτων ως αναγνωσμένων", - "Last 7 days" : "Τελευταίες 7 ημέρες", - "From me" : "Από εμένα" + "Add share link from Files" : "Προσθήκη συνδέσμου κοινής χρήσης από Αρχεία", + "Choose a file to add as attachment" : "Επιλέξτε ένα αρχείο για να προσθέσετε ως συνημμένο", + "Choose a file to share as a link" : "Επιλέξτε ένα αρχείο για κοινή χρήση ως σύνδεσμο" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js index cb33c2828d..018ff16325 100644 --- a/l10n/en_GB.js +++ b/l10n/en_GB.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Mail", "You are reaching your mailbox quota limit for {account_email}" : "You are reaching your mailbox quota limit for {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails.", + "{account_email} has been delegated to you" : "{account_email} has been delegated to you", + "{user} delegated {account} to you" : "{user} delegated {account} to you", + "{account_email} is no longer delegated to you" : "{account_email} is no longer delegated to you", + "{user} revoked delegation for {account}" : "{user} revoked delegation for {account}", "Mail Application" : "Mail Application", "Mails" : "Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Folder search", + "Alias name" : "Alias name", + "Email address" : "Email address", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "Change name", - "Email address" : "Email address", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "Cancel", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "Mail settings", "General" : "General", "Set as default mail app" : "Set as default mail app", + "{email} (delegated)" : "{email} (delegated)", "Add mail account" : "Add mail account", "Appearance" : "Appearance", "Show all messages in thread" : "Show all messages in thread", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Sorting", "Newest first" : "Newest first", "Oldest first" : "Oldest first", + "New text block" : "New text block", + "Title of the text block" : "Title of the text block", + "Content of the text block" : "Content of the text block", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Avatars from Gravatar and favicons", "Reply position" : "Reply position", "Top" : "Top", "Bottom" : "Bottom", "Text blocks" : "Text blocks", "Reusable pieces of text that can be inserted in messages" : "Reusable pieces of text that can be inserted in messages", - "New text block" : "New text block", "Shared with me" : "Shared with me", "Privacy" : "Privacy", "Data collection" : "Data collection", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Search", "Send" : "Send", "Refresh" : "Refresh", + "Heading1" : "Heading1", + "Heading2" : "Heading2", + "Heading3" : "Heading3", "About" : "About", "Acknowledgements" : "Acknowledgements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Title of the text block", - "Content of the text block" : "Content of the text block", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automatically create tentative appointments in calendar", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Disable formatting", "Upload attachment" : "Upload attachment", "Add attachment from Files" : "Add attachment from Files", - "Add share link from Files" : "Add share link from Files", "Smart picker" : "Smart picker", "Request a read receipt" : "Request a read receipt", "Sign message with S/MIME" : "Sign message with S/MIME", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "Choose", + "Remove attachment {fileName}" : "Remove attachment {fileName}", + "Add as attachment" : "Add as attachment", + "Add as share link" : "Add as share link", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "Choose a file", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "Confirm", + "Delegate access" : "Delegate access", + "Revoke" : "Revoke", + "{userId} will no longer be able to act on your behalf" : "{userId} will no longer be able to act on your behalf", + "Could not fetch delegates" : "Could not fetch delegates", + "Delegated access to {displayName}" : "Delegated access to {displayName}", + "Could not delegate access" : "Could not delegate access", + "Revoked access for {displayName}" : "Revoked access for {displayName}", + "Could not revoke delegation" : "Could not revoke delegation", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Allow users to send, receive, and delete mail on your behalf", + "Revoke access" : "Revoke access", + "Add delegate" : "Add delegate", + "Select a user" : "Select a user", + "They will be able to send, receive, and delete mail on your behalf" : "They will be able to send, receive, and delete mail on your behalf", + "Revoke access?" : "Revoke access?", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Rich text", "No messages in this folder" : "No messages in this folder", "No messages" : "No messages", + "Choose" : "Choose", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Could not snooze thread", "Thread was unsnoozed" : "Thread was unsnoozed", "Could not unsnooze thread" : "Could not unsnooze thread", + "Message saved to Files" : "Message saved to Files", + "Message could not be saved" : "Message could not be saved", "This summary was AI generated" : "This summary was AI generated", "Encrypted message" : "Encrypted message", "This message is unread" : "This message is unread", + "Choose a folder to store the message in" : "Choose a folder to store the message in", "Unfavorite" : "Unfavourite", "Favorite" : "Favourite", "Unread" : "Unread", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "Move Message", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "Back", "Set custom snooze" : "Set custom snooze", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Reply with meeting", "Create task" : "Create task", "Download message" : "Download message", + "Save message to Files" : "Save message to Files", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Back to all actions" : "Back to all actions", "Manage quick actions" : "Manage quick actions", "Load more" : "Load more", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Mark as unimportant", "Mark as important" : "Mark as important", "Report this bug" : "Report this bug", + "This description was generated by AI." : "This description was generated by AI.", "Event created" : "Event created", "Could not create event" : "Could not create event", "Create event" : "Create event", + "Title" : "Title", "All day" : "All day", "Attendees" : "Attendees", "You can only invite attendees if your account has an email address set" : "You can only invite attendees if your account has an email address set", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Could not snooze message", "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", + "Could not generate direct link: Message ID is missing" : "Could not generate direct link: Message ID is missing", + "Direct link copied to clipboard" : "Direct link copied to clipboard", + "Copy direct link" : "Copy direct link", "Forward" : "Forward", + "Only for message recipients" : "Only for message recipients", + "Link copied" : "Link copied", "Move message" : "Move message", "Translate" : "Translate", "Forward message as attachment" : "Forward message as attachment", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Moving message", "This account cannot connect" : "This account cannot connect", "Connection failed. Please verify your information and try again" : "Connection failed. Please verify your information and try again", + "Change password" : "Change password", "Used quota: {quota}% ({limit})" : "Used quota: {quota}% ({limit})", "Used quota: {quota}%" : "Used quota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Unable to create mailbox. The name likely contains invalid characters. Please try another name.", "Remove account" : "Remove account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", "Remove {email}" : "Remove {email}", + "could not delete account" : "could not delete account", "Provisioned account is disabled" : "Provisioned account is disabled", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn.", + "Delegate account" : "Delegate account", "Show only subscribed folders" : "Show only subscribed folders", "Add folder" : "Add folder", "Folder name" : "Folder name", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Remove from Favourites", "Mark as favorite" : "Mark as favourite", + "From:" : "From:", + "To:" : "To:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Determine importance using machine learning" : "Determine importance using machine learning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here.", - "Mark all messages of this folder as read" : "Mark all messages of this folder as read", - "Last 7 days" : "Last 7 days", - "From me" : "From me" + "Add share link from Files" : "Add share link from Files", + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link", + "Delegated access to {userId}" : "Delegated access to {userId}", + "Revoked access for {userId}" : "Revoked access for {userId}" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json index e5a736f400..bfe04a3e94 100644 --- a/l10n/en_GB.json +++ b/l10n/en_GB.json @@ -12,6 +12,10 @@ "Mail" : "Mail", "You are reaching your mailbox quota limit for {account_email}" : "You are reaching your mailbox quota limit for {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails.", + "{account_email} has been delegated to you" : "{account_email} has been delegated to you", + "{user} delegated {account} to you" : "{user} delegated {account} to you", + "{account_email} is no longer delegated to you" : "{account_email} is no longer delegated to you", + "{user} revoked delegation for {account}" : "{user} revoked delegation for {account}", "Mail Application" : "Mail Application", "Mails" : "Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -115,13 +120,14 @@ "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Folder search", + "Alias name" : "Alias name", + "Email address" : "Email address", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "Change name", - "Email address" : "Email address", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "Cancel", @@ -134,6 +140,7 @@ "Mail settings" : "Mail settings", "General" : "General", "Set as default mail app" : "Set as default mail app", + "{email} (delegated)" : "{email} (delegated)", "Add mail account" : "Add mail account", "Appearance" : "Appearance", "Show all messages in thread" : "Show all messages in thread", @@ -148,13 +155,16 @@ "Sorting" : "Sorting", "Newest first" : "Newest first", "Oldest first" : "Oldest first", + "New text block" : "New text block", + "Title of the text block" : "Title of the text block", + "Content of the text block" : "Content of the text block", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Avatars from Gravatar and favicons", "Reply position" : "Reply position", "Top" : "Top", "Bottom" : "Bottom", "Text blocks" : "Text blocks", "Reusable pieces of text that can be inserted in messages" : "Reusable pieces of text that can be inserted in messages", - "New text block" : "New text block", "Shared with me" : "Shared with me", "Privacy" : "Privacy", "Data collection" : "Data collection", @@ -182,12 +192,12 @@ "Search" : "Search", "Send" : "Send", "Refresh" : "Refresh", + "Heading1" : "Heading1", + "Heading2" : "Heading2", + "Heading3" : "Heading3", "About" : "About", "Acknowledgements" : "Acknowledgements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Title of the text block", - "Content of the text block" : "Content of the text block", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automatically create tentative appointments in calendar", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", @@ -231,7 +241,6 @@ "Disable formatting" : "Disable formatting", "Upload attachment" : "Upload attachment", "Add attachment from Files" : "Add attachment from Files", - "Add share link from Files" : "Add share link from Files", "Smart picker" : "Smart picker", "Request a read receipt" : "Request a read receipt", "Sign message with S/MIME" : "Sign message with S/MIME", @@ -243,15 +252,31 @@ "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "Choose", + "Remove attachment {fileName}" : "Remove attachment {fileName}", + "Add as attachment" : "Add as attachment", + "Add as share link" : "Add as share link", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "Choose a file", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "Confirm", + "Delegate access" : "Delegate access", + "Revoke" : "Revoke", + "{userId} will no longer be able to act on your behalf" : "{userId} will no longer be able to act on your behalf", + "Could not fetch delegates" : "Could not fetch delegates", + "Delegated access to {displayName}" : "Delegated access to {displayName}", + "Could not delegate access" : "Could not delegate access", + "Revoked access for {displayName}" : "Revoked access for {displayName}", + "Could not revoke delegation" : "Could not revoke delegation", + "Delegation" : "Delegation", + "Allow users to send, receive, and delete mail on your behalf" : "Allow users to send, receive, and delete mail on your behalf", + "Revoke access" : "Revoke access", + "Add delegate" : "Add delegate", + "Select a user" : "Select a user", + "They will be able to send, receive, and delete mail on your behalf" : "They will be able to send, receive, and delete mail on your behalf", + "Revoke access?" : "Revoke access?", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", @@ -259,6 +284,7 @@ "Rich text" : "Rich text", "No messages in this folder" : "No messages in this folder", "No messages" : "No messages", + "Choose" : "Choose", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Could not snooze thread", "Thread was unsnoozed" : "Thread was unsnoozed", "Could not unsnooze thread" : "Could not unsnooze thread", + "Message saved to Files" : "Message saved to Files", + "Message could not be saved" : "Message could not be saved", "This summary was AI generated" : "This summary was AI generated", "Encrypted message" : "Encrypted message", "This message is unread" : "This message is unread", + "Choose a folder to store the message in" : "Choose a folder to store the message in", "Unfavorite" : "Unfavourite", "Favorite" : "Favourite", "Unread" : "Unread", @@ -298,8 +327,6 @@ "Move Message" : "Move Message", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "Back", "Set custom snooze" : "Set custom snooze", @@ -307,6 +334,9 @@ "Reply with meeting" : "Reply with meeting", "Create task" : "Create task", "Download message" : "Download message", + "Save message to Files" : "Save message to Files", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Back to all actions" : "Back to all actions", "Manage quick actions" : "Manage quick actions", "Load more" : "Load more", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Mark as unimportant", "Mark as important" : "Mark as important", "Report this bug" : "Report this bug", + "This description was generated by AI." : "This description was generated by AI.", "Event created" : "Event created", "Could not create event" : "Could not create event", "Create event" : "Create event", + "Title" : "Title", "All day" : "All day", "Attendees" : "Attendees", "You can only invite attendees if your account has an email address set" : "You can only invite attendees if your account has an email address set", @@ -400,7 +432,12 @@ "Could not snooze message" : "Could not snooze message", "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", + "Could not generate direct link: Message ID is missing" : "Could not generate direct link: Message ID is missing", + "Direct link copied to clipboard" : "Direct link copied to clipboard", + "Copy direct link" : "Copy direct link", "Forward" : "Forward", + "Only for message recipients" : "Only for message recipients", + "Link copied" : "Link copied", "Move message" : "Move message", "Translate" : "Translate", "Forward message as attachment" : "Forward message as attachment", @@ -442,14 +479,17 @@ "Moving message" : "Moving message", "This account cannot connect" : "This account cannot connect", "Connection failed. Please verify your information and try again" : "Connection failed. Please verify your information and try again", + "Change password" : "Change password", "Used quota: {quota}% ({limit})" : "Used quota: {quota}% ({limit})", "Used quota: {quota}%" : "Used quota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Unable to create mailbox. The name likely contains invalid characters. Please try another name.", "Remove account" : "Remove account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", "Remove {email}" : "Remove {email}", + "could not delete account" : "could not delete account", "Provisioned account is disabled" : "Provisioned account is disabled", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn.", + "Delegate account" : "Delegate account", "Show only subscribed folders" : "Show only subscribed folders", "Add folder" : "Add folder", "Folder name" : "Folder name", @@ -622,6 +662,10 @@ "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Remove from Favourites", "Mark as favorite" : "Mark as favourite", + "From:" : "From:", + "To:" : "To:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -825,7 +870,6 @@ "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Determine importance using machine learning" : "Determine importance using machine learning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here.", - "Mark all messages of this folder as read" : "Mark all messages of this folder as read", - "Last 7 days" : "Last 7 days", - "From me" : "From me" + "Add share link from Files" : "Add share link from Files", + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link", + "Delegated access to {userId}" : "Delegated access to {userId}", + "Revoked access for {userId}" : "Revoked access for {userId}" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/eo.js b/l10n/eo.js index 3dbfdb72ad..8bdfacc015 100644 --- a/l10n/eo.js +++ b/l10n/eo.js @@ -38,14 +38,15 @@ OC.L10N.register( "Writing mode" : "Skribreĝimo", "Preferred writing mode for new messages and replies." : "Prefera skribreĝimo por novaj mesaĝoj kaj respondoj.", "Mail server" : "Retpoŝtoservilo", + "Email address" : "Retpoŝtadreso", "Go back" : "Reveni", "Change name" : "Ŝanĝi nomon", - "Email address" : "Retpoŝtadreso", "Cancel" : "Nuligi", "General" : "Ĝenerala", "Add mail account" : "Aldoni retpoŝtan konton", "Newest first" : "Pli novaj unue", "Oldest first" : "Malpli novaj unue", + "Ok" : "Bone", "Security" : "Sekurigo", "Compose new message" : "Krei novan mesaĝon", "Newer message" : "Pli nova mesaĝo", @@ -57,7 +58,6 @@ OC.L10N.register( "Search" : "Serĉi", "Send" : "Sendi", "Refresh" : "Aktualigi", - "Ok" : "Bone", "From" : "De", "Select account" : "Elekti konton", "To" : "Al", @@ -68,11 +68,11 @@ OC.L10N.register( "Upload attachment" : "Alŝuti kunsendaĵon", "Add attachment from Files" : "Aldoni kunsendaĵojn el „Dosieroj“", "Enter a date" : "Entajpu daton", - "Choose" : "Elekti", - "Choose a file to add as attachment" : "Elektu dosieron aldonotan kiel kunsendaĵon", "Confirm" : "Konfirmi", + "Revoke" : "Senvalidigi", "Plain text" : "Ebenaĵa teksto", "No messages in this folder" : "Neniu mesaĝo en tiu dosierujo", + "Choose" : "Elekti", "Blind copy recipients only" : "Nur blindkopiaj ricevontoj", "Unfavorite" : "Malpliŝatati", "Favorite" : "Pliŝatati", @@ -96,6 +96,7 @@ OC.L10N.register( "Favorites" : "Pliŝataĵoj", "Other" : "Alia", "Forward" : "Antaŭen", + "Link copied" : "Ligilo kopiita", "Translate" : "Traduku", "Unnamed" : "Nenomita", "Embedded message" : "Enkorpiga mesaĝo", @@ -139,6 +140,8 @@ OC.L10N.register( "Tag already exists" : "La etikedo jam ekzistas", "Not found" : "Ne trovita", "Reply to sender only" : "Respondi nur al sendinto", + "From:" : "El:", + "To:" : "Al:", "Untitled event" : "Sentitola okazaĵo", "Import into {calendar}" : "Importi en {calendar}", "Event imported into {calendar}" : "Okazaĵo importis en {calendar}", @@ -191,7 +194,6 @@ OC.L10N.register( "Could not load the desired message" : "Ne eblis ŝargi la deziratan mesaĝon", "Could not load the message" : "Ne eblis ŝargi la mesaĝon", "Error loading message" : "Eraris ŝargi mesaĝon", - "Mark all messages of this folder as read" : "Marki ĉiujn mesaĝojn el tiu dosierujo kiel legitaj", - "Last 7 days" : "Lastaj 7 tagoj" + "Choose a file to add as attachment" : "Elektu dosieron aldonotan kiel kunsendaĵon" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/eo.json b/l10n/eo.json index 46f06a0fe8..a7b5eb2b15 100644 --- a/l10n/eo.json +++ b/l10n/eo.json @@ -36,14 +36,15 @@ "Writing mode" : "Skribreĝimo", "Preferred writing mode for new messages and replies." : "Prefera skribreĝimo por novaj mesaĝoj kaj respondoj.", "Mail server" : "Retpoŝtoservilo", + "Email address" : "Retpoŝtadreso", "Go back" : "Reveni", "Change name" : "Ŝanĝi nomon", - "Email address" : "Retpoŝtadreso", "Cancel" : "Nuligi", "General" : "Ĝenerala", "Add mail account" : "Aldoni retpoŝtan konton", "Newest first" : "Pli novaj unue", "Oldest first" : "Malpli novaj unue", + "Ok" : "Bone", "Security" : "Sekurigo", "Compose new message" : "Krei novan mesaĝon", "Newer message" : "Pli nova mesaĝo", @@ -55,7 +56,6 @@ "Search" : "Serĉi", "Send" : "Sendi", "Refresh" : "Aktualigi", - "Ok" : "Bone", "From" : "De", "Select account" : "Elekti konton", "To" : "Al", @@ -66,11 +66,11 @@ "Upload attachment" : "Alŝuti kunsendaĵon", "Add attachment from Files" : "Aldoni kunsendaĵojn el „Dosieroj“", "Enter a date" : "Entajpu daton", - "Choose" : "Elekti", - "Choose a file to add as attachment" : "Elektu dosieron aldonotan kiel kunsendaĵon", "Confirm" : "Konfirmi", + "Revoke" : "Senvalidigi", "Plain text" : "Ebenaĵa teksto", "No messages in this folder" : "Neniu mesaĝo en tiu dosierujo", + "Choose" : "Elekti", "Blind copy recipients only" : "Nur blindkopiaj ricevontoj", "Unfavorite" : "Malpliŝatati", "Favorite" : "Pliŝatati", @@ -94,6 +94,7 @@ "Favorites" : "Pliŝataĵoj", "Other" : "Alia", "Forward" : "Antaŭen", + "Link copied" : "Ligilo kopiita", "Translate" : "Traduku", "Unnamed" : "Nenomita", "Embedded message" : "Enkorpiga mesaĝo", @@ -137,6 +138,8 @@ "Tag already exists" : "La etikedo jam ekzistas", "Not found" : "Ne trovita", "Reply to sender only" : "Respondi nur al sendinto", + "From:" : "El:", + "To:" : "Al:", "Untitled event" : "Sentitola okazaĵo", "Import into {calendar}" : "Importi en {calendar}", "Event imported into {calendar}" : "Okazaĵo importis en {calendar}", @@ -189,7 +192,6 @@ "Could not load the desired message" : "Ne eblis ŝargi la deziratan mesaĝon", "Could not load the message" : "Ne eblis ŝargi la mesaĝon", "Error loading message" : "Eraris ŝargi mesaĝon", - "Mark all messages of this folder as read" : "Marki ĉiujn mesaĝojn el tiu dosierujo kiel legitaj", - "Last 7 days" : "Lastaj 7 tagoj" + "Choose a file to add as attachment" : "Elektu dosieron aldonotan kiel kunsendaĵon" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/es.js b/l10n/es.js index ac1937e27a..228b51aa67 100644 --- a/l10n/es.js +++ b/l10n/es.js @@ -85,7 +85,6 @@ OC.L10N.register( "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "De manera que la cuenta Google funcione con esta app, debe habilitar la autenticación de dos factores para Google y generar una contraseña de app.", "Account settings" : "Ajustes de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias al mapeo del certificado S/MIME", @@ -108,13 +107,13 @@ OC.L10N.register( "Mail server" : "Servidor de correo", "Sieve server" : "Servidor Sieve", "Folder search" : "Búsqueda en carpetas", + "Email address" : "Dirección de correo", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Borrar alias", "Go back" : "Volver", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -133,8 +132,13 @@ OC.L10N.register( "Sorting" : "Ordenamiento", "Newest first" : "Más nuevas primero", "Oldest first" : "Más antiguas primero", - "Text blocks" : "Bloques de texto", "New text block" : "Nuevo bloque de texto", + "Title of the text block" : "Título del bloque de texto", + "Content of the text block" : "Contenido del bloque de texto", + "Ok" : "Aceptar", + "Top" : "Arriba", + "Bottom" : "Abajo", + "Text blocks" : "Bloques de texto", "Shared with me" : "Compartido conmigo", "Privacy" : "Privacidad", "Security" : "Seguridad", @@ -156,9 +160,6 @@ OC.L10N.register( "Refresh" : "Recargar", "About" : "Acerca de", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicación incluye CKEditor, un editor de software abierto. Copyright © contribuidores CKEditor. Licenciado bajo la GPLv2.", - "Title of the text block" : "Título del bloque de texto", - "Content of the text block" : "Contenido del bloque de texto", - "Ok" : "Aceptar", "No certificate" : "Sin certificado", "Certificate updated" : "El certificado se actualizó", "Could not update certificate" : "No fue posible actualizar el certificado", @@ -197,7 +198,6 @@ OC.L10N.register( "Disable formatting" : "Deshabilitar formato", "Upload attachment" : "Subir adjunto", "Add attachment from Files" : "Añadir adjunto desde Archivos", - "Add share link from Files" : "Agregar un enlace a un recurso compartido desde Archivos", "Smart picker" : "Selector inteligente", "Request a read receipt" : "Solicitar acuse de lectura", "Sign message with S/MIME" : "Firmar mensaje con S/MIME", @@ -209,15 +209,14 @@ OC.L10N.register( "Monday morning" : "El lunes por la mañana", "Custom date and time" : "Hora y fecha personalizadas", "Enter a date" : "Introduzca una fecha", - "Choose" : "Selecciona", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El archivo adjunto supera el tamaño permitido de {size}. Por favor, comparta el archivo mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor, comparta los archivos mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor, comparta los archivos mediante un enlace."], - "Choose a file to add as attachment" : "Escoja un archivo para adjuntar", - "Choose a file to share as a link" : "Escoge un archivo para compartir como enlace", + "Choose a file" : "Elija un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir compositor", "Close composer" : "Cerrar compositor", "Confirm" : "Confirmar", + "Revoke" : "Anular", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Ha ocurrido un error, no se ha podido borrar la etiqueta.", "The tag will be deleted from all messages." : "La etiqueta se borrará de todos los mensajes.", @@ -225,6 +224,7 @@ OC.L10N.register( "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "No hay mensajes", + "Choose" : "Selecciona", "Blind copy recipients only" : "Sólo a destinatarios con copia oculta (CCO)", "No subject" : "No hay asunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Borrador: {markup-end}{subject}", @@ -264,8 +264,6 @@ OC.L10N.register( "Move Message" : "Mover mensaje", "Archive thread" : "Archivar hilo", "Archive message" : "Archivar mensaje", - "Delete thread" : "Borrar hilo", - "Delete message" : "Borrar mensaje", "More actions" : "Más acciones", "Back" : "Atrás", "Set custom snooze" : "Establecer una tiempo de diferido personalizado", @@ -273,6 +271,8 @@ OC.L10N.register( "Reply with meeting" : "Responder con reunión", "Create task" : "Crear una tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Borrar hilo", + "Delete message" : "Borrar mensaje", "Back to all actions" : "Atrás, a todas las acciones", "Manage quick actions" : "Gestionar acciones rápidas", "Load more" : "Cargar más", @@ -296,6 +296,7 @@ OC.L10N.register( "Event created" : "Evento creado", "Could not create event" : "No se ha podido crear el evento", "Create event" : "Crear un evento", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "You can only invite attendees if your account has an email address set" : "Solo puede invitar asistentes si su cuenta tiene establecida una dirección de correo electrónico", @@ -360,7 +361,9 @@ OC.L10N.register( "Could not snooze message" : "No se pudo diferir el mensaje", "Message was unsnoozed" : "El mensaje se ha reanudado", "Could not unsnooze message" : "No se pudo reanudar el mensaje", + "Direct link copied to clipboard" : "Enlace directo copiado al portapapeles", "Forward" : "Reenviar", + "Link copied" : "Enlace copiado", "Move message" : "Mover mensaje", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar mensaje como adjunto", @@ -398,6 +401,7 @@ OC.L10N.register( "Moving" : "Moviendo", "Moving thread" : "Moviendo hilo", "Moving message" : "Moviendo mensaje", + "Change password" : "Cambiar contraseña", "Used quota: {quota}% ({limit})" : "Cuota utilizada: {quota}% ({limit})", "Used quota: {quota}%" : "Cuota utilizada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "No fue posible crear el buzón de correo. El nombre probablemente tenga caracteres inválidos. Por favor, intente con otro nombre.", @@ -572,6 +576,8 @@ OC.L10N.register( "Reply to sender only" : "Responder sólo al remitente", "Mark as unfavorite" : "Desmarcar como favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "Desde:", + "To:" : "Hasta:", "Unsubscribe via link" : "Desuscribirse vía enlace", "Unsubscribing will stop all messages from the mailing list {sender}" : "Al cancelar la suscripción se detendrán todos los mensajes de la lista de distribución {sender}", "Send unsubscribe email" : "Enviar enlace de desuscripción", @@ -763,6 +769,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificado importado exitosamente", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Fallo al importar el certificado. Asegúrese de que la clave privada coincida con el certificado y no esté protegida por una contraseña.", "Failed to import the certificate" : "Fallo al importar el certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nombre del certificado", "E-mail address" : "Dirección de correo electrónico", @@ -770,7 +777,6 @@ OC.L10N.register( "Delete certificate" : "Eliminar certificado", "No certificate imported yet" : "No se ha importado un certificado todavía", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -830,10 +836,8 @@ OC.L10N.register( "Could not load the desired message" : "No se ha podido cargar el mensaje deseado", "Could not load the message" : "No se ha podido cargar el mensaje", "Error loading message" : "Error al cargar el mensaje", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Los mensajes se marcarán automáticamente como importantes en función de los mensajes con los que interactuó o se marcaron como importantes. Al principio puede que tengas que cambiar manualmente la importancia para enseñar el sistema, pero mejorará con el tiempo.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Los mensajes que ha enviado y requieren respuesta pero no han recibido ninguna en un par de días aparecerán aquí.", - "Mark all messages of this folder as read" : "Marcar todos los mensajes de este buzón como leídos", - "Last 7 days" : "Últimos 7 días", - "From me" : "De mí" + "Add share link from Files" : "Agregar un enlace a un recurso compartido desde Archivos", + "Choose a file to add as attachment" : "Escoja un archivo para adjuntar", + "Choose a file to share as a link" : "Escoge un archivo para compartir como enlace" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es.json b/l10n/es.json index 078c169405..7156b3cfc0 100644 --- a/l10n/es.json +++ b/l10n/es.json @@ -83,7 +83,6 @@ "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "De manera que la cuenta Google funcione con esta app, debe habilitar la autenticación de dos factores para Google y generar una contraseña de app.", "Account settings" : "Ajustes de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias al mapeo del certificado S/MIME", @@ -106,13 +105,13 @@ "Mail server" : "Servidor de correo", "Sieve server" : "Servidor Sieve", "Folder search" : "Búsqueda en carpetas", + "Email address" : "Dirección de correo", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Borrar alias", "Go back" : "Volver", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -131,8 +130,13 @@ "Sorting" : "Ordenamiento", "Newest first" : "Más nuevas primero", "Oldest first" : "Más antiguas primero", - "Text blocks" : "Bloques de texto", "New text block" : "Nuevo bloque de texto", + "Title of the text block" : "Título del bloque de texto", + "Content of the text block" : "Contenido del bloque de texto", + "Ok" : "Aceptar", + "Top" : "Arriba", + "Bottom" : "Abajo", + "Text blocks" : "Bloques de texto", "Shared with me" : "Compartido conmigo", "Privacy" : "Privacidad", "Security" : "Seguridad", @@ -154,9 +158,6 @@ "Refresh" : "Recargar", "About" : "Acerca de", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicación incluye CKEditor, un editor de software abierto. Copyright © contribuidores CKEditor. Licenciado bajo la GPLv2.", - "Title of the text block" : "Título del bloque de texto", - "Content of the text block" : "Contenido del bloque de texto", - "Ok" : "Aceptar", "No certificate" : "Sin certificado", "Certificate updated" : "El certificado se actualizó", "Could not update certificate" : "No fue posible actualizar el certificado", @@ -195,7 +196,6 @@ "Disable formatting" : "Deshabilitar formato", "Upload attachment" : "Subir adjunto", "Add attachment from Files" : "Añadir adjunto desde Archivos", - "Add share link from Files" : "Agregar un enlace a un recurso compartido desde Archivos", "Smart picker" : "Selector inteligente", "Request a read receipt" : "Solicitar acuse de lectura", "Sign message with S/MIME" : "Firmar mensaje con S/MIME", @@ -207,15 +207,14 @@ "Monday morning" : "El lunes por la mañana", "Custom date and time" : "Hora y fecha personalizadas", "Enter a date" : "Introduzca una fecha", - "Choose" : "Selecciona", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El archivo adjunto supera el tamaño permitido de {size}. Por favor, comparta el archivo mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor, comparta los archivos mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor, comparta los archivos mediante un enlace."], - "Choose a file to add as attachment" : "Escoja un archivo para adjuntar", - "Choose a file to share as a link" : "Escoge un archivo para compartir como enlace", + "Choose a file" : "Elija un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir compositor", "Close composer" : "Cerrar compositor", "Confirm" : "Confirmar", + "Revoke" : "Anular", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Ha ocurrido un error, no se ha podido borrar la etiqueta.", "The tag will be deleted from all messages." : "La etiqueta se borrará de todos los mensajes.", @@ -223,6 +222,7 @@ "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "No hay mensajes", + "Choose" : "Selecciona", "Blind copy recipients only" : "Sólo a destinatarios con copia oculta (CCO)", "No subject" : "No hay asunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Borrador: {markup-end}{subject}", @@ -262,8 +262,6 @@ "Move Message" : "Mover mensaje", "Archive thread" : "Archivar hilo", "Archive message" : "Archivar mensaje", - "Delete thread" : "Borrar hilo", - "Delete message" : "Borrar mensaje", "More actions" : "Más acciones", "Back" : "Atrás", "Set custom snooze" : "Establecer una tiempo de diferido personalizado", @@ -271,6 +269,8 @@ "Reply with meeting" : "Responder con reunión", "Create task" : "Crear una tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Borrar hilo", + "Delete message" : "Borrar mensaje", "Back to all actions" : "Atrás, a todas las acciones", "Manage quick actions" : "Gestionar acciones rápidas", "Load more" : "Cargar más", @@ -294,6 +294,7 @@ "Event created" : "Evento creado", "Could not create event" : "No se ha podido crear el evento", "Create event" : "Crear un evento", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "You can only invite attendees if your account has an email address set" : "Solo puede invitar asistentes si su cuenta tiene establecida una dirección de correo electrónico", @@ -358,7 +359,9 @@ "Could not snooze message" : "No se pudo diferir el mensaje", "Message was unsnoozed" : "El mensaje se ha reanudado", "Could not unsnooze message" : "No se pudo reanudar el mensaje", + "Direct link copied to clipboard" : "Enlace directo copiado al portapapeles", "Forward" : "Reenviar", + "Link copied" : "Enlace copiado", "Move message" : "Mover mensaje", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar mensaje como adjunto", @@ -396,6 +399,7 @@ "Moving" : "Moviendo", "Moving thread" : "Moviendo hilo", "Moving message" : "Moviendo mensaje", + "Change password" : "Cambiar contraseña", "Used quota: {quota}% ({limit})" : "Cuota utilizada: {quota}% ({limit})", "Used quota: {quota}%" : "Cuota utilizada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "No fue posible crear el buzón de correo. El nombre probablemente tenga caracteres inválidos. Por favor, intente con otro nombre.", @@ -570,6 +574,8 @@ "Reply to sender only" : "Responder sólo al remitente", "Mark as unfavorite" : "Desmarcar como favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "Desde:", + "To:" : "Hasta:", "Unsubscribe via link" : "Desuscribirse vía enlace", "Unsubscribing will stop all messages from the mailing list {sender}" : "Al cancelar la suscripción se detendrán todos los mensajes de la lista de distribución {sender}", "Send unsubscribe email" : "Enviar enlace de desuscripción", @@ -761,6 +767,7 @@ "Certificate imported successfully" : "Certificado importado exitosamente", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Fallo al importar el certificado. Asegúrese de que la clave privada coincida con el certificado y no esté protegida por una contraseña.", "Failed to import the certificate" : "Fallo al importar el certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nombre del certificado", "E-mail address" : "Dirección de correo electrónico", @@ -768,7 +775,6 @@ "Delete certificate" : "Eliminar certificado", "No certificate imported yet" : "No se ha importado un certificado todavía", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -828,10 +834,8 @@ "Could not load the desired message" : "No se ha podido cargar el mensaje deseado", "Could not load the message" : "No se ha podido cargar el mensaje", "Error loading message" : "Error al cargar el mensaje", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Los mensajes se marcarán automáticamente como importantes en función de los mensajes con los que interactuó o se marcaron como importantes. Al principio puede que tengas que cambiar manualmente la importancia para enseñar el sistema, pero mejorará con el tiempo.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Los mensajes que ha enviado y requieren respuesta pero no han recibido ninguna en un par de días aparecerán aquí.", - "Mark all messages of this folder as read" : "Marcar todos los mensajes de este buzón como leídos", - "Last 7 days" : "Últimos 7 días", - "From me" : "De mí" + "Add share link from Files" : "Agregar un enlace a un recurso compartido desde Archivos", + "Choose a file to add as attachment" : "Escoja un archivo para adjuntar", + "Choose a file to share as a link" : "Escoge un archivo para compartir como enlace" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_419.js b/l10n/es_419.js index d06f738093..1d8f9a4e42 100644 --- a/l10n/es_419.js +++ b/l10n/es_419.js @@ -48,15 +48,17 @@ OC.L10N.register( "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -79,6 +81,7 @@ OC.L10N.register( "Save all to Files" : "Guardar todo a Archivos", "The images have been blocked to protect your privacy." : "Las imágenes han sido bloqueadas para proteger tu privacidad. ", "Move" : "Mover", + "Change password" : "Cambiar password", "Remove account" : "Eliminar cuenta", "Folder name" : "Nombre de la carpeta", "Saving" : "Guardando", @@ -98,6 +101,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -130,6 +135,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_419.json b/l10n/es_419.json index b74b1ffad0..3606c3f9a9 100644 --- a/l10n/es_419.json +++ b/l10n/es_419.json @@ -46,15 +46,17 @@ "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -77,6 +79,7 @@ "Save all to Files" : "Guardar todo a Archivos", "The images have been blocked to protect your privacy." : "Las imágenes han sido bloqueadas para proteger tu privacidad. ", "Move" : "Mover", + "Change password" : "Cambiar password", "Remove account" : "Eliminar cuenta", "Folder name" : "Nombre de la carpeta", "Saving" : "Guardando", @@ -96,6 +99,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -128,6 +133,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_AR.js b/l10n/es_AR.js index 3fe7d37ec0..0f0e29c3cc 100644 --- a/l10n/es_AR.js +++ b/l10n/es_AR.js @@ -46,9 +46,10 @@ OC.L10N.register( "Select account" : "Seleccione la cuenta", "Subject" : "Asunto", "Add attachment from Files" : "Agregar adjunto desde Archivos", - "Choose" : "Elige", - "Choose a file to add as attachment" : "Seleccione el archivo a agregar como adjunto", + "Choose a file" : "Seleccione un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Elige", "Favorite" : "Favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", @@ -68,6 +69,7 @@ OC.L10N.register( "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Reenviar", + "Link copied" : "Link copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Selecccione la carpeta en la cual almacenar el adjunto", @@ -99,6 +101,8 @@ OC.L10N.register( "Tag already exists" : "La etiqueta ya existe", "Add tag" : "Añadir etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Eliminado", "Recipient" : "Recipiente", "Help" : "Ayuda", @@ -136,6 +140,7 @@ OC.L10N.register( "Could not load your message" : "No se pudo cargar tu mensaje", "Could not load the desired message" : "No se pudo cargar el mensaje deseado", "Could not load the message" : "No se pudo cargar el mensaje.", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Seleccione el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_AR.json b/l10n/es_AR.json index f485ea087e..84b3198a28 100644 --- a/l10n/es_AR.json +++ b/l10n/es_AR.json @@ -44,9 +44,10 @@ "Select account" : "Seleccione la cuenta", "Subject" : "Asunto", "Add attachment from Files" : "Agregar adjunto desde Archivos", - "Choose" : "Elige", - "Choose a file to add as attachment" : "Seleccione el archivo a agregar como adjunto", + "Choose a file" : "Seleccione un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Elige", "Favorite" : "Favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", @@ -66,6 +67,7 @@ "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Reenviar", + "Link copied" : "Link copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Selecccione la carpeta en la cual almacenar el adjunto", @@ -97,6 +99,8 @@ "Tag already exists" : "La etiqueta ya existe", "Add tag" : "Añadir etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Eliminado", "Recipient" : "Recipiente", "Help" : "Ayuda", @@ -134,6 +138,7 @@ "Could not load your message" : "No se pudo cargar tu mensaje", "Could not load the desired message" : "No se pudo cargar el mensaje deseado", "Could not load the message" : "No se pudo cargar el mensaje.", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Seleccione el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_CL.js b/l10n/es_CL.js index 9a70f91f20..deffcc927a 100644 --- a/l10n/es_CL.js +++ b/l10n/es_CL.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,21 +45,22 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -96,11 +98,14 @@ OC.L10N.register( "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -137,6 +142,7 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CL.json b/l10n/es_CL.json index e5aeac5e00..b1a02ea0d9 100644 --- a/l10n/es_CL.json +++ b/l10n/es_CL.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,21 +43,22 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -94,11 +96,14 @@ "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -135,6 +140,7 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_CO.js b/l10n/es_CO.js index f71e385776..2ec1f8a61f 100644 --- a/l10n/es_CO.js +++ b/l10n/es_CO.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,21 +45,22 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -72,6 +74,7 @@ OC.L10N.register( "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Seleccciona la carpeta en la cual almacenar el adjunto", @@ -102,6 +105,8 @@ OC.L10N.register( "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -137,6 +142,7 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CO.json b/l10n/es_CO.json index 6151b5d9a8..ad6cc745e0 100644 --- a/l10n/es_CO.json +++ b/l10n/es_CO.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,21 +43,22 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -70,6 +72,7 @@ "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Seleccciona la carpeta en la cual almacenar el adjunto", @@ -100,6 +103,8 @@ "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -135,6 +140,7 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_CR.js b/l10n/es_CR.js index a911ac9aa9..10f937337c 100644 --- a/l10n/es_CR.js +++ b/l10n/es_CR.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,21 +45,22 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -95,11 +97,14 @@ OC.L10N.register( "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -136,6 +141,7 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CR.json b/l10n/es_CR.json index 8caf90d607..ecda62c378 100644 --- a/l10n/es_CR.json +++ b/l10n/es_CR.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,21 +43,22 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -93,11 +95,14 @@ "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -134,6 +139,7 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_DO.js b/l10n/es_DO.js index 8e07ee48e8..894722cc2b 100644 --- a/l10n/es_DO.js +++ b/l10n/es_DO.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,21 +45,22 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -102,6 +104,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -138,6 +142,7 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_DO.json b/l10n/es_DO.json index b404a0d70d..e70ebb7ae3 100644 --- a/l10n/es_DO.json +++ b/l10n/es_DO.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,21 +43,22 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -100,6 +102,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -136,6 +140,7 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_EC.js b/l10n/es_EC.js index f07cded3c2..9f81737df2 100644 --- a/l10n/es_EC.js +++ b/l10n/es_EC.js @@ -62,7 +62,6 @@ OC.L10N.register( "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que la cuenta de Google funcione con esta aplicación, debes habilitar la autenticación en dos pasos para Google y generar una contraseña de aplicación.", "Account settings" : "Configuración de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificados S/MIME", @@ -76,13 +75,13 @@ OC.L10N.register( "Calendar settings" : "Configuración del calendario", "Filters" : "Filtros", "Mail server" : "Servidor de correo", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Eliminar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Agregar alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -95,6 +94,7 @@ OC.L10N.register( "Sorting" : "Ordenar", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -107,7 +107,6 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "No certificate" : "Sin certificado", "Certificate updated" : "Certificado actualizado", "Could not update certificate" : "No se pudo actualizar el certificado", @@ -153,19 +152,19 @@ OC.L10N.register( "Monday morning" : "Lunes por la mañana", "Custom date and time" : "Fecha y hora personalizada", "Enter a date" : "Ingresa una fecha", - "Choose" : "Seleccionar", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El archivo adjunto supera el tamaño permitido de archivos adjuntos de {size}. Comparte el archivo a través de un enlace en su lugar.","Los archivos adjuntos superan el tamaño permitido de archivos adjuntos de {size}. Comparte los archivos a través de un enlace en su lugar.","Los archivos adjuntos superan el tamaño permitido de archivos adjuntos de {size}. Comparte los archivos a través de un enlace en su lugar."], - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Elige un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir redactor", "Close composer" : "Cerrar redactor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Plain text" : "Texto sin formato", "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "Sin mensajes", + "Choose" : "Seleccionar", "Blind copy recipients only" : "Copias ocultas para los destinatarios solamente", "No subject" : "Sin asunto", "Could not delete message" : "No se pudo eliminar el mensaje", @@ -183,13 +182,13 @@ OC.L10N.register( "Move thread" : "Mover hilo", "Archive thread" : "Archivar hilo", "Archive message" : "Archivar mensaje", - "Delete thread" : "Eliminar hilo", - "Delete message" : "Eliminar mensaje", "More actions" : "Más acciones", "Back" : "Atrás", "Edit as new message" : "Editar como nuevo mensaje", "Create task" : "Crear tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Eliminar hilo", + "Delete message" : "Eliminar mensaje", "Load more" : "Cargar más", "_Mark {number} read_::_Mark {number} read_" : ["Marcar {number} como leído","Marcar {number} como leído","Marcar {number} como leído"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marcar {number} como no leído","Marcar {number} como no leído","Marcar {number} como no leído"], @@ -206,6 +205,7 @@ OC.L10N.register( "Event created" : "Evento creado", "Could not create event" : "No se pudo crear el evento", "Create event" : "Crear evento", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Select calendar" : "Seleccionar calendario", @@ -249,6 +249,7 @@ OC.L10N.register( "Notify the sender" : "Notificar al remitente", "You sent a read confirmation to the sender of this message." : "Enviaste una confirmación de lectura al remitente de este mensaje.", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Move message" : "Mover mensaje", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar mensaje como adjunto", @@ -395,6 +396,8 @@ OC.L10N.register( "Reply to sender only" : "Responder solo al remitente", "Mark as unfavorite" : "Marcar como no favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", "Unsubscribe via link" : "Cancelar suscripción mediante enlace", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar la suscripción detendrá todos los mensajes de la lista de correo {sender}", "Send unsubscribe email" : "Enviar correo electrónico de cancelación de suscripción", @@ -516,6 +519,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificado importado con éxito", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Error al importar el certificado. Por favor, asegúrate de que la clave privada coincida con el certificado y no esté protegida por una contraseña.", "Failed to import the certificate" : "Error al importar el certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nombre del certificado", "E-mail address" : "Dirección de correo electrónico", @@ -523,7 +527,6 @@ OC.L10N.register( "Delete certificate" : "Eliminar certificado", "No certificate imported yet" : "Aún no se ha importado ningún certificado", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -565,7 +568,7 @@ OC.L10N.register( "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", "Error loading message" : "Se presentó un error al cargar el mensaje", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Los mensajes se marcarán automáticamente como importantes en función de los mensajes con los que interactúes o que marques como importantes. Al principio, es posible que debas cambiar manualmente la importancia para enseñar al sistema, pero mejorará con el tiempo.", - "Last 7 days" : "Últimos 7 días" + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Elige un archivo para compartir como enlace" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_EC.json b/l10n/es_EC.json index 5ef851ed1b..a41a84af75 100644 --- a/l10n/es_EC.json +++ b/l10n/es_EC.json @@ -60,7 +60,6 @@ "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que la cuenta de Google funcione con esta aplicación, debes habilitar la autenticación en dos pasos para Google y generar una contraseña de aplicación.", "Account settings" : "Configuración de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificados S/MIME", @@ -74,13 +73,13 @@ "Calendar settings" : "Configuración del calendario", "Filters" : "Filtros", "Mail server" : "Servidor de correo", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Eliminar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Agregar alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -93,6 +92,7 @@ "Sorting" : "Ordenar", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -105,7 +105,6 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "No certificate" : "Sin certificado", "Certificate updated" : "Certificado actualizado", "Could not update certificate" : "No se pudo actualizar el certificado", @@ -151,19 +150,19 @@ "Monday morning" : "Lunes por la mañana", "Custom date and time" : "Fecha y hora personalizada", "Enter a date" : "Ingresa una fecha", - "Choose" : "Seleccionar", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["El archivo adjunto supera el tamaño permitido de archivos adjuntos de {size}. Comparte el archivo a través de un enlace en su lugar.","Los archivos adjuntos superan el tamaño permitido de archivos adjuntos de {size}. Comparte los archivos a través de un enlace en su lugar.","Los archivos adjuntos superan el tamaño permitido de archivos adjuntos de {size}. Comparte los archivos a través de un enlace en su lugar."], - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Elige un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir redactor", "Close composer" : "Cerrar redactor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Plain text" : "Texto sin formato", "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "Sin mensajes", + "Choose" : "Seleccionar", "Blind copy recipients only" : "Copias ocultas para los destinatarios solamente", "No subject" : "Sin asunto", "Could not delete message" : "No se pudo eliminar el mensaje", @@ -181,13 +180,13 @@ "Move thread" : "Mover hilo", "Archive thread" : "Archivar hilo", "Archive message" : "Archivar mensaje", - "Delete thread" : "Eliminar hilo", - "Delete message" : "Eliminar mensaje", "More actions" : "Más acciones", "Back" : "Atrás", "Edit as new message" : "Editar como nuevo mensaje", "Create task" : "Crear tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Eliminar hilo", + "Delete message" : "Eliminar mensaje", "Load more" : "Cargar más", "_Mark {number} read_::_Mark {number} read_" : ["Marcar {number} como leído","Marcar {number} como leído","Marcar {number} como leído"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marcar {number} como no leído","Marcar {number} como no leído","Marcar {number} como no leído"], @@ -204,6 +203,7 @@ "Event created" : "Evento creado", "Could not create event" : "No se pudo crear el evento", "Create event" : "Crear evento", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Select calendar" : "Seleccionar calendario", @@ -247,6 +247,7 @@ "Notify the sender" : "Notificar al remitente", "You sent a read confirmation to the sender of this message." : "Enviaste una confirmación de lectura al remitente de este mensaje.", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Move message" : "Mover mensaje", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar mensaje como adjunto", @@ -393,6 +394,8 @@ "Reply to sender only" : "Responder solo al remitente", "Mark as unfavorite" : "Marcar como no favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", "Unsubscribe via link" : "Cancelar suscripción mediante enlace", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar la suscripción detendrá todos los mensajes de la lista de correo {sender}", "Send unsubscribe email" : "Enviar correo electrónico de cancelación de suscripción", @@ -514,6 +517,7 @@ "Certificate imported successfully" : "Certificado importado con éxito", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Error al importar el certificado. Por favor, asegúrate de que la clave privada coincida con el certificado y no esté protegida por una contraseña.", "Failed to import the certificate" : "Error al importar el certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nombre del certificado", "E-mail address" : "Dirección de correo electrónico", @@ -521,7 +525,6 @@ "Delete certificate" : "Eliminar certificado", "No certificate imported yet" : "Aún no se ha importado ningún certificado", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -563,7 +566,7 @@ "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", "Error loading message" : "Se presentó un error al cargar el mensaje", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Los mensajes se marcarán automáticamente como importantes en función de los mensajes con los que interactúes o que marques como importantes. Al principio, es posible que debas cambiar manualmente la importancia para enseñar al sistema, pero mejorará con el tiempo.", - "Last 7 days" : "Últimos 7 días" + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Elige un archivo para compartir como enlace" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_GT.js b/l10n/es_GT.js index 33e77b6275..d0abb37140 100644 --- a/l10n/es_GT.js +++ b/l10n/es_GT.js @@ -51,12 +51,12 @@ OC.L10N.register( "Preferred writing mode for new messages and replies." : "Modo preferido de escritura para nuevos mensajes y respuestas.", "Default folders" : "Carpetas predeterminadas", "Mail server" : "Servidor de correo", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Borrar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -65,6 +65,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -77,7 +78,6 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Message {id} could not be found" : "No se ha podido encontrar el mensaje {id}", "From" : "De", "Select account" : "Selecciona la cuenta", @@ -94,15 +94,15 @@ OC.L10N.register( "Add attachment from Files" : "Agregar adjunto desd Archivos", "Request a read receipt" : "Solicitar acuse de lectura", "Encrypt message with Mailvelope" : "Cifrar el mensaje con Mailvelope", - "Choose" : "Seleccionar", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Los archivos adjuntos exceden el tamaño permitido de {size}. Por favor comparte a través de un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor envía los archivos mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor envía los archivos mediante un enlace."], - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Selecciona un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Plain text" : "Texto simple", "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "No hay mensajes", + "Choose" : "Seleccionar", "Unfavorite" : "Desmarcar como favorito", "Favorite" : "Favorito", "Read" : "Leer", @@ -150,11 +150,14 @@ OC.L10N.register( "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -191,6 +194,8 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Selecciona un archivo para compartir como enlace" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_GT.json b/l10n/es_GT.json index ae0e4a99d1..8295b23fea 100644 --- a/l10n/es_GT.json +++ b/l10n/es_GT.json @@ -49,12 +49,12 @@ "Preferred writing mode for new messages and replies." : "Modo preferido de escritura para nuevos mensajes y respuestas.", "Default folders" : "Carpetas predeterminadas", "Mail server" : "Servidor de correo", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Borrar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -63,6 +63,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -75,7 +76,6 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Message {id} could not be found" : "No se ha podido encontrar el mensaje {id}", "From" : "De", "Select account" : "Selecciona la cuenta", @@ -92,15 +92,15 @@ "Add attachment from Files" : "Agregar adjunto desd Archivos", "Request a read receipt" : "Solicitar acuse de lectura", "Encrypt message with Mailvelope" : "Cifrar el mensaje con Mailvelope", - "Choose" : "Seleccionar", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Los archivos adjuntos exceden el tamaño permitido de {size}. Por favor comparte a través de un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor envía los archivos mediante un enlace.","Los archivos adjuntos superan el tamaño permitido de {size}. Por favor envía los archivos mediante un enlace."], - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Selecciona un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Plain text" : "Texto simple", "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "No hay mensajes", + "Choose" : "Seleccionar", "Unfavorite" : "Desmarcar como favorito", "Favorite" : "Favorito", "Read" : "Leer", @@ -148,11 +148,14 @@ "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", "Clear" : "Limpiar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -189,6 +192,8 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Selecciona un archivo para compartir como enlace" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_HN.js b/l10n/es_HN.js index 26b399ba7c..a5ae2fb2c7 100644 --- a/l10n/es_HN.js +++ b/l10n/es_HN.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,20 +45,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -101,6 +103,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -134,6 +138,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_HN.json b/l10n/es_HN.json index d74a734821..b64b9a4422 100644 --- a/l10n/es_HN.json +++ b/l10n/es_HN.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,20 +43,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -99,6 +101,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -132,6 +136,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_MX.js b/l10n/es_MX.js index f04a2cb3d5..6c08cac75e 100644 --- a/l10n/es_MX.js +++ b/l10n/es_MX.js @@ -79,7 +79,6 @@ OC.L10N.register( "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que la cuenta de Google funcione con esta aplicación, debes habilitar la autenticación en dos pasos para Google y generar una contraseña de aplicación.", "Account settings" : "Configuración de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificados S/MIME", @@ -98,13 +97,13 @@ OC.L10N.register( "Sieve script editor" : "Editor de scripts Sieve", "Mail server" : "Servidor de correo", "Sieve server" : "Servidor Sieve", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Eliminar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -176,7 +175,6 @@ OC.L10N.register( "Disable formatting" : "Desactivar formato", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Add share link from Files" : "Agregar un enlace adjunto desde Archivos", "Smart picker" : "Selector inteligente", "Request a read receipt" : "Solicitar confirmación de lectura", "Sign message with S/MIME" : "Firmar mensaje con S/MIME", @@ -188,14 +186,13 @@ OC.L10N.register( "Monday morning" : "Lunes por la mañana", "Custom date and time" : "Fecha y hora personalizada", "Enter a date" : "Ingrese una fecha", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Eligir un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir redactor", "Close composer" : "Cerrar redactor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Ha ocurrido un error, no se ha podido eliminar la etiqueta.", "The tag will be deleted from all messages." : "La etiqueta se eliminará de todos los mensajes.", @@ -203,6 +200,7 @@ OC.L10N.register( "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "Sin mensajes", + "Choose" : "Seleccionar", "Blind copy recipients only" : "Solo destinatarios de copia oculta", "No subject" : "Sin asunto", "Set reminder for later today" : "Configurar recordatorio para hoy, más tarde", @@ -229,13 +227,13 @@ OC.L10N.register( "Unsnooze" : "Reanudar", "Move thread" : "Mover hilo", "Archive thread" : "Archivar hilo", - "Delete thread" : "Eliminar hilo", "More actions" : "Más acciones", "Back" : "Atrás", "Set custom snooze" : "Configurar pausa personalizada", "Edit as new message" : "Editar como nuevo mensaje", "Create task" : "Crear tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Eliminar hilo", "Load more" : "Cargar más", "Mark as important" : "Marcar como importante", "Report this bug" : "Reportar este bug", @@ -286,7 +284,9 @@ OC.L10N.register( "Follow up info" : "Información de seguimiento", "Important info" : "Información importante", "Other" : "Otro", + "Direct link copied to clipboard" : "Enlace directo copiado al portapapeles", "Forward" : "Reenviar", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Forward message as attachment" : " Reenviar mensaje como adjunto", "Unnamed" : "Sin nombre", @@ -330,6 +330,8 @@ OC.L10N.register( "Tag already exists" : "La etiqueta ya existe", "Add tag" : "Añadir etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Translate from" : "Traducir desde", "Untitled event" : "Evento sin título", "(organizer)" : "(organizador)", @@ -374,6 +376,8 @@ OC.L10N.register( "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", "Error loading message" : "Se presentó un error al cargar el mensaje", - "Last 7 days" : "Últimos 7 días" + "Add share link from Files" : "Agregar un enlace adjunto desde Archivos", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Eligir un archivo para compartir como enlace" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_MX.json b/l10n/es_MX.json index 102545c2ca..1395991655 100644 --- a/l10n/es_MX.json +++ b/l10n/es_MX.json @@ -77,7 +77,6 @@ "SMTP Port" : "Puerto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contraseña SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que la cuenta de Google funcione con esta aplicación, debes habilitar la autenticación en dos pasos para Google y generar una contraseña de aplicación.", "Account settings" : "Configuración de la cuenta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificados S/MIME", @@ -96,13 +95,13 @@ "Sieve script editor" : "Editor de scripts Sieve", "Mail server" : "Servidor de correo", "Sieve server" : "Servidor Sieve", + "Email address" : "Dirección de correo electrónico", "Update alias" : "Actualizar alias", "Rename alias" : "Renombrar alias", "Show update alias form" : "Mostrar formulario de actualización de alias", "Delete alias" : "Eliminar alias", "Go back" : "Regresar", "Change name" : "Cambiar nombre", - "Email address" : "Dirección de correo electrónico", "Add alias" : "Añadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -174,7 +173,6 @@ "Disable formatting" : "Desactivar formato", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Add share link from Files" : "Agregar un enlace adjunto desde Archivos", "Smart picker" : "Selector inteligente", "Request a read receipt" : "Solicitar confirmación de lectura", "Sign message with S/MIME" : "Firmar mensaje con S/MIME", @@ -186,14 +184,13 @@ "Monday morning" : "Lunes por la mañana", "Custom date and time" : "Fecha y hora personalizada", "Enter a date" : "Ingrese una fecha", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", - "Choose a file to share as a link" : "Eligir un archivo para compartir como enlace", + "Choose a file" : "Selecciona un archivo", "_{count} attachment_::_{count} attachments_" : ["{count} adjunto","{count} adjuntos","{count} adjuntos"], "Untitled message" : "Mensaje sin título", "Expand composer" : "Expandir redactor", "Close composer" : "Cerrar redactor", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Ha ocurrido un error, no se ha podido eliminar la etiqueta.", "The tag will be deleted from all messages." : "La etiqueta se eliminará de todos los mensajes.", @@ -201,6 +198,7 @@ "Rich text" : "Texto enriquecido", "No messages in this folder" : "No hay mensajes en esta carpeta", "No messages" : "Sin mensajes", + "Choose" : "Seleccionar", "Blind copy recipients only" : "Solo destinatarios de copia oculta", "No subject" : "Sin asunto", "Set reminder for later today" : "Configurar recordatorio para hoy, más tarde", @@ -227,13 +225,13 @@ "Unsnooze" : "Reanudar", "Move thread" : "Mover hilo", "Archive thread" : "Archivar hilo", - "Delete thread" : "Eliminar hilo", "More actions" : "Más acciones", "Back" : "Atrás", "Set custom snooze" : "Configurar pausa personalizada", "Edit as new message" : "Editar como nuevo mensaje", "Create task" : "Crear tarea", "Download message" : "Descargar mensaje", + "Delete thread" : "Eliminar hilo", "Load more" : "Cargar más", "Mark as important" : "Marcar como importante", "Report this bug" : "Reportar este bug", @@ -284,7 +282,9 @@ "Follow up info" : "Información de seguimiento", "Important info" : "Información importante", "Other" : "Otro", + "Direct link copied to clipboard" : "Enlace directo copiado al portapapeles", "Forward" : "Reenviar", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Forward message as attachment" : " Reenviar mensaje como adjunto", "Unnamed" : "Sin nombre", @@ -328,6 +328,8 @@ "Tag already exists" : "La etiqueta ya existe", "Add tag" : "Añadir etiqueta", "Not found" : "No encontrado", + "From:" : "De:", + "To:" : "Para:", "Translate from" : "Traducir desde", "Untitled event" : "Evento sin título", "(organizer)" : "(organizador)", @@ -372,6 +374,8 @@ "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", "Error loading message" : "Se presentó un error al cargar el mensaje", - "Last 7 days" : "Últimos 7 días" + "Add share link from Files" : "Agregar un enlace adjunto desde Archivos", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file to share as a link" : "Eligir un archivo para compartir como enlace" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_NI.js b/l10n/es_NI.js index 6268b49197..ff2ca36629 100644 --- a/l10n/es_NI.js +++ b/l10n/es_NI.js @@ -33,6 +33,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -45,20 +46,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -100,6 +102,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -133,6 +137,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_NI.json b/l10n/es_NI.json index a2891f59d5..8eb0e6e039 100644 --- a/l10n/es_NI.json +++ b/l10n/es_NI.json @@ -31,6 +31,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -43,20 +44,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -98,6 +100,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -131,6 +135,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_PA.js b/l10n/es_PA.js index e5ebddbe72..b22723f4fa 100644 --- a/l10n/es_PA.js +++ b/l10n/es_PA.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,20 +45,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -100,6 +102,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -133,6 +137,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PA.json b/l10n/es_PA.json index 033bec77f0..cd310be4bd 100644 --- a/l10n/es_PA.json +++ b/l10n/es_PA.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,20 +43,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -98,6 +100,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -131,6 +135,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_PE.js b/l10n/es_PE.js index b604cf724e..013ffd0d19 100644 --- a/l10n/es_PE.js +++ b/l10n/es_PE.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,14 +45,14 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", @@ -72,6 +73,7 @@ OC.L10N.register( "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Seleccciona la carpeta en la cual almacenar el adjunto", @@ -102,6 +104,8 @@ OC.L10N.register( "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", "Task created" : "Tarea creada", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -135,6 +139,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PE.json b/l10n/es_PE.json index 17bf127a97..59346e18c4 100644 --- a/l10n/es_PE.json +++ b/l10n/es_PE.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,14 +43,14 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", @@ -70,6 +71,7 @@ "Favorites" : "Favoritos", "Other" : "Otro", "Forward" : "Adelante", + "Link copied" : "Enlace copiado", "Translate" : "Traducir", "Unnamed" : "Sin nombre", "Choose a folder to store the attachment in" : "Seleccciona la carpeta en la cual almacenar el adjunto", @@ -100,6 +102,8 @@ "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", "Task created" : "Tarea creada", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -133,6 +137,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_PR.js b/l10n/es_PR.js index e5ebddbe72..b22723f4fa 100644 --- a/l10n/es_PR.js +++ b/l10n/es_PR.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,20 +45,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -100,6 +102,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -133,6 +137,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PR.json b/l10n/es_PR.json index 033bec77f0..cd310be4bd 100644 --- a/l10n/es_PR.json +++ b/l10n/es_PR.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,20 +43,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -98,6 +100,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -131,6 +135,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_PY.js b/l10n/es_PY.js index 62c970ace1..236e5cedd6 100644 --- a/l10n/es_PY.js +++ b/l10n/es_PY.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,20 +45,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -100,6 +102,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -133,6 +137,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PY.json b/l10n/es_PY.json index 49effcd664..587f56a3ac 100644 --- a/l10n/es_PY.json +++ b/l10n/es_PY.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,20 +43,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -98,6 +100,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -131,6 +135,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_SV.js b/l10n/es_SV.js index 33b371b017..22b791c847 100644 --- a/l10n/es_SV.js +++ b/l10n/es_SV.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,15 +45,15 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", @@ -102,6 +103,8 @@ OC.L10N.register( "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -137,6 +140,7 @@ OC.L10N.register( "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_SV.json b/l10n/es_SV.json index fa7d2ce702..e443b220fa 100644 --- a/l10n/es_SV.json +++ b/l10n/es_SV.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,15 +43,15 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages in this folder" : "No hay mensajes en esta carpeta", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", @@ -100,6 +101,8 @@ "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -135,6 +138,7 @@ "Could not load your message" : "No fue posible cargar tu mensaje", "Could not load the desired message" : "No fue posible cargar el mensaje deseado", "Could not load the message" : "No fue posible cargar el mensaje", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/es_UY.js b/l10n/es_UY.js index 122e16eaba..71936b3beb 100644 --- a/l10n/es_UY.js +++ b/l10n/es_UY.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -44,20 +45,21 @@ OC.L10N.register( "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -94,11 +96,14 @@ OC.L10N.register( "Message" : "Mensaje", "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -132,6 +137,7 @@ OC.L10N.register( "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_UY.json b/l10n/es_UY.json index 48f2bd1ca2..8108c4856a 100644 --- a/l10n/es_UY.json +++ b/l10n/es_UY.json @@ -30,6 +30,7 @@ "Add mail account" : "Agregar cuenta de correo", "Newest first" : "Más reciente primero", "Oldest first" : "Más antiguo primero", + "Ok" : "Ok", "Security" : "Seguridad", "Compose new message" : "Escribir mensaje nuevo", "Newer message" : "Mensaje más nuevo", @@ -42,20 +43,21 @@ "Send" : "Enviar", "Refresh" : "Actualizar", "About" : "Acerca de", - "Ok" : "Ok", "Select account" : "Selecciona la cuenta", "Subject" : "Asunto", "Upload attachment" : "Cargar adjunto", "Add attachment from Files" : "Agregar adjunto desd Archivos", - "Choose" : "Seleccionar", - "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto", + "Choose a file" : "Selecciona un archivo", "Confirm" : "Confirmar", + "Revoke" : "Revocar", + "Choose" : "Seleccionar", "Unfavorite" : "Quitar favorito", "Favorite" : "Hacer favorito", "Read" : "Leer", "Edit tags" : "Editar etiquetas", "More actions" : "Más acciones", "Back" : "Atrás", + "Title" : "Título", "All day" : "Todo el día", "Attendees" : "Asistentes", "Description" : "Descripción", @@ -92,11 +94,14 @@ "Message" : "Mensaje", "Copy to clipboard" : "Copiar al portapapeles", "Add" : "Agregar", + "Close" : "Close", "Date" : "Fecha", "Tags" : "Etiquetas", "Select tags" : "Selecciona las etiquetas", "Custom" : "Personalizado", "Add tag" : "Agregar etiqueta", + "From:" : "De:", + "To:" : "Para:", "Deleted" : "Borrado", "Recipient" : "Destinatario", "Help" : "Ayuda", @@ -130,6 +135,7 @@ "Nextcloud Mail" : "Correo Nextcloud", "Could not load {tag}{name}{endtag}" : "No fue posible cargar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Se presentó un problema al cargar {tag}{name}{endtag}", - "Error loading message" : "Se presentó un error al cargar el mensaje" + "Error loading message" : "Se presentó un error al cargar el mensaje", + "Choose a file to add as attachment" : "Selecciona el archivo a agregar como adjunto" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/et_EE.js b/l10n/et_EE.js index bec84f6341..adfe1c15bd 100644 --- a/l10n/et_EE.js +++ b/l10n/et_EE.js @@ -13,7 +13,11 @@ OC.L10N.register( "Later" : "Hiljem", "Mail" : "Kirjad", "You are reaching your mailbox quota limit for {account_email}" : "„{account_email}“ konto mahukvoot on varsti täis", - "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Kasutad praegu {percentage} oma postkasti andmeruumist. Palun kustuta mittevajalikud kirjad ning saada andmeruumi juurde.", + "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Kasutad praegu {percentage} oma postkasti andmeruumist. Palun kustuta mittevajalikud kirjad ning saad andmeruumi juurde.", + "{account_email} has been delegated to you" : "sul on nüüd {account_email} e-postikonto volitus", + "{user} delegated {account} to you" : "{user} volitas sind kasutama {account} e-posti kontot", + "{account_email} is no longer delegated to you" : "sul enam pole {account_email} e-posti konto volitust", + "{user} revoked delegation for {account}" : "{user} tühistas volituse {account} kasutajakonto jaoks", "Mail Application" : "E-posti rakendus", "Mails" : "E-kirjad", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Saatja aadress %1$s pole aadressiraamatus, aga %2$s nimi on ning temaga on seotud järgnev aadress: %3$s", @@ -24,10 +28,15 @@ OC.L10N.register( "Some addresses in this message are not matching the link text" : "Mõned selle kirja aadressid ei vasta lingi tekstile", "Reply-To email: %1$s is different from sender email: %2$s" : "Vastamiseks mõeldud e-posti aadress: %1$s on erinev saatja aadressist %2$s", "Mail connection performance" : "E-postiteenuse ühenduse jõudlus", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Aeglase e-posti tuvastusteenus (%1$s) - mitme e-posti kontoga ühendamine võttis aega keskmiselt %2$s sekundit kasutajakontkonto kohta", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Aeglase e-posti tuvastusteenus (%1$s) - postkastide loendi laadimine mitme konto jaoks võttis aega keskmiselt %2$s sekundit kasutajakontkonto kohta", + "Mail Transport configuration" : "E-kirjade edastamise viis serverite vahel", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "„app.mail.transport“ seadistuse väärtus pole „smtp“. Selline seadistus võib põhjustada probleeme kaasaegsete e-posti turvameetmetega, nagu SPF ja DKIM, kuna e-kirjad saadetakse otse veebiserverist, mis ei ole selleks otstarbeks sageli nõuetekohaselt konfigureeritud. Selle probleemi lahendamiseks oleme lõpetanud „mail-transport“ meetodi toetamise. Palun eemalda serveri seadistustest „app.mail.transport“, et kasutada SMTP-põhist edastust ja peida see teade. E-kirjade kättetoimetamise tagamiseks on vaja nõuetekohaselt konfigureeritud SMTP-seadistust.", "Mail account parameters, aliases and preferences" : "E-posti kasutajakonto parameetrid, aliased ja eelistused", "💌 A mail app for Nextcloud" : "💌 E-postirakendus Nextcloudi jaoks", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 E-posti rakendus Nextcloudi jaoks**\n\n- **🚀 Lõiming muude Nextcloudi rakendustega!** Hetkel kontakti-, kalendri ja failirakendused, aga õige pea lisandub neid veel.\n- **📥 Mitu e-posti kontot!** Isiklik ja töökoha konto? Pole probleemi ja kauba peale saad kena ja ühise sisendposti kausta. Võid ühendada kõiki IMAP-i kasutajakontosid.\n- **🔒 Saada krüptitud e-kirju ja võta neid vastu!** Selleks on kasutusel suurepärase veebibrauseri lisamoodul [Mailvelope](https://mailvelope.com).\n- **🙈 Me ei leiuta midagi uut!** Rakendus põhineb suurepärastel [Horde](https://www.horde.org) teekidel.\n- **📬 Tahad kasutada oma serverit?** Me ei hakanud seda ise leiutama, on ju olemas [Mail-in-a-Box](https://mailinabox.email) teenus!\n\n## Tehisaru eetiline kasutaus\n\n### Prioriteediga kirjad saabuvate kirjade postkastis\n\nPositiivne lähenemine:\n* Selle mudeli treenimiseks ja järelduste tegemiseks mõeldud tarkvara on avatud lähtekoodiga.\n* Mudel luuakse ja treenitakse kohapeal, tuginedes kasutaja enda andmetele.\n* Kasutajal on juurdepääs treeningandmetele, mis võimaldab kontrollida ja parandada võimalikke eelarvamusi ning optimeerida mudeli jõudlust ja CO2-heiteid.\n\n### Jutulõngade kokkuvõtted (kui tahad kasutada)\n\n**Hinnang:** 🟢/🟡/🟠/🔴\n\nHindamine sõltub paigaldatud tekstitöötluse taustateenusest. Üksikasju vaata dokumentatsioonist, mis kirjeldab [ülevaadet hindamisest](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html).\n\nTehisaru eetilisest kasutusest Nextcloudi raames leiad [teavet meie ajaveebist](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Sinu sessioon on aegunud. Leht saab olema uuesti laaditud.", - "Drafts are saved in:" : "Kirjade kavandis on salvestatud siia:", + "Drafts are saved in:" : "Kirjade kavandid on salvestatud siia:", "Sent messages are saved in:" : "Saadetud kirjad on salvestatud siia:", "Deleted messages are moved in:" : "Kustutatud kirjad on tõstetud siia:", "Archived messages are moved in:" : "Arhiveeritud kirjad on tõstetud siia:", @@ -88,49 +97,52 @@ OC.L10N.register( "SMTP Port" : "SMTP port", "SMTP User" : "SMTP kasutajanimi", "SMTP Password" : "SMTP salasõna", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Kui soovid, et Google'i konto toimiks siin rakenduses, siis pead seal kasutusele võtma kaheastmelise autentimise ja looma rakendusele salasõna.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google eeldab OAuthi autentimise kasutamist. Kui sinu Nextcloudi serveri haldaja või peakasutaja pole seda teinud, siis saad selle asemel kasutada Google'i rakenduse salasõna (Google App Password).", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft eeldab OAuthi autentimise kasutamist. Palu oma Nextcloudi serveri haldajat või peakasutajat, et ta seadistaks Microsofti OAuthi.", "Account settings" : "Konto seadistused", "Aliases" : "Aliased", - "Alias to S/MIME certificate mapping" : "Alias S/MIME sertifikaatide vastavuse jaoks", + "Alias to S/MIME certificate mapping" : "Alias S/MIME sertifikaatide vastenduse jaoks", "Signature" : "Allkiri", "A signature is added to the text of new messages and replies." : "Allkiri lisatakse uutele kirjadele ja vastustele.", "Writing mode" : "Kirjutusviis", "Preferred writing mode for new messages and replies." : "Kirjutusviis uute kirjade ning vastuste jaoks.", "Default folders" : "Vaikimisi kaustad", - "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Kaustad kavandite, saadetud ja kustutatud kirjade ning arhiveeri ning rämpskirjade jaoks.", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Kaustad kavandite, saadetud ja kustutatud kirjade ning arhiveeritud ning rämpskirjade jaoks.", "Automatic trash deletion" : "Prügikasti automaatne tühjenadmine", "Days after which messages in Trash will automatically be deleted:" : "Päevade arv, mille möödumisel peaks prügikasti visatudkirjad automaatselt kustutatama", "Autoresponder" : "Automaatvastaja", "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automaatsed vastused saabunud kirjadele. Kui keegi saadab sulle üle ühe kirja, siis saab ta automaatse vastuse kord 4 päeva jooksul.", - "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Automaatvastaja on loodud Sieve skriptimiskeeles ja tavaliselt on selline võimalus toetatud paljude e-posti teenuste puhul. Kui sa pole enda omas kindel, siis palun küsi neilt üle. Kui Sieve on kasutatav, siis klõpsi järgnevat nuppu ja võta ta seadistustest kasutusele.", - "Go to Sieve settings" : "Ava Sieve seadistused", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Automaatvastaja on loodud Sieve'i skriptimiskeeles ja tavaliselt on selline võimalus toetatud paljude e-posti teenuste puhul. Kui sa pole enda omas kindel, siis palun küsi neilt üle. Kui Sieve on kasutatav, siis klõpsi järgnevat nuppu ja võta ta seadistustest kasutusele.", + "Go to Sieve settings" : "Ava Sieve'i seadistused", "Calendar settings" : "Kalendri seadistused", "Classification settings" : "Klassifitseerimise seadistused", "Filters" : "Filtrid", "Quick actions" : "Kiirtoimingud", - "Sieve script editor" : "Sieve skriptikoostaja", + "Sieve script editor" : "Sieve'i skriptikoostaja", "Mail server" : "E-posti server", - "Sieve server" : "Sieve server", + "Sieve server" : "Sieve'i server", "Folder search" : "Kaustade otsing", + "Alias name" : "Aliase nimi", + "Email address" : "E-posti aadress", "Update alias" : "Uuenda aliast", "Rename alias" : "Muuda aliast", "Show update alias form" : "Näita uuendatud aliast", "Delete alias" : "Kustuta alias", "Go back" : "Mine tagasi", "Change name" : "Muuda nime", - "Email address" : "E-posti aadress", "Add alias" : "Lisa alias", "Create alias" : "Loo alias", "Cancel" : "Katkesta", "Search the body of messages in priority Inbox" : "Otsi esmase postkasti kirjade sisust", "Activate" : "Lülita sisse", "Make mails available to Context Chat" : "Muuda e-kirjad loetavaks kontekstuaalses vestluses", - "Remind about messages that require a reply but received none" : "Tuleta mulle meelde kirju, mis eeldavad vastust, kui pole seda veel saanud", + "Remind about messages that require a reply but received none" : "Tuleta mulle meelde kirju, mis eeldavad vastust, kuid pole seda veel saanud", "Highlight external addresses" : "Tõsta välised aadressid esile", "Could not update preference" : "Eelistust polnud võimalik muuta", "Mail settings" : "E-kirjade seadistused", "General" : "Üldine", "Set as default mail app" : "Määra vaikimisi e-postirakenduseks", + "{email} (delegated)" : "{email} (volitatud)", "Add mail account" : "Lisa e-posti konto", "Appearance" : "Välimus", "Show all messages in thread" : "Näita kõiki kirju jutulõngas", @@ -140,18 +152,21 @@ OC.L10N.register( "Layout" : "Välimus", "Vertical split" : "Püstjoones jagamine", "Horizontal split" : "Rõhtjoones jagamine", - "List" : "Nimekiri", + "List" : "Loend", "Use compact mode" : "Kasuta kompaktset vaadet", "Sorting" : "Järjestus", "Newest first" : "Uuemad eespool", "Oldest first" : "Vanemad eespool", + "New text block" : "Uus tekstiplokk", + "Title of the text block" : "Tekstiploki pealkiri", + "Content of the text block" : "Tekstiploki sisu", + "Ok" : "Sobib", "Avatars from Gravatar and favicons" : "Favikonid ja tunnuspildid teenusest Gravatar", "Reply position" : "Vastuse asukoht", "Top" : "Üleval", "Bottom" : "All", "Text blocks" : "Tekstiplokid", "Reusable pieces of text that can be inserted in messages" : "Teksti kasutatavad osad, misa saad kirjadesse lisada", - "New text block" : "Uus tekstiplokk", "Shared with me" : "Jagatud minuga", "Privacy" : "Privaatsus", "Data collection" : "Andmete kogumine", @@ -179,12 +194,12 @@ OC.L10N.register( "Search" : "Otsi", "Send" : "Saada", "Refresh" : "Värskenda", + "Heading1" : "1. taseme pealkiri", + "Heading2" : "2. taseme pealkiri", + "Heading3" : "3. taseme pealkiri", "About" : "Rakenduse teave", "Acknowledgements" : "Tänuavaldused", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Selles rakenduses sisaldub avatud lähtekoodiga CKEditor, mis on kasutusel kirjade koostamiseks. Autoriõigused: © CKEditori kaasautorid. Litsentseeritud GPLv2 alusel.", - "Title of the text block" : "Tekstiploki pealkiri", - "Content of the text block" : "Tekstiploki sisu", - "Ok" : "Sobib", "Automatically create tentative appointments in calendar" : "Lisa esialgsed kohtumised kalendrisse automaatselt", "No certificate" : "Sertifikaati pole", "Certificate updated" : "Sertifikaat on uuendatud", @@ -211,8 +226,8 @@ OC.L10N.register( "Cc/Bcc" : "Cc/Bcc", "Select recipient" : "Vali kirja saaja", "Contact or email address …" : "Kontakt või e-posti aadress…", - "Cc" : "Cc", - "Bcc" : "Bcc", + "Cc" : "Koopia", + "Bcc" : "Pimekoopia", "Subject" : "Teema", "Subject …" : "Teema…", "This message came from a noreply address so your reply will probably not be read." : "See kiri on saadetud aadressilt, kuhu vastuseid ei oodata ja seega sinu saadetud vastust ilmselt mitte keegi ei loe.", @@ -228,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Ära kasuta vormindust", "Upload attachment" : "Laadi manus üles", "Add attachment from Files" : "Lisa manus failirakendusest", - "Add share link from Files" : "Lisa jagamislink failirakendusest", "Smart picker" : "Nutivalija", "Request a read receipt" : "Palu lugemiskinnitust", "Sign message with S/MIME" : "Allkirjasta kiri S/MIME-ga", @@ -240,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Esmaspäeva hommikul", "Custom date and time" : "Valutud kuupäeval ja kellaajal", "Enter a date" : "Sisesta kuupäev", - "Choose" : "Vali", + "Remove attachment {fileName}" : "Eemalda manus: {fileName}", + "Add as attachment" : "Lisa manusena", + "Add as share link" : "Lisa jagamislingina", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Manuse maht ületab lubatud suuruse {size}. Selle asemel palun jaga seda faili lingiga.","Manuste maht ületab lubatud suuruse {size}. Selle asemel palun jaga neid faile lingiga."], - "Choose a file to add as attachment" : "Vali fail, mida manustada", - "Choose a file to share as a link" : "Vali lingiga jagatav fail", + "Choose a file" : "Vali fail", "_{count} attachment_::_{count} attachments_" : ["{count} manus","{count} manust"], "Untitled message" : "Ilma pealkirjata kiri", "Expand composer" : "Näita koostamisvaadet laiemana", "Close composer" : "Sulge koostamisvaade", "Confirm" : "Kinnita", + "Delegate access" : "Volita ligipääs", + "Revoke" : "Tühista", + "{userId} will no longer be able to act on your behalf" : "Kasutaja {userId} ei saa enam sinu nimel tegutseda", + "Could not fetch delegates" : "Volitatute laadimine ei õnnestunud", + "Delegated access to {displayName}" : "Ligipääs on volitatud „{displayName}“ kasutajale", + "Could not delegate access" : "Ligipääsu volitamine ei õnnestunud", + "Revoked access for {displayName}" : "„{displayName}“ kasutaja ligipääs on tühistatud", + "Could not revoke delegation" : "Volituse tühistamine ei õnnestunud", + "Delegation" : "Volitamine", + "Allow users to send, receive, and delete mail on your behalf" : "Luba volitatutel saata, vastu võtta ja kustutada e-kirju sinu nimel", + "Revoke access" : "Eemalda ligipääs", + "Add delegate" : "Lisa volitatav", + "Select a user" : "Vali kasutaja", + "They will be able to send, receive, and delete mail on your behalf" : "Volitatu võib saata, vastu võtta ja kustutada e-kirju sinu nimel", + "Revoke access?" : "Kas tühistad ligipääsu?", "Tag: {name} deleted" : "Silt: {name} on kustutatud", "An error occurred, unable to delete the tag." : "Tekkis viga, silti ei õnnestu kustutada", "The tag will be deleted from all messages." : "See silt saab olema eemaldatud kõikide kirjade juurest.", @@ -256,6 +286,7 @@ OC.L10N.register( "Rich text" : "Vormindatud tekst", "No messages in this folder" : "Selles kaustas pole kirju", "No messages" : "Kirju pole", + "Choose" : "Vali", "Blind copy recipients only" : "Vaid pimekoopia saajad", "No subject" : "Teemat pole", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Kavand:{markup-end} {subject}", @@ -274,17 +305,20 @@ OC.L10N.register( "No trash folder configured" : "Prügikasti kaust on määramata", "Could not delete message" : "Kirja kustutamine ei õnnestunud", "Could not archive message" : "Kirja arhiveerimine ei õnnestunud", - "Thread was snoozed" : "Jutulõnga kuvamine on edasi lükatd", + "Thread was snoozed" : "Jutulõnga kuvamine on edasi lükatud", "Could not snooze thread" : "Ei õnnestunud edasi lükata jutulõnga kuvamist", "Thread was unsnoozed" : "Jutulõnga edasilükkamine on lõpetatud", "Could not unsnooze thread" : "Jutulõnga edasilükkamise lõpetamine ei õnnestunud", + "Message saved to Files" : "E-kKiri on salvestatud failirakendusse", + "Message could not be saved" : "E-kirja salvestamine ei õnnestunud", "This summary was AI generated" : "See koond on loodud tehisaru poolt", "Encrypted message" : "Krüptitud e-kiri", "This message is unread" : "See kiri on lugemata", + "Choose a folder to store the message in" : "Vali, kaust, kuhu tahad e-kirja salvestada", "Unfavorite" : "Eemalda lemmikute seast", "Favorite" : "Lemmik", "Unread" : "Lugemata", - "Read" : "Lugemine", + "Read" : "Loetud", "Unimportant" : "Vähetähtis", "Mark not spam" : "Eemalda rämpsposti märge", "Mark as spam" : "Märgi rämpspostiks", @@ -295,8 +329,6 @@ OC.L10N.register( "Move Message" : "Teisalda kiri", "Archive thread" : "Arhiveeri jutulõng", "Archive message" : "Arhiveeri kiri", - "Delete thread" : "Kustuta jutulõng", - "Delete message" : "Kustuta kiri", "More actions" : "Täiendavad tegevused", "Back" : "Tagasi", "Set custom snooze" : "Vali edasilükkamise aeg", @@ -304,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Vasta saates koosoleku teavet", "Create task" : "Loo ülesanne", "Download message" : "Laadi kiri alla", + "Save message to Files" : "Salvesta e-kiri failirakendusse", + "Delete thread" : "Kustuta jutulõng", + "Delete message" : "Kustuta kiri", "Back to all actions" : "Tagasi kõikide toimingute juurde", "Manage quick actions" : "Halda kiirtoiminguid", "Load more" : "Laadi veel", @@ -313,7 +348,7 @@ OC.L10N.register( "_Mark {number} as unimportant_::_Mark {number} as unimportant_" : ["Märgi {number} mitteoluliseks","Märgi {number} mitteoluliseks"], "_Unfavorite {number}_::_Unfavorite {number}_" : ["Eemalda {number} lemmikute seast","Eemalda {number} lemmikute seast"], "_Favorite {number}_::_Favorite {number}_" : ["Lisa {number} kiri lemmikuks","Lisa {number} kirja lemmikuks"], - "_Unselect {number}_::_Unselect {number}_" : ["Eemalda {number} kiri lemmikute seast","Eemalda {number} kirja lemmikute seast"], + "_Unselect {number}_::_Unselect {number}_" : ["Eemalda {number} kiri valikust","Eemalda {number} kirja valikust"], "_Mark {number} as spam_::_Mark {number} as spam_" : ["Märgi {number} kiri rämpspostiks","Märgi {number} kirja rämpspostiks"], "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Eemalda {number}-lt kirjalt rämpsposti märge","Eemalda {number}-lt kirjalt rämpsposti märge"], "_Edit tags for {number}_::_Edit tags for {number}_" : ["Muuda {number} kirja silte","Muuda {number} kirja silte"], @@ -324,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Märgi mitteoluliseks", "Mark as important" : "Märgi oluliseks", "Report this bug" : "Teata sellest veast", + "This description was generated by AI." : "See kirjeldus on koostatud tehisaru poolt.", "Event created" : "Sündmus on loodud", "Could not create event" : "Sündmuse loomine ei õnnestunud", "Create event" : "Lisa sündmus", + "Title" : "Pealkiri", "All day" : "Kogu päev", "Attendees" : "Osalejad", "You can only invite attendees if your account has an email address set" : "Sa saad kutsuda osalejaid vaid siis, kui sinu kasutajakontole on lisatud e-posti aadress", @@ -375,18 +412,21 @@ OC.L10N.register( "Loading messages …" : "Laadin kirju…", "Indexing your messages. This can take a bit longer for larger folders." : "Indekseerin sinu kirju. Kui kaustad on väga suured, siis võib kuluda natuke aega.", "Choose target folder" : "Vali sihtkaust", - "No more submailboxes in here" : "Siin poel rohkem alampostkaste", + "No more submailboxes in here" : "Siin pole rohkem alampostkaste", "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Kirjad märgitakse tehisaru abil automaatselt oluliseks. Süsteem õpib, milliste kirjadega sa suhestud või milliseid sa oluliseks märgid. Alguses võib olla vaja olulisuse taset käsitsi muuta, et süsteemi õpetada, kuid aja jooksul muutub see üha paremaks", "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Lemmikuks märgitud kirjad järjestuvad kaustas esimestena. Selle valiku saad seadistustest välja lülitada.", "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "Tehisaru tuvastab sinu saadetud kirjad, millele tuleks tõenäoliselt vastata, kuid millele sa pole paar päeva jooksul vastanud ning kuvab need siin", "Favorites" : "Lemmikud", "Favorites info" : "Lemmikute teave", "Load more favorites" : "Laadi veel lemmikuid", + "Follow up" : "Jätkukiri", + "Follow up info" : "Jätkukirja teave", "Load more follow ups" : "Laadi veel jätkukirju", "Important info" : "Oluline teave", "Load more important messages" : "Laadi veel olulisi kirju", "Other" : "Muu", "Load more other messages" : "Laadi veel muid kirju", + "Could not send mdn" : "Olekuteate (Message Disposition Notification - MDN) edastamine ei õnnestunud", "The sender of this message has asked to be notified when you read this message." : "Selle kirja saatja on palunud kinnitust, kui oled kirja lugenud.", "Notify the sender" : "Teavita saatjat", "You sent a read confirmation to the sender of this message." : "Sa saatsid selle kirja saatjale lugemisteatise.", @@ -394,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Kirja kuvamist ei õnnestunud edasi lükata", "Message was unsnoozed" : "Kirja kuvamise edasilükkamine on lõpetatud", "Could not unsnooze message" : "Kirja kuvamise edasilükkamise lõpetamine ei õnnestunud", - "Forward" : "Edasi", + "Could not generate direct link: Message ID is missing" : "Otselingi koostamine ei õnnestunud: sõnumi tunnus on puudu", + "Direct link copied to clipboard" : "Otselink on lõikelauale kopeeritud", + "Copy direct link" : "Kopeeri otselink", + "Forward" : "Edasta", + "Only for message recipients" : "Vaid kirjasaajad", + "Link copied" : "Link on kopeeritud", "Move message" : "Teisalda kiri", "Translate" : "Tõlgi", "Forward message as attachment" : "Edasta kiri manusena", @@ -409,18 +454,18 @@ OC.L10N.register( "Unnamed" : "Nimeta", "Embedded message" : "Lõimitud kiri", "Attachment saved to Files" : "Manus on salvestatud failirakendusse", - "Attachment could not be saved" : "Manus polnud võimalik salvestada", + "Attachment could not be saved" : "Manust polnud võimalik salvestada", "calendar imported" : "kalender on imporditud", "Choose a folder to store the attachment in" : "Vali kaust, kuhu manus salvestada", "Import into calendar" : "Impordi kalendrisse", "Download attachment" : "Laadi manus alla", "Save to Files" : "Salvesta failirakendusse", "Attachments saved to Files" : "Manused on salvestatud failirakendusse", - "Error while saving attachments" : "Viga manuse salvestamisel", + "Error while saving attachments" : "Viga manuste salvestamisel", "View fewer attachments" : "Näita vähem manuseid", "Choose a folder to store the attachments in" : "Vali kaust, kuhu soovid manuse salvestada", "Save all to Files" : "Salvesta kõik failirakendusse", - "Download Zip" : "Laadi alla zip-fail", + "Download Zip" : "Laadi zip-fail alla", "_View {count} more attachment_::_View {count} more attachments_" : ["Vaata veel {count} manust","Vaata veel {count} manust"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "See kiri on krüptitud PGP abil. Dekrüptimiseks palun paigalda Mailvelope.", "The images have been blocked to protect your privacy." : "Kaitsmaks sinu privaatsust on piltide kuvamine blokeeritud.", @@ -430,19 +475,23 @@ OC.L10N.register( "Always show images from {domain}" : "Alati näita pilte {domain} domeenist", "Message frame" : "Kirja raam", "Quoted text" : "Tsiteeritud tekst", - "Move" : "Liiguta", + "Move" : "Tõsta", "Moving" : "Teisaldan", "Moving thread" : "Teisaldan jutulõnga mujale", "Moving message" : "Teisaldan kirja", "This account cannot connect" : "Selle kasutajakonto ühendamine ei õnnestu", "Connection failed. Please verify your information and try again" : "Ühendamine ei õnnestunud. Palun kontrolli, kas kõik sisestatud teave on õige ja proovi uuesti", + "Change password" : "Muuda salasõna", "Used quota: {quota}% ({limit})" : "Kasutatud kvoot: {quota}% ({limit})", "Used quota: {quota}%" : "Kasutatud kvoot: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postkasti pole võimalik luua. Ilmselt on nimes keelatud tähemärke. Palun proovi mõnda muud nime.", "Remove account" : "Eemalda konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "E-posti konto {email} ja tema puhverdatud andmed eemaldatakse siit Nextcloudi serverist, kuid mitte sinu e-postiteenuse pakkuja juurest.", "Remove {email}" : "Eemalda fail: „{email}“", + "could not delete account" : "kasutajakonto kustutamine ei õnnestunud", + "Provisioned account is disabled" : "Ettevalmistatud konto on eemaldatud kasutuselt", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Selle konto kasutamiseks palun logi sisse salasõnaga. Praegune sessioon kasutab salasõnata tuvastamist, milleks võib olla SSO, WebAuthn, vms.", + "Delegate account" : "Volita konto kasutamine", "Show only subscribed folders" : "Näita vaid tellitud kaustu", "Add folder" : "Lisa kaust", "Folder name" : "Kausta nimi", @@ -471,7 +520,7 @@ OC.L10N.register( "Clear cache" : "Tühjenda puhver", "Clear locally cached data, in case there are issues with synchronization." : "Kui sünkroniseerimisel tekib vigu, siis kustuta kohalikus seadmes puhverdatud andmed.", "Subscribed" : "Tellitud", - "Sync in background" : "Sünkroniseeri taustal", + "Sync in background" : "Sünkrooni taustal", "Delete all messages" : "Kustuta kõik kirjad", "Outbox" : "Saadetud kirjad", "Translate this message to {language}" : "Tõlgi see e-kiri sihtkeelde: {language}", @@ -485,7 +534,7 @@ OC.L10N.register( "attachment" : "manus", "attached" : "manus on lisatud", "No \"sent\" folder configured. Please pick one in the account settings." : "Saadetud kirjade kaust on seadistamata. Palun see seda kasutajakonto seadistustes.", - "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Sa üritad saata kirja, kus saaja ja koopia välja on hiidpalju aadresse. Kirjasaajate privaatsuse ja mugavuse nimel palun kasuta pimekoopia välja.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Sa üritad saata kirja, kus saaja ja koopia väljal on hiidpalju aadresse. Kirjasaajate privaatsuse ja mugavuse nimel palun kasuta pimekoopia välja.", "Your message has no subject. Do you want to send it anyway?" : "Sinu e-kirjal puudub teema. Kas sa kindlasti soovid seda saata?", "You mentioned an attachment. Did you forget to add it?" : "Sa mainisid, et tahad manuse lisada. Kas see ununes?", "Message discarded" : "Oled kirjast loobunud", @@ -498,7 +547,7 @@ OC.L10N.register( "Retry" : "Proovi uuesti", "Warning sending your message" : "Hoiatus sinu kirja saatmisel", "Send anyway" : "Saada ikkagi", - "Welcome to {productName} Mail" : "Tere tulemast kasutama {productName}i Maili", + "Welcome to {productName} Mail" : "Tere tulemast kasutama {productName}i E-postirakendust", "Start writing a message by clicking below or select an existing message to display its contents" : "Hakka koostama uut kirja klõpsides alljärgnevat või klõpsa mõnel kirjal tema lugemiseks", "Autoresponder off" : "Automaatvastaja on sees", "Autoresponder on" : "Automaatvastaja on väljas", @@ -539,7 +588,7 @@ OC.L10N.register( "Open search modal" : "Ava modaalne otsinguvaade", "Close" : "Sulge", "Search parameters" : "Otsinguparameetrid", - "Search subject" : "Otsi teemat", + "Search subject" : "Otsi teemat/pealkirja", "Body" : "Sisu", "Search body" : "Otsi sisust", "Date" : "Kuupäev", @@ -551,18 +600,18 @@ OC.L10N.register( "Select BCC recipients" : "Vali pimekoopia saajad", "Tags" : "Sildid", "Select tags" : "Vali sildid", - "Marked as" : "Märgutud kui", + "Marked as" : "Märgitud kui", "Has attachments" : "Leidub manuseid", "Mentions me" : "Mainib mind", "Has attachment" : "Manusega", "To me" : "Mulle", "Enable mail body search" : "Otsi kirja sisust", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve on väga võimas keel, mille abil saad koostada filtreid oma postkastide jaoks. Kui sinu e-posti teenusepakkuja seda võimalust toetab, siis saad Sievet kasutada ka siin rakenduses. Sieve on vajalik rakenduse automaatvastaja ja kirjafiltrite jaoks.", - "Enable sieve filter" : "Võta Sieve filter kasutusele", - "Sieve host" : "Sieve server", - "Sieve security" : "Sieve turvalisus", - "Sieve Port" : "Sieve port", - "Sieve credentials" : "Sieve kasutajanimi/salasõna", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve on väga võimas keel, mille abil saad koostada filtreid oma postkastide jaoks. Kui sinu e-posti teenusepakkuja seda võimalust toetab, siis saad Sieve'i kasutada ka siin rakenduses. Sieve on vajalik rakenduse automaatvastaja ja kirjafiltrite jaoks.", + "Enable sieve filter" : "Võta Sieve'i filter kasutusele", + "Sieve host" : "Sieve'i server", + "Sieve security" : "Sieve'i turvalisus", + "Sieve Port" : "Sieve'i port", + "Sieve credentials" : "Sieve'i kasutajanimi/salasõna", "IMAP credentials" : "IMAP-i kasutajanimi/salasõna", "Custom" : "Kohandatud", "Sieve User" : "Sieve'i kasutaja", @@ -570,7 +619,7 @@ OC.L10N.register( "Oh snap!" : "Appikene!", "Save sieve settings" : "Salvesta Sieve'i seadistused", "The syntax seems to be incorrect:" : "Süntaks tundub olema vigane:", - "Save sieve script" : "Salvesta Sieve skript", + "Save sieve script" : "Salvesta Sieve'i skript", "Signature …" : "Allkiri…", "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Sinu e-kirjade allkiri on suurem, kui 2 MB ja see võib mõjutada kirjutamisliidese jõudlust.", "Save signature" : "Salvesta allkiri", @@ -582,7 +631,7 @@ OC.L10N.register( "Delete tag" : "Kustuta silt", "Set tag" : "Lisa silt kirjale", "Unset tag" : "Eemalda silt kirjalt", - "Tag name is a hidden system tag" : "Sildi nimi on peidetud süsteemne pilt", + "Tag name is a hidden system tag" : "Sildi nimi on peidetud süsteemne silt", "Tag already exists" : "Silt on juba olemas", "Tag name cannot be empty" : "Sildi nimi ei saa jääda tühjaks", "An error occurred, unable to create the tag." : "Tekkis viga ning silti ei saanud luua.", @@ -615,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Vasta vaid saatjale", "Mark as unfavorite" : "Märgi mittelemmikuks", "Mark as favorite" : "Märgi lemmikuks", + "From:" : "Saatja:", + "To:" : "Saaja:", + "Cc:" : "Koopia:", + "Bcc:" : "Pimekoopia:", "Unsubscribe via link" : "Loobu tellimusest lingi kaudu", "Unsubscribing will stop all messages from the mailing list {sender}" : "Tellimusest loobudes sa enam ei saa kirju postiloendist {sender}", "Send unsubscribe email" : "Saada loobumiskiri", @@ -682,6 +735,7 @@ OC.L10N.register( "contains" : "sisaldab", "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Stringi osaline vaste. Välja väärtus vastab, kui antud väärtus on selles sisalduv. Näiteks vastab „report“ sõnale „port“.", "matches" : "kattub", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Muster, milles kasutatakse metamärke. Sümbol „*“ tähistab mis tahes arvu märke (sh mitte ühtegi), samas kui „?“ tähistab täpselt ühte märki. Näiteks sobib „*report*“ kokku fraasiga „Business report 2024“.", "Enter subject" : "Sisesta teema", "Enter sender" : "Sisesta saatja", "Enter recipient" : "Sisesta saaja", @@ -713,28 +767,56 @@ OC.L10N.register( "Successfully updated config for \"{domain}\"" : "„{domain}“ domeeni seadistuste uuendamine õnnestus", "Error saving config" : "Viga seadistuste salvestamisel", "Saved config for \"{domain}\"" : "„{domain}“ domeeni seadistused on salvestatud", - "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["{count} kasutajakonto ettevalmistamine õnnestus","{count} kasutajakonto ettevalmistamine õnnestus"], + "Could not save provisioning setting" : "Kasutajakonto eelseadistuse salvestamine ei õnnestunud", + "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["{count} kasutajakonto eelseadistamine ja ettevalmistamine õnnestus","{count} kasutajakonto eelseadistamine ja ettevalmistamine õnnestus"], + "There was an error when provisioning accounts." : "Kasutajakontode eelseadistamisel ja ettevalmistamisel tekkis viga.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "„{domain}“ domeeni jaoks ettevalmistatud kontode kustutamine õnnestus", + "Error when deleting and deprovisioning accounts for \"{domain}\"" : "„{domain}“ domeeni jaoks ettevalmistatud kontode kustutamisel tekkis viga", + "Could not save default classification setting" : "Vaikimisi klassifitseerimise seadistuse salvestamine ei õnnestunud", "Mail app" : "E-posti rakendus", "The mail app allows users to read mails on their IMAP accounts." : "Selle rakendusega saavad kasutajad lugeda oma IMAP-i kontode kirju.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Siin on serverikohased seadistused. Kasutajakohased seadistused leiduvad rakenduses (vaata alumist vasakut nurka).", + "Account provisioning" : "Kasutajakontode ettevalmistus", + "A provisioning configuration will provision all accounts with a matching email address." : "Ettevalmistuse seadistuse alusel valmistatakse ette kõik e-posti aadressid, mis tingimustele vastavad", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Kui kasutad metamärgiga (*) määratletud eelseadistamist, siis see seadistus kehtib kõigile, välja arvatud neile, kelle puhul kehib täpselt määratletud domeeni seadistus.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "Ettevalmistamise (eelseadistamise) mehhanism käsitleb konkreetse domeeni seadistuse kõrgema prioriteediga, kui metamärgiga domeeni seadistusi.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Kui leitakse uus sobiv seadistus pärast seda, kui kasutajale on juba eelseadistus tehtud, siis on uuel seadistusel eelisõigus ja kasutajale tehakse uus eelseadistus selle alusel uuesti.", + "There can only be one configuration per domain and only one wildcard domain configuration." : "Võid koostada vaid ühe domeenikohase seadistuse ja ühe metamärk+domeen seadistuse.", + "These settings can be used in conjunction with each other." : "Neid seadistusi saad omavahel kombineerida.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "Kui kavatsed kõikide kasutajate jaoks eelseadistada vaid ühte domeeni, siis kasuta metamärki (*).", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "See seadistus on mõttekas vaid juhul, kui kasutad oma Nextcloudi ja organisatsiooni e-postiserveri jaoks sama kasutajate haldussüsteemi.", + "Provisioning Configurations" : "Ettevalmistamise seadistused", "Add new config" : "Lisa uus konfiguratsioon", + "Provision all accounts" : "Valmista ette kõik kasutajakontod", "Allow additional mail accounts" : "Lisa veel e-postikontosid", "Allow additional Mail accounts from User Settings" : "Luba kasutaja seadistustest täiendavate e-posti kontode kasutamine", "Enable text processing through LLMs" : "Kasuta teksti töötlemist suure keelemudeliga", "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "E-postirakendus oskab töödelda kasutajaandmeid seadistatud keelemudeli abil ning selle teha abitoiminguid, nagu jutulõngade ülevaadete, nutikate vastuste ja ürituste päevakavade koostamine.", "Enable LLM processing" : "Lülita suure keelemudeliga töötlemine sisse", + "Enable classification by importance by default" : "Vaikimisi luba e-kirjade klassifitseerimine olulisuse alusel", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Kasutades masinõpet oskab e-postirakendus kirju klassifitseerida olulisuse alusel. Vaikimisi on see võimalus kasutusel, kuid saad määrata, et ta vaikimisi on lülitatud välja. Sel puhul saavad kasutajad niisuguse võimaluse oma konto jaoks sisse lülitada.", + "Enable classification of important mails by default" : "Vaikimisi luba oluliste e-kirjade klassifitseerimine", "Anti Spam Service" : "Spämmitõrjeteenus", + "You can set up an anti spam service email address here." : "Siin võid seadistada spämmitõrjeteenuse e-posti aadressi.", + "Any email that is marked as spam will be sent to the anti spam service." : "Spämmiks ehk rämpspostiks märgitud e-kiri saadetakse sellele teenusele.", "Gmail integration" : "Lõiming Gmailiga", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail lubab kasutajatel lugeda kirju IMAP-i abil. Turvakaalutlustel toimib see vaid OAuth 2.0 liidestusega või kui Google'i konto kasutab kaheastmelist autentimist ja rakenduse salasõna.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Sa pead Google Cloudi juhtpaneelis registreerima veebirakenduse (Web application) jaoks uue klienditunnuse (Client ID). Korrektse suunamisaadressina kasuta: {url}", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Sa pead Google Cloudi juhtpaneelis registreerima veebirakenduse (Web application) jaoks uue klienditunnuse (Client ID). Korrektse edasisuunamisaadressina kasuta: {url}", "Microsoft integration" : "Lõiming Microsofti e-postiteenusega", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft lubab kasutajatel lugeda kirju IMAP-i abil. Turvakaalutlustel toimib see vaid OAuth 2.0 liidestusega. Selleks palun registreeri oma rakendus teenuses Microsoft Entra ID, varasema nimega Microsoft Azure Active Directory.", - "Redirect URI" : "Ümbersuunamise aadress (URI)", + "Redirect URI" : "Edasusuunamise aadress (URI)", "For more details, please click here to open our documentation." : "Lisateavet leiad meie dokumentatsioonist ↗.", "User Interface Preference Defaults" : "Kasutusliidese eelistuste vaikimisi väärtused", "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Need on kasutajaliidese eelseadistused, mida iga kasutaja saab oma seadistustest muuta", "Message View Mode" : "Kirjade vaate liik", "Show only the selected message" : "Näita vaid valitud kirja", + "Successfully set up anti spam email addresses" : "Spämmitõrjeteenuse e-posti aadressi seadistamine õnnestus.", + "Error saving anti spam email addresses" : "Spämmitõrjeteenuse e-posti aadressi salvestamine ei õnnestunud.", + "Successfully deleted anti spam reporting email" : "Spämmitõrjeteenuse e-posti aadressi kustutamine õnnestus.", + "Error deleting anti spam reporting email" : "Spämmitõrjeteenuse e-posti aadressi kustutamine ei õnnestunud.", + "Anti Spam" : "Spämmi ehk rämsposti tõrjumine", + "Add the email address of your anti spam report service here." : "Lisa oma kasutatava spämmitõrjeteenuse e-posti aadress siia.", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Selle seadistuse kasutamisel saadetakse teavituskiri spämmitõrjeteenusele niipea, kui kasutaja klõpsab valikut „Märgi rämpspostiks“.", "The original message will be attached as a \"message/rfc822\" attachment." : "Algne kiri lisatakse manusena „message/rfc822“ tüüpi failina.", "\"Mark as Spam\" Email Address" : "„Märgitud rämpspostiks“ e-posti aadressid", "\"Mark Not Junk\" Email Address" : "„Pole rämpspost“ e-posti aadressid", @@ -743,7 +825,7 @@ OC.L10N.register( "Could not configure Google integration" : "Google'i e-postiteenuste lõimingu seadistamine ei õnnestunud", "Google integration unlinked" : "Google'i e-postiteenuste lõiming on eemaldatud", "Could not unlink Google integration" : "Google'i e-postiteenuste lõimingu eemaldamine ei õnnestunud", - "Client ID" : "Kliendi tunnus", + "Client ID" : "Klienditunnus", "Client secret" : "Kliendi saladus", "Unlink" : "Eemalda lõiming", "Microsoft integration configured" : "Microsofti e-postiteenuste lõiming on seadistatud", @@ -757,6 +839,7 @@ OC.L10N.register( "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} serveris {host}:{port} ({ssl} krüptimisega)", "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} serveris {host}:{port} ({ssl} krüptimisega)", "Configuration for \"{provisioningDomain}\"" : "Seadistus „{provisioningDomain}“ domeeni jaoks", + "Provisioning domain" : "Domeeni ettevalmistamine", "Email address template" : "E-posti aadressi mall", "IMAP" : "IMAP", "User" : "Kasutaja", @@ -773,6 +856,7 @@ OC.L10N.register( "LDAP attribute for aliases" : "LDAP-i omadused aliaste jaoks", "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Mitmeväärtuseline e-posti aliaste eelkoostamise lahendus. Iga väärtuse kohta luuakse alias. Nexctcloudis leiduvate aliaste puhul, millel pole LDAP-i serveris vastet, kustutakse e-posti teenusest.", "Save Config" : "Salvesta seadistus", + "Unprovision & Delete Config" : "Eemalda ettevalmistatud seadistused ja kustuta nad", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% ja %EMAIL% asendatakse kasutajatunnuse (UID) ja e-posti aadressiga", "With the settings above, the app will create account settings in the following way:" : "Ülalmääratud seadistuste alusel loob rakendus kasutajakonto seadistused alljärgneval viisil:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Lisatud PKCS #12 sertifikaadis peab olema vähemalt üks sertifikaat ning ainult üks privaatvõti.", @@ -780,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "Sertifikaadi importimine õnnestus", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Sertifikaadi importimine ei õnnestunud. Palun kontrolli, et privaatvõti vastab sertifikaadile ja ta ei ole salafraasiga krüptitud.", "Failed to import the certificate" : "Sertifikaadi importimine ei õnnestunud", + "Import S/MIME certificate" : "Impordi S/MIME sertifikaat", "S/MIME certificates" : "S/MIME sertifikaadid", "Certificate name" : "Sertifikaadi nimi", "E-mail address" : "E-posti aadress", @@ -787,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Kustuta sertifikaat", "No certificate imported yet" : "Ühtegi sertifikaati pole imporditud", "Import certificate" : "Impordi sertifikaat", - "Import S/MIME certificate" : "Impordi S/MIME sertifikaat", "PKCS #12 Certificate" : "PKCS #12 sertifikaat", "PEM Certificate" : "PEM sertifikaat", "Certificate" : "Sertifikaat", @@ -813,7 +897,7 @@ OC.L10N.register( "Choose a text block to insert at the cursor" : "Vali kursori asukohast alates lisatav tekstiplokk", "Insert" : "Lisa", "Insert text block" : "Sisesta tekstiplokk", - "Account connected" : "Konto ühendatud", + "Account connected" : "Kasutajakonto on ühendatud", "You can close this window" : "Võid selle akna sulgeda.", "Connect your mail account" : "Ühenda oma e-posti kontoga", "To add a mail account, please contact your administrator." : "Oma e-posti konto lisamiseks palun võta ühendust oma peakasutajaga.", @@ -849,10 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Soovitud kirja laadimine ei õnnestunud", "Could not load the message" : "Kirja laadimine ei õnnestunud", "Error loading message" : "Viga kirja laadimisel", - "Determine importance using machine learning" : "Määra olulisus masinõppe abil", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Kirjad märgitakse automaatselt oluliseks selle alusel, milliste kirjadega sa suhestud või milliseid sa oluliseks märgid. Alguses võib olla vaja olulisuse taset käsitsi muuta, et süsteemi õpetada, kuid aja jooksul muutub see üha paremaks", - "Mark all messages of this folder as read" : "Märgi kõik selle kausta kirjad loetuks", - "Last 7 days" : "Viimase 7 päeva jooksul", - "From me" : "Minult" + "Add share link from Files" : "Lisa jagamislink failirakendusest", + "Choose a file to add as attachment" : "Vali fail, mida manustada", + "Choose a file to share as a link" : "Vali lingiga jagatav fail", + "Delegated access to {userId}" : "Sa volitasid ligipääsu kasutajale {userId}", + "Revoked access for {userId}" : "Kasutaja {userId} volitus on eemaldatud" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/et_EE.json b/l10n/et_EE.json index a08943d15f..9c52ad3d23 100644 --- a/l10n/et_EE.json +++ b/l10n/et_EE.json @@ -11,7 +11,11 @@ "Later" : "Hiljem", "Mail" : "Kirjad", "You are reaching your mailbox quota limit for {account_email}" : "„{account_email}“ konto mahukvoot on varsti täis", - "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Kasutad praegu {percentage} oma postkasti andmeruumist. Palun kustuta mittevajalikud kirjad ning saada andmeruumi juurde.", + "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Kasutad praegu {percentage} oma postkasti andmeruumist. Palun kustuta mittevajalikud kirjad ning saad andmeruumi juurde.", + "{account_email} has been delegated to you" : "sul on nüüd {account_email} e-postikonto volitus", + "{user} delegated {account} to you" : "{user} volitas sind kasutama {account} e-posti kontot", + "{account_email} is no longer delegated to you" : "sul enam pole {account_email} e-posti konto volitust", + "{user} revoked delegation for {account}" : "{user} tühistas volituse {account} kasutajakonto jaoks", "Mail Application" : "E-posti rakendus", "Mails" : "E-kirjad", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Saatja aadress %1$s pole aadressiraamatus, aga %2$s nimi on ning temaga on seotud järgnev aadress: %3$s", @@ -22,10 +26,15 @@ "Some addresses in this message are not matching the link text" : "Mõned selle kirja aadressid ei vasta lingi tekstile", "Reply-To email: %1$s is different from sender email: %2$s" : "Vastamiseks mõeldud e-posti aadress: %1$s on erinev saatja aadressist %2$s", "Mail connection performance" : "E-postiteenuse ühenduse jõudlus", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Aeglase e-posti tuvastusteenus (%1$s) - mitme e-posti kontoga ühendamine võttis aega keskmiselt %2$s sekundit kasutajakontkonto kohta", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Aeglase e-posti tuvastusteenus (%1$s) - postkastide loendi laadimine mitme konto jaoks võttis aega keskmiselt %2$s sekundit kasutajakontkonto kohta", + "Mail Transport configuration" : "E-kirjade edastamise viis serverite vahel", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "„app.mail.transport“ seadistuse väärtus pole „smtp“. Selline seadistus võib põhjustada probleeme kaasaegsete e-posti turvameetmetega, nagu SPF ja DKIM, kuna e-kirjad saadetakse otse veebiserverist, mis ei ole selleks otstarbeks sageli nõuetekohaselt konfigureeritud. Selle probleemi lahendamiseks oleme lõpetanud „mail-transport“ meetodi toetamise. Palun eemalda serveri seadistustest „app.mail.transport“, et kasutada SMTP-põhist edastust ja peida see teade. E-kirjade kättetoimetamise tagamiseks on vaja nõuetekohaselt konfigureeritud SMTP-seadistust.", "Mail account parameters, aliases and preferences" : "E-posti kasutajakonto parameetrid, aliased ja eelistused", "💌 A mail app for Nextcloud" : "💌 E-postirakendus Nextcloudi jaoks", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 E-posti rakendus Nextcloudi jaoks**\n\n- **🚀 Lõiming muude Nextcloudi rakendustega!** Hetkel kontakti-, kalendri ja failirakendused, aga õige pea lisandub neid veel.\n- **📥 Mitu e-posti kontot!** Isiklik ja töökoha konto? Pole probleemi ja kauba peale saad kena ja ühise sisendposti kausta. Võid ühendada kõiki IMAP-i kasutajakontosid.\n- **🔒 Saada krüptitud e-kirju ja võta neid vastu!** Selleks on kasutusel suurepärase veebibrauseri lisamoodul [Mailvelope](https://mailvelope.com).\n- **🙈 Me ei leiuta midagi uut!** Rakendus põhineb suurepärastel [Horde](https://www.horde.org) teekidel.\n- **📬 Tahad kasutada oma serverit?** Me ei hakanud seda ise leiutama, on ju olemas [Mail-in-a-Box](https://mailinabox.email) teenus!\n\n## Tehisaru eetiline kasutaus\n\n### Prioriteediga kirjad saabuvate kirjade postkastis\n\nPositiivne lähenemine:\n* Selle mudeli treenimiseks ja järelduste tegemiseks mõeldud tarkvara on avatud lähtekoodiga.\n* Mudel luuakse ja treenitakse kohapeal, tuginedes kasutaja enda andmetele.\n* Kasutajal on juurdepääs treeningandmetele, mis võimaldab kontrollida ja parandada võimalikke eelarvamusi ning optimeerida mudeli jõudlust ja CO2-heiteid.\n\n### Jutulõngade kokkuvõtted (kui tahad kasutada)\n\n**Hinnang:** 🟢/🟡/🟠/🔴\n\nHindamine sõltub paigaldatud tekstitöötluse taustateenusest. Üksikasju vaata dokumentatsioonist, mis kirjeldab [ülevaadet hindamisest](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html).\n\nTehisaru eetilisest kasutusest Nextcloudi raames leiad [teavet meie ajaveebist](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Sinu sessioon on aegunud. Leht saab olema uuesti laaditud.", - "Drafts are saved in:" : "Kirjade kavandis on salvestatud siia:", + "Drafts are saved in:" : "Kirjade kavandid on salvestatud siia:", "Sent messages are saved in:" : "Saadetud kirjad on salvestatud siia:", "Deleted messages are moved in:" : "Kustutatud kirjad on tõstetud siia:", "Archived messages are moved in:" : "Arhiveeritud kirjad on tõstetud siia:", @@ -86,49 +95,52 @@ "SMTP Port" : "SMTP port", "SMTP User" : "SMTP kasutajanimi", "SMTP Password" : "SMTP salasõna", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Kui soovid, et Google'i konto toimiks siin rakenduses, siis pead seal kasutusele võtma kaheastmelise autentimise ja looma rakendusele salasõna.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google eeldab OAuthi autentimise kasutamist. Kui sinu Nextcloudi serveri haldaja või peakasutaja pole seda teinud, siis saad selle asemel kasutada Google'i rakenduse salasõna (Google App Password).", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft eeldab OAuthi autentimise kasutamist. Palu oma Nextcloudi serveri haldajat või peakasutajat, et ta seadistaks Microsofti OAuthi.", "Account settings" : "Konto seadistused", "Aliases" : "Aliased", - "Alias to S/MIME certificate mapping" : "Alias S/MIME sertifikaatide vastavuse jaoks", + "Alias to S/MIME certificate mapping" : "Alias S/MIME sertifikaatide vastenduse jaoks", "Signature" : "Allkiri", "A signature is added to the text of new messages and replies." : "Allkiri lisatakse uutele kirjadele ja vastustele.", "Writing mode" : "Kirjutusviis", "Preferred writing mode for new messages and replies." : "Kirjutusviis uute kirjade ning vastuste jaoks.", "Default folders" : "Vaikimisi kaustad", - "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Kaustad kavandite, saadetud ja kustutatud kirjade ning arhiveeri ning rämpskirjade jaoks.", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Kaustad kavandite, saadetud ja kustutatud kirjade ning arhiveeritud ning rämpskirjade jaoks.", "Automatic trash deletion" : "Prügikasti automaatne tühjenadmine", "Days after which messages in Trash will automatically be deleted:" : "Päevade arv, mille möödumisel peaks prügikasti visatudkirjad automaatselt kustutatama", "Autoresponder" : "Automaatvastaja", "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automaatsed vastused saabunud kirjadele. Kui keegi saadab sulle üle ühe kirja, siis saab ta automaatse vastuse kord 4 päeva jooksul.", - "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Automaatvastaja on loodud Sieve skriptimiskeeles ja tavaliselt on selline võimalus toetatud paljude e-posti teenuste puhul. Kui sa pole enda omas kindel, siis palun küsi neilt üle. Kui Sieve on kasutatav, siis klõpsi järgnevat nuppu ja võta ta seadistustest kasutusele.", - "Go to Sieve settings" : "Ava Sieve seadistused", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Automaatvastaja on loodud Sieve'i skriptimiskeeles ja tavaliselt on selline võimalus toetatud paljude e-posti teenuste puhul. Kui sa pole enda omas kindel, siis palun küsi neilt üle. Kui Sieve on kasutatav, siis klõpsi järgnevat nuppu ja võta ta seadistustest kasutusele.", + "Go to Sieve settings" : "Ava Sieve'i seadistused", "Calendar settings" : "Kalendri seadistused", "Classification settings" : "Klassifitseerimise seadistused", "Filters" : "Filtrid", "Quick actions" : "Kiirtoimingud", - "Sieve script editor" : "Sieve skriptikoostaja", + "Sieve script editor" : "Sieve'i skriptikoostaja", "Mail server" : "E-posti server", - "Sieve server" : "Sieve server", + "Sieve server" : "Sieve'i server", "Folder search" : "Kaustade otsing", + "Alias name" : "Aliase nimi", + "Email address" : "E-posti aadress", "Update alias" : "Uuenda aliast", "Rename alias" : "Muuda aliast", "Show update alias form" : "Näita uuendatud aliast", "Delete alias" : "Kustuta alias", "Go back" : "Mine tagasi", "Change name" : "Muuda nime", - "Email address" : "E-posti aadress", "Add alias" : "Lisa alias", "Create alias" : "Loo alias", "Cancel" : "Katkesta", "Search the body of messages in priority Inbox" : "Otsi esmase postkasti kirjade sisust", "Activate" : "Lülita sisse", "Make mails available to Context Chat" : "Muuda e-kirjad loetavaks kontekstuaalses vestluses", - "Remind about messages that require a reply but received none" : "Tuleta mulle meelde kirju, mis eeldavad vastust, kui pole seda veel saanud", + "Remind about messages that require a reply but received none" : "Tuleta mulle meelde kirju, mis eeldavad vastust, kuid pole seda veel saanud", "Highlight external addresses" : "Tõsta välised aadressid esile", "Could not update preference" : "Eelistust polnud võimalik muuta", "Mail settings" : "E-kirjade seadistused", "General" : "Üldine", "Set as default mail app" : "Määra vaikimisi e-postirakenduseks", + "{email} (delegated)" : "{email} (volitatud)", "Add mail account" : "Lisa e-posti konto", "Appearance" : "Välimus", "Show all messages in thread" : "Näita kõiki kirju jutulõngas", @@ -138,18 +150,21 @@ "Layout" : "Välimus", "Vertical split" : "Püstjoones jagamine", "Horizontal split" : "Rõhtjoones jagamine", - "List" : "Nimekiri", + "List" : "Loend", "Use compact mode" : "Kasuta kompaktset vaadet", "Sorting" : "Järjestus", "Newest first" : "Uuemad eespool", "Oldest first" : "Vanemad eespool", + "New text block" : "Uus tekstiplokk", + "Title of the text block" : "Tekstiploki pealkiri", + "Content of the text block" : "Tekstiploki sisu", + "Ok" : "Sobib", "Avatars from Gravatar and favicons" : "Favikonid ja tunnuspildid teenusest Gravatar", "Reply position" : "Vastuse asukoht", "Top" : "Üleval", "Bottom" : "All", "Text blocks" : "Tekstiplokid", "Reusable pieces of text that can be inserted in messages" : "Teksti kasutatavad osad, misa saad kirjadesse lisada", - "New text block" : "Uus tekstiplokk", "Shared with me" : "Jagatud minuga", "Privacy" : "Privaatsus", "Data collection" : "Andmete kogumine", @@ -177,12 +192,12 @@ "Search" : "Otsi", "Send" : "Saada", "Refresh" : "Värskenda", + "Heading1" : "1. taseme pealkiri", + "Heading2" : "2. taseme pealkiri", + "Heading3" : "3. taseme pealkiri", "About" : "Rakenduse teave", "Acknowledgements" : "Tänuavaldused", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Selles rakenduses sisaldub avatud lähtekoodiga CKEditor, mis on kasutusel kirjade koostamiseks. Autoriõigused: © CKEditori kaasautorid. Litsentseeritud GPLv2 alusel.", - "Title of the text block" : "Tekstiploki pealkiri", - "Content of the text block" : "Tekstiploki sisu", - "Ok" : "Sobib", "Automatically create tentative appointments in calendar" : "Lisa esialgsed kohtumised kalendrisse automaatselt", "No certificate" : "Sertifikaati pole", "Certificate updated" : "Sertifikaat on uuendatud", @@ -209,8 +224,8 @@ "Cc/Bcc" : "Cc/Bcc", "Select recipient" : "Vali kirja saaja", "Contact or email address …" : "Kontakt või e-posti aadress…", - "Cc" : "Cc", - "Bcc" : "Bcc", + "Cc" : "Koopia", + "Bcc" : "Pimekoopia", "Subject" : "Teema", "Subject …" : "Teema…", "This message came from a noreply address so your reply will probably not be read." : "See kiri on saadetud aadressilt, kuhu vastuseid ei oodata ja seega sinu saadetud vastust ilmselt mitte keegi ei loe.", @@ -226,7 +241,6 @@ "Disable formatting" : "Ära kasuta vormindust", "Upload attachment" : "Laadi manus üles", "Add attachment from Files" : "Lisa manus failirakendusest", - "Add share link from Files" : "Lisa jagamislink failirakendusest", "Smart picker" : "Nutivalija", "Request a read receipt" : "Palu lugemiskinnitust", "Sign message with S/MIME" : "Allkirjasta kiri S/MIME-ga", @@ -238,15 +252,31 @@ "Monday morning" : "Esmaspäeva hommikul", "Custom date and time" : "Valutud kuupäeval ja kellaajal", "Enter a date" : "Sisesta kuupäev", - "Choose" : "Vali", + "Remove attachment {fileName}" : "Eemalda manus: {fileName}", + "Add as attachment" : "Lisa manusena", + "Add as share link" : "Lisa jagamislingina", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Manuse maht ületab lubatud suuruse {size}. Selle asemel palun jaga seda faili lingiga.","Manuste maht ületab lubatud suuruse {size}. Selle asemel palun jaga neid faile lingiga."], - "Choose a file to add as attachment" : "Vali fail, mida manustada", - "Choose a file to share as a link" : "Vali lingiga jagatav fail", + "Choose a file" : "Vali fail", "_{count} attachment_::_{count} attachments_" : ["{count} manus","{count} manust"], "Untitled message" : "Ilma pealkirjata kiri", "Expand composer" : "Näita koostamisvaadet laiemana", "Close composer" : "Sulge koostamisvaade", "Confirm" : "Kinnita", + "Delegate access" : "Volita ligipääs", + "Revoke" : "Tühista", + "{userId} will no longer be able to act on your behalf" : "Kasutaja {userId} ei saa enam sinu nimel tegutseda", + "Could not fetch delegates" : "Volitatute laadimine ei õnnestunud", + "Delegated access to {displayName}" : "Ligipääs on volitatud „{displayName}“ kasutajale", + "Could not delegate access" : "Ligipääsu volitamine ei õnnestunud", + "Revoked access for {displayName}" : "„{displayName}“ kasutaja ligipääs on tühistatud", + "Could not revoke delegation" : "Volituse tühistamine ei õnnestunud", + "Delegation" : "Volitamine", + "Allow users to send, receive, and delete mail on your behalf" : "Luba volitatutel saata, vastu võtta ja kustutada e-kirju sinu nimel", + "Revoke access" : "Eemalda ligipääs", + "Add delegate" : "Lisa volitatav", + "Select a user" : "Vali kasutaja", + "They will be able to send, receive, and delete mail on your behalf" : "Volitatu võib saata, vastu võtta ja kustutada e-kirju sinu nimel", + "Revoke access?" : "Kas tühistad ligipääsu?", "Tag: {name} deleted" : "Silt: {name} on kustutatud", "An error occurred, unable to delete the tag." : "Tekkis viga, silti ei õnnestu kustutada", "The tag will be deleted from all messages." : "See silt saab olema eemaldatud kõikide kirjade juurest.", @@ -254,6 +284,7 @@ "Rich text" : "Vormindatud tekst", "No messages in this folder" : "Selles kaustas pole kirju", "No messages" : "Kirju pole", + "Choose" : "Vali", "Blind copy recipients only" : "Vaid pimekoopia saajad", "No subject" : "Teemat pole", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Kavand:{markup-end} {subject}", @@ -272,17 +303,20 @@ "No trash folder configured" : "Prügikasti kaust on määramata", "Could not delete message" : "Kirja kustutamine ei õnnestunud", "Could not archive message" : "Kirja arhiveerimine ei õnnestunud", - "Thread was snoozed" : "Jutulõnga kuvamine on edasi lükatd", + "Thread was snoozed" : "Jutulõnga kuvamine on edasi lükatud", "Could not snooze thread" : "Ei õnnestunud edasi lükata jutulõnga kuvamist", "Thread was unsnoozed" : "Jutulõnga edasilükkamine on lõpetatud", "Could not unsnooze thread" : "Jutulõnga edasilükkamise lõpetamine ei õnnestunud", + "Message saved to Files" : "E-kKiri on salvestatud failirakendusse", + "Message could not be saved" : "E-kirja salvestamine ei õnnestunud", "This summary was AI generated" : "See koond on loodud tehisaru poolt", "Encrypted message" : "Krüptitud e-kiri", "This message is unread" : "See kiri on lugemata", + "Choose a folder to store the message in" : "Vali, kaust, kuhu tahad e-kirja salvestada", "Unfavorite" : "Eemalda lemmikute seast", "Favorite" : "Lemmik", "Unread" : "Lugemata", - "Read" : "Lugemine", + "Read" : "Loetud", "Unimportant" : "Vähetähtis", "Mark not spam" : "Eemalda rämpsposti märge", "Mark as spam" : "Märgi rämpspostiks", @@ -293,8 +327,6 @@ "Move Message" : "Teisalda kiri", "Archive thread" : "Arhiveeri jutulõng", "Archive message" : "Arhiveeri kiri", - "Delete thread" : "Kustuta jutulõng", - "Delete message" : "Kustuta kiri", "More actions" : "Täiendavad tegevused", "Back" : "Tagasi", "Set custom snooze" : "Vali edasilükkamise aeg", @@ -302,6 +334,9 @@ "Reply with meeting" : "Vasta saates koosoleku teavet", "Create task" : "Loo ülesanne", "Download message" : "Laadi kiri alla", + "Save message to Files" : "Salvesta e-kiri failirakendusse", + "Delete thread" : "Kustuta jutulõng", + "Delete message" : "Kustuta kiri", "Back to all actions" : "Tagasi kõikide toimingute juurde", "Manage quick actions" : "Halda kiirtoiminguid", "Load more" : "Laadi veel", @@ -311,7 +346,7 @@ "_Mark {number} as unimportant_::_Mark {number} as unimportant_" : ["Märgi {number} mitteoluliseks","Märgi {number} mitteoluliseks"], "_Unfavorite {number}_::_Unfavorite {number}_" : ["Eemalda {number} lemmikute seast","Eemalda {number} lemmikute seast"], "_Favorite {number}_::_Favorite {number}_" : ["Lisa {number} kiri lemmikuks","Lisa {number} kirja lemmikuks"], - "_Unselect {number}_::_Unselect {number}_" : ["Eemalda {number} kiri lemmikute seast","Eemalda {number} kirja lemmikute seast"], + "_Unselect {number}_::_Unselect {number}_" : ["Eemalda {number} kiri valikust","Eemalda {number} kirja valikust"], "_Mark {number} as spam_::_Mark {number} as spam_" : ["Märgi {number} kiri rämpspostiks","Märgi {number} kirja rämpspostiks"], "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Eemalda {number}-lt kirjalt rämpsposti märge","Eemalda {number}-lt kirjalt rämpsposti märge"], "_Edit tags for {number}_::_Edit tags for {number}_" : ["Muuda {number} kirja silte","Muuda {number} kirja silte"], @@ -322,9 +357,11 @@ "Mark as unimportant" : "Märgi mitteoluliseks", "Mark as important" : "Märgi oluliseks", "Report this bug" : "Teata sellest veast", + "This description was generated by AI." : "See kirjeldus on koostatud tehisaru poolt.", "Event created" : "Sündmus on loodud", "Could not create event" : "Sündmuse loomine ei õnnestunud", "Create event" : "Lisa sündmus", + "Title" : "Pealkiri", "All day" : "Kogu päev", "Attendees" : "Osalejad", "You can only invite attendees if your account has an email address set" : "Sa saad kutsuda osalejaid vaid siis, kui sinu kasutajakontole on lisatud e-posti aadress", @@ -373,18 +410,21 @@ "Loading messages …" : "Laadin kirju…", "Indexing your messages. This can take a bit longer for larger folders." : "Indekseerin sinu kirju. Kui kaustad on väga suured, siis võib kuluda natuke aega.", "Choose target folder" : "Vali sihtkaust", - "No more submailboxes in here" : "Siin poel rohkem alampostkaste", + "No more submailboxes in here" : "Siin pole rohkem alampostkaste", "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Kirjad märgitakse tehisaru abil automaatselt oluliseks. Süsteem õpib, milliste kirjadega sa suhestud või milliseid sa oluliseks märgid. Alguses võib olla vaja olulisuse taset käsitsi muuta, et süsteemi õpetada, kuid aja jooksul muutub see üha paremaks", "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Lemmikuks märgitud kirjad järjestuvad kaustas esimestena. Selle valiku saad seadistustest välja lülitada.", "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "Tehisaru tuvastab sinu saadetud kirjad, millele tuleks tõenäoliselt vastata, kuid millele sa pole paar päeva jooksul vastanud ning kuvab need siin", "Favorites" : "Lemmikud", "Favorites info" : "Lemmikute teave", "Load more favorites" : "Laadi veel lemmikuid", + "Follow up" : "Jätkukiri", + "Follow up info" : "Jätkukirja teave", "Load more follow ups" : "Laadi veel jätkukirju", "Important info" : "Oluline teave", "Load more important messages" : "Laadi veel olulisi kirju", "Other" : "Muu", "Load more other messages" : "Laadi veel muid kirju", + "Could not send mdn" : "Olekuteate (Message Disposition Notification - MDN) edastamine ei õnnestunud", "The sender of this message has asked to be notified when you read this message." : "Selle kirja saatja on palunud kinnitust, kui oled kirja lugenud.", "Notify the sender" : "Teavita saatjat", "You sent a read confirmation to the sender of this message." : "Sa saatsid selle kirja saatjale lugemisteatise.", @@ -392,7 +432,12 @@ "Could not snooze message" : "Kirja kuvamist ei õnnestunud edasi lükata", "Message was unsnoozed" : "Kirja kuvamise edasilükkamine on lõpetatud", "Could not unsnooze message" : "Kirja kuvamise edasilükkamise lõpetamine ei õnnestunud", - "Forward" : "Edasi", + "Could not generate direct link: Message ID is missing" : "Otselingi koostamine ei õnnestunud: sõnumi tunnus on puudu", + "Direct link copied to clipboard" : "Otselink on lõikelauale kopeeritud", + "Copy direct link" : "Kopeeri otselink", + "Forward" : "Edasta", + "Only for message recipients" : "Vaid kirjasaajad", + "Link copied" : "Link on kopeeritud", "Move message" : "Teisalda kiri", "Translate" : "Tõlgi", "Forward message as attachment" : "Edasta kiri manusena", @@ -407,18 +452,18 @@ "Unnamed" : "Nimeta", "Embedded message" : "Lõimitud kiri", "Attachment saved to Files" : "Manus on salvestatud failirakendusse", - "Attachment could not be saved" : "Manus polnud võimalik salvestada", + "Attachment could not be saved" : "Manust polnud võimalik salvestada", "calendar imported" : "kalender on imporditud", "Choose a folder to store the attachment in" : "Vali kaust, kuhu manus salvestada", "Import into calendar" : "Impordi kalendrisse", "Download attachment" : "Laadi manus alla", "Save to Files" : "Salvesta failirakendusse", "Attachments saved to Files" : "Manused on salvestatud failirakendusse", - "Error while saving attachments" : "Viga manuse salvestamisel", + "Error while saving attachments" : "Viga manuste salvestamisel", "View fewer attachments" : "Näita vähem manuseid", "Choose a folder to store the attachments in" : "Vali kaust, kuhu soovid manuse salvestada", "Save all to Files" : "Salvesta kõik failirakendusse", - "Download Zip" : "Laadi alla zip-fail", + "Download Zip" : "Laadi zip-fail alla", "_View {count} more attachment_::_View {count} more attachments_" : ["Vaata veel {count} manust","Vaata veel {count} manust"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "See kiri on krüptitud PGP abil. Dekrüptimiseks palun paigalda Mailvelope.", "The images have been blocked to protect your privacy." : "Kaitsmaks sinu privaatsust on piltide kuvamine blokeeritud.", @@ -428,19 +473,23 @@ "Always show images from {domain}" : "Alati näita pilte {domain} domeenist", "Message frame" : "Kirja raam", "Quoted text" : "Tsiteeritud tekst", - "Move" : "Liiguta", + "Move" : "Tõsta", "Moving" : "Teisaldan", "Moving thread" : "Teisaldan jutulõnga mujale", "Moving message" : "Teisaldan kirja", "This account cannot connect" : "Selle kasutajakonto ühendamine ei õnnestu", "Connection failed. Please verify your information and try again" : "Ühendamine ei õnnestunud. Palun kontrolli, kas kõik sisestatud teave on õige ja proovi uuesti", + "Change password" : "Muuda salasõna", "Used quota: {quota}% ({limit})" : "Kasutatud kvoot: {quota}% ({limit})", "Used quota: {quota}%" : "Kasutatud kvoot: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Postkasti pole võimalik luua. Ilmselt on nimes keelatud tähemärke. Palun proovi mõnda muud nime.", "Remove account" : "Eemalda konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "E-posti konto {email} ja tema puhverdatud andmed eemaldatakse siit Nextcloudi serverist, kuid mitte sinu e-postiteenuse pakkuja juurest.", "Remove {email}" : "Eemalda fail: „{email}“", + "could not delete account" : "kasutajakonto kustutamine ei õnnestunud", + "Provisioned account is disabled" : "Ettevalmistatud konto on eemaldatud kasutuselt", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Selle konto kasutamiseks palun logi sisse salasõnaga. Praegune sessioon kasutab salasõnata tuvastamist, milleks võib olla SSO, WebAuthn, vms.", + "Delegate account" : "Volita konto kasutamine", "Show only subscribed folders" : "Näita vaid tellitud kaustu", "Add folder" : "Lisa kaust", "Folder name" : "Kausta nimi", @@ -469,7 +518,7 @@ "Clear cache" : "Tühjenda puhver", "Clear locally cached data, in case there are issues with synchronization." : "Kui sünkroniseerimisel tekib vigu, siis kustuta kohalikus seadmes puhverdatud andmed.", "Subscribed" : "Tellitud", - "Sync in background" : "Sünkroniseeri taustal", + "Sync in background" : "Sünkrooni taustal", "Delete all messages" : "Kustuta kõik kirjad", "Outbox" : "Saadetud kirjad", "Translate this message to {language}" : "Tõlgi see e-kiri sihtkeelde: {language}", @@ -483,7 +532,7 @@ "attachment" : "manus", "attached" : "manus on lisatud", "No \"sent\" folder configured. Please pick one in the account settings." : "Saadetud kirjade kaust on seadistamata. Palun see seda kasutajakonto seadistustes.", - "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Sa üritad saata kirja, kus saaja ja koopia välja on hiidpalju aadresse. Kirjasaajate privaatsuse ja mugavuse nimel palun kasuta pimekoopia välja.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Sa üritad saata kirja, kus saaja ja koopia väljal on hiidpalju aadresse. Kirjasaajate privaatsuse ja mugavuse nimel palun kasuta pimekoopia välja.", "Your message has no subject. Do you want to send it anyway?" : "Sinu e-kirjal puudub teema. Kas sa kindlasti soovid seda saata?", "You mentioned an attachment. Did you forget to add it?" : "Sa mainisid, et tahad manuse lisada. Kas see ununes?", "Message discarded" : "Oled kirjast loobunud", @@ -496,7 +545,7 @@ "Retry" : "Proovi uuesti", "Warning sending your message" : "Hoiatus sinu kirja saatmisel", "Send anyway" : "Saada ikkagi", - "Welcome to {productName} Mail" : "Tere tulemast kasutama {productName}i Maili", + "Welcome to {productName} Mail" : "Tere tulemast kasutama {productName}i E-postirakendust", "Start writing a message by clicking below or select an existing message to display its contents" : "Hakka koostama uut kirja klõpsides alljärgnevat või klõpsa mõnel kirjal tema lugemiseks", "Autoresponder off" : "Automaatvastaja on sees", "Autoresponder on" : "Automaatvastaja on väljas", @@ -537,7 +586,7 @@ "Open search modal" : "Ava modaalne otsinguvaade", "Close" : "Sulge", "Search parameters" : "Otsinguparameetrid", - "Search subject" : "Otsi teemat", + "Search subject" : "Otsi teemat/pealkirja", "Body" : "Sisu", "Search body" : "Otsi sisust", "Date" : "Kuupäev", @@ -549,18 +598,18 @@ "Select BCC recipients" : "Vali pimekoopia saajad", "Tags" : "Sildid", "Select tags" : "Vali sildid", - "Marked as" : "Märgutud kui", + "Marked as" : "Märgitud kui", "Has attachments" : "Leidub manuseid", "Mentions me" : "Mainib mind", "Has attachment" : "Manusega", "To me" : "Mulle", "Enable mail body search" : "Otsi kirja sisust", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve on väga võimas keel, mille abil saad koostada filtreid oma postkastide jaoks. Kui sinu e-posti teenusepakkuja seda võimalust toetab, siis saad Sievet kasutada ka siin rakenduses. Sieve on vajalik rakenduse automaatvastaja ja kirjafiltrite jaoks.", - "Enable sieve filter" : "Võta Sieve filter kasutusele", - "Sieve host" : "Sieve server", - "Sieve security" : "Sieve turvalisus", - "Sieve Port" : "Sieve port", - "Sieve credentials" : "Sieve kasutajanimi/salasõna", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve on väga võimas keel, mille abil saad koostada filtreid oma postkastide jaoks. Kui sinu e-posti teenusepakkuja seda võimalust toetab, siis saad Sieve'i kasutada ka siin rakenduses. Sieve on vajalik rakenduse automaatvastaja ja kirjafiltrite jaoks.", + "Enable sieve filter" : "Võta Sieve'i filter kasutusele", + "Sieve host" : "Sieve'i server", + "Sieve security" : "Sieve'i turvalisus", + "Sieve Port" : "Sieve'i port", + "Sieve credentials" : "Sieve'i kasutajanimi/salasõna", "IMAP credentials" : "IMAP-i kasutajanimi/salasõna", "Custom" : "Kohandatud", "Sieve User" : "Sieve'i kasutaja", @@ -568,7 +617,7 @@ "Oh snap!" : "Appikene!", "Save sieve settings" : "Salvesta Sieve'i seadistused", "The syntax seems to be incorrect:" : "Süntaks tundub olema vigane:", - "Save sieve script" : "Salvesta Sieve skript", + "Save sieve script" : "Salvesta Sieve'i skript", "Signature …" : "Allkiri…", "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Sinu e-kirjade allkiri on suurem, kui 2 MB ja see võib mõjutada kirjutamisliidese jõudlust.", "Save signature" : "Salvesta allkiri", @@ -580,7 +629,7 @@ "Delete tag" : "Kustuta silt", "Set tag" : "Lisa silt kirjale", "Unset tag" : "Eemalda silt kirjalt", - "Tag name is a hidden system tag" : "Sildi nimi on peidetud süsteemne pilt", + "Tag name is a hidden system tag" : "Sildi nimi on peidetud süsteemne silt", "Tag already exists" : "Silt on juba olemas", "Tag name cannot be empty" : "Sildi nimi ei saa jääda tühjaks", "An error occurred, unable to create the tag." : "Tekkis viga ning silti ei saanud luua.", @@ -613,6 +662,10 @@ "Reply to sender only" : "Vasta vaid saatjale", "Mark as unfavorite" : "Märgi mittelemmikuks", "Mark as favorite" : "Märgi lemmikuks", + "From:" : "Saatja:", + "To:" : "Saaja:", + "Cc:" : "Koopia:", + "Bcc:" : "Pimekoopia:", "Unsubscribe via link" : "Loobu tellimusest lingi kaudu", "Unsubscribing will stop all messages from the mailing list {sender}" : "Tellimusest loobudes sa enam ei saa kirju postiloendist {sender}", "Send unsubscribe email" : "Saada loobumiskiri", @@ -680,6 +733,7 @@ "contains" : "sisaldab", "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Stringi osaline vaste. Välja väärtus vastab, kui antud väärtus on selles sisalduv. Näiteks vastab „report“ sõnale „port“.", "matches" : "kattub", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Muster, milles kasutatakse metamärke. Sümbol „*“ tähistab mis tahes arvu märke (sh mitte ühtegi), samas kui „?“ tähistab täpselt ühte märki. Näiteks sobib „*report*“ kokku fraasiga „Business report 2024“.", "Enter subject" : "Sisesta teema", "Enter sender" : "Sisesta saatja", "Enter recipient" : "Sisesta saaja", @@ -711,28 +765,56 @@ "Successfully updated config for \"{domain}\"" : "„{domain}“ domeeni seadistuste uuendamine õnnestus", "Error saving config" : "Viga seadistuste salvestamisel", "Saved config for \"{domain}\"" : "„{domain}“ domeeni seadistused on salvestatud", - "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["{count} kasutajakonto ettevalmistamine õnnestus","{count} kasutajakonto ettevalmistamine õnnestus"], + "Could not save provisioning setting" : "Kasutajakonto eelseadistuse salvestamine ei õnnestunud", + "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["{count} kasutajakonto eelseadistamine ja ettevalmistamine õnnestus","{count} kasutajakonto eelseadistamine ja ettevalmistamine õnnestus"], + "There was an error when provisioning accounts." : "Kasutajakontode eelseadistamisel ja ettevalmistamisel tekkis viga.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "„{domain}“ domeeni jaoks ettevalmistatud kontode kustutamine õnnestus", + "Error when deleting and deprovisioning accounts for \"{domain}\"" : "„{domain}“ domeeni jaoks ettevalmistatud kontode kustutamisel tekkis viga", + "Could not save default classification setting" : "Vaikimisi klassifitseerimise seadistuse salvestamine ei õnnestunud", "Mail app" : "E-posti rakendus", "The mail app allows users to read mails on their IMAP accounts." : "Selle rakendusega saavad kasutajad lugeda oma IMAP-i kontode kirju.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Siin on serverikohased seadistused. Kasutajakohased seadistused leiduvad rakenduses (vaata alumist vasakut nurka).", + "Account provisioning" : "Kasutajakontode ettevalmistus", + "A provisioning configuration will provision all accounts with a matching email address." : "Ettevalmistuse seadistuse alusel valmistatakse ette kõik e-posti aadressid, mis tingimustele vastavad", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Kui kasutad metamärgiga (*) määratletud eelseadistamist, siis see seadistus kehtib kõigile, välja arvatud neile, kelle puhul kehib täpselt määratletud domeeni seadistus.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "Ettevalmistamise (eelseadistamise) mehhanism käsitleb konkreetse domeeni seadistuse kõrgema prioriteediga, kui metamärgiga domeeni seadistusi.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Kui leitakse uus sobiv seadistus pärast seda, kui kasutajale on juba eelseadistus tehtud, siis on uuel seadistusel eelisõigus ja kasutajale tehakse uus eelseadistus selle alusel uuesti.", + "There can only be one configuration per domain and only one wildcard domain configuration." : "Võid koostada vaid ühe domeenikohase seadistuse ja ühe metamärk+domeen seadistuse.", + "These settings can be used in conjunction with each other." : "Neid seadistusi saad omavahel kombineerida.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "Kui kavatsed kõikide kasutajate jaoks eelseadistada vaid ühte domeeni, siis kasuta metamärki (*).", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "See seadistus on mõttekas vaid juhul, kui kasutad oma Nextcloudi ja organisatsiooni e-postiserveri jaoks sama kasutajate haldussüsteemi.", + "Provisioning Configurations" : "Ettevalmistamise seadistused", "Add new config" : "Lisa uus konfiguratsioon", + "Provision all accounts" : "Valmista ette kõik kasutajakontod", "Allow additional mail accounts" : "Lisa veel e-postikontosid", "Allow additional Mail accounts from User Settings" : "Luba kasutaja seadistustest täiendavate e-posti kontode kasutamine", "Enable text processing through LLMs" : "Kasuta teksti töötlemist suure keelemudeliga", "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "E-postirakendus oskab töödelda kasutajaandmeid seadistatud keelemudeli abil ning selle teha abitoiminguid, nagu jutulõngade ülevaadete, nutikate vastuste ja ürituste päevakavade koostamine.", "Enable LLM processing" : "Lülita suure keelemudeliga töötlemine sisse", + "Enable classification by importance by default" : "Vaikimisi luba e-kirjade klassifitseerimine olulisuse alusel", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Kasutades masinõpet oskab e-postirakendus kirju klassifitseerida olulisuse alusel. Vaikimisi on see võimalus kasutusel, kuid saad määrata, et ta vaikimisi on lülitatud välja. Sel puhul saavad kasutajad niisuguse võimaluse oma konto jaoks sisse lülitada.", + "Enable classification of important mails by default" : "Vaikimisi luba oluliste e-kirjade klassifitseerimine", "Anti Spam Service" : "Spämmitõrjeteenus", + "You can set up an anti spam service email address here." : "Siin võid seadistada spämmitõrjeteenuse e-posti aadressi.", + "Any email that is marked as spam will be sent to the anti spam service." : "Spämmiks ehk rämpspostiks märgitud e-kiri saadetakse sellele teenusele.", "Gmail integration" : "Lõiming Gmailiga", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail lubab kasutajatel lugeda kirju IMAP-i abil. Turvakaalutlustel toimib see vaid OAuth 2.0 liidestusega või kui Google'i konto kasutab kaheastmelist autentimist ja rakenduse salasõna.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Sa pead Google Cloudi juhtpaneelis registreerima veebirakenduse (Web application) jaoks uue klienditunnuse (Client ID). Korrektse suunamisaadressina kasuta: {url}", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Sa pead Google Cloudi juhtpaneelis registreerima veebirakenduse (Web application) jaoks uue klienditunnuse (Client ID). Korrektse edasisuunamisaadressina kasuta: {url}", "Microsoft integration" : "Lõiming Microsofti e-postiteenusega", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft lubab kasutajatel lugeda kirju IMAP-i abil. Turvakaalutlustel toimib see vaid OAuth 2.0 liidestusega. Selleks palun registreeri oma rakendus teenuses Microsoft Entra ID, varasema nimega Microsoft Azure Active Directory.", - "Redirect URI" : "Ümbersuunamise aadress (URI)", + "Redirect URI" : "Edasusuunamise aadress (URI)", "For more details, please click here to open our documentation." : "Lisateavet leiad meie dokumentatsioonist ↗.", "User Interface Preference Defaults" : "Kasutusliidese eelistuste vaikimisi väärtused", "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Need on kasutajaliidese eelseadistused, mida iga kasutaja saab oma seadistustest muuta", "Message View Mode" : "Kirjade vaate liik", "Show only the selected message" : "Näita vaid valitud kirja", + "Successfully set up anti spam email addresses" : "Spämmitõrjeteenuse e-posti aadressi seadistamine õnnestus.", + "Error saving anti spam email addresses" : "Spämmitõrjeteenuse e-posti aadressi salvestamine ei õnnestunud.", + "Successfully deleted anti spam reporting email" : "Spämmitõrjeteenuse e-posti aadressi kustutamine õnnestus.", + "Error deleting anti spam reporting email" : "Spämmitõrjeteenuse e-posti aadressi kustutamine ei õnnestunud.", + "Anti Spam" : "Spämmi ehk rämsposti tõrjumine", + "Add the email address of your anti spam report service here." : "Lisa oma kasutatava spämmitõrjeteenuse e-posti aadress siia.", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Selle seadistuse kasutamisel saadetakse teavituskiri spämmitõrjeteenusele niipea, kui kasutaja klõpsab valikut „Märgi rämpspostiks“.", "The original message will be attached as a \"message/rfc822\" attachment." : "Algne kiri lisatakse manusena „message/rfc822“ tüüpi failina.", "\"Mark as Spam\" Email Address" : "„Märgitud rämpspostiks“ e-posti aadressid", "\"Mark Not Junk\" Email Address" : "„Pole rämpspost“ e-posti aadressid", @@ -741,7 +823,7 @@ "Could not configure Google integration" : "Google'i e-postiteenuste lõimingu seadistamine ei õnnestunud", "Google integration unlinked" : "Google'i e-postiteenuste lõiming on eemaldatud", "Could not unlink Google integration" : "Google'i e-postiteenuste lõimingu eemaldamine ei õnnestunud", - "Client ID" : "Kliendi tunnus", + "Client ID" : "Klienditunnus", "Client secret" : "Kliendi saladus", "Unlink" : "Eemalda lõiming", "Microsoft integration configured" : "Microsofti e-postiteenuste lõiming on seadistatud", @@ -755,6 +837,7 @@ "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} serveris {host}:{port} ({ssl} krüptimisega)", "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} serveris {host}:{port} ({ssl} krüptimisega)", "Configuration for \"{provisioningDomain}\"" : "Seadistus „{provisioningDomain}“ domeeni jaoks", + "Provisioning domain" : "Domeeni ettevalmistamine", "Email address template" : "E-posti aadressi mall", "IMAP" : "IMAP", "User" : "Kasutaja", @@ -771,6 +854,7 @@ "LDAP attribute for aliases" : "LDAP-i omadused aliaste jaoks", "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Mitmeväärtuseline e-posti aliaste eelkoostamise lahendus. Iga väärtuse kohta luuakse alias. Nexctcloudis leiduvate aliaste puhul, millel pole LDAP-i serveris vastet, kustutakse e-posti teenusest.", "Save Config" : "Salvesta seadistus", + "Unprovision & Delete Config" : "Eemalda ettevalmistatud seadistused ja kustuta nad", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% ja %EMAIL% asendatakse kasutajatunnuse (UID) ja e-posti aadressiga", "With the settings above, the app will create account settings in the following way:" : "Ülalmääratud seadistuste alusel loob rakendus kasutajakonto seadistused alljärgneval viisil:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Lisatud PKCS #12 sertifikaadis peab olema vähemalt üks sertifikaat ning ainult üks privaatvõti.", @@ -778,6 +862,7 @@ "Certificate imported successfully" : "Sertifikaadi importimine õnnestus", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Sertifikaadi importimine ei õnnestunud. Palun kontrolli, et privaatvõti vastab sertifikaadile ja ta ei ole salafraasiga krüptitud.", "Failed to import the certificate" : "Sertifikaadi importimine ei õnnestunud", + "Import S/MIME certificate" : "Impordi S/MIME sertifikaat", "S/MIME certificates" : "S/MIME sertifikaadid", "Certificate name" : "Sertifikaadi nimi", "E-mail address" : "E-posti aadress", @@ -785,7 +870,6 @@ "Delete certificate" : "Kustuta sertifikaat", "No certificate imported yet" : "Ühtegi sertifikaati pole imporditud", "Import certificate" : "Impordi sertifikaat", - "Import S/MIME certificate" : "Impordi S/MIME sertifikaat", "PKCS #12 Certificate" : "PKCS #12 sertifikaat", "PEM Certificate" : "PEM sertifikaat", "Certificate" : "Sertifikaat", @@ -811,7 +895,7 @@ "Choose a text block to insert at the cursor" : "Vali kursori asukohast alates lisatav tekstiplokk", "Insert" : "Lisa", "Insert text block" : "Sisesta tekstiplokk", - "Account connected" : "Konto ühendatud", + "Account connected" : "Kasutajakonto on ühendatud", "You can close this window" : "Võid selle akna sulgeda.", "Connect your mail account" : "Ühenda oma e-posti kontoga", "To add a mail account, please contact your administrator." : "Oma e-posti konto lisamiseks palun võta ühendust oma peakasutajaga.", @@ -847,10 +931,10 @@ "Could not load the desired message" : "Soovitud kirja laadimine ei õnnestunud", "Could not load the message" : "Kirja laadimine ei õnnestunud", "Error loading message" : "Viga kirja laadimisel", - "Determine importance using machine learning" : "Määra olulisus masinõppe abil", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Kirjad märgitakse automaatselt oluliseks selle alusel, milliste kirjadega sa suhestud või milliseid sa oluliseks märgid. Alguses võib olla vaja olulisuse taset käsitsi muuta, et süsteemi õpetada, kuid aja jooksul muutub see üha paremaks", - "Mark all messages of this folder as read" : "Märgi kõik selle kausta kirjad loetuks", - "Last 7 days" : "Viimase 7 päeva jooksul", - "From me" : "Minult" + "Add share link from Files" : "Lisa jagamislink failirakendusest", + "Choose a file to add as attachment" : "Vali fail, mida manustada", + "Choose a file to share as a link" : "Vali lingiga jagatav fail", + "Delegated access to {userId}" : "Sa volitasid ligipääsu kasutajale {userId}", + "Revoked access for {userId}" : "Kasutaja {userId} volitus on eemaldatud" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/eu.js b/l10n/eu.js index b4ef24fb2d..fca4aca094 100644 --- a/l10n/eu.js +++ b/l10n/eu.js @@ -79,7 +79,6 @@ OC.L10N.register( "SMTP Port" : "SMTP ataka", "SMTP User" : "SMTP erabiltzailea", "SMTP Password" : "SMTP pasahitza", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google-ko kontuak aplikazio honekin funtziona dezan, Google-n bi faktoreko autentifikazioa gaitu eta aplikazioaren pasahitza sortu behar duzu.", "Account settings" : "Kontuaren ezarpenak", "Aliases" : "Aliasak", "Alias to S/MIME certificate mapping" : "S/MIME ziurtagiriaren esleipenerako aliasa", @@ -98,13 +97,13 @@ OC.L10N.register( "Sieve script editor" : "Sieve script editorea", "Mail server" : "Posta-zerbitzaria", "Sieve server" : "Sieve zerbitzaria", + "Email address" : "Helbide elektronikoa", "Update alias" : "Eguneratu aliasa", "Rename alias" : "Aliasa berrizendatu", "Show update alias form" : "Erakutsi alias inprimakiaren eguneratzea", "Delete alias" : "Ezabatu aliasa", "Go back" : "Egin atzera", "Change name" : "Aldatu izena", - "Email address" : "Helbide elektronikoa", "Add alias" : "Gehitu aliasa", "Create alias" : "Sortu aliasa", "Cancel" : "Utzi", @@ -122,6 +121,7 @@ OC.L10N.register( "Sorting" : "Antolaketa", "Newest first" : "Berrienak lehenengo ", "Oldest first" : "Zaharrenak lehenengo", + "Ok" : "Ados", "Shared with me" : "Nirekin partekatuta", "Privacy" : "Pribatutasuna", "Security" : "Segurtasuna", @@ -140,7 +140,6 @@ OC.L10N.register( "Send" : "Bidali", "Refresh" : "Freskatu", "About" : "Honi buruz", - "Ok" : "Ados", "No certificate" : "Ziurtagiririk ez", "Certificate updated" : "Ziurtagiria eguneratu da", "Could not update certificate" : "Ezin izan da ziurtagiria eguneratu", @@ -179,7 +178,6 @@ OC.L10N.register( "Disable formatting" : "Desgaitu formateatzea", "Upload attachment" : "Igo eranskina", "Add attachment from Files" : "Gehitu eranskina Fitxategiak-etik", - "Add share link from Files" : "Gehitu partekatze esteka Fitxategiak-etik", "Smart picker" : "Hautatzaile adimenduna", "Request a read receipt" : "Eskatu irakurriagiria", "Sign message with S/MIME" : "Sinatu mezua S/MIME-rekin", @@ -191,15 +189,14 @@ OC.L10N.register( "Monday morning" : "Astelehen goizean", "Custom date and time" : "Data eta ordu pertsonalizatuak", "Enter a date" : "Sartu data bat", - "Choose" : "Aukeratu", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Eranskinek baimendutako {size} -ko eranskin tamaina gainditzen du. Partekatu fitxategia esteka bidez horren ordez.","Eranskinek baimendutako {size} -ko eranskin tamaina gainditzen du. Partekatu fitxategia esteka bidez horren ordez."], - "Choose a file to add as attachment" : "Aukeratu fitxategia eranskin gisa gehitzeko", - "Choose a file to share as a link" : "Aukeratu fitxategi bat esteka bezala partekatzeko", + "Choose a file" : "Hautatu fitxategi bat", "_{count} attachment_::_{count} attachments_" : ["Eranskin {count}","{count} eranskin"], "Untitled message" : "Izenik gabeko mezua", "Expand composer" : "Hedatu egilea", "Close composer" : "Itxi egilea", "Confirm" : "Berretsi", + "Revoke" : "Ezeztatu", "Tag: {name} deleted" : "Etiketa: {name} ezabatuta", "An error occurred, unable to delete the tag." : "Errore bat gertatu da, ezin izan da etiketa ezabatu.", "The tag will be deleted from all messages." : "Mezu guztietako etiketak ezabatuko dira.", @@ -207,6 +204,7 @@ OC.L10N.register( "Rich text" : "Testu aberastua", "No messages in this folder" : "Mezurik ez karpeta honetan", "No messages" : "Mezurik ez", + "Choose" : "Aukeratu", "Blind copy recipients only" : "Kopia itsuen jasotzaileek besterik ez", "No subject" : "Gairik ez", "Later today – {timeLocale}" : "Beranduago gaur – {timeLocale}", @@ -238,14 +236,14 @@ OC.L10N.register( "Move thread" : "Mugitu haria", "Archive thread" : "Artxibatu haria", "Archive message" : "Artxibatu mezua", - "Delete thread" : "Ezabatu haria", - "Delete message" : "Mezua ezabatzen", "More actions" : "Ekintza gehiago", "Back" : "Atzera", "Set custom snooze" : "Ezarri atzerapen pertsonalizatua", "Edit as new message" : "Aldatu mezu berri gisa", "Create task" : "Sortu zeregina", "Download message" : "Deskargatu mezua", + "Delete thread" : "Ezabatu haria", + "Delete message" : "Mezua ezabatzen", "Load more" : "Kargatu gehiago", "_Mark {number} read_::_Mark {number} read_" : [" 100% match \nMarkatu {number} irakurrita bezala","Markatu {number} irakurrita bezala"], "_Mark {number} unread_::_Mark {number} unread_" : ["Markatu {number} irakurri gabe bezala","Markatu {number} irakurri gabe bezala"], @@ -266,6 +264,7 @@ OC.L10N.register( "Event created" : "Sortu da gertaera", "Could not create event" : "Ezin izan da gertaera sortu", "Create event" : "Sortu gertaera", + "Title" : "Izenburua", "All day" : "Egun osoa", "Attendees" : "Partaideak", "Select calendar" : "Hautatu egutegia", @@ -318,7 +317,9 @@ OC.L10N.register( "Could not snooze message" : "Ezin izan da mezua geroko utzi", "Message was unsnoozed" : "Mezuari geroko uztea kendu zaio", "Could not unsnooze message" : "Ezin izan zaio kendu atzerapena mezuari", + "Direct link copied to clipboard" : "Esteka zuzena arbelera kopiatuta", "Forward" : "Birbidali", + "Link copied" : "Esteka kopiatu da", "Move message" : "Mugitu mezua", "Translate" : "Itzuli", "Forward message as attachment" : "Birbidali mezua eranskin gisa", @@ -355,6 +356,7 @@ OC.L10N.register( "Moving" : "Mugitzen", "Moving thread" : "Haria mugitzen", "Moving message" : "Mezua mugitzen", + "Change password" : "Pasahitza aldatu", "Remove account" : "Kendu kontua", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} kontua eta cachean gordetako posta datuak Nextcloudetik ezabatu egingo dira, baina ez zure posta hornitzailetik.", "Remove {email}" : "Kendu {email}", @@ -508,6 +510,8 @@ OC.L10N.register( "Reply to sender only" : "Erantzun bakarrik igorleari", "Mark as unfavorite" : "Markatu ez gogoko gisa", "Mark as favorite" : "Markatu gogoko gisa", + "From:" : "Noiztik:", + "To:" : "Noiz arte:", "Unsubscribe via link" : "Harpidetza kendu esteka bidez", "Unsubscribing will stop all messages from the mailing list {sender}" : "Harpidetza kentzeak {sender} posta-zerrendako mezu guztiak geldituko ditu", "Send unsubscribe email" : "Bidali harpidetza kentzeko mezu elektronikoa", @@ -655,6 +659,7 @@ OC.L10N.register( "Certificate imported successfully" : "Ziurtagiria ongi inportatu da", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Ezin izan da ziurtagiria inportatu. Mesedez, ziurtatu gako pribatua ziurtagiriarekin bat datorrela eta ez dagoela pasaesaldi batek babestuta.", "Failed to import the certificate" : "Ezin izan da ziurtagiria inportatu", + "Import S/MIME certificate" : "Inportatu S/MIME ziurtagiria", "S/MIME certificates" : "S/MIME ziurtagiriak", "Certificate name" : "Ziurtagiriaren izena", "E-mail address" : "E-mail helbidea", @@ -662,7 +667,6 @@ OC.L10N.register( "Delete certificate" : "Ezabatu ziurtagiria", "No certificate imported yet" : "Oraindik ez da inportatu ziurtagiririk", "Import certificate" : "Inportatu ziurtagiria", - "Import S/MIME certificate" : "Inportatu S/MIME ziurtagiria", "PKCS #12 Certificate" : "PKCS #12 Ziurtagiria", "PEM Certificate" : "PEM Ziurtagiria", "Certificate" : "Ziurtagiria", @@ -704,10 +708,8 @@ OC.L10N.register( "Could not load the desired message" : "Ezin izan da kargatu nahi zen mezu hori", "Could not load the message" : "Ezin izan da mezua kargatu", "Error loading message" : "Errorea mezua kargatzerakoan", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Mezuak automatikoki markatuko dira garrantzitsu bezala kontuan izanda zein mezurekin aritu zaren interakzioan edo zein markatu dituzun garratzitsu gisa. Hasieran garrantzia eskuz aldatu beharko duzu sistemari irakasteko, baina denborarekin hobetuko du.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Erantzuteko eskatuz bidali zenituen emailak, baina egun batzuen ondoren erantzunik jasotzen ez dutenak hemen erakutsiko dira.", - "Mark all messages of this folder as read" : "Markatu karpeta honetako mezu guztiak irakurrita bezala", - "Last 7 days" : "Azken 7 egunetan", - "From me" : "Nigandik" + "Add share link from Files" : "Gehitu partekatze esteka Fitxategiak-etik", + "Choose a file to add as attachment" : "Aukeratu fitxategia eranskin gisa gehitzeko", + "Choose a file to share as a link" : "Aukeratu fitxategi bat esteka bezala partekatzeko" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/eu.json b/l10n/eu.json index 4254cf0747..251139ae08 100644 --- a/l10n/eu.json +++ b/l10n/eu.json @@ -77,7 +77,6 @@ "SMTP Port" : "SMTP ataka", "SMTP User" : "SMTP erabiltzailea", "SMTP Password" : "SMTP pasahitza", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google-ko kontuak aplikazio honekin funtziona dezan, Google-n bi faktoreko autentifikazioa gaitu eta aplikazioaren pasahitza sortu behar duzu.", "Account settings" : "Kontuaren ezarpenak", "Aliases" : "Aliasak", "Alias to S/MIME certificate mapping" : "S/MIME ziurtagiriaren esleipenerako aliasa", @@ -96,13 +95,13 @@ "Sieve script editor" : "Sieve script editorea", "Mail server" : "Posta-zerbitzaria", "Sieve server" : "Sieve zerbitzaria", + "Email address" : "Helbide elektronikoa", "Update alias" : "Eguneratu aliasa", "Rename alias" : "Aliasa berrizendatu", "Show update alias form" : "Erakutsi alias inprimakiaren eguneratzea", "Delete alias" : "Ezabatu aliasa", "Go back" : "Egin atzera", "Change name" : "Aldatu izena", - "Email address" : "Helbide elektronikoa", "Add alias" : "Gehitu aliasa", "Create alias" : "Sortu aliasa", "Cancel" : "Utzi", @@ -120,6 +119,7 @@ "Sorting" : "Antolaketa", "Newest first" : "Berrienak lehenengo ", "Oldest first" : "Zaharrenak lehenengo", + "Ok" : "Ados", "Shared with me" : "Nirekin partekatuta", "Privacy" : "Pribatutasuna", "Security" : "Segurtasuna", @@ -138,7 +138,6 @@ "Send" : "Bidali", "Refresh" : "Freskatu", "About" : "Honi buruz", - "Ok" : "Ados", "No certificate" : "Ziurtagiririk ez", "Certificate updated" : "Ziurtagiria eguneratu da", "Could not update certificate" : "Ezin izan da ziurtagiria eguneratu", @@ -177,7 +176,6 @@ "Disable formatting" : "Desgaitu formateatzea", "Upload attachment" : "Igo eranskina", "Add attachment from Files" : "Gehitu eranskina Fitxategiak-etik", - "Add share link from Files" : "Gehitu partekatze esteka Fitxategiak-etik", "Smart picker" : "Hautatzaile adimenduna", "Request a read receipt" : "Eskatu irakurriagiria", "Sign message with S/MIME" : "Sinatu mezua S/MIME-rekin", @@ -189,15 +187,14 @@ "Monday morning" : "Astelehen goizean", "Custom date and time" : "Data eta ordu pertsonalizatuak", "Enter a date" : "Sartu data bat", - "Choose" : "Aukeratu", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Eranskinek baimendutako {size} -ko eranskin tamaina gainditzen du. Partekatu fitxategia esteka bidez horren ordez.","Eranskinek baimendutako {size} -ko eranskin tamaina gainditzen du. Partekatu fitxategia esteka bidez horren ordez."], - "Choose a file to add as attachment" : "Aukeratu fitxategia eranskin gisa gehitzeko", - "Choose a file to share as a link" : "Aukeratu fitxategi bat esteka bezala partekatzeko", + "Choose a file" : "Hautatu fitxategi bat", "_{count} attachment_::_{count} attachments_" : ["Eranskin {count}","{count} eranskin"], "Untitled message" : "Izenik gabeko mezua", "Expand composer" : "Hedatu egilea", "Close composer" : "Itxi egilea", "Confirm" : "Berretsi", + "Revoke" : "Ezeztatu", "Tag: {name} deleted" : "Etiketa: {name} ezabatuta", "An error occurred, unable to delete the tag." : "Errore bat gertatu da, ezin izan da etiketa ezabatu.", "The tag will be deleted from all messages." : "Mezu guztietako etiketak ezabatuko dira.", @@ -205,6 +202,7 @@ "Rich text" : "Testu aberastua", "No messages in this folder" : "Mezurik ez karpeta honetan", "No messages" : "Mezurik ez", + "Choose" : "Aukeratu", "Blind copy recipients only" : "Kopia itsuen jasotzaileek besterik ez", "No subject" : "Gairik ez", "Later today – {timeLocale}" : "Beranduago gaur – {timeLocale}", @@ -236,14 +234,14 @@ "Move thread" : "Mugitu haria", "Archive thread" : "Artxibatu haria", "Archive message" : "Artxibatu mezua", - "Delete thread" : "Ezabatu haria", - "Delete message" : "Mezua ezabatzen", "More actions" : "Ekintza gehiago", "Back" : "Atzera", "Set custom snooze" : "Ezarri atzerapen pertsonalizatua", "Edit as new message" : "Aldatu mezu berri gisa", "Create task" : "Sortu zeregina", "Download message" : "Deskargatu mezua", + "Delete thread" : "Ezabatu haria", + "Delete message" : "Mezua ezabatzen", "Load more" : "Kargatu gehiago", "_Mark {number} read_::_Mark {number} read_" : [" 100% match \nMarkatu {number} irakurrita bezala","Markatu {number} irakurrita bezala"], "_Mark {number} unread_::_Mark {number} unread_" : ["Markatu {number} irakurri gabe bezala","Markatu {number} irakurri gabe bezala"], @@ -264,6 +262,7 @@ "Event created" : "Sortu da gertaera", "Could not create event" : "Ezin izan da gertaera sortu", "Create event" : "Sortu gertaera", + "Title" : "Izenburua", "All day" : "Egun osoa", "Attendees" : "Partaideak", "Select calendar" : "Hautatu egutegia", @@ -316,7 +315,9 @@ "Could not snooze message" : "Ezin izan da mezua geroko utzi", "Message was unsnoozed" : "Mezuari geroko uztea kendu zaio", "Could not unsnooze message" : "Ezin izan zaio kendu atzerapena mezuari", + "Direct link copied to clipboard" : "Esteka zuzena arbelera kopiatuta", "Forward" : "Birbidali", + "Link copied" : "Esteka kopiatu da", "Move message" : "Mugitu mezua", "Translate" : "Itzuli", "Forward message as attachment" : "Birbidali mezua eranskin gisa", @@ -353,6 +354,7 @@ "Moving" : "Mugitzen", "Moving thread" : "Haria mugitzen", "Moving message" : "Mezua mugitzen", + "Change password" : "Pasahitza aldatu", "Remove account" : "Kendu kontua", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} kontua eta cachean gordetako posta datuak Nextcloudetik ezabatu egingo dira, baina ez zure posta hornitzailetik.", "Remove {email}" : "Kendu {email}", @@ -506,6 +508,8 @@ "Reply to sender only" : "Erantzun bakarrik igorleari", "Mark as unfavorite" : "Markatu ez gogoko gisa", "Mark as favorite" : "Markatu gogoko gisa", + "From:" : "Noiztik:", + "To:" : "Noiz arte:", "Unsubscribe via link" : "Harpidetza kendu esteka bidez", "Unsubscribing will stop all messages from the mailing list {sender}" : "Harpidetza kentzeak {sender} posta-zerrendako mezu guztiak geldituko ditu", "Send unsubscribe email" : "Bidali harpidetza kentzeko mezu elektronikoa", @@ -653,6 +657,7 @@ "Certificate imported successfully" : "Ziurtagiria ongi inportatu da", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Ezin izan da ziurtagiria inportatu. Mesedez, ziurtatu gako pribatua ziurtagiriarekin bat datorrela eta ez dagoela pasaesaldi batek babestuta.", "Failed to import the certificate" : "Ezin izan da ziurtagiria inportatu", + "Import S/MIME certificate" : "Inportatu S/MIME ziurtagiria", "S/MIME certificates" : "S/MIME ziurtagiriak", "Certificate name" : "Ziurtagiriaren izena", "E-mail address" : "E-mail helbidea", @@ -660,7 +665,6 @@ "Delete certificate" : "Ezabatu ziurtagiria", "No certificate imported yet" : "Oraindik ez da inportatu ziurtagiririk", "Import certificate" : "Inportatu ziurtagiria", - "Import S/MIME certificate" : "Inportatu S/MIME ziurtagiria", "PKCS #12 Certificate" : "PKCS #12 Ziurtagiria", "PEM Certificate" : "PEM Ziurtagiria", "Certificate" : "Ziurtagiria", @@ -702,10 +706,8 @@ "Could not load the desired message" : "Ezin izan da kargatu nahi zen mezu hori", "Could not load the message" : "Ezin izan da mezua kargatu", "Error loading message" : "Errorea mezua kargatzerakoan", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Mezuak automatikoki markatuko dira garrantzitsu bezala kontuan izanda zein mezurekin aritu zaren interakzioan edo zein markatu dituzun garratzitsu gisa. Hasieran garrantzia eskuz aldatu beharko duzu sistemari irakasteko, baina denborarekin hobetuko du.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Erantzuteko eskatuz bidali zenituen emailak, baina egun batzuen ondoren erantzunik jasotzen ez dutenak hemen erakutsiko dira.", - "Mark all messages of this folder as read" : "Markatu karpeta honetako mezu guztiak irakurrita bezala", - "Last 7 days" : "Azken 7 egunetan", - "From me" : "Nigandik" + "Add share link from Files" : "Gehitu partekatze esteka Fitxategiak-etik", + "Choose a file to add as attachment" : "Aukeratu fitxategia eranskin gisa gehitzeko", + "Choose a file to share as a link" : "Aukeratu fitxategi bat esteka bezala partekatzeko" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/fa.js b/l10n/fa.js index f646699474..e5a3952e9e 100644 --- a/l10n/fa.js +++ b/l10n/fa.js @@ -1,220 +1,334 @@ OC.L10N.register( "mail", { - "Embedded message %s" : "پیام درج شده%s", - "Important mail" : "ایمیل‌های مهم", - "No message found yet" : "No message found yet", - "Set up an account" : "Set up an account", - "Unread mail" : "Unread mail", + "Embedded message %s" : "پیام جاسازی‌شده %s", + "Important mail" : "ایمیل مهم", + "No message found yet" : "هنوز پیامی یافت نشده", + "Set up an account" : "ایجاد حساب کاربری", + "Unread mail" : "ایمیل خوانده‌نشده", "Important" : "مهم", - "Work" : "کار", + "Work" : "محل کار", "Personal" : "شخصی", - "To Do" : "To Do", - "Later" : "بعدا", + "To Do" : "انجام‌دادنی", + "Later" : "بعداً", "Mail" : "ایمیل", - "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails.", + "You are reaching your mailbox quota limit for {account_email}" : "به حد مجاز صندوق پستی خود برای {account_email} نزدیک می‌شوید", + "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "شما در حال حاضر از {percentage} فضای ذخیره‌سازی صندوق پستی خود استفاده می‌کنید. لطفاً با حذف ایمیل‌های غیرضروری فضا خالی کنید.", + "{account_email} has been delegated to you" : "{account_email} به شما واگذار شده است", + "{user} delegated {account} to you" : "{user} حساب {account} را به شما واگذار کرد", + "{account_email} is no longer delegated to you" : "{account_email} دیگر به شما واگذار نشده است", + "{user} revoked delegation for {account}" : "{user} واگذاری حساب {account} را لغو کرد", + "Mail Application" : "برنامه ایمیل", "Mails" : "ایمیل‌ها", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "ایمیل فرستنده: %1$s در دفترچه آدرس نیست، اما نام فرستنده: %2$s در دفترچه آدرس با ایمیل زیر موجود است: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "ایمیل فرستنده: %1$s در دفترچه آدرس نیست، اما نام فرستنده: %2$s در دفترچه آدرس با ایمیل‌های زیر موجود است: %3$s", + "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "فرستنده از یک ایمیل سفارشی استفاده می‌کند: %1$s به جای ایمیل فرستنده: %2$s", + "Sent date is in the future" : "تاریخ ارسال در آینده است", + "Mail server marked this message as phishing attempt" : "سرور ایمیل این پیام را به عنوان تلاش فیشینگ علامت‌گذاری کرده است", + "Some addresses in this message are not matching the link text" : "برخی از آدرس‌های این پیام با متن لینک مطابقت ندارند", + "Reply-To email: %1$s is different from sender email: %2$s" : "ایمیل پاسخ: %1$s با ایمیل فرستنده: %2$s متفاوت است", + "Mail connection performance" : "عملکرد اتصال ایمیل", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "سرویس ایمیل کند شناسایی شد (%1$s) تلاش برای اتصال به چندین حساب به طور میانگین %2$s ثانیه برای هر حساب طول کشید", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "سرویس ایمیل کند شناسایی شد (%1$s) تلاش برای انجام عملیات لیست صندوق پستی روی چندین حساب به طور میانگین %2$s ثانیه برای هر حساب طول کشید", + "Mail Transport configuration" : "تنظیمات انتقال ایمیل", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "تنظیم app.mail.transport روی smtp تنظیم نشده است. این پیکربندی می‌تواند با اقدامات امنیتی مدرن ایمیل مانند SPF و DKIM مشکل ایجاد کند، زیرا ایمیل‌ها مستقیماً از سرور وب ارسال می‌شوند که اغلب به درستی برای این منظور پیکربندی نشده است. برای رفع این مشکل، پشتیبانی از انتقال ایمیل را متوقف کرده‌ایم. لطفاً app.mail.transport را از پیکربندی خود حذف کنید تا از انتقال SMTP استفاده کنید و این پیام را پنهان کنید. برای اطمینان از تحویل ایمیل، راه‌اندازی SMTP به درستی ضروری است.", + "Mail account parameters, aliases and preferences" : "پارامترهای حساب ایمیل، نام‌های مستعار و تنظیمات برگزیده", "💌 A mail app for Nextcloud" : "یک برنامه نامه پستی برای Nextcloud", - "Your session has expired. The page will be reloaded." : "Your session has expired. The page will be reloaded.", - "Drafts are saved in:" : "Drafts are saved in:", - "Sent messages are saved in:" : "Sent messages are saved in:", - "Deleted messages are moved in:" : "Deleted messages are moved in:", - "Archived messages are moved in:" : "Archived messages are moved in:", - "Snoozed messages are moved in:" : "Snoozed messages are moved in:", - "Junk messages are saved in:" : "Junk messages are saved in:", - "Connecting" : "Connecting", - "Reconnect Google account" : "Reconnect Google account", - "Sign in with Google" : "Sign in with Google", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 یک برنامه ایمیل برای Nextcloud**\n\n- **🚀 یکپارچگی با دیگر برنامه‌های Nextcloud!** در حال حاضر مخاطبین، تقویم و پرونده‌ها – موارد بیشتری در راه است.\n- **📥 چندین حساب ایمیل!** حساب شخصی و شرکتی؟ مشکلی نیست، به‌علاوه یک صندوق ورودی یکپارچه و دلپذیر. هر حساب IMAP را متصل کنید.\n- **🔒 ارسال و دریافت ایمیل‌های رمزنگاری‌شده!** با استفاده از افزونه عالی مرورگر [Mailvelope](https://mailvelope.com).\n- **🙈 چرخ را از نو اختراع نمی‌کنیم!** بر پایه کتابخانه‌های فوق‌العاده [Horde](https://www.horde.org).\n- **📬 می‌خواهید سرور ایمیل خودتان را میزبانی کنید؟** لازم نیست این را دوباره پیاده‌سازی کنیم، چون می‌توانید [Mail-in-a-Box](https://mailinabox.email) را راه‌اندازی کنید!\n\n## رتبه‌بندی هوش مصنوعی اخلاقی\n\n### صندوق ورودی اولویت‌دار\n\nمثبت:\n* نرم‌افزار آموزش و استنتاج این مدل متن‌باز است.\n* مدل به‌صورت محلی و بر پایه داده‌های خودِ کاربر ساخته و آموزش داده می‌شود.\n* داده‌های آموزشی برای کاربر در دسترس است و امکان بررسی یا اصلاح سوگیری یا بهینه‌سازی کارایی و مصرف CO2 را فراهم می‌کند.\n\n### خلاصه‌های رشته‌ها (انتخابی)\n\n**رتبه:** 🟢/🟡/🟠/🔴\n\nرتبه به بک‌اند پردازش متن نصب‌شده بستگی دارد. برای جزئیات [مرور کلی رتبه‌بندی](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) را ببینید.\n\nدرباره رتبه‌بندی هوش مصنوعی اخلاقی Nextcloud بیشتر در [وبلاگ ما](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) بدانید.", + "Your session has expired. The page will be reloaded." : "نشست شما منقضی شده است. صفحه دوباره بارگذاری خواهد شد.", + "Drafts are saved in:" : "پیش‌نویس‌ها در اینجا ذخیره می‌شوند:", + "Sent messages are saved in:" : "پیام‌های ارسالی در اینجا ذخیره می‌شوند:", + "Deleted messages are moved in:" : "پیام‌های حذف‌شده به اینجا منتقل می‌شوند:", + "Archived messages are moved in:" : "پیام‌های بایگانی‌شده به اینجا منتقل می‌شوند:", + "Snoozed messages are moved in:" : "پیام‌های به‌تعویق‌افتاده به اینجا منتقل می‌شوند:", + "Junk messages are saved in:" : "پیام‌های ناخواسته در اینجا ذخیره می‌شوند:", + "Connecting" : "در حال اتصال", + "Reconnect Google account" : "اتصال مجدد حساب گوگل", + "Sign in with Google" : "ورود با گوگل", + "Reconnect Microsoft account" : "اتصال مجدد حساب مایکروسافت", + "Sign in with Microsoft" : "ورود با مایکروسافت", "Save" : "ذخیره", "Connect" : "اتصال", - "Looking up configuration" : "Looking up configuration", - "Checking mail host connectivity" : "Checking mail host connectivity", - "Configuration discovery failed. Please use the manual settings" : "Configuration discovery failed. Please use the manual settings", - "Password required" : "رمز عبور لازم است", - "Testing authentication" : "Testing authentication", - "Awaiting user consent" : "Awaiting user consent", - "Account created. Please follow the pop-up instructions to link your Google account" : "Account created. Please follow the pop-up instructions to link your Google account", - "Loading account" : "Loading account", - "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "Account updated. Please follow the pop-up instructions to reconnect your Google account", - "Account updated" : "Account updated", - "IMAP server is not reachable" : "IMAP server is not reachable", - "SMTP server is not reachable" : "SMTP server is not reachable", - "IMAP username or password is wrong" : "IMAP username or password is wrong", - "SMTP username or password is wrong" : "SMTP username or password is wrong", - "IMAP connection failed" : "IMAP connection failed", - "SMTP connection failed" : "SMTP connection failed", - "Authorization pop-up closed" : "Authorization pop-up closed", - "Configuration discovery temporarily not available. Please try again later." : "Configuration discovery temporarily not available. Please try again later.", - "There was an error while setting up your account" : "There was an error while setting up your account", + "Looking up configuration" : "در حال جستجوی پیکربندی", + "Checking mail host connectivity" : "در حال بررسی اتصال میزبان ایمیل", + "Configuration discovery failed. Please use the manual settings" : "شناسایی پیکربندی انجام نشد. لطفاً از تنظیمات دستی استفاده کنید", + "Password required" : "رمز عبور الزامی است", + "Testing authentication" : "در حال بررسی احراز هویت", + "Awaiting user consent" : "در انتظار تأیید کاربر", + "Account created. Please follow the pop-up instructions to link your Google account" : "حساب ایجاد شد. لطفاً برای اتصال حساب Google خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "حساب ایجاد شد. لطفاً برای اتصال حساب Microsoft خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Loading account" : "در حال بارگذاری حساب", + "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "حساب به‌روزرسانی شد. لطفاً برای اتصال مجدد حساب Google خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "حساب به‌روزرسانی شد. لطفاً برای اتصال مجدد حساب Microsoft خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account updated" : "حساب به‌روزرسانی شد", + "IMAP server is not reachable" : "سرور IMAP قابل دسترسی نیست", + "SMTP server is not reachable" : "سرور SMTP قابل دسترسی نیست", + "IMAP username or password is wrong" : "نام کاربری یا رمز عبور IMAP اشتباه است", + "SMTP username or password is wrong" : "نام کاربری یا رمز عبور SMTP اشتباه است", + "IMAP server denied authentication" : "سرور IMAP احراز هویت را رد کرد", + "SMTP server denied authentication" : "سرور SMTP احراز هویت را رد کرد", + "IMAP authentication error" : "خطای احراز هویت IMAP", + "SMTP authentication error" : "خطای احراز هویت SMTP", + "IMAP connection failed" : "اتصال IMAP ناموفق بود", + "SMTP connection failed" : "اتصال SMTP ناموفق بود", + "Authorization pop-up closed" : "پنجره مجوز بسته شد", + "Configuration discovery temporarily not available. Please try again later." : "شناسایی پیکربندی موقتاً در دسترس نیست. لطفاً بعداً دوباره تلاش کنید", + "There was an error while setting up your account" : "هنگام تنظیم حساب شما خطایی رخ داد", "Auto" : "خودکار", "Name" : "نام", - "Mail address" : "Mail address", + "Mail address" : "آدرس ایمیل", "name@example.org" : "name@example.org", - "Please enter an email of the format name@example.com" : "Please enter an email of the format name@example.com", - "Password" : "گذرواژه", - "Manual" : "کتابچه راهنمای", + "Please enter an email of the format name@example.com" : "لطفاً یک ایمیل با فرمت name@example.com وارد کنید", + "Password" : "رمز عبور", + "Enable mark as important classification" : "فعال‌سازی دسته‌بندی «علامت‌گذاری به عنوان مهم»", + "Manual" : "دستی", "IMAP Settings" : "تنظیمات IMAP", "IMAP Host" : "میزبان IMAP", "IMAP Security" : "امنیت IMAP", "None" : "هیچ‌کدام", "SSL/TLS" : "SSL/TLS", - "STARTTLS" : "شروع TLS", - "IMAP Port" : "پرت IMAP", + "STARTTLS" : "STARTTLS", + "IMAP Port" : "پورت IMAP", "IMAP User" : "کاربر IMAP", - "IMAP Password" : "گذرواژه IMAP", + "IMAP Password" : "رمز عبور IMAP", "SMTP Settings" : "تنظیمات SMTP", "SMTP Host" : "میزبان SMTP", "SMTP Security" : "امنیت SMTP", - "SMTP Port" : "درگاه SMTP", + "SMTP Port" : "پورت SMTP", "SMTP User" : "کاربر SMTP", "SMTP Password" : "رمز عبور SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google نیاز به احراز هویت OAuth دارد. اگر مدیر نکست‌کلود شما OAuth گوگل را پیکربندی نکرده است، می‌توانید به جای آن از رمز عبور برنامه Google استفاده کنید", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft نیاز به احراز هویت OAuth دارد. از مدیر نکست‌کلود خود بخواهید OAuth مایکروسافت را در تنظیمات مدیریت پیکربندی کند", "Account settings" : "تنظیمات حساب", - "Aliases" : "Aliases", - "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", + "Aliases" : "نام‌های مستعار", + "Alias to S/MIME certificate mapping" : "نگاشت نام مستعار به گواهی S/MIME", "Signature" : "امضا", - "A signature is added to the text of new messages and replies." : "یک امضا به متن پیامها و پاسخ های جدید اضافه می شود.", - "Writing mode" : "حالت نوشتن", - "Preferred writing mode for new messages and replies." : "حالت نوشتن برای پیام ها و پاسخ های جدید ترجیح داده شده است.", - "Default folders" : "Default folders", - "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages.", - "Automatic trash deletion" : "Automatic trash deletion", - "Days after which messages in Trash will automatically be deleted:" : "Days after which messages in Trash will automatically be deleted:", - "Autoresponder" : "Autoresponder", - "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days.", + "A signature is added to the text of new messages and replies." : "امضا به متن پیام‌های جدید و پاسخ‌ها اضافه می‌شود.", + "Writing mode" : "حالت نوشتار", + "Preferred writing mode for new messages and replies." : "حالت نوشتار ترجیحی برای پیام‌های جدید و پاسخ‌ها", + "Default folders" : "پوشه‌های پیش‌فرض", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "پوشه‌های مورد استفاده برای پیش‌نویس‌ها، پیام‌های ارسالی، پیام‌های حذف‌شده، پیام‌های بایگانی‌شده و پیام‌های ناخواسته", + "Automatic trash deletion" : "حذف خودکار زباله‌ها", + "Days after which messages in Trash will automatically be deleted:" : "تعداد روزهایی که پس از آن پیام‌های موجود در زباله‌دان به‌طور خودکار حذف می‌شوند:", + "Autoresponder" : "پاسخ‌دهنده خودکار", + "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "پاسخ خودکار به پیام‌های دریافتی. اگر کسی چندین پیام برای شما ارسال کند، این پاسخ خودکار حداکثر هر ۴ روز یک بار ارسال می‌شود.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "پاسخ‌دهنده خودکار از Sieve استفاده می‌کند، یک زبان اسکریپت‌نویسی که توسط بسیاری از ارائه‌دهندگان ایمیل پشتیبانی می‌شود. اگر مطمئن نیستید که ارائه‌دهنده شما از آن پشتیبانی می‌کند یا خیر، با ارائه‌دهنده خود بررسی کنید. اگر Sieve در دسترس است، روی دکمه کلیک کنید تا به تنظیمات بروید و آن را فعال کنید.", + "Go to Sieve settings" : "رفتن به تنظیمات Sieve", "Calendar settings" : "تنظیمات تقویم", - "Filters" : "Filters", - "Mail server" : "سرور پست الکترونیکی", - "Update alias" : "Update alias", - "Rename alias" : "Rename alias", - "Show update alias form" : "Show update alias form", - "Delete alias" : "Delete alias", - "Go back" : "برگرد", - "Change name" : "تغییر نام", + "Classification settings" : "تنظیمات طبقه‌بندی", + "Filters" : "فیلترها", + "Quick actions" : "اقدامات سریع", + "Sieve script editor" : "ویرایشگر اسکریپت Sieve", + "Mail server" : "سرور ایمیل", + "Sieve server" : "سرور Sieve", + "Folder search" : "جستجوی پوشه", "Email address" : "آدرس ایمیل", - "Add alias" : "Add alias", - "Create alias" : "Create alias", + "Update alias" : "به‌روزرسانی نام مستعار", + "Rename alias" : "تغییر نام مستعار", + "Show update alias form" : "نمایش فرم به‌روزرسانی نام مستعار", + "Delete alias" : "حذف نام مستعار", + "Go back" : "بازگشت", + "Change name" : "تغییر نام", + "Add alias" : "افزودن نام مستعار", + "Create alias" : "ایجاد نام مستعار", "Cancel" : "لغو", - "Could not update preference" : "Could not update preference", - "Mail settings" : "Mail settings", + "Search the body of messages in priority Inbox" : "جستجوی متن پیام‌ها در صندوق ورودی اولویت‌دار", + "Activate" : "فعال‌سازی", + "Make mails available to Context Chat" : "در دسترس قرار دادن ایمیل‌ها برای چت زمینه", + "Remind about messages that require a reply but received none" : "یادآوری درباره پیام‌هایی که نیاز به پاسخ دارند اما پاسخی دریافت نکرده‌اند", + "Highlight external addresses" : "برجسته‌سازی آدرس‌های خارجی", + "Could not update preference" : "امکان به‌روزرسانی تنظیمات وجود نداشت", + "Mail settings" : "تنظیمات ایمیل", "General" : "عمومی", - "Add mail account" : "حساب کاربری پست الکترونیکی اضافه کنید", + "Set as default mail app" : "تنظیم به عنوان برنامه پیش‌فرض ایمیل", + "{email} (delegated)" : "{email} (واگذار شده)", + "Add mail account" : "افزودن حساب ایمیل", "Appearance" : "ظاهر", + "Show all messages in thread" : "نمایش همه پیام‌ها در رشته", + "When off, only the selected message will be shown" : "وقتی خاموش است، فقط پیام انتخاب‌شده نمایش داده می‌شود", + "Sort favorites up" : "مرتب‌سازی موارد مورد علاقه در بالا", + "When on, favorite messages will be sorted to the top of folders" : "وقتی روشن است، پیام‌های مورد علاقه به بالای پوشه‌ها مرتب می‌شوند", "Layout" : "چیدمان", + "Vertical split" : "تقسیم عمودی", + "Horizontal split" : "تقسیم افقی", "List" : "فهرست", - "Sorting" : "مرتب سازی", - "Newest first" : "نخست جدیدترین", - "Oldest first" : "نخست قدیمی‌ترین", - "Shared with me" : "Shared with me", - "Privacy" : "محرمانگی", - "Security" : "امنیتی", + "Use compact mode" : "استفاده از حالت فشرده", + "Sorting" : "مرتب‌سازی", + "Newest first" : "جدیدترین‌ها اول", + "Oldest first" : "قدیمی‌ترین‌ها اول", + "New text block" : "بلوک متنی جدید", + "Title of the text block" : "عنوان بلوک متنی", + "Content of the text block" : "محتوای بلوک متنی", + "Ok" : "تأیید", + "Avatars from Gravatar and favicons" : "آواتارها از Gravatar و فاوآیکن‌ها", + "Reply position" : "موقعیت پاسخ", + "Top" : "بالا", + "Bottom" : "پایین", + "Text blocks" : "بلوک‌های متنی", + "Reusable pieces of text that can be inserted in messages" : "قطعات متنی قابل استفاده مجدد که می‌توان در پیام‌ها درج کرد", + "Shared with me" : "اشتراک‌گذاری شده با من", + "Privacy" : "حریم خصوصی", + "Data collection" : "جمع‌آوری داده‌ها", + "Allow the app to collect and process data locally to adapt to your preferences" : "اجازه دهید برنامه داده‌ها را به صورت محلی جمع‌آوری و پردازش کند تا با اولویت‌های شما تطبیق یابد", + "Always show images from" : "همیشه تصاویر را از نمایش بده", + "Security" : "امنیت", + "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "آدرس‌ها و دامنه‌های داخلی خود را مدیریت کنید تا مخاطبین شناسایی شده بدون علامت باقی بمانند", + "S/MIME" : "S/MIME", + "Manage certificates" : "مدیریت گواهی‌ها", + "Mailvelope" : "Mailvelope", + "Mailvelope is enabled for the current domain." : "Mailvelope برای دامنه فعلی فعال است.", + "Step 1" : "مرحله ۱", + "Install the browser extension" : "افزونه مرورگر را نصب کنید", + "Step 2" : "مرحله ۲", + "Enable for the current domain" : "برای دامنه فعلی فعال کنید", + "Assistance features" : "ویژگی‌های کمکی", + "Context Chat integration" : "یکپارچه‌سازی Context Chat", "Compose new message" : "نوشتن پیام جدید", "Newer message" : "پیام جدیدتر", - "Older message" : "پیام قدیمی تر", - "Toggle star" : "تعویض ستاره", - "Toggle unread" : "تغییر حالت خوانده نشده", - "Archive" : "آرشیو", + "Older message" : "پیام قدیمی‌تر", + "Toggle star" : "تغییر وضعیت ستاره", + "Toggle unread" : "تغییر وضعیت خوانده نشده", + "Archive" : "بایگانی", "Delete" : "حذف", "Search" : "جستجو", "Send" : "ارسال", "Refresh" : "تازه‌سازی", - "About" : "About", - "Ok" : "باشه", - "No certificate" : "No certificate", - "Certificate updated" : "Certificate updated", - "Could not update certificate" : "Could not update certificate", - "{commonName} - Valid until {expiryDate}" : "{commonName} - Valid until {expiryDate}", - "Select an alias" : "Select an alias", - "Update Certificate" : "Update Certificate", - "Encrypt with S/MIME and send later" : "Encrypt with S/MIME and send later", - "Encrypt with S/MIME and send" : "Encrypt with S/MIME and send", - "Encrypt with Mailvelope and send later" : "Encrypt with Mailvelope and send later", - "Encrypt with Mailvelope and send" : "Encrypt with Mailvelope and send", - "Send later" : "Send later", - "Message {id} could not be found" : "Message {id} could not be found", - "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted.", - "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "Any existing formatting (for example bold, italic, underline or inline images) will be removed.", - "Turn off formatting" : "Turn off formatting", - "Turn off and remove formatting" : "Turn off and remove formatting", - "Keep formatting" : "Keep formatting", + "About" : "درباره", + "Acknowledgements" : "قدردانی‌ها", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "این برنامه شامل CKEditor است، یک ویرایشگر متن‌باز. حق نشر © مشارکت‌کنندگان CKEditor. تحت مجوز GPLv2.", + "Automatically create tentative appointments in calendar" : "ایجاد خودکار قرارهای موقت در تقویم", + "No certificate" : "بدون گواهی", + "Certificate updated" : "گواهی به‌روزرسانی شد", + "Could not update certificate" : "امکان به‌روزرسانی گواهی وجود نداشت", + "{commonName} - Valid until {expiryDate}" : "{commonName} - معتبر تا {expiryDate}", + "Select an alias" : "یک نام مستعار انتخاب کنید", + "Select certificates" : "گواهی‌ها را انتخاب کنید", + "Update Certificate" : "به‌روزرسانی گواهی", + "The selected certificate is not trusted by the server. Recipients might not be able to verify your signature." : "گواهی انتخاب‌شده توسط سرور تأیید نشده است. ممکن است دریافت‌کنندگان نتوانند امضای شما را تأیید کنند.", + "Encrypt with S/MIME and send later" : "رمزگذاری با S/MIME و ارسال بعداً", + "Encrypt with S/MIME and send" : "رمزگذاری با S/MIME و ارسال", + "Encrypt with Mailvelope and send later" : "رمزگذاری با Mailvelope و ارسال بعداً", + "Encrypt with Mailvelope and send" : "رمزگذاری با Mailvelope و ارسال", + "Send later" : "ارسال بعداً", + "Message {id} could not be found" : "پیام {id} یافت نشد", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "گزینه امضا یا رمزگذاری با S/MIME انتخاب شده است، اما گواهی برای نام مستعار انتخاب‌شده نداریم. پیام امضا یا رمزگذاری نخواهد شد.", + "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "هرگونه قالب‌بندی موجود (مانند پررنگ، کج، زیرخط یا تصاویر درون‌خطی) حذف خواهد شد.", + "Turn off formatting" : "غیرفعال کردن قالب‌بندی", + "Turn off and remove formatting" : "غیرفعال کردن و حذف قالب‌بندی", + "Keep formatting" : "حفظ قالب‌بندی", "From" : "از", - "Select account" : "حساب را انتخاب کنید", + "Select account" : "انتخاب حساب", "To" : "به", - "Cc" : "Cc", - "Bcc" : "Bcc", + "Cc/Bcc" : "رونوشت/رونوشت پنهان", + "Select recipient" : "انتخاب دریافت‌کننده", + "Contact or email address …" : "مخاطب یا نشانی ایمیل …", + "Cc" : "رونوشت", + "Bcc" : "رونوشت پنهان", "Subject" : "موضوع", - "This message came from a noreply address so your reply will probably not be read." : "این پیام از یک آدرس خیلی روشن آمده است بنابراین پاسخ شما احتمالاً خوانده نمی شود.", - "The following recipients do not have a S/MIME certificate: {recipients}." : "The following recipients do not have a S/MIME certificate: {recipients}.", - "The following recipients do not have a PGP key: {recipients}." : "The following recipients do not have a PGP key: {recipients}.", - "Error saving draft" : "Error saving draft", - "Draft saved" : "پیش نویس ذخیره شد", - "Save draft" : "Save draft", - "Discard & close draft" : "Discard & close draft", - "Enable formatting" : "قالب بندی را فعال کنید", - "Disable formatting" : "Disable formatting", - "Upload attachment" : "پیوست را بارگیری کنید", - "Add attachment from Files" : "پیوست را از پرونده ها اضافه کنید", - "Smart picker" : "Smart picker", - "Request a read receipt" : "Request a read receipt", - "Sign message with S/MIME" : "Sign message with S/MIME", - "Encrypt message with S/MIME" : "Encrypt message with S/MIME", - "Encrypt message with Mailvelope" : "Encrypt message with Mailvelope", - "Send now" : "Send now", - "Tomorrow morning" : "Tomorrow morning", - "Tomorrow afternoon" : "Tomorrow afternoon", - "Monday morning" : "Monday morning", - "Custom date and time" : "Custom date and time", - "Enter a date" : "تاریخ را وارد کنید", - "Choose" : "انتخاب کنید", + "Subject …" : "موضوع …", + "This message came from a noreply address so your reply will probably not be read." : "این پیام از یک آدرس بدون پاسخ ارسال شده است، بنابراین احتمالاً پاسخ شما خوانده نخواهد شد.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "دریافت‌کنندگان زیر گواهی S/MIME ندارند: {recipients}.", + "The following recipients do not have a PGP key: {recipients}." : "دریافت‌کنندگان زیر کلید PGP ندارند: {recipients}.", + "Write message …" : "نوشتن پیام …", + "Saving draft …" : "در حال ذخیره پیش‌نویس …", + "Error saving draft" : "خطا در ذخیره پیش‌نویس", + "Draft saved" : "پیش‌نویس ذخیره شد", + "Save draft" : "ذخیره پیش‌نویس", + "Discard & close draft" : "کنار گذاشتن و بستن پیش‌نویس", + "Enable formatting" : "فعال‌سازی قالب‌بندی", + "Disable formatting" : "غیرفعال‌سازی قالب‌بندی", + "Upload attachment" : "بارگذاری پیوست", + "Add attachment from Files" : "افزودن پیوست از Files", + "Smart picker" : "انتخاب‌گر هوشمند", + "Request a read receipt" : "درخواست رسید خوانده‌شدن", + "Sign message with S/MIME" : "امضای پیام با S/MIME", + "Encrypt message with S/MIME" : "رمزگذاری پیام با S/MIME", + "Encrypt message with Mailvelope" : "رمزگذاری پیام با Mailvelope", + "Send now" : "ارسال اکنون", + "Tomorrow morning" : "فردا صبح", + "Tomorrow afternoon" : "فردا بعدازظهر", + "Monday morning" : "صبح دوشنبه", + "Custom date and time" : "تاریخ و ساعت دلخواه", + "Enter a date" : "یک تاریخ وارد کنید", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "پرونده ای را برای اضافه کردن به عنوان پیوست انتخاب کنید", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "انتخاب فایل", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], - "Untitled message" : "Untitled message", - "Expand composer" : "Expand composer", - "Close composer" : "Close composer", - "Confirm" : "تائید", + "Untitled message" : "پیام بدون عنوان", + "Expand composer" : "باز کردن ویرایشگر", + "Close composer" : "بستن ویرایشگر", + "Confirm" : "تأیید", + "Delegate access" : "واگذاری دسترسی", + "Revoke" : "لغو", + "{userId} will no longer be able to act on your behalf" : "{userId} دیگر نمی‌تواند از طرف شما اقدام کند", + "Could not fetch delegates" : "امکان دریافت نمایندگان وجود نداشت", + "Could not delegate access" : "امکان واگذاری دسترسی وجود نداشت", + "Could not revoke delegation" : "امکان لغو واگذاری وجود نداشت", + "Delegation" : "واگذاری", + "Allow users to send, receive, and delete mail on your behalf" : "به کاربران اجازه دهید از طرف شما ایمیل ارسال، دریافت و حذف کنند", + "Revoke access" : "لغو دسترسی", + "Add delegate" : "افزودن نماینده", + "Select a user" : "یک کاربر را انتخاب کنید", + "They will be able to send, receive, and delete mail on your behalf" : "آنها می‌توانند از طرف شما ایمیل ارسال، دریافت و حذف کنند", + "Revoke access?" : "لغو دسترسی؟", + "Tag: {name} deleted" : "برچسب: {name} حذف شد", + "An error occurred, unable to delete the tag." : "خطایی رخ داد، امکان حذف برچسب وجود ندارد.", + "The tag will be deleted from all messages." : "برچسب از همه پیام‌ها حذف خواهد شد.", "Plain text" : "متن ساده", "Rich text" : "متن غنی", "No messages in this folder" : "هیچ پیامی در این پوشه وجود ندارد", - "No messages" : "No messages", - "Blind copy recipients only" : "فقط گیرندگان کپی کور", - "No subject" : "No subject", - "Later today – {timeLocale}" : "Later today – {timeLocale}", - "Set reminder for later today" : "Set reminder for later today", - "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", - "Set reminder for tomorrow" : "Set reminder for tomorrow", - "This weekend – {timeLocale}" : "This weekend – {timeLocale}", - "Set reminder for this weekend" : "Set reminder for this weekend", - "Next week – {timeLocale}" : "Next week – {timeLocale}", - "Set reminder for next week" : "Set reminder for next week", - "Could not delete message" : "Could not delete message", - "Could not archive message" : "Could not archive message", - "Thread was snoozed" : "Thread was snoozed", - "Could not snooze thread" : "Could not snooze thread", - "Encrypted message" : "Encrypted message", - "This message is unread" : "This message is unread", - "Unfavorite" : "ناخوشایند", - "Favorite" : "مورد‌ ‌علاقه‌", - "Unread" : "Unread", - "Read" : "خواندن", - "Unimportant" : "Unimportant", - "Mark not spam" : "Mark not spam", - "Mark as spam" : "Mark as spam", - "Edit tags" : "ویرایش تگ ها", + "No messages" : "هیچ پیامی وجود ندارد", + "Choose" : "انتخاب", + "Blind copy recipients only" : "فقط دریافت‌کنندگان کپی مخفی", + "No subject" : "بدون موضوع", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}پیش‌نویس:{markup-end} {subject}", + "Later today – {timeLocale}" : "اواخر امروز – {timeLocale}", + "Set reminder for later today" : "تنظیم یادآوری برای امروز بعداً", + "Tomorrow – {timeLocale}" : "فردا – {timeLocale}", + "Set reminder for tomorrow" : "تنظیم یادآوری برای فردا", + "This weekend – {timeLocale}" : "آخر این هفته – {timeLocale}", + "Set reminder for this weekend" : "تنظیم یادآوری برای این آخر هفته", + "Next week – {timeLocale}" : "هفته آینده – {timeLocale}", + "Set reminder for next week" : "تنظیم یادآوری برای هفته آینده", + "Could not apply tag, configured tag not found" : "امکان اعمال برچسب وجود نداشت، برچسب پیکربندی شده یافت نشد", + "Could not move thread, destination mailbox not found" : "امکان جابجایی موضوع وجود نداشت، صندوق پستی مقصد یافت نشد", + "Could not execute quick action" : "امکان اجرای اقدام سریع وجود نداشت", + "Quick action executed" : "اقدام سریع اجرا شد", + "No trash folder configured" : "هیچ پوشه زباله‌ای پیکربندی نشده است", + "Could not delete message" : "امکان حذف پیام وجود نداشت", + "Could not archive message" : "امکان بایگانی پیام وجود نداشت", + "Thread was snoozed" : "موضوع به تعویق افتاد", + "Could not snooze thread" : "امکان snooze کردن موضوع وجود نداشت", + "Thread was unsnoozed" : "موضوع از حالت snooze خارج شد", + "Could not unsnooze thread" : "امکان unsnooze کردن موضوع وجود نداشت", + "This summary was AI generated" : "این خلاصه توسط هوش مصنوعی تولید شده است", + "Encrypted message" : "پیام رمزگذاری‌شده", + "This message is unread" : "این پیام خوانده نشده است", + "Unfavorite" : "حذف از علاقه‌مندی‌ها", + "Favorite" : "افزودن به علاقه‌مندی‌ها", + "Unread" : "خوانده نشده", + "Read" : "خوانده شده", + "Unimportant" : "غیرمهم", + "Mark not spam" : "علامت‌گذاری به عنوان غیر هرزنامه", + "Mark as spam" : "علامت‌گذاری به عنوان هرزنامه", + "Edit tags" : "ویرایش برچسب‌ها", "Snooze" : "Snooze", - "Move thread" : "Move thread", - "Archive thread" : "Archive thread", - "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", + "Unsnooze" : "Unsnooze", + "Move thread" : "انتقال موضوع", + "Move Message" : "انتقال پیام", + "Archive thread" : "بایگانی موضوع", + "Archive message" : "بایگانی پیام", "More actions" : "اقدامات بیشتر", "Back" : "بازگشت", - "Set custom snooze" : "Set custom snooze", - "Edit as new message" : "Edit as new message", - "Create task" : "وظیفه ایجاد کنید", - "Download message" : "Download message", - "Load more" : "Load more", + "Set custom snooze" : "تنظیم snooze سفارشی", + "Edit as new message" : "ویرایش به عنوان پیام جدید", + "Reply with meeting" : "پاسخ با جلسه", + "Create task" : "ایجاد وظیفه", + "Download message" : "دانلود پیام", + "Delete thread" : "حذف موضوع", + "Delete message" : "حذف پیام", + "Back to all actions" : "بازگشت به همه اقدامات", + "Manage quick actions" : "مدیریت اقدامات سریع", + "Load more" : "بارگذاری بیشتر", "_Mark {number} read_::_Mark {number} read_" : ["Mark {number} read","Mark {number} read"], "_Mark {number} unread_::_Mark {number} unread_" : ["Mark {number} unread","Mark {number} unread"], "_Mark {number} as important_::_Mark {number} as important_" : ["Mark {number} as important","Mark {number} as important"], @@ -222,373 +336,591 @@ OC.L10N.register( "_Unfavorite {number}_::_Unfavorite {number}_" : ["Unfavorite {number}","Unfavorite {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Favorite {number}","Favorite {number}"], "_Unselect {number}_::_Unselect {number}_" : ["Unselect {number}","Unselect {number}"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Mark {number} as spam","Mark {number} as spam"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Mark {number} as not spam","Mark {number} as not spam"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Edit tags for {number}","Edit tags for {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Move {number} thread","Move {number} threads"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Forward {number} as attachment","Forward {number} as attachment"], - "Mark as unread" : "علامت به عنوان خوانده‌نشده", - "Mark as read" : "علامت به عنوان خوانده‌شده", - "Report this bug" : "گزارش این اشکال", - "Event created" : "Event created", - "Could not create event" : "رویداد ایجاد نشد", - "Create event" : "Create event", + "Mark as unread" : "علامت‌گذاری به عنوان خوانده نشده", + "Mark as read" : "علامت‌گذاری به عنوان خوانده شده", + "Mark as unimportant" : "علامت‌گذاری به عنوان غیرمهم", + "Mark as important" : "علامت‌گذاری به عنوان مهم", + "Report this bug" : "گزارش این باگ", + "This description was generated by AI." : "این توضیحات توسط هوش مصنوعی تولید شده است", + "Event created" : "رویداد ایجاد شد", + "Could not create event" : "امکان ایجاد رویداد وجود ندارد", + "Create event" : "ایجاد رویداد", + "Title" : "عنوان", "All day" : "تمام روز", - "Attendees" : "شرکت کنندگان", - "Select calendar" : "Select calendar", - "Description" : "شرح", - "Create" : "ساخت", - "This event was updated" : "This event was updated", - "{attendeeName} accepted your invitation" : "{attendeeName} accepted your invitation", - "{attendeeName} tentatively accepted your invitation" : "{attendeeName} tentatively accepted your invitation", - "{attendeeName} declined your invitation" : "{attendeeName} declined your invitation", - "{attendeeName} reacted to your invitation" : "{attendeeName} reacted to your invitation", - "Failed to save your participation status" : "Failed to save your participation status", - "You accepted this invitation" : "You accepted this invitation", - "You tentatively accepted this invitation" : "You tentatively accepted this invitation", - "You declined this invitation" : "You declined this invitation", - "You already reacted to this invitation" : "You already reacted to this invitation", - "You have been invited to an event" : "You have been invited to an event", - "This event was cancelled" : "This event was cancelled", - "Save to" : "Save to", + "Attendees" : "شرکت‌کنندگان", + "You can only invite attendees if your account has an email address set" : "تنها در صورتی می‌توانید شرکت‌کنندگان دعوت کنید که حساب شما یک آدرس ایمیل تنظیم شده داشته باشد", + "Select calendar" : "انتخاب تقویم", + "Description" : "توضیحات", + "Create" : "ایجاد", + "This event was updated" : "این رویداد به‌روزرسانی شد", + "{attendeeName} accepted your invitation" : "{attendeeName} دعوت شما را پذیرفت", + "{attendeeName} tentatively accepted your invitation" : "{attendeeName} دعوت شما را به‌طور موقت پذیرفت", + "{attendeeName} declined your invitation" : "{attendeeName} دعوت شما را رد کرد", + "{attendeeName} reacted to your invitation" : "{attendeeName} به دعوت شما واکنش نشان داد", + "Failed to save your participation status" : "ذخیره وضعیت مشارکت شما ناموفق بود", + "You accepted this invitation" : "شما این دعوت را پذیرفتید", + "You tentatively accepted this invitation" : "شما این دعوت را به‌طور موقت پذیرفتید", + "You declined this invitation" : "شما این دعوت را رد کردید", + "You already reacted to this invitation" : "شما قبلاً به این دعوت واکنش نشان داده‌اید", + "You have been invited to an event" : "شما به یک رویداد دعوت شده‌اید", + "This event was cancelled" : "این رویداد لغو شد", + "Save to" : "ذخیره در", "Select" : "انتخاب", "Comment" : "نظر", - "Accept" : "تایید", - "Decline" : "کاهش می یابد", - "Tentatively accept" : "Tentatively accept", - "More options" : "More options", - "individual" : "individual", - "domain" : "domain", + "Accept" : "پذیرش", + "Decline" : "رد", + "Tentatively accept" : "پذیرش موقت", + "More options" : "گزینه‌های بیشتر", + "This message has an attached invitation but the invitation dates are in the past" : "این پیام یک دعوتنامه پیوست دارد اما تاریخ‌های دعوت در گذشته است", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "این پیام یک دعوتنامه پیوست دارد اما دعوتنامه شامل شرکتی نیست که با هیچ آدرس ایمیل حساب پیکربندی شده مطابقت داشته باشد", + "Could not remove internal address {sender}" : "امکان حذف آدرس داخلی {sender} وجود ندارد", + "Could not add internal address {address}" : "امکان افزودن آدرس داخلی {address} وجود ندارد", + "individual" : "فردی", + "domain" : "دامنه", "Remove" : "حذف", - "Itinerary for {type} is not supported yet" : "برنامه سفر برای {نوع yet هنوز پشتیبانی نمی شود", - "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "You are not allowed to move this message to the archive folder and/or delete this message from the current folder", - "Last hour" : "Last hour", - "Today" : "امروز.", + "Add internal address" : "افزودن آدرس داخلی", + "Add internal email or domain" : "افزودن ایمیل یا دامنه داخلی", + "Itinerary for {type} is not supported yet" : "برنامه سفر برای {type} هنوز پشتیبانی نمی‌شود", + "To archive a message please configure an archive folder in account settings" : "برای بایگانی یک پیام، لطفاً یک پوشه بایگانی در تنظیمات حساب پیکربندی کنید", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "شما مجاز به انتقال این پیام به پوشه بایگانی و/یا حذف این پیام از پوشه فعلی نیستید", + "Your IMAP server does not support storing the seen/unseen state." : "سرور IMAP شما از ذخیره وضعیت دیده/دیده نشده پشتیبانی نمی‌کند", + "Could not mark message as seen/unseen" : "امکان علامت‌گذاری پیام به‌عنوان دیده/دیده نشده وجود ندارد", + "Last hour" : "ساعت گذشته", + "Today" : "امروز", + "Yesterday" : "دیروز", "Last week" : "هفته گذشته", "Last month" : "ماه گذشته", - "Choose target folder" : "پوشهٔ هدف را انتخاب کنید", - "No more submailboxes in here" : "No more submailboxes in here", - "Favorites" : "علاقه مندی ها", - "Important info" : "Important info", - "Other" : "دیگر", - "Could not send mdn" : "Could not send mdn", - "The sender of this message has asked to be notified when you read this message." : "The sender of this message has asked to be notified when you read this message.", - "Notify the sender" : "Notify the sender", - "You sent a read confirmation to the sender of this message." : "You sent a read confirmation to the sender of this message.", - "Message was snoozed" : "Message was snoozed", - "Could not snooze message" : "Could not snooze message", - "Forward" : "فرستادن", - "Move message" : "Move message", + "Could not open folder" : "امکان باز کردن پوشه وجود ندارد", + "Loading messages …" : "در حال بارگذاری پیام‌ها …", + "Indexing your messages. This can take a bit longer for larger folders." : "در حال نمایه‌سازی پیام‌های شما. این فرآیند برای پوشه‌های بزرگ‌تر ممکن است کمی بیشتر طول بکشد", + "Choose target folder" : "انتخاب پوشه مقصد", + "No more submailboxes in here" : "زیرصندوق پستی دیگری در اینجا وجود ندارد", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "پیام‌ها به‌طور خودکار با استفاده از هوش مصنوعی به‌عنوان مهم علامت‌گذاری می‌شوند. سیستم از پیام‌هایی که با آن‌ها تعامل دارید یا به‌عنوان مهم علامت‌گذاری می‌کنید، یاد می‌گیرد. در ابتدا ممکن است مجبور باشید اهمیت را به‌صورت دستی تغییر دهید تا به سیستم آموزش دهید، اما با گذشت زمان بهبود می‌یابد", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "پیام‌هایی که به‌عنوان موردعلاقه علامت‌گذاری کرده‌اید، در بالای پوشه‌ها نمایش داده می‌شوند. می‌توانید این رفتار را در تنظیمات برنامه غیرفعال کنید", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "هوش مصنوعی پیام‌های ارسالی شما را که احتمالاً نیاز به پاسخ دارند اما پس از چند روز پاسخی دریافت نکرده‌اند، شناسایی کرده و در اینجا نمایش می‌دهد", + "Favorites" : "موارد موردعلاقه", + "Favorites info" : "اطلاعات موارد موردعلاقه", + "Load more favorites" : "بارگذاری موارد موردعلاقه بیشتر", + "Follow up" : "پیگیری", + "Follow up info" : "اطلاعات پیگیری", + "Load more follow ups" : "بارگذاری موارد پیگیری بیشتر", + "Important info" : "اطلاعات مهم", + "Load more important messages" : "بارگذاری پیام‌های مهم بیشتر", + "Other" : "سایر", + "Load more other messages" : "بارگذاری سایر پیام‌ها بیشتر", + "Could not send mdn" : "ارسال MDN انجام نشد", + "The sender of this message has asked to be notified when you read this message." : "فرستنده این پیام درخواست کرده است که هنگام خواندن این پیام مطلع شود", + "Notify the sender" : "اطلاع‌رسانی به فرستنده", + "You sent a read confirmation to the sender of this message." : "شما یک تأییدیه خواندن به فرستنده این پیام ارسال کردید", + "Message was snoozed" : "پیام به تعویق افتاد", + "Could not snooze message" : "به تعویق انداختن پیام انجام نشد", + "Message was unsnoozed" : "پیام از تعویق خارج شد", + "Could not unsnooze message" : "خارج کردن پیام از تعویق انجام نشد", + "Direct link copied to clipboard" : "لینک مستقیم در کلیپ‌بورد کپی شد", + "Forward" : "ارسال به جلو", + "Link copied" : "پیوند کپی شد", + "Move message" : "انتقال پیام", "Translate" : "ترجمه", - "Forward message as attachment" : "Forward message as attachment", - "View source" : "View source", - "Download thread data for debugging" : "Download thread data for debugging", - "Message body" : "Message body", - "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!", - "Unnamed" : "بی نام", - "Embedded message" : "پیام درج شده", - "calendar imported" : "calendar imported", - "Choose a folder to store the attachment in" : "لطفا پوشه ای را برای ذخیره سازی ضمیمه انتخاب کنید", - "Import into calendar" : "وارد تقویم شوید", - "Download attachment" : "پیوست را بارگیری کنید", - "Save to Files" : "ذخیره در پرونده ها", - "View fewer attachments" : "View fewer attachments", - "Choose a folder to store the attachments in" : "پوشه ای را برای ذخیره کردن پیوست ها انتخاب کنید", - "Save all to Files" : "ذخیره همه در پرونده ها", - "Download Zip" : "Download Zip", + "Forward message as attachment" : "ارسال پیام به‌عنوان پیوست", + "View source" : "مشاهده منبع", + "Print message" : "چاپ پیام", + "Create mail filter" : "ایجاد فیلتر ایمیل", + "Download thread data for debugging" : "دانلود داده‌های موضوع برای اشکال‌زدایی", + "Suggested replies are using AI" : "پاسخ‌های پیشنهادی با استفاده از هوش مصنوعی هستند", + "Message body" : "بدنه پیام", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "هشدار: امضای S/MIME این پیام تأیید نشده است. ممکن است فرستنده هویت شخص دیگری را جعل کند!", + "AI info" : "اطلاعات هوش مصنوعی", + "Unnamed" : "بی‌نام", + "Embedded message" : "پیام جاسازی‌شده", + "Attachment saved to Files" : "پیوست در Files ذخیره شد", + "Attachment could not be saved" : "پیوست ذخیره نشد", + "calendar imported" : "تقویم وارد شد", + "Choose a folder to store the attachment in" : "پوشه‌ای برای ذخیره پیوست انتخاب کنید", + "Import into calendar" : "وارد کردن به تقویم", + "Download attachment" : "دانلود پیوست", + "Save to Files" : "ذخیره در Files", + "Attachments saved to Files" : "پیوست‌ها در Files ذخیره شدند", + "Error while saving attachments" : "خطا در ذخیره پیوست‌ها", + "View fewer attachments" : "مشاهده پیوست‌های کمتر", + "Choose a folder to store the attachments in" : "پوشه‌ای برای ذخیره پیوست‌ها انتخاب کنید", + "Save all to Files" : "ذخیره همه در Files", + "Download Zip" : "دانلود Zip", "_View {count} more attachment_::_View {count} more attachments_" : ["View {count} more attachment","View {count} more attachments"], - "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "This message is encrypted with PGP. Install Mailvelope to decrypt it.", - "The images have been blocked to protect your privacy." : "تصاویر برای محافظت از حریم خصوصی شما مسدود شده اند.", + "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "این پیام با PGP رمزگذاری شده است. برای رمزگشایی، Mailvelope را نصب کنید.", + "The images have been blocked to protect your privacy." : "تصاویر برای حفظ حریم خصوصی شما مسدود شده‌اند.", "Show images" : "نمایش تصاویر", - "Show images temporarily" : "Show images temporarily", - "Always show images from {sender}" : "Always show images from {sender}", - "Always show images from {domain}" : "Always show images from {domain}", - "Message frame" : "Message frame", - "Quoted text" : "Quoted text", + "Show images temporarily" : "نمایش موقت تصاویر", + "Always show images from {sender}" : "همیشه تصاویر از {sender} نمایش داده شود", + "Always show images from {domain}" : "همیشه تصاویر از {domain} نمایش داده شود", + "Message frame" : "قاب پیام", + "Quoted text" : "متن نقل‌قول شده", "Move" : "انتقال", - "Moving" : "Moving", - "Moving thread" : "Moving thread", - "Moving message" : "Moving message", - "Remove account" : "حذف حساب کاربری", - "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", - "Remove {email}" : "Remove {email}", - "Provisioned account is disabled" : "Provisioned account is disabled", - "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn.", + "Moving" : "در حال انتقال", + "Moving thread" : "در حال انتقال موضوع", + "Moving message" : "در حال انتقال پیام", + "This account cannot connect" : "این حساب نمی‌تواند متصل شود", + "Connection failed. Please verify your information and try again" : "اتصال ناموفق بود. لطفاً اطلاعات خود را بررسی کرده و دوباره تلاش کنید", + "Change password" : "تغییر گذرواژه", + "Used quota: {quota}% ({limit})" : "سهمیه استفاده شده: {quota}% ({limit})", + "Used quota: {quota}%" : "سهمیه استفاده شده: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "امکان ایجاد صندوق پستی وجود ندارد. احتمالاً نام شامل کاراکترهای نامعتبر است. لطفاً نام دیگری انتخاب کنید.", + "Remove account" : "حذف حساب", + "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "حساب {email} و داده‌های ایمیل ذخیره‌شده از نکست‌کلود حذف می‌شود، اما از ارائه‌دهنده ایمیل شما حذف نمی‌شود.", + "Remove {email}" : "حذف {email}", + "could not delete account" : "امکان حذف حساب وجود ندارد", + "Provisioned account is disabled" : "حساب تأمین‌شده غیرفعال است", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "لطفاً با استفاده از رمز عبور وارد شوید تا این حساب فعال شود. نشست فعلی از احراز هویت بدون رمز عبور مانند SSO یا WebAuthn استفاده می‌کند.", + "Delegate account" : "حساب نماینده", + "Show only subscribed folders" : "نمایش فقط پوشه‌های مشترک", + "Add folder" : "افزودن پوشه", "Folder name" : "نام پوشه", - "Saving" : "درحال ذخیره", - "Move up" : "Move up", - "Move down" : "حرکت به پایین", - "Show all folders" : "نمایش همه پوشه ها", - "Collapse folders" : "پوشه ها را جمع کنید", + "Saving" : "در حال ذخیره‌سازی", + "Move up" : "انتقال به بالا", + "Move down" : "انتقال به پایین", + "Show all subscribed folders" : "نمایش همه پوشه‌های مشترک", + "Show all folders" : "نمایش همه پوشه‌ها", + "Collapse folders" : "جمع‌کردن پوشه‌ها", "_{total} message_::_{total} messages_" : ["{total} message","{total} messages"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} unread of {total}","{unread} unread of {total}"], "Loading …" : "بارگیری", - "All messages in mailbox will be deleted." : "All messages in mailbox will be deleted.", - "Clear mailbox {name}" : "Clear mailbox {name}", + "All messages in mailbox will be deleted." : "همه پیام‌های صندوق پستی حذف خواهند شد.", + "Clear mailbox {name}" : "پاک کردن صندوق پستی {name}", + "Clear folder" : "پاک کردن پوشه", + "The folder and all messages in it will be deleted." : "پوشه و همه پیام‌های داخل آن حذف خواهند شد.", "Delete folder" : "حذف پوشه", - "An error occurred, unable to rename the mailbox." : "An error occurred, unable to rename the mailbox.", - "Mark all as read" : "علامت همه به عنوان خوانده‌شده", - "Add subfolder" : "زیر پوشه را اضافه کنید", - "Rename" : "تغییرنام", - "Move folder" : "Move folder", - "Clear cache" : "پاک‌سازی انباره", - "Clear locally cached data, in case there are issues with synchronization." : "Clear locally cached data, in case there are issues with synchronization.", - "Subscribed" : "Subscribed", - "Sync in background" : "Sync in background", - "Delete all messages" : "حذف تمام پیام‌ها", - "Outbox" : "Outbox", + "Delete folder {name}" : "حذف پوشه {name}", + "An error occurred, unable to rename the mailbox." : "خطایی رخ داد، امکان تغییر نام صندوق پستی وجود ندارد.", + "Please wait 10 minutes before repairing again" : "لطفاً ۱۰ دقیقه قبل از تعمیر مجدد صبر کنید", + "Mark all as read" : "علامت‌گذاری همه به عنوان خوانده‌شده", + "Add subfolder" : "افزودن زیرپوشه", + "Rename" : "تغییر نام", + "Move folder" : "انتقال پوشه", + "Repair folder" : "تعمیر پوشه", + "Clear cache" : "پاک کردن حافظه نهان", + "Clear locally cached data, in case there are issues with synchronization." : "پاک کردن داده‌های ذخیره‌شده محلی، در صورت بروز مشکل در همگام‌سازی", + "Subscribed" : "مشترک شده", + "Sync in background" : "همگام‌سازی در پس‌زمینه", + "Delete all messages" : "حذف همه پیام‌ها", + "Outbox" : "صندوق خروجی", + "Translate this message to {language}" : "ترجمه این پیام به {language}", "New message" : "پیام جدید", - "Edit message" : "Edit message", - "Draft" : "Draft", + "Edit message" : "ویرایش پیام", + "Draft" : "پیش‌نویس", "Reply" : "پاسخ", - "Message saved" : "Message saved", - "Failed to save message" : "Failed to save message", - "Failed to save draft" : "Failed to save draft", - "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses.", - "Message discarded" : "Message discarded", - "Could not discard message" : "Could not discard message", - "Minimize composer" : "Minimize composer", - "Error sending your message" : "خطایی در ارسال پیام شما", - "Retry" : "تلاش دوباره", - "Warning sending your message" : "Warning sending your message", - "Send anyway" : "Send anyway", - "Autoresponder off" : "Autoresponder off", - "Autoresponder on" : "Autoresponder on", - "First day" : "First day", - "Last day (optional)" : "Last day (optional)", - "${subject} will be replaced with the subject of the message you are responding to" : "${subject} will be replaced with the subject of the message you are responding to", + "Message saved" : "پیام ذخیره شد", + "Failed to save message" : "ذخیره پیام ناموفق بود", + "Failed to save draft" : "ذخیره پیش‌نویس ناموفق بود", + "attachment" : "پیوست", + "attached" : "پیوست شده", + "No \"sent\" folder configured. Please pick one in the account settings." : "پوشه «ارسال‌شده» پیکربندی نشده است. لطفاً یکی را در تنظیمات حساب انتخاب کنید.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "شما در حال ارسال به تعداد زیادی گیرنده در «به» و/یا «رونوشت» هستید. برای مخفی کردن آدرس گیرندگان از «رونوشت مخفی» استفاده کنید.", + "Your message has no subject. Do you want to send it anyway?" : "پیام شما موضوع ندارد. آیا می‌خواهید آن را ارسال کنید؟", + "You mentioned an attachment. Did you forget to add it?" : "شما به یک پیوست اشاره کردید. آیا فراموش کرده‌اید آن را اضافه کنید؟", + "Message discarded" : "پیام کنار گذاشته شد", + "Could not discard message" : "امکان کنار گذاشتن پیام وجود نداشت", + "Maximize composer" : "بزرگ‌نمایی ویرایشگر", + "Show recipient details" : "نمایش جزئیات گیرنده", + "Hide recipient details" : "مخفی کردن جزئیات گیرنده", + "Minimize composer" : "کوچک‌نمایی ویرایشگر", + "Error sending your message" : "خطا در ارسال پیام شما", + "Retry" : "تلاش مجدد", + "Warning sending your message" : "هشدار در ارسال پیام شما", + "Send anyway" : "به هر حال ارسال شود", + "Welcome to {productName} Mail" : "به ایمیل {productName} خوش آمدید", + "Start writing a message by clicking below or select an existing message to display its contents" : "با کلیک روی دکمه زیر شروع به نوشتن پیام کنید یا یک پیام موجود را برای نمایش محتوای آن انتخاب کنید", + "Autoresponder off" : "پاسخ‌دهنده خودکار خاموش", + "Autoresponder on" : "پاسخ‌دهنده خودکار روشن", + "Autoresponder follows system settings" : "پاسخ‌دهنده خودکار از تنظیمات سیستم پیروی می‌کند", + "The autoresponder follows your personal absence period settings." : "پاسخ‌دهنده خودکار از تنظیمات دوره غیبت شخصی شما پیروی می‌کند", + "Edit absence settings" : "ویرایش تنظیمات غیبت", + "First day" : "روز اول", + "Last day (optional)" : "روز آخر (اختیاری)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} با موضوع پیامی که به آن پاسخ می‌دهید جایگزین می‌شود", "Message" : "پیام", - "Oh Snap!" : "Oh Snap!", - "Save autoresponder" : "Save autoresponder", - "Could not open outbox" : "Could not open outbox", - "Pending or not sent messages will show up here" : "Pending or not sent messages will show up here", - "Message could not be sent" : "Message could not be sent", - "Message deleted" : "Message deleted", - "Copied email address to clipboard" : "Copied email address to clipboard", - "Could not copy email address to clipboard" : "Could not copy email address to clipboard", - "Contacts with this address" : "Contacts with this address", - "Add to Contact" : "Add to Contact", - "New Contact" : "New Contact", - "Copy to clipboard" : "کپی کردن به حافظه موقت", + "Oh Snap!" : "اوه!", + "Save autoresponder" : "ذخیره پاسخ‌دهنده خودکار", + "Could not open outbox" : "امکان باز کردن صندوق خروجی وجود نداشت", + "Pending or not sent messages will show up here" : "پیام‌های در انتظار یا ارسال‌نشده در اینجا نمایش داده می‌شوند", + "Could not copy to \"Sent\" folder" : "امکان کپی در پوشه «ارسال‌شده» وجود نداشت", + "Mail server error" : "خطای سرور ایمیل", + "Message could not be sent" : "پیام قابل ارسال نبود", + "Message deleted" : "پیام حذف شد", + "Copy to \"Sent\" Folder" : "کپی در پوشه «ارسال‌شده»", + "Copy to Sent Folder" : "کپی به پوشه ارسال‌شده", + "Phishing email" : "ایمیل فیشینگ", + "This email might be a phishing attempt" : "این ایمیل ممکن است یک تلاش فیشینگ باشد", + "Hide suspicious links" : "مخفی‌سازی لینک‌های مشکوک", + "Show suspicious links" : "نمایش لینک‌های مشکوک", + "link text" : "متن لینک", + "Copied email address to clipboard" : "آدرس ایمیل در کلیپ‌بورد کپی شد", + "Could not copy email address to clipboard" : "امکان کپی آدرس ایمیل در کلیپ‌بورد وجود نداشت", + "Contacts with this address" : "مخاطبان با این آدرس", + "Add to Contact" : "افزودن به مخاطبان", + "New Contact" : "مخاطب جدید", + "Copy to clipboard" : "کپی در کلیپ‌بورد", + "Contact name …" : "نام مخاطب …", "Add" : "افزودن", - "Show less" : "Show less", - "Show more" : "Show more", + "Show less" : "نمایش کمتر", + "Show more" : "نمایش بیشتر", "Clear" : "پاک کردن", - "Close" : "بسته", - "Search parameters" : "Search parameters", - "Body" : "متن", + "Search in folder" : "جستجو در پوشه", + "Open search modal" : "باز کردن پنجره جستجو", + "Close" : "بستن", + "Search parameters" : "پارامترهای جستجو", + "Search subject" : "جستجوی موضوع", + "Body" : "متن ایمیل", + "Search body" : "جستجوی متن ایمیل", "Date" : "تاریخ", - "Pick a start date" : "Pick a start date", - "Pick an end date" : "Pick an end date", - "Select senders" : "Select senders", - "Select recipients" : "Select recipients", - "Select CC recipients" : "Select CC recipients", - "Select BCC recipients" : "Select BCC recipients", - "Tags" : "برچسب ها", - "Select tags" : "برچسب ها را انتخاب کنید", - "Marked as" : "Marked as", - "Has attachments" : "Has attachments", - "Sieve Port" : "Sieve Port", - "Custom" : "Custom", - "Sieve User" : "Sieve User", - "Sieve Password" : "Sieve Password", - "Save sieve settings" : "Save sieve settings", - "The syntax seems to be incorrect:" : "The syntax seems to be incorrect:", - "Save sieve script" : "Save sieve script", - "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Your signature is larger than 2 MB. This may affect the performance of your editor.", + "Pick a start date" : "انتخاب تاریخ شروع", + "Pick an end date" : "انتخاب تاریخ پایان", + "Select senders" : "انتخاب فرستندگان", + "Select recipients" : "انتخاب گیرندگان", + "Select CC recipients" : "انتخاب گیرندگان رونوشت", + "Select BCC recipients" : "انتخاب گیرندگان رونوشت مخفی", + "Tags" : "برچسب‌ها", + "Select tags" : "انتخاب برچسب‌ها", + "Marked as" : "علامت‌گذاری شده به عنوان", + "Has attachments" : "دارای پیوست", + "Mentions me" : "اشاره به من", + "Has attachment" : "دارای پیوست", + "To me" : "به من", + "Enable mail body search" : "فعال‌سازی جستجوی متن ایمیل", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve یک زبان قدرتمند برای نوشتن فیلترهای صندوق پستی شماست. اگر سرویس ایمیل شما از آن پشتیبانی کند، می‌توانید اسکریپت‌های Sieve را در ایمیل مدیریت کنید. همچنین برای استفاده از پاسخ‌دهنده خودکار و فیلترها به Sieve نیاز است.", + "Enable sieve filter" : "فعال‌سازی فیلتر Sieve", + "Sieve host" : "میزبان Sieve", + "Sieve security" : "امنیت Sieve", + "Sieve Port" : "پورت Sieve", + "Sieve credentials" : "اعتبارنامه‌های Sieve", + "IMAP credentials" : "اعتبارنامه‌های IMAP", + "Custom" : "سفارشی", + "Sieve User" : "کاربر Sieve", + "Sieve Password" : "رمز عبور Sieve", + "Oh snap!" : "اوه نه!", + "Save sieve settings" : "ذخیره تنظیمات sieve", + "The syntax seems to be incorrect:" : "به نظر می‌رسد ساختار دستور اشتباه است:", + "Save sieve script" : "ذخیره اسکریپت sieve", + "Signature …" : "امضا …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "امضای شما بزرگ‌تر از ۲ مگابایت است. این ممکن است بر عملکرد ویرایشگر شما تأثیر بگذارد.", "Save signature" : "ذخیره امضا", - "Place signature above quoted text" : "Place signature above quoted text", - "Message source" : "Message source", - "An error occurred, unable to rename the tag." : "An error occurred, unable to rename the tag.", - "Set tag" : "Set tag", - "Unset tag" : "Unset tag", - "Tag name is a hidden system tag" : "Tag name is a hidden system tag", - "Tag already exists" : "تگ از قبل وجود دارد", - "An error occurred, unable to create the tag." : "An error occurred, unable to create the tag.", - "Add default tags" : "Add default tags", - "Add tag" : "برچسب اضافه کنید", - "Task created" : "Task created", - "Could not create task" : "Could not create task", - "No calendars with task list support" : "No calendars with task list support", - "Summarizing thread failed." : "Summarizing thread failed.", - "Could not load your message thread" : "Could not load your message thread", - "The thread doesn't exist or has been deleted" : "The thread doesn't exist or has been deleted", - "Loading thread" : "Loading thread", - "Not found" : "پیدا نشد.", - "Encrypted & verified " : "Encrypted & verified ", - "Signature verified" : "Signature verified", - "Signature unverified " : "Signature unverified ", - "This message was encrypted by the sender before it was sent." : "This message was encrypted by the sender before it was sent.", - "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent.", - "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted.", - "Reply all" : "Reply all", - "Unsubscribe request sent" : "Unsubscribe request sent", - "Could not unsubscribe from mailing list" : "Could not unsubscribe from mailing list", - "Unsubscribe" : "Unsubscribe", - "Reply to sender only" : "فقط به فرستنده پاسخ دهید", - "Mark as unfavorite" : "Mark as unfavorite", - "Mark as favorite" : "Mark as favorite", - "Unsubscribe via link" : "Unsubscribe via link", - "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", - "Send unsubscribe email" : "Send unsubscribe email", - "Unsubscribe via email" : "Unsubscribe via email", - "{name} Assistant" : "{name} Assistant", - "Go to latest message" : "Go to latest message", - "The message could not be translated" : "The message could not be translated", - "Translation copied to clipboard" : "Translation copied to clipboard", - "Translation could not be copied" : "Translation could not be copied", - "Translate message" : "Translate message", - "Source language to translate from" : "Source language to translate from", - "Translate from" : "Translate from", - "Target language to translate into" : "Target language to translate into", - "Translate to" : "Translate to", - "Translating" : "Translating", - "Copy translated text" : "رونوشت متن ترجمه", - "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed.", - "Could not remove trusted sender {sender}" : "Could not remove trusted sender {sender}", - "No senders are trusted at the moment." : "No senders are trusted at the moment.", + "Place signature above quoted text" : "قرار دادن امضا بالای متن نقل‌قول‌شده", + "Message source" : "منبع پیام", + "An error occurred, unable to rename the tag." : "خطایی رخ داد، امکان تغییر نام برچسب وجود ندارد.", + "Edit name or color" : "ویرایش نام یا رنگ", + "Saving new tag name …" : "در حال ذخیره نام جدید برچسب …", + "Delete tag" : "حذف برچسب", + "Set tag" : "تنظیم برچسب", + "Unset tag" : "لغو تنظیم برچسب", + "Tag name is a hidden system tag" : "نام برچسب یک برچسب سیستمی مخفی است", + "Tag already exists" : "برچسب از قبل وجود دارد", + "Tag name cannot be empty" : "نام برچسب نمی‌تواند خالی باشد", + "An error occurred, unable to create the tag." : "خطایی رخ داد، امکان ایجاد برچسب وجود ندارد.", + "Add default tags" : "افزودن برچسب‌های پیش‌فرض", + "Add tag" : "افزودن برچسب", + "Saving tag …" : "در حال ذخیره برچسب …", + "Task created" : "وظیفه ایجاد شد", + "Could not create task" : "امکان ایجاد وظیفه وجود نداشت", + "No calendars with task list support" : "هیچ تقویمی با پشتیبانی از لیست وظایف وجود ندارد", + "Summarizing thread failed." : "خلاصه‌سازی موضوع ناموفق بود.", + "Could not load your message thread" : "امکان بارگذاری موضوع پیام شما وجود نداشت", + "The thread doesn't exist or has been deleted" : "موضوع وجود ندارد یا حذف شده است", + "Email was not able to be opened" : "ایمیل قابل باز شدن نبود", + "Print" : "چاپ", + "Could not print message" : "امکان چاپ پیام وجود نداشت", + "Loading thread" : "در حال بارگذاری موضوع", + "Not found" : "پیدا نشد", + "Encrypted & verified " : "رمزگذاری و تأیید شده", + "Signature verified" : "امضا تأیید شد", + "Signature unverified " : "امضا تأیید نشد", + "This message was encrypted by the sender before it was sent." : "این پیام توسط فرستنده قبل از ارسال رمزگذاری شده است.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "این پیام شامل یک امضای دیجیتال S/MIME تأیید شده است. پیام از زمان ارسال تغییر نکرده است.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "این پیام شامل یک امضای دیجیتال S/MIME تأیید نشده است. ممکن است پیام از زمان ارسال تغییر کرده باشد یا گواهی امضاکننده مورد اعتماد نباشد.", + "Reply all" : "پاسخ به همه", + "Unsubscribe request sent" : "درخواست لغو اشتراک ارسال شد", + "Could not unsubscribe from mailing list" : "امکان لغو اشتراک از لیست پستی وجود نداشت", + "Please wait for the message to load" : "لطفاً منتظر بارگذاری پیام بمانید", + "Disable reminder" : "غیرفعال کردن یادآوری", + "Unsubscribe" : "لغو اشتراک", + "Reply to sender only" : "پاسخ فقط به فرستنده", + "Mark as unfavorite" : "علامت‌گذاری به عنوان غیرمحبوب", + "Mark as favorite" : "علامت‌گذاری به عنوان محبوب", + "From:" : "از:", + "To:" : "به:", + "Cc:" : "رونوشت:", + "Bcc:" : "رونوشت مخفی:", + "Unsubscribe via link" : "لغو اشتراک از طریق لینک", + "Unsubscribing will stop all messages from the mailing list {sender}" : "لغو اشتراک باعث توقف تمام پیام‌های لیست پستی {sender} می‌شود", + "Send unsubscribe email" : "ارسال ایمیل لغو اشتراک", + "Unsubscribe via email" : "لغو اشتراک از طریق ایمیل", + "{name} Assistant" : "دستیار {name}", + "Thread summary" : "خلاصه موضوع", + "Go to latest message" : "رفتن به آخرین پیام", + "Newest message" : "جدیدترین پیام", + "This summary is AI generated and may contain mistakes." : "این خلاصه توسط هوش مصنوعی تولید شده و ممکن است حاوی اشتباه باشد", + "Please select languages to translate to and from" : "لطفاً زبان‌های ترجمه از و به را انتخاب کنید", + "The message could not be translated" : "پیام قابل ترجمه نبود", + "Translation copied to clipboard" : "ترجمه در کلیپ‌بورد کپی شد", + "Translation could not be copied" : "ترجمه قابل کپی شدن نبود", + "Translate message" : "ترجمه پیام", + "Source language to translate from" : "زبان مبدأ برای ترجمه", + "Translate from" : "ترجمه از", + "Target language to translate into" : "زبان مقصد برای ترجمه", + "Translate to" : "ترجمه به", + "Translating" : "در حال ترجمه", + "This translation is generated using AI and may contain inaccuracies" : "این ترجمه با استفاده از هوش مصنوعی تولید شده و ممکن است حاوی نادرستی باشد", + "Copy translated text" : "کپی متن ترجمه شده", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "با خالی گذاشتن فیلد یا تنظیم آن روی ۰، نگهداری زباله را غیرفعال کنید. فقط ایمیل‌هایی که پس از فعال‌سازی نگهداری زباله حذف می‌شوند، پردازش خواهند شد", + "Could not remove trusted sender {sender}" : "امکان حذف فرستنده مورد اعتماد {sender} وجود نداشت", + "No senders are trusted at the moment." : "در حال حاضر هیچ فرستنده‌ای مورد اعتماد نیست", "Untitled event" : "رویداد بدون عنوان", - "(organizer)" : "(تنظیم کننده)", - "Import into {calendar}" : "{وارد {تقویم", - "Event imported into {calendar}" : "{رویداد وارد شده به {تقویم", - "Flight {flightNr} from {depAirport} to {arrAirport}" : "{پرواز} {پرواز Nr} از {depAirport} به {arrAirport}", + "(organizer)" : "(برگزارکننده)", + "Import into {calendar}" : "وارد کردن به {calendar}", + "Event imported into {calendar}" : "رویداد به {calendar} وارد شد", + "Flight {flightNr} from {depAirport} to {arrAirport}" : "پرواز {flightNr} از {depAirport} به {arrAirport}", "Airplane" : "هواپیما", "Reservation {id}" : "رزرو {id}", - "{trainNr} from {depStation} to {arrStation}" : "{trainNr} از {depStation} تا {arrStation}", - "Train from {depStation} to {arrStation}" : "آموزش از {depStation} تا {arrStation} Train", - "Train" : "رشته", - "Stop" : "Stop", + "{trainNr} from {depStation} to {arrStation}" : "{trainNr} از {depStation} به {arrStation}", + "Train from {depStation} to {arrStation}" : "قطار از {depStation} به {arrStation}", + "Train" : "قطار", + "Mark message as" : "علامت‌گذاری پیام به عنوان", + "Add flag" : "افزودن پرچم", + "Move into folder" : "انتقال به پوشه", + "Stop" : "توقف", + "Delete action" : "حذف اقدام", + "Answered" : "پاسخ داده شده", "Deleted" : "حذف شده", - "Delete filter" : "Delete filter", + "Flagged" : "پرچم‌گذاری شده", + "Seen" : "مشاهده شده", + "Enter flag" : "وارد کردن پرچم", + "Stop ends all processing" : "توقف به تمام پردازش‌ها پایان می‌دهد", + "Sender" : "فرستنده", + "Recipient" : "گیرنده", + "Create a new mail filter" : "ایجاد یک فیلتر ایمیل جدید", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "هدرهایی را که می‌خواهید برای ایجاد فیلتر خود استفاده کنید، انتخاب کنید. در مرحله بعد، می‌توانید شرایط فیلتر را دقیق‌تر کنید و اقداماتی را که باید روی پیام‌های منطبق با معیارهای شما انجام شود، مشخص کنید", + "Delete filter" : "حذف فیلتر", + "Delete mail filter {filterName}?" : "آیا فیلتر ایمیل {filterName} حذف شود؟", + "Are you sure to delete the mail filter?" : "آیا مطمئن هستید که می‌خواهید فیلتر ایمیل را حذف کنید؟", + "New filter" : "فیلتر جدید", + "Filter saved" : "فیلتر ذخیره شد", + "Could not save filter" : "امکان ذخیره فیلتر وجود ندارد", + "Filter deleted" : "فیلتر حذف شد", + "Could not delete filter" : "امکان حذف فیلتر وجود ندارد", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "کنترل هرج‌ومرج ایمیل‌های خود را به دست بگیرید. فیلترها به شما کمک می‌کنند تا اولویت‌بندی کنید و شلوغی را حذف نمایید.", + "Hang tight while the filters load" : "لطفاً صبر کنید تا فیلترها بارگذاری شوند", + "Filter is active" : "فیلتر فعال است", + "Filter is not active" : "فیلتر فعال نیست", + "If all the conditions are met, the actions will be performed" : "اگر همه شرایط برآورده شوند، اقدامات انجام خواهند شد", + "If any of the conditions are met, the actions will be performed" : "اگر هر یک از شرایط برآورده شود، اقدامات انجام خواهند شد", "Help" : "راهنما", - "contains" : "contains", - "matches" : "مطابق است", - "Actions" : "کنش‌ها", + "contains" : "شامل می‌شود", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "تطابق زیررشته. فیلد در صورتی مطابقت دارد که مقدار ارائه‌شده در آن موجود باشد. مثلاً «گزارش» با «پورت» مطابقت دارد.", + "matches" : "مطابقت دارد", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "تطابق الگو با استفاده از کاراکترهای عام. نماد «*» نشان‌دهنده هر تعداد کاراکتر (از جمله صفر) و «?» نشان‌دهنده دقیقاً یک کاراکتر است. مثلاً «*گزارش*» با «گزارش تجاری 2024» مطابقت دارد.", + "Enter subject" : "موضوع را وارد کنید", + "Enter sender" : "فرستنده را وارد کنید", + "Enter recipient" : "گیرنده را وارد کنید", + "is exactly" : "دقیقاً برابر است", + "Conditions" : "شرایط", + "Add condition" : "افزودن شرط", + "Actions" : "اقدامات", + "Add action" : "افزودن اقدام", "Priority" : "اولویت", + "Enable filter" : "فعال‌سازی فیلتر", + "Tag" : "برچسب", "delete" : "حذف", + "Edit quick action" : "ویرایش اقدام سریع", + "Add quick action" : "افزودن اقدام سریع", + "Quick action deleted" : "اقدام سریع حذف شد", + "Failed to delete quick action" : "حذف اقدام سریع ناموفق بود", + "Failed to update quick action" : "به‌روزرسانی اقدام سریع ناموفق بود", + "Failed to update step in quick action" : "به‌روزرسانی مرحله در اقدام سریع ناموفق بود", + "Quick action updated" : "اقدام سریع به‌روزرسانی شد", + "Failed to create quick action" : "ایجاد اقدام سریع ناموفق بود", + "Failed to add steps to quick action" : "افزودن مراحل به اقدام سریع ناموفق بود", + "Quick action created" : "اقدام سریع ایجاد شد", + "Failed to delete action step" : "حذف مرحله اقدام ناموفق بود", + "No quick actions yet." : "هنوز هیچ اقدام سریعی وجود ندارد.", "Edit" : "ویرایش", - "Successfully updated config for \"{domain}\"" : "Successfully updated config for \"{domain}\"", - "Error saving config" : "Error saving config", - "Saved config for \"{domain}\"" : "Saved config for \"{domain}\"", - "Could not save provisioning setting" : "Could not save provisioning setting", - "Mail app" : "برنامه پست الکترونیکی", - "The mail app allows users to read mails on their IMAP accounts." : "برنامه نامه الکترونیکی به کاربران این امکان را می دهد تا نامه ها را در حساب های IMAP خود بخوانند.", - "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner).", - "Account provisioning" : "Account provisioning", - "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration.", - "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration.", - "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration.", - "There can only be one configuration per domain and only one wildcard domain configuration." : "There can only be one configuration per domain and only one wildcard domain configuration.", - "These settings can be used in conjunction with each other." : "These settings can be used in conjunction with each other.", - "If you only want to provision one domain for all users, use the wildcard (*)." : "If you only want to provision one domain for all users, use the wildcard (*).", - "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization.", - "Provisioning Configurations" : "Provisioning Configurations", - "Add new config" : "Add new config", - "Anti Spam Service" : "Anti Spam Service", - "You can set up an anti spam service email address here." : "You can set up an anti spam service email address here.", - "Any email that is marked as spam will be sent to the anti spam service." : "Any email that is marked as spam will be sent to the anti spam service.", - "Gmail integration" : "Gmail integration", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI.", - "Microsoft integration" : "Microsoft integration", - "Successfully set up anti spam email addresses" : "Successfully set up anti spam email addresses", - "Error saving anti spam email addresses" : "Error saving anti spam email addresses", - "Successfully deleted anti spam reporting email" : "Successfully deleted anti spam reporting email", - "Error deleting anti spam reporting email" : "Error deleting anti spam reporting email", - "Anti Spam" : "Anti Spam", - "Add the email address of your anti spam report service here." : "Add the email address of your anti spam report service here.", - "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\".", - "The original message will be attached as a \"message/rfc822\" attachment." : "The original message will be attached as a \"message/rfc822\" attachment.", - "\"Mark as Spam\" Email Address" : "\"Mark as Spam\" Email Address", - "\"Mark Not Junk\" Email Address" : "\"Mark Not Junk\" Email Address", + "Quick action name" : "نام اقدام سریع", + "Do the following actions" : "انجام اقدامات زیر", + "Add another action" : "افزودن اقدام دیگر", + "Successfully updated config for \"{domain}\"" : "تنظیمات برای «{domain}» با موفقیت به‌روزرسانی شد", + "Error saving config" : "خطا در ذخیره تنظیمات", + "Saved config for \"{domain}\"" : "تنظیمات برای «{domain}» ذخیره شد", + "Could not save provisioning setting" : "امکان ذخیره تنظیمات تأمین وجود ندارد", + "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["Successfully provisioned {count} account.","Successfully provisioned {count} accounts."], + "There was an error when provisioning accounts." : "هنگام فراهم‌سازی حساب‌ها خطایی رخ داد.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "حساب‌های مربوط به \"{domain}\" با موفقیت حذف و از دسترس خارج شدند.", + "Error when deleting and deprovisioning accounts for \"{domain}\"" : "خطا در حذف و خارج‌سازی حساب‌های مربوط به \"{domain}\"", + "Could not save default classification setting" : "امکان ذخیره تنظیمات پیش‌فرض طبقه‌بندی وجود نداشت", + "Mail app" : "برنامه ایمیل", + "The mail app allows users to read mails on their IMAP accounts." : "برنامه ایمیل به کاربران امکان خواندن ایمیل‌های حساب‌های IMAP خود را می‌دهد.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "در اینجا می‌توانید تنظیمات سراسری را مشاهده کنید. تنظیمات مخصوص هر کاربر در خود برنامه (گوشه پایین-چپ) قرار دارد.", + "Account provisioning" : "فراهم‌سازی حساب", + "A provisioning configuration will provision all accounts with a matching email address." : "یک پیکربندی فراهم‌سازی، تمام حساب‌هایی که آدرس ایمیل منطبق دارند را فراهم می‌کند.", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "استفاده از کاراکتر عام (*) در فیلد دامنه فراهم‌سازی، پیکربندی ایجاد می‌کند که برای همه کاربران اعمال می‌شود، به شرطی که با پیکربندی دیگری مطابقت نداشته باشند.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "مکانیزم فراهم‌سازی، پیکربندی‌های دامنه خاص را بر پیکربندی دامنه عام اولویت می‌دهد.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "اگر پس از فراهم‌سازی کاربر با یک پیکربندی، پیکربندی منطبق جدیدی یافت شود، پیکربندی جدید اولویت یافته و کاربر با آن پیکربندی مجدداً فراهم می‌شود.", + "There can only be one configuration per domain and only one wildcard domain configuration." : "به ازای هر دامنه فقط یک پیکربندی و فقط یک پیکربندی دامنه عام می‌تواند وجود داشته باشد.", + "These settings can be used in conjunction with each other." : "این تنظیمات می‌توانند به صورت ترکیبی با یکدیگر استفاده شوند.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "اگر فقط می‌خواهید یک دامنه را برای همه کاربران فراهم کنید، از کاراکتر عام (*) استفاده کنید.", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "این تنظیم تنها زمانی منطقی است که از پس‌زمینه کاربر یکسانی برای نکست‌کلود و سرور ایمیل سازمان خود استفاده کنید.", + "Provisioning Configurations" : "پیکربندی‌های فراهم‌سازی", + "Add new config" : "افزودن پیکربندی جدید", + "Provision all accounts" : "فراهم‌سازی همه حساب‌ها", + "Allow additional mail accounts" : "اجازه حساب‌های ایمیل اضافی", + "Allow additional Mail accounts from User Settings" : "اجازه حساب‌های ایمیل اضافی از تنظیمات کاربر", + "Enable text processing through LLMs" : "فعال‌سازی پردازش متن از طریق LLM", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "برنامه ایمیل می‌تواند داده‌های کاربر را با کمک مدل زبانی بزرگ پیکربندی شده پردازش کرده و ویژگی‌های کمکی مانند خلاصه‌های موضوع، پاسخ‌های هوشمند و برنامه‌های رویداد ارائه دهد.", + "Enable LLM processing" : "فعال‌سازی پردازش LLM", + "Enable classification by importance by default" : "فعال‌سازی طبقه‌بندی بر اساس اهمیت به صورت پیش‌فرض", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "برنامه ایمیل می‌تواند ایمیل‌های دریافتی را با استفاده از یادگیری ماشین بر اساس اهمیت طبقه‌بندی کند. این ویژگی به صورت پیش‌فرض فعال است اما می‌تواند در اینجا به صورت پیش‌فرض غیرفعال شود. کاربران جداگانه همچنان می‌توانند این ویژگی را برای حساب‌های خود فعال یا غیرفعال کنند.", + "Enable classification of important mails by default" : "فعال‌سازی طبقه‌بندی ایمیل‌های مهم به صورت پیش‌فرض", + "Anti Spam Service" : "سرویس ضد هرزنامه", + "You can set up an anti spam service email address here." : "می‌توانید یک آدرس ایمیل سرویس ضد هرزنامه را در اینجا تنظیم کنید.", + "Any email that is marked as spam will be sent to the anti spam service." : "هر ایمیلی که به عنوان هرزنامه علامت‌گذاری شود، به سرویس ضد هرزنامه ارسال خواهد شد.", + "Gmail integration" : "یکپارچه‌سازی جیمیل", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "جیمیل به کاربران امکان دسترسی به ایمیل خود از طریق IMAP را می‌دهد. به دلایل امنیتی، این دسترسی فقط با اتصال OAuth 2.0 یا حساب‌های گوگلی که از احراز هویت دو مرحله‌ای و رمزهای عبور برنامه استفاده می‌کنند، امکان‌پذیر است.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "شما باید یک Client ID جدید برای یک \"برنامه وب\" در کنسول Google Cloud ثبت کنید. آدرس {url} را به عنوان URI بازگشتی مجاز اضافه کنید.", + "Microsoft integration" : "یکپارچه‌سازی مایکروسافت", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "مایکروسافت از شما می‌خواهد با استفاده از احراز هویت OAuth 2.0 از طریق IMAP به ایمیل‌های خود دسترسی پیدا کنید. برای این کار، باید یک برنامه با Microsoft Entra ID که قبلاً با نام Microsoft Azure Active Directory شناخته می‌شد، ثبت کنید.", + "Redirect URI" : "URI بازگشتی", + "For more details, please click here to open our documentation." : "برای جزئیات بیشتر، لطفاً برای باز کردن مستندات ما اینجا کلیک کنید.", + "User Interface Preference Defaults" : "پیش‌فرض‌های ترجیحات رابط کاربری", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "این تنظیمات برای پیش‌پیکربندی ترجیحات رابط کاربری استفاده می‌شوند و کاربر می‌تواند آن‌ها را در تنظیمات ایمیل لغو کند.", + "Message View Mode" : "حالت نمایش پیام", + "Show only the selected message" : "نمایش فقط پیام انتخاب شده", + "Successfully set up anti spam email addresses" : "آدرس‌های ایمیل ضد هرزنامه با موفقیت تنظیم شدند", + "Error saving anti spam email addresses" : "خطا در ذخیره آدرس‌های ایمیل ضد هرزنامه", + "Successfully deleted anti spam reporting email" : "ایمیل گزارش ضد هرزنامه با موفقیت حذف شد", + "Error deleting anti spam reporting email" : "خطا در حذف ایمیل گزارش ضد هرزنامه", + "Anti Spam" : "ضد هرزنامه", + "Add the email address of your anti spam report service here." : "آدرس ایمیل سرویس گزارش ضد هرزنامه خود را در اینجا اضافه کنید.", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "هنگام استفاده از این تنظیم، هنگامی که کاربر روی \"علامت‌گذاری به عنوان هرزنامه\" کلیک می‌کند، یک ایمیل گزارش به سرور گزارش هرزنامه ارسال می‌شود.", + "The original message will be attached as a \"message/rfc822\" attachment." : "پیام اصلی به عنوان یک پیوست \"message/rfc822\" ضمیمه خواهد شد.", + "\"Mark as Spam\" Email Address" : "علامت‌گذاری به عنوان هرزنامه آدرس ایمیل", + "\"Mark Not Junk\" Email Address" : "علامت‌گذاری به عنوان غیر هرزنامه آدرس ایمیل", "Reset" : "بازنشانی", - "Google integration configured" : "Google integration configured", - "Could not configure Google integration" : "Could not configure Google integration", - "Google integration unlinked" : "Google integration unlinked", - "Could not unlink Google integration" : "Could not unlink Google integration", + "Google integration configured" : "ادغام گوگل پیکربندی شد", + "Could not configure Google integration" : "امکان پیکربندی ادغام گوگل وجود ندارد", + "Google integration unlinked" : "ادغام گوگل لغو پیوند شد", + "Could not unlink Google integration" : "امکان لغو پیوند ادغام گوگل وجود ندارد", "Client ID" : "شناسه مشتری", "Client secret" : "رمز مشتری", - "Unlink" : "Unlink", - "Microsoft integration configured" : "Microsoft integration configured", - "Could not configure Microsoft integration" : "Could not configure Microsoft integration", - "Microsoft integration unlinked" : "Microsoft integration unlinked", - "Could not unlink Microsoft integration" : "Could not unlink Microsoft integration", - "Tenant ID (optional)" : "Tenant ID (optional)", - "Domain Match: {provisioningDomain}" : "Domain Match: {provisioningDomain}", + "Unlink" : "لغو پیوند", + "Microsoft integration configured" : "ادغام مایکروسافت پیکربندی شد", + "Could not configure Microsoft integration" : "امکان پیکربندی ادغام مایکروسافت وجود ندارد", + "Microsoft integration unlinked" : "ادغام مایکروسافت لغو پیوند شد", + "Could not unlink Microsoft integration" : "امکان لغو پیوند ادغام مایکروسافت وجود ندارد", + "Tenant ID (optional)" : "شناسه مستأجر (اختیاری)", + "Domain Match: {provisioningDomain}" : "تطبیق دامنه: {provisioningDomain}", "Email: {email}" : "ایمیل: {email}", - "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} on {host}: {port} (رمزگذاری {ssl))", - "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} on {host}: {port} (رمزگذاری s ssl))", - "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} on {host}:{port} ({ssl} encryption)", - "Configuration for \"{provisioningDomain}\"" : "Configuration for \"{provisioningDomain}\"", - "Provisioning domain" : "Provisioning domain", - "Email address template" : "Email address template", + "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} در {host}:{port} (رمزگذاری {ssl})", + "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} در {host}:{port} (رمزگذاری {ssl})", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} در {host}:{port} (رمزگذاری {ssl})", + "Configuration for \"{provisioningDomain}\"" : "پیکربندی برای \"{provisioningDomain}\"", + "Provisioning domain" : "دامنه تأمین", + "Email address template" : "الگوی آدرس ایمیل", "IMAP" : "IMAP", "User" : "کاربر", "Host" : "میزبان", - "Port" : "درگاه", + "Port" : "پورت", "SMTP" : "SMTP", + "Master password" : "رمز اصلی", + "Use master password" : "استفاده از رمز اصلی", "Sieve" : "Sieve", - "Enable sieve integration" : "Enable sieve integration", - "LDAP aliases integration" : "LDAP aliases integration", - "Enable LDAP aliases integration" : "Enable LDAP aliases integration", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases.", - "LDAP attribute for aliases" : "LDAP attribute for aliases", - "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted.", - "Save Config" : "Save Config", - "Unprovision & Delete Config" : "Unprovision & Delete Config", - "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% and %EMAIL% will be replaced with the user's UID and email", - "With the settings above, the app will create account settings in the following way:" : "با تنظیمات فوق ، برنامه تنظیمات حساب را به روش زیر ایجاد می کند:", - "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key.", - "Failed to import the certificate. Please check the password." : "Failed to import the certificate. Please check the password.", - "Certificate imported successfully" : "Certificate imported successfully", - "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", - "Failed to import the certificate" : "Failed to import the certificate", - "S/MIME certificates" : "S/MIME certificates", - "Certificate name" : "Certificate name", + "Enable sieve integration" : "فعال‌سازی ادغام Sieve", + "LDAP aliases integration" : "ادغام نام‌های مستعار LDAP", + "Enable LDAP aliases integration" : "فعال‌سازی ادغام نام‌های مستعار LDAP", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "ادغام نام‌های مستعار LDAP یک ویژگی از دایرکتوری LDAP پیکربندی شده را برای تأمین نام‌های مستعار ایمیل می‌خواند.", + "LDAP attribute for aliases" : "ویژگی LDAP برای نام‌های مستعار", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "یک ویژگی چند مقداری برای تأمین نام‌های مستعار ایمیل. برای هر مقدار یک نام مستعار ایجاد می‌شود. نام‌های مستعار موجود در نکست‌کلود که در دایرکتوری LDAP نیستند حذف می‌شوند.", + "Save Config" : "ذخیره پیکربندی", + "Unprovision & Delete Config" : "لغو تأمین و حذف پیکربندی", + "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% و %EMAIL% با شناسه کاربری و ایمیل کاربر جایگزین می‌شوند", + "With the settings above, the app will create account settings in the following way:" : "با تنظیمات بالا، برنامه تنظیمات حساب را به روش زیر ایجاد می‌کند:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "گواهی PKCS #12 ارائه شده باید حداقل شامل یک گواهی و دقیقاً یک کلید خصوصی باشد.", + "Failed to import the certificate. Please check the password." : "وارد کردن گواهی ناموفق بود. لطفاً رمز عبور را بررسی کنید.", + "Certificate imported successfully" : "گواهی با موفقیت وارد شد", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "وارد کردن گواهی ناموفق بود. لطفاً مطمئن شوید که کلید خصوصی با گواهی مطابقت دارد و با عبارت عبور محافظت نمی‌شود.", + "Failed to import the certificate" : "وارد کردن گواهی ناموفق بود", + "Import S/MIME certificate" : "وارد کردن گواهی S/MIME", + "S/MIME certificates" : "گواهی‌های S/MIME", + "Certificate name" : "نام گواهی", "E-mail address" : "آدرس ایمیل", "Valid until" : "معتبر تا", - "Delete certificate" : "Delete certificate", - "No certificate imported yet" : "No certificate imported yet", - "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", - "PKCS #12 Certificate" : "PKCS #12 Certificate", - "PEM Certificate" : "PEM Certificate", + "Delete certificate" : "حذف گواهی", + "No certificate imported yet" : "هنوز گواهی‌ای وارد نشده است", + "Import certificate" : "وارد کردن گواهی", + "PKCS #12 Certificate" : "گواهی PKCS #12", + "PEM Certificate" : "گواهی PEM", "Certificate" : "گواهی", - "Private key (optional)" : "Private key (optional)", - "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "The private key is only required if you intend to send signed and encrypted emails using this certificate.", - "Submit" : "ارسال", + "Private key (optional)" : "کلید خصوصی (اختیاری)", + "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "کلید خصوصی تنها در صورتی لازم است که قصد ارسال ایمیل‌های امضا شده و رمزگذاری شده با این گواهی را دارید.", + "Submit" : "ثبت", + "No text blocks available" : "هیچ بلوک متنی در دسترس نیست", + "Text block deleted" : "بلوک متنی حذف شد", + "Failed to delete text block" : "حذف بلوک متنی ناموفق بود", + "Text block shared with {sharee}" : "بلوک متنی با {sharee} به اشتراک گذاشته شد", + "Failed to share text block with {sharee}" : "اشتراک‌گذاری بلوک متنی با {sharee} ناموفق بود", + "Share deleted for {name}" : "اشتراک برای {name} حذف شد", + "Failed to delete share with {name}" : "حذف اشتراک با {name} ناموفق بود", + "Guest" : "مهمان", "Group" : "گروه", - "Shared" : "به اشتراک گذاشته شده ", - "Shares" : "اشتراک گذاری ها", - "Insert" : "Insert", - "Account connected" : "حساب کاربری متصل شد", - "You can close this window" : "You can close this window", - "Connect your mail account" : "حساب ایمیل خود را وصل کنید", - "To add a mail account, please contact your administrator." : "To add a mail account, please contact your administrator.", + "Failed to save text block" : "ذخیره بلوک متنی ناموفق بود", + "Shared" : "اشتراک‌گذاری شده", + "Edit {title}" : "ویرایش {title}", + "Delete {title}" : "حذف {title}", + "Edit text block" : "ویرایش بلوک متنی", + "Shares" : "اشتراک‌ها", + "Search for users or groups" : "جستجوی کاربران یا گروه‌ها", + "Choose a text block to insert at the cursor" : "انتخاب یک بلوک متنی برای درج در مکان نما", + "Insert" : "درج", + "Insert text block" : "درج بلوک متنی", + "Account connected" : "حساب متصل شد", + "You can close this window" : "می‌توانید این پنجره را ببندید", + "Connect your mail account" : "اتصال حساب ایمیل خود", + "To add a mail account, please contact your administrator." : "برای افزودن حساب ایمیل، لطفاً با مدیر خود تماس بگیرید.", "All" : "همه", - "Drafts" : "پیش نویس", - "Priority inbox" : "Priority inbox", - "All inboxes" : "همه صندوق ورودی", + "Drafts" : "پیش‌نویس‌ها", + "Priority inbox" : "صندوق ورودی اولویت‌دار", + "All inboxes" : "همه صندوق‌های ورودی", "Inbox" : "صندوق ورودی", - "Junk" : "آشغال", + "Junk" : "هرزنامه", "Sent" : "ارسال شده", - "Trash" : "زباله ها", - "Connect OAUTH2 account" : "Connect OAUTH2 account", - "Error while sharing file" : "Error while sharing file", - "{from}\n{subject}" : "{from}\n{subject}", + "Trash" : "زباله‌دان", + "Connect OAUTH2 account" : "اتصال حساب OAUTH2", + "Error while sharing file" : "خطا در اشتراک‌گذاری فایل", + "{from}\n{subject}" : "{from}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n new message \nfrom {from}","%n new messages \nfrom {from}"], - "Nextcloud Mail" : "ایمیل Nextclould", - "There is already a message in progress. All unsaved changes will be lost if you continue!" : "There is already a message in progress. All unsaved changes will be lost if you continue!", - "Discard changes" : "Discard changes", - "Discard unsaved changes" : "Discard unsaved changes", - "Keep editing message" : "Keep editing message", - "Attachments were not copied. Please add them manually." : "Attachments were not copied. Please add them manually.", + "Nextcloud Mail" : "نکست‌کلود میل", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "در حال حاضر یک پیام در حال انجام است. در صورت ادامه، تمام تغییرات ذخیره نشده از دست خواهند رفت!", + "Discard changes" : "نادیده گرفتن تغییرات", + "Discard unsaved changes" : "نادیده گرفتن تغییرات ذخیره نشده", + "Keep editing message" : "ادامه ویرایش پیام", + "(All or part of this reply was generated by AI)" : "(این پاسخ به طور کامل یا بخشی از آن توسط هوش مصنوعی تولید شده است)", + "Attachments were not copied. Please add them manually." : "پیوست‌ها کپی نشدند. لطفاً آن‌ها را به صورت دستی اضافه کنید.", + "Could not create snooze mailbox" : "امکان ایجاد صندوق پستی تعویق وجود ندارد", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "با عرض پوزش، پیام بارگذاری نشد. ممکن است پیش‌نویس دیگر وجود نداشته باشد. لطفاً صفحه را بازخوانی کرده و دوباره تلاش کنید.", + "Sending message…" : "در حال ارسال پیام…", "Message sent" : "پیام ارسال شد", - "Could not send message" : "Could not send message", - "Could not load {tag}{name}{endtag}" : "بارگیری {برچسب} {نام} {endtag ould} بارگیری نشد", - "There was a problem loading {tag}{name}{endtag}" : "هنگام بارگیری {tag} {name} {endtag } مشکلی رخ داد", - "Could not load your message" : "پیام شما بارگیری نشد", - "Could not load the desired message" : "پیام مورد نظر بارگیری نشد", - "Could not load the message" : "بارگیری پیام امکان پذیر نیست", - "Error loading message" : "خطا در بارگزاری پیام", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Mark all messages of this folder as read" : "تمام پیام های این پوشه را به عنوان خوانده شده علامت گذاری کنید", - "Last 7 days" : "۷ روز گذشته" + "Could not send message" : "امکان ارسال پیام وجود ندارد", + "Message copied to \"Sent\" folder" : "پیام در پوشه «ارسال‌شده» کپی شد", + "Could not copy message to \"Sent\" folder" : "امکان کپی پیام در پوشه «ارسال‌شده» وجود ندارد", + "Could not load {tag}{name}{endtag}" : "امکان بارگذاری {tag}{name}{endtag} وجود ندارد", + "There was a problem loading {tag}{name}{endtag}" : "هنگام بارگذاری {tag}{name}{endtag} مشکلی پیش آمد", + "Could not load your message" : "امکان بارگذاری پیام شما وجود ندارد", + "Could not load the desired message" : "امکان بارگذاری پیام مورد نظر وجود ندارد", + "Could not load the message" : "امکان بارگذاری پیام وجود ندارد", + "Error loading message" : "خطا در بارگذاری پیام", + "Add share link from Files" : "افزودن لینک اشتراک‌گذاری از Files", + "Choose a file to add as attachment" : "فایلی را برای افزودن به عنوان پیوست انتخاب کنید", + "Choose a file to share as a link" : "فایلی را برای اشتراک‌گذاری به عنوان پیوند انتخاب کنید", + "Delegated access to {userId}" : "دسترسی واگذار شده به {userId}", + "Revoked access for {userId}" : "دسترسی {userId} لغو شد" }, "nplurals=2; plural=(n > 1);"); diff --git a/l10n/fa.json b/l10n/fa.json index 19dea32988..fe5c951097 100644 --- a/l10n/fa.json +++ b/l10n/fa.json @@ -1,218 +1,332 @@ { "translations": { - "Embedded message %s" : "پیام درج شده%s", - "Important mail" : "ایمیل‌های مهم", - "No message found yet" : "No message found yet", - "Set up an account" : "Set up an account", - "Unread mail" : "Unread mail", + "Embedded message %s" : "پیام جاسازی‌شده %s", + "Important mail" : "ایمیل مهم", + "No message found yet" : "هنوز پیامی یافت نشده", + "Set up an account" : "ایجاد حساب کاربری", + "Unread mail" : "ایمیل خوانده‌نشده", "Important" : "مهم", - "Work" : "کار", + "Work" : "محل کار", "Personal" : "شخصی", - "To Do" : "To Do", - "Later" : "بعدا", + "To Do" : "انجام‌دادنی", + "Later" : "بعداً", "Mail" : "ایمیل", - "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails.", + "You are reaching your mailbox quota limit for {account_email}" : "به حد مجاز صندوق پستی خود برای {account_email} نزدیک می‌شوید", + "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "شما در حال حاضر از {percentage} فضای ذخیره‌سازی صندوق پستی خود استفاده می‌کنید. لطفاً با حذف ایمیل‌های غیرضروری فضا خالی کنید.", + "{account_email} has been delegated to you" : "{account_email} به شما واگذار شده است", + "{user} delegated {account} to you" : "{user} حساب {account} را به شما واگذار کرد", + "{account_email} is no longer delegated to you" : "{account_email} دیگر به شما واگذار نشده است", + "{user} revoked delegation for {account}" : "{user} واگذاری حساب {account} را لغو کرد", + "Mail Application" : "برنامه ایمیل", "Mails" : "ایمیل‌ها", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "ایمیل فرستنده: %1$s در دفترچه آدرس نیست، اما نام فرستنده: %2$s در دفترچه آدرس با ایمیل زیر موجود است: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "ایمیل فرستنده: %1$s در دفترچه آدرس نیست، اما نام فرستنده: %2$s در دفترچه آدرس با ایمیل‌های زیر موجود است: %3$s", + "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "فرستنده از یک ایمیل سفارشی استفاده می‌کند: %1$s به جای ایمیل فرستنده: %2$s", + "Sent date is in the future" : "تاریخ ارسال در آینده است", + "Mail server marked this message as phishing attempt" : "سرور ایمیل این پیام را به عنوان تلاش فیشینگ علامت‌گذاری کرده است", + "Some addresses in this message are not matching the link text" : "برخی از آدرس‌های این پیام با متن لینک مطابقت ندارند", + "Reply-To email: %1$s is different from sender email: %2$s" : "ایمیل پاسخ: %1$s با ایمیل فرستنده: %2$s متفاوت است", + "Mail connection performance" : "عملکرد اتصال ایمیل", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "سرویس ایمیل کند شناسایی شد (%1$s) تلاش برای اتصال به چندین حساب به طور میانگین %2$s ثانیه برای هر حساب طول کشید", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "سرویس ایمیل کند شناسایی شد (%1$s) تلاش برای انجام عملیات لیست صندوق پستی روی چندین حساب به طور میانگین %2$s ثانیه برای هر حساب طول کشید", + "Mail Transport configuration" : "تنظیمات انتقال ایمیل", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "تنظیم app.mail.transport روی smtp تنظیم نشده است. این پیکربندی می‌تواند با اقدامات امنیتی مدرن ایمیل مانند SPF و DKIM مشکل ایجاد کند، زیرا ایمیل‌ها مستقیماً از سرور وب ارسال می‌شوند که اغلب به درستی برای این منظور پیکربندی نشده است. برای رفع این مشکل، پشتیبانی از انتقال ایمیل را متوقف کرده‌ایم. لطفاً app.mail.transport را از پیکربندی خود حذف کنید تا از انتقال SMTP استفاده کنید و این پیام را پنهان کنید. برای اطمینان از تحویل ایمیل، راه‌اندازی SMTP به درستی ضروری است.", + "Mail account parameters, aliases and preferences" : "پارامترهای حساب ایمیل، نام‌های مستعار و تنظیمات برگزیده", "💌 A mail app for Nextcloud" : "یک برنامه نامه پستی برای Nextcloud", - "Your session has expired. The page will be reloaded." : "Your session has expired. The page will be reloaded.", - "Drafts are saved in:" : "Drafts are saved in:", - "Sent messages are saved in:" : "Sent messages are saved in:", - "Deleted messages are moved in:" : "Deleted messages are moved in:", - "Archived messages are moved in:" : "Archived messages are moved in:", - "Snoozed messages are moved in:" : "Snoozed messages are moved in:", - "Junk messages are saved in:" : "Junk messages are saved in:", - "Connecting" : "Connecting", - "Reconnect Google account" : "Reconnect Google account", - "Sign in with Google" : "Sign in with Google", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 یک برنامه ایمیل برای Nextcloud**\n\n- **🚀 یکپارچگی با دیگر برنامه‌های Nextcloud!** در حال حاضر مخاطبین، تقویم و پرونده‌ها – موارد بیشتری در راه است.\n- **📥 چندین حساب ایمیل!** حساب شخصی و شرکتی؟ مشکلی نیست، به‌علاوه یک صندوق ورودی یکپارچه و دلپذیر. هر حساب IMAP را متصل کنید.\n- **🔒 ارسال و دریافت ایمیل‌های رمزنگاری‌شده!** با استفاده از افزونه عالی مرورگر [Mailvelope](https://mailvelope.com).\n- **🙈 چرخ را از نو اختراع نمی‌کنیم!** بر پایه کتابخانه‌های فوق‌العاده [Horde](https://www.horde.org).\n- **📬 می‌خواهید سرور ایمیل خودتان را میزبانی کنید؟** لازم نیست این را دوباره پیاده‌سازی کنیم، چون می‌توانید [Mail-in-a-Box](https://mailinabox.email) را راه‌اندازی کنید!\n\n## رتبه‌بندی هوش مصنوعی اخلاقی\n\n### صندوق ورودی اولویت‌دار\n\nمثبت:\n* نرم‌افزار آموزش و استنتاج این مدل متن‌باز است.\n* مدل به‌صورت محلی و بر پایه داده‌های خودِ کاربر ساخته و آموزش داده می‌شود.\n* داده‌های آموزشی برای کاربر در دسترس است و امکان بررسی یا اصلاح سوگیری یا بهینه‌سازی کارایی و مصرف CO2 را فراهم می‌کند.\n\n### خلاصه‌های رشته‌ها (انتخابی)\n\n**رتبه:** 🟢/🟡/🟠/🔴\n\nرتبه به بک‌اند پردازش متن نصب‌شده بستگی دارد. برای جزئیات [مرور کلی رتبه‌بندی](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) را ببینید.\n\nدرباره رتبه‌بندی هوش مصنوعی اخلاقی Nextcloud بیشتر در [وبلاگ ما](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) بدانید.", + "Your session has expired. The page will be reloaded." : "نشست شما منقضی شده است. صفحه دوباره بارگذاری خواهد شد.", + "Drafts are saved in:" : "پیش‌نویس‌ها در اینجا ذخیره می‌شوند:", + "Sent messages are saved in:" : "پیام‌های ارسالی در اینجا ذخیره می‌شوند:", + "Deleted messages are moved in:" : "پیام‌های حذف‌شده به اینجا منتقل می‌شوند:", + "Archived messages are moved in:" : "پیام‌های بایگانی‌شده به اینجا منتقل می‌شوند:", + "Snoozed messages are moved in:" : "پیام‌های به‌تعویق‌افتاده به اینجا منتقل می‌شوند:", + "Junk messages are saved in:" : "پیام‌های ناخواسته در اینجا ذخیره می‌شوند:", + "Connecting" : "در حال اتصال", + "Reconnect Google account" : "اتصال مجدد حساب گوگل", + "Sign in with Google" : "ورود با گوگل", + "Reconnect Microsoft account" : "اتصال مجدد حساب مایکروسافت", + "Sign in with Microsoft" : "ورود با مایکروسافت", "Save" : "ذخیره", "Connect" : "اتصال", - "Looking up configuration" : "Looking up configuration", - "Checking mail host connectivity" : "Checking mail host connectivity", - "Configuration discovery failed. Please use the manual settings" : "Configuration discovery failed. Please use the manual settings", - "Password required" : "رمز عبور لازم است", - "Testing authentication" : "Testing authentication", - "Awaiting user consent" : "Awaiting user consent", - "Account created. Please follow the pop-up instructions to link your Google account" : "Account created. Please follow the pop-up instructions to link your Google account", - "Loading account" : "Loading account", - "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "Account updated. Please follow the pop-up instructions to reconnect your Google account", - "Account updated" : "Account updated", - "IMAP server is not reachable" : "IMAP server is not reachable", - "SMTP server is not reachable" : "SMTP server is not reachable", - "IMAP username or password is wrong" : "IMAP username or password is wrong", - "SMTP username or password is wrong" : "SMTP username or password is wrong", - "IMAP connection failed" : "IMAP connection failed", - "SMTP connection failed" : "SMTP connection failed", - "Authorization pop-up closed" : "Authorization pop-up closed", - "Configuration discovery temporarily not available. Please try again later." : "Configuration discovery temporarily not available. Please try again later.", - "There was an error while setting up your account" : "There was an error while setting up your account", + "Looking up configuration" : "در حال جستجوی پیکربندی", + "Checking mail host connectivity" : "در حال بررسی اتصال میزبان ایمیل", + "Configuration discovery failed. Please use the manual settings" : "شناسایی پیکربندی انجام نشد. لطفاً از تنظیمات دستی استفاده کنید", + "Password required" : "رمز عبور الزامی است", + "Testing authentication" : "در حال بررسی احراز هویت", + "Awaiting user consent" : "در انتظار تأیید کاربر", + "Account created. Please follow the pop-up instructions to link your Google account" : "حساب ایجاد شد. لطفاً برای اتصال حساب Google خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "حساب ایجاد شد. لطفاً برای اتصال حساب Microsoft خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Loading account" : "در حال بارگذاری حساب", + "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "حساب به‌روزرسانی شد. لطفاً برای اتصال مجدد حساب Google خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "حساب به‌روزرسانی شد. لطفاً برای اتصال مجدد حساب Microsoft خود، دستورالعمل‌های پنجره بازشو را دنبال کنید", + "Account updated" : "حساب به‌روزرسانی شد", + "IMAP server is not reachable" : "سرور IMAP قابل دسترسی نیست", + "SMTP server is not reachable" : "سرور SMTP قابل دسترسی نیست", + "IMAP username or password is wrong" : "نام کاربری یا رمز عبور IMAP اشتباه است", + "SMTP username or password is wrong" : "نام کاربری یا رمز عبور SMTP اشتباه است", + "IMAP server denied authentication" : "سرور IMAP احراز هویت را رد کرد", + "SMTP server denied authentication" : "سرور SMTP احراز هویت را رد کرد", + "IMAP authentication error" : "خطای احراز هویت IMAP", + "SMTP authentication error" : "خطای احراز هویت SMTP", + "IMAP connection failed" : "اتصال IMAP ناموفق بود", + "SMTP connection failed" : "اتصال SMTP ناموفق بود", + "Authorization pop-up closed" : "پنجره مجوز بسته شد", + "Configuration discovery temporarily not available. Please try again later." : "شناسایی پیکربندی موقتاً در دسترس نیست. لطفاً بعداً دوباره تلاش کنید", + "There was an error while setting up your account" : "هنگام تنظیم حساب شما خطایی رخ داد", "Auto" : "خودکار", "Name" : "نام", - "Mail address" : "Mail address", + "Mail address" : "آدرس ایمیل", "name@example.org" : "name@example.org", - "Please enter an email of the format name@example.com" : "Please enter an email of the format name@example.com", - "Password" : "گذرواژه", - "Manual" : "کتابچه راهنمای", + "Please enter an email of the format name@example.com" : "لطفاً یک ایمیل با فرمت name@example.com وارد کنید", + "Password" : "رمز عبور", + "Enable mark as important classification" : "فعال‌سازی دسته‌بندی «علامت‌گذاری به عنوان مهم»", + "Manual" : "دستی", "IMAP Settings" : "تنظیمات IMAP", "IMAP Host" : "میزبان IMAP", "IMAP Security" : "امنیت IMAP", "None" : "هیچ‌کدام", "SSL/TLS" : "SSL/TLS", - "STARTTLS" : "شروع TLS", - "IMAP Port" : "پرت IMAP", + "STARTTLS" : "STARTTLS", + "IMAP Port" : "پورت IMAP", "IMAP User" : "کاربر IMAP", - "IMAP Password" : "گذرواژه IMAP", + "IMAP Password" : "رمز عبور IMAP", "SMTP Settings" : "تنظیمات SMTP", "SMTP Host" : "میزبان SMTP", "SMTP Security" : "امنیت SMTP", - "SMTP Port" : "درگاه SMTP", + "SMTP Port" : "پورت SMTP", "SMTP User" : "کاربر SMTP", "SMTP Password" : "رمز عبور SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google نیاز به احراز هویت OAuth دارد. اگر مدیر نکست‌کلود شما OAuth گوگل را پیکربندی نکرده است، می‌توانید به جای آن از رمز عبور برنامه Google استفاده کنید", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft نیاز به احراز هویت OAuth دارد. از مدیر نکست‌کلود خود بخواهید OAuth مایکروسافت را در تنظیمات مدیریت پیکربندی کند", "Account settings" : "تنظیمات حساب", - "Aliases" : "Aliases", - "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", + "Aliases" : "نام‌های مستعار", + "Alias to S/MIME certificate mapping" : "نگاشت نام مستعار به گواهی S/MIME", "Signature" : "امضا", - "A signature is added to the text of new messages and replies." : "یک امضا به متن پیامها و پاسخ های جدید اضافه می شود.", - "Writing mode" : "حالت نوشتن", - "Preferred writing mode for new messages and replies." : "حالت نوشتن برای پیام ها و پاسخ های جدید ترجیح داده شده است.", - "Default folders" : "Default folders", - "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages.", - "Automatic trash deletion" : "Automatic trash deletion", - "Days after which messages in Trash will automatically be deleted:" : "Days after which messages in Trash will automatically be deleted:", - "Autoresponder" : "Autoresponder", - "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days.", + "A signature is added to the text of new messages and replies." : "امضا به متن پیام‌های جدید و پاسخ‌ها اضافه می‌شود.", + "Writing mode" : "حالت نوشتار", + "Preferred writing mode for new messages and replies." : "حالت نوشتار ترجیحی برای پیام‌های جدید و پاسخ‌ها", + "Default folders" : "پوشه‌های پیش‌فرض", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "پوشه‌های مورد استفاده برای پیش‌نویس‌ها، پیام‌های ارسالی، پیام‌های حذف‌شده، پیام‌های بایگانی‌شده و پیام‌های ناخواسته", + "Automatic trash deletion" : "حذف خودکار زباله‌ها", + "Days after which messages in Trash will automatically be deleted:" : "تعداد روزهایی که پس از آن پیام‌های موجود در زباله‌دان به‌طور خودکار حذف می‌شوند:", + "Autoresponder" : "پاسخ‌دهنده خودکار", + "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "پاسخ خودکار به پیام‌های دریافتی. اگر کسی چندین پیام برای شما ارسال کند، این پاسخ خودکار حداکثر هر ۴ روز یک بار ارسال می‌شود.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "پاسخ‌دهنده خودکار از Sieve استفاده می‌کند، یک زبان اسکریپت‌نویسی که توسط بسیاری از ارائه‌دهندگان ایمیل پشتیبانی می‌شود. اگر مطمئن نیستید که ارائه‌دهنده شما از آن پشتیبانی می‌کند یا خیر، با ارائه‌دهنده خود بررسی کنید. اگر Sieve در دسترس است، روی دکمه کلیک کنید تا به تنظیمات بروید و آن را فعال کنید.", + "Go to Sieve settings" : "رفتن به تنظیمات Sieve", "Calendar settings" : "تنظیمات تقویم", - "Filters" : "Filters", - "Mail server" : "سرور پست الکترونیکی", - "Update alias" : "Update alias", - "Rename alias" : "Rename alias", - "Show update alias form" : "Show update alias form", - "Delete alias" : "Delete alias", - "Go back" : "برگرد", - "Change name" : "تغییر نام", + "Classification settings" : "تنظیمات طبقه‌بندی", + "Filters" : "فیلترها", + "Quick actions" : "اقدامات سریع", + "Sieve script editor" : "ویرایشگر اسکریپت Sieve", + "Mail server" : "سرور ایمیل", + "Sieve server" : "سرور Sieve", + "Folder search" : "جستجوی پوشه", "Email address" : "آدرس ایمیل", - "Add alias" : "Add alias", - "Create alias" : "Create alias", + "Update alias" : "به‌روزرسانی نام مستعار", + "Rename alias" : "تغییر نام مستعار", + "Show update alias form" : "نمایش فرم به‌روزرسانی نام مستعار", + "Delete alias" : "حذف نام مستعار", + "Go back" : "بازگشت", + "Change name" : "تغییر نام", + "Add alias" : "افزودن نام مستعار", + "Create alias" : "ایجاد نام مستعار", "Cancel" : "لغو", - "Could not update preference" : "Could not update preference", - "Mail settings" : "Mail settings", + "Search the body of messages in priority Inbox" : "جستجوی متن پیام‌ها در صندوق ورودی اولویت‌دار", + "Activate" : "فعال‌سازی", + "Make mails available to Context Chat" : "در دسترس قرار دادن ایمیل‌ها برای چت زمینه", + "Remind about messages that require a reply but received none" : "یادآوری درباره پیام‌هایی که نیاز به پاسخ دارند اما پاسخی دریافت نکرده‌اند", + "Highlight external addresses" : "برجسته‌سازی آدرس‌های خارجی", + "Could not update preference" : "امکان به‌روزرسانی تنظیمات وجود نداشت", + "Mail settings" : "تنظیمات ایمیل", "General" : "عمومی", - "Add mail account" : "حساب کاربری پست الکترونیکی اضافه کنید", + "Set as default mail app" : "تنظیم به عنوان برنامه پیش‌فرض ایمیل", + "{email} (delegated)" : "{email} (واگذار شده)", + "Add mail account" : "افزودن حساب ایمیل", "Appearance" : "ظاهر", + "Show all messages in thread" : "نمایش همه پیام‌ها در رشته", + "When off, only the selected message will be shown" : "وقتی خاموش است، فقط پیام انتخاب‌شده نمایش داده می‌شود", + "Sort favorites up" : "مرتب‌سازی موارد مورد علاقه در بالا", + "When on, favorite messages will be sorted to the top of folders" : "وقتی روشن است، پیام‌های مورد علاقه به بالای پوشه‌ها مرتب می‌شوند", "Layout" : "چیدمان", + "Vertical split" : "تقسیم عمودی", + "Horizontal split" : "تقسیم افقی", "List" : "فهرست", - "Sorting" : "مرتب سازی", - "Newest first" : "نخست جدیدترین", - "Oldest first" : "نخست قدیمی‌ترین", - "Shared with me" : "Shared with me", - "Privacy" : "محرمانگی", - "Security" : "امنیتی", + "Use compact mode" : "استفاده از حالت فشرده", + "Sorting" : "مرتب‌سازی", + "Newest first" : "جدیدترین‌ها اول", + "Oldest first" : "قدیمی‌ترین‌ها اول", + "New text block" : "بلوک متنی جدید", + "Title of the text block" : "عنوان بلوک متنی", + "Content of the text block" : "محتوای بلوک متنی", + "Ok" : "تأیید", + "Avatars from Gravatar and favicons" : "آواتارها از Gravatar و فاوآیکن‌ها", + "Reply position" : "موقعیت پاسخ", + "Top" : "بالا", + "Bottom" : "پایین", + "Text blocks" : "بلوک‌های متنی", + "Reusable pieces of text that can be inserted in messages" : "قطعات متنی قابل استفاده مجدد که می‌توان در پیام‌ها درج کرد", + "Shared with me" : "اشتراک‌گذاری شده با من", + "Privacy" : "حریم خصوصی", + "Data collection" : "جمع‌آوری داده‌ها", + "Allow the app to collect and process data locally to adapt to your preferences" : "اجازه دهید برنامه داده‌ها را به صورت محلی جمع‌آوری و پردازش کند تا با اولویت‌های شما تطبیق یابد", + "Always show images from" : "همیشه تصاویر را از نمایش بده", + "Security" : "امنیت", + "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "آدرس‌ها و دامنه‌های داخلی خود را مدیریت کنید تا مخاطبین شناسایی شده بدون علامت باقی بمانند", + "S/MIME" : "S/MIME", + "Manage certificates" : "مدیریت گواهی‌ها", + "Mailvelope" : "Mailvelope", + "Mailvelope is enabled for the current domain." : "Mailvelope برای دامنه فعلی فعال است.", + "Step 1" : "مرحله ۱", + "Install the browser extension" : "افزونه مرورگر را نصب کنید", + "Step 2" : "مرحله ۲", + "Enable for the current domain" : "برای دامنه فعلی فعال کنید", + "Assistance features" : "ویژگی‌های کمکی", + "Context Chat integration" : "یکپارچه‌سازی Context Chat", "Compose new message" : "نوشتن پیام جدید", "Newer message" : "پیام جدیدتر", - "Older message" : "پیام قدیمی تر", - "Toggle star" : "تعویض ستاره", - "Toggle unread" : "تغییر حالت خوانده نشده", - "Archive" : "آرشیو", + "Older message" : "پیام قدیمی‌تر", + "Toggle star" : "تغییر وضعیت ستاره", + "Toggle unread" : "تغییر وضعیت خوانده نشده", + "Archive" : "بایگانی", "Delete" : "حذف", "Search" : "جستجو", "Send" : "ارسال", "Refresh" : "تازه‌سازی", - "About" : "About", - "Ok" : "باشه", - "No certificate" : "No certificate", - "Certificate updated" : "Certificate updated", - "Could not update certificate" : "Could not update certificate", - "{commonName} - Valid until {expiryDate}" : "{commonName} - Valid until {expiryDate}", - "Select an alias" : "Select an alias", - "Update Certificate" : "Update Certificate", - "Encrypt with S/MIME and send later" : "Encrypt with S/MIME and send later", - "Encrypt with S/MIME and send" : "Encrypt with S/MIME and send", - "Encrypt with Mailvelope and send later" : "Encrypt with Mailvelope and send later", - "Encrypt with Mailvelope and send" : "Encrypt with Mailvelope and send", - "Send later" : "Send later", - "Message {id} could not be found" : "Message {id} could not be found", - "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted.", - "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "Any existing formatting (for example bold, italic, underline or inline images) will be removed.", - "Turn off formatting" : "Turn off formatting", - "Turn off and remove formatting" : "Turn off and remove formatting", - "Keep formatting" : "Keep formatting", + "About" : "درباره", + "Acknowledgements" : "قدردانی‌ها", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "این برنامه شامل CKEditor است، یک ویرایشگر متن‌باز. حق نشر © مشارکت‌کنندگان CKEditor. تحت مجوز GPLv2.", + "Automatically create tentative appointments in calendar" : "ایجاد خودکار قرارهای موقت در تقویم", + "No certificate" : "بدون گواهی", + "Certificate updated" : "گواهی به‌روزرسانی شد", + "Could not update certificate" : "امکان به‌روزرسانی گواهی وجود نداشت", + "{commonName} - Valid until {expiryDate}" : "{commonName} - معتبر تا {expiryDate}", + "Select an alias" : "یک نام مستعار انتخاب کنید", + "Select certificates" : "گواهی‌ها را انتخاب کنید", + "Update Certificate" : "به‌روزرسانی گواهی", + "The selected certificate is not trusted by the server. Recipients might not be able to verify your signature." : "گواهی انتخاب‌شده توسط سرور تأیید نشده است. ممکن است دریافت‌کنندگان نتوانند امضای شما را تأیید کنند.", + "Encrypt with S/MIME and send later" : "رمزگذاری با S/MIME و ارسال بعداً", + "Encrypt with S/MIME and send" : "رمزگذاری با S/MIME و ارسال", + "Encrypt with Mailvelope and send later" : "رمزگذاری با Mailvelope و ارسال بعداً", + "Encrypt with Mailvelope and send" : "رمزگذاری با Mailvelope و ارسال", + "Send later" : "ارسال بعداً", + "Message {id} could not be found" : "پیام {id} یافت نشد", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "گزینه امضا یا رمزگذاری با S/MIME انتخاب شده است، اما گواهی برای نام مستعار انتخاب‌شده نداریم. پیام امضا یا رمزگذاری نخواهد شد.", + "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "هرگونه قالب‌بندی موجود (مانند پررنگ، کج، زیرخط یا تصاویر درون‌خطی) حذف خواهد شد.", + "Turn off formatting" : "غیرفعال کردن قالب‌بندی", + "Turn off and remove formatting" : "غیرفعال کردن و حذف قالب‌بندی", + "Keep formatting" : "حفظ قالب‌بندی", "From" : "از", - "Select account" : "حساب را انتخاب کنید", + "Select account" : "انتخاب حساب", "To" : "به", - "Cc" : "Cc", - "Bcc" : "Bcc", + "Cc/Bcc" : "رونوشت/رونوشت پنهان", + "Select recipient" : "انتخاب دریافت‌کننده", + "Contact or email address …" : "مخاطب یا نشانی ایمیل …", + "Cc" : "رونوشت", + "Bcc" : "رونوشت پنهان", "Subject" : "موضوع", - "This message came from a noreply address so your reply will probably not be read." : "این پیام از یک آدرس خیلی روشن آمده است بنابراین پاسخ شما احتمالاً خوانده نمی شود.", - "The following recipients do not have a S/MIME certificate: {recipients}." : "The following recipients do not have a S/MIME certificate: {recipients}.", - "The following recipients do not have a PGP key: {recipients}." : "The following recipients do not have a PGP key: {recipients}.", - "Error saving draft" : "Error saving draft", - "Draft saved" : "پیش نویس ذخیره شد", - "Save draft" : "Save draft", - "Discard & close draft" : "Discard & close draft", - "Enable formatting" : "قالب بندی را فعال کنید", - "Disable formatting" : "Disable formatting", - "Upload attachment" : "پیوست را بارگیری کنید", - "Add attachment from Files" : "پیوست را از پرونده ها اضافه کنید", - "Smart picker" : "Smart picker", - "Request a read receipt" : "Request a read receipt", - "Sign message with S/MIME" : "Sign message with S/MIME", - "Encrypt message with S/MIME" : "Encrypt message with S/MIME", - "Encrypt message with Mailvelope" : "Encrypt message with Mailvelope", - "Send now" : "Send now", - "Tomorrow morning" : "Tomorrow morning", - "Tomorrow afternoon" : "Tomorrow afternoon", - "Monday morning" : "Monday morning", - "Custom date and time" : "Custom date and time", - "Enter a date" : "تاریخ را وارد کنید", - "Choose" : "انتخاب کنید", + "Subject …" : "موضوع …", + "This message came from a noreply address so your reply will probably not be read." : "این پیام از یک آدرس بدون پاسخ ارسال شده است، بنابراین احتمالاً پاسخ شما خوانده نخواهد شد.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "دریافت‌کنندگان زیر گواهی S/MIME ندارند: {recipients}.", + "The following recipients do not have a PGP key: {recipients}." : "دریافت‌کنندگان زیر کلید PGP ندارند: {recipients}.", + "Write message …" : "نوشتن پیام …", + "Saving draft …" : "در حال ذخیره پیش‌نویس …", + "Error saving draft" : "خطا در ذخیره پیش‌نویس", + "Draft saved" : "پیش‌نویس ذخیره شد", + "Save draft" : "ذخیره پیش‌نویس", + "Discard & close draft" : "کنار گذاشتن و بستن پیش‌نویس", + "Enable formatting" : "فعال‌سازی قالب‌بندی", + "Disable formatting" : "غیرفعال‌سازی قالب‌بندی", + "Upload attachment" : "بارگذاری پیوست", + "Add attachment from Files" : "افزودن پیوست از Files", + "Smart picker" : "انتخاب‌گر هوشمند", + "Request a read receipt" : "درخواست رسید خوانده‌شدن", + "Sign message with S/MIME" : "امضای پیام با S/MIME", + "Encrypt message with S/MIME" : "رمزگذاری پیام با S/MIME", + "Encrypt message with Mailvelope" : "رمزگذاری پیام با Mailvelope", + "Send now" : "ارسال اکنون", + "Tomorrow morning" : "فردا صبح", + "Tomorrow afternoon" : "فردا بعدازظهر", + "Monday morning" : "صبح دوشنبه", + "Custom date and time" : "تاریخ و ساعت دلخواه", + "Enter a date" : "یک تاریخ وارد کنید", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "پرونده ای را برای اضافه کردن به عنوان پیوست انتخاب کنید", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "انتخاب فایل", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], - "Untitled message" : "Untitled message", - "Expand composer" : "Expand composer", - "Close composer" : "Close composer", - "Confirm" : "تائید", + "Untitled message" : "پیام بدون عنوان", + "Expand composer" : "باز کردن ویرایشگر", + "Close composer" : "بستن ویرایشگر", + "Confirm" : "تأیید", + "Delegate access" : "واگذاری دسترسی", + "Revoke" : "لغو", + "{userId} will no longer be able to act on your behalf" : "{userId} دیگر نمی‌تواند از طرف شما اقدام کند", + "Could not fetch delegates" : "امکان دریافت نمایندگان وجود نداشت", + "Could not delegate access" : "امکان واگذاری دسترسی وجود نداشت", + "Could not revoke delegation" : "امکان لغو واگذاری وجود نداشت", + "Delegation" : "واگذاری", + "Allow users to send, receive, and delete mail on your behalf" : "به کاربران اجازه دهید از طرف شما ایمیل ارسال، دریافت و حذف کنند", + "Revoke access" : "لغو دسترسی", + "Add delegate" : "افزودن نماینده", + "Select a user" : "یک کاربر را انتخاب کنید", + "They will be able to send, receive, and delete mail on your behalf" : "آنها می‌توانند از طرف شما ایمیل ارسال، دریافت و حذف کنند", + "Revoke access?" : "لغو دسترسی؟", + "Tag: {name} deleted" : "برچسب: {name} حذف شد", + "An error occurred, unable to delete the tag." : "خطایی رخ داد، امکان حذف برچسب وجود ندارد.", + "The tag will be deleted from all messages." : "برچسب از همه پیام‌ها حذف خواهد شد.", "Plain text" : "متن ساده", "Rich text" : "متن غنی", "No messages in this folder" : "هیچ پیامی در این پوشه وجود ندارد", - "No messages" : "No messages", - "Blind copy recipients only" : "فقط گیرندگان کپی کور", - "No subject" : "No subject", - "Later today – {timeLocale}" : "Later today – {timeLocale}", - "Set reminder for later today" : "Set reminder for later today", - "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", - "Set reminder for tomorrow" : "Set reminder for tomorrow", - "This weekend – {timeLocale}" : "This weekend – {timeLocale}", - "Set reminder for this weekend" : "Set reminder for this weekend", - "Next week – {timeLocale}" : "Next week – {timeLocale}", - "Set reminder for next week" : "Set reminder for next week", - "Could not delete message" : "Could not delete message", - "Could not archive message" : "Could not archive message", - "Thread was snoozed" : "Thread was snoozed", - "Could not snooze thread" : "Could not snooze thread", - "Encrypted message" : "Encrypted message", - "This message is unread" : "This message is unread", - "Unfavorite" : "ناخوشایند", - "Favorite" : "مورد‌ ‌علاقه‌", - "Unread" : "Unread", - "Read" : "خواندن", - "Unimportant" : "Unimportant", - "Mark not spam" : "Mark not spam", - "Mark as spam" : "Mark as spam", - "Edit tags" : "ویرایش تگ ها", + "No messages" : "هیچ پیامی وجود ندارد", + "Choose" : "انتخاب", + "Blind copy recipients only" : "فقط دریافت‌کنندگان کپی مخفی", + "No subject" : "بدون موضوع", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}پیش‌نویس:{markup-end} {subject}", + "Later today – {timeLocale}" : "اواخر امروز – {timeLocale}", + "Set reminder for later today" : "تنظیم یادآوری برای امروز بعداً", + "Tomorrow – {timeLocale}" : "فردا – {timeLocale}", + "Set reminder for tomorrow" : "تنظیم یادآوری برای فردا", + "This weekend – {timeLocale}" : "آخر این هفته – {timeLocale}", + "Set reminder for this weekend" : "تنظیم یادآوری برای این آخر هفته", + "Next week – {timeLocale}" : "هفته آینده – {timeLocale}", + "Set reminder for next week" : "تنظیم یادآوری برای هفته آینده", + "Could not apply tag, configured tag not found" : "امکان اعمال برچسب وجود نداشت، برچسب پیکربندی شده یافت نشد", + "Could not move thread, destination mailbox not found" : "امکان جابجایی موضوع وجود نداشت، صندوق پستی مقصد یافت نشد", + "Could not execute quick action" : "امکان اجرای اقدام سریع وجود نداشت", + "Quick action executed" : "اقدام سریع اجرا شد", + "No trash folder configured" : "هیچ پوشه زباله‌ای پیکربندی نشده است", + "Could not delete message" : "امکان حذف پیام وجود نداشت", + "Could not archive message" : "امکان بایگانی پیام وجود نداشت", + "Thread was snoozed" : "موضوع به تعویق افتاد", + "Could not snooze thread" : "امکان snooze کردن موضوع وجود نداشت", + "Thread was unsnoozed" : "موضوع از حالت snooze خارج شد", + "Could not unsnooze thread" : "امکان unsnooze کردن موضوع وجود نداشت", + "This summary was AI generated" : "این خلاصه توسط هوش مصنوعی تولید شده است", + "Encrypted message" : "پیام رمزگذاری‌شده", + "This message is unread" : "این پیام خوانده نشده است", + "Unfavorite" : "حذف از علاقه‌مندی‌ها", + "Favorite" : "افزودن به علاقه‌مندی‌ها", + "Unread" : "خوانده نشده", + "Read" : "خوانده شده", + "Unimportant" : "غیرمهم", + "Mark not spam" : "علامت‌گذاری به عنوان غیر هرزنامه", + "Mark as spam" : "علامت‌گذاری به عنوان هرزنامه", + "Edit tags" : "ویرایش برچسب‌ها", "Snooze" : "Snooze", - "Move thread" : "Move thread", - "Archive thread" : "Archive thread", - "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", + "Unsnooze" : "Unsnooze", + "Move thread" : "انتقال موضوع", + "Move Message" : "انتقال پیام", + "Archive thread" : "بایگانی موضوع", + "Archive message" : "بایگانی پیام", "More actions" : "اقدامات بیشتر", "Back" : "بازگشت", - "Set custom snooze" : "Set custom snooze", - "Edit as new message" : "Edit as new message", - "Create task" : "وظیفه ایجاد کنید", - "Download message" : "Download message", - "Load more" : "Load more", + "Set custom snooze" : "تنظیم snooze سفارشی", + "Edit as new message" : "ویرایش به عنوان پیام جدید", + "Reply with meeting" : "پاسخ با جلسه", + "Create task" : "ایجاد وظیفه", + "Download message" : "دانلود پیام", + "Delete thread" : "حذف موضوع", + "Delete message" : "حذف پیام", + "Back to all actions" : "بازگشت به همه اقدامات", + "Manage quick actions" : "مدیریت اقدامات سریع", + "Load more" : "بارگذاری بیشتر", "_Mark {number} read_::_Mark {number} read_" : ["Mark {number} read","Mark {number} read"], "_Mark {number} unread_::_Mark {number} unread_" : ["Mark {number} unread","Mark {number} unread"], "_Mark {number} as important_::_Mark {number} as important_" : ["Mark {number} as important","Mark {number} as important"], @@ -220,373 +334,591 @@ "_Unfavorite {number}_::_Unfavorite {number}_" : ["Unfavorite {number}","Unfavorite {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Favorite {number}","Favorite {number}"], "_Unselect {number}_::_Unselect {number}_" : ["Unselect {number}","Unselect {number}"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Mark {number} as spam","Mark {number} as spam"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Mark {number} as not spam","Mark {number} as not spam"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Edit tags for {number}","Edit tags for {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Move {number} thread","Move {number} threads"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Forward {number} as attachment","Forward {number} as attachment"], - "Mark as unread" : "علامت به عنوان خوانده‌نشده", - "Mark as read" : "علامت به عنوان خوانده‌شده", - "Report this bug" : "گزارش این اشکال", - "Event created" : "Event created", - "Could not create event" : "رویداد ایجاد نشد", - "Create event" : "Create event", + "Mark as unread" : "علامت‌گذاری به عنوان خوانده نشده", + "Mark as read" : "علامت‌گذاری به عنوان خوانده شده", + "Mark as unimportant" : "علامت‌گذاری به عنوان غیرمهم", + "Mark as important" : "علامت‌گذاری به عنوان مهم", + "Report this bug" : "گزارش این باگ", + "This description was generated by AI." : "این توضیحات توسط هوش مصنوعی تولید شده است", + "Event created" : "رویداد ایجاد شد", + "Could not create event" : "امکان ایجاد رویداد وجود ندارد", + "Create event" : "ایجاد رویداد", + "Title" : "عنوان", "All day" : "تمام روز", - "Attendees" : "شرکت کنندگان", - "Select calendar" : "Select calendar", - "Description" : "شرح", - "Create" : "ساخت", - "This event was updated" : "This event was updated", - "{attendeeName} accepted your invitation" : "{attendeeName} accepted your invitation", - "{attendeeName} tentatively accepted your invitation" : "{attendeeName} tentatively accepted your invitation", - "{attendeeName} declined your invitation" : "{attendeeName} declined your invitation", - "{attendeeName} reacted to your invitation" : "{attendeeName} reacted to your invitation", - "Failed to save your participation status" : "Failed to save your participation status", - "You accepted this invitation" : "You accepted this invitation", - "You tentatively accepted this invitation" : "You tentatively accepted this invitation", - "You declined this invitation" : "You declined this invitation", - "You already reacted to this invitation" : "You already reacted to this invitation", - "You have been invited to an event" : "You have been invited to an event", - "This event was cancelled" : "This event was cancelled", - "Save to" : "Save to", + "Attendees" : "شرکت‌کنندگان", + "You can only invite attendees if your account has an email address set" : "تنها در صورتی می‌توانید شرکت‌کنندگان دعوت کنید که حساب شما یک آدرس ایمیل تنظیم شده داشته باشد", + "Select calendar" : "انتخاب تقویم", + "Description" : "توضیحات", + "Create" : "ایجاد", + "This event was updated" : "این رویداد به‌روزرسانی شد", + "{attendeeName} accepted your invitation" : "{attendeeName} دعوت شما را پذیرفت", + "{attendeeName} tentatively accepted your invitation" : "{attendeeName} دعوت شما را به‌طور موقت پذیرفت", + "{attendeeName} declined your invitation" : "{attendeeName} دعوت شما را رد کرد", + "{attendeeName} reacted to your invitation" : "{attendeeName} به دعوت شما واکنش نشان داد", + "Failed to save your participation status" : "ذخیره وضعیت مشارکت شما ناموفق بود", + "You accepted this invitation" : "شما این دعوت را پذیرفتید", + "You tentatively accepted this invitation" : "شما این دعوت را به‌طور موقت پذیرفتید", + "You declined this invitation" : "شما این دعوت را رد کردید", + "You already reacted to this invitation" : "شما قبلاً به این دعوت واکنش نشان داده‌اید", + "You have been invited to an event" : "شما به یک رویداد دعوت شده‌اید", + "This event was cancelled" : "این رویداد لغو شد", + "Save to" : "ذخیره در", "Select" : "انتخاب", "Comment" : "نظر", - "Accept" : "تایید", - "Decline" : "کاهش می یابد", - "Tentatively accept" : "Tentatively accept", - "More options" : "More options", - "individual" : "individual", - "domain" : "domain", + "Accept" : "پذیرش", + "Decline" : "رد", + "Tentatively accept" : "پذیرش موقت", + "More options" : "گزینه‌های بیشتر", + "This message has an attached invitation but the invitation dates are in the past" : "این پیام یک دعوتنامه پیوست دارد اما تاریخ‌های دعوت در گذشته است", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "این پیام یک دعوتنامه پیوست دارد اما دعوتنامه شامل شرکتی نیست که با هیچ آدرس ایمیل حساب پیکربندی شده مطابقت داشته باشد", + "Could not remove internal address {sender}" : "امکان حذف آدرس داخلی {sender} وجود ندارد", + "Could not add internal address {address}" : "امکان افزودن آدرس داخلی {address} وجود ندارد", + "individual" : "فردی", + "domain" : "دامنه", "Remove" : "حذف", - "Itinerary for {type} is not supported yet" : "برنامه سفر برای {نوع yet هنوز پشتیبانی نمی شود", - "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "You are not allowed to move this message to the archive folder and/or delete this message from the current folder", - "Last hour" : "Last hour", - "Today" : "امروز.", + "Add internal address" : "افزودن آدرس داخلی", + "Add internal email or domain" : "افزودن ایمیل یا دامنه داخلی", + "Itinerary for {type} is not supported yet" : "برنامه سفر برای {type} هنوز پشتیبانی نمی‌شود", + "To archive a message please configure an archive folder in account settings" : "برای بایگانی یک پیام، لطفاً یک پوشه بایگانی در تنظیمات حساب پیکربندی کنید", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "شما مجاز به انتقال این پیام به پوشه بایگانی و/یا حذف این پیام از پوشه فعلی نیستید", + "Your IMAP server does not support storing the seen/unseen state." : "سرور IMAP شما از ذخیره وضعیت دیده/دیده نشده پشتیبانی نمی‌کند", + "Could not mark message as seen/unseen" : "امکان علامت‌گذاری پیام به‌عنوان دیده/دیده نشده وجود ندارد", + "Last hour" : "ساعت گذشته", + "Today" : "امروز", + "Yesterday" : "دیروز", "Last week" : "هفته گذشته", "Last month" : "ماه گذشته", - "Choose target folder" : "پوشهٔ هدف را انتخاب کنید", - "No more submailboxes in here" : "No more submailboxes in here", - "Favorites" : "علاقه مندی ها", - "Important info" : "Important info", - "Other" : "دیگر", - "Could not send mdn" : "Could not send mdn", - "The sender of this message has asked to be notified when you read this message." : "The sender of this message has asked to be notified when you read this message.", - "Notify the sender" : "Notify the sender", - "You sent a read confirmation to the sender of this message." : "You sent a read confirmation to the sender of this message.", - "Message was snoozed" : "Message was snoozed", - "Could not snooze message" : "Could not snooze message", - "Forward" : "فرستادن", - "Move message" : "Move message", + "Could not open folder" : "امکان باز کردن پوشه وجود ندارد", + "Loading messages …" : "در حال بارگذاری پیام‌ها …", + "Indexing your messages. This can take a bit longer for larger folders." : "در حال نمایه‌سازی پیام‌های شما. این فرآیند برای پوشه‌های بزرگ‌تر ممکن است کمی بیشتر طول بکشد", + "Choose target folder" : "انتخاب پوشه مقصد", + "No more submailboxes in here" : "زیرصندوق پستی دیگری در اینجا وجود ندارد", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "پیام‌ها به‌طور خودکار با استفاده از هوش مصنوعی به‌عنوان مهم علامت‌گذاری می‌شوند. سیستم از پیام‌هایی که با آن‌ها تعامل دارید یا به‌عنوان مهم علامت‌گذاری می‌کنید، یاد می‌گیرد. در ابتدا ممکن است مجبور باشید اهمیت را به‌صورت دستی تغییر دهید تا به سیستم آموزش دهید، اما با گذشت زمان بهبود می‌یابد", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "پیام‌هایی که به‌عنوان موردعلاقه علامت‌گذاری کرده‌اید، در بالای پوشه‌ها نمایش داده می‌شوند. می‌توانید این رفتار را در تنظیمات برنامه غیرفعال کنید", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "هوش مصنوعی پیام‌های ارسالی شما را که احتمالاً نیاز به پاسخ دارند اما پس از چند روز پاسخی دریافت نکرده‌اند، شناسایی کرده و در اینجا نمایش می‌دهد", + "Favorites" : "موارد موردعلاقه", + "Favorites info" : "اطلاعات موارد موردعلاقه", + "Load more favorites" : "بارگذاری موارد موردعلاقه بیشتر", + "Follow up" : "پیگیری", + "Follow up info" : "اطلاعات پیگیری", + "Load more follow ups" : "بارگذاری موارد پیگیری بیشتر", + "Important info" : "اطلاعات مهم", + "Load more important messages" : "بارگذاری پیام‌های مهم بیشتر", + "Other" : "سایر", + "Load more other messages" : "بارگذاری سایر پیام‌ها بیشتر", + "Could not send mdn" : "ارسال MDN انجام نشد", + "The sender of this message has asked to be notified when you read this message." : "فرستنده این پیام درخواست کرده است که هنگام خواندن این پیام مطلع شود", + "Notify the sender" : "اطلاع‌رسانی به فرستنده", + "You sent a read confirmation to the sender of this message." : "شما یک تأییدیه خواندن به فرستنده این پیام ارسال کردید", + "Message was snoozed" : "پیام به تعویق افتاد", + "Could not snooze message" : "به تعویق انداختن پیام انجام نشد", + "Message was unsnoozed" : "پیام از تعویق خارج شد", + "Could not unsnooze message" : "خارج کردن پیام از تعویق انجام نشد", + "Direct link copied to clipboard" : "لینک مستقیم در کلیپ‌بورد کپی شد", + "Forward" : "ارسال به جلو", + "Link copied" : "پیوند کپی شد", + "Move message" : "انتقال پیام", "Translate" : "ترجمه", - "Forward message as attachment" : "Forward message as attachment", - "View source" : "View source", - "Download thread data for debugging" : "Download thread data for debugging", - "Message body" : "Message body", - "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!", - "Unnamed" : "بی نام", - "Embedded message" : "پیام درج شده", - "calendar imported" : "calendar imported", - "Choose a folder to store the attachment in" : "لطفا پوشه ای را برای ذخیره سازی ضمیمه انتخاب کنید", - "Import into calendar" : "وارد تقویم شوید", - "Download attachment" : "پیوست را بارگیری کنید", - "Save to Files" : "ذخیره در پرونده ها", - "View fewer attachments" : "View fewer attachments", - "Choose a folder to store the attachments in" : "پوشه ای را برای ذخیره کردن پیوست ها انتخاب کنید", - "Save all to Files" : "ذخیره همه در پرونده ها", - "Download Zip" : "Download Zip", + "Forward message as attachment" : "ارسال پیام به‌عنوان پیوست", + "View source" : "مشاهده منبع", + "Print message" : "چاپ پیام", + "Create mail filter" : "ایجاد فیلتر ایمیل", + "Download thread data for debugging" : "دانلود داده‌های موضوع برای اشکال‌زدایی", + "Suggested replies are using AI" : "پاسخ‌های پیشنهادی با استفاده از هوش مصنوعی هستند", + "Message body" : "بدنه پیام", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "هشدار: امضای S/MIME این پیام تأیید نشده است. ممکن است فرستنده هویت شخص دیگری را جعل کند!", + "AI info" : "اطلاعات هوش مصنوعی", + "Unnamed" : "بی‌نام", + "Embedded message" : "پیام جاسازی‌شده", + "Attachment saved to Files" : "پیوست در Files ذخیره شد", + "Attachment could not be saved" : "پیوست ذخیره نشد", + "calendar imported" : "تقویم وارد شد", + "Choose a folder to store the attachment in" : "پوشه‌ای برای ذخیره پیوست انتخاب کنید", + "Import into calendar" : "وارد کردن به تقویم", + "Download attachment" : "دانلود پیوست", + "Save to Files" : "ذخیره در Files", + "Attachments saved to Files" : "پیوست‌ها در Files ذخیره شدند", + "Error while saving attachments" : "خطا در ذخیره پیوست‌ها", + "View fewer attachments" : "مشاهده پیوست‌های کمتر", + "Choose a folder to store the attachments in" : "پوشه‌ای برای ذخیره پیوست‌ها انتخاب کنید", + "Save all to Files" : "ذخیره همه در Files", + "Download Zip" : "دانلود Zip", "_View {count} more attachment_::_View {count} more attachments_" : ["View {count} more attachment","View {count} more attachments"], - "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "This message is encrypted with PGP. Install Mailvelope to decrypt it.", - "The images have been blocked to protect your privacy." : "تصاویر برای محافظت از حریم خصوصی شما مسدود شده اند.", + "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "این پیام با PGP رمزگذاری شده است. برای رمزگشایی، Mailvelope را نصب کنید.", + "The images have been blocked to protect your privacy." : "تصاویر برای حفظ حریم خصوصی شما مسدود شده‌اند.", "Show images" : "نمایش تصاویر", - "Show images temporarily" : "Show images temporarily", - "Always show images from {sender}" : "Always show images from {sender}", - "Always show images from {domain}" : "Always show images from {domain}", - "Message frame" : "Message frame", - "Quoted text" : "Quoted text", + "Show images temporarily" : "نمایش موقت تصاویر", + "Always show images from {sender}" : "همیشه تصاویر از {sender} نمایش داده شود", + "Always show images from {domain}" : "همیشه تصاویر از {domain} نمایش داده شود", + "Message frame" : "قاب پیام", + "Quoted text" : "متن نقل‌قول شده", "Move" : "انتقال", - "Moving" : "Moving", - "Moving thread" : "Moving thread", - "Moving message" : "Moving message", - "Remove account" : "حذف حساب کاربری", - "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", - "Remove {email}" : "Remove {email}", - "Provisioned account is disabled" : "Provisioned account is disabled", - "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn.", + "Moving" : "در حال انتقال", + "Moving thread" : "در حال انتقال موضوع", + "Moving message" : "در حال انتقال پیام", + "This account cannot connect" : "این حساب نمی‌تواند متصل شود", + "Connection failed. Please verify your information and try again" : "اتصال ناموفق بود. لطفاً اطلاعات خود را بررسی کرده و دوباره تلاش کنید", + "Change password" : "تغییر گذرواژه", + "Used quota: {quota}% ({limit})" : "سهمیه استفاده شده: {quota}% ({limit})", + "Used quota: {quota}%" : "سهمیه استفاده شده: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "امکان ایجاد صندوق پستی وجود ندارد. احتمالاً نام شامل کاراکترهای نامعتبر است. لطفاً نام دیگری انتخاب کنید.", + "Remove account" : "حذف حساب", + "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "حساب {email} و داده‌های ایمیل ذخیره‌شده از نکست‌کلود حذف می‌شود، اما از ارائه‌دهنده ایمیل شما حذف نمی‌شود.", + "Remove {email}" : "حذف {email}", + "could not delete account" : "امکان حذف حساب وجود ندارد", + "Provisioned account is disabled" : "حساب تأمین‌شده غیرفعال است", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "لطفاً با استفاده از رمز عبور وارد شوید تا این حساب فعال شود. نشست فعلی از احراز هویت بدون رمز عبور مانند SSO یا WebAuthn استفاده می‌کند.", + "Delegate account" : "حساب نماینده", + "Show only subscribed folders" : "نمایش فقط پوشه‌های مشترک", + "Add folder" : "افزودن پوشه", "Folder name" : "نام پوشه", - "Saving" : "درحال ذخیره", - "Move up" : "Move up", - "Move down" : "حرکت به پایین", - "Show all folders" : "نمایش همه پوشه ها", - "Collapse folders" : "پوشه ها را جمع کنید", + "Saving" : "در حال ذخیره‌سازی", + "Move up" : "انتقال به بالا", + "Move down" : "انتقال به پایین", + "Show all subscribed folders" : "نمایش همه پوشه‌های مشترک", + "Show all folders" : "نمایش همه پوشه‌ها", + "Collapse folders" : "جمع‌کردن پوشه‌ها", "_{total} message_::_{total} messages_" : ["{total} message","{total} messages"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} unread of {total}","{unread} unread of {total}"], "Loading …" : "بارگیری", - "All messages in mailbox will be deleted." : "All messages in mailbox will be deleted.", - "Clear mailbox {name}" : "Clear mailbox {name}", + "All messages in mailbox will be deleted." : "همه پیام‌های صندوق پستی حذف خواهند شد.", + "Clear mailbox {name}" : "پاک کردن صندوق پستی {name}", + "Clear folder" : "پاک کردن پوشه", + "The folder and all messages in it will be deleted." : "پوشه و همه پیام‌های داخل آن حذف خواهند شد.", "Delete folder" : "حذف پوشه", - "An error occurred, unable to rename the mailbox." : "An error occurred, unable to rename the mailbox.", - "Mark all as read" : "علامت همه به عنوان خوانده‌شده", - "Add subfolder" : "زیر پوشه را اضافه کنید", - "Rename" : "تغییرنام", - "Move folder" : "Move folder", - "Clear cache" : "پاک‌سازی انباره", - "Clear locally cached data, in case there are issues with synchronization." : "Clear locally cached data, in case there are issues with synchronization.", - "Subscribed" : "Subscribed", - "Sync in background" : "Sync in background", - "Delete all messages" : "حذف تمام پیام‌ها", - "Outbox" : "Outbox", + "Delete folder {name}" : "حذف پوشه {name}", + "An error occurred, unable to rename the mailbox." : "خطایی رخ داد، امکان تغییر نام صندوق پستی وجود ندارد.", + "Please wait 10 minutes before repairing again" : "لطفاً ۱۰ دقیقه قبل از تعمیر مجدد صبر کنید", + "Mark all as read" : "علامت‌گذاری همه به عنوان خوانده‌شده", + "Add subfolder" : "افزودن زیرپوشه", + "Rename" : "تغییر نام", + "Move folder" : "انتقال پوشه", + "Repair folder" : "تعمیر پوشه", + "Clear cache" : "پاک کردن حافظه نهان", + "Clear locally cached data, in case there are issues with synchronization." : "پاک کردن داده‌های ذخیره‌شده محلی، در صورت بروز مشکل در همگام‌سازی", + "Subscribed" : "مشترک شده", + "Sync in background" : "همگام‌سازی در پس‌زمینه", + "Delete all messages" : "حذف همه پیام‌ها", + "Outbox" : "صندوق خروجی", + "Translate this message to {language}" : "ترجمه این پیام به {language}", "New message" : "پیام جدید", - "Edit message" : "Edit message", - "Draft" : "Draft", + "Edit message" : "ویرایش پیام", + "Draft" : "پیش‌نویس", "Reply" : "پاسخ", - "Message saved" : "Message saved", - "Failed to save message" : "Failed to save message", - "Failed to save draft" : "Failed to save draft", - "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses.", - "Message discarded" : "Message discarded", - "Could not discard message" : "Could not discard message", - "Minimize composer" : "Minimize composer", - "Error sending your message" : "خطایی در ارسال پیام شما", - "Retry" : "تلاش دوباره", - "Warning sending your message" : "Warning sending your message", - "Send anyway" : "Send anyway", - "Autoresponder off" : "Autoresponder off", - "Autoresponder on" : "Autoresponder on", - "First day" : "First day", - "Last day (optional)" : "Last day (optional)", - "${subject} will be replaced with the subject of the message you are responding to" : "${subject} will be replaced with the subject of the message you are responding to", + "Message saved" : "پیام ذخیره شد", + "Failed to save message" : "ذخیره پیام ناموفق بود", + "Failed to save draft" : "ذخیره پیش‌نویس ناموفق بود", + "attachment" : "پیوست", + "attached" : "پیوست شده", + "No \"sent\" folder configured. Please pick one in the account settings." : "پوشه «ارسال‌شده» پیکربندی نشده است. لطفاً یکی را در تنظیمات حساب انتخاب کنید.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "شما در حال ارسال به تعداد زیادی گیرنده در «به» و/یا «رونوشت» هستید. برای مخفی کردن آدرس گیرندگان از «رونوشت مخفی» استفاده کنید.", + "Your message has no subject. Do you want to send it anyway?" : "پیام شما موضوع ندارد. آیا می‌خواهید آن را ارسال کنید؟", + "You mentioned an attachment. Did you forget to add it?" : "شما به یک پیوست اشاره کردید. آیا فراموش کرده‌اید آن را اضافه کنید؟", + "Message discarded" : "پیام کنار گذاشته شد", + "Could not discard message" : "امکان کنار گذاشتن پیام وجود نداشت", + "Maximize composer" : "بزرگ‌نمایی ویرایشگر", + "Show recipient details" : "نمایش جزئیات گیرنده", + "Hide recipient details" : "مخفی کردن جزئیات گیرنده", + "Minimize composer" : "کوچک‌نمایی ویرایشگر", + "Error sending your message" : "خطا در ارسال پیام شما", + "Retry" : "تلاش مجدد", + "Warning sending your message" : "هشدار در ارسال پیام شما", + "Send anyway" : "به هر حال ارسال شود", + "Welcome to {productName} Mail" : "به ایمیل {productName} خوش آمدید", + "Start writing a message by clicking below or select an existing message to display its contents" : "با کلیک روی دکمه زیر شروع به نوشتن پیام کنید یا یک پیام موجود را برای نمایش محتوای آن انتخاب کنید", + "Autoresponder off" : "پاسخ‌دهنده خودکار خاموش", + "Autoresponder on" : "پاسخ‌دهنده خودکار روشن", + "Autoresponder follows system settings" : "پاسخ‌دهنده خودکار از تنظیمات سیستم پیروی می‌کند", + "The autoresponder follows your personal absence period settings." : "پاسخ‌دهنده خودکار از تنظیمات دوره غیبت شخصی شما پیروی می‌کند", + "Edit absence settings" : "ویرایش تنظیمات غیبت", + "First day" : "روز اول", + "Last day (optional)" : "روز آخر (اختیاری)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} با موضوع پیامی که به آن پاسخ می‌دهید جایگزین می‌شود", "Message" : "پیام", - "Oh Snap!" : "Oh Snap!", - "Save autoresponder" : "Save autoresponder", - "Could not open outbox" : "Could not open outbox", - "Pending or not sent messages will show up here" : "Pending or not sent messages will show up here", - "Message could not be sent" : "Message could not be sent", - "Message deleted" : "Message deleted", - "Copied email address to clipboard" : "Copied email address to clipboard", - "Could not copy email address to clipboard" : "Could not copy email address to clipboard", - "Contacts with this address" : "Contacts with this address", - "Add to Contact" : "Add to Contact", - "New Contact" : "New Contact", - "Copy to clipboard" : "کپی کردن به حافظه موقت", + "Oh Snap!" : "اوه!", + "Save autoresponder" : "ذخیره پاسخ‌دهنده خودکار", + "Could not open outbox" : "امکان باز کردن صندوق خروجی وجود نداشت", + "Pending or not sent messages will show up here" : "پیام‌های در انتظار یا ارسال‌نشده در اینجا نمایش داده می‌شوند", + "Could not copy to \"Sent\" folder" : "امکان کپی در پوشه «ارسال‌شده» وجود نداشت", + "Mail server error" : "خطای سرور ایمیل", + "Message could not be sent" : "پیام قابل ارسال نبود", + "Message deleted" : "پیام حذف شد", + "Copy to \"Sent\" Folder" : "کپی در پوشه «ارسال‌شده»", + "Copy to Sent Folder" : "کپی به پوشه ارسال‌شده", + "Phishing email" : "ایمیل فیشینگ", + "This email might be a phishing attempt" : "این ایمیل ممکن است یک تلاش فیشینگ باشد", + "Hide suspicious links" : "مخفی‌سازی لینک‌های مشکوک", + "Show suspicious links" : "نمایش لینک‌های مشکوک", + "link text" : "متن لینک", + "Copied email address to clipboard" : "آدرس ایمیل در کلیپ‌بورد کپی شد", + "Could not copy email address to clipboard" : "امکان کپی آدرس ایمیل در کلیپ‌بورد وجود نداشت", + "Contacts with this address" : "مخاطبان با این آدرس", + "Add to Contact" : "افزودن به مخاطبان", + "New Contact" : "مخاطب جدید", + "Copy to clipboard" : "کپی در کلیپ‌بورد", + "Contact name …" : "نام مخاطب …", "Add" : "افزودن", - "Show less" : "Show less", - "Show more" : "Show more", + "Show less" : "نمایش کمتر", + "Show more" : "نمایش بیشتر", "Clear" : "پاک کردن", - "Close" : "بسته", - "Search parameters" : "Search parameters", - "Body" : "متن", + "Search in folder" : "جستجو در پوشه", + "Open search modal" : "باز کردن پنجره جستجو", + "Close" : "بستن", + "Search parameters" : "پارامترهای جستجو", + "Search subject" : "جستجوی موضوع", + "Body" : "متن ایمیل", + "Search body" : "جستجوی متن ایمیل", "Date" : "تاریخ", - "Pick a start date" : "Pick a start date", - "Pick an end date" : "Pick an end date", - "Select senders" : "Select senders", - "Select recipients" : "Select recipients", - "Select CC recipients" : "Select CC recipients", - "Select BCC recipients" : "Select BCC recipients", - "Tags" : "برچسب ها", - "Select tags" : "برچسب ها را انتخاب کنید", - "Marked as" : "Marked as", - "Has attachments" : "Has attachments", - "Sieve Port" : "Sieve Port", - "Custom" : "Custom", - "Sieve User" : "Sieve User", - "Sieve Password" : "Sieve Password", - "Save sieve settings" : "Save sieve settings", - "The syntax seems to be incorrect:" : "The syntax seems to be incorrect:", - "Save sieve script" : "Save sieve script", - "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Your signature is larger than 2 MB. This may affect the performance of your editor.", + "Pick a start date" : "انتخاب تاریخ شروع", + "Pick an end date" : "انتخاب تاریخ پایان", + "Select senders" : "انتخاب فرستندگان", + "Select recipients" : "انتخاب گیرندگان", + "Select CC recipients" : "انتخاب گیرندگان رونوشت", + "Select BCC recipients" : "انتخاب گیرندگان رونوشت مخفی", + "Tags" : "برچسب‌ها", + "Select tags" : "انتخاب برچسب‌ها", + "Marked as" : "علامت‌گذاری شده به عنوان", + "Has attachments" : "دارای پیوست", + "Mentions me" : "اشاره به من", + "Has attachment" : "دارای پیوست", + "To me" : "به من", + "Enable mail body search" : "فعال‌سازی جستجوی متن ایمیل", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve یک زبان قدرتمند برای نوشتن فیلترهای صندوق پستی شماست. اگر سرویس ایمیل شما از آن پشتیبانی کند، می‌توانید اسکریپت‌های Sieve را در ایمیل مدیریت کنید. همچنین برای استفاده از پاسخ‌دهنده خودکار و فیلترها به Sieve نیاز است.", + "Enable sieve filter" : "فعال‌سازی فیلتر Sieve", + "Sieve host" : "میزبان Sieve", + "Sieve security" : "امنیت Sieve", + "Sieve Port" : "پورت Sieve", + "Sieve credentials" : "اعتبارنامه‌های Sieve", + "IMAP credentials" : "اعتبارنامه‌های IMAP", + "Custom" : "سفارشی", + "Sieve User" : "کاربر Sieve", + "Sieve Password" : "رمز عبور Sieve", + "Oh snap!" : "اوه نه!", + "Save sieve settings" : "ذخیره تنظیمات sieve", + "The syntax seems to be incorrect:" : "به نظر می‌رسد ساختار دستور اشتباه است:", + "Save sieve script" : "ذخیره اسکریپت sieve", + "Signature …" : "امضا …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "امضای شما بزرگ‌تر از ۲ مگابایت است. این ممکن است بر عملکرد ویرایشگر شما تأثیر بگذارد.", "Save signature" : "ذخیره امضا", - "Place signature above quoted text" : "Place signature above quoted text", - "Message source" : "Message source", - "An error occurred, unable to rename the tag." : "An error occurred, unable to rename the tag.", - "Set tag" : "Set tag", - "Unset tag" : "Unset tag", - "Tag name is a hidden system tag" : "Tag name is a hidden system tag", - "Tag already exists" : "تگ از قبل وجود دارد", - "An error occurred, unable to create the tag." : "An error occurred, unable to create the tag.", - "Add default tags" : "Add default tags", - "Add tag" : "برچسب اضافه کنید", - "Task created" : "Task created", - "Could not create task" : "Could not create task", - "No calendars with task list support" : "No calendars with task list support", - "Summarizing thread failed." : "Summarizing thread failed.", - "Could not load your message thread" : "Could not load your message thread", - "The thread doesn't exist or has been deleted" : "The thread doesn't exist or has been deleted", - "Loading thread" : "Loading thread", - "Not found" : "پیدا نشد.", - "Encrypted & verified " : "Encrypted & verified ", - "Signature verified" : "Signature verified", - "Signature unverified " : "Signature unverified ", - "This message was encrypted by the sender before it was sent." : "This message was encrypted by the sender before it was sent.", - "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent.", - "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted.", - "Reply all" : "Reply all", - "Unsubscribe request sent" : "Unsubscribe request sent", - "Could not unsubscribe from mailing list" : "Could not unsubscribe from mailing list", - "Unsubscribe" : "Unsubscribe", - "Reply to sender only" : "فقط به فرستنده پاسخ دهید", - "Mark as unfavorite" : "Mark as unfavorite", - "Mark as favorite" : "Mark as favorite", - "Unsubscribe via link" : "Unsubscribe via link", - "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", - "Send unsubscribe email" : "Send unsubscribe email", - "Unsubscribe via email" : "Unsubscribe via email", - "{name} Assistant" : "{name} Assistant", - "Go to latest message" : "Go to latest message", - "The message could not be translated" : "The message could not be translated", - "Translation copied to clipboard" : "Translation copied to clipboard", - "Translation could not be copied" : "Translation could not be copied", - "Translate message" : "Translate message", - "Source language to translate from" : "Source language to translate from", - "Translate from" : "Translate from", - "Target language to translate into" : "Target language to translate into", - "Translate to" : "Translate to", - "Translating" : "Translating", - "Copy translated text" : "رونوشت متن ترجمه", - "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed.", - "Could not remove trusted sender {sender}" : "Could not remove trusted sender {sender}", - "No senders are trusted at the moment." : "No senders are trusted at the moment.", + "Place signature above quoted text" : "قرار دادن امضا بالای متن نقل‌قول‌شده", + "Message source" : "منبع پیام", + "An error occurred, unable to rename the tag." : "خطایی رخ داد، امکان تغییر نام برچسب وجود ندارد.", + "Edit name or color" : "ویرایش نام یا رنگ", + "Saving new tag name …" : "در حال ذخیره نام جدید برچسب …", + "Delete tag" : "حذف برچسب", + "Set tag" : "تنظیم برچسب", + "Unset tag" : "لغو تنظیم برچسب", + "Tag name is a hidden system tag" : "نام برچسب یک برچسب سیستمی مخفی است", + "Tag already exists" : "برچسب از قبل وجود دارد", + "Tag name cannot be empty" : "نام برچسب نمی‌تواند خالی باشد", + "An error occurred, unable to create the tag." : "خطایی رخ داد، امکان ایجاد برچسب وجود ندارد.", + "Add default tags" : "افزودن برچسب‌های پیش‌فرض", + "Add tag" : "افزودن برچسب", + "Saving tag …" : "در حال ذخیره برچسب …", + "Task created" : "وظیفه ایجاد شد", + "Could not create task" : "امکان ایجاد وظیفه وجود نداشت", + "No calendars with task list support" : "هیچ تقویمی با پشتیبانی از لیست وظایف وجود ندارد", + "Summarizing thread failed." : "خلاصه‌سازی موضوع ناموفق بود.", + "Could not load your message thread" : "امکان بارگذاری موضوع پیام شما وجود نداشت", + "The thread doesn't exist or has been deleted" : "موضوع وجود ندارد یا حذف شده است", + "Email was not able to be opened" : "ایمیل قابل باز شدن نبود", + "Print" : "چاپ", + "Could not print message" : "امکان چاپ پیام وجود نداشت", + "Loading thread" : "در حال بارگذاری موضوع", + "Not found" : "پیدا نشد", + "Encrypted & verified " : "رمزگذاری و تأیید شده", + "Signature verified" : "امضا تأیید شد", + "Signature unverified " : "امضا تأیید نشد", + "This message was encrypted by the sender before it was sent." : "این پیام توسط فرستنده قبل از ارسال رمزگذاری شده است.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "این پیام شامل یک امضای دیجیتال S/MIME تأیید شده است. پیام از زمان ارسال تغییر نکرده است.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "این پیام شامل یک امضای دیجیتال S/MIME تأیید نشده است. ممکن است پیام از زمان ارسال تغییر کرده باشد یا گواهی امضاکننده مورد اعتماد نباشد.", + "Reply all" : "پاسخ به همه", + "Unsubscribe request sent" : "درخواست لغو اشتراک ارسال شد", + "Could not unsubscribe from mailing list" : "امکان لغو اشتراک از لیست پستی وجود نداشت", + "Please wait for the message to load" : "لطفاً منتظر بارگذاری پیام بمانید", + "Disable reminder" : "غیرفعال کردن یادآوری", + "Unsubscribe" : "لغو اشتراک", + "Reply to sender only" : "پاسخ فقط به فرستنده", + "Mark as unfavorite" : "علامت‌گذاری به عنوان غیرمحبوب", + "Mark as favorite" : "علامت‌گذاری به عنوان محبوب", + "From:" : "از:", + "To:" : "به:", + "Cc:" : "رونوشت:", + "Bcc:" : "رونوشت مخفی:", + "Unsubscribe via link" : "لغو اشتراک از طریق لینک", + "Unsubscribing will stop all messages from the mailing list {sender}" : "لغو اشتراک باعث توقف تمام پیام‌های لیست پستی {sender} می‌شود", + "Send unsubscribe email" : "ارسال ایمیل لغو اشتراک", + "Unsubscribe via email" : "لغو اشتراک از طریق ایمیل", + "{name} Assistant" : "دستیار {name}", + "Thread summary" : "خلاصه موضوع", + "Go to latest message" : "رفتن به آخرین پیام", + "Newest message" : "جدیدترین پیام", + "This summary is AI generated and may contain mistakes." : "این خلاصه توسط هوش مصنوعی تولید شده و ممکن است حاوی اشتباه باشد", + "Please select languages to translate to and from" : "لطفاً زبان‌های ترجمه از و به را انتخاب کنید", + "The message could not be translated" : "پیام قابل ترجمه نبود", + "Translation copied to clipboard" : "ترجمه در کلیپ‌بورد کپی شد", + "Translation could not be copied" : "ترجمه قابل کپی شدن نبود", + "Translate message" : "ترجمه پیام", + "Source language to translate from" : "زبان مبدأ برای ترجمه", + "Translate from" : "ترجمه از", + "Target language to translate into" : "زبان مقصد برای ترجمه", + "Translate to" : "ترجمه به", + "Translating" : "در حال ترجمه", + "This translation is generated using AI and may contain inaccuracies" : "این ترجمه با استفاده از هوش مصنوعی تولید شده و ممکن است حاوی نادرستی باشد", + "Copy translated text" : "کپی متن ترجمه شده", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "با خالی گذاشتن فیلد یا تنظیم آن روی ۰، نگهداری زباله را غیرفعال کنید. فقط ایمیل‌هایی که پس از فعال‌سازی نگهداری زباله حذف می‌شوند، پردازش خواهند شد", + "Could not remove trusted sender {sender}" : "امکان حذف فرستنده مورد اعتماد {sender} وجود نداشت", + "No senders are trusted at the moment." : "در حال حاضر هیچ فرستنده‌ای مورد اعتماد نیست", "Untitled event" : "رویداد بدون عنوان", - "(organizer)" : "(تنظیم کننده)", - "Import into {calendar}" : "{وارد {تقویم", - "Event imported into {calendar}" : "{رویداد وارد شده به {تقویم", - "Flight {flightNr} from {depAirport} to {arrAirport}" : "{پرواز} {پرواز Nr} از {depAirport} به {arrAirport}", + "(organizer)" : "(برگزارکننده)", + "Import into {calendar}" : "وارد کردن به {calendar}", + "Event imported into {calendar}" : "رویداد به {calendar} وارد شد", + "Flight {flightNr} from {depAirport} to {arrAirport}" : "پرواز {flightNr} از {depAirport} به {arrAirport}", "Airplane" : "هواپیما", "Reservation {id}" : "رزرو {id}", - "{trainNr} from {depStation} to {arrStation}" : "{trainNr} از {depStation} تا {arrStation}", - "Train from {depStation} to {arrStation}" : "آموزش از {depStation} تا {arrStation} Train", - "Train" : "رشته", - "Stop" : "Stop", + "{trainNr} from {depStation} to {arrStation}" : "{trainNr} از {depStation} به {arrStation}", + "Train from {depStation} to {arrStation}" : "قطار از {depStation} به {arrStation}", + "Train" : "قطار", + "Mark message as" : "علامت‌گذاری پیام به عنوان", + "Add flag" : "افزودن پرچم", + "Move into folder" : "انتقال به پوشه", + "Stop" : "توقف", + "Delete action" : "حذف اقدام", + "Answered" : "پاسخ داده شده", "Deleted" : "حذف شده", - "Delete filter" : "Delete filter", + "Flagged" : "پرچم‌گذاری شده", + "Seen" : "مشاهده شده", + "Enter flag" : "وارد کردن پرچم", + "Stop ends all processing" : "توقف به تمام پردازش‌ها پایان می‌دهد", + "Sender" : "فرستنده", + "Recipient" : "گیرنده", + "Create a new mail filter" : "ایجاد یک فیلتر ایمیل جدید", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "هدرهایی را که می‌خواهید برای ایجاد فیلتر خود استفاده کنید، انتخاب کنید. در مرحله بعد، می‌توانید شرایط فیلتر را دقیق‌تر کنید و اقداماتی را که باید روی پیام‌های منطبق با معیارهای شما انجام شود، مشخص کنید", + "Delete filter" : "حذف فیلتر", + "Delete mail filter {filterName}?" : "آیا فیلتر ایمیل {filterName} حذف شود؟", + "Are you sure to delete the mail filter?" : "آیا مطمئن هستید که می‌خواهید فیلتر ایمیل را حذف کنید؟", + "New filter" : "فیلتر جدید", + "Filter saved" : "فیلتر ذخیره شد", + "Could not save filter" : "امکان ذخیره فیلتر وجود ندارد", + "Filter deleted" : "فیلتر حذف شد", + "Could not delete filter" : "امکان حذف فیلتر وجود ندارد", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "کنترل هرج‌ومرج ایمیل‌های خود را به دست بگیرید. فیلترها به شما کمک می‌کنند تا اولویت‌بندی کنید و شلوغی را حذف نمایید.", + "Hang tight while the filters load" : "لطفاً صبر کنید تا فیلترها بارگذاری شوند", + "Filter is active" : "فیلتر فعال است", + "Filter is not active" : "فیلتر فعال نیست", + "If all the conditions are met, the actions will be performed" : "اگر همه شرایط برآورده شوند، اقدامات انجام خواهند شد", + "If any of the conditions are met, the actions will be performed" : "اگر هر یک از شرایط برآورده شود، اقدامات انجام خواهند شد", "Help" : "راهنما", - "contains" : "contains", - "matches" : "مطابق است", - "Actions" : "کنش‌ها", + "contains" : "شامل می‌شود", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "تطابق زیررشته. فیلد در صورتی مطابقت دارد که مقدار ارائه‌شده در آن موجود باشد. مثلاً «گزارش» با «پورت» مطابقت دارد.", + "matches" : "مطابقت دارد", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "تطابق الگو با استفاده از کاراکترهای عام. نماد «*» نشان‌دهنده هر تعداد کاراکتر (از جمله صفر) و «?» نشان‌دهنده دقیقاً یک کاراکتر است. مثلاً «*گزارش*» با «گزارش تجاری 2024» مطابقت دارد.", + "Enter subject" : "موضوع را وارد کنید", + "Enter sender" : "فرستنده را وارد کنید", + "Enter recipient" : "گیرنده را وارد کنید", + "is exactly" : "دقیقاً برابر است", + "Conditions" : "شرایط", + "Add condition" : "افزودن شرط", + "Actions" : "اقدامات", + "Add action" : "افزودن اقدام", "Priority" : "اولویت", + "Enable filter" : "فعال‌سازی فیلتر", + "Tag" : "برچسب", "delete" : "حذف", + "Edit quick action" : "ویرایش اقدام سریع", + "Add quick action" : "افزودن اقدام سریع", + "Quick action deleted" : "اقدام سریع حذف شد", + "Failed to delete quick action" : "حذف اقدام سریع ناموفق بود", + "Failed to update quick action" : "به‌روزرسانی اقدام سریع ناموفق بود", + "Failed to update step in quick action" : "به‌روزرسانی مرحله در اقدام سریع ناموفق بود", + "Quick action updated" : "اقدام سریع به‌روزرسانی شد", + "Failed to create quick action" : "ایجاد اقدام سریع ناموفق بود", + "Failed to add steps to quick action" : "افزودن مراحل به اقدام سریع ناموفق بود", + "Quick action created" : "اقدام سریع ایجاد شد", + "Failed to delete action step" : "حذف مرحله اقدام ناموفق بود", + "No quick actions yet." : "هنوز هیچ اقدام سریعی وجود ندارد.", "Edit" : "ویرایش", - "Successfully updated config for \"{domain}\"" : "Successfully updated config for \"{domain}\"", - "Error saving config" : "Error saving config", - "Saved config for \"{domain}\"" : "Saved config for \"{domain}\"", - "Could not save provisioning setting" : "Could not save provisioning setting", - "Mail app" : "برنامه پست الکترونیکی", - "The mail app allows users to read mails on their IMAP accounts." : "برنامه نامه الکترونیکی به کاربران این امکان را می دهد تا نامه ها را در حساب های IMAP خود بخوانند.", - "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner).", - "Account provisioning" : "Account provisioning", - "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration.", - "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration.", - "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration.", - "There can only be one configuration per domain and only one wildcard domain configuration." : "There can only be one configuration per domain and only one wildcard domain configuration.", - "These settings can be used in conjunction with each other." : "These settings can be used in conjunction with each other.", - "If you only want to provision one domain for all users, use the wildcard (*)." : "If you only want to provision one domain for all users, use the wildcard (*).", - "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization.", - "Provisioning Configurations" : "Provisioning Configurations", - "Add new config" : "Add new config", - "Anti Spam Service" : "Anti Spam Service", - "You can set up an anti spam service email address here." : "You can set up an anti spam service email address here.", - "Any email that is marked as spam will be sent to the anti spam service." : "Any email that is marked as spam will be sent to the anti spam service.", - "Gmail integration" : "Gmail integration", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI.", - "Microsoft integration" : "Microsoft integration", - "Successfully set up anti spam email addresses" : "Successfully set up anti spam email addresses", - "Error saving anti spam email addresses" : "Error saving anti spam email addresses", - "Successfully deleted anti spam reporting email" : "Successfully deleted anti spam reporting email", - "Error deleting anti spam reporting email" : "Error deleting anti spam reporting email", - "Anti Spam" : "Anti Spam", - "Add the email address of your anti spam report service here." : "Add the email address of your anti spam report service here.", - "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\".", - "The original message will be attached as a \"message/rfc822\" attachment." : "The original message will be attached as a \"message/rfc822\" attachment.", - "\"Mark as Spam\" Email Address" : "\"Mark as Spam\" Email Address", - "\"Mark Not Junk\" Email Address" : "\"Mark Not Junk\" Email Address", + "Quick action name" : "نام اقدام سریع", + "Do the following actions" : "انجام اقدامات زیر", + "Add another action" : "افزودن اقدام دیگر", + "Successfully updated config for \"{domain}\"" : "تنظیمات برای «{domain}» با موفقیت به‌روزرسانی شد", + "Error saving config" : "خطا در ذخیره تنظیمات", + "Saved config for \"{domain}\"" : "تنظیمات برای «{domain}» ذخیره شد", + "Could not save provisioning setting" : "امکان ذخیره تنظیمات تأمین وجود ندارد", + "_Successfully provisioned {count} account._::_Successfully provisioned {count} accounts._" : ["Successfully provisioned {count} account.","Successfully provisioned {count} accounts."], + "There was an error when provisioning accounts." : "هنگام فراهم‌سازی حساب‌ها خطایی رخ داد.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "حساب‌های مربوط به \"{domain}\" با موفقیت حذف و از دسترس خارج شدند.", + "Error when deleting and deprovisioning accounts for \"{domain}\"" : "خطا در حذف و خارج‌سازی حساب‌های مربوط به \"{domain}\"", + "Could not save default classification setting" : "امکان ذخیره تنظیمات پیش‌فرض طبقه‌بندی وجود نداشت", + "Mail app" : "برنامه ایمیل", + "The mail app allows users to read mails on their IMAP accounts." : "برنامه ایمیل به کاربران امکان خواندن ایمیل‌های حساب‌های IMAP خود را می‌دهد.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "در اینجا می‌توانید تنظیمات سراسری را مشاهده کنید. تنظیمات مخصوص هر کاربر در خود برنامه (گوشه پایین-چپ) قرار دارد.", + "Account provisioning" : "فراهم‌سازی حساب", + "A provisioning configuration will provision all accounts with a matching email address." : "یک پیکربندی فراهم‌سازی، تمام حساب‌هایی که آدرس ایمیل منطبق دارند را فراهم می‌کند.", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "استفاده از کاراکتر عام (*) در فیلد دامنه فراهم‌سازی، پیکربندی ایجاد می‌کند که برای همه کاربران اعمال می‌شود، به شرطی که با پیکربندی دیگری مطابقت نداشته باشند.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "مکانیزم فراهم‌سازی، پیکربندی‌های دامنه خاص را بر پیکربندی دامنه عام اولویت می‌دهد.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "اگر پس از فراهم‌سازی کاربر با یک پیکربندی، پیکربندی منطبق جدیدی یافت شود، پیکربندی جدید اولویت یافته و کاربر با آن پیکربندی مجدداً فراهم می‌شود.", + "There can only be one configuration per domain and only one wildcard domain configuration." : "به ازای هر دامنه فقط یک پیکربندی و فقط یک پیکربندی دامنه عام می‌تواند وجود داشته باشد.", + "These settings can be used in conjunction with each other." : "این تنظیمات می‌توانند به صورت ترکیبی با یکدیگر استفاده شوند.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "اگر فقط می‌خواهید یک دامنه را برای همه کاربران فراهم کنید، از کاراکتر عام (*) استفاده کنید.", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "این تنظیم تنها زمانی منطقی است که از پس‌زمینه کاربر یکسانی برای نکست‌کلود و سرور ایمیل سازمان خود استفاده کنید.", + "Provisioning Configurations" : "پیکربندی‌های فراهم‌سازی", + "Add new config" : "افزودن پیکربندی جدید", + "Provision all accounts" : "فراهم‌سازی همه حساب‌ها", + "Allow additional mail accounts" : "اجازه حساب‌های ایمیل اضافی", + "Allow additional Mail accounts from User Settings" : "اجازه حساب‌های ایمیل اضافی از تنظیمات کاربر", + "Enable text processing through LLMs" : "فعال‌سازی پردازش متن از طریق LLM", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "برنامه ایمیل می‌تواند داده‌های کاربر را با کمک مدل زبانی بزرگ پیکربندی شده پردازش کرده و ویژگی‌های کمکی مانند خلاصه‌های موضوع، پاسخ‌های هوشمند و برنامه‌های رویداد ارائه دهد.", + "Enable LLM processing" : "فعال‌سازی پردازش LLM", + "Enable classification by importance by default" : "فعال‌سازی طبقه‌بندی بر اساس اهمیت به صورت پیش‌فرض", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "برنامه ایمیل می‌تواند ایمیل‌های دریافتی را با استفاده از یادگیری ماشین بر اساس اهمیت طبقه‌بندی کند. این ویژگی به صورت پیش‌فرض فعال است اما می‌تواند در اینجا به صورت پیش‌فرض غیرفعال شود. کاربران جداگانه همچنان می‌توانند این ویژگی را برای حساب‌های خود فعال یا غیرفعال کنند.", + "Enable classification of important mails by default" : "فعال‌سازی طبقه‌بندی ایمیل‌های مهم به صورت پیش‌فرض", + "Anti Spam Service" : "سرویس ضد هرزنامه", + "You can set up an anti spam service email address here." : "می‌توانید یک آدرس ایمیل سرویس ضد هرزنامه را در اینجا تنظیم کنید.", + "Any email that is marked as spam will be sent to the anti spam service." : "هر ایمیلی که به عنوان هرزنامه علامت‌گذاری شود، به سرویس ضد هرزنامه ارسال خواهد شد.", + "Gmail integration" : "یکپارچه‌سازی جیمیل", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "جیمیل به کاربران امکان دسترسی به ایمیل خود از طریق IMAP را می‌دهد. به دلایل امنیتی، این دسترسی فقط با اتصال OAuth 2.0 یا حساب‌های گوگلی که از احراز هویت دو مرحله‌ای و رمزهای عبور برنامه استفاده می‌کنند، امکان‌پذیر است.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "شما باید یک Client ID جدید برای یک \"برنامه وب\" در کنسول Google Cloud ثبت کنید. آدرس {url} را به عنوان URI بازگشتی مجاز اضافه کنید.", + "Microsoft integration" : "یکپارچه‌سازی مایکروسافت", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "مایکروسافت از شما می‌خواهد با استفاده از احراز هویت OAuth 2.0 از طریق IMAP به ایمیل‌های خود دسترسی پیدا کنید. برای این کار، باید یک برنامه با Microsoft Entra ID که قبلاً با نام Microsoft Azure Active Directory شناخته می‌شد، ثبت کنید.", + "Redirect URI" : "URI بازگشتی", + "For more details, please click here to open our documentation." : "برای جزئیات بیشتر، لطفاً برای باز کردن مستندات ما اینجا کلیک کنید.", + "User Interface Preference Defaults" : "پیش‌فرض‌های ترجیحات رابط کاربری", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "این تنظیمات برای پیش‌پیکربندی ترجیحات رابط کاربری استفاده می‌شوند و کاربر می‌تواند آن‌ها را در تنظیمات ایمیل لغو کند.", + "Message View Mode" : "حالت نمایش پیام", + "Show only the selected message" : "نمایش فقط پیام انتخاب شده", + "Successfully set up anti spam email addresses" : "آدرس‌های ایمیل ضد هرزنامه با موفقیت تنظیم شدند", + "Error saving anti spam email addresses" : "خطا در ذخیره آدرس‌های ایمیل ضد هرزنامه", + "Successfully deleted anti spam reporting email" : "ایمیل گزارش ضد هرزنامه با موفقیت حذف شد", + "Error deleting anti spam reporting email" : "خطا در حذف ایمیل گزارش ضد هرزنامه", + "Anti Spam" : "ضد هرزنامه", + "Add the email address of your anti spam report service here." : "آدرس ایمیل سرویس گزارش ضد هرزنامه خود را در اینجا اضافه کنید.", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "هنگام استفاده از این تنظیم، هنگامی که کاربر روی \"علامت‌گذاری به عنوان هرزنامه\" کلیک می‌کند، یک ایمیل گزارش به سرور گزارش هرزنامه ارسال می‌شود.", + "The original message will be attached as a \"message/rfc822\" attachment." : "پیام اصلی به عنوان یک پیوست \"message/rfc822\" ضمیمه خواهد شد.", + "\"Mark as Spam\" Email Address" : "علامت‌گذاری به عنوان هرزنامه آدرس ایمیل", + "\"Mark Not Junk\" Email Address" : "علامت‌گذاری به عنوان غیر هرزنامه آدرس ایمیل", "Reset" : "بازنشانی", - "Google integration configured" : "Google integration configured", - "Could not configure Google integration" : "Could not configure Google integration", - "Google integration unlinked" : "Google integration unlinked", - "Could not unlink Google integration" : "Could not unlink Google integration", + "Google integration configured" : "ادغام گوگل پیکربندی شد", + "Could not configure Google integration" : "امکان پیکربندی ادغام گوگل وجود ندارد", + "Google integration unlinked" : "ادغام گوگل لغو پیوند شد", + "Could not unlink Google integration" : "امکان لغو پیوند ادغام گوگل وجود ندارد", "Client ID" : "شناسه مشتری", "Client secret" : "رمز مشتری", - "Unlink" : "Unlink", - "Microsoft integration configured" : "Microsoft integration configured", - "Could not configure Microsoft integration" : "Could not configure Microsoft integration", - "Microsoft integration unlinked" : "Microsoft integration unlinked", - "Could not unlink Microsoft integration" : "Could not unlink Microsoft integration", - "Tenant ID (optional)" : "Tenant ID (optional)", - "Domain Match: {provisioningDomain}" : "Domain Match: {provisioningDomain}", + "Unlink" : "لغو پیوند", + "Microsoft integration configured" : "ادغام مایکروسافت پیکربندی شد", + "Could not configure Microsoft integration" : "امکان پیکربندی ادغام مایکروسافت وجود ندارد", + "Microsoft integration unlinked" : "ادغام مایکروسافت لغو پیوند شد", + "Could not unlink Microsoft integration" : "امکان لغو پیوند ادغام مایکروسافت وجود ندارد", + "Tenant ID (optional)" : "شناسه مستأجر (اختیاری)", + "Domain Match: {provisioningDomain}" : "تطبیق دامنه: {provisioningDomain}", "Email: {email}" : "ایمیل: {email}", - "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} on {host}: {port} (رمزگذاری {ssl))", - "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} on {host}: {port} (رمزگذاری s ssl))", - "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} on {host}:{port} ({ssl} encryption)", - "Configuration for \"{provisioningDomain}\"" : "Configuration for \"{provisioningDomain}\"", - "Provisioning domain" : "Provisioning domain", - "Email address template" : "Email address template", + "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} در {host}:{port} (رمزگذاری {ssl})", + "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} در {host}:{port} (رمزگذاری {ssl})", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} در {host}:{port} (رمزگذاری {ssl})", + "Configuration for \"{provisioningDomain}\"" : "پیکربندی برای \"{provisioningDomain}\"", + "Provisioning domain" : "دامنه تأمین", + "Email address template" : "الگوی آدرس ایمیل", "IMAP" : "IMAP", "User" : "کاربر", "Host" : "میزبان", - "Port" : "درگاه", + "Port" : "پورت", "SMTP" : "SMTP", + "Master password" : "رمز اصلی", + "Use master password" : "استفاده از رمز اصلی", "Sieve" : "Sieve", - "Enable sieve integration" : "Enable sieve integration", - "LDAP aliases integration" : "LDAP aliases integration", - "Enable LDAP aliases integration" : "Enable LDAP aliases integration", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases.", - "LDAP attribute for aliases" : "LDAP attribute for aliases", - "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted.", - "Save Config" : "Save Config", - "Unprovision & Delete Config" : "Unprovision & Delete Config", - "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% and %EMAIL% will be replaced with the user's UID and email", - "With the settings above, the app will create account settings in the following way:" : "با تنظیمات فوق ، برنامه تنظیمات حساب را به روش زیر ایجاد می کند:", - "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key.", - "Failed to import the certificate. Please check the password." : "Failed to import the certificate. Please check the password.", - "Certificate imported successfully" : "Certificate imported successfully", - "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", - "Failed to import the certificate" : "Failed to import the certificate", - "S/MIME certificates" : "S/MIME certificates", - "Certificate name" : "Certificate name", + "Enable sieve integration" : "فعال‌سازی ادغام Sieve", + "LDAP aliases integration" : "ادغام نام‌های مستعار LDAP", + "Enable LDAP aliases integration" : "فعال‌سازی ادغام نام‌های مستعار LDAP", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "ادغام نام‌های مستعار LDAP یک ویژگی از دایرکتوری LDAP پیکربندی شده را برای تأمین نام‌های مستعار ایمیل می‌خواند.", + "LDAP attribute for aliases" : "ویژگی LDAP برای نام‌های مستعار", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "یک ویژگی چند مقداری برای تأمین نام‌های مستعار ایمیل. برای هر مقدار یک نام مستعار ایجاد می‌شود. نام‌های مستعار موجود در نکست‌کلود که در دایرکتوری LDAP نیستند حذف می‌شوند.", + "Save Config" : "ذخیره پیکربندی", + "Unprovision & Delete Config" : "لغو تأمین و حذف پیکربندی", + "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% و %EMAIL% با شناسه کاربری و ایمیل کاربر جایگزین می‌شوند", + "With the settings above, the app will create account settings in the following way:" : "با تنظیمات بالا، برنامه تنظیمات حساب را به روش زیر ایجاد می‌کند:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "گواهی PKCS #12 ارائه شده باید حداقل شامل یک گواهی و دقیقاً یک کلید خصوصی باشد.", + "Failed to import the certificate. Please check the password." : "وارد کردن گواهی ناموفق بود. لطفاً رمز عبور را بررسی کنید.", + "Certificate imported successfully" : "گواهی با موفقیت وارد شد", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "وارد کردن گواهی ناموفق بود. لطفاً مطمئن شوید که کلید خصوصی با گواهی مطابقت دارد و با عبارت عبور محافظت نمی‌شود.", + "Failed to import the certificate" : "وارد کردن گواهی ناموفق بود", + "Import S/MIME certificate" : "وارد کردن گواهی S/MIME", + "S/MIME certificates" : "گواهی‌های S/MIME", + "Certificate name" : "نام گواهی", "E-mail address" : "آدرس ایمیل", "Valid until" : "معتبر تا", - "Delete certificate" : "Delete certificate", - "No certificate imported yet" : "No certificate imported yet", - "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", - "PKCS #12 Certificate" : "PKCS #12 Certificate", - "PEM Certificate" : "PEM Certificate", + "Delete certificate" : "حذف گواهی", + "No certificate imported yet" : "هنوز گواهی‌ای وارد نشده است", + "Import certificate" : "وارد کردن گواهی", + "PKCS #12 Certificate" : "گواهی PKCS #12", + "PEM Certificate" : "گواهی PEM", "Certificate" : "گواهی", - "Private key (optional)" : "Private key (optional)", - "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "The private key is only required if you intend to send signed and encrypted emails using this certificate.", - "Submit" : "ارسال", + "Private key (optional)" : "کلید خصوصی (اختیاری)", + "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "کلید خصوصی تنها در صورتی لازم است که قصد ارسال ایمیل‌های امضا شده و رمزگذاری شده با این گواهی را دارید.", + "Submit" : "ثبت", + "No text blocks available" : "هیچ بلوک متنی در دسترس نیست", + "Text block deleted" : "بلوک متنی حذف شد", + "Failed to delete text block" : "حذف بلوک متنی ناموفق بود", + "Text block shared with {sharee}" : "بلوک متنی با {sharee} به اشتراک گذاشته شد", + "Failed to share text block with {sharee}" : "اشتراک‌گذاری بلوک متنی با {sharee} ناموفق بود", + "Share deleted for {name}" : "اشتراک برای {name} حذف شد", + "Failed to delete share with {name}" : "حذف اشتراک با {name} ناموفق بود", + "Guest" : "مهمان", "Group" : "گروه", - "Shared" : "به اشتراک گذاشته شده ", - "Shares" : "اشتراک گذاری ها", - "Insert" : "Insert", - "Account connected" : "حساب کاربری متصل شد", - "You can close this window" : "You can close this window", - "Connect your mail account" : "حساب ایمیل خود را وصل کنید", - "To add a mail account, please contact your administrator." : "To add a mail account, please contact your administrator.", + "Failed to save text block" : "ذخیره بلوک متنی ناموفق بود", + "Shared" : "اشتراک‌گذاری شده", + "Edit {title}" : "ویرایش {title}", + "Delete {title}" : "حذف {title}", + "Edit text block" : "ویرایش بلوک متنی", + "Shares" : "اشتراک‌ها", + "Search for users or groups" : "جستجوی کاربران یا گروه‌ها", + "Choose a text block to insert at the cursor" : "انتخاب یک بلوک متنی برای درج در مکان نما", + "Insert" : "درج", + "Insert text block" : "درج بلوک متنی", + "Account connected" : "حساب متصل شد", + "You can close this window" : "می‌توانید این پنجره را ببندید", + "Connect your mail account" : "اتصال حساب ایمیل خود", + "To add a mail account, please contact your administrator." : "برای افزودن حساب ایمیل، لطفاً با مدیر خود تماس بگیرید.", "All" : "همه", - "Drafts" : "پیش نویس", - "Priority inbox" : "Priority inbox", - "All inboxes" : "همه صندوق ورودی", + "Drafts" : "پیش‌نویس‌ها", + "Priority inbox" : "صندوق ورودی اولویت‌دار", + "All inboxes" : "همه صندوق‌های ورودی", "Inbox" : "صندوق ورودی", - "Junk" : "آشغال", + "Junk" : "هرزنامه", "Sent" : "ارسال شده", - "Trash" : "زباله ها", - "Connect OAUTH2 account" : "Connect OAUTH2 account", - "Error while sharing file" : "Error while sharing file", - "{from}\n{subject}" : "{from}\n{subject}", + "Trash" : "زباله‌دان", + "Connect OAUTH2 account" : "اتصال حساب OAUTH2", + "Error while sharing file" : "خطا در اشتراک‌گذاری فایل", + "{from}\n{subject}" : "{from}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n new message \nfrom {from}","%n new messages \nfrom {from}"], - "Nextcloud Mail" : "ایمیل Nextclould", - "There is already a message in progress. All unsaved changes will be lost if you continue!" : "There is already a message in progress. All unsaved changes will be lost if you continue!", - "Discard changes" : "Discard changes", - "Discard unsaved changes" : "Discard unsaved changes", - "Keep editing message" : "Keep editing message", - "Attachments were not copied. Please add them manually." : "Attachments were not copied. Please add them manually.", + "Nextcloud Mail" : "نکست‌کلود میل", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "در حال حاضر یک پیام در حال انجام است. در صورت ادامه، تمام تغییرات ذخیره نشده از دست خواهند رفت!", + "Discard changes" : "نادیده گرفتن تغییرات", + "Discard unsaved changes" : "نادیده گرفتن تغییرات ذخیره نشده", + "Keep editing message" : "ادامه ویرایش پیام", + "(All or part of this reply was generated by AI)" : "(این پاسخ به طور کامل یا بخشی از آن توسط هوش مصنوعی تولید شده است)", + "Attachments were not copied. Please add them manually." : "پیوست‌ها کپی نشدند. لطفاً آن‌ها را به صورت دستی اضافه کنید.", + "Could not create snooze mailbox" : "امکان ایجاد صندوق پستی تعویق وجود ندارد", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "با عرض پوزش، پیام بارگذاری نشد. ممکن است پیش‌نویس دیگر وجود نداشته باشد. لطفاً صفحه را بازخوانی کرده و دوباره تلاش کنید.", + "Sending message…" : "در حال ارسال پیام…", "Message sent" : "پیام ارسال شد", - "Could not send message" : "Could not send message", - "Could not load {tag}{name}{endtag}" : "بارگیری {برچسب} {نام} {endtag ould} بارگیری نشد", - "There was a problem loading {tag}{name}{endtag}" : "هنگام بارگیری {tag} {name} {endtag } مشکلی رخ داد", - "Could not load your message" : "پیام شما بارگیری نشد", - "Could not load the desired message" : "پیام مورد نظر بارگیری نشد", - "Could not load the message" : "بارگیری پیام امکان پذیر نیست", - "Error loading message" : "خطا در بارگزاری پیام", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Mark all messages of this folder as read" : "تمام پیام های این پوشه را به عنوان خوانده شده علامت گذاری کنید", - "Last 7 days" : "۷ روز گذشته" + "Could not send message" : "امکان ارسال پیام وجود ندارد", + "Message copied to \"Sent\" folder" : "پیام در پوشه «ارسال‌شده» کپی شد", + "Could not copy message to \"Sent\" folder" : "امکان کپی پیام در پوشه «ارسال‌شده» وجود ندارد", + "Could not load {tag}{name}{endtag}" : "امکان بارگذاری {tag}{name}{endtag} وجود ندارد", + "There was a problem loading {tag}{name}{endtag}" : "هنگام بارگذاری {tag}{name}{endtag} مشکلی پیش آمد", + "Could not load your message" : "امکان بارگذاری پیام شما وجود ندارد", + "Could not load the desired message" : "امکان بارگذاری پیام مورد نظر وجود ندارد", + "Could not load the message" : "امکان بارگذاری پیام وجود ندارد", + "Error loading message" : "خطا در بارگذاری پیام", + "Add share link from Files" : "افزودن لینک اشتراک‌گذاری از Files", + "Choose a file to add as attachment" : "فایلی را برای افزودن به عنوان پیوست انتخاب کنید", + "Choose a file to share as a link" : "فایلی را برای اشتراک‌گذاری به عنوان پیوند انتخاب کنید", + "Delegated access to {userId}" : "دسترسی واگذار شده به {userId}", + "Revoked access for {userId}" : "دسترسی {userId} لغو شد" },"pluralForm" :"nplurals=2; plural=(n > 1);" } \ No newline at end of file diff --git a/l10n/fi.js b/l10n/fi.js index 57c85c2975..a311b62f71 100644 --- a/l10n/fi.js +++ b/l10n/fi.js @@ -66,7 +66,6 @@ OC.L10N.register( "SMTP Port" : "SMTP-portti", "SMTP User" : "SMTP-käyttäjä", "SMTP Password" : "SMTP-salasana", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google-tilin toiminta tämän sovelluksen kanssa vaatii, että otat kaksivaiheisen todennuksen käyttöön Googlessa ja luot sovelluksen salasanan.", "Account settings" : "Tilin asetukset", "Aliases" : "Aliakset", "Signature" : "Allekirjoitus", @@ -81,11 +80,11 @@ OC.L10N.register( "Quick actions" : "Pikatoiminnot", "Mail server" : "Sähköpostipalvelin", "Sieve server" : "Sieve-palvelin", + "Email address" : "Sähköpostiosoite", "Update alias" : "Päivitä alias", "Delete alias" : "Poista alias", "Go back" : "Takaisin", "Change name" : "Vaihda nimi", - "Email address" : "Sähköpostiosoite", "Add alias" : "Lisää alias", "Create alias" : "Luo alias", "Cancel" : "Peruuta", @@ -102,8 +101,11 @@ OC.L10N.register( "Sorting" : "Lajittelu", "Newest first" : "Uusin ensin", "Oldest first" : "Vanhin ensin", - "Text blocks" : "Tekstilohkot", "New text block" : "Uusi tekstilohko", + "Title of the text block" : "Tekstilohkon otsikko", + "Content of the text block" : "Tekstilohkon sisältö", + "Ok" : "Ok", + "Text blocks" : "Tekstilohkot", "Shared with me" : "Jaettu kanssasi", "Privacy" : "Yksityisyys", "Data collection" : "Tiedonkeruu", @@ -125,9 +127,6 @@ OC.L10N.register( "Send" : "Lähetä", "Refresh" : "Päivitä", "About" : "Tietoja", - "Title of the text block" : "Tekstilohkon otsikko", - "Content of the text block" : "Tekstilohkon sisältö", - "Ok" : "Ok", "No certificate" : "Ei varmennetta", "Certificate updated" : "Varmenne päivitetty", "Could not update certificate" : "Varmennetta ei voitu päivittää", @@ -176,19 +175,21 @@ OC.L10N.register( "Monday morning" : "Maanantaiaamuna", "Custom date and time" : "Omavalintainen päivä ja aika", "Enter a date" : "Kirjoita päiväys", - "Choose" : "Valitse", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Liite ylittää sallitun enimmäiskoon {size}. Jaa tiedosto linkin kautta.","Liitteet ylittävät sallitun enimmäiskoon {size}. Jaa tiedostot linkin kautta."], - "Choose a file to add as attachment" : "Valitse liitteeksi lisättävä tiedosto", - "Choose a file to share as a link" : "Valitse tiedosto, joka jaetaan linkkinä", + "Choose a file" : "Valitse tiedosto", "_{count} attachment_::_{count} attachments_" : ["{count} liite","{count} liitettä"], "Untitled message" : "Nimetön viesti", "Expand composer" : "Laajenna lähetysikkunaa", "Close composer" : "Sulje lähetysikkuna", "Confirm" : "Vahvista", + "Revoke" : "Peru oikeus", + "Revoke access" : "Peru pääsyoikeus", + "Revoke access?" : "Perutaanko pääsyoikeus?", "Plain text" : "Raakateksti", "Rich text" : "Rikas teksti", "No messages in this folder" : "Tässä kansiossa ei ole viestejä", "No messages" : "Ei viestejä", + "Choose" : "Valitse", "Blind copy recipients only" : "Vain piilokopion vastaanottajat", "No subject" : "Ei aihetta", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Luonnos:{markup-end} {subject}", @@ -220,14 +221,14 @@ OC.L10N.register( "Move Message" : "Siirrä viesti", "Archive thread" : "Arkistoi ketju", "Archive message" : "Arkistoi viesti", - "Delete thread" : "Poista ketju", - "Delete message" : "Poista viesti", "More actions" : "Lisää toimintoja", "Back" : "Takaisin", "Set custom snooze" : "Aseta mukautettu torkutus", "Edit as new message" : "Muokkaa uutena viestinä", "Create task" : "Luo tehtävä", "Download message" : "Lataa viesti", + "Delete thread" : "Poista ketju", + "Delete message" : "Poista viesti", "Manage quick actions" : "Hallitse pikatoimintoja", "Load more" : "Lataa lisää", "_Mark {number} read_::_Mark {number} read_" : ["Merkitse {number} luetuksi","Merkitse {number} luetuksi"], @@ -242,6 +243,7 @@ OC.L10N.register( "Event created" : "Tapahtuma luotu", "Could not create event" : "Tapahtumaa ei voitu luoda", "Create event" : "Luo tapahtuma", + "Title" : "Nimeke", "All day" : "Koko päivä", "Attendees" : "Osallistujat", "Select calendar" : "Valitse kalenteri", @@ -285,7 +287,9 @@ OC.L10N.register( "The sender of this message has asked to be notified when you read this message." : "Tämän viestin lähettäjä on pyytänyt ilmoitusta, kun luet tämän viestin.", "Notify the sender" : "Ilmoita lähettäjälle", "You sent a read confirmation to the sender of this message." : "Lähetit lukukuittauksen tämän viestin lähettäjälle.", + "Direct link copied to clipboard" : "Suora linkki kopioitu työpöydälle", "Forward" : "Lähetä edelleen", + "Link copied" : "Linkki kopioitu", "Move message" : "Siirrä viesti", "Translate" : "Käännä", "Forward message as attachment" : "Välitä viesti liitteenä", @@ -321,6 +325,7 @@ OC.L10N.register( "Moving thread" : "Siirretään ketjua", "Moving message" : "Siirretään viestiä", "This account cannot connect" : "Tämä tili ei voi yhdistää", + "Change password" : "Vaihda salasana", "Used quota: {quota}% ({limit})" : "Käytetty kiintiö: {quota}% ({limit})", "Used quota: {quota}%" : "Käytetty kiintiö: {quota}%", "Remove account" : "Poista tili", @@ -443,6 +448,8 @@ OC.L10N.register( "Unsubscribe" : "Peruuta tilaus", "Reply to sender only" : "Vastaa vain lähettäjälle", "Mark as favorite" : "Merkitse suosikiksi", + "From:" : "Alkaen:", + "To:" : "Päättyen:", "Unsubscribe via link" : "Lopeta tilaus linkin kautta", "Unsubscribing will stop all messages from the mailing list {sender}" : "Tilauksen lopettaminen pysäyttää kaikkien viestin saapumisen postituslistalta {sender}", "Send unsubscribe email" : "Lähetä viesti tilauksen lopettamiseksi", @@ -548,6 +555,7 @@ OC.L10N.register( "Certificate imported successfully" : "Varmenne tuotu onnistuneesti", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Varmenteen tuonti epäonnistui. Varmista, että yksityinen avain vastaa varmennetta ja ettei se ole suojattu tunnuslauseella.", "Failed to import the certificate" : "Varmenteen tuominen epäonnistui", + "Import S/MIME certificate" : "Tuo S/MIME-varmenne", "S/MIME certificates" : "S/MIME-varmenteet", "Certificate name" : "Varmenteen nimi", "E-mail address" : "Sähköpostiosoite", @@ -555,7 +563,6 @@ OC.L10N.register( "Delete certificate" : "Poista varmenne", "No certificate imported yet" : "Varmennetta ei ole vielä tuotu", "Import certificate" : "Tuo varmenne", - "Import S/MIME certificate" : "Tuo S/MIME-varmenne", "PKCS #12 Certificate" : "PKCS #12 -varmenne", "PEM Certificate" : "PEM-varmenne", "Certificate" : "Varmenne", @@ -605,7 +612,7 @@ OC.L10N.register( "Could not load the desired message" : "Haluttua viestiä ei voitu ladata", "Could not load the message" : "Viestiä ei voitu ladata", "Error loading message" : "Virhe viestiä ladatessa", - "Mark all messages of this folder as read" : "Merkitse tämän kansion kaikki viestit luetuiksi", - "Last 7 days" : "Edelliset 7 päivää" + "Choose a file to add as attachment" : "Valitse liitteeksi lisättävä tiedosto", + "Choose a file to share as a link" : "Valitse tiedosto, joka jaetaan linkkinä" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/fi.json b/l10n/fi.json index 71742dde48..9a11832236 100644 --- a/l10n/fi.json +++ b/l10n/fi.json @@ -64,7 +64,6 @@ "SMTP Port" : "SMTP-portti", "SMTP User" : "SMTP-käyttäjä", "SMTP Password" : "SMTP-salasana", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google-tilin toiminta tämän sovelluksen kanssa vaatii, että otat kaksivaiheisen todennuksen käyttöön Googlessa ja luot sovelluksen salasanan.", "Account settings" : "Tilin asetukset", "Aliases" : "Aliakset", "Signature" : "Allekirjoitus", @@ -79,11 +78,11 @@ "Quick actions" : "Pikatoiminnot", "Mail server" : "Sähköpostipalvelin", "Sieve server" : "Sieve-palvelin", + "Email address" : "Sähköpostiosoite", "Update alias" : "Päivitä alias", "Delete alias" : "Poista alias", "Go back" : "Takaisin", "Change name" : "Vaihda nimi", - "Email address" : "Sähköpostiosoite", "Add alias" : "Lisää alias", "Create alias" : "Luo alias", "Cancel" : "Peruuta", @@ -100,8 +99,11 @@ "Sorting" : "Lajittelu", "Newest first" : "Uusin ensin", "Oldest first" : "Vanhin ensin", - "Text blocks" : "Tekstilohkot", "New text block" : "Uusi tekstilohko", + "Title of the text block" : "Tekstilohkon otsikko", + "Content of the text block" : "Tekstilohkon sisältö", + "Ok" : "Ok", + "Text blocks" : "Tekstilohkot", "Shared with me" : "Jaettu kanssasi", "Privacy" : "Yksityisyys", "Data collection" : "Tiedonkeruu", @@ -123,9 +125,6 @@ "Send" : "Lähetä", "Refresh" : "Päivitä", "About" : "Tietoja", - "Title of the text block" : "Tekstilohkon otsikko", - "Content of the text block" : "Tekstilohkon sisältö", - "Ok" : "Ok", "No certificate" : "Ei varmennetta", "Certificate updated" : "Varmenne päivitetty", "Could not update certificate" : "Varmennetta ei voitu päivittää", @@ -174,19 +173,21 @@ "Monday morning" : "Maanantaiaamuna", "Custom date and time" : "Omavalintainen päivä ja aika", "Enter a date" : "Kirjoita päiväys", - "Choose" : "Valitse", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Liite ylittää sallitun enimmäiskoon {size}. Jaa tiedosto linkin kautta.","Liitteet ylittävät sallitun enimmäiskoon {size}. Jaa tiedostot linkin kautta."], - "Choose a file to add as attachment" : "Valitse liitteeksi lisättävä tiedosto", - "Choose a file to share as a link" : "Valitse tiedosto, joka jaetaan linkkinä", + "Choose a file" : "Valitse tiedosto", "_{count} attachment_::_{count} attachments_" : ["{count} liite","{count} liitettä"], "Untitled message" : "Nimetön viesti", "Expand composer" : "Laajenna lähetysikkunaa", "Close composer" : "Sulje lähetysikkuna", "Confirm" : "Vahvista", + "Revoke" : "Peru oikeus", + "Revoke access" : "Peru pääsyoikeus", + "Revoke access?" : "Perutaanko pääsyoikeus?", "Plain text" : "Raakateksti", "Rich text" : "Rikas teksti", "No messages in this folder" : "Tässä kansiossa ei ole viestejä", "No messages" : "Ei viestejä", + "Choose" : "Valitse", "Blind copy recipients only" : "Vain piilokopion vastaanottajat", "No subject" : "Ei aihetta", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Luonnos:{markup-end} {subject}", @@ -218,14 +219,14 @@ "Move Message" : "Siirrä viesti", "Archive thread" : "Arkistoi ketju", "Archive message" : "Arkistoi viesti", - "Delete thread" : "Poista ketju", - "Delete message" : "Poista viesti", "More actions" : "Lisää toimintoja", "Back" : "Takaisin", "Set custom snooze" : "Aseta mukautettu torkutus", "Edit as new message" : "Muokkaa uutena viestinä", "Create task" : "Luo tehtävä", "Download message" : "Lataa viesti", + "Delete thread" : "Poista ketju", + "Delete message" : "Poista viesti", "Manage quick actions" : "Hallitse pikatoimintoja", "Load more" : "Lataa lisää", "_Mark {number} read_::_Mark {number} read_" : ["Merkitse {number} luetuksi","Merkitse {number} luetuksi"], @@ -240,6 +241,7 @@ "Event created" : "Tapahtuma luotu", "Could not create event" : "Tapahtumaa ei voitu luoda", "Create event" : "Luo tapahtuma", + "Title" : "Nimeke", "All day" : "Koko päivä", "Attendees" : "Osallistujat", "Select calendar" : "Valitse kalenteri", @@ -283,7 +285,9 @@ "The sender of this message has asked to be notified when you read this message." : "Tämän viestin lähettäjä on pyytänyt ilmoitusta, kun luet tämän viestin.", "Notify the sender" : "Ilmoita lähettäjälle", "You sent a read confirmation to the sender of this message." : "Lähetit lukukuittauksen tämän viestin lähettäjälle.", + "Direct link copied to clipboard" : "Suora linkki kopioitu työpöydälle", "Forward" : "Lähetä edelleen", + "Link copied" : "Linkki kopioitu", "Move message" : "Siirrä viesti", "Translate" : "Käännä", "Forward message as attachment" : "Välitä viesti liitteenä", @@ -319,6 +323,7 @@ "Moving thread" : "Siirretään ketjua", "Moving message" : "Siirretään viestiä", "This account cannot connect" : "Tämä tili ei voi yhdistää", + "Change password" : "Vaihda salasana", "Used quota: {quota}% ({limit})" : "Käytetty kiintiö: {quota}% ({limit})", "Used quota: {quota}%" : "Käytetty kiintiö: {quota}%", "Remove account" : "Poista tili", @@ -441,6 +446,8 @@ "Unsubscribe" : "Peruuta tilaus", "Reply to sender only" : "Vastaa vain lähettäjälle", "Mark as favorite" : "Merkitse suosikiksi", + "From:" : "Alkaen:", + "To:" : "Päättyen:", "Unsubscribe via link" : "Lopeta tilaus linkin kautta", "Unsubscribing will stop all messages from the mailing list {sender}" : "Tilauksen lopettaminen pysäyttää kaikkien viestin saapumisen postituslistalta {sender}", "Send unsubscribe email" : "Lähetä viesti tilauksen lopettamiseksi", @@ -546,6 +553,7 @@ "Certificate imported successfully" : "Varmenne tuotu onnistuneesti", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Varmenteen tuonti epäonnistui. Varmista, että yksityinen avain vastaa varmennetta ja ettei se ole suojattu tunnuslauseella.", "Failed to import the certificate" : "Varmenteen tuominen epäonnistui", + "Import S/MIME certificate" : "Tuo S/MIME-varmenne", "S/MIME certificates" : "S/MIME-varmenteet", "Certificate name" : "Varmenteen nimi", "E-mail address" : "Sähköpostiosoite", @@ -553,7 +561,6 @@ "Delete certificate" : "Poista varmenne", "No certificate imported yet" : "Varmennetta ei ole vielä tuotu", "Import certificate" : "Tuo varmenne", - "Import S/MIME certificate" : "Tuo S/MIME-varmenne", "PKCS #12 Certificate" : "PKCS #12 -varmenne", "PEM Certificate" : "PEM-varmenne", "Certificate" : "Varmenne", @@ -603,7 +610,7 @@ "Could not load the desired message" : "Haluttua viestiä ei voitu ladata", "Could not load the message" : "Viestiä ei voitu ladata", "Error loading message" : "Virhe viestiä ladatessa", - "Mark all messages of this folder as read" : "Merkitse tämän kansion kaikki viestit luetuiksi", - "Last 7 days" : "Edelliset 7 päivää" + "Choose a file to add as attachment" : "Valitse liitteeksi lisättävä tiedosto", + "Choose a file to share as a link" : "Valitse tiedosto, joka jaetaan linkkinä" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/fr.js b/l10n/fr.js index 806e43492c..10470c1fac 100644 --- a/l10n/fr.js +++ b/l10n/fr.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Mail", "You are reaching your mailbox quota limit for {account_email}" : "Vous atteignez la limite de quota de votre boîte mail pour {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Vous utilisez actuellement {pourcentage} de l'espace de stockage de votre boîte aux lettres. Veuillez faire de la place en supprimant les e-mails inutiles.", + "{account_email} has been delegated to you" : "{account_email} vous a été délégué", + "{user} delegated {account} to you" : "{user} vous a délégué {account}", + "{account_email} is no longer delegated to you" : "{account_email} ne vous est plus délégué", + "{user} revoked delegation for {account}" : "{user} a révoqué la délégation de {account}", "Mail Application" : "Application Mail", "Mails" : "E-mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "L'e-mail de l'expéditeur %1$s n'est pas dans le carnet d'adresses, mais le nom de l'expéditeur : %2$s est dans le carnet d'adresse avec l'adresse mail suivante : %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "Port SMTP", "SMTP User" : "Utilisateur SMTP", "SMTP Password" : "Mot de passe SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Pour que le compte Google fonctionne avec cette application, vous devez activer l'authentification à deux facteurs pour Google et générer un mot de passe pour l'application.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google exige une authentification OAuth. Si votre administrateur Nextcloud n'a pas configuré Google OAuth, vous pouvez utiliser un mot de passe d'application Google à la place.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft exige une authentification OAuth. Demandez à votre administrateur Nextcloud de configurer Microsoft OAuth dans les paramètres administrateur.", "Account settings" : "Paramètres du compte", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Correspondance entre l'alias et le certificat S/MIME", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Serveur de messagerie", "Sieve server" : "Serveur Sieve", "Folder search" : "Recherche dans les dossiers", + "Alias name" : "Nom de l'alias", + "Email address" : "Adresse e-mail", "Update alias" : "Mettre à jour l'alias", "Rename alias" : "Renommer l'alias", "Show update alias form" : "Afficher le formulaire de mise à jour d'alias", "Delete alias" : "Supprimer l'alias", "Go back" : "Revenir en arrière", "Change name" : "Modifier le nom", - "Email address" : "Adresse e-mail", "Add alias" : "Ajouter un alias", "Create alias" : "Créer l'alias", "Cancel" : "Annuler", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "Paramètres de Mail", "General" : "Général", "Set as default mail app" : "Définir comme application de messagerie par défaut", + "{email} (delegated)" : "{email} (délégué)", "Add mail account" : "Ajouter un compte mail", "Appearance" : "Apparence", "Show all messages in thread" : "Afficher tous les messages du fil de discussion", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Trier", "Newest first" : "Les plus récents en premier", "Oldest first" : "Les plus anciens en premier", + "New text block" : "Nouveau bloc de texte", + "Title of the text block" : "Titre du bloc de texte", + "Content of the text block" : "Contenu du bloc de texte", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatars depuis Gravatar et favicons", "Reply position" : "Position de la réponse", "Top" : "Haut", "Bottom" : "Bas", "Text blocks" : "Blocs de texte", "Reusable pieces of text that can be inserted in messages" : "Éléments de texte réutilisables pouvant être insérés dans des messages", - "New text block" : "Nouveau bloc de texte", "Shared with me" : "Partagé avec moi", "Privacy" : "Confidentialité", "Data collection" : "Collecte de données", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Rechercher", "Send" : "Envoyer", "Refresh" : "Rafraîchir", + "Heading1" : "Titre 1", + "Heading2" : "Titre 2", + "Heading3" : "Titre 3", "About" : "À propos", "Acknowledgements" : "Remerciements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Cette application utilise CKEditor, un éditeur de texte open-source. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Titre du bloc de texte", - "Content of the text block" : "Contenu du bloc de texte", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Créer des rendez-vous provisoires automatiquement dans le calendrier", "No certificate" : "Aucun certificat", "Certificate updated" : "Certificat mis à jour", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Désactiver le formatage", "Upload attachment" : "Téléverser des pièces jointes", "Add attachment from Files" : "Ajouter des pièces jointes depuis Fichiers", - "Add share link from Files" : "Ajouter un lien de partage depuis Fichiers", "Smart picker" : "Sélecteur intelligent", "Request a read receipt" : "Demander un accusé de réception", "Sign message with S/MIME" : "Signer les messages avec S/MIME", @@ -245,15 +254,29 @@ OC.L10N.register( "Monday morning" : "Lundi matin", "Custom date and time" : "Date et heure personnalisées", "Enter a date" : "Saisissez une date", - "Choose" : "Sélectionner", + "Remove attachment {fileName}" : "Supprimer la pièce jointe {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["La pièce jointe dépasse la taille autorisée de {size}. Veuillez plutôt partager le fichier par le biais d'un lien.","Les pièces jointes dépassent la taille autorisée de {size}. Veuillez plutôt partager les fichiers par le biais d’un lien.","Les pièces jointes dépassent la taille autorisée de {size}. Veuillez plutôt partager les fichiers par le biais d’un lien."], - "Choose a file to add as attachment" : "Choisissez un fichier à joindre au message", - "Choose a file to share as a link" : "Sélectionnez un fichier à partager par lien", + "Choose a file" : "Choisir un fichier", "_{count} attachment_::_{count} attachments_" : ["{count} pièce jointe","{count} pièces jointes","{count} pièces jointes"], "Untitled message" : "Message sans titre", "Expand composer" : "Déplier la fenêtre de composition", "Close composer" : "Fermer la fenêtre de composition", "Confirm" : "Confirmer", + "Delegate access" : "Déléguer l'accès", + "Revoke" : "Révoquer", + "{userId} will no longer be able to act on your behalf" : "{userId} ne pourra plus agir en votre nom", + "Could not fetch delegates" : "Impossible de récupérer les délégués", + "Delegated access to {displayName}" : "Accès délégué à {displayName}", + "Could not delegate access" : "Impossible de déléguer l'accès", + "Revoked access for {displayName}" : "Accès révoqué pour {displayName}", + "Could not revoke delegation" : "Impossible de révoquer la délégation", + "Delegation" : "Délégation", + "Allow users to send, receive, and delete mail on your behalf" : "Autoriser des utilisateurs à envoyer, recevoir et supprimer des e-mails en votre nom", + "Revoke access" : "Révoquer l'accès", + "Add delegate" : "Ajouter un délégué", + "Select a user" : "Sélectionner un utilisateur", + "They will be able to send, receive, and delete mail on your behalf" : "Ils pourront envoyer, recevoir et supprimer des e-mails en votre nom", + "Revoke access?" : "Révoquer l'accès ?", "Tag: {name} deleted" : "Étiquette : {name} supprimée", "An error occurred, unable to delete the tag." : "Une erreur est survenue, impossible de supprimer l'étiquette.", "The tag will be deleted from all messages." : "L'étiquette sera supprimée de tous les messages.", @@ -261,6 +284,7 @@ OC.L10N.register( "Rich text" : "Texte enrichi", "No messages in this folder" : "Aucun message dans ce dossier", "No messages" : "Aucun message", + "Choose" : "Sélectionner", "Blind copy recipients only" : "Destinataires en copie cachée seulement", "No subject" : "Aucun sujet", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Brouillon : {markup-end} {subject}", @@ -300,8 +324,6 @@ OC.L10N.register( "Move Message" : "Déplacer le message", "Archive thread" : "Archiver le fil de discussion", "Archive message" : "Archiver le message", - "Delete thread" : "Supprimer ce fil de discussion", - "Delete message" : "Supprimer le message", "More actions" : "Plus d'actions…", "Back" : "Retour", "Set custom snooze" : "Définir une mise en attente personnalisée", @@ -309,6 +331,8 @@ OC.L10N.register( "Reply with meeting" : "Répondre avec une réunion", "Create task" : "Créer une tâche", "Download message" : "Télécharger le message", + "Delete thread" : "Supprimer ce fil de discussion", + "Delete message" : "Supprimer le message", "Back to all actions" : "Retour à toutes les actions", "Manage quick actions" : "Gérer les actions rapides", "Load more" : "Charger davantage", @@ -329,9 +353,11 @@ OC.L10N.register( "Mark as unimportant" : "Marquer comme non important", "Mark as important" : "Marquer comme important", "Report this bug" : "Signaler ce bogue", + "This description was generated by AI." : "Cette description a été générée par IA.", "Event created" : "Événement créé", "Could not create event" : "Impossible de créer l'évènement", "Create event" : "Créer un événement", + "Title" : "Titre", "All day" : "Toute la journée", "Attendees" : "Participants", "You can only invite attendees if your account has an email address set" : "Vous ne pouvez inviter des participants que si votre compte dispose d'une adresse e-mail.", @@ -381,8 +407,11 @@ OC.L10N.register( "Indexing your messages. This can take a bit longer for larger folders." : "Indexation de vos messages. Cela peut prendre un peu plus de temps pour les dossiers volumineux.", "Choose target folder" : "Sélectionner le dossier cible", "No more submailboxes in here" : "Plus aucun sous-dossier ici", - "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Les messages que vos avez marqués comme favoris seront affichés en haut des dossiers. Vous pouvez désactiver ce comportement dans les paramètres de l'application", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Les messages seront automatiquement marqués comme important en utilisant l'IA. Le système apprend des messages avec lesquels vous interagissez ou marquez comme important. Au départ, vous devez changer manuellement l'importance pour lui apprendre, mais il s'améliorera avec le temps", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Les messages que vous avez marqués comme favoris seront affichés en haut des dossiers. Vous pouvez désactiver ce comportement dans les paramètres de l'application", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "L'IA identifie les messages envoyés par vous qui attendent une réponse mais n'en ont pas encore reçu après quelques jours et les montrent ici.", "Favorites" : "Favoris", + "Favorites info" : "Informations sur les favoris", "Load more favorites" : "Charger plus de favoris", "Follow up" : "Suivre", "Follow up info" : "Info de suivi", @@ -399,7 +428,12 @@ OC.L10N.register( "Could not snooze message" : "Impossible de mettre le message en attente", "Message was unsnoozed" : "La mise en attente du message a été annulée", "Could not unsnooze message" : "Impossible d'annuler la mise en attente du message", + "Could not generate direct link: Message ID is missing" : "Impossible de générer un lien direct : l'identifiant du message est manquant.", + "Direct link copied to clipboard" : "Lien direct copié dans le presse-papiers", + "Copy direct link" : "Copier le lien direct", "Forward" : "Transférer", + "Only for message recipients" : "Réservé aux destinataires du message", + "Link copied" : "Lien copié", "Move message" : "Déplacer le message", "Translate" : "Traduire", "Forward message as attachment" : "Transférer le message en pièce jointe", @@ -407,8 +441,10 @@ OC.L10N.register( "Print message" : "Imprimer le message", "Create mail filter" : "Créer un filtre d'email", "Download thread data for debugging" : "Télécharger les données du fil de discussion pour débogage", + "Suggested replies are using AI" : "Les réponses suggérées utilisent l'IA", "Message body" : "Corps du message", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Avertissement : La signature S/MIME de ce message n'est pas vérifiée. L'expéditeur pourrait se faire passer pour quelqu'un d'autre !", + "AI info" : "Info sur l'IA", "Unnamed" : "Sans nom", "Embedded message" : "Message intégré", "Attachment saved to Files" : "Pièce jointe enregistrée dans Fichiers", @@ -439,14 +475,17 @@ OC.L10N.register( "Moving message" : "Déplacement du message", "This account cannot connect" : "Ce compte ne peut pas se connecter", "Connection failed. Please verify your information and try again" : "Connexion échouée. Merci de vérifier vos identifiants et réessayer", + "Change password" : "Modifier le mot de passe", "Used quota: {quota}% ({limit})" : "Quota utilisé : {quota}% ({limit})", "Used quota: {quota}%" : "Quota utilisé : {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Impossible de créer la boîte mail. Le nom contient probablement des caractères interdits. Veuillez essayer un autre nom.", "Remove account" : "Retirer le compte", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Le compte pour {email} et les données de messagerie mises en cache seront supprimés de Nextcloud, mais pas de votre fournisseur de messagerie.", "Remove {email}" : "Supprimer {email}", + "could not delete account" : "impossible de supprimer le compte", "Provisioned account is disabled" : "Le compte fourni est désactivé", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Veuillez vous connecter en utilisant un mot de passe pour activer ce compte. La session actuelle utilise une authentification sans mot de passe, c'est-à-dire via SSO ou WebAuthn.", + "Delegate account" : "Déléguer le compte", "Show only subscribed folders" : "Afficher uniquement les dossiers suivis", "Add folder" : "Ajouter un dossier", "Folder name" : "Nom du dossier", @@ -619,6 +658,10 @@ OC.L10N.register( "Reply to sender only" : "Répondre à l'émetteur uniquement", "Mark as unfavorite" : "Ne plus marquer comme favori", "Mark as favorite" : "Marquer comme favori", + "From:" : "Du :", + "To:" : "À :", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Se désabonner via un lien", "Unsubscribing will stop all messages from the mailing list {sender}" : "Le désabonnement stoppera la réception des messages de la liste de diffusion {sender}", "Send unsubscribe email" : "Envoyer le mail de désinscription", @@ -638,6 +681,7 @@ OC.L10N.register( "Target language to translate into" : "Langue cible vers laquelle traduire", "Translate to" : "Traduire vers", "Translating" : "Traduction", + "This translation is generated using AI and may contain inaccuracies" : "La traduction a été générée en utilisant l'IA et peut être imprécise", "Copy translated text" : "Copier le texte traduit", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Désactiver la rétention dans la corbeille en laissant le champ vide ou en saisissant 0. Seuls les mails placés dans la corbeille après l'activation de la rétention seront traités.", "Could not remove trusted sender {sender}" : "Impossible de supprimer l'expéditeur fiable {sender}", @@ -814,6 +858,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificat importé avec succès", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "L'import du certificat a échoué. Assurez-vous de la correspondance entre la clé privée et le certificat et que celle-ci n'est pas protégée par une phrase secrète.", "Failed to import the certificate" : "Impossible d'importer le certificat", + "Import S/MIME certificate" : "Importer un certificat S/MIME", "S/MIME certificates" : "Certificats S/MIME", "Certificate name" : "Nom du certificat", "E-mail address" : "Adresse e-mail", @@ -821,7 +866,6 @@ OC.L10N.register( "Delete certificate" : "Supprimer le certificat", "No certificate imported yet" : "Pas encore de certificat importé", "Import certificate" : "Importer un certificat", - "Import S/MIME certificate" : "Importer un certificat S/MIME", "PKCS #12 Certificate" : "Certificat PKCS #12", "PEM Certificate" : "Certificat PEM", "Certificate" : "Certificat", @@ -868,8 +912,10 @@ OC.L10N.register( "Discard changes" : "Abandonner les modifications", "Discard unsaved changes" : "Abandonner les modifications non sauvegardées", "Keep editing message" : "Continuer la modification du message", + "(All or part of this reply was generated by AI)" : "(Tout ou partie de cette réponse a été générée par IA)", "Attachments were not copied. Please add them manually." : "Les pièces jointes n'ont pas été copiées. Veuillez les ajouter manuellement.", "Could not create snooze mailbox" : "Impossible de créer la boîte de mise en attente des messages", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Désolé, le message n'a pas pu être chargé. Le brouillon n'existe peut-être plus. Merci de rafraîchir la page et essayer à nouveau.", "Sending message…" : "Envoi du message…", "Message sent" : "Message envoyé", "Could not send message" : "Impossible d'envoyer le message", @@ -881,11 +927,10 @@ OC.L10N.register( "Could not load the desired message" : "Impossible de charger le message souhaité", "Could not load the message" : "Impossible de charger le message", "Error loading message" : "Erreur lors du chargement du message", - "Determine importance using machine learning" : "Déterminer l'importance à l'aide de l'apprentissage automatique", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Les messages seront automatiquement marqués comme importants en fonction des messages avec lesquels vous avez interagi et marqués comme importants. Au début, vous devrez manuellement modifier l'importance pour que le système apprenne, mais le marquage automatique va s'améliorer avec le temps.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Les messages que vous avez envoyés et qui n'ont pas reçu de réponse au bout de quelques jours apparaîtront ici.", - "Mark all messages of this folder as read" : "Marquer tous les messages de ce dossier comme lus", - "Last 7 days" : "7 derniers jours", - "From me" : "De moi" + "Add share link from Files" : "Ajouter un lien de partage depuis Fichiers", + "Choose a file to add as attachment" : "Choisissez un fichier à joindre au message", + "Choose a file to share as a link" : "Sélectionnez un fichier à partager par lien", + "Delegated access to {userId}" : "Déléguer l'accès à {userId}", + "Revoked access for {userId}" : "Accès révoqué pour {userId}" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/fr.json b/l10n/fr.json index 3f947f4814..b7c0aba6ef 100644 --- a/l10n/fr.json +++ b/l10n/fr.json @@ -12,6 +12,10 @@ "Mail" : "Mail", "You are reaching your mailbox quota limit for {account_email}" : "Vous atteignez la limite de quota de votre boîte mail pour {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Vous utilisez actuellement {pourcentage} de l'espace de stockage de votre boîte aux lettres. Veuillez faire de la place en supprimant les e-mails inutiles.", + "{account_email} has been delegated to you" : "{account_email} vous a été délégué", + "{user} delegated {account} to you" : "{user} vous a délégué {account}", + "{account_email} is no longer delegated to you" : "{account_email} ne vous est plus délégué", + "{user} revoked delegation for {account}" : "{user} a révoqué la délégation de {account}", "Mail Application" : "Application Mail", "Mails" : "E-mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "L'e-mail de l'expéditeur %1$s n'est pas dans le carnet d'adresses, mais le nom de l'expéditeur : %2$s est dans le carnet d'adresse avec l'adresse mail suivante : %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "Port SMTP", "SMTP User" : "Utilisateur SMTP", "SMTP Password" : "Mot de passe SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Pour que le compte Google fonctionne avec cette application, vous devez activer l'authentification à deux facteurs pour Google et générer un mot de passe pour l'application.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google exige une authentification OAuth. Si votre administrateur Nextcloud n'a pas configuré Google OAuth, vous pouvez utiliser un mot de passe d'application Google à la place.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft exige une authentification OAuth. Demandez à votre administrateur Nextcloud de configurer Microsoft OAuth dans les paramètres administrateur.", "Account settings" : "Paramètres du compte", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Correspondance entre l'alias et le certificat S/MIME", @@ -115,13 +120,14 @@ "Mail server" : "Serveur de messagerie", "Sieve server" : "Serveur Sieve", "Folder search" : "Recherche dans les dossiers", + "Alias name" : "Nom de l'alias", + "Email address" : "Adresse e-mail", "Update alias" : "Mettre à jour l'alias", "Rename alias" : "Renommer l'alias", "Show update alias form" : "Afficher le formulaire de mise à jour d'alias", "Delete alias" : "Supprimer l'alias", "Go back" : "Revenir en arrière", "Change name" : "Modifier le nom", - "Email address" : "Adresse e-mail", "Add alias" : "Ajouter un alias", "Create alias" : "Créer l'alias", "Cancel" : "Annuler", @@ -134,6 +140,7 @@ "Mail settings" : "Paramètres de Mail", "General" : "Général", "Set as default mail app" : "Définir comme application de messagerie par défaut", + "{email} (delegated)" : "{email} (délégué)", "Add mail account" : "Ajouter un compte mail", "Appearance" : "Apparence", "Show all messages in thread" : "Afficher tous les messages du fil de discussion", @@ -148,13 +155,16 @@ "Sorting" : "Trier", "Newest first" : "Les plus récents en premier", "Oldest first" : "Les plus anciens en premier", + "New text block" : "Nouveau bloc de texte", + "Title of the text block" : "Titre du bloc de texte", + "Content of the text block" : "Contenu du bloc de texte", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatars depuis Gravatar et favicons", "Reply position" : "Position de la réponse", "Top" : "Haut", "Bottom" : "Bas", "Text blocks" : "Blocs de texte", "Reusable pieces of text that can be inserted in messages" : "Éléments de texte réutilisables pouvant être insérés dans des messages", - "New text block" : "Nouveau bloc de texte", "Shared with me" : "Partagé avec moi", "Privacy" : "Confidentialité", "Data collection" : "Collecte de données", @@ -182,12 +192,12 @@ "Search" : "Rechercher", "Send" : "Envoyer", "Refresh" : "Rafraîchir", + "Heading1" : "Titre 1", + "Heading2" : "Titre 2", + "Heading3" : "Titre 3", "About" : "À propos", "Acknowledgements" : "Remerciements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Cette application utilise CKEditor, un éditeur de texte open-source. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Titre du bloc de texte", - "Content of the text block" : "Contenu du bloc de texte", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Créer des rendez-vous provisoires automatiquement dans le calendrier", "No certificate" : "Aucun certificat", "Certificate updated" : "Certificat mis à jour", @@ -231,7 +241,6 @@ "Disable formatting" : "Désactiver le formatage", "Upload attachment" : "Téléverser des pièces jointes", "Add attachment from Files" : "Ajouter des pièces jointes depuis Fichiers", - "Add share link from Files" : "Ajouter un lien de partage depuis Fichiers", "Smart picker" : "Sélecteur intelligent", "Request a read receipt" : "Demander un accusé de réception", "Sign message with S/MIME" : "Signer les messages avec S/MIME", @@ -243,15 +252,29 @@ "Monday morning" : "Lundi matin", "Custom date and time" : "Date et heure personnalisées", "Enter a date" : "Saisissez une date", - "Choose" : "Sélectionner", + "Remove attachment {fileName}" : "Supprimer la pièce jointe {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["La pièce jointe dépasse la taille autorisée de {size}. Veuillez plutôt partager le fichier par le biais d'un lien.","Les pièces jointes dépassent la taille autorisée de {size}. Veuillez plutôt partager les fichiers par le biais d’un lien.","Les pièces jointes dépassent la taille autorisée de {size}. Veuillez plutôt partager les fichiers par le biais d’un lien."], - "Choose a file to add as attachment" : "Choisissez un fichier à joindre au message", - "Choose a file to share as a link" : "Sélectionnez un fichier à partager par lien", + "Choose a file" : "Choisir un fichier", "_{count} attachment_::_{count} attachments_" : ["{count} pièce jointe","{count} pièces jointes","{count} pièces jointes"], "Untitled message" : "Message sans titre", "Expand composer" : "Déplier la fenêtre de composition", "Close composer" : "Fermer la fenêtre de composition", "Confirm" : "Confirmer", + "Delegate access" : "Déléguer l'accès", + "Revoke" : "Révoquer", + "{userId} will no longer be able to act on your behalf" : "{userId} ne pourra plus agir en votre nom", + "Could not fetch delegates" : "Impossible de récupérer les délégués", + "Delegated access to {displayName}" : "Accès délégué à {displayName}", + "Could not delegate access" : "Impossible de déléguer l'accès", + "Revoked access for {displayName}" : "Accès révoqué pour {displayName}", + "Could not revoke delegation" : "Impossible de révoquer la délégation", + "Delegation" : "Délégation", + "Allow users to send, receive, and delete mail on your behalf" : "Autoriser des utilisateurs à envoyer, recevoir et supprimer des e-mails en votre nom", + "Revoke access" : "Révoquer l'accès", + "Add delegate" : "Ajouter un délégué", + "Select a user" : "Sélectionner un utilisateur", + "They will be able to send, receive, and delete mail on your behalf" : "Ils pourront envoyer, recevoir et supprimer des e-mails en votre nom", + "Revoke access?" : "Révoquer l'accès ?", "Tag: {name} deleted" : "Étiquette : {name} supprimée", "An error occurred, unable to delete the tag." : "Une erreur est survenue, impossible de supprimer l'étiquette.", "The tag will be deleted from all messages." : "L'étiquette sera supprimée de tous les messages.", @@ -259,6 +282,7 @@ "Rich text" : "Texte enrichi", "No messages in this folder" : "Aucun message dans ce dossier", "No messages" : "Aucun message", + "Choose" : "Sélectionner", "Blind copy recipients only" : "Destinataires en copie cachée seulement", "No subject" : "Aucun sujet", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Brouillon : {markup-end} {subject}", @@ -298,8 +322,6 @@ "Move Message" : "Déplacer le message", "Archive thread" : "Archiver le fil de discussion", "Archive message" : "Archiver le message", - "Delete thread" : "Supprimer ce fil de discussion", - "Delete message" : "Supprimer le message", "More actions" : "Plus d'actions…", "Back" : "Retour", "Set custom snooze" : "Définir une mise en attente personnalisée", @@ -307,6 +329,8 @@ "Reply with meeting" : "Répondre avec une réunion", "Create task" : "Créer une tâche", "Download message" : "Télécharger le message", + "Delete thread" : "Supprimer ce fil de discussion", + "Delete message" : "Supprimer le message", "Back to all actions" : "Retour à toutes les actions", "Manage quick actions" : "Gérer les actions rapides", "Load more" : "Charger davantage", @@ -327,9 +351,11 @@ "Mark as unimportant" : "Marquer comme non important", "Mark as important" : "Marquer comme important", "Report this bug" : "Signaler ce bogue", + "This description was generated by AI." : "Cette description a été générée par IA.", "Event created" : "Événement créé", "Could not create event" : "Impossible de créer l'évènement", "Create event" : "Créer un événement", + "Title" : "Titre", "All day" : "Toute la journée", "Attendees" : "Participants", "You can only invite attendees if your account has an email address set" : "Vous ne pouvez inviter des participants que si votre compte dispose d'une adresse e-mail.", @@ -379,8 +405,11 @@ "Indexing your messages. This can take a bit longer for larger folders." : "Indexation de vos messages. Cela peut prendre un peu plus de temps pour les dossiers volumineux.", "Choose target folder" : "Sélectionner le dossier cible", "No more submailboxes in here" : "Plus aucun sous-dossier ici", - "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Les messages que vos avez marqués comme favoris seront affichés en haut des dossiers. Vous pouvez désactiver ce comportement dans les paramètres de l'application", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Les messages seront automatiquement marqués comme important en utilisant l'IA. Le système apprend des messages avec lesquels vous interagissez ou marquez comme important. Au départ, vous devez changer manuellement l'importance pour lui apprendre, mais il s'améliorera avec le temps", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Les messages que vous avez marqués comme favoris seront affichés en haut des dossiers. Vous pouvez désactiver ce comportement dans les paramètres de l'application", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "L'IA identifie les messages envoyés par vous qui attendent une réponse mais n'en ont pas encore reçu après quelques jours et les montrent ici.", "Favorites" : "Favoris", + "Favorites info" : "Informations sur les favoris", "Load more favorites" : "Charger plus de favoris", "Follow up" : "Suivre", "Follow up info" : "Info de suivi", @@ -397,7 +426,12 @@ "Could not snooze message" : "Impossible de mettre le message en attente", "Message was unsnoozed" : "La mise en attente du message a été annulée", "Could not unsnooze message" : "Impossible d'annuler la mise en attente du message", + "Could not generate direct link: Message ID is missing" : "Impossible de générer un lien direct : l'identifiant du message est manquant.", + "Direct link copied to clipboard" : "Lien direct copié dans le presse-papiers", + "Copy direct link" : "Copier le lien direct", "Forward" : "Transférer", + "Only for message recipients" : "Réservé aux destinataires du message", + "Link copied" : "Lien copié", "Move message" : "Déplacer le message", "Translate" : "Traduire", "Forward message as attachment" : "Transférer le message en pièce jointe", @@ -405,8 +439,10 @@ "Print message" : "Imprimer le message", "Create mail filter" : "Créer un filtre d'email", "Download thread data for debugging" : "Télécharger les données du fil de discussion pour débogage", + "Suggested replies are using AI" : "Les réponses suggérées utilisent l'IA", "Message body" : "Corps du message", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Avertissement : La signature S/MIME de ce message n'est pas vérifiée. L'expéditeur pourrait se faire passer pour quelqu'un d'autre !", + "AI info" : "Info sur l'IA", "Unnamed" : "Sans nom", "Embedded message" : "Message intégré", "Attachment saved to Files" : "Pièce jointe enregistrée dans Fichiers", @@ -437,14 +473,17 @@ "Moving message" : "Déplacement du message", "This account cannot connect" : "Ce compte ne peut pas se connecter", "Connection failed. Please verify your information and try again" : "Connexion échouée. Merci de vérifier vos identifiants et réessayer", + "Change password" : "Modifier le mot de passe", "Used quota: {quota}% ({limit})" : "Quota utilisé : {quota}% ({limit})", "Used quota: {quota}%" : "Quota utilisé : {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Impossible de créer la boîte mail. Le nom contient probablement des caractères interdits. Veuillez essayer un autre nom.", "Remove account" : "Retirer le compte", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Le compte pour {email} et les données de messagerie mises en cache seront supprimés de Nextcloud, mais pas de votre fournisseur de messagerie.", "Remove {email}" : "Supprimer {email}", + "could not delete account" : "impossible de supprimer le compte", "Provisioned account is disabled" : "Le compte fourni est désactivé", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Veuillez vous connecter en utilisant un mot de passe pour activer ce compte. La session actuelle utilise une authentification sans mot de passe, c'est-à-dire via SSO ou WebAuthn.", + "Delegate account" : "Déléguer le compte", "Show only subscribed folders" : "Afficher uniquement les dossiers suivis", "Add folder" : "Ajouter un dossier", "Folder name" : "Nom du dossier", @@ -617,6 +656,10 @@ "Reply to sender only" : "Répondre à l'émetteur uniquement", "Mark as unfavorite" : "Ne plus marquer comme favori", "Mark as favorite" : "Marquer comme favori", + "From:" : "Du :", + "To:" : "À :", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Se désabonner via un lien", "Unsubscribing will stop all messages from the mailing list {sender}" : "Le désabonnement stoppera la réception des messages de la liste de diffusion {sender}", "Send unsubscribe email" : "Envoyer le mail de désinscription", @@ -636,6 +679,7 @@ "Target language to translate into" : "Langue cible vers laquelle traduire", "Translate to" : "Traduire vers", "Translating" : "Traduction", + "This translation is generated using AI and may contain inaccuracies" : "La traduction a été générée en utilisant l'IA et peut être imprécise", "Copy translated text" : "Copier le texte traduit", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Désactiver la rétention dans la corbeille en laissant le champ vide ou en saisissant 0. Seuls les mails placés dans la corbeille après l'activation de la rétention seront traités.", "Could not remove trusted sender {sender}" : "Impossible de supprimer l'expéditeur fiable {sender}", @@ -812,6 +856,7 @@ "Certificate imported successfully" : "Certificat importé avec succès", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "L'import du certificat a échoué. Assurez-vous de la correspondance entre la clé privée et le certificat et que celle-ci n'est pas protégée par une phrase secrète.", "Failed to import the certificate" : "Impossible d'importer le certificat", + "Import S/MIME certificate" : "Importer un certificat S/MIME", "S/MIME certificates" : "Certificats S/MIME", "Certificate name" : "Nom du certificat", "E-mail address" : "Adresse e-mail", @@ -819,7 +864,6 @@ "Delete certificate" : "Supprimer le certificat", "No certificate imported yet" : "Pas encore de certificat importé", "Import certificate" : "Importer un certificat", - "Import S/MIME certificate" : "Importer un certificat S/MIME", "PKCS #12 Certificate" : "Certificat PKCS #12", "PEM Certificate" : "Certificat PEM", "Certificate" : "Certificat", @@ -866,8 +910,10 @@ "Discard changes" : "Abandonner les modifications", "Discard unsaved changes" : "Abandonner les modifications non sauvegardées", "Keep editing message" : "Continuer la modification du message", + "(All or part of this reply was generated by AI)" : "(Tout ou partie de cette réponse a été générée par IA)", "Attachments were not copied. Please add them manually." : "Les pièces jointes n'ont pas été copiées. Veuillez les ajouter manuellement.", "Could not create snooze mailbox" : "Impossible de créer la boîte de mise en attente des messages", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Désolé, le message n'a pas pu être chargé. Le brouillon n'existe peut-être plus. Merci de rafraîchir la page et essayer à nouveau.", "Sending message…" : "Envoi du message…", "Message sent" : "Message envoyé", "Could not send message" : "Impossible d'envoyer le message", @@ -879,11 +925,10 @@ "Could not load the desired message" : "Impossible de charger le message souhaité", "Could not load the message" : "Impossible de charger le message", "Error loading message" : "Erreur lors du chargement du message", - "Determine importance using machine learning" : "Déterminer l'importance à l'aide de l'apprentissage automatique", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Les messages seront automatiquement marqués comme importants en fonction des messages avec lesquels vous avez interagi et marqués comme importants. Au début, vous devrez manuellement modifier l'importance pour que le système apprenne, mais le marquage automatique va s'améliorer avec le temps.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Les messages que vous avez envoyés et qui n'ont pas reçu de réponse au bout de quelques jours apparaîtront ici.", - "Mark all messages of this folder as read" : "Marquer tous les messages de ce dossier comme lus", - "Last 7 days" : "7 derniers jours", - "From me" : "De moi" + "Add share link from Files" : "Ajouter un lien de partage depuis Fichiers", + "Choose a file to add as attachment" : "Choisissez un fichier à joindre au message", + "Choose a file to share as a link" : "Sélectionnez un fichier à partager par lien", + "Delegated access to {userId}" : "Déléguer l'accès à {userId}", + "Revoked access for {userId}" : "Accès révoqué pour {userId}" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/ga.js b/l10n/ga.js index 6248a80737..0499eba549 100644 --- a/l10n/ga.js +++ b/l10n/ga.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Post", "You are reaching your mailbox quota limit for {account_email}" : "Tá teorainn chuóta do bhosca poist le haghaidh {account_email} sroichte agat", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Tá {percentage} de do stór bosca ríomhphoist in úsáid agat faoi láthair. Déan roinnt spáis trí ríomhphoist nach bhfuil ag teastáil a scriosadh le do thoil.", + "{account_email} has been delegated to you" : "Tá {account_email} tarmligthe chugat", + "{user} delegated {account} to you" : "{user} thug {account} duit", + "{account_email} is no longer delegated to you" : "Níl {account_email} tarmligthe chugat a thuilleadh", + "{user} revoked delegation for {account}" : "Chuir {user} tarmligean ar ceal do {account}", "Mail Application" : "Feidhmchlár Ríomhphoist", "Mails" : "Ríomhphoist", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Ríomhphost an tseoltóra: níl %1$s sa leabhar seoltaí, ach tá ainm an tseoltóra: %2$s sa leabhar seoltaí leis an ríomhphost seo a leanas: %3$s", @@ -70,7 +74,7 @@ OC.L10N.register( "Authorization pop-up closed" : "Údarú aníos aníos dúnta", "Configuration discovery temporarily not available. Please try again later." : "Níl fionnachtain chumraíochta ar fáil go sealadach. Bain triail eile as ar ball le do thoil.", "There was an error while setting up your account" : "Tharla earráid agus do chuntas á shocrú", - "Auto" : "Auto", + "Auto" : "Uath", "Name" : "Ainm", "Mail address" : "Seoladh poist", "name@example.org" : "name@example.org", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "Port SMTP", "SMTP User" : "Úsáideoir SMTP", "SMTP Password" : "Pasfhocal SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Chun go n-oibreoidh an Cuntas Google leis an aip seo ní mór duit fíordheimhniú dhá-fhachtóir a chumasú do Google agus pasfhocal aipe a ghiniúint.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Éilíonn Google fíordheimhniú OAuth. Mura bhfuil Google OAuth cumraithe ag do riarthóir Nextcloud, is féidir leat Pasfhocal Aipe Google a úsáid ina ionad.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Éilíonn Microsoft fíordheimhniú OAuth. Iarr ar do riarthóir Nextcloud Microsoft OAuth a chumrú sna socruithe riarthóra.", "Account settings" : "Socruithe cuntas", "Aliases" : "Ailiasanna", "Alias to S/MIME certificate mapping" : "Ailias le mapáil teastais S/MIME", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Freastalaí ríomhphoist", "Sieve server" : "Freastalaí criathar", "Folder search" : "Cuardach fillteán", + "Alias name" : "Ainm bréige", + "Email address" : "Seoladh ríomhphoist", "Update alias" : "Nuashonraigh ailias", "Rename alias" : "Athainmnigh ailias", "Show update alias form" : "Taispeáin foirm ailias nuashonraithe", "Delete alias" : "Scrios ailias", "Go back" : "Dul ar ais", "Change name" : "Athrú ainm", - "Email address" : "Seoladh ríomhphoist", "Add alias" : "Cuir ailias leis", "Create alias" : "Cruthaigh ailias", "Cancel" : "Cealaigh", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "Socruithe ríomhphoist", "General" : "Ginearálta", "Set as default mail app" : "Socraigh mar aip ríomhphoist réamhshocraithe", + "{email} (delegated)" : "{email} (tarmligthe)", "Add mail account" : "Cuir cuntas ríomhphoist leis", "Appearance" : "Dealramh", "Show all messages in thread" : "Taispeáin gach teachtaireacht sa snáithe", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Sórtáil", "Newest first" : "Is nua ar dtús", "Oldest first" : "Is sine ar dtús", + "New text block" : "Bloc téacs nua", + "Title of the text block" : "Teideal an bhloic téacs", + "Content of the text block" : "Ábhar an bhloic téacs", + "Ok" : "Ceart go leor", "Avatars from Gravatar and favicons" : "Avatars ó Gravatar agus favicons", "Reply position" : "Seasamh freagartha", "Top" : "Barr", "Bottom" : "Bun", "Text blocks" : "Bloic téacs", "Reusable pieces of text that can be inserted in messages" : "Píosaí téacs in-athúsáidte is féidir a chur isteach i dteachtaireachtaí", - "New text block" : "Bloc téacs nua", "Shared with me" : "Roinnte liom", "Privacy" : "Príobháideacht", "Data collection" : "Bailiú sonraí", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Cuardach", "Send" : "Seol", "Refresh" : "Athnuaigh", + "Heading1" : "Ceannteideal1", + "Heading2" : "Ceannteideal2", + "Heading3" : "Ceannteideal3", "About" : "Faoi", "Acknowledgements" : "Buíochas", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Áirítear leis an bhfeidhmchlár seo CKEditor, eagarthóir foinse oscailte. Cóipcheart © ranníocóirí CKEditor. Ceadúnaithe faoi GPLv2.", - "Title of the text block" : "Teideal an bhloic téacs", - "Content of the text block" : "Ábhar an bhloic téacs", - "Ok" : "Ceart go leor", "Automatically create tentative appointments in calendar" : "Cruthaigh coinní sealadacha go huathoibríoch sa fhéilire", "No certificate" : "Gan teastas", "Certificate updated" : "Teastas nuashonraithe", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Díchumasaigh an fhormáidiú", "Upload attachment" : "Uaslódáil ceangaltán", "Add attachment from Files" : "Cuir ceangaltán ó Chomhaid leis", - "Add share link from Files" : "Cuir nasc comhroinnte leis ó Chomhaid", "Smart picker" : "Roghnóir cliste", "Request a read receipt" : "Iarr admháil léite", "Sign message with S/MIME" : "Sínigh an teachtaireacht le S/MIME", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "maidin dé Luain", "Custom date and time" : "Dáta agus am saincheaptha", "Enter a date" : "Cuir isteach dáta", - "Choose" : "Roghnaigh", + "Remove attachment {fileName}" : "Bain an ceangaltán {fileName}", + "Add as attachment" : "Cuir leis mar cheangaltán", + "Add as share link" : "Cuir leis mar nasc comhroinnte", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Sáraíonn an ceangaltán méid na gceangaltán ceadaithe de {size}. Roinn an comhad trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil."], - "Choose a file to add as attachment" : "Roghnaigh comhad le cur leis mar cheangaltán", - "Choose a file to share as a link" : "Roghnaigh comhad le roinnt mar nasc", + "Choose a file" : "Roghnaigh comhad", "_{count} attachment_::_{count} attachments_" : ["{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán"], "Untitled message" : "Teachtaireacht gan teideal", "Expand composer" : "Cumadóir a leathnú", "Close composer" : "Cumadóir dlúth", "Confirm" : "Deimhnigh", + "Delegate access" : "Rochtain toscaire", + "Revoke" : "Chúlghairm", + "{userId} will no longer be able to act on your behalf" : "Ní bheidh {userId} in ann gníomhú ar do shon a thuilleadh", + "Could not fetch delegates" : "Níorbh fhéidir toscairí a fháil", + "Delegated access to {displayName}" : "Rochtain tarmligthe chuig {displayName}", + "Could not delegate access" : "Níorbh fhéidir rochtain a tharmligean", + "Revoked access for {displayName}" : "Rochtain curtha ar ceal do {displayName}", + "Could not revoke delegation" : "Níorbh fhéidir an toscaireacht a chúlghairm", + "Delegation" : "Toscaireacht", + "Allow users to send, receive, and delete mail on your behalf" : "Ceadaigh d'úsáideoirí ríomhphost a sheoladh, a fháil agus a scriosadh ar do shon", + "Revoke access" : "Cealaigh rochtain", + "Add delegate" : "Cuir toscaire leis", + "Select a user" : "Roghnaigh úsáideoir", + "They will be able to send, receive, and delete mail on your behalf" : "Beidh siad in ann ríomhphost a sheoladh, a fháil agus a scriosadh ar do shon.", + "Revoke access?" : "An bhfuil rochtain á cealú agat?", "Tag: {name} deleted" : "Chlib: {name} scriosta", "An error occurred, unable to delete the tag." : "Tharla earráid, níorbh fhéidir an chlib a scriosadh.", "The tag will be deleted from all messages." : "Scriosfar an chlib ó gach teachtaireacht.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Téacs saibhir", "No messages in this folder" : "Níl aon teachtaireachtaí sa bhfillteán seo", "No messages" : "Gan teachtaireachtaí", + "Choose" : "Roghnaigh", "Blind copy recipients only" : "Faighteoirí cóip dall amháin", "No subject" : "Gan ábhar", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Dréacht:{markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Níorbh fhéidir an snáithe a chur ar suan", "Thread was unsnoozed" : "Níor cuireadh an snáithe ar suan", "Could not unsnooze thread" : "Níorbh fhéidir an snáithe a chur ar suan", + "Message saved to Files" : "Teachtaireacht sábháilte chuig Comhaid", + "Message could not be saved" : "Níorbh fhéidir an teachtaireacht a shábháil", "This summary was AI generated" : "Gineadh AI san achoimre seo", "Encrypted message" : "Teachtaireacht criptithe", "This message is unread" : "Tá an teachtaireacht seo gan léamh", + "Choose a folder to store the message in" : "Roghnaigh fillteán chun an teachtaireacht a stóráil ann", "Unfavorite" : "Mí-mheas", "Favorite" : "is fearr leat", "Unread" : "Neamhléite", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "Bog Teachtaireacht", "Archive thread" : "Snáithe cartlainne", "Archive message" : "Teachtaireacht cartlainne", - "Delete thread" : "Scrios snáithe", - "Delete message" : "Scrios teachtaireacht", "More actions" : "Tuilleadh gníomhartha", "Back" : "Ar ais", "Set custom snooze" : "Socraigh snooze saincheaptha", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Freagra le cruinniú", "Create task" : "Cruthaigh tasc", "Download message" : "Íoslódáil an teachtaireacht", + "Save message to Files" : "Sábháil teachtaireacht chuig Comhaid", + "Delete thread" : "Scrios snáithe", + "Delete message" : "Scrios teachtaireacht", "Back to all actions" : "Ar ais chuig na gníomhartha go léir", "Manage quick actions" : "Bainistigh gníomhartha tapa", "Load more" : "Luchtaigh níos mó", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Marcáil mar neamhthábhachtach", "Mark as important" : "Marcáil chomh tábhachtach", "Report this bug" : "Tuairiscigh an fabht seo", + "This description was generated by AI." : "Gineadh an cur síos seo le hintleacht shaorga.", "Event created" : "Imeacht cruthaithe", "Could not create event" : "Níorbh fhéidir imeacht a chruthú", "Create event" : "Cruthaigh imeacht", + "Title" : "Teideal", "All day" : "An lá ar fad", "Attendees" : "Lucht freastail", "You can only invite attendees if your account has an email address set" : "Ní féidir leat cuireadh a thabhairt do lucht freastail ach amháin má tá seoladh ríomhphoist socraithe i do chuntas", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Níorbh fhéidir an teachtaireacht a chur ar suan", "Message was unsnoozed" : "Cuireadh an teachtaireacht ar suan", "Could not unsnooze message" : "Níorbh fhéidir an teachtaireacht a chur ar suan", + "Could not generate direct link: Message ID is missing" : "Níorbh fhéidir nasc díreach a ghiniúint: Tá ID an teachtaireachta ar iarraidh", + "Direct link copied to clipboard" : "Cóipeáladh nasc díreach chuig an ngearrthaisce", + "Copy direct link" : "Cóipeáil nasc díreach", "Forward" : "Ar aghaidh", + "Only for message recipients" : "Do fhaighteoirí teachtaireachtaí amháin", + "Link copied" : "Cóipeáladh an nasc", "Move message" : "Bog teachtaireacht", "Translate" : "Aistrigh", "Forward message as attachment" : "Cuir teachtaireacht ar aghaidh mar cheangaltán", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Teachtaireacht á bogadh", "This account cannot connect" : "Ní féidir an cuntas seo a cheangal", "Connection failed. Please verify your information and try again" : "Theip ar an nasc. Fíoraigh d’fhaisnéis agus déan iarracht arís.", + "Change password" : "Athraigh do phasfhocal", "Used quota: {quota}% ({limit})" : "Cuóta úsáidte: {quota}% ({limit})", "Used quota: {quota}%" : "Cuóta úsáidte: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Ní féidir bosca poist a chruthú. Is dócha go bhfuil carachtair neamhbhailí san ainm. Bain triail as ainm eile.", "Remove account" : "Bain cuntas", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Bainfear an cuntas le haghaidh {email} agus na sonraí ríomhphoist i dtaisce de Nextcloud, ach ní bhainfear iad de do sholáthraí ríomhphoist.", "Remove {email}" : "Bain {email}", + "could not delete account" : "níorbh fhéidir cuntas a scriosadh", "Provisioned account is disabled" : "Tá cuntas soláthraithe díchumasaithe", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Logáil isteach le do thoil agus pasfhocal á úsáid agat chun an cuntas seo a chumasú. Tá an seisiún reatha ag baint úsáide as fíordheimhniú gan pasfhocal, e.g. SSO nó WebAuthn.", + "Delegate account" : "Cuntas toscaire", "Show only subscribed folders" : "Taispeáin fillteáin suibscríofa amháin", "Add folder" : "Cuir fillteán leis", "Folder name" : "Ainm fillteáin", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Freagair don seoltóir amháin", "Mark as unfavorite" : "Marcáil mar rud is fearr leat", "Mark as favorite" : "Marcáil mar is fearr leat", + "From:" : "Ó:", + "To:" : "Chun:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Díliostáil tríd an nasc", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cuirfidh díliostáil stop le gach teachtaireacht ón liosta postála {sender}", "Send unsubscribe email" : "Seol ríomhphost díliostáil", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "D'éirigh leis an teastas a iompórtáil", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Theip ar an teastas a iompórtáil. Cinntigh le do thoil go bhfuil an eochair phríobháideach ag teacht leis an teastas agus nach bhfuil pasfhrása cosanta aici.", "Failed to import the certificate" : "Theip ar an teastas a iompórtáil", + "Import S/MIME certificate" : "Iompórtáil teastas S/MIME", "S/MIME certificates" : "Teastais S/MIME", "Certificate name" : "Ainm an teastais", "E-mail address" : "Seoladh ríomhphoist", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Scrios teastas", "No certificate imported yet" : "Níor iompórtáladh aon teastas fós", "Import certificate" : "Teastas iompórtála", - "Import S/MIME certificate" : "Iompórtáil teastas S/MIME", "PKCS #12 Certificate" : "Teastas PKCS #12", "PEM Certificate" : "Deimhniú PEM", "Certificate" : "Teastas", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Níorbh fhéidir an teachtaireacht atá uait a luchtú", "Could not load the message" : "Níorbh fhéidir an teachtaireacht a luchtú", "Error loading message" : "Earráid agus an teachtaireacht á lódáil", - "Determine importance using machine learning" : "Cinntigh tábhacht trí úsáid a bhaint as foghlaim meaisín", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Déanfar teachtaireachtaí a mharcáil go huathoibríoch mar thábhachtach, bunaithe ar na teachtaireachtaí a ndearna tú idirghníomhú leo nó a mharcáil tú a bheith tábhachtach. Ar dtús b'fhéidir go mbeadh ort an tábhacht a bhaineann leis an gcóras a mhúineadh a athrú de láimh, ach feabhsóidh sé le himeacht ama.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Taispeánfar anseo teachtaireachtaí a sheol tú a dteastaíonn freagra uathu ach nach bhfuair tú tar éis cúpla lá.", - "Mark all messages of this folder as read" : "Marcáil gach teachtaireacht sa fhillteán seo mar léite", - "Last 7 days" : "7 lá seo caite", - "From me" : "Uaim" + "Add share link from Files" : "Cuir nasc comhroinnte leis ó Chomhaid", + "Choose a file to add as attachment" : "Roghnaigh comhad le cur leis mar cheangaltán", + "Choose a file to share as a link" : "Roghnaigh comhad le roinnt mar nasc", + "Delegated access to {userId}" : "Rochtain tarmligthe chuig {userId}", + "Revoked access for {userId}" : "Rochtain curtha ar ceal do {userId}" }, "nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/l10n/ga.json b/l10n/ga.json index 7bb82a6499..b1ba68e008 100644 --- a/l10n/ga.json +++ b/l10n/ga.json @@ -12,6 +12,10 @@ "Mail" : "Post", "You are reaching your mailbox quota limit for {account_email}" : "Tá teorainn chuóta do bhosca poist le haghaidh {account_email} sroichte agat", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Tá {percentage} de do stór bosca ríomhphoist in úsáid agat faoi láthair. Déan roinnt spáis trí ríomhphoist nach bhfuil ag teastáil a scriosadh le do thoil.", + "{account_email} has been delegated to you" : "Tá {account_email} tarmligthe chugat", + "{user} delegated {account} to you" : "{user} thug {account} duit", + "{account_email} is no longer delegated to you" : "Níl {account_email} tarmligthe chugat a thuilleadh", + "{user} revoked delegation for {account}" : "Chuir {user} tarmligean ar ceal do {account}", "Mail Application" : "Feidhmchlár Ríomhphoist", "Mails" : "Ríomhphoist", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Ríomhphost an tseoltóra: níl %1$s sa leabhar seoltaí, ach tá ainm an tseoltóra: %2$s sa leabhar seoltaí leis an ríomhphost seo a leanas: %3$s", @@ -68,7 +72,7 @@ "Authorization pop-up closed" : "Údarú aníos aníos dúnta", "Configuration discovery temporarily not available. Please try again later." : "Níl fionnachtain chumraíochta ar fáil go sealadach. Bain triail eile as ar ball le do thoil.", "There was an error while setting up your account" : "Tharla earráid agus do chuntas á shocrú", - "Auto" : "Auto", + "Auto" : "Uath", "Name" : "Ainm", "Mail address" : "Seoladh poist", "name@example.org" : "name@example.org", @@ -91,7 +95,8 @@ "SMTP Port" : "Port SMTP", "SMTP User" : "Úsáideoir SMTP", "SMTP Password" : "Pasfhocal SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Chun go n-oibreoidh an Cuntas Google leis an aip seo ní mór duit fíordheimhniú dhá-fhachtóir a chumasú do Google agus pasfhocal aipe a ghiniúint.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Éilíonn Google fíordheimhniú OAuth. Mura bhfuil Google OAuth cumraithe ag do riarthóir Nextcloud, is féidir leat Pasfhocal Aipe Google a úsáid ina ionad.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Éilíonn Microsoft fíordheimhniú OAuth. Iarr ar do riarthóir Nextcloud Microsoft OAuth a chumrú sna socruithe riarthóra.", "Account settings" : "Socruithe cuntas", "Aliases" : "Ailiasanna", "Alias to S/MIME certificate mapping" : "Ailias le mapáil teastais S/MIME", @@ -115,13 +120,14 @@ "Mail server" : "Freastalaí ríomhphoist", "Sieve server" : "Freastalaí criathar", "Folder search" : "Cuardach fillteán", + "Alias name" : "Ainm bréige", + "Email address" : "Seoladh ríomhphoist", "Update alias" : "Nuashonraigh ailias", "Rename alias" : "Athainmnigh ailias", "Show update alias form" : "Taispeáin foirm ailias nuashonraithe", "Delete alias" : "Scrios ailias", "Go back" : "Dul ar ais", "Change name" : "Athrú ainm", - "Email address" : "Seoladh ríomhphoist", "Add alias" : "Cuir ailias leis", "Create alias" : "Cruthaigh ailias", "Cancel" : "Cealaigh", @@ -134,6 +140,7 @@ "Mail settings" : "Socruithe ríomhphoist", "General" : "Ginearálta", "Set as default mail app" : "Socraigh mar aip ríomhphoist réamhshocraithe", + "{email} (delegated)" : "{email} (tarmligthe)", "Add mail account" : "Cuir cuntas ríomhphoist leis", "Appearance" : "Dealramh", "Show all messages in thread" : "Taispeáin gach teachtaireacht sa snáithe", @@ -148,13 +155,16 @@ "Sorting" : "Sórtáil", "Newest first" : "Is nua ar dtús", "Oldest first" : "Is sine ar dtús", + "New text block" : "Bloc téacs nua", + "Title of the text block" : "Teideal an bhloic téacs", + "Content of the text block" : "Ábhar an bhloic téacs", + "Ok" : "Ceart go leor", "Avatars from Gravatar and favicons" : "Avatars ó Gravatar agus favicons", "Reply position" : "Seasamh freagartha", "Top" : "Barr", "Bottom" : "Bun", "Text blocks" : "Bloic téacs", "Reusable pieces of text that can be inserted in messages" : "Píosaí téacs in-athúsáidte is féidir a chur isteach i dteachtaireachtaí", - "New text block" : "Bloc téacs nua", "Shared with me" : "Roinnte liom", "Privacy" : "Príobháideacht", "Data collection" : "Bailiú sonraí", @@ -182,12 +192,12 @@ "Search" : "Cuardach", "Send" : "Seol", "Refresh" : "Athnuaigh", + "Heading1" : "Ceannteideal1", + "Heading2" : "Ceannteideal2", + "Heading3" : "Ceannteideal3", "About" : "Faoi", "Acknowledgements" : "Buíochas", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Áirítear leis an bhfeidhmchlár seo CKEditor, eagarthóir foinse oscailte. Cóipcheart © ranníocóirí CKEditor. Ceadúnaithe faoi GPLv2.", - "Title of the text block" : "Teideal an bhloic téacs", - "Content of the text block" : "Ábhar an bhloic téacs", - "Ok" : "Ceart go leor", "Automatically create tentative appointments in calendar" : "Cruthaigh coinní sealadacha go huathoibríoch sa fhéilire", "No certificate" : "Gan teastas", "Certificate updated" : "Teastas nuashonraithe", @@ -231,7 +241,6 @@ "Disable formatting" : "Díchumasaigh an fhormáidiú", "Upload attachment" : "Uaslódáil ceangaltán", "Add attachment from Files" : "Cuir ceangaltán ó Chomhaid leis", - "Add share link from Files" : "Cuir nasc comhroinnte leis ó Chomhaid", "Smart picker" : "Roghnóir cliste", "Request a read receipt" : "Iarr admháil léite", "Sign message with S/MIME" : "Sínigh an teachtaireacht le S/MIME", @@ -243,15 +252,31 @@ "Monday morning" : "maidin dé Luain", "Custom date and time" : "Dáta agus am saincheaptha", "Enter a date" : "Cuir isteach dáta", - "Choose" : "Roghnaigh", + "Remove attachment {fileName}" : "Bain an ceangaltán {fileName}", + "Add as attachment" : "Cuir leis mar cheangaltán", + "Add as share link" : "Cuir leis mar nasc comhroinnte", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Sáraíonn an ceangaltán méid na gceangaltán ceadaithe de {size}. Roinn an comhad trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil.","Sáraíonn na ceangaltáin méid na gceangaltán ceadaithe de {size}. Roinn na comhaid trí nasc ina ionad sin le do thoil."], - "Choose a file to add as attachment" : "Roghnaigh comhad le cur leis mar cheangaltán", - "Choose a file to share as a link" : "Roghnaigh comhad le roinnt mar nasc", + "Choose a file" : "Roghnaigh comhad", "_{count} attachment_::_{count} attachments_" : ["{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán","{comhaireamh} ceangaltán"], "Untitled message" : "Teachtaireacht gan teideal", "Expand composer" : "Cumadóir a leathnú", "Close composer" : "Cumadóir dlúth", "Confirm" : "Deimhnigh", + "Delegate access" : "Rochtain toscaire", + "Revoke" : "Chúlghairm", + "{userId} will no longer be able to act on your behalf" : "Ní bheidh {userId} in ann gníomhú ar do shon a thuilleadh", + "Could not fetch delegates" : "Níorbh fhéidir toscairí a fháil", + "Delegated access to {displayName}" : "Rochtain tarmligthe chuig {displayName}", + "Could not delegate access" : "Níorbh fhéidir rochtain a tharmligean", + "Revoked access for {displayName}" : "Rochtain curtha ar ceal do {displayName}", + "Could not revoke delegation" : "Níorbh fhéidir an toscaireacht a chúlghairm", + "Delegation" : "Toscaireacht", + "Allow users to send, receive, and delete mail on your behalf" : "Ceadaigh d'úsáideoirí ríomhphost a sheoladh, a fháil agus a scriosadh ar do shon", + "Revoke access" : "Cealaigh rochtain", + "Add delegate" : "Cuir toscaire leis", + "Select a user" : "Roghnaigh úsáideoir", + "They will be able to send, receive, and delete mail on your behalf" : "Beidh siad in ann ríomhphost a sheoladh, a fháil agus a scriosadh ar do shon.", + "Revoke access?" : "An bhfuil rochtain á cealú agat?", "Tag: {name} deleted" : "Chlib: {name} scriosta", "An error occurred, unable to delete the tag." : "Tharla earráid, níorbh fhéidir an chlib a scriosadh.", "The tag will be deleted from all messages." : "Scriosfar an chlib ó gach teachtaireacht.", @@ -259,6 +284,7 @@ "Rich text" : "Téacs saibhir", "No messages in this folder" : "Níl aon teachtaireachtaí sa bhfillteán seo", "No messages" : "Gan teachtaireachtaí", + "Choose" : "Roghnaigh", "Blind copy recipients only" : "Faighteoirí cóip dall amháin", "No subject" : "Gan ábhar", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Dréacht:{markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Níorbh fhéidir an snáithe a chur ar suan", "Thread was unsnoozed" : "Níor cuireadh an snáithe ar suan", "Could not unsnooze thread" : "Níorbh fhéidir an snáithe a chur ar suan", + "Message saved to Files" : "Teachtaireacht sábháilte chuig Comhaid", + "Message could not be saved" : "Níorbh fhéidir an teachtaireacht a shábháil", "This summary was AI generated" : "Gineadh AI san achoimre seo", "Encrypted message" : "Teachtaireacht criptithe", "This message is unread" : "Tá an teachtaireacht seo gan léamh", + "Choose a folder to store the message in" : "Roghnaigh fillteán chun an teachtaireacht a stóráil ann", "Unfavorite" : "Mí-mheas", "Favorite" : "is fearr leat", "Unread" : "Neamhléite", @@ -298,8 +327,6 @@ "Move Message" : "Bog Teachtaireacht", "Archive thread" : "Snáithe cartlainne", "Archive message" : "Teachtaireacht cartlainne", - "Delete thread" : "Scrios snáithe", - "Delete message" : "Scrios teachtaireacht", "More actions" : "Tuilleadh gníomhartha", "Back" : "Ar ais", "Set custom snooze" : "Socraigh snooze saincheaptha", @@ -307,6 +334,9 @@ "Reply with meeting" : "Freagra le cruinniú", "Create task" : "Cruthaigh tasc", "Download message" : "Íoslódáil an teachtaireacht", + "Save message to Files" : "Sábháil teachtaireacht chuig Comhaid", + "Delete thread" : "Scrios snáithe", + "Delete message" : "Scrios teachtaireacht", "Back to all actions" : "Ar ais chuig na gníomhartha go léir", "Manage quick actions" : "Bainistigh gníomhartha tapa", "Load more" : "Luchtaigh níos mó", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Marcáil mar neamhthábhachtach", "Mark as important" : "Marcáil chomh tábhachtach", "Report this bug" : "Tuairiscigh an fabht seo", + "This description was generated by AI." : "Gineadh an cur síos seo le hintleacht shaorga.", "Event created" : "Imeacht cruthaithe", "Could not create event" : "Níorbh fhéidir imeacht a chruthú", "Create event" : "Cruthaigh imeacht", + "Title" : "Teideal", "All day" : "An lá ar fad", "Attendees" : "Lucht freastail", "You can only invite attendees if your account has an email address set" : "Ní féidir leat cuireadh a thabhairt do lucht freastail ach amháin má tá seoladh ríomhphoist socraithe i do chuntas", @@ -400,7 +432,12 @@ "Could not snooze message" : "Níorbh fhéidir an teachtaireacht a chur ar suan", "Message was unsnoozed" : "Cuireadh an teachtaireacht ar suan", "Could not unsnooze message" : "Níorbh fhéidir an teachtaireacht a chur ar suan", + "Could not generate direct link: Message ID is missing" : "Níorbh fhéidir nasc díreach a ghiniúint: Tá ID an teachtaireachta ar iarraidh", + "Direct link copied to clipboard" : "Cóipeáladh nasc díreach chuig an ngearrthaisce", + "Copy direct link" : "Cóipeáil nasc díreach", "Forward" : "Ar aghaidh", + "Only for message recipients" : "Do fhaighteoirí teachtaireachtaí amháin", + "Link copied" : "Cóipeáladh an nasc", "Move message" : "Bog teachtaireacht", "Translate" : "Aistrigh", "Forward message as attachment" : "Cuir teachtaireacht ar aghaidh mar cheangaltán", @@ -442,14 +479,17 @@ "Moving message" : "Teachtaireacht á bogadh", "This account cannot connect" : "Ní féidir an cuntas seo a cheangal", "Connection failed. Please verify your information and try again" : "Theip ar an nasc. Fíoraigh d’fhaisnéis agus déan iarracht arís.", + "Change password" : "Athraigh do phasfhocal", "Used quota: {quota}% ({limit})" : "Cuóta úsáidte: {quota}% ({limit})", "Used quota: {quota}%" : "Cuóta úsáidte: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Ní féidir bosca poist a chruthú. Is dócha go bhfuil carachtair neamhbhailí san ainm. Bain triail as ainm eile.", "Remove account" : "Bain cuntas", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Bainfear an cuntas le haghaidh {email} agus na sonraí ríomhphoist i dtaisce de Nextcloud, ach ní bhainfear iad de do sholáthraí ríomhphoist.", "Remove {email}" : "Bain {email}", + "could not delete account" : "níorbh fhéidir cuntas a scriosadh", "Provisioned account is disabled" : "Tá cuntas soláthraithe díchumasaithe", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Logáil isteach le do thoil agus pasfhocal á úsáid agat chun an cuntas seo a chumasú. Tá an seisiún reatha ag baint úsáide as fíordheimhniú gan pasfhocal, e.g. SSO nó WebAuthn.", + "Delegate account" : "Cuntas toscaire", "Show only subscribed folders" : "Taispeáin fillteáin suibscríofa amháin", "Add folder" : "Cuir fillteán leis", "Folder name" : "Ainm fillteáin", @@ -622,6 +662,10 @@ "Reply to sender only" : "Freagair don seoltóir amháin", "Mark as unfavorite" : "Marcáil mar rud is fearr leat", "Mark as favorite" : "Marcáil mar is fearr leat", + "From:" : "Ó:", + "To:" : "Chun:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Díliostáil tríd an nasc", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cuirfidh díliostáil stop le gach teachtaireacht ón liosta postála {sender}", "Send unsubscribe email" : "Seol ríomhphost díliostáil", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "D'éirigh leis an teastas a iompórtáil", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Theip ar an teastas a iompórtáil. Cinntigh le do thoil go bhfuil an eochair phríobháideach ag teacht leis an teastas agus nach bhfuil pasfhrása cosanta aici.", "Failed to import the certificate" : "Theip ar an teastas a iompórtáil", + "Import S/MIME certificate" : "Iompórtáil teastas S/MIME", "S/MIME certificates" : "Teastais S/MIME", "Certificate name" : "Ainm an teastais", "E-mail address" : "Seoladh ríomhphoist", @@ -825,7 +870,6 @@ "Delete certificate" : "Scrios teastas", "No certificate imported yet" : "Níor iompórtáladh aon teastas fós", "Import certificate" : "Teastas iompórtála", - "Import S/MIME certificate" : "Iompórtáil teastas S/MIME", "PKCS #12 Certificate" : "Teastas PKCS #12", "PEM Certificate" : "Deimhniú PEM", "Certificate" : "Teastas", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Níorbh fhéidir an teachtaireacht atá uait a luchtú", "Could not load the message" : "Níorbh fhéidir an teachtaireacht a luchtú", "Error loading message" : "Earráid agus an teachtaireacht á lódáil", - "Determine importance using machine learning" : "Cinntigh tábhacht trí úsáid a bhaint as foghlaim meaisín", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Déanfar teachtaireachtaí a mharcáil go huathoibríoch mar thábhachtach, bunaithe ar na teachtaireachtaí a ndearna tú idirghníomhú leo nó a mharcáil tú a bheith tábhachtach. Ar dtús b'fhéidir go mbeadh ort an tábhacht a bhaineann leis an gcóras a mhúineadh a athrú de láimh, ach feabhsóidh sé le himeacht ama.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Taispeánfar anseo teachtaireachtaí a sheol tú a dteastaíonn freagra uathu ach nach bhfuair tú tar éis cúpla lá.", - "Mark all messages of this folder as read" : "Marcáil gach teachtaireacht sa fhillteán seo mar léite", - "Last 7 days" : "7 lá seo caite", - "From me" : "Uaim" + "Add share link from Files" : "Cuir nasc comhroinnte leis ó Chomhaid", + "Choose a file to add as attachment" : "Roghnaigh comhad le cur leis mar cheangaltán", + "Choose a file to share as a link" : "Roghnaigh comhad le roinnt mar nasc", + "Delegated access to {userId}" : "Rochtain tarmligthe chuig {userId}", + "Revoked access for {userId}" : "Rochtain curtha ar ceal do {userId}" },"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" } \ No newline at end of file diff --git a/l10n/gl.js b/l10n/gl.js index 493a26a6a5..cfb9663cd8 100644 --- a/l10n/gl.js +++ b/l10n/gl.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "Porto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contrasinal SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que a conta de Google funcione con esta aplicación, debe activar a autenticación de dous factores para Google e xerar un contrasinal da aplicación.", "Account settings" : "Axustes da conta", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificado S/MIME", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "Servidor de correo", "Sieve server" : "Servidor de «sieve» (peneira)", "Folder search" : "Busca de cartafoles", + "Email address" : "Enderezo de correo", "Update alias" : "Actualizar o alias", "Rename alias" : "Cambiar o nome do alias", "Show update alias form" : "Amosar o formulario de actualización de alias", "Delete alias" : "Eliminar o alias", "Go back" : "Volver", "Change name" : "Cambiar o nome", - "Email address" : "Enderezo de correo", "Add alias" : "Engadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -150,13 +149,16 @@ OC.L10N.register( "Sorting" : "Ordenación", "Newest first" : "Primeiro o máis recente", "Oldest first" : "Primeiro o máis antigo", + "New text block" : "Novo bloque de texto", + "Title of the text block" : "Título do bloque de texto", + "Content of the text block" : "Contido do bloque de texto", + "Ok" : "Aceptar", "Avatars from Gravatar and favicons" : "Avatares de Gravatar e favicons", "Reply position" : "Posición da resposta", "Top" : "Arriba", "Bottom" : "Abaixo", "Text blocks" : "Bloques de texto", "Reusable pieces of text that can be inserted in messages" : "Fragmentos de texto reutilizábeis que se poden inserir nas mensaxes", - "New text block" : "Novo bloque de texto", "Shared with me" : "Compartido comigo", "Privacy" : "Privacidade", "Data collection" : "Recollida de datos", @@ -187,9 +189,6 @@ OC.L10N.register( "About" : "Sobre", "Acknowledgements" : "Recoñecementos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicación inclúe CKeditor, un editor de código aberto. Copyright © Colaboradores de CKEDITOR. Licenciado baixo GPLV2.", - "Title of the text block" : "Título do bloque de texto", - "Content of the text block" : "Contido do bloque de texto", - "Ok" : "Aceptar", "Automatically create tentative appointments in calendar" : "Crear automaticamente as citas provisionais no calendario", "No certificate" : "Sen certificado", "Certificate updated" : "Certificado actualizado", @@ -233,7 +232,6 @@ OC.L10N.register( "Disable formatting" : "Desactivar o formato", "Upload attachment" : "Enviar anexos", "Add attachment from Files" : "Engadir anexos desde Ficheiros", - "Add share link from Files" : "Engadir ligazón para compartir desde Ficheiros", "Smart picker" : "Selector intelixente", "Request a read receipt" : "Solicitar un acuse de recibimento", "Sign message with S/MIME" : "Asinar a mensaxe con S/MIME", @@ -245,15 +243,18 @@ OC.L10N.register( "Monday morning" : "Luns pola mañá", "Custom date and time" : "Data e hora personalizadas", "Enter a date" : "Introduza unha data", - "Choose" : "Escoller", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["O anexo supera o tamaño permitido de {size}. No canto diso, comparta o ficheiro mediante ligazón.","Os anexos superan o tamaño permitido de {size}. En lugar diso, comparta os ficheiros mediante ligazón."], - "Choose a file to add as attachment" : "Escolla un ficheiro para engadir como anexo", - "Choose a file to share as a link" : "Escolla un ficheiro para compartir como ligazón", + "Choose a file" : "Escoller un ficheiro", "_{count} attachment_::_{count} attachments_" : ["{count} anexo","{count} anexos"], "Untitled message" : "Mensaxe sen título", "Expand composer" : "Estender a xanela de redacción", "Close composer" : "Pechar a xanela de redacción", "Confirm" : "Confirmar", + "Revoke" : "Revogar", + "Delegation" : "Delegación", + "Revoke access" : "Revogar o acceso", + "Add delegate" : "Engadir delegado", + "Revoke access?" : "Revogar o acceso?", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Produciuse un erro, non é posíbel eliminar a etiqueta.", "The tag will be deleted from all messages." : "Eliminarase a etiqueta de todas as mensaxes.", @@ -261,6 +262,7 @@ OC.L10N.register( "Rich text" : "Texto mellorado", "No messages in this folder" : "Non hai mensaxes neste cartafol", "No messages" : "Non hai mensaxes", + "Choose" : "Escoller", "Blind copy recipients only" : "Só destinatarios de copias agochadas", "No subject" : "Sen asunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Borrador:{markup-end} {subject}", @@ -300,8 +302,6 @@ OC.L10N.register( "Move Message" : "Mover a mensaxe", "Archive thread" : "Arquivar o fío", "Archive message" : "Arquivar a mensaxe", - "Delete thread" : "Eliminar o fío", - "Delete message" : "Eliminar a mensaxe", "More actions" : "Máis accións", "Back" : "Atrás", "Set custom snooze" : "Definir un adiamento personalizado", @@ -309,6 +309,8 @@ OC.L10N.register( "Reply with meeting" : "Responder cunha xuntanza", "Create task" : "Crear tarefa", "Download message" : "Descargar a mensaxe", + "Delete thread" : "Eliminar o fío", + "Delete message" : "Eliminar a mensaxe", "Back to all actions" : "Volver a todas as accións", "Manage quick actions" : "Xestionar as accións rápidas", "Load more" : "Cargar máis", @@ -332,6 +334,7 @@ OC.L10N.register( "Event created" : "Evento creado", "Could not create event" : "Non foi posíbel crear o evento", "Create event" : "Crear evento", + "Title" : "Titulo", "All day" : "Todo o día", "Attendees" : "Asistentes", "You can only invite attendees if your account has an email address set" : "Só pode convidar aos asistentes se a súa conta ten definido un enderezo de correo-e", @@ -402,7 +405,9 @@ OC.L10N.register( "Could not snooze message" : "Non foi posíbel adiar a mensaxe", "Message was unsnoozed" : "A mensaxe foi reaberta", "Could not unsnooze message" : "Non foi posíbel reabrir a mensaxe", + "Direct link copied to clipboard" : "A ligazón directa foi copiada no portapapeis", "Forward" : "Reenviar", + "Link copied" : "Ligazón copiada", "Move message" : "Mover a mensaxe", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar a mensaxe como anexo", @@ -442,6 +447,7 @@ OC.L10N.register( "Moving message" : "Movendo a mensaxe", "This account cannot connect" : "Non é posíbel conectar esta conta", "Connection failed. Please verify your information and try again" : "Produciuse un fallo na conexión. Comprobe os seus datos e ténteo de novo", + "Change password" : "Cambiar o contrasinal", "Used quota: {quota}% ({limit})" : "Cota utilizada: {quota}% ({limit})", "Used quota: {quota}%" : "Cota utilizada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Non é posíbel crear unha caixa de correo. É probábel que o nome conteña caracteres non válidos. Probe con outro nome.", @@ -622,6 +628,8 @@ OC.L10N.register( "Reply to sender only" : "Responder só ao remitente", "Mark as unfavorite" : "Marcar como non favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "Desde:", + "To:" : "Ata:", "Unsubscribe via link" : "Cancelar a subscrición a través da ligazón", "Unsubscribing will stop all messages from the mailing list {sender}" : "Se cancela a subscrición, deteranse todas as mensaxes da lista de correo {sender}", "Send unsubscribe email" : "Enviar correo para cancelar a subscrición", @@ -818,6 +826,7 @@ OC.L10N.register( "Certificate imported successfully" : "O certificado foi importado correctamente", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Produciuse un fallo ao importar o certificado. Asegúrese de que a chave privada coincide co certificado e non estea protexida por unha frase de contrasinal.", "Failed to import the certificate" : "Produciuse un fallo ao importar o certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nome do certificado", "E-mail address" : "Enderezo de correo", @@ -825,7 +834,6 @@ OC.L10N.register( "Delete certificate" : "Eliminar o certificado", "No certificate imported yet" : "Aínda non se importou ningún certificado", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -886,11 +894,8 @@ OC.L10N.register( "Could not load the desired message" : "Non foi posíbel cargar a mensaxe desexada", "Could not load the message" : "Non foi posíbel cargar a mensaxe", "Error loading message" : "Produciuse un erro ao cargar a mensaxe", - "Determine importance using machine learning" : "Determinar a importancia mediante a aprendizaxe automática", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "As mensaxes marcaranse automaticamente como importantes en función das mensaxes coas que interactuou ou que foron marcadas como importantes. No principio, é posíbel que teña que cambiar manualmente a importancia para ensinarlle ao sistema, máis mellorará co paso do tempo", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Aquí amosaranse as mensaxes enviadas por Vde. que requiren unha resposta mais non a recibiron após dun par de días.", - "Mark all messages of this folder as read" : "Marcar todas as mensaxes deste cartafol como lidas", - "Last 7 days" : "Últimos 7 días", - "From me" : "De min" + "Add share link from Files" : "Engadir ligazón para compartir desde Ficheiros", + "Choose a file to add as attachment" : "Escolla un ficheiro para engadir como anexo", + "Choose a file to share as a link" : "Escolla un ficheiro para compartir como ligazón" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/gl.json b/l10n/gl.json index b009016a97..b42469db53 100644 --- a/l10n/gl.json +++ b/l10n/gl.json @@ -91,7 +91,6 @@ "SMTP Port" : "Porto SMTP", "SMTP User" : "Usuario SMTP", "SMTP Password" : "Contrasinal SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que a conta de Google funcione con esta aplicación, debe activar a autenticación de dous factores para Google e xerar un contrasinal da aplicación.", "Account settings" : "Axustes da conta", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Asignación de alias a certificado S/MIME", @@ -115,13 +114,13 @@ "Mail server" : "Servidor de correo", "Sieve server" : "Servidor de «sieve» (peneira)", "Folder search" : "Busca de cartafoles", + "Email address" : "Enderezo de correo", "Update alias" : "Actualizar o alias", "Rename alias" : "Cambiar o nome do alias", "Show update alias form" : "Amosar o formulario de actualización de alias", "Delete alias" : "Eliminar o alias", "Go back" : "Volver", "Change name" : "Cambiar o nome", - "Email address" : "Enderezo de correo", "Add alias" : "Engadir alias", "Create alias" : "Crear alias", "Cancel" : "Cancelar", @@ -148,13 +147,16 @@ "Sorting" : "Ordenación", "Newest first" : "Primeiro o máis recente", "Oldest first" : "Primeiro o máis antigo", + "New text block" : "Novo bloque de texto", + "Title of the text block" : "Título do bloque de texto", + "Content of the text block" : "Contido do bloque de texto", + "Ok" : "Aceptar", "Avatars from Gravatar and favicons" : "Avatares de Gravatar e favicons", "Reply position" : "Posición da resposta", "Top" : "Arriba", "Bottom" : "Abaixo", "Text blocks" : "Bloques de texto", "Reusable pieces of text that can be inserted in messages" : "Fragmentos de texto reutilizábeis que se poden inserir nas mensaxes", - "New text block" : "Novo bloque de texto", "Shared with me" : "Compartido comigo", "Privacy" : "Privacidade", "Data collection" : "Recollida de datos", @@ -185,9 +187,6 @@ "About" : "Sobre", "Acknowledgements" : "Recoñecementos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicación inclúe CKeditor, un editor de código aberto. Copyright © Colaboradores de CKEDITOR. Licenciado baixo GPLV2.", - "Title of the text block" : "Título do bloque de texto", - "Content of the text block" : "Contido do bloque de texto", - "Ok" : "Aceptar", "Automatically create tentative appointments in calendar" : "Crear automaticamente as citas provisionais no calendario", "No certificate" : "Sen certificado", "Certificate updated" : "Certificado actualizado", @@ -231,7 +230,6 @@ "Disable formatting" : "Desactivar o formato", "Upload attachment" : "Enviar anexos", "Add attachment from Files" : "Engadir anexos desde Ficheiros", - "Add share link from Files" : "Engadir ligazón para compartir desde Ficheiros", "Smart picker" : "Selector intelixente", "Request a read receipt" : "Solicitar un acuse de recibimento", "Sign message with S/MIME" : "Asinar a mensaxe con S/MIME", @@ -243,15 +241,18 @@ "Monday morning" : "Luns pola mañá", "Custom date and time" : "Data e hora personalizadas", "Enter a date" : "Introduza unha data", - "Choose" : "Escoller", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["O anexo supera o tamaño permitido de {size}. No canto diso, comparta o ficheiro mediante ligazón.","Os anexos superan o tamaño permitido de {size}. En lugar diso, comparta os ficheiros mediante ligazón."], - "Choose a file to add as attachment" : "Escolla un ficheiro para engadir como anexo", - "Choose a file to share as a link" : "Escolla un ficheiro para compartir como ligazón", + "Choose a file" : "Escoller un ficheiro", "_{count} attachment_::_{count} attachments_" : ["{count} anexo","{count} anexos"], "Untitled message" : "Mensaxe sen título", "Expand composer" : "Estender a xanela de redacción", "Close composer" : "Pechar a xanela de redacción", "Confirm" : "Confirmar", + "Revoke" : "Revogar", + "Delegation" : "Delegación", + "Revoke access" : "Revogar o acceso", + "Add delegate" : "Engadir delegado", + "Revoke access?" : "Revogar o acceso?", "Tag: {name} deleted" : "Etiqueta: {name} eliminada", "An error occurred, unable to delete the tag." : "Produciuse un erro, non é posíbel eliminar a etiqueta.", "The tag will be deleted from all messages." : "Eliminarase a etiqueta de todas as mensaxes.", @@ -259,6 +260,7 @@ "Rich text" : "Texto mellorado", "No messages in this folder" : "Non hai mensaxes neste cartafol", "No messages" : "Non hai mensaxes", + "Choose" : "Escoller", "Blind copy recipients only" : "Só destinatarios de copias agochadas", "No subject" : "Sen asunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Borrador:{markup-end} {subject}", @@ -298,8 +300,6 @@ "Move Message" : "Mover a mensaxe", "Archive thread" : "Arquivar o fío", "Archive message" : "Arquivar a mensaxe", - "Delete thread" : "Eliminar o fío", - "Delete message" : "Eliminar a mensaxe", "More actions" : "Máis accións", "Back" : "Atrás", "Set custom snooze" : "Definir un adiamento personalizado", @@ -307,6 +307,8 @@ "Reply with meeting" : "Responder cunha xuntanza", "Create task" : "Crear tarefa", "Download message" : "Descargar a mensaxe", + "Delete thread" : "Eliminar o fío", + "Delete message" : "Eliminar a mensaxe", "Back to all actions" : "Volver a todas as accións", "Manage quick actions" : "Xestionar as accións rápidas", "Load more" : "Cargar máis", @@ -330,6 +332,7 @@ "Event created" : "Evento creado", "Could not create event" : "Non foi posíbel crear o evento", "Create event" : "Crear evento", + "Title" : "Titulo", "All day" : "Todo o día", "Attendees" : "Asistentes", "You can only invite attendees if your account has an email address set" : "Só pode convidar aos asistentes se a súa conta ten definido un enderezo de correo-e", @@ -400,7 +403,9 @@ "Could not snooze message" : "Non foi posíbel adiar a mensaxe", "Message was unsnoozed" : "A mensaxe foi reaberta", "Could not unsnooze message" : "Non foi posíbel reabrir a mensaxe", + "Direct link copied to clipboard" : "A ligazón directa foi copiada no portapapeis", "Forward" : "Reenviar", + "Link copied" : "Ligazón copiada", "Move message" : "Mover a mensaxe", "Translate" : "Traducir", "Forward message as attachment" : "Reenviar a mensaxe como anexo", @@ -440,6 +445,7 @@ "Moving message" : "Movendo a mensaxe", "This account cannot connect" : "Non é posíbel conectar esta conta", "Connection failed. Please verify your information and try again" : "Produciuse un fallo na conexión. Comprobe os seus datos e ténteo de novo", + "Change password" : "Cambiar o contrasinal", "Used quota: {quota}% ({limit})" : "Cota utilizada: {quota}% ({limit})", "Used quota: {quota}%" : "Cota utilizada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Non é posíbel crear unha caixa de correo. É probábel que o nome conteña caracteres non válidos. Probe con outro nome.", @@ -620,6 +626,8 @@ "Reply to sender only" : "Responder só ao remitente", "Mark as unfavorite" : "Marcar como non favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "Desde:", + "To:" : "Ata:", "Unsubscribe via link" : "Cancelar a subscrición a través da ligazón", "Unsubscribing will stop all messages from the mailing list {sender}" : "Se cancela a subscrición, deteranse todas as mensaxes da lista de correo {sender}", "Send unsubscribe email" : "Enviar correo para cancelar a subscrición", @@ -816,6 +824,7 @@ "Certificate imported successfully" : "O certificado foi importado correctamente", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Produciuse un fallo ao importar o certificado. Asegúrese de que a chave privada coincide co certificado e non estea protexida por unha frase de contrasinal.", "Failed to import the certificate" : "Produciuse un fallo ao importar o certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nome do certificado", "E-mail address" : "Enderezo de correo", @@ -823,7 +832,6 @@ "Delete certificate" : "Eliminar o certificado", "No certificate imported yet" : "Aínda non se importou ningún certificado", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -884,11 +892,8 @@ "Could not load the desired message" : "Non foi posíbel cargar a mensaxe desexada", "Could not load the message" : "Non foi posíbel cargar a mensaxe", "Error loading message" : "Produciuse un erro ao cargar a mensaxe", - "Determine importance using machine learning" : "Determinar a importancia mediante a aprendizaxe automática", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "As mensaxes marcaranse automaticamente como importantes en función das mensaxes coas que interactuou ou que foron marcadas como importantes. No principio, é posíbel que teña que cambiar manualmente a importancia para ensinarlle ao sistema, máis mellorará co paso do tempo", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Aquí amosaranse as mensaxes enviadas por Vde. que requiren unha resposta mais non a recibiron após dun par de días.", - "Mark all messages of this folder as read" : "Marcar todas as mensaxes deste cartafol como lidas", - "Last 7 days" : "Últimos 7 días", - "From me" : "De min" + "Add share link from Files" : "Engadir ligazón para compartir desde Ficheiros", + "Choose a file to add as attachment" : "Escolla un ficheiro para engadir como anexo", + "Choose a file to share as a link" : "Escolla un ficheiro para compartir como ligazón" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/he.js b/l10n/he.js index e7e76670eb..718ab17cac 100644 --- a/l10n/he.js +++ b/l10n/he.js @@ -49,9 +49,9 @@ OC.L10N.register( "Preferred writing mode for new messages and replies." : "מצב כתיבה מועדף להודעות חדשות ולתגובות.", "Default folders" : "תיקיות בררת מחדל", "Mail server" : "שרת דוא״ל", + "Email address" : "כתובת דוא״ל", "Go back" : "חזרה", "Change name" : "החלפת שם", - "Email address" : "כתובת דוא״ל", "Add alias" : "הוספת כינוי", "Cancel" : "ביטול", "General" : "כללי", @@ -61,6 +61,7 @@ OC.L10N.register( "Sorting" : "מיון", "Newest first" : "החדש ביותר ראשון", "Oldest first" : "הישן ביותר ראשון", + "Ok" : "אישור", "Privacy" : "פרטיות", "Security" : "אבטחה", "Manage certificates" : "ניהול אישורים", @@ -75,7 +76,6 @@ OC.L10N.register( "Send" : "שליחה", "Refresh" : "רענון", "About" : "אודות", - "Ok" : "אישור", "Message {id} could not be found" : "לא ניתן למצוא את הודעה {id}", "From" : "מאת", "Select account" : "בחר חשבון", @@ -92,14 +92,14 @@ OC.L10N.register( "Request a read receipt" : "בקשת אישור קריאה", "Encrypt message with Mailvelope" : "הצפנת הודעה עם Mailvelope", "Enter a date" : "נא למלא תאריך", - "Choose" : "בחר", - "Choose a file to add as attachment" : "בחירת קובץ להוספה כקובץ מצורף", - "Choose a file to share as a link" : "נא לבחור קובץ לשיתוף כקישור", + "Choose a file" : "נא לבחור קובץ", "Confirm" : "אימות", + "Revoke" : "שלילה", "Plain text" : "טקסט פשוט", "Rich text" : "טקסט עשיר", "No messages in this folder" : "אין הודעות בתיקייה זו", "No messages" : "אין הודעות", + "Choose" : "בחר", "Blind copy recipients only" : "נמענים נסתרים בלבד", "Could not delete message" : "לא ניתן למחוק הודעה", "Unfavorite" : "ביטול כמועדף", @@ -110,10 +110,10 @@ OC.L10N.register( "Mark as spam" : "לסמן כספאם", "Edit tags" : "עריכת תגיות", "Move thread" : "העברת שרשור", - "Delete thread" : "מחיקת שרשור", "More actions" : "פעולות נוספות", "Back" : "חזרה", "Edit as new message" : "עריכה כהודעה חדשה", + "Delete thread" : "מחיקת שרשור", "Load more" : "לטעון עוד", "_Mark {number} unread_::_Mark {number} unread_" : ["סימון {number} שלא נקראה","סימון {number} שלא נקראו","סימון {number} שלא נקראו"], "Mark as unread" : "סימון כלא נקרא", @@ -121,6 +121,7 @@ OC.L10N.register( "Report this bug" : "דיווח על התקלה הזו", "Could not create event" : "לא ניתן ליצור אירוע", "Create event" : "יצירת אירוע", + "Title" : "כותרת", "All day" : "כל היום", "Attendees" : "משתתפים", "Description" : "תיאור", @@ -143,6 +144,7 @@ OC.L10N.register( "Important info" : "מידע חשוב", "Other" : "אחר", "Forward" : "העברה", + "Link copied" : "הקישור הועתק", "Translate" : "תרגום", "View source" : "הצגת המקור", "Unnamed" : "ללא שם", @@ -157,6 +159,7 @@ OC.L10N.register( "The images have been blocked to protect your privacy." : "התמונות נחסמו כדי להגן על הפרטיות שלך", "Message frame" : "מסגרת הודעה", "Move" : "העברה", + "Change password" : "שינוי ססמה", "Remove account" : "הסרת חשבון", "Remove {email}" : "להסיר את {email}", "Show only subscribed folders" : "להציג תיקיות שבמינוי בלבד", @@ -202,6 +205,8 @@ OC.L10N.register( "Could not load your message thread" : "לא ניתן לטעון את שרשור ההודעות שלך", "Not found" : "לא נמצא", "Reply to sender only" : "להגיב לשולח בלבד", + "From:" : "התחלה:", + "To:" : "סיום:", "Could not remove trusted sender {sender}" : "לא ניתן להסיר את השולח המאומת {sender}", "No senders are trusted at the moment." : "אין שולחים מהימנים כרגע.", "Untitled event" : "אירוע ללא כותרת", @@ -269,6 +274,7 @@ OC.L10N.register( "Could not load the desired message" : "לא ניתן לטעון את ההודעה המבוקשת", "Could not load the message" : "לא ניתן לטעון את ההודעה", "Error loading message" : "שגיאה בהעלאת הודעה", - "Mark all messages of this folder as read" : "סימון כל ההודעות בתיקייה הזאת כנקראו" + "Choose a file to add as attachment" : "בחירת קובץ להוספה כקובץ מצורף", + "Choose a file to share as a link" : "נא לבחור קובץ לשיתוף כקישור" }, "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); diff --git a/l10n/he.json b/l10n/he.json index 80e1ba32c3..c54e319e2b 100644 --- a/l10n/he.json +++ b/l10n/he.json @@ -47,9 +47,9 @@ "Preferred writing mode for new messages and replies." : "מצב כתיבה מועדף להודעות חדשות ולתגובות.", "Default folders" : "תיקיות בררת מחדל", "Mail server" : "שרת דוא״ל", + "Email address" : "כתובת דוא״ל", "Go back" : "חזרה", "Change name" : "החלפת שם", - "Email address" : "כתובת דוא״ל", "Add alias" : "הוספת כינוי", "Cancel" : "ביטול", "General" : "כללי", @@ -59,6 +59,7 @@ "Sorting" : "מיון", "Newest first" : "החדש ביותר ראשון", "Oldest first" : "הישן ביותר ראשון", + "Ok" : "אישור", "Privacy" : "פרטיות", "Security" : "אבטחה", "Manage certificates" : "ניהול אישורים", @@ -73,7 +74,6 @@ "Send" : "שליחה", "Refresh" : "רענון", "About" : "אודות", - "Ok" : "אישור", "Message {id} could not be found" : "לא ניתן למצוא את הודעה {id}", "From" : "מאת", "Select account" : "בחר חשבון", @@ -90,14 +90,14 @@ "Request a read receipt" : "בקשת אישור קריאה", "Encrypt message with Mailvelope" : "הצפנת הודעה עם Mailvelope", "Enter a date" : "נא למלא תאריך", - "Choose" : "בחר", - "Choose a file to add as attachment" : "בחירת קובץ להוספה כקובץ מצורף", - "Choose a file to share as a link" : "נא לבחור קובץ לשיתוף כקישור", + "Choose a file" : "נא לבחור קובץ", "Confirm" : "אימות", + "Revoke" : "שלילה", "Plain text" : "טקסט פשוט", "Rich text" : "טקסט עשיר", "No messages in this folder" : "אין הודעות בתיקייה זו", "No messages" : "אין הודעות", + "Choose" : "בחר", "Blind copy recipients only" : "נמענים נסתרים בלבד", "Could not delete message" : "לא ניתן למחוק הודעה", "Unfavorite" : "ביטול כמועדף", @@ -108,10 +108,10 @@ "Mark as spam" : "לסמן כספאם", "Edit tags" : "עריכת תגיות", "Move thread" : "העברת שרשור", - "Delete thread" : "מחיקת שרשור", "More actions" : "פעולות נוספות", "Back" : "חזרה", "Edit as new message" : "עריכה כהודעה חדשה", + "Delete thread" : "מחיקת שרשור", "Load more" : "לטעון עוד", "_Mark {number} unread_::_Mark {number} unread_" : ["סימון {number} שלא נקראה","סימון {number} שלא נקראו","סימון {number} שלא נקראו"], "Mark as unread" : "סימון כלא נקרא", @@ -119,6 +119,7 @@ "Report this bug" : "דיווח על התקלה הזו", "Could not create event" : "לא ניתן ליצור אירוע", "Create event" : "יצירת אירוע", + "Title" : "כותרת", "All day" : "כל היום", "Attendees" : "משתתפים", "Description" : "תיאור", @@ -141,6 +142,7 @@ "Important info" : "מידע חשוב", "Other" : "אחר", "Forward" : "העברה", + "Link copied" : "הקישור הועתק", "Translate" : "תרגום", "View source" : "הצגת המקור", "Unnamed" : "ללא שם", @@ -155,6 +157,7 @@ "The images have been blocked to protect your privacy." : "התמונות נחסמו כדי להגן על הפרטיות שלך", "Message frame" : "מסגרת הודעה", "Move" : "העברה", + "Change password" : "שינוי ססמה", "Remove account" : "הסרת חשבון", "Remove {email}" : "להסיר את {email}", "Show only subscribed folders" : "להציג תיקיות שבמינוי בלבד", @@ -200,6 +203,8 @@ "Could not load your message thread" : "לא ניתן לטעון את שרשור ההודעות שלך", "Not found" : "לא נמצא", "Reply to sender only" : "להגיב לשולח בלבד", + "From:" : "התחלה:", + "To:" : "סיום:", "Could not remove trusted sender {sender}" : "לא ניתן להסיר את השולח המאומת {sender}", "No senders are trusted at the moment." : "אין שולחים מהימנים כרגע.", "Untitled event" : "אירוע ללא כותרת", @@ -267,6 +272,7 @@ "Could not load the desired message" : "לא ניתן לטעון את ההודעה המבוקשת", "Could not load the message" : "לא ניתן לטעון את ההודעה", "Error loading message" : "שגיאה בהעלאת הודעה", - "Mark all messages of this folder as read" : "סימון כל ההודעות בתיקייה הזאת כנקראו" + "Choose a file to add as attachment" : "בחירת קובץ להוספה כקובץ מצורף", + "Choose a file to share as a link" : "נא לבחור קובץ לשיתוף כקישור" },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" } \ No newline at end of file diff --git a/l10n/hr.js b/l10n/hr.js index 3fcfea08fc..8f099147a7 100644 --- a/l10n/hr.js +++ b/l10n/hr.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "SMTP port", "SMTP User" : "SMTP korisničko ime", "SMTP Password" : "SMTP zaporka", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Da bi Google račun radio s ovom aplikacijom, morate uključiti dvofaktorsku autentikaciju u Googleu i generirati lozinku aplikacije.", "Account settings" : "Postavke računa", "Aliases" : "Pseudonimi", "Alias to S/MIME certificate mapping" : "Mapiranje aliasa na S/MIME certifikat", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "Poslužitelj e-pošte", "Sieve server" : "Sieve poslužitelj", "Folder search" : "Pretraživanje mapa", + "Email address" : "Adresa e-pošte", "Update alias" : "Ažuriraj pseudonim", "Rename alias" : "Preimenuj pseudonim", "Show update alias form" : "Prikaži obrazac za ažuriranje pseudonima", "Delete alias" : "Izbriši pseudonim", "Go back" : "Natrag", "Change name" : "Promijeni ime", - "Email address" : "Adresa e-pošte", "Add alias" : "Dodaj pseudonim", "Create alias" : "Stvori pseudonim", "Cancel" : "Odustani", @@ -150,13 +149,16 @@ OC.L10N.register( "Sorting" : "Razvrstavanje", "Newest first" : "Najnoviji prvi", "Oldest first" : "Najstariji prvi", + "New text block" : "Novi tekstualni blok", + "Title of the text block" : "Naslov tekstualnog bloka", + "Content of the text block" : "Sadržaj tekstualnog bloka", + "Ok" : "U redu", "Avatars from Gravatar and favicons" : "Avatari iz Gravatara i favikone", "Reply position" : "Položaj odgovora", "Top" : "Na vrhu", "Bottom" : "Na dnu", "Text blocks" : "Tekstualni blokovi", "Reusable pieces of text that can be inserted in messages" : "Ponovno upotrebljivi dijelovi teksta koji se mogu umetnuti u poruke", - "New text block" : "Novi tekstualni blok", "Shared with me" : "Dijeljeno sa mnom", "Privacy" : "Privatnost", "Data collection" : "Prikupljanje podataka", @@ -187,9 +189,6 @@ OC.L10N.register( "About" : "Informacije", "Acknowledgements" : "Zahvale", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ova aplikacija uključuje CKEditor, uređivač otvorenog koda. Autorska prava © doprinositelji CKEditor-a. Licencirano pod GPLv2.", - "Title of the text block" : "Naslov tekstualnog bloka", - "Content of the text block" : "Sadržaj tekstualnog bloka", - "Ok" : "U redu", "Automatically create tentative appointments in calendar" : "Automatski stvaraj privremene termine u kalendaru", "No certificate" : "Nema certifikata", "Certificate updated" : "Certifikat je ažuriran", @@ -233,7 +232,6 @@ OC.L10N.register( "Disable formatting" : "Onemogući oblikovanje", "Upload attachment" : "Otpremi privitak", "Add attachment from Files" : "Dodaj privitak iz datoteka", - "Add share link from Files" : "Dodaj poveznicu za dijeljenje iz aplikacije Datoteke", "Smart picker" : "Pametni odabir", "Request a read receipt" : "Zatražite potvrdu o čitanju", "Sign message with S/MIME" : "Potpiši poruku S/MIME-om", @@ -245,15 +243,14 @@ OC.L10N.register( "Monday morning" : "U ponedjeljak ujutro", "Custom date and time" : "Prilagođeni datum i vrijeme", "Enter a date" : "Unesi datum", - "Choose" : "Odaberite", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Privitak prekoračuje dopuštenu veličinu privitaka od {size}. Dijelite datoteku putem poveznice.","Privici prekoračuju dopuštenu veličinu privitaka od {size}. Dijelite datoteke putem poveznice.","Privici prekoračuju dopuštenu veličinu privitaka od {size}. Dijelite datoteke putem poveznice."], - "Choose a file to add as attachment" : "Izaberi datoteku kao privitak", - "Choose a file to share as a link" : "Izaberi datoteku za dijeljenje putem poveznice", + "Choose a file" : "Odaberi datoteku", "_{count} attachment_::_{count} attachments_" : ["{count} privitak","{count} privitka","{count} privitaka"], "Untitled message" : "Poruka bez naslova", "Expand composer" : "Proširi sastavljač poruke", "Close composer" : "Zatvori sastavljač poruke", "Confirm" : "Potvrdi", + "Revoke" : "Opozovi", "Tag: {name} deleted" : "Oznaka: {name} je obrisana", "An error occurred, unable to delete the tag." : "Došlo je do pogreške, nije moguće izbrisati oznaku.", "The tag will be deleted from all messages." : "Oznaka će biti uklonjena sa svih poruka.", @@ -261,6 +258,7 @@ OC.L10N.register( "Rich text" : "Bogat tekst", "No messages in this folder" : "Nema poruka u ovoj mapi", "No messages" : "Nema poruka", + "Choose" : "Odaberite", "Blind copy recipients only" : "Samo primatelji skrivenih kopija poruke", "No subject" : "Bez predmeta", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Skica:{markup-end} {subject}", @@ -300,8 +298,6 @@ OC.L10N.register( "Move Message" : "Premjesti poruku", "Archive thread" : "Arhiviraj nit", "Archive message" : "Arhiviraj poruku", - "Delete thread" : "Izbriši dretvu", - "Delete message" : "Izbriši poruku", "More actions" : "Dodatne radnje", "Back" : "Natrag", "Set custom snooze" : "Postavi prilagođenu odgodu", @@ -309,6 +305,8 @@ OC.L10N.register( "Reply with meeting" : "Odgovori s prijedlogom sastanka", "Create task" : "Stvori zadatak", "Download message" : "Preuzmi poruku", + "Delete thread" : "Izbriši dretvu", + "Delete message" : "Izbriši poruku", "Back to all actions" : "Natrag na sve radnje", "Manage quick actions" : "Upravljaj brzim radnjama", "Load more" : "Učitaj više", @@ -332,6 +330,7 @@ OC.L10N.register( "Event created" : "Događaj je stvoren", "Could not create event" : "Nije moguće stvoriti događaj", "Create event" : "Stvori događaj", + "Title" : "Naslov", "All day" : "Cijeli dan", "Attendees" : "Sudionici", "You can only invite attendees if your account has an email address set" : "Sudionike možete pozvati samo ako vaš račun ima postavljenu adresu e-pošte", @@ -402,7 +401,9 @@ OC.L10N.register( "Could not snooze message" : "Nije moguće odgoditi poruku", "Message was unsnoozed" : "Odgoda poruke je uklonjena", "Could not unsnooze message" : "Nije moguće ukloniti odgodu poruke", + "Direct link copied to clipboard" : "Direktna poveznica kopirana je u međuspremnik.", "Forward" : "Naprijed", + "Link copied" : "Poveznica je kopirana", "Move message" : "Premjesti poruku", "Translate" : "Prevedi", "Forward message as attachment" : "Proslijedi poruku kao privitak", @@ -444,6 +445,7 @@ OC.L10N.register( "Moving message" : "Premještanje poruke", "This account cannot connect" : "Ovaj se račun ne može povezati", "Connection failed. Please verify your information and try again" : "Povezivanje nije uspjelo. Provjerite podatke i pokušajte ponovno", + "Change password" : "Promijeni lozinku", "Used quota: {quota}% ({limit})" : "Iskorištena kvota: {quota}% ({limit})", "Used quota: {quota}%" : "Iskorištena kvota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nije moguće stvoriti sandučić. Naziv vjerojatno sadrži nedopuštene znakove. Pokušajte s drugim nazivom.", @@ -624,6 +626,7 @@ OC.L10N.register( "Reply to sender only" : "Odgovori pošiljatelju", "Mark as unfavorite" : "Ukloni iz omiljenih", "Mark as favorite" : "Označi kao omiljeno", + "From:" : "Od:", "Unsubscribe via link" : "Odjavi se putem poveznice", "Unsubscribing will stop all messages from the mailing list {sender}" : "Odjavom ćete zaustaviti sve poruke s mailing liste {sender}", "Send unsubscribe email" : "Pošalji e-poruku za odjavu", @@ -820,6 +823,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certifikat je uspješno uvezen", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nije uspjelo uvesti certifikat. Provjerite odgovara li privatni ključcertifikatu i nije li zaštićen lozinkom.", "Failed to import the certificate" : "Nije uspjelo uvesti certifikat", + "Import S/MIME certificate" : "Uvezi S/MIME certifikat", "S/MIME certificates" : "S/MIME certifikati", "Certificate name" : "Naziv certifikata", "E-mail address" : "Adresa e-pošte", @@ -827,7 +831,6 @@ OC.L10N.register( "Delete certificate" : "Izbriši certifikat", "No certificate imported yet" : "Još nije uvezen nijedan certifikat", "Import certificate" : "Uvezi certifikat", - "Import S/MIME certificate" : "Uvezi S/MIME certifikat", "PKCS #12 Certificate" : "PKCS #12 certifikat", "PEM Certificate" : "PEM certifikat", "Certificate" : "Vjerodajnica", @@ -889,11 +892,8 @@ OC.L10N.register( "Could not load the desired message" : "Ne može se učitati željena poruka", "Could not load the message" : "Poruku nije moguće učitati", "Error loading message" : "Pogreška pri učitavanju poruke", - "Determine importance using machine learning" : "Odredi važnost pomoću strojnog učenja", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Poruke se automatski označavaju kao važne na temelju poruka kojima ste rukovali ili koje ste označili kao važne. U početku ćete možda morati ručno mijenjati važnost poruka kako bi sustav zapamtio vaše želje, ali s vremenom će se poboljšati.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Poruke koje ste poslali i koje zahtijevaju odgovor, ali ga nisu dobile nakon nekoliko dana, prikazivat će se ovdje.", - "Mark all messages of this folder as read" : "Označi sve poruke u ovoj mapi kao pročitane", - "Last 7 days" : "Zadnjih 7 dana", - "From me" : "Od mene" + "Add share link from Files" : "Dodaj poveznicu za dijeljenje iz aplikacije Datoteke", + "Choose a file to add as attachment" : "Izaberi datoteku kao privitak", + "Choose a file to share as a link" : "Izaberi datoteku za dijeljenje putem poveznice" }, "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/l10n/hr.json b/l10n/hr.json index 78b44c4ed1..aa4e05e228 100644 --- a/l10n/hr.json +++ b/l10n/hr.json @@ -91,7 +91,6 @@ "SMTP Port" : "SMTP port", "SMTP User" : "SMTP korisničko ime", "SMTP Password" : "SMTP zaporka", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Da bi Google račun radio s ovom aplikacijom, morate uključiti dvofaktorsku autentikaciju u Googleu i generirati lozinku aplikacije.", "Account settings" : "Postavke računa", "Aliases" : "Pseudonimi", "Alias to S/MIME certificate mapping" : "Mapiranje aliasa na S/MIME certifikat", @@ -115,13 +114,13 @@ "Mail server" : "Poslužitelj e-pošte", "Sieve server" : "Sieve poslužitelj", "Folder search" : "Pretraživanje mapa", + "Email address" : "Adresa e-pošte", "Update alias" : "Ažuriraj pseudonim", "Rename alias" : "Preimenuj pseudonim", "Show update alias form" : "Prikaži obrazac za ažuriranje pseudonima", "Delete alias" : "Izbriši pseudonim", "Go back" : "Natrag", "Change name" : "Promijeni ime", - "Email address" : "Adresa e-pošte", "Add alias" : "Dodaj pseudonim", "Create alias" : "Stvori pseudonim", "Cancel" : "Odustani", @@ -148,13 +147,16 @@ "Sorting" : "Razvrstavanje", "Newest first" : "Najnoviji prvi", "Oldest first" : "Najstariji prvi", + "New text block" : "Novi tekstualni blok", + "Title of the text block" : "Naslov tekstualnog bloka", + "Content of the text block" : "Sadržaj tekstualnog bloka", + "Ok" : "U redu", "Avatars from Gravatar and favicons" : "Avatari iz Gravatara i favikone", "Reply position" : "Položaj odgovora", "Top" : "Na vrhu", "Bottom" : "Na dnu", "Text blocks" : "Tekstualni blokovi", "Reusable pieces of text that can be inserted in messages" : "Ponovno upotrebljivi dijelovi teksta koji se mogu umetnuti u poruke", - "New text block" : "Novi tekstualni blok", "Shared with me" : "Dijeljeno sa mnom", "Privacy" : "Privatnost", "Data collection" : "Prikupljanje podataka", @@ -185,9 +187,6 @@ "About" : "Informacije", "Acknowledgements" : "Zahvale", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ova aplikacija uključuje CKEditor, uređivač otvorenog koda. Autorska prava © doprinositelji CKEditor-a. Licencirano pod GPLv2.", - "Title of the text block" : "Naslov tekstualnog bloka", - "Content of the text block" : "Sadržaj tekstualnog bloka", - "Ok" : "U redu", "Automatically create tentative appointments in calendar" : "Automatski stvaraj privremene termine u kalendaru", "No certificate" : "Nema certifikata", "Certificate updated" : "Certifikat je ažuriran", @@ -231,7 +230,6 @@ "Disable formatting" : "Onemogući oblikovanje", "Upload attachment" : "Otpremi privitak", "Add attachment from Files" : "Dodaj privitak iz datoteka", - "Add share link from Files" : "Dodaj poveznicu za dijeljenje iz aplikacije Datoteke", "Smart picker" : "Pametni odabir", "Request a read receipt" : "Zatražite potvrdu o čitanju", "Sign message with S/MIME" : "Potpiši poruku S/MIME-om", @@ -243,15 +241,14 @@ "Monday morning" : "U ponedjeljak ujutro", "Custom date and time" : "Prilagođeni datum i vrijeme", "Enter a date" : "Unesi datum", - "Choose" : "Odaberite", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Privitak prekoračuje dopuštenu veličinu privitaka od {size}. Dijelite datoteku putem poveznice.","Privici prekoračuju dopuštenu veličinu privitaka od {size}. Dijelite datoteke putem poveznice.","Privici prekoračuju dopuštenu veličinu privitaka od {size}. Dijelite datoteke putem poveznice."], - "Choose a file to add as attachment" : "Izaberi datoteku kao privitak", - "Choose a file to share as a link" : "Izaberi datoteku za dijeljenje putem poveznice", + "Choose a file" : "Odaberi datoteku", "_{count} attachment_::_{count} attachments_" : ["{count} privitak","{count} privitka","{count} privitaka"], "Untitled message" : "Poruka bez naslova", "Expand composer" : "Proširi sastavljač poruke", "Close composer" : "Zatvori sastavljač poruke", "Confirm" : "Potvrdi", + "Revoke" : "Opozovi", "Tag: {name} deleted" : "Oznaka: {name} je obrisana", "An error occurred, unable to delete the tag." : "Došlo je do pogreške, nije moguće izbrisati oznaku.", "The tag will be deleted from all messages." : "Oznaka će biti uklonjena sa svih poruka.", @@ -259,6 +256,7 @@ "Rich text" : "Bogat tekst", "No messages in this folder" : "Nema poruka u ovoj mapi", "No messages" : "Nema poruka", + "Choose" : "Odaberite", "Blind copy recipients only" : "Samo primatelji skrivenih kopija poruke", "No subject" : "Bez predmeta", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Skica:{markup-end} {subject}", @@ -298,8 +296,6 @@ "Move Message" : "Premjesti poruku", "Archive thread" : "Arhiviraj nit", "Archive message" : "Arhiviraj poruku", - "Delete thread" : "Izbriši dretvu", - "Delete message" : "Izbriši poruku", "More actions" : "Dodatne radnje", "Back" : "Natrag", "Set custom snooze" : "Postavi prilagođenu odgodu", @@ -307,6 +303,8 @@ "Reply with meeting" : "Odgovori s prijedlogom sastanka", "Create task" : "Stvori zadatak", "Download message" : "Preuzmi poruku", + "Delete thread" : "Izbriši dretvu", + "Delete message" : "Izbriši poruku", "Back to all actions" : "Natrag na sve radnje", "Manage quick actions" : "Upravljaj brzim radnjama", "Load more" : "Učitaj više", @@ -330,6 +328,7 @@ "Event created" : "Događaj je stvoren", "Could not create event" : "Nije moguće stvoriti događaj", "Create event" : "Stvori događaj", + "Title" : "Naslov", "All day" : "Cijeli dan", "Attendees" : "Sudionici", "You can only invite attendees if your account has an email address set" : "Sudionike možete pozvati samo ako vaš račun ima postavljenu adresu e-pošte", @@ -400,7 +399,9 @@ "Could not snooze message" : "Nije moguće odgoditi poruku", "Message was unsnoozed" : "Odgoda poruke je uklonjena", "Could not unsnooze message" : "Nije moguće ukloniti odgodu poruke", + "Direct link copied to clipboard" : "Direktna poveznica kopirana je u međuspremnik.", "Forward" : "Naprijed", + "Link copied" : "Poveznica je kopirana", "Move message" : "Premjesti poruku", "Translate" : "Prevedi", "Forward message as attachment" : "Proslijedi poruku kao privitak", @@ -442,6 +443,7 @@ "Moving message" : "Premještanje poruke", "This account cannot connect" : "Ovaj se račun ne može povezati", "Connection failed. Please verify your information and try again" : "Povezivanje nije uspjelo. Provjerite podatke i pokušajte ponovno", + "Change password" : "Promijeni lozinku", "Used quota: {quota}% ({limit})" : "Iskorištena kvota: {quota}% ({limit})", "Used quota: {quota}%" : "Iskorištena kvota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nije moguće stvoriti sandučić. Naziv vjerojatno sadrži nedopuštene znakove. Pokušajte s drugim nazivom.", @@ -622,6 +624,7 @@ "Reply to sender only" : "Odgovori pošiljatelju", "Mark as unfavorite" : "Ukloni iz omiljenih", "Mark as favorite" : "Označi kao omiljeno", + "From:" : "Od:", "Unsubscribe via link" : "Odjavi se putem poveznice", "Unsubscribing will stop all messages from the mailing list {sender}" : "Odjavom ćete zaustaviti sve poruke s mailing liste {sender}", "Send unsubscribe email" : "Pošalji e-poruku za odjavu", @@ -818,6 +821,7 @@ "Certificate imported successfully" : "Certifikat je uspješno uvezen", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nije uspjelo uvesti certifikat. Provjerite odgovara li privatni ključcertifikatu i nije li zaštićen lozinkom.", "Failed to import the certificate" : "Nije uspjelo uvesti certifikat", + "Import S/MIME certificate" : "Uvezi S/MIME certifikat", "S/MIME certificates" : "S/MIME certifikati", "Certificate name" : "Naziv certifikata", "E-mail address" : "Adresa e-pošte", @@ -825,7 +829,6 @@ "Delete certificate" : "Izbriši certifikat", "No certificate imported yet" : "Još nije uvezen nijedan certifikat", "Import certificate" : "Uvezi certifikat", - "Import S/MIME certificate" : "Uvezi S/MIME certifikat", "PKCS #12 Certificate" : "PKCS #12 certifikat", "PEM Certificate" : "PEM certifikat", "Certificate" : "Vjerodajnica", @@ -887,11 +890,8 @@ "Could not load the desired message" : "Ne može se učitati željena poruka", "Could not load the message" : "Poruku nije moguće učitati", "Error loading message" : "Pogreška pri učitavanju poruke", - "Determine importance using machine learning" : "Odredi važnost pomoću strojnog učenja", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Poruke se automatski označavaju kao važne na temelju poruka kojima ste rukovali ili koje ste označili kao važne. U početku ćete možda morati ručno mijenjati važnost poruka kako bi sustav zapamtio vaše želje, ali s vremenom će se poboljšati.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Poruke koje ste poslali i koje zahtijevaju odgovor, ali ga nisu dobile nakon nekoliko dana, prikazivat će se ovdje.", - "Mark all messages of this folder as read" : "Označi sve poruke u ovoj mapi kao pročitane", - "Last 7 days" : "Zadnjih 7 dana", - "From me" : "Od mene" + "Add share link from Files" : "Dodaj poveznicu za dijeljenje iz aplikacije Datoteke", + "Choose a file to add as attachment" : "Izaberi datoteku kao privitak", + "Choose a file to share as a link" : "Izaberi datoteku za dijeljenje putem poveznice" },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/hu.js b/l10n/hu.js index 9ee9c392f5..1edd5415cd 100644 --- a/l10n/hu.js +++ b/l10n/hu.js @@ -69,7 +69,6 @@ OC.L10N.register( "SMTP Port" : "SMTP port", "SMTP User" : "SMTP felhasználó", "SMTP Password" : "SMTP jelszó", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Ahhoz, hogy a Google-fiókja működjön ezzel az alkalmazással, engedélyeznie kell a kétfaktoros hitelesítést, és elő kell állítania egy alkalmazásjelszót.", "Account settings" : "Fiókbeállítások", "Aliases" : "Álnevek", "Alias to S/MIME certificate mapping" : "Álnév az S/MIME tanúsítvány-hozzárendeléshez", @@ -86,13 +85,13 @@ OC.L10N.register( "Calendar settings" : "Naptár beállításai", "Filters" : "Szűrők", "Mail server" : "Levelezőkiszolgáló", + "Email address" : "E-mail-cím", "Update alias" : "Álnév frissítése", "Rename alias" : "Álnév átnevezése", "Show update alias form" : "Álnév frissítési űrlap megjelenítése", "Delete alias" : "Álnév törlése", "Go back" : "Visszalépés", "Change name" : "Név megváltoztatása", - "Email address" : "E-mail-cím", "Add alias" : "Álnév hozzáadása", "Create alias" : "Álnév létrehozása", "Cancel" : "Mégse", @@ -105,6 +104,7 @@ OC.L10N.register( "Sorting" : "Rendezés", "Newest first" : "Legújabb elöl", "Oldest first" : "Régebbiek elöl", + "Ok" : "Rendben", "Text blocks" : "Szövegblokkok", "Shared with me" : "Megosztva velem", "Privacy" : "Adatvédelem", @@ -122,7 +122,6 @@ OC.L10N.register( "Send" : "Küldés", "Refresh" : "Frissítés", "About" : "Névjegy", - "Ok" : "Rendben", "No certificate" : "Nincs tanúsítvány", "Certificate updated" : "Tanúsítvány frissítve", "Could not update certificate" : "A tanúsítvány frissítése nem sikerült", @@ -169,19 +168,19 @@ OC.L10N.register( "Monday morning" : "Hétfő reggel", "Custom date and time" : "Egyéni dátum és idő", "Enter a date" : "Adjon meg egy dátumot", - "Choose" : "Válasszon", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["A melléklet mérete meghaladja a megengedett {size}-os méretet. Inkább ossza meg a fájlt hivatkozással.","A melléklet mérete meghaladja a megengedett {size}-os méretet. Inkább ossza meg a fájlt hivatkozással."], - "Choose a file to add as attachment" : "Válasszon mellékletként hozzáadandó fájlt", - "Choose a file to share as a link" : "Válasszon fájlt a hivatkozással történő megosztáshoz", + "Choose a file" : "Válasszon egy fájlt", "_{count} attachment_::_{count} attachments_" : ["{count} melléklet","{count} melléklet"], "Untitled message" : "Névtelen üzenet", "Expand composer" : "Szerkesztő kibontása", "Close composer" : "Szerkesztő bezárása", "Confirm" : "Megerősítés", + "Revoke" : "Visszavonás", "Plain text" : "Egyszerű szöveg", "Rich text" : "Formázott szöveg", "No messages in this folder" : "Nincs üzenet a mappában!", "No messages" : "Nincs üzenet", + "Choose" : "Válasszon", "Blind copy recipients only" : "Csak a rejtett másolatok címzettjei", "No subject" : "Nincs tárgy", "Later today – {timeLocale}" : "Később a mai nap – {timeLocale}", @@ -213,14 +212,14 @@ OC.L10N.register( "Move thread" : "Szál áthelyezése", "Archive thread" : "Szál archiválása", "Archive message" : "Üzenet archiválása", - "Delete thread" : "Szál törlése", - "Delete message" : "Üzenet törlése", "More actions" : "További műveletek", "Back" : "Vissza", "Set custom snooze" : "Egyéni altatás beállítása", "Edit as new message" : "Szerkesztés új üzenetként", "Create task" : "Feladat létrehozása", "Download message" : "Üzenet letöltése", + "Delete thread" : "Szál törlése", + "Delete message" : "Üzenet törlése", "Load more" : "Továbbiak betöltése", "_Mark {number} read_::_Mark {number} read_" : ["{number} olvasottnak jelölése","{number} olvasottnak jelölése"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number} olvasatlannak jelölése","{number} olvasatlannak jelölése"], @@ -240,6 +239,7 @@ OC.L10N.register( "Event created" : "Esemény létrehozása", "Could not create event" : "Nem sikerült létrehozni az eseményt", "Create event" : "Esemény létrehozása", + "Title" : "Cím", "All day" : "Egész nap", "Attendees" : "Résztvevők", "Select calendar" : "Válasszon naptárat", @@ -275,6 +275,7 @@ OC.L10N.register( "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Nem helyezheti át ezt az üzenetet az archiválási mappába vagy törölheti a jelenlegi mappából", "Last hour" : "Elmúlt óra", "Today" : "Ma", + "Yesterday" : "Tegnap", "Last week" : "Előző hét", "Last month" : "Előző hónap", "Choose target folder" : "Válasszon célmappát", @@ -292,7 +293,9 @@ OC.L10N.register( "Could not snooze message" : "Nem sikerült az üzenet elaltatása", "Message was unsnoozed" : "Az üzenet fel lett ébresztve", "Could not unsnooze message" : "Nem sikerült az üzenet felébresztése", + "Direct link copied to clipboard" : "Közvetlen hivatkozás a vágólapra másolva", "Forward" : "Továbbítás", + "Link copied" : "Hivatkozás másolva", "Move message" : "Üzenet áthelyezése", "Translate" : "Lefordítás", "Forward message as attachment" : "Üzenet továbbítása mellékletként", @@ -324,6 +327,7 @@ OC.L10N.register( "Moving" : "Áthelyezés", "Moving thread" : "Szál áthelyezése", "Moving message" : "Üzenet áthelyezése", + "Change password" : "Jelszó módosítása", "Remove account" : "Fiók eltávolítása", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Az {email} fiók és a gyorsítótárazott e-mail-adatok el lesznek távolítva a Nextcloudból, az e-mail-szolgáltatójától azonban nem.", "Remove {email}" : "{email} eltávolítása", @@ -448,6 +452,8 @@ OC.L10N.register( "Reply to sender only" : "Válasz csak a feladónak", "Mark as unfavorite" : "Megjelölés nem kedvencként", "Mark as favorite" : "Megjelölés kedvencként", + "From:" : "Ettől a dátumtól:", + "To:" : "Eddig a dátumig:", "Unsubscribe via link" : "Leiratkozás hivatkozással", "Unsubscribing will stop all messages from the mailing list {sender}" : "A leiratkozás leállít minden üzenetet, amely a(z) {sender} levelezőlistáról érkezik", "Send unsubscribe email" : "Leiratkozási e-mail küldése", @@ -575,6 +581,7 @@ OC.L10N.register( "Certificate imported successfully" : "Tanúsítvány sikeresen importálva", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "A tanúsítvány importálása sikertelen. Győződjön meg arról, hogy a privát kulcs megfelel a tanúsítványnak, és nem védi jelszó.", "Failed to import the certificate" : "A tanúsítvány importálása sikertelen", + "Import S/MIME certificate" : "S/MIME tanúsítvány importálása", "S/MIME certificates" : "S/MIME tanúsítványok", "Certificate name" : "Tanúsítvány neve", "E-mail address" : "E-mail-cím", @@ -582,7 +589,6 @@ OC.L10N.register( "Delete certificate" : "Tanúsítvány törlése", "No certificate imported yet" : "Még nincs tanúsítvány importálva", "Import certificate" : "Tanúsítvány importálása", - "Import S/MIME certificate" : "S/MIME tanúsítvány importálása", "PKCS #12 Certificate" : "PKCS #12 tanúsítvány", "PEM Certificate" : "PEM-tanúsítvány", "Certificate" : "Tanúsítvány", @@ -625,8 +631,7 @@ OC.L10N.register( "Could not load the desired message" : "Nem sikerült betölteni a kért üzenetet", "Could not load the message" : "Nem sikerült betölteni az üzenetet", "Error loading message" : "Hiba történt az üzenet betöltése közben", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Az üzeneteket automatikusan fontosként jelöli meg az alapján, hogy mely üzenetekre reagált, vagy jelölt meg fontosként. Kezdetben lehet, hogy kézzel megváltoztatnia a fontosságot és ezzel kell tanítania a rendszert, de ez az idő múlásával javulni fog.", - "Mark all messages of this folder as read" : "A mappában található összes üzenet megjelölése olvasottként", - "Last 7 days" : "Előző 7 nap" + "Choose a file to add as attachment" : "Válasszon mellékletként hozzáadandó fájlt", + "Choose a file to share as a link" : "Válasszon fájlt a hivatkozással történő megosztáshoz" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/hu.json b/l10n/hu.json index 4eed3f31ce..38447a0e4c 100644 --- a/l10n/hu.json +++ b/l10n/hu.json @@ -67,7 +67,6 @@ "SMTP Port" : "SMTP port", "SMTP User" : "SMTP felhasználó", "SMTP Password" : "SMTP jelszó", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Ahhoz, hogy a Google-fiókja működjön ezzel az alkalmazással, engedélyeznie kell a kétfaktoros hitelesítést, és elő kell állítania egy alkalmazásjelszót.", "Account settings" : "Fiókbeállítások", "Aliases" : "Álnevek", "Alias to S/MIME certificate mapping" : "Álnév az S/MIME tanúsítvány-hozzárendeléshez", @@ -84,13 +83,13 @@ "Calendar settings" : "Naptár beállításai", "Filters" : "Szűrők", "Mail server" : "Levelezőkiszolgáló", + "Email address" : "E-mail-cím", "Update alias" : "Álnév frissítése", "Rename alias" : "Álnév átnevezése", "Show update alias form" : "Álnév frissítési űrlap megjelenítése", "Delete alias" : "Álnév törlése", "Go back" : "Visszalépés", "Change name" : "Név megváltoztatása", - "Email address" : "E-mail-cím", "Add alias" : "Álnév hozzáadása", "Create alias" : "Álnév létrehozása", "Cancel" : "Mégse", @@ -103,6 +102,7 @@ "Sorting" : "Rendezés", "Newest first" : "Legújabb elöl", "Oldest first" : "Régebbiek elöl", + "Ok" : "Rendben", "Text blocks" : "Szövegblokkok", "Shared with me" : "Megosztva velem", "Privacy" : "Adatvédelem", @@ -120,7 +120,6 @@ "Send" : "Küldés", "Refresh" : "Frissítés", "About" : "Névjegy", - "Ok" : "Rendben", "No certificate" : "Nincs tanúsítvány", "Certificate updated" : "Tanúsítvány frissítve", "Could not update certificate" : "A tanúsítvány frissítése nem sikerült", @@ -167,19 +166,19 @@ "Monday morning" : "Hétfő reggel", "Custom date and time" : "Egyéni dátum és idő", "Enter a date" : "Adjon meg egy dátumot", - "Choose" : "Válasszon", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["A melléklet mérete meghaladja a megengedett {size}-os méretet. Inkább ossza meg a fájlt hivatkozással.","A melléklet mérete meghaladja a megengedett {size}-os méretet. Inkább ossza meg a fájlt hivatkozással."], - "Choose a file to add as attachment" : "Válasszon mellékletként hozzáadandó fájlt", - "Choose a file to share as a link" : "Válasszon fájlt a hivatkozással történő megosztáshoz", + "Choose a file" : "Válasszon egy fájlt", "_{count} attachment_::_{count} attachments_" : ["{count} melléklet","{count} melléklet"], "Untitled message" : "Névtelen üzenet", "Expand composer" : "Szerkesztő kibontása", "Close composer" : "Szerkesztő bezárása", "Confirm" : "Megerősítés", + "Revoke" : "Visszavonás", "Plain text" : "Egyszerű szöveg", "Rich text" : "Formázott szöveg", "No messages in this folder" : "Nincs üzenet a mappában!", "No messages" : "Nincs üzenet", + "Choose" : "Válasszon", "Blind copy recipients only" : "Csak a rejtett másolatok címzettjei", "No subject" : "Nincs tárgy", "Later today – {timeLocale}" : "Később a mai nap – {timeLocale}", @@ -211,14 +210,14 @@ "Move thread" : "Szál áthelyezése", "Archive thread" : "Szál archiválása", "Archive message" : "Üzenet archiválása", - "Delete thread" : "Szál törlése", - "Delete message" : "Üzenet törlése", "More actions" : "További műveletek", "Back" : "Vissza", "Set custom snooze" : "Egyéni altatás beállítása", "Edit as new message" : "Szerkesztés új üzenetként", "Create task" : "Feladat létrehozása", "Download message" : "Üzenet letöltése", + "Delete thread" : "Szál törlése", + "Delete message" : "Üzenet törlése", "Load more" : "Továbbiak betöltése", "_Mark {number} read_::_Mark {number} read_" : ["{number} olvasottnak jelölése","{number} olvasottnak jelölése"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number} olvasatlannak jelölése","{number} olvasatlannak jelölése"], @@ -238,6 +237,7 @@ "Event created" : "Esemény létrehozása", "Could not create event" : "Nem sikerült létrehozni az eseményt", "Create event" : "Esemény létrehozása", + "Title" : "Cím", "All day" : "Egész nap", "Attendees" : "Résztvevők", "Select calendar" : "Válasszon naptárat", @@ -273,6 +273,7 @@ "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Nem helyezheti át ezt az üzenetet az archiválási mappába vagy törölheti a jelenlegi mappából", "Last hour" : "Elmúlt óra", "Today" : "Ma", + "Yesterday" : "Tegnap", "Last week" : "Előző hét", "Last month" : "Előző hónap", "Choose target folder" : "Válasszon célmappát", @@ -290,7 +291,9 @@ "Could not snooze message" : "Nem sikerült az üzenet elaltatása", "Message was unsnoozed" : "Az üzenet fel lett ébresztve", "Could not unsnooze message" : "Nem sikerült az üzenet felébresztése", + "Direct link copied to clipboard" : "Közvetlen hivatkozás a vágólapra másolva", "Forward" : "Továbbítás", + "Link copied" : "Hivatkozás másolva", "Move message" : "Üzenet áthelyezése", "Translate" : "Lefordítás", "Forward message as attachment" : "Üzenet továbbítása mellékletként", @@ -322,6 +325,7 @@ "Moving" : "Áthelyezés", "Moving thread" : "Szál áthelyezése", "Moving message" : "Üzenet áthelyezése", + "Change password" : "Jelszó módosítása", "Remove account" : "Fiók eltávolítása", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Az {email} fiók és a gyorsítótárazott e-mail-adatok el lesznek távolítva a Nextcloudból, az e-mail-szolgáltatójától azonban nem.", "Remove {email}" : "{email} eltávolítása", @@ -446,6 +450,8 @@ "Reply to sender only" : "Válasz csak a feladónak", "Mark as unfavorite" : "Megjelölés nem kedvencként", "Mark as favorite" : "Megjelölés kedvencként", + "From:" : "Ettől a dátumtól:", + "To:" : "Eddig a dátumig:", "Unsubscribe via link" : "Leiratkozás hivatkozással", "Unsubscribing will stop all messages from the mailing list {sender}" : "A leiratkozás leállít minden üzenetet, amely a(z) {sender} levelezőlistáról érkezik", "Send unsubscribe email" : "Leiratkozási e-mail küldése", @@ -573,6 +579,7 @@ "Certificate imported successfully" : "Tanúsítvány sikeresen importálva", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "A tanúsítvány importálása sikertelen. Győződjön meg arról, hogy a privát kulcs megfelel a tanúsítványnak, és nem védi jelszó.", "Failed to import the certificate" : "A tanúsítvány importálása sikertelen", + "Import S/MIME certificate" : "S/MIME tanúsítvány importálása", "S/MIME certificates" : "S/MIME tanúsítványok", "Certificate name" : "Tanúsítvány neve", "E-mail address" : "E-mail-cím", @@ -580,7 +587,6 @@ "Delete certificate" : "Tanúsítvány törlése", "No certificate imported yet" : "Még nincs tanúsítvány importálva", "Import certificate" : "Tanúsítvány importálása", - "Import S/MIME certificate" : "S/MIME tanúsítvány importálása", "PKCS #12 Certificate" : "PKCS #12 tanúsítvány", "PEM Certificate" : "PEM-tanúsítvány", "Certificate" : "Tanúsítvány", @@ -623,8 +629,7 @@ "Could not load the desired message" : "Nem sikerült betölteni a kért üzenetet", "Could not load the message" : "Nem sikerült betölteni az üzenetet", "Error loading message" : "Hiba történt az üzenet betöltése közben", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Az üzeneteket automatikusan fontosként jelöli meg az alapján, hogy mely üzenetekre reagált, vagy jelölt meg fontosként. Kezdetben lehet, hogy kézzel megváltoztatnia a fontosságot és ezzel kell tanítania a rendszert, de ez az idő múlásával javulni fog.", - "Mark all messages of this folder as read" : "A mappában található összes üzenet megjelölése olvasottként", - "Last 7 days" : "Előző 7 nap" + "Choose a file to add as attachment" : "Válasszon mellékletként hozzáadandó fájlt", + "Choose a file to share as a link" : "Válasszon fájlt a hivatkozással történő megosztáshoz" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/ia.js b/l10n/ia.js index 9d0ee0ff3f..73739c4319 100644 --- a/l10n/ia.js +++ b/l10n/ia.js @@ -22,8 +22,8 @@ OC.L10N.register( "Search" : "Cercar", "Send" : "Inviar", "Refresh" : "Refrescar", - "Choose a file to add as attachment" : "Selectiona un file pro adder como attachamento", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Favorite" : "Favorite", "Back" : "Retro", "Attendees" : "Participantes", @@ -69,6 +69,7 @@ OC.L10N.register( "All" : "Tote", "All inboxes" : "Tote cassas de entrata", "Could not load {tag}{name}{endtag}" : "Impossibile cargar {tag}{name}{endtag}", - "There was a problem loading {tag}{name}{endtag}" : "Un problema occurreva durante le carga de {tag}{name}{endtag}" + "There was a problem loading {tag}{name}{endtag}" : "Un problema occurreva durante le carga de {tag}{name}{endtag}", + "Choose a file to add as attachment" : "Selectiona un file pro adder como attachamento" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/ia.json b/l10n/ia.json index 15091b4b11..55cd724ccc 100644 --- a/l10n/ia.json +++ b/l10n/ia.json @@ -20,8 +20,8 @@ "Search" : "Cercar", "Send" : "Inviar", "Refresh" : "Refrescar", - "Choose a file to add as attachment" : "Selectiona un file pro adder como attachamento", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "Favorite" : "Favorite", "Back" : "Retro", "Attendees" : "Participantes", @@ -67,6 +67,7 @@ "All" : "Tote", "All inboxes" : "Tote cassas de entrata", "Could not load {tag}{name}{endtag}" : "Impossibile cargar {tag}{name}{endtag}", - "There was a problem loading {tag}{name}{endtag}" : "Un problema occurreva durante le carga de {tag}{name}{endtag}" + "There was a problem loading {tag}{name}{endtag}" : "Un problema occurreva durante le carga de {tag}{name}{endtag}", + "Choose a file to add as attachment" : "Selectiona un file pro adder como attachamento" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/id.js b/l10n/id.js index 89ebff47f5..d059b5e271 100644 --- a/l10n/id.js +++ b/l10n/id.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "Port SMTP", "SMTP User" : "Pengguna SMTP", "SMTP Password" : "Kata sandi SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Agar akun Google dapat berfungsi dengan aplikasi ini, Anda perlu mengaktifkan autentikasi dua faktor untuk Google dan membuat kata sandi aplikasi.", "Account settings" : "Pengaturan akun", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Pemetaan alias ke sertifikat S/MIME", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "Server email", "Sieve server" : "Server Sieve", "Folder search" : "Pencarian folder", + "Email address" : "Alamat email", "Update alias" : "Perbarui alias", "Rename alias" : "Ubah nama alias", "Show update alias form" : "Tampilkan formulir pembaruan alias", "Delete alias" : "Hapus alias", "Go back" : "Kembali", "Change name" : "Ubah nama", - "Email address" : "Alamat email", "Add alias" : "Tambahkan alias", "Create alias" : "Buat alias", "Cancel" : "Batal", @@ -149,13 +148,16 @@ OC.L10N.register( "Sorting" : "Pengurutan", "Newest first" : "Terbaru terlebih dahulu", "Oldest first" : "Terlama terlebih dahulu", + "New text block" : "Blok teks baru", + "Title of the text block" : "Judul blok teks", + "Content of the text block" : "Isi blok teks", + "Ok" : "Oke", "Avatars from Gravatar and favicons" : "Avatar dari Gravatar dan favicon", "Reply position" : "Posisi balasan", "Top" : "Atas", "Bottom" : "Bawah", "Text blocks" : "Blok teks", "Reusable pieces of text that can be inserted in messages" : "Potongan teks yang dapat digunakan kembali dan dapat disisipkan ke dalam pesan", - "New text block" : "Blok teks baru", "Shared with me" : "Dibagikan dengan saya", "Privacy" : "Privasi", "Data collection" : "Pengumpulan data", @@ -186,9 +188,6 @@ OC.L10N.register( "About" : "Tentang", "Acknowledgements" : "Ucapan terima kasih", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Aplikasi ini menyertakan CKEditor, editor sumber terbuka. Hak cipta © kontributor CKEditor. Dilisensikan di bawah GPLv2.", - "Title of the text block" : "Judul blok teks", - "Content of the text block" : "Isi blok teks", - "Ok" : "Oke", "Automatically create tentative appointments in calendar" : "Secara otomatis buat janji temu tentatif di kalender", "No certificate" : "Tidak ada sertifikat", "Certificate updated" : "Sertifikat diperbarui", @@ -232,7 +231,6 @@ OC.L10N.register( "Disable formatting" : "Nonaktifkan pemformatan", "Upload attachment" : "Unggah lampiran", "Add attachment from Files" : "Tambahkan lampiran dari Berkas", - "Add share link from Files" : "Tambahkan tautan berbagi dari Berkas", "Smart picker" : "Pemilih cerdas", "Request a read receipt" : "Minta tanda terima baca", "Sign message with S/MIME" : "Tandatangani pesan dengan S/MIME", @@ -244,15 +242,14 @@ OC.L10N.register( "Monday morning" : "Senin pagi", "Custom date and time" : "Tanggal dan waktu kustom", "Enter a date" : "Masukkan tanggal", - "Choose" : "Pilih", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Lampiran melebihi ukuran lampiran yang diizinkan sebesar {size}. Harap bagikan berkas melalui tautan sebagai gantinya."], - "Choose a file to add as attachment" : "Pilih berkas untuk ditambahkan sebagai lampiran", - "Choose a file to share as a link" : "Pilih berkas untuk dibagikan sebagai tautan", + "Choose a file" : "Pilih file", "_{count} attachment_::_{count} attachments_" : ["{count} lampiran"], "Untitled message" : "Pesan tanpa judul", "Expand composer" : "Perluas penyusun", "Close composer" : "Tutup penyusun", "Confirm" : "Konfirmasi", + "Revoke" : "Cabut", "Tag: {name} deleted" : "Tag: {name} dihapus", "An error occurred, unable to delete the tag." : "Terjadi kesalahan, tidak dapat menghapus tag.", "The tag will be deleted from all messages." : "Tag akan dihapus dari semua pesan.", @@ -260,6 +257,7 @@ OC.L10N.register( "Rich text" : "Teks kaya", "No messages in this folder" : "Tidak ada pesan di folder ini", "No messages" : "Tidak ada pesan", + "Choose" : "Pilih", "Blind copy recipients only" : "Hanya penerima tembusan tersembunyi", "No subject" : "Tanpa subjek", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draf:{markup-end} {subject}", @@ -299,8 +297,6 @@ OC.L10N.register( "Move Message" : "Pindahkan pesan", "Archive thread" : "Arsipkan utas", "Archive message" : "Arsipkan pesan", - "Delete thread" : "Hapus utas", - "Delete message" : "Hapus pesan", "More actions" : "Tindakan lainnya", "Back" : "Kembali", "Set custom snooze" : "Atur penundaan kustom", @@ -308,6 +304,8 @@ OC.L10N.register( "Reply with meeting" : "Balas dengan rapat", "Create task" : "Buat tugas", "Download message" : "Unduh pesan", + "Delete thread" : "Hapus utas", + "Delete message" : "Hapus pesan", "Back to all actions" : "Kembali ke semua tindakan", "Manage quick actions" : "Kelola tindakan cepat", "Load more" : "Muat lebih banyak", @@ -331,6 +329,7 @@ OC.L10N.register( "Event created" : "Acara dibuat", "Could not create event" : "Tidak dapat membuat acara", "Create event" : "Buat acara", + "Title" : "Judul", "All day" : "Sepanjang hari", "Attendees" : "Peserta", "You can only invite attendees if your account has an email address set" : "Anda hanya dapat mengundang peserta jika akun Anda memiliki alamat email yang diatur", @@ -399,7 +398,9 @@ OC.L10N.register( "Could not snooze message" : "Tidak dapat menunda pesan", "Message was unsnoozed" : "Penundaan pesan dibatalkan", "Could not unsnooze message" : "Tidak dapat membatalkan penundaan pesan", + "Direct link copied to clipboard" : "Tautan langsung disalin ke papan klip", "Forward" : "Teruskan", + "Link copied" : "Tautan disalin", "Move message" : "Pindahkan pesan", "Translate" : "Terjemahkan", "Forward message as attachment" : "Teruskan pesan sebagai lampiran", @@ -439,6 +440,7 @@ OC.L10N.register( "Moving message" : "Memindahkan pesan", "This account cannot connect" : "Akun ini tidak dapat terhubung", "Connection failed. Please verify your information and try again" : "Koneksi gagal. Harap verifikasi informasi Anda dan coba lagi", + "Change password" : "Ubah kata sandi", "Used quota: {quota}% ({limit})" : "Kuota terpakai: {quota}% ({limit})", "Used quota: {quota}%" : "Kuota terpakai: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Tidak dapat membuat kotak surat. Namanya kemungkinan mengandung karakter yang tidak valid. Silakan coba nama lain.", @@ -619,6 +621,8 @@ OC.L10N.register( "Reply to sender only" : "Balas hanya ke pengirim", "Mark as unfavorite" : "Tandai sebagai bukan favorit", "Mark as favorite" : "Tandai sebagai favorit", + "From:" : "Dari:", + "To:" : "Untuk:", "Unsubscribe via link" : "Berhenti berlangganan via tautan", "Unsubscribing will stop all messages from the mailing list {sender}" : "Berhenti berlangganan akan menghentikan semua pesan dari milis {sender}", "Send unsubscribe email" : "Kirim email berhenti berlangganan", @@ -814,6 +818,7 @@ OC.L10N.register( "Certificate imported successfully" : "Sertifikat berhasil diimpor", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Gagal mengimpor sertifikat. Pastikan kunci privat cocok dengan sertifikat dan tidak dilindungi oleh passphrase.", "Failed to import the certificate" : "Gagal mengimpor sertifikat", + "Import S/MIME certificate" : "Impor sertifikat S/MIME", "S/MIME certificates" : "Sertifikat S/MIME", "Certificate name" : "Nama sertifikat", "E-mail address" : "Alamat email", @@ -821,7 +826,6 @@ OC.L10N.register( "Delete certificate" : "Hapus sertifikat", "No certificate imported yet" : "Belum ada sertifikat yang diimpor", "Import certificate" : "Impor sertifikat", - "Import S/MIME certificate" : "Impor sertifikat S/MIME", "PKCS #12 Certificate" : "Sertifikat PKCS #12", "PEM Certificate" : "Sertifikat PEM", "Certificate" : "Sertifikat", @@ -881,11 +885,8 @@ OC.L10N.register( "Could not load the desired message" : "Tidak dapat memuat pesan yang diinginkan", "Could not load the message" : "Tidak dapat memuat pesan", "Error loading message" : "Kesalahan saat memuat pesan", - "Determine importance using machine learning" : "Tentukan tingkat kepentingan menggunakan pembelajaran mesin", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Pesan akan otomatis ditandai sebagai penting berdasarkan pesan mana yang Anda interaksikan atau tandai sebagai penting. Pada awalnya Anda mungkin perlu mengubah tingkat kepentingan secara manual untuk mengajarkan sistem, tetapi seiring waktu akan membaik.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Pesan yang Anda kirim yang memerlukan balasan tetapi tidak menerima balasan setelah beberapa hari akan ditampilkan di sini.", - "Mark all messages of this folder as read" : "Tandai semua pesan di folder ini sebagai dibaca", - "Last 7 days" : "7 hari terakhir", - "From me" : "Dari saya" + "Add share link from Files" : "Tambahkan tautan berbagi dari Berkas", + "Choose a file to add as attachment" : "Pilih berkas untuk ditambahkan sebagai lampiran", + "Choose a file to share as a link" : "Pilih berkas untuk dibagikan sebagai tautan" }, "nplurals=1; plural=0;"); diff --git a/l10n/id.json b/l10n/id.json index f48235ec2d..4e9538d3f4 100644 --- a/l10n/id.json +++ b/l10n/id.json @@ -91,7 +91,6 @@ "SMTP Port" : "Port SMTP", "SMTP User" : "Pengguna SMTP", "SMTP Password" : "Kata sandi SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Agar akun Google dapat berfungsi dengan aplikasi ini, Anda perlu mengaktifkan autentikasi dua faktor untuk Google dan membuat kata sandi aplikasi.", "Account settings" : "Pengaturan akun", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Pemetaan alias ke sertifikat S/MIME", @@ -115,13 +114,13 @@ "Mail server" : "Server email", "Sieve server" : "Server Sieve", "Folder search" : "Pencarian folder", + "Email address" : "Alamat email", "Update alias" : "Perbarui alias", "Rename alias" : "Ubah nama alias", "Show update alias form" : "Tampilkan formulir pembaruan alias", "Delete alias" : "Hapus alias", "Go back" : "Kembali", "Change name" : "Ubah nama", - "Email address" : "Alamat email", "Add alias" : "Tambahkan alias", "Create alias" : "Buat alias", "Cancel" : "Batal", @@ -147,13 +146,16 @@ "Sorting" : "Pengurutan", "Newest first" : "Terbaru terlebih dahulu", "Oldest first" : "Terlama terlebih dahulu", + "New text block" : "Blok teks baru", + "Title of the text block" : "Judul blok teks", + "Content of the text block" : "Isi blok teks", + "Ok" : "Oke", "Avatars from Gravatar and favicons" : "Avatar dari Gravatar dan favicon", "Reply position" : "Posisi balasan", "Top" : "Atas", "Bottom" : "Bawah", "Text blocks" : "Blok teks", "Reusable pieces of text that can be inserted in messages" : "Potongan teks yang dapat digunakan kembali dan dapat disisipkan ke dalam pesan", - "New text block" : "Blok teks baru", "Shared with me" : "Dibagikan dengan saya", "Privacy" : "Privasi", "Data collection" : "Pengumpulan data", @@ -184,9 +186,6 @@ "About" : "Tentang", "Acknowledgements" : "Ucapan terima kasih", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Aplikasi ini menyertakan CKEditor, editor sumber terbuka. Hak cipta © kontributor CKEditor. Dilisensikan di bawah GPLv2.", - "Title of the text block" : "Judul blok teks", - "Content of the text block" : "Isi blok teks", - "Ok" : "Oke", "Automatically create tentative appointments in calendar" : "Secara otomatis buat janji temu tentatif di kalender", "No certificate" : "Tidak ada sertifikat", "Certificate updated" : "Sertifikat diperbarui", @@ -230,7 +229,6 @@ "Disable formatting" : "Nonaktifkan pemformatan", "Upload attachment" : "Unggah lampiran", "Add attachment from Files" : "Tambahkan lampiran dari Berkas", - "Add share link from Files" : "Tambahkan tautan berbagi dari Berkas", "Smart picker" : "Pemilih cerdas", "Request a read receipt" : "Minta tanda terima baca", "Sign message with S/MIME" : "Tandatangani pesan dengan S/MIME", @@ -242,15 +240,14 @@ "Monday morning" : "Senin pagi", "Custom date and time" : "Tanggal dan waktu kustom", "Enter a date" : "Masukkan tanggal", - "Choose" : "Pilih", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Lampiran melebihi ukuran lampiran yang diizinkan sebesar {size}. Harap bagikan berkas melalui tautan sebagai gantinya."], - "Choose a file to add as attachment" : "Pilih berkas untuk ditambahkan sebagai lampiran", - "Choose a file to share as a link" : "Pilih berkas untuk dibagikan sebagai tautan", + "Choose a file" : "Pilih file", "_{count} attachment_::_{count} attachments_" : ["{count} lampiran"], "Untitled message" : "Pesan tanpa judul", "Expand composer" : "Perluas penyusun", "Close composer" : "Tutup penyusun", "Confirm" : "Konfirmasi", + "Revoke" : "Cabut", "Tag: {name} deleted" : "Tag: {name} dihapus", "An error occurred, unable to delete the tag." : "Terjadi kesalahan, tidak dapat menghapus tag.", "The tag will be deleted from all messages." : "Tag akan dihapus dari semua pesan.", @@ -258,6 +255,7 @@ "Rich text" : "Teks kaya", "No messages in this folder" : "Tidak ada pesan di folder ini", "No messages" : "Tidak ada pesan", + "Choose" : "Pilih", "Blind copy recipients only" : "Hanya penerima tembusan tersembunyi", "No subject" : "Tanpa subjek", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draf:{markup-end} {subject}", @@ -297,8 +295,6 @@ "Move Message" : "Pindahkan pesan", "Archive thread" : "Arsipkan utas", "Archive message" : "Arsipkan pesan", - "Delete thread" : "Hapus utas", - "Delete message" : "Hapus pesan", "More actions" : "Tindakan lainnya", "Back" : "Kembali", "Set custom snooze" : "Atur penundaan kustom", @@ -306,6 +302,8 @@ "Reply with meeting" : "Balas dengan rapat", "Create task" : "Buat tugas", "Download message" : "Unduh pesan", + "Delete thread" : "Hapus utas", + "Delete message" : "Hapus pesan", "Back to all actions" : "Kembali ke semua tindakan", "Manage quick actions" : "Kelola tindakan cepat", "Load more" : "Muat lebih banyak", @@ -329,6 +327,7 @@ "Event created" : "Acara dibuat", "Could not create event" : "Tidak dapat membuat acara", "Create event" : "Buat acara", + "Title" : "Judul", "All day" : "Sepanjang hari", "Attendees" : "Peserta", "You can only invite attendees if your account has an email address set" : "Anda hanya dapat mengundang peserta jika akun Anda memiliki alamat email yang diatur", @@ -397,7 +396,9 @@ "Could not snooze message" : "Tidak dapat menunda pesan", "Message was unsnoozed" : "Penundaan pesan dibatalkan", "Could not unsnooze message" : "Tidak dapat membatalkan penundaan pesan", + "Direct link copied to clipboard" : "Tautan langsung disalin ke papan klip", "Forward" : "Teruskan", + "Link copied" : "Tautan disalin", "Move message" : "Pindahkan pesan", "Translate" : "Terjemahkan", "Forward message as attachment" : "Teruskan pesan sebagai lampiran", @@ -437,6 +438,7 @@ "Moving message" : "Memindahkan pesan", "This account cannot connect" : "Akun ini tidak dapat terhubung", "Connection failed. Please verify your information and try again" : "Koneksi gagal. Harap verifikasi informasi Anda dan coba lagi", + "Change password" : "Ubah kata sandi", "Used quota: {quota}% ({limit})" : "Kuota terpakai: {quota}% ({limit})", "Used quota: {quota}%" : "Kuota terpakai: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Tidak dapat membuat kotak surat. Namanya kemungkinan mengandung karakter yang tidak valid. Silakan coba nama lain.", @@ -617,6 +619,8 @@ "Reply to sender only" : "Balas hanya ke pengirim", "Mark as unfavorite" : "Tandai sebagai bukan favorit", "Mark as favorite" : "Tandai sebagai favorit", + "From:" : "Dari:", + "To:" : "Untuk:", "Unsubscribe via link" : "Berhenti berlangganan via tautan", "Unsubscribing will stop all messages from the mailing list {sender}" : "Berhenti berlangganan akan menghentikan semua pesan dari milis {sender}", "Send unsubscribe email" : "Kirim email berhenti berlangganan", @@ -812,6 +816,7 @@ "Certificate imported successfully" : "Sertifikat berhasil diimpor", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Gagal mengimpor sertifikat. Pastikan kunci privat cocok dengan sertifikat dan tidak dilindungi oleh passphrase.", "Failed to import the certificate" : "Gagal mengimpor sertifikat", + "Import S/MIME certificate" : "Impor sertifikat S/MIME", "S/MIME certificates" : "Sertifikat S/MIME", "Certificate name" : "Nama sertifikat", "E-mail address" : "Alamat email", @@ -819,7 +824,6 @@ "Delete certificate" : "Hapus sertifikat", "No certificate imported yet" : "Belum ada sertifikat yang diimpor", "Import certificate" : "Impor sertifikat", - "Import S/MIME certificate" : "Impor sertifikat S/MIME", "PKCS #12 Certificate" : "Sertifikat PKCS #12", "PEM Certificate" : "Sertifikat PEM", "Certificate" : "Sertifikat", @@ -879,11 +883,8 @@ "Could not load the desired message" : "Tidak dapat memuat pesan yang diinginkan", "Could not load the message" : "Tidak dapat memuat pesan", "Error loading message" : "Kesalahan saat memuat pesan", - "Determine importance using machine learning" : "Tentukan tingkat kepentingan menggunakan pembelajaran mesin", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Pesan akan otomatis ditandai sebagai penting berdasarkan pesan mana yang Anda interaksikan atau tandai sebagai penting. Pada awalnya Anda mungkin perlu mengubah tingkat kepentingan secara manual untuk mengajarkan sistem, tetapi seiring waktu akan membaik.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Pesan yang Anda kirim yang memerlukan balasan tetapi tidak menerima balasan setelah beberapa hari akan ditampilkan di sini.", - "Mark all messages of this folder as read" : "Tandai semua pesan di folder ini sebagai dibaca", - "Last 7 days" : "7 hari terakhir", - "From me" : "Dari saya" + "Add share link from Files" : "Tambahkan tautan berbagi dari Berkas", + "Choose a file to add as attachment" : "Pilih berkas untuk ditambahkan sebagai lampiran", + "Choose a file to share as a link" : "Pilih berkas untuk dibagikan sebagai tautan" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/is.js b/l10n/is.js index 39fe8fe0b5..44c69d95c7 100644 --- a/l10n/is.js +++ b/l10n/is.js @@ -84,7 +84,6 @@ OC.L10N.register( "SMTP Port" : "SMTP-gátt", "SMTP User" : "SMTP-notandi", "SMTP Password" : "SMTP-lykilorð", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Til að Google-reikningur virki með þessu forriti þarft þú að virkja tveggja-þátta auðkenningu fyrir Google og útbúa lykilorð fyrir forritið.", "Account settings" : "Stillingar notandaaðgangs", "Aliases" : "Samnefni", "Alias to S/MIME certificate mapping" : "Samnefni við tengingu S/MIME-skilríkis", @@ -103,13 +102,13 @@ OC.L10N.register( "Sieve script editor" : "Sieve-skrifturitill", "Mail server" : "Póstþjónn", "Sieve server" : "Sieve-þjónn", + "Email address" : "Tölvupóstfang", "Update alias" : "Uppfæra samnefni", "Rename alias" : "Endurnefna samnefni", "Show update alias form" : "Birta glugga til að uppfæra samnefni", "Delete alias" : "Eyða samnefni", "Go back" : "Fara til baka", "Change name" : "Breyta nafni", - "Email address" : "Tölvupóstfang", "Add alias" : "Bæta við samnefni", "Create alias" : "Búa til samnefni (alias)", "Cancel" : "Hætta við", @@ -127,6 +126,7 @@ OC.L10N.register( "Sorting" : "Röðun", "Newest first" : "Nýjast fyrst", "Oldest first" : "Elsta fyrst", + "Ok" : "Í lagi", "Privacy" : "Meðferð persónuupplýsinga", "Security" : "Öryggi", "S/MIME" : "S/MIME", @@ -144,7 +144,6 @@ OC.L10N.register( "Send" : "Senda", "Refresh" : "Endurlesa", "About" : "Um", - "Ok" : "Í lagi", "No certificate" : "Ekkert skilríki", "Certificate updated" : "Skilríki uppfært", "Could not update certificate" : "Gat ekki uppfært skilríki", @@ -183,7 +182,6 @@ OC.L10N.register( "Disable formatting" : "Gera sniðmótun óvirka", "Upload attachment" : "Senda inn viðhengi", "Add attachment from Files" : "Bæta við viðhengi úr skrám", - "Add share link from Files" : "Bæta við deilitengli úr skrám", "Smart picker" : "Snjall-veljari", "Request a read receipt" : "Biðja um leskvittun", "Sign message with S/MIME" : "Undirrita skilaboð með S/MIME", @@ -195,14 +193,13 @@ OC.L10N.register( "Monday morning" : "Mánudagsmorgunn", "Custom date and time" : "Sérsniðin dagsetning og tími", "Enter a date" : "Settu inn dagsetningu", - "Choose" : "Velja", - "Choose a file to add as attachment" : "Veldu skrá til að setja sem viðhengi", - "Choose a file to share as a link" : "Veldu skrá til að deila sem tengli", + "Choose a file" : "Veldu skrá", "_{count} attachment_::_{count} attachments_" : ["{count} viðhengi","{count} viðhengi"], "Untitled message" : "Ónefnd skilaboð", "Expand composer" : "Þenja ritil", "Close composer" : "Loka ritli", "Confirm" : "Staðfesta", + "Revoke" : "Afturkalla", "Tag: {name} deleted" : "Merki: {name} eytt", "An error occurred, unable to delete the tag." : "Villa kom upp, gat ekki eytt merkinu.", "The tag will be deleted from all messages." : "Merkinu verður eytt af öllum skilaboðum.", @@ -210,6 +207,7 @@ OC.L10N.register( "Rich text" : "Sniðinn texti", "No messages in this folder" : "Engin skilaboð í þessari möppu", "No messages" : "Engin skilaboð", + "Choose" : "Velja", "Blind copy recipients only" : "Einungis viðtakendur dulinna afrita", "No subject" : "Ekkert viðfangsefni", "Later today – {timeLocale}" : "Síðar í dag – {timeLocale}", @@ -242,14 +240,14 @@ OC.L10N.register( "Move thread" : "Færa spjallþráð", "Archive thread" : "Setja spjallþráð í geymslu", "Archive message" : "Geyma skilaboð", - "Delete thread" : "Eyða spjallþræði", - "Delete message" : "Eyða skilaboðum", "More actions" : "Fleiri aðgerðir", "Back" : "Til baka", "Set custom snooze" : "Setja sérsniðinn blund", "Edit as new message" : "Breyta sem nýjum skilaboðum", "Create task" : "Búa til verk", "Download message" : "Sækja skilaboð", + "Delete thread" : "Eyða spjallþræði", + "Delete message" : "Eyða skilaboðum", "Load more" : "Hlaða inn fleiri", "_Mark {number} read_::_Mark {number} read_" : ["Merkja {number} sem lesið","Merkja {number} sem lesin"], "_Mark {number} unread_::_Mark {number} unread_" : ["Merkja {number} sem ólesið","Merkja {number} sem ólesin"], @@ -322,7 +320,9 @@ OC.L10N.register( "Could not snooze message" : "Gat ekki svæft skilaboð", "Message was unsnoozed" : "Skilaboðin voru vakin af blundi", "Could not unsnooze message" : "Gat ekki vakið skilaboð af blundi", + "Direct link copied to clipboard" : "Beinn tengill afritaður á klippispjald", "Forward" : "Áframsenda", + "Link copied" : "Tengill afritaður", "Move message" : "Færa skilaboð", "Translate" : "Þýða", "Forward message as attachment" : "Áframsenda skilaboð sem viðhengi", @@ -515,6 +515,8 @@ OC.L10N.register( "Reply to sender only" : "Svara einungis sendanda", "Mark as unfavorite" : "Taka úr eftirlætum", "Mark as favorite" : "Merkja sem eftirlæti", + "From:" : "Frá:", + "To:" : "Til:", "Unsubscribe via link" : "Hætta í áskrift með tengli", "Send unsubscribe email" : "Senda tölvupóst til að segja upp áskrift", "Unsubscribe via email" : "Hætta í áskrift með tölvupósti", @@ -647,6 +649,7 @@ OC.L10N.register( "Certificate imported successfully" : "Tókst að flytja inn skilríki", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Mistókst að flytja inn skilríkið. Gakktu úr skugga um að einkalykillinn samsvari skilríkinu og sé ekki varinn með leynifrasa.", "Failed to import the certificate" : "Mistókst að flytja inn skilríkið", + "Import S/MIME certificate" : "Flytja inn S/MIME-skilríki", "S/MIME certificates" : "S/MIME-skilríki", "Certificate name" : "Heiti skilríkis", "E-mail address" : "Tölvupóstfang", @@ -654,7 +657,6 @@ OC.L10N.register( "Delete certificate" : "Eyða skilríki", "No certificate imported yet" : "Ekkert skilríki ennþá flutt inn", "Import certificate" : "Flytja inn skilríki", - "Import S/MIME certificate" : "Flytja inn S/MIME-skilríki", "PKCS #12 Certificate" : "PKCS #12 skilríki", "PEM Certificate" : "PEM-skilríki", "Certificate" : "Skilríki", @@ -695,9 +697,8 @@ OC.L10N.register( "Could not load the desired message" : "Gat ekki hlaðið inn umbeðnum skilaboðum", "Could not load the message" : "Gat ekki hlaðið inn skilaboðunum", "Error loading message" : "Villa við hleðslu á skilaboðum", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Skilaboð sem þú sendir og sem þarfnast svars en hafa ekki enn fengið svar eftir nokkra daga, munu birtast hér.", - "Mark all messages of this folder as read" : "Merkja öll skilaboð í þessari möppu sem lesin", - "Last 7 days" : "Síðustu 7 daga", - "From me" : "Frá mér" + "Add share link from Files" : "Bæta við deilitengli úr skrám", + "Choose a file to add as attachment" : "Veldu skrá til að setja sem viðhengi", + "Choose a file to share as a link" : "Veldu skrá til að deila sem tengli" }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/l10n/is.json b/l10n/is.json index 6ba7887070..6279e78a54 100644 --- a/l10n/is.json +++ b/l10n/is.json @@ -82,7 +82,6 @@ "SMTP Port" : "SMTP-gátt", "SMTP User" : "SMTP-notandi", "SMTP Password" : "SMTP-lykilorð", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Til að Google-reikningur virki með þessu forriti þarft þú að virkja tveggja-þátta auðkenningu fyrir Google og útbúa lykilorð fyrir forritið.", "Account settings" : "Stillingar notandaaðgangs", "Aliases" : "Samnefni", "Alias to S/MIME certificate mapping" : "Samnefni við tengingu S/MIME-skilríkis", @@ -101,13 +100,13 @@ "Sieve script editor" : "Sieve-skrifturitill", "Mail server" : "Póstþjónn", "Sieve server" : "Sieve-þjónn", + "Email address" : "Tölvupóstfang", "Update alias" : "Uppfæra samnefni", "Rename alias" : "Endurnefna samnefni", "Show update alias form" : "Birta glugga til að uppfæra samnefni", "Delete alias" : "Eyða samnefni", "Go back" : "Fara til baka", "Change name" : "Breyta nafni", - "Email address" : "Tölvupóstfang", "Add alias" : "Bæta við samnefni", "Create alias" : "Búa til samnefni (alias)", "Cancel" : "Hætta við", @@ -125,6 +124,7 @@ "Sorting" : "Röðun", "Newest first" : "Nýjast fyrst", "Oldest first" : "Elsta fyrst", + "Ok" : "Í lagi", "Privacy" : "Meðferð persónuupplýsinga", "Security" : "Öryggi", "S/MIME" : "S/MIME", @@ -142,7 +142,6 @@ "Send" : "Senda", "Refresh" : "Endurlesa", "About" : "Um", - "Ok" : "Í lagi", "No certificate" : "Ekkert skilríki", "Certificate updated" : "Skilríki uppfært", "Could not update certificate" : "Gat ekki uppfært skilríki", @@ -181,7 +180,6 @@ "Disable formatting" : "Gera sniðmótun óvirka", "Upload attachment" : "Senda inn viðhengi", "Add attachment from Files" : "Bæta við viðhengi úr skrám", - "Add share link from Files" : "Bæta við deilitengli úr skrám", "Smart picker" : "Snjall-veljari", "Request a read receipt" : "Biðja um leskvittun", "Sign message with S/MIME" : "Undirrita skilaboð með S/MIME", @@ -193,14 +191,13 @@ "Monday morning" : "Mánudagsmorgunn", "Custom date and time" : "Sérsniðin dagsetning og tími", "Enter a date" : "Settu inn dagsetningu", - "Choose" : "Velja", - "Choose a file to add as attachment" : "Veldu skrá til að setja sem viðhengi", - "Choose a file to share as a link" : "Veldu skrá til að deila sem tengli", + "Choose a file" : "Veldu skrá", "_{count} attachment_::_{count} attachments_" : ["{count} viðhengi","{count} viðhengi"], "Untitled message" : "Ónefnd skilaboð", "Expand composer" : "Þenja ritil", "Close composer" : "Loka ritli", "Confirm" : "Staðfesta", + "Revoke" : "Afturkalla", "Tag: {name} deleted" : "Merki: {name} eytt", "An error occurred, unable to delete the tag." : "Villa kom upp, gat ekki eytt merkinu.", "The tag will be deleted from all messages." : "Merkinu verður eytt af öllum skilaboðum.", @@ -208,6 +205,7 @@ "Rich text" : "Sniðinn texti", "No messages in this folder" : "Engin skilaboð í þessari möppu", "No messages" : "Engin skilaboð", + "Choose" : "Velja", "Blind copy recipients only" : "Einungis viðtakendur dulinna afrita", "No subject" : "Ekkert viðfangsefni", "Later today – {timeLocale}" : "Síðar í dag – {timeLocale}", @@ -240,14 +238,14 @@ "Move thread" : "Færa spjallþráð", "Archive thread" : "Setja spjallþráð í geymslu", "Archive message" : "Geyma skilaboð", - "Delete thread" : "Eyða spjallþræði", - "Delete message" : "Eyða skilaboðum", "More actions" : "Fleiri aðgerðir", "Back" : "Til baka", "Set custom snooze" : "Setja sérsniðinn blund", "Edit as new message" : "Breyta sem nýjum skilaboðum", "Create task" : "Búa til verk", "Download message" : "Sækja skilaboð", + "Delete thread" : "Eyða spjallþræði", + "Delete message" : "Eyða skilaboðum", "Load more" : "Hlaða inn fleiri", "_Mark {number} read_::_Mark {number} read_" : ["Merkja {number} sem lesið","Merkja {number} sem lesin"], "_Mark {number} unread_::_Mark {number} unread_" : ["Merkja {number} sem ólesið","Merkja {number} sem ólesin"], @@ -320,7 +318,9 @@ "Could not snooze message" : "Gat ekki svæft skilaboð", "Message was unsnoozed" : "Skilaboðin voru vakin af blundi", "Could not unsnooze message" : "Gat ekki vakið skilaboð af blundi", + "Direct link copied to clipboard" : "Beinn tengill afritaður á klippispjald", "Forward" : "Áframsenda", + "Link copied" : "Tengill afritaður", "Move message" : "Færa skilaboð", "Translate" : "Þýða", "Forward message as attachment" : "Áframsenda skilaboð sem viðhengi", @@ -513,6 +513,8 @@ "Reply to sender only" : "Svara einungis sendanda", "Mark as unfavorite" : "Taka úr eftirlætum", "Mark as favorite" : "Merkja sem eftirlæti", + "From:" : "Frá:", + "To:" : "Til:", "Unsubscribe via link" : "Hætta í áskrift með tengli", "Send unsubscribe email" : "Senda tölvupóst til að segja upp áskrift", "Unsubscribe via email" : "Hætta í áskrift með tölvupósti", @@ -645,6 +647,7 @@ "Certificate imported successfully" : "Tókst að flytja inn skilríki", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Mistókst að flytja inn skilríkið. Gakktu úr skugga um að einkalykillinn samsvari skilríkinu og sé ekki varinn með leynifrasa.", "Failed to import the certificate" : "Mistókst að flytja inn skilríkið", + "Import S/MIME certificate" : "Flytja inn S/MIME-skilríki", "S/MIME certificates" : "S/MIME-skilríki", "Certificate name" : "Heiti skilríkis", "E-mail address" : "Tölvupóstfang", @@ -652,7 +655,6 @@ "Delete certificate" : "Eyða skilríki", "No certificate imported yet" : "Ekkert skilríki ennþá flutt inn", "Import certificate" : "Flytja inn skilríki", - "Import S/MIME certificate" : "Flytja inn S/MIME-skilríki", "PKCS #12 Certificate" : "PKCS #12 skilríki", "PEM Certificate" : "PEM-skilríki", "Certificate" : "Skilríki", @@ -693,9 +695,8 @@ "Could not load the desired message" : "Gat ekki hlaðið inn umbeðnum skilaboðum", "Could not load the message" : "Gat ekki hlaðið inn skilaboðunum", "Error loading message" : "Villa við hleðslu á skilaboðum", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Skilaboð sem þú sendir og sem þarfnast svars en hafa ekki enn fengið svar eftir nokkra daga, munu birtast hér.", - "Mark all messages of this folder as read" : "Merkja öll skilaboð í þessari möppu sem lesin", - "Last 7 days" : "Síðustu 7 daga", - "From me" : "Frá mér" + "Add share link from Files" : "Bæta við deilitengli úr skrám", + "Choose a file to add as attachment" : "Veldu skrá til að setja sem viðhengi", + "Choose a file to share as a link" : "Veldu skrá til að deila sem tengli" },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" } \ No newline at end of file diff --git a/l10n/it.js b/l10n/it.js index 4020e44be9..ea0662e49c 100644 --- a/l10n/it.js +++ b/l10n/it.js @@ -21,9 +21,14 @@ OC.L10N.register( "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "Il mittente sta usando un’email personalizzata: %1$s invece dell’email del mittente: %2$s", "Sent date is in the future" : "La data di invio è nel futuro", "Mail server marked this message as phishing attempt" : "Il server di posta ha contrassegnato questo messaggio come tentativo di phishing", + "Some addresses in this message are not matching the link text" : "Alcuni link presenti in questo messaggio non corrispondono all’indirizzo visualizzato", + "Reply-To email: %1$s is different from sender email: %2$s" : "L’indirizzo email di risposta: %1$s è diverso dall’indirizzo email del mittente: %2$s", + "Mail connection performance" : "Performance della connessione di posta elettronica", "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Rilevato servizio mail lento (%1$s): un tentativo di connessione a diversi account ha richiesto in media %2$s secondi per account", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Rilevato servizio di posta elettronica lento (%1$s): l’operazione di enumerazione delle caselle di posta su più account ha registrato un tempo medio di %2$s secondi per account.", "Mail Transport configuration" : "Configurazione del recapito email", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "La configurazione email attuale non usa SMTP. Questo può creare problemi con i controlli di sicurezza moderni, come SPF e DKIM, perché i messaggi vengono inviati direttamente dal server web, che spesso non è configurato correttamente per l’invio di email. Il metodo di invio diretto non è più supportato. Rimuovi app.mail.transport dalla configurazione per passare all’invio tramite SMTP e non visualizzare più questo avviso. Per garantire il corretto recapito delle email è necessario configurare SMTP correttamente.", + "Mail account parameters, aliases and preferences" : "Parametri dell’account di posta, alias e preferenze", "💌 A mail app for Nextcloud" : "💌 Un'applicazione di posta per Nextcloud", "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Un'applicazione di posta elettronica per Nextcloud**\n\n- **🚀 Integrazione con altre applicazioni Nextcloud!** Attualmente Contatti, Calendario e File - ne arriveranno altre.\n- **📥 Account di posta multipli!** Account personali e aziendali? Nessun problema, e una bella casella di posta unificata. Collega qualsiasi account IMAP.\n- **🔒 Invia e ricevi email cifrate!** Utilizzando l'estensione del browser [Mailvelope](https://mailvelope.com).\n- **🙈 Non stiamo reinventando la ruota!** Basata sulle ottime librerie di [Horde](https://horde.org).\n- **📬 Vuoi ospitare il tuo server di posta?** Non dobbiamo reimplementarlo poiché puoi configurare [Mail-in-a-Box](https://mailinabox.email)!\n\n## Valutazione etica dell'IA\n\n### Posta in arrivo prioritaria\n\nPositivo:\n* Il software per l'addestramento e l'inferenza di questo modello è open source.\n* Il modello è creato e addestrato in locale basandosi sui dati dell'utente.\n* I dati di addestramento sono accessibili all'utente, rendendo possibile controllare o correggere le soglie o ottimizzare le prestazioni e l'utilizzo di CO2.\n\n### Riassunti delle discussioni (opt-in)\n\n**Valutazione:** 🟢/🟡/🟠/🔴\n\nLa valutazione dipende dal backend di elaborazione del testo installato. Vedi [la panoramica della valutazione](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) per i dettagli.\n\nScopri di più sulla Valutazione etica dell'IA di Nextcloud [nel nostro blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "La sessione è scaduta. La pagina sarà ricaricata.", @@ -31,6 +36,7 @@ OC.L10N.register( "Sent messages are saved in:" : "I messaggi inviati sono salvati in:", "Deleted messages are moved in:" : "I messaggi eliminati sono spostati in:", "Archived messages are moved in:" : "I messaggi archiviati sono spostati in:", + "Snoozed messages are moved in:" : "I messaggi rimandati vengono spostati in:", "Junk messages are saved in:" : "I messaggi indesiderati sono salvati in:", "Connecting" : "Connessione in corso", "Reconnect Google account" : "Ricollega l'account Google", @@ -39,17 +45,31 @@ OC.L10N.register( "Sign in with Microsoft" : "Accedi con Microsoft", "Save" : "Salva", "Connect" : "Connetti", + "Looking up configuration" : "Recupero della configurazione", "Checking mail host connectivity" : "Verifica della connettività dell'host di posta", + "Configuration discovery failed. Please use the manual settings" : "Rilevamento automatico della configurazione non riuscito. Si prega di utilizzare le impostazioni manuali.", "Password required" : "Password richiesta", + "Testing authentication" : "Verifica dell’autenticazione in corso", "Awaiting user consent" : "In attesa del consenso dell'utente.", + "Account created. Please follow the pop-up instructions to link your Google account" : "Account creato. Seguire le istruzioni del pop-up per collegare il proprio account Google", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "Account creato. Seguire le istruzioni del pop-up per collegare il proprio account Microsoft", "Loading account" : "Caricamento account", + "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "Account aggiornato. Seguire le istruzioni del pop-up per riconnettere il proprio account Google", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "Account aggiornato. Seguire le istruzioni del pop-up per riconnettere il proprio account Microsoft", "Account updated" : "Account aggiornato", "IMAP server is not reachable" : "Il server IMAP non è raggiungibile", "SMTP server is not reachable" : "Il server SMTP non è raggiungibile", "IMAP username or password is wrong" : "Il nome utente o la password IMAP sono errati.", "SMTP username or password is wrong" : "Il nome utente o la password SMTP sono errati.", + "IMAP server denied authentication" : "Autenticazione negata dal server IMAP", + "SMTP server denied authentication" : "Autenticazione negata dal server SMTP", + "IMAP authentication error" : "Errore di autenticazione IMAP", + "SMTP authentication error" : "Errore di autenticazione SMTP", "IMAP connection failed" : "Connessione IMAP non riuscita", "SMTP connection failed" : "Connessione SMTP non riuscita", + "Authorization pop-up closed" : "La finestra pop-up di autorizzazione è stata chiusa", + "Configuration discovery temporarily not available. Please try again later." : "Il rilevamento della configurazione è temporaneamente non disponibile. Riprovare più tardi.", + "There was an error while setting up your account" : "Si è verificato un errore durante la configurazione dell’account.", "Auto" : "Automatico", "Name" : "Nome", "Mail address" : "Indirizzo di posta", @@ -73,6 +93,8 @@ OC.L10N.register( "SMTP Port" : "Porta SMTP", "SMTP User" : "Utente SMTP", "SMTP Password" : "Password SMTP", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google richiede l’autenticazione OAuth. Se l’amministratore di Nextcloud non ha configurato Google OAuth, è possibile utilizzare una password per app Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft richiede l’autenticazione OAuth. Si prega di contattare l’amministratore di Nextcloud per configurare OAuth di Microsoft nelle impostazioni di amministrazione.", "Account settings" : "Impostazioni account", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Mappatura alias e certificati S/MIME", @@ -84,9 +106,9 @@ OC.L10N.register( "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Le cartelle da usare per bozze, messaggi inviati, messaggi archiviati e posta indesiderata.", "Automatic trash deletion" : "Eliminazione automatica del cestino", "Days after which messages in Trash will automatically be deleted:" : "Giorni dopo i quali i messaggi nel cestino verranno eliminati automaticamente:", - "Autoresponder" : "Risponditore automatico", + "Autoresponder" : "Risposta automatica", "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Risposta automatica ai messaggi in arrivo. Se qualcuno ti invia più messaggi, questa risposta automatica verrà inviata al massimo una volta ogni 4 giorni.", - "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Il risponditore automatico utilizza Sieve, un linguaggio di scripting supportato da molti provider di posta elettronica. Se non sei sicuro che il tuo lo supporti, verifica con il tuo provider. Se Sieve è disponibile, fai clic sul pulsante per accedere alle impostazioni e abilitarlo.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "La risposta automatica utilizza Sieve, un linguaggio di scripting supportato da molti provider di posta elettronica. Se non sei sicuro che il tuo lo supporti, verifica con il tuo provider. Se Sieve è disponibile, fai clic sul pulsante per accedere alle impostazioni e abilitarlo.", "Go to Sieve settings" : "Vai alle impostazioni Sieve", "Calendar settings" : "Impostazioni Calendario", "Classification settings" : "Impostazioni di classificazione", @@ -96,23 +118,26 @@ OC.L10N.register( "Mail server" : "Server di posta", "Sieve server" : "Server Sieve", "Folder search" : "Ricerca cartelle", + "Email address" : "Indirizzo email", "Update alias" : "Aggiorna alias", "Rename alias" : "Rinomina alias", "Show update alias form" : "Mostra modulo aggiornamento alias", "Delete alias" : "Elimina alias", "Go back" : "Indietro", "Change name" : "Cambia il nome", - "Email address" : "Indirizzo email", "Add alias" : "Aggiungi alias", "Create alias" : "Crea alias", "Cancel" : "Annulla", "Search the body of messages in priority Inbox" : "Cerca nel corpo dei messaggi nella posta prioritaria", "Activate" : "Attiva", + "Make mails available to Context Chat" : "Rendi le email disponibili per Context Chat", + "Remind about messages that require a reply but received none" : "Promemoria per i messaggi che richiedono una risposta ma non hanno ricevuto alcun riscontro", "Highlight external addresses" : "Evidenzia indirizzi esterni", "Could not update preference" : "Impossibile aggiornare la preferenza", "Mail settings" : "Impostazioni Posta", "General" : "Generale", "Set as default mail app" : "Imposta come applicazione di posta predefinita", + "{email} (delegated)" : "{email} (delegata)", "Add mail account" : "Aggiungi account di posta", "Appearance" : "Aspetto", "Show all messages in thread" : "Mostra tutti i messaggi della conversazione", @@ -127,13 +152,16 @@ OC.L10N.register( "Sorting" : "Ordina", "Newest first" : "Prima i più recenti", "Oldest first" : "Prima i più datati", + "New text block" : "Nuovo blocco di testo", + "Title of the text block" : "Titolo del blocco di testo", + "Content of the text block" : "Contenuto del blocco di testo", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Mostra avatar del mittente e icone", "Reply position" : "Posizione della risposta", "Top" : "In alto", "Bottom" : "In basso", "Text blocks" : "Blocchi di testo", "Reusable pieces of text that can be inserted in messages" : "Parti di testo riutilizzabili che possono essere inserite nei messaggi", - "New text block" : "Nuovo blocco di testo", "Shared with me" : "Condivisi con me", "Privacy" : "Riservatezza", "Data collection" : "Raccolta dati", @@ -144,8 +172,13 @@ OC.L10N.register( "S/MIME" : "S/MIME", "Manage certificates" : "Gestisci certificati", "Mailvelope" : "Mailvelope", + "Mailvelope is enabled for the current domain." : "Mailvelope è abilitato per il dominio corrente.", + "Step 1" : "Passo 1", "Install the browser extension" : "Installa l'estensione del browser", + "Step 2" : "Passo 2", "Enable for the current domain" : "Abilita per il dominio corrente", + "Assistance features" : "Funzionalità di assistenza", + "Context Chat integration" : "Integrazione con Context Chat", "Compose new message" : "Componi nuovo messaggio", "Newer message" : "Messaggio più recente", "Older message" : "Messaggio più datato", @@ -158,29 +191,39 @@ OC.L10N.register( "Refresh" : "Aggiorna", "About" : "Informazioni", "Acknowledgements" : "Ringraziamenti", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Questa applicazione include CKEditor, un editor open-source. Copyright © dei contributori di CKEditor. Concesso in licenza GPLv2.", + "Automatically create tentative appointments in calendar" : "Crea automaticamente appuntamenti provvisori nel calendario", "No certificate" : "Nessun certificato", "Certificate updated" : "Certificato aggiornato", "Could not update certificate" : "Impossibile aggiornare il certificato", "{commonName} - Valid until {expiryDate}" : "{commonName} - Valido fino al {expiryDate}", "Select an alias" : "Seleziona un alias", + "Select certificates" : "Seleziona i certificati", "Update Certificate" : "Aggiorna certificato", + "The selected certificate is not trusted by the server. Recipients might not be able to verify your signature." : "Il certificato selezionato non è considerato attendibile dal server. I destinatari potrebbero non essere in grado di verificare la tua firma.", "Encrypt with S/MIME and send later" : "Cifra con S/MIME e invia in seguito", "Encrypt with S/MIME and send" : "Cifra con S/MIME e invia", "Encrypt with Mailvelope and send later" : "Cifra con Mailvelope e invia in seguito", "Encrypt with Mailvelope and send" : "Cifra con Mailvelope e invia", "Send later" : "Invia più tardi", "Message {id} could not be found" : "Il messaggio {id} non può essere trovato", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "Hai selezionato la firma o la cifratura con S/MIME, ma non è disponibile alcun certificato per l’alias scelto. Il messaggio non verrà firmato né cifrato.", + "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "La formattazione esistente (ad esempio grassetto, corsivo, sottolineato o immagini incorporate) verrà rimossa.", + "Turn off formatting" : "Disattiva formattazione", + "Turn off and remove formatting" : "Disattiva e rimuovi la formattazione", "Keep formatting" : "Mantieni la formattazione", "From" : "Da", "Select account" : "Seleziona account", "To" : "A", "Cc/Bcc" : "Cc/Ccn", + "Select recipient" : "Seleziona destinatario", + "Contact or email address …" : "Contatto o indirizzo email …", "Cc" : "Cc", "Bcc" : "Ccn", "Subject" : "Oggetto", "Subject …" : "Oggetto...", "This message came from a noreply address so your reply will probably not be read." : "Nota che il messaggio è arrivato da un indirizzo noreply, perciò la tua risposta non sarà probabilmente letta.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "I seguenti destinatari non hanno un certificato S/MIME: {recipients}.", "The following recipients do not have a PGP key: {recipients}." : "I seguenti destinatari non hanno una chiave PGP: {recipients}.", "Write message …" : "Scrivi messaggio...", "Saving draft …" : "Salvataggio bozza…", @@ -203,19 +246,34 @@ OC.L10N.register( "Monday morning" : "Lunedì mattina", "Custom date and time" : "Data e ora personalizzate", "Enter a date" : "Digita una data", - "Choose" : "Scegli", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece il file tramite collegamento.","Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece i file tramite collegamento.","Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece i file tramite collegamento."], - "Choose a file to add as attachment" : "Scegli un file da aggiungere come allegato", - "Choose a file to share as a link" : "Scegli un file da condividere come un collegamento", + "Choose a file" : "Scegli un file", "_{count} attachment_::_{count} attachments_" : ["{count} allegato","{count} allegati","{count} allegati"], "Untitled message" : "Messaggio senza titolo", "Expand composer" : "Espandi compositore", "Close composer" : "Chiudi compositore", "Confirm" : "Conferma", + "Delegate access" : "Accesso delegato", + "Revoke" : "Revoca", + "{userId} will no longer be able to act on your behalf" : "{userId} non potrà più agire per tuo conto", + "Could not fetch delegates" : "Non è stato possibile recuperare i delegati", + "Could not delegate access" : "Non è stato possibile delegare l’accesso", + "Could not revoke delegation" : "Non è possibile revocare la delega", + "Delegation" : "Delega", + "Allow users to send, receive, and delete mail on your behalf" : "Consenti agli utenti delegati di inviare, ricevere ed eliminare email per tuo conto", + "Revoke access" : "Revoca l'accesso", + "Add delegate" : "Aggiungi delegato", + "Select a user" : "Seleziona un utente", + "They will be able to send, receive, and delete mail on your behalf" : "Potranno inviare, ricevere ed eliminare email per tuo conto", + "Revoke access?" : "Revocare l'accesso?", + "Tag: {name} deleted" : "Etichetta: {name} eliminata", + "An error occurred, unable to delete the tag." : "Si è verificato un errore: non è stato possibile eliminare l’etichetta.", + "The tag will be deleted from all messages." : "L’etichetta verrà rimossa da tutti i messaggi.", "Plain text" : "Testo semplice", "Rich text" : "Testo formattato", "No messages in this folder" : "Nessun messaggio in questa cartella", "No messages" : "Nessun messaggio", + "Choose" : "Scegli", "Blind copy recipients only" : "Solo destinatari in copia nascosta", "No subject" : "Nessun oggetto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Bozza:{markup-end} {subject}", @@ -227,9 +285,18 @@ OC.L10N.register( "Set reminder for this weekend" : "Imposta promemoria per questo fine settimana", "Next week – {timeLocale}" : "Prossima settimana – {timeLocale}", "Set reminder for next week" : "Imposta promemoria per la prossima settimana", + "Could not apply tag, configured tag not found" : "Non è stato possibile applicare l’etichetta: l’etichetta configurata non è stata trovata", + "Could not move thread, destination mailbox not found" : "Non è stato possibile spostare la conversazione: la cartella di destinazione non è stata trovata", + "Could not execute quick action" : "Non è stato possibile eseguire l’azione rapida", "Quick action executed" : "Azione rapida eseguita", + "No trash folder configured" : "Nessuna cartella Cestino configurata", "Could not delete message" : "Impossibile eliminare il messaggio", "Could not archive message" : "Impossibile archiviare il messaggio", + "Thread was snoozed" : "Conversazione posticipata", + "Could not snooze thread" : "Non è possibile posticipare la conversazione", + "Thread was unsnoozed" : "Posicipo della conversazione annullato", + "Could not unsnooze thread" : "Non è stato possibile annullare il posticipo della conversazione", + "This summary was AI generated" : "Questo riepilogo è stato generato tramite IA", "Encrypted message" : "Messaggio cifrato", "This message is unread" : "Questo messaggio è non letto", "Unfavorite" : "Rimuovi preferito", @@ -240,17 +307,21 @@ OC.L10N.register( "Mark not spam" : "Marca come posta non indesiderata", "Mark as spam" : "Marca come posta indesiderata", "Edit tags" : "Modifica etichette", + "Snooze" : "Posticipa", + "Unsnooze" : "Annulla posticipo", "Move thread" : "Sposta conversazione", "Move Message" : "Sposta messaggio", "Archive thread" : "Archivia la discussione", "Archive message" : "Messaggio di archivio", - "Delete thread" : "Elimina conversazione", - "Delete message" : "Elimina messaggio", "More actions" : "Altre azioni", "Back" : "Indietro", + "Set custom snooze" : "Imposta posticipo personalizzato", "Edit as new message" : "Modifica come nuovo messaggio", + "Reply with meeting" : "Rispondi proponendo una riunione", "Create task" : "Crea attività", "Download message" : "Scarica messaggio", + "Delete thread" : "Elimina conversazione", + "Delete message" : "Elimina messaggio", "Back to all actions" : "Torna a tutte le azioni", "Manage quick actions" : "Gestisci azione rapida", "Load more" : "Carica altro", @@ -261,16 +332,23 @@ OC.L10N.register( "_Unfavorite {number}_::_Unfavorite {number}_" : ["Rimuovi dai preferiti {number}","Rimuovi dai preferiti {number}","Rimuovi dai preferiti {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Aggiungi ai preferiti {number}","Aggiungi ai preferiti {number}","Aggiungi ai preferiti {number}"], "_Unselect {number}_::_Unselect {number}_" : ["Deseleziona {number}","Deseleziona {number}","Deseleziona {number}"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Segna {number} come spam","Segna {number} come spam","Segna {number} come spam"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Segna {number} come non spam","Segna {number} come non spam","Segna {number} come non spam"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Modifica etichetta per {number}","Modifica etichette per {number}","Modifica etichette per {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Sposta {number} conversazione","Sposta {number} conversazioni","Sposta {number} conversazioni"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Inoltra {number} come allegato","Inoltra {number} come allegati","Inoltra {number} come allegati"], "Mark as unread" : "Segna come non letto", "Mark as read" : "Segna come letto", + "Mark as unimportant" : "Segna come non importante", + "Mark as important" : "Segna come importante", "Report this bug" : "Segnala questo bug", "Event created" : "Evento creato", "Could not create event" : "Impossibile creare l'evento", "Create event" : "Crea evento", + "Title" : "Titolo", "All day" : "Tutto il giorno", "Attendees" : "Partecipanti", + "You can only invite attendees if your account has an email address set" : "Puoi invitare partecipanti solo se il tuo account ha un indirizzo email configurato", "Select calendar" : "Seleziona calendario", "Description" : "Descrizione", "Create" : "Crea", @@ -293,43 +371,81 @@ OC.L10N.register( "Decline" : "Rifiuta", "Tentatively accept" : "Accetta provvisoriamente", "More options" : "Altre opzioni", + "This message has an attached invitation but the invitation dates are in the past" : "Questo messaggio contiene un invito, ma le date dell’invito sono già passate.", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Questo messaggio contiene un invito, ma nell’invito non è presente alcun partecipante associato agli indirizzi email configurati.", + "Could not remove internal address {sender}" : "Non è stato possibile rimuovere l’indirizzo interno {sender}", + "Could not add internal address {address}" : "Non è stato possibile aggiungere l’indirizzo interno {address}", "individual" : "individuale", "domain" : "dominio", "Remove" : "Rimuovi", "Add internal address" : "Aggiungi indirizzo interno", + "Add internal email or domain" : "Aggiungi indirizzo email o dominio interno", "Itinerary for {type} is not supported yet" : "L'itinerario per {type} non è ancora supportato", + "To archive a message please configure an archive folder in account settings" : "Per archiviare un messaggio, configura prima una cartella Archivio nelle impostazioni dell’account", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Non ti è consentito spostare questo messaggio nella cartella degli archivi e/o eliminare questo messaggio dalla cartella corrente.", + "Your IMAP server does not support storing the seen/unseen state." : "Il server IMAP non supporta il salvataggio dello stato letto/non letto.", + "Could not mark message as seen/unseen" : "Non è stato possibile segnare il messaggio come letto/non letto", "Last hour" : "Ultima ora", "Today" : "Oggi", "Yesterday" : "Ieri", "Last week" : "Ultima settimana", "Last month" : "Ultimo mese", + "Could not open folder" : "Non è possibile aprire la cartella", + "Loading messages …" : "Caricamento messaggi in corso …", + "Indexing your messages. This can take a bit longer for larger folders." : "Indicizzazione dei messaggi in corso. Per le cartelle più grandi l’operazione potrebbe richiedere più tempo.", "Choose target folder" : "Scegli la cartella di destinazione", "No more submailboxes in here" : "Qui non ci sono altre sotto-caselle di posta", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "I messaggi verranno contrassegnati automaticamente come importanti tramite l’IA. Il sistema impara dai messaggi con cui interagisci o che segni come importanti. All’inizio potresti dover modificare manualmente il livello di importanza per addestrarlo, ma la precisione migliorerà nel tempo.", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "I messaggi che hai aggiunto ai preferiti verranno mostrati in cima alle cartelle. Puoi disattivare questa opzione dalle impostazioni di Posta.", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "L’IA identifica i messaggi inviati da te che probabilmente richiedono una risposta ma che non ne hanno ricevuta dopo alcuni giorni, e li mostra qui.", "Favorites" : "Preferiti", + "Favorites info" : "Informazioni sui preferiti", + "Load more favorites" : "Carica altri preferiti", + "Follow up" : "Follow-up", + "Follow up info" : "Informazioni sui follow-up", + "Load more follow ups" : "Carica altri follow-up", "Important info" : "Informazione importante", + "Load more important messages" : "Carica altri messaggi importanti", "Other" : "Altro", + "Load more other messages" : "Carica altri messaggi", "Could not send mdn" : "Impossibile inviare mdn", "The sender of this message has asked to be notified when you read this message." : "Il mittente di questo messaggio ha chiesto di essere avvisato quando leggi questo messaggio.", "Notify the sender" : "Notifica al mittente", "You sent a read confirmation to the sender of this message." : "Hai inviato una conferma di lettura al mittente di questo messaggio.", + "Message was snoozed" : "Messaggio posticipato", + "Could not snooze message" : "Non è possibile posticipare il messaggio", + "Message was unsnoozed" : "Posticipo del messaggio annullato", + "Could not unsnooze message" : "Non è stato possibile annullare il posticipo del messaggio", + "Direct link copied to clipboard" : "Collegamento diretto copiato negli appunti", "Forward" : "Inoltra", + "Link copied" : "Collegamento copiato", "Move message" : "Sposta messaggio", "Translate" : "Traduci", + "Forward message as attachment" : "Inoltra il messaggio come allegato", "View source" : "Visualizza sorgente", "Print message" : "Stampa messaggio", + "Create mail filter" : "Crea filtro email", "Download thread data for debugging" : "Scarica i dati del conversazione per il debug", + "Suggested replies are using AI" : "Le risposte suggerite sono generate tramite IA", "Message body" : "Corpo del messaggio", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Attenzione: la firma S/MIME di questo messaggio non è verificata. Il mittente potrebbe non essere chi dichiara di essere.", + "AI info" : "IA informazioni", "Unnamed" : "Senza nome", "Embedded message" : "Messaggio incorporato", + "Attachment saved to Files" : "Allegato salvato in Files", + "Attachment could not be saved" : "L'allegato non può essere salvato", "calendar imported" : "calendario importato", "Choose a folder to store the attachment in" : "Scegli una cartella dove salvare l'allegato", "Import into calendar" : "Importa nel calendario", "Download attachment" : "Scarica allegato", "Save to Files" : "Salva in File", + "Attachments saved to Files" : "Allegati salvati in Files", + "Error while saving attachments" : "Errore durante il salvataggio degli allegati", + "View fewer attachments" : "Mostra meno allegati", "Choose a folder to store the attachments in" : "Scegli una cartella in cui salvare gli allegati", "Save all to Files" : "Salva tutto in File", "Download Zip" : "Scarica Zip", + "_View {count} more attachment_::_View {count} more attachments_" : ["Mostra altri {count} allegati","Mostra altri {count} allegati","Mostra altri {count} allegati"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Questo messaggio è cifrato con PGP. Installa Mailvelope per decifrarlo.", "The images have been blocked to protect your privacy." : "Le immagini sono state bloccate per proteggere la tua riservatezza.", "Show images" : "Mostra le immagini", @@ -342,11 +458,19 @@ OC.L10N.register( "Moving" : "Spostamento", "Moving thread" : "Spostamento conversazione", "Moving message" : "Spostamento messaggio", + "This account cannot connect" : "Questo account non riesce a connettersi", + "Connection failed. Please verify your information and try again" : "Connessione non riuscita. Verifica i dati inseriti e riprova.", + "Change password" : "Modifica password", "Used quota: {quota}% ({limit})" : "Spazio utilizzato: {quota} % ({limit})", "Used quota: {quota}%" : "Spazio utilizzato: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Non è stato possibile creare la cartella. Il nome contiene probabilmente caratteri non validi. Prova a usare un altro nome.", "Remove account" : "Rimuovi account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "L'account per {email} e i dati di posta elettronica memorizzati nella cache saranno rimossi da Nextcloud, ma non dal tuo fornitore di posta elettronica.", "Remove {email}" : "Rimuovi {email}", + "could not delete account" : "Non è stato possibile eliminare l’account", + "Provisioned account is disabled" : "L’account configurato automaticamente è disattivato", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Accedi con password per abilitare questo account. La sessione corrente usa un accesso senza password, ad esempio SSO o WebAuthn.", + "Delegate account" : "Account delegato", "Show only subscribed folders" : "Mostra solo le cartelle sottoscritte", "Add folder" : "Aggiungi cartella", "Folder name" : "Nome della cartella", @@ -359,19 +483,26 @@ OC.L10N.register( "_{total} message_::_{total} messages_" : ["{total} messaggio","{total} messaggi","{total} messaggi"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} non letto di {total}","{unread} non letti di {total}","{unread} non letti di {total}"], "Loading …" : "Caricamento in corso...", + "All messages in mailbox will be deleted." : "Tutti i messaggi presenti nella cartella verranno eliminati.", + "Clear mailbox {name}" : "Svuota cartella {name}", + "Clear folder" : "Svuota cartella", "The folder and all messages in it will be deleted." : "La cartella e tutti i messaggi in essa saranno eliminati.", "Delete folder" : "Elimina cartella", "Delete folder {name}" : "Elimina cartella {name}", "An error occurred, unable to rename the mailbox." : "Si è verificato un errore, impossibile rinominare la casella di posta.", + "Please wait 10 minutes before repairing again" : "Attendi 10 minuti prima di ripetere la riparazione", "Mark all as read" : "Marca tutti come letti", "Add subfolder" : "Aggiungi sottocartella", "Rename" : "Rinomina", "Move folder" : "Sposta cartella", + "Repair folder" : "Ripara cartella", "Clear cache" : "Svuota cache", "Clear locally cached data, in case there are issues with synchronization." : "Cancella i dati locali in cache, nel caso ci siano problemi di sincronizzazione.", "Subscribed" : "Sottoscritta", "Sync in background" : "Sincronizza in background", + "Delete all messages" : "Elimina tutti i messaggi", "Outbox" : "Posta in uscita", + "Translate this message to {language}" : "Traduci questo messaggio in {language}", "New message" : "Nuovo messaggio", "Edit message" : "Modifica messaggio", "Draft" : "Bozza", @@ -381,36 +512,59 @@ OC.L10N.register( "Failed to save draft" : "Impossibile salvare la bozza", "attachment" : "allegato", "attached" : "allegato", + "No \"sent\" folder configured. Please pick one in the account settings." : "Nessuna cartella “Posta inviata” configurata. Selezionane una nelle impostazioni dell’account.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Stai tentando di inviare a troppi destinatari in A e/o CC. Considera l'idea di utilizzare CCN per nascondere gli indirizzi dei destinatari.", "Your message has no subject. Do you want to send it anyway?" : "Il tuo messaggio non ha oggetto. Vuoi inviarlo comunque?", "You mentioned an attachment. Did you forget to add it?" : "Hai menzionato un allegato. Hai dimenticato di aggiungerlo?", "Message discarded" : "Messaggio scartato", "Could not discard message" : "Impossibile eliminare il messaggio", + "Maximize composer" : "Espandi finestra", + "Show recipient details" : "Mostra dettagli dei destinatari", + "Hide recipient details" : "Nascondi dettagli dei destinatari", + "Minimize composer" : "Riduci finestra", "Error sending your message" : "Errore di invio del messaggio", "Retry" : "Riprova", "Warning sending your message" : "Avviso durante l'invio del tuo messaggio", "Send anyway" : "Invia comunque", - "Autoresponder off" : "Risponditore automatico spento", - "Autoresponder on" : "Risponditore automatico attivo", + "Welcome to {productName} Mail" : "Benvenuto in {productName} Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Inizia a scrivere un messaggio cliccando qui sotto oppure seleziona un messaggio esistente per visualizzarne il contenuto", + "Autoresponder off" : "Risposta automatica disattivata", + "Autoresponder on" : "Risposta automatica attiva", + "Autoresponder follows system settings" : "La risposta automatica segue le impostazioni di sistema", + "The autoresponder follows your personal absence period settings." : "La risposta automatica segue le impostazioni del tuo periodo di assenza.", + "Edit absence settings" : "Modifica impostazioni di assenza", "First day" : "Primo giorno", "Last day (optional)" : "Ultimo giorno (facoltativo)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} verrà sostituito con l’oggetto del messaggio a cui stai rispondendo", "Message" : "Messaggio", "Oh Snap!" : "Accidenti!", - "Save autoresponder" : "Salva risponditore automatico", + "Save autoresponder" : "Salva risposta automatica", "Could not open outbox" : "Impossibile aprire la posta in uscita", + "Pending or not sent messages will show up here" : "Qui verranno mostrati i messaggi in sospeso o non ancora inviati", + "Could not copy to \"Sent\" folder" : "Non è possibile copiare nella cartella \"Posta inviata\"", + "Mail server error" : "Errore del server di posta", "Message could not be sent" : "Il messaggio non può essere inviato", "Message deleted" : "Messaggio eliminato", + "Copy to \"Sent\" Folder" : "Copia nella cartella \"Posta inviata\"", + "Copy to Sent Folder" : "Copia nella cartella Posta inviata", + "Phishing email" : "Email di phishing", + "This email might be a phishing attempt" : "Questa email potrebbe essere un tentativo di phishing", + "Hide suspicious links" : "Nascondi link sospetti", + "Show suspicious links" : "Mostra link sospetti", + "link text" : "testo del link", "Copied email address to clipboard" : "Indirizzo email copiato negli appunti", "Could not copy email address to clipboard" : "Impossibile copiare l'indirizzo email negli appunti", "Contacts with this address" : "Contatti con questo indirizzo", "Add to Contact" : "Aggiungi ai contatti", "New Contact" : "Nuovo contatto", "Copy to clipboard" : "Copia negli appunti", + "Contact name …" : "Nome contatto …", "Add" : "Aggiungi", "Show less" : "Mostra meno", "Show more" : "Mostra più", "Clear" : "Pulisci", "Search in folder" : "Cerca nella cartella", + "Open search modal" : "Apri finestra di ricerca", "Close" : "Chiudi", "Search parameters" : "Parametri di ricerca", "Search subject" : "Cerca nell'oggetto", @@ -425,9 +579,13 @@ OC.L10N.register( "Select BCC recipients" : "Seleziona i destinatari CCN", "Tags" : "Etichette", "Select tags" : "Seleziona etichette", + "Marked as" : "Contrassegnato come", "Has attachments" : "Ha allegati", + "Mentions me" : "Mi menziona", + "Has attachment" : "Con allegato", + "To me" : "A me", "Enable mail body search" : "Abilita ricerca nel corpo del messaggio", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve è un potente linguaggio per la creazione di filtri per la tua casella di posta. Puoi gestire gli script Sieve nell’app Posta se il tuo servizio email lo supporta. Sieve è inoltre necessario per utilizzare il risponditore automatico e i filtri.", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve è un potente linguaggio per la creazione di filtri per la tua casella di posta. Puoi gestire gli script Sieve nell’app Posta se il tuo servizio email lo supporta. Sieve è inoltre necessario per utilizzare le risposte automatiche e i filtri.", "Enable sieve filter" : "Abilita filtri Sieve", "Sieve host" : "Host Sieve", "Sieve security" : "Sicurezza Sieve", @@ -437,33 +595,68 @@ OC.L10N.register( "Custom" : "Personalizzato", "Sieve User" : "Utente Sieve", "Sieve Password" : "Password Sieve", + "Oh snap!" : "Ops!", "Save sieve settings" : "Salva impostazione Sieve", + "The syntax seems to be incorrect:" : "La sintassi non sembra corretta:", "Save sieve script" : "Salva script Sieve", "Signature …" : "Scrivi firma …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "La firma supera i 2 MB e potrebbe rallentare l’editor.", "Save signature" : "Salva firma", "Place signature above quoted text" : "Posiziona la firma sopra il testo citato", "Message source" : "Sorgente del messaggio", "An error occurred, unable to rename the tag." : "Si è verificato un errore, impossibile rinominare l'etichetta.", "Edit name or color" : "Modifica nome o colore", + "Saving new tag name …" : "Salvataggio del nuovo nome dell’etichetta in corso …", "Delete tag" : "Elimina etichetta", + "Set tag" : "Assegna etichetta", + "Unset tag" : "Rimuovi etichetta", + "Tag name is a hidden system tag" : "Questo nome è riservato a un’etichetta di sistema nascosta", "Tag already exists" : "L'etichetta esiste già", + "Tag name cannot be empty" : "Il nome dell’etichetta non può essere vuoto", "An error occurred, unable to create the tag." : "Si è verificato un errore, impossibile creare l'etichetta.", "Add default tags" : "Aggiungi etichette predefiniti", "Add tag" : "Aggiungi etichetta", + "Saving tag …" : "Salvataggio etichetta in corso …", "Task created" : "Attività creata", "Could not create task" : "Impossibile creare l'attività", + "No calendars with task list support" : "Nessun calendario supporta le liste di attività", + "Summarizing thread failed." : "Non è stato possibile generare il riepilogo della conversazione.", "Could not load your message thread" : "Impossibile caricare la tua discussione", + "The thread doesn't exist or has been deleted" : "La conversazione non esiste oppure è stata eliminata", + "Email was not able to be opened" : "Non è stato possibile aprire l’email", "Print" : "Stampa", "Could not print message" : "Impossibile stampare il messaggio", + "Loading thread" : "Caricamento conversazione in corso", "Not found" : "Non trovato", "Encrypted & verified " : "Cifrato e verificato", "Signature verified" : "Firma verificata", "Signature unverified " : "Firma non verificata", "This message was encrypted by the sender before it was sent." : "Questo messaggio è stato cifrato dal mittente prima di essere inviato.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Questo messaggio contiene una firma digitale S/MIME verificata. Il messaggio non è stato modificato dopo l’invio.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Questo messaggio contiene una firma digitale S/MIME non verificata. Il messaggio potrebbe essere stato modificato dopo l’invio oppure il certificato del firmatario potrebbe non essere attendibile.", "Reply all" : "Rispondi a tutti", + "Unsubscribe request sent" : "Richiesta di disiscrizione inviata", + "Could not unsubscribe from mailing list" : "Non è stato possibile disiscriversi dalla mailing list", + "Please wait for the message to load" : "Attendi il caricamento del messaggio", + "Disable reminder" : "Disattiva promemoria", "Unsubscribe" : "Rimuovi sottoscrizione", "Reply to sender only" : "Rispondi solo al mittente", + "Mark as unfavorite" : "Rimuovi dai preferiti", + "Mark as favorite" : "Aggiungi ai preferiti", + "From:" : "Da:", + "To:" : "A: ", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", + "Unsubscribe via link" : "Disiscriviti tramite link", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Disiscrivendoti non riceverai più messaggi da questa mailing list {sender}", + "Send unsubscribe email" : "Invia email di disiscrizione", + "Unsubscribe via email" : "Disiscriviti tramite email", + "{name} Assistant" : "{name} Assistente", + "Thread summary" : "Riepilogo della conversazione", "Go to latest message" : "Vai all'ultimo messaggio", + "Newest message" : "Messaggio più recente", + "This summary is AI generated and may contain mistakes." : "Questo riepilogo è stato generato tramite IA e potrebbe contenere imprecisioni.", + "Please select languages to translate to and from" : "Seleziona la lingua di partenza e quella di destinazione per la traduzione", "The message could not be translated" : "Questo messaggio non può essere tradotto", "Translation copied to clipboard" : "Traduzione copiata negli appunti", "Translation could not be copied" : "La traduzione non può essere copiata", @@ -473,6 +666,7 @@ OC.L10N.register( "Target language to translate into" : "Lingua di destinazione in cui tradurre", "Translate to" : "Traduci in", "Translating" : "Traduco", + "This translation is generated using AI and may contain inaccuracies" : "Questa traduzione è stata generata con l’IA e potrebbe contenere imprecisioni", "Copy translated text" : "Copia testo tradotto", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Disattiva la conservazione nel cestino lasciando il campo vuoto o impostandolo a 0. Verranno elaborati solo i messaggi eliminati dopo l’attivazione della conservazione.", "Could not remove trusted sender {sender}" : "Impossibile rimuovere il mittente fidato {sender}", @@ -487,15 +681,48 @@ OC.L10N.register( "{trainNr} from {depStation} to {arrStation}" : "{trainNr} da {depStation} a {arrStation}", "Train from {depStation} to {arrStation}" : "Treno da {depStation} a {arrStation}", "Train" : "Treno", + "Mark message as" : "Contrassegna il messaggio come", + "Add flag" : "Aggiungi contrassegno", "Move into folder" : "Sposta nella cartella", "Stop" : "Ferma", + "Delete action" : "Elimina azione", + "Answered" : "Risposto", "Deleted" : "Eliminato", + "Flagged" : "Contrassegnato", + "Seen" : "Letto", + "Enter flag" : "Inserisci contrassegno", + "Stop ends all processing" : "Interrompi: termina tutte le elaborazioni", + "Sender" : "Mittente", "Recipient" : "Destinatario", + "Create a new mail filter" : "Crea un nuovo filtro email", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Scegli le intestazioni da usare per creare il filtro. Nel passaggio successivo potrai definire meglio le condizioni e indicare quali azioni applicare ai messaggi che corrispondono ai criteri scelti.", "Delete filter" : "Elimina filtro", + "Delete mail filter {filterName}?" : "Cancella filtro email {filterName}?", + "Are you sure to delete the mail filter?" : "Sei sicuro di cancellare il filtro email?", + "New filter" : "Nuovo filtro", + "Filter saved" : "Filtro salvato", + "Could not save filter" : "Impossibile salvare il filtro", + "Filter deleted" : "Filtro cancellato", + "Could not delete filter" : "Impossibile cancellare il filtro", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Metti ordine nella tua posta. I filtri ti aiutano a dare priorità ai messaggi importanti e a ridurre il superfluo.", + "Hang tight while the filters load" : "Caricamento dei filtri in corso", + "Filter is active" : "Il filtro è attivo", + "Filter is not active" : "Il filtro non è attivo", + "If all the conditions are met, the actions will be performed" : "Se tutte le condizioni sono soddisfatte, verranno eseguite le azioni previste", + "If any of the conditions are met, the actions will be performed" : "Se almeno una delle condizioni è soddisfatta, verranno eseguite le azioni previste", "Help" : "Assistenza", "contains" : "contiene", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Corrispondenza parziale. Il campo corrisponde se contiene il valore indicato. Ad esempio, “report” può corrispondere a “Business report 2024”.", "matches" : "corrisponde", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Corrispondenza tramite caratteri jolly. Il simbolo “*” rappresenta qualsiasi numero di caratteri (anche nessuno), mentre “?” rappresenta esattamente un carattere. Ad esempio, “*report*” può corrispondere a “Business report 2024”.", + "Enter subject" : "Inserisci oggetto", + "Enter sender" : "Inserisci mittente", + "Enter recipient" : "Inserisci destinatario", + "is exactly" : "è esattamente", + "Conditions" : "Condizioni", + "Add condition" : "Aggiungi condizione", "Actions" : "Azioni", + "Add action" : "Aggiungi azione", "Priority" : "Priorità", "Enable filter" : "Abilita filtri", "Tag" : "Etichetta", @@ -503,11 +730,19 @@ OC.L10N.register( "Edit quick action" : "Modifica azione rapida", "Add quick action" : "Aggiungi azione rapida", "Quick action deleted" : "Azione rapida eliminata", + "Failed to delete quick action" : "Non è stato possibile eliminare l’azione rapida", + "Failed to update quick action" : "Non è stato possibile aggiornare l’azione rapida", + "Failed to update step in quick action" : "Non è stato possibile aggiornare il passaggio dell’azione rapida", "Quick action updated" : "Azione rapida aggiornata", + "Failed to create quick action" : "Non è stato possibile creare l’azione rapida", + "Failed to add steps to quick action" : "Non è stato possibile aggiungere passaggi all’azione rapida", "Quick action created" : "Azione rapida creata", + "Failed to delete action step" : "Non è stato possibile eliminare il passaggio dell’azione", "No quick actions yet." : "Nessuna azione rapida disponibile al momento.", "Edit" : "Modifica", "Quick action name" : "Azione rapida nome", + "Do the following actions" : "Esegui le seguenti azioni", + "Add another action" : "Aggiungi un’altra azione", "Successfully updated config for \"{domain}\"" : "Configurazione aggiornata con successo per \"{domain}\"", "Error saving config" : "Errore durante il salvataggio della configurazione", "Saved config for \"{domain}\"" : "Configurazione salvata per \"{domain}\"", @@ -516,6 +751,7 @@ OC.L10N.register( "There was an error when provisioning accounts." : "Si è verificato un errore durante il approvvigionamento degli account.", "Successfully deleted and deprovisioned accounts for \"{domain}\"" : " Account eliminati e approvvigionato correttamente per \"{domain}\"", "Error when deleting and deprovisioning accounts for \"{domain}\"" : "Errore durante l'eliminazione e il approvvigionamento degli account per \"{domain}\"", + "Could not save default classification setting" : "Non è stato possibile salvare l’impostazione di classificazione predefinita", "Mail app" : "Applicazione di posta", "The mail app allows users to read mails on their IMAP accounts." : "L'applicazione di posta consente agli utenti di leggere i messaggi dei propri account IMAP.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Qui puoi trovare le impostazioni a livello di istanza. Le impostazioni specifiche dell'utente si trovano nell'applicazione stessa (angolo in basso a sinistra).", @@ -531,11 +767,28 @@ OC.L10N.register( "Provisioning Configurations" : "Configurazione di approvvigionamento", "Add new config" : "Aggiungi nuova configurazione", "Provision all accounts" : "Predisponi tutti gli account", + "Allow additional mail accounts" : "Consenti account email aggiuntivi", + "Allow additional Mail accounts from User Settings" : "Consenti account Mail aggiuntivi dalle impostazioni utente", + "Enable text processing through LLMs" : "Abilita elaborazione del testo tramite LLM", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "L’app Mail può elaborare i dati dell’utente tramite il modello linguistico configurato e offrire funzionalità avanzate come riepiloghi delle conversazioni, risposte intelligenti e agenda degli eventi.", + "Enable LLM processing" : "Abilita elaborazione tramite LLM", + "Enable classification by importance by default" : "Abilita di default la classificazione per importanza", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "L’app Mail può classificare automaticamente le email in arrivo in base alla loro importanza tramite machine learning. La funzionalità è attiva per impostazione predefinita, ma può essere disattivata qui. I singoli utenti potranno comunque abilitarla o disabilitarla per il proprio account.", + "Enable classification of important mails by default" : "Abilita di default la classificazione delle email importanti", "Anti Spam Service" : "Servizio anti-spam", "You can set up an anti spam service email address here." : "È possibile impostare un indirizzo e-mail del servizio Anti-Spam qui.", "Any email that is marked as spam will be sent to the anti spam service." : "Qualsiasi email contrassegnata come posta indesiderata verrà inviata al servizio anti-spam.", "Gmail integration" : "Integrazione Gmail", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail consente l’accesso alle email tramite IMAP. Per motivi di sicurezza, questa modalità è disponibile solo tramite una connessione OAuth 2.0 oppure per gli account Google con autenticazione a due fattori e password per le app.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Devi registrare un nuovo Client ID di tipo “Applicazione web” nella console Google Cloud. Aggiungi l’URL {url} come URI di reindirizzamento autorizzato.", "Microsoft integration" : "Integrazione Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft richiede l’accesso alle email tramite IMAP con autenticazione OAuth 2.0. Per configurarlo, devi registrare un’app in Microsoft Entra ID, in precedenza noto come Microsoft Azure Active Directory.", + "Redirect URI" : "URI di reindirizzamento", + "For more details, please click here to open our documentation." : "Per maggiori dettagli, fai clic qui per aprire la documentazione.", + "User Interface Preference Defaults" : "Preferenze predefinite dell’interfaccia utente", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Queste impostazioni servono a preconfigurare le preferenze dell’interfaccia utente. L’utente potrà comunque modificarle dalle impostazioni di Posta.", + "Message View Mode" : "Modalità di visualizzazione dei messaggi", + "Show only the selected message" : "Mostra solo il messaggio selezionato", "Successfully set up anti spam email addresses" : "Impostare correttamente gli indirizzi e-mail anti-spam", "Error saving anti spam email addresses" : "Errore durante il salvataggio degli indirizzi email anti-spam", "Successfully deleted anti spam reporting email" : "Email di segnalazione anti-spam eliminata con successo", @@ -588,7 +841,9 @@ OC.L10N.register( "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Il certificato PKCS #12 fornito deve contenere almeno un certificato ed esattamente una chiave privata.", "Failed to import the certificate. Please check the password." : "Impossibile importare il certificato. Controlla la password.", "Certificate imported successfully" : "Certificato importato correttamente", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Non è stato possibile importare il certificato. Verifica che la chiave privata corrisponda al certificato e che non sia protetta da passphrase.", "Failed to import the certificate" : "Importare del certificato non riuscita", + "Import S/MIME certificate" : "Importa certificato S/MIME", "S/MIME certificates" : "Certificati S/MIME", "Certificate name" : "Nome del certificato", "E-mail address" : "Indirizzo di posta", @@ -596,7 +851,6 @@ OC.L10N.register( "Delete certificate" : "Elimina certificato", "No certificate imported yet" : "Ancora nessun certificato importato", "Import certificate" : "Importa certificato", - "Import S/MIME certificate" : "Importa certificato S/MIME", "PKCS #12 Certificate" : "Certificato PKCS #12", "PEM Certificate" : "Certificato PEM", "Certificate" : "Certificato", @@ -604,13 +858,24 @@ OC.L10N.register( "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "La chiave privata è necessaria solo se si intende inviare email firmate e cifrate utilizzando questo certificato.", "Submit" : "Invia", "No text blocks available" : "Nessun blocco di testo disponibile", + "Text block deleted" : "Blocco di testo cancellato", + "Failed to delete text block" : "Cancellazione testo di blocco fallita", + "Text block shared with {sharee}" : "Blocco di testo condiviso con {sharee}", + "Failed to share text block with {sharee}" : "Non è stato possibile condividere il blocco di testo con {sharee}", + "Share deleted for {name}" : "Condivisione rimossa per {name}", + "Failed to delete share with {name}" : "Non è stato possibile rimuovere la condivisione con {name}", "Guest" : "Ospite", "Group" : "Gruppo", + "Failed to save text block" : "Salvataggio testo di blocco fallito", "Shared" : "Condiviso", "Edit {title}" : "Modifica {title}", "Delete {title}" : "Elimina {title}", + "Edit text block" : "Modifica blocco di testo", "Shares" : "Condivisioni", + "Search for users or groups" : "Cerca utenti o gruppi", + "Choose a text block to insert at the cursor" : "Scegli un blocco di testo da inserire nel punto selezionato", "Insert" : "Inserisci", + "Insert text block" : "Inserisci testo di blocco", "Account connected" : "Account connesso", "You can close this window" : "Puoi chiudere questa finestra", "Connect your mail account" : "Connetti il tuo account di posta", @@ -632,17 +897,25 @@ OC.L10N.register( "Discard changes" : "Scarta le modifiche", "Discard unsaved changes" : "Scartare le modifiche non salvate", "Keep editing message" : "Continua a modificare il messaggio", + "(All or part of this reply was generated by AI)" : "(Questa risposta è stata generata interamente o parzialmente dall'IA)", "Attachments were not copied. Please add them manually." : "Gli allegati non sono stati copiati. Aggiungili manualmente.", + "Could not create snooze mailbox" : "Non è stato possibile creare la cartella per i messaggi posticipati", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Non è stato possibile caricare il messaggio. La bozza potrebbe non esistere più. Aggiorna la pagina e riprova.", + "Sending message…" : "Invio del messaggio in corso...", "Message sent" : "Messaggio inviato", "Could not send message" : "Impossibile inviare il messaggio", + "Message copied to \"Sent\" folder" : "Messaggio copiato nella cartella “Posta inviata”", + "Could not copy message to \"Sent\" folder" : "Non è possibile copiare messaggi nella cartella \"Posta inviata\"", "Could not load {tag}{name}{endtag}" : "Impossibile caricare {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Si è verificato un programma durante il caricamento di {tag}{name}{endtag}", "Could not load your message" : "Impossibile caricare il tuo messaggio", "Could not load the desired message" : "Impossibile caricare messaggio desiderato", "Could not load the message" : "Impossibile caricare il messaggio", "Error loading message" : "Errore durante il caricamento del messaggio", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "I messaggi saranno automaticamente contrassegnati come importanti in base ai messaggi con cui hai interagito o contrassegnati come importanti. All'inizio potresti dover cambiare manualmente l'importanza per addestrare il sistema, ma migliorerà nel tempo.", - "Mark all messages of this folder as read" : "Marca tutti i messaggi di questa cartella come letti", - "Last 7 days" : "Ultimi 7 giorni" + "Add share link from Files" : "Aggiungi link condiviso da Files", + "Choose a file to add as attachment" : "Scegli un file da aggiungere come allegato", + "Choose a file to share as a link" : "Scegli un file da condividere come un collegamento", + "Delegated access to {userId}" : "Accesso delegato a {userId}", + "Revoked access for {userId}" : "Revoca l'accesso a {userId}" }, "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/it.json b/l10n/it.json index 405c8185b5..d0f0762851 100644 --- a/l10n/it.json +++ b/l10n/it.json @@ -19,9 +19,14 @@ "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "Il mittente sta usando un’email personalizzata: %1$s invece dell’email del mittente: %2$s", "Sent date is in the future" : "La data di invio è nel futuro", "Mail server marked this message as phishing attempt" : "Il server di posta ha contrassegnato questo messaggio come tentativo di phishing", + "Some addresses in this message are not matching the link text" : "Alcuni link presenti in questo messaggio non corrispondono all’indirizzo visualizzato", + "Reply-To email: %1$s is different from sender email: %2$s" : "L’indirizzo email di risposta: %1$s è diverso dall’indirizzo email del mittente: %2$s", + "Mail connection performance" : "Performance della connessione di posta elettronica", "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Rilevato servizio mail lento (%1$s): un tentativo di connessione a diversi account ha richiesto in media %2$s secondi per account", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Rilevato servizio di posta elettronica lento (%1$s): l’operazione di enumerazione delle caselle di posta su più account ha registrato un tempo medio di %2$s secondi per account.", "Mail Transport configuration" : "Configurazione del recapito email", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "La configurazione email attuale non usa SMTP. Questo può creare problemi con i controlli di sicurezza moderni, come SPF e DKIM, perché i messaggi vengono inviati direttamente dal server web, che spesso non è configurato correttamente per l’invio di email. Il metodo di invio diretto non è più supportato. Rimuovi app.mail.transport dalla configurazione per passare all’invio tramite SMTP e non visualizzare più questo avviso. Per garantire il corretto recapito delle email è necessario configurare SMTP correttamente.", + "Mail account parameters, aliases and preferences" : "Parametri dell’account di posta, alias e preferenze", "💌 A mail app for Nextcloud" : "💌 Un'applicazione di posta per Nextcloud", "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Un'applicazione di posta elettronica per Nextcloud**\n\n- **🚀 Integrazione con altre applicazioni Nextcloud!** Attualmente Contatti, Calendario e File - ne arriveranno altre.\n- **📥 Account di posta multipli!** Account personali e aziendali? Nessun problema, e una bella casella di posta unificata. Collega qualsiasi account IMAP.\n- **🔒 Invia e ricevi email cifrate!** Utilizzando l'estensione del browser [Mailvelope](https://mailvelope.com).\n- **🙈 Non stiamo reinventando la ruota!** Basata sulle ottime librerie di [Horde](https://horde.org).\n- **📬 Vuoi ospitare il tuo server di posta?** Non dobbiamo reimplementarlo poiché puoi configurare [Mail-in-a-Box](https://mailinabox.email)!\n\n## Valutazione etica dell'IA\n\n### Posta in arrivo prioritaria\n\nPositivo:\n* Il software per l'addestramento e l'inferenza di questo modello è open source.\n* Il modello è creato e addestrato in locale basandosi sui dati dell'utente.\n* I dati di addestramento sono accessibili all'utente, rendendo possibile controllare o correggere le soglie o ottimizzare le prestazioni e l'utilizzo di CO2.\n\n### Riassunti delle discussioni (opt-in)\n\n**Valutazione:** 🟢/🟡/🟠/🔴\n\nLa valutazione dipende dal backend di elaborazione del testo installato. Vedi [la panoramica della valutazione](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) per i dettagli.\n\nScopri di più sulla Valutazione etica dell'IA di Nextcloud [nel nostro blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "La sessione è scaduta. La pagina sarà ricaricata.", @@ -29,6 +34,7 @@ "Sent messages are saved in:" : "I messaggi inviati sono salvati in:", "Deleted messages are moved in:" : "I messaggi eliminati sono spostati in:", "Archived messages are moved in:" : "I messaggi archiviati sono spostati in:", + "Snoozed messages are moved in:" : "I messaggi rimandati vengono spostati in:", "Junk messages are saved in:" : "I messaggi indesiderati sono salvati in:", "Connecting" : "Connessione in corso", "Reconnect Google account" : "Ricollega l'account Google", @@ -37,17 +43,31 @@ "Sign in with Microsoft" : "Accedi con Microsoft", "Save" : "Salva", "Connect" : "Connetti", + "Looking up configuration" : "Recupero della configurazione", "Checking mail host connectivity" : "Verifica della connettività dell'host di posta", + "Configuration discovery failed. Please use the manual settings" : "Rilevamento automatico della configurazione non riuscito. Si prega di utilizzare le impostazioni manuali.", "Password required" : "Password richiesta", + "Testing authentication" : "Verifica dell’autenticazione in corso", "Awaiting user consent" : "In attesa del consenso dell'utente.", + "Account created. Please follow the pop-up instructions to link your Google account" : "Account creato. Seguire le istruzioni del pop-up per collegare il proprio account Google", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "Account creato. Seguire le istruzioni del pop-up per collegare il proprio account Microsoft", "Loading account" : "Caricamento account", + "Account updated. Please follow the pop-up instructions to reconnect your Google account" : "Account aggiornato. Seguire le istruzioni del pop-up per riconnettere il proprio account Google", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "Account aggiornato. Seguire le istruzioni del pop-up per riconnettere il proprio account Microsoft", "Account updated" : "Account aggiornato", "IMAP server is not reachable" : "Il server IMAP non è raggiungibile", "SMTP server is not reachable" : "Il server SMTP non è raggiungibile", "IMAP username or password is wrong" : "Il nome utente o la password IMAP sono errati.", "SMTP username or password is wrong" : "Il nome utente o la password SMTP sono errati.", + "IMAP server denied authentication" : "Autenticazione negata dal server IMAP", + "SMTP server denied authentication" : "Autenticazione negata dal server SMTP", + "IMAP authentication error" : "Errore di autenticazione IMAP", + "SMTP authentication error" : "Errore di autenticazione SMTP", "IMAP connection failed" : "Connessione IMAP non riuscita", "SMTP connection failed" : "Connessione SMTP non riuscita", + "Authorization pop-up closed" : "La finestra pop-up di autorizzazione è stata chiusa", + "Configuration discovery temporarily not available. Please try again later." : "Il rilevamento della configurazione è temporaneamente non disponibile. Riprovare più tardi.", + "There was an error while setting up your account" : "Si è verificato un errore durante la configurazione dell’account.", "Auto" : "Automatico", "Name" : "Nome", "Mail address" : "Indirizzo di posta", @@ -71,6 +91,8 @@ "SMTP Port" : "Porta SMTP", "SMTP User" : "Utente SMTP", "SMTP Password" : "Password SMTP", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google richiede l’autenticazione OAuth. Se l’amministratore di Nextcloud non ha configurato Google OAuth, è possibile utilizzare una password per app Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft richiede l’autenticazione OAuth. Si prega di contattare l’amministratore di Nextcloud per configurare OAuth di Microsoft nelle impostazioni di amministrazione.", "Account settings" : "Impostazioni account", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Mappatura alias e certificati S/MIME", @@ -82,9 +104,9 @@ "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "Le cartelle da usare per bozze, messaggi inviati, messaggi archiviati e posta indesiderata.", "Automatic trash deletion" : "Eliminazione automatica del cestino", "Days after which messages in Trash will automatically be deleted:" : "Giorni dopo i quali i messaggi nel cestino verranno eliminati automaticamente:", - "Autoresponder" : "Risponditore automatico", + "Autoresponder" : "Risposta automatica", "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Risposta automatica ai messaggi in arrivo. Se qualcuno ti invia più messaggi, questa risposta automatica verrà inviata al massimo una volta ogni 4 giorni.", - "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Il risponditore automatico utilizza Sieve, un linguaggio di scripting supportato da molti provider di posta elettronica. Se non sei sicuro che il tuo lo supporti, verifica con il tuo provider. Se Sieve è disponibile, fai clic sul pulsante per accedere alle impostazioni e abilitarlo.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "La risposta automatica utilizza Sieve, un linguaggio di scripting supportato da molti provider di posta elettronica. Se non sei sicuro che il tuo lo supporti, verifica con il tuo provider. Se Sieve è disponibile, fai clic sul pulsante per accedere alle impostazioni e abilitarlo.", "Go to Sieve settings" : "Vai alle impostazioni Sieve", "Calendar settings" : "Impostazioni Calendario", "Classification settings" : "Impostazioni di classificazione", @@ -94,23 +116,26 @@ "Mail server" : "Server di posta", "Sieve server" : "Server Sieve", "Folder search" : "Ricerca cartelle", + "Email address" : "Indirizzo email", "Update alias" : "Aggiorna alias", "Rename alias" : "Rinomina alias", "Show update alias form" : "Mostra modulo aggiornamento alias", "Delete alias" : "Elimina alias", "Go back" : "Indietro", "Change name" : "Cambia il nome", - "Email address" : "Indirizzo email", "Add alias" : "Aggiungi alias", "Create alias" : "Crea alias", "Cancel" : "Annulla", "Search the body of messages in priority Inbox" : "Cerca nel corpo dei messaggi nella posta prioritaria", "Activate" : "Attiva", + "Make mails available to Context Chat" : "Rendi le email disponibili per Context Chat", + "Remind about messages that require a reply but received none" : "Promemoria per i messaggi che richiedono una risposta ma non hanno ricevuto alcun riscontro", "Highlight external addresses" : "Evidenzia indirizzi esterni", "Could not update preference" : "Impossibile aggiornare la preferenza", "Mail settings" : "Impostazioni Posta", "General" : "Generale", "Set as default mail app" : "Imposta come applicazione di posta predefinita", + "{email} (delegated)" : "{email} (delegata)", "Add mail account" : "Aggiungi account di posta", "Appearance" : "Aspetto", "Show all messages in thread" : "Mostra tutti i messaggi della conversazione", @@ -125,13 +150,16 @@ "Sorting" : "Ordina", "Newest first" : "Prima i più recenti", "Oldest first" : "Prima i più datati", + "New text block" : "Nuovo blocco di testo", + "Title of the text block" : "Titolo del blocco di testo", + "Content of the text block" : "Contenuto del blocco di testo", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Mostra avatar del mittente e icone", "Reply position" : "Posizione della risposta", "Top" : "In alto", "Bottom" : "In basso", "Text blocks" : "Blocchi di testo", "Reusable pieces of text that can be inserted in messages" : "Parti di testo riutilizzabili che possono essere inserite nei messaggi", - "New text block" : "Nuovo blocco di testo", "Shared with me" : "Condivisi con me", "Privacy" : "Riservatezza", "Data collection" : "Raccolta dati", @@ -142,8 +170,13 @@ "S/MIME" : "S/MIME", "Manage certificates" : "Gestisci certificati", "Mailvelope" : "Mailvelope", + "Mailvelope is enabled for the current domain." : "Mailvelope è abilitato per il dominio corrente.", + "Step 1" : "Passo 1", "Install the browser extension" : "Installa l'estensione del browser", + "Step 2" : "Passo 2", "Enable for the current domain" : "Abilita per il dominio corrente", + "Assistance features" : "Funzionalità di assistenza", + "Context Chat integration" : "Integrazione con Context Chat", "Compose new message" : "Componi nuovo messaggio", "Newer message" : "Messaggio più recente", "Older message" : "Messaggio più datato", @@ -156,29 +189,39 @@ "Refresh" : "Aggiorna", "About" : "Informazioni", "Acknowledgements" : "Ringraziamenti", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Questa applicazione include CKEditor, un editor open-source. Copyright © dei contributori di CKEditor. Concesso in licenza GPLv2.", + "Automatically create tentative appointments in calendar" : "Crea automaticamente appuntamenti provvisori nel calendario", "No certificate" : "Nessun certificato", "Certificate updated" : "Certificato aggiornato", "Could not update certificate" : "Impossibile aggiornare il certificato", "{commonName} - Valid until {expiryDate}" : "{commonName} - Valido fino al {expiryDate}", "Select an alias" : "Seleziona un alias", + "Select certificates" : "Seleziona i certificati", "Update Certificate" : "Aggiorna certificato", + "The selected certificate is not trusted by the server. Recipients might not be able to verify your signature." : "Il certificato selezionato non è considerato attendibile dal server. I destinatari potrebbero non essere in grado di verificare la tua firma.", "Encrypt with S/MIME and send later" : "Cifra con S/MIME e invia in seguito", "Encrypt with S/MIME and send" : "Cifra con S/MIME e invia", "Encrypt with Mailvelope and send later" : "Cifra con Mailvelope e invia in seguito", "Encrypt with Mailvelope and send" : "Cifra con Mailvelope e invia", "Send later" : "Invia più tardi", "Message {id} could not be found" : "Il messaggio {id} non può essere trovato", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "Hai selezionato la firma o la cifratura con S/MIME, ma non è disponibile alcun certificato per l’alias scelto. Il messaggio non verrà firmato né cifrato.", + "Any existing formatting (for example bold, italic, underline or inline images) will be removed." : "La formattazione esistente (ad esempio grassetto, corsivo, sottolineato o immagini incorporate) verrà rimossa.", + "Turn off formatting" : "Disattiva formattazione", + "Turn off and remove formatting" : "Disattiva e rimuovi la formattazione", "Keep formatting" : "Mantieni la formattazione", "From" : "Da", "Select account" : "Seleziona account", "To" : "A", "Cc/Bcc" : "Cc/Ccn", + "Select recipient" : "Seleziona destinatario", + "Contact or email address …" : "Contatto o indirizzo email …", "Cc" : "Cc", "Bcc" : "Ccn", "Subject" : "Oggetto", "Subject …" : "Oggetto...", "This message came from a noreply address so your reply will probably not be read." : "Nota che il messaggio è arrivato da un indirizzo noreply, perciò la tua risposta non sarà probabilmente letta.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "I seguenti destinatari non hanno un certificato S/MIME: {recipients}.", "The following recipients do not have a PGP key: {recipients}." : "I seguenti destinatari non hanno una chiave PGP: {recipients}.", "Write message …" : "Scrivi messaggio...", "Saving draft …" : "Salvataggio bozza…", @@ -201,19 +244,34 @@ "Monday morning" : "Lunedì mattina", "Custom date and time" : "Data e ora personalizzate", "Enter a date" : "Digita una data", - "Choose" : "Scegli", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece il file tramite collegamento.","Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece i file tramite collegamento.","Gli allegati superano le dimensioni consentite per gli allegati di {size}. Condividere invece i file tramite collegamento."], - "Choose a file to add as attachment" : "Scegli un file da aggiungere come allegato", - "Choose a file to share as a link" : "Scegli un file da condividere come un collegamento", + "Choose a file" : "Scegli un file", "_{count} attachment_::_{count} attachments_" : ["{count} allegato","{count} allegati","{count} allegati"], "Untitled message" : "Messaggio senza titolo", "Expand composer" : "Espandi compositore", "Close composer" : "Chiudi compositore", "Confirm" : "Conferma", + "Delegate access" : "Accesso delegato", + "Revoke" : "Revoca", + "{userId} will no longer be able to act on your behalf" : "{userId} non potrà più agire per tuo conto", + "Could not fetch delegates" : "Non è stato possibile recuperare i delegati", + "Could not delegate access" : "Non è stato possibile delegare l’accesso", + "Could not revoke delegation" : "Non è possibile revocare la delega", + "Delegation" : "Delega", + "Allow users to send, receive, and delete mail on your behalf" : "Consenti agli utenti delegati di inviare, ricevere ed eliminare email per tuo conto", + "Revoke access" : "Revoca l'accesso", + "Add delegate" : "Aggiungi delegato", + "Select a user" : "Seleziona un utente", + "They will be able to send, receive, and delete mail on your behalf" : "Potranno inviare, ricevere ed eliminare email per tuo conto", + "Revoke access?" : "Revocare l'accesso?", + "Tag: {name} deleted" : "Etichetta: {name} eliminata", + "An error occurred, unable to delete the tag." : "Si è verificato un errore: non è stato possibile eliminare l’etichetta.", + "The tag will be deleted from all messages." : "L’etichetta verrà rimossa da tutti i messaggi.", "Plain text" : "Testo semplice", "Rich text" : "Testo formattato", "No messages in this folder" : "Nessun messaggio in questa cartella", "No messages" : "Nessun messaggio", + "Choose" : "Scegli", "Blind copy recipients only" : "Solo destinatari in copia nascosta", "No subject" : "Nessun oggetto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Bozza:{markup-end} {subject}", @@ -225,9 +283,18 @@ "Set reminder for this weekend" : "Imposta promemoria per questo fine settimana", "Next week – {timeLocale}" : "Prossima settimana – {timeLocale}", "Set reminder for next week" : "Imposta promemoria per la prossima settimana", + "Could not apply tag, configured tag not found" : "Non è stato possibile applicare l’etichetta: l’etichetta configurata non è stata trovata", + "Could not move thread, destination mailbox not found" : "Non è stato possibile spostare la conversazione: la cartella di destinazione non è stata trovata", + "Could not execute quick action" : "Non è stato possibile eseguire l’azione rapida", "Quick action executed" : "Azione rapida eseguita", + "No trash folder configured" : "Nessuna cartella Cestino configurata", "Could not delete message" : "Impossibile eliminare il messaggio", "Could not archive message" : "Impossibile archiviare il messaggio", + "Thread was snoozed" : "Conversazione posticipata", + "Could not snooze thread" : "Non è possibile posticipare la conversazione", + "Thread was unsnoozed" : "Posicipo della conversazione annullato", + "Could not unsnooze thread" : "Non è stato possibile annullare il posticipo della conversazione", + "This summary was AI generated" : "Questo riepilogo è stato generato tramite IA", "Encrypted message" : "Messaggio cifrato", "This message is unread" : "Questo messaggio è non letto", "Unfavorite" : "Rimuovi preferito", @@ -238,17 +305,21 @@ "Mark not spam" : "Marca come posta non indesiderata", "Mark as spam" : "Marca come posta indesiderata", "Edit tags" : "Modifica etichette", + "Snooze" : "Posticipa", + "Unsnooze" : "Annulla posticipo", "Move thread" : "Sposta conversazione", "Move Message" : "Sposta messaggio", "Archive thread" : "Archivia la discussione", "Archive message" : "Messaggio di archivio", - "Delete thread" : "Elimina conversazione", - "Delete message" : "Elimina messaggio", "More actions" : "Altre azioni", "Back" : "Indietro", + "Set custom snooze" : "Imposta posticipo personalizzato", "Edit as new message" : "Modifica come nuovo messaggio", + "Reply with meeting" : "Rispondi proponendo una riunione", "Create task" : "Crea attività", "Download message" : "Scarica messaggio", + "Delete thread" : "Elimina conversazione", + "Delete message" : "Elimina messaggio", "Back to all actions" : "Torna a tutte le azioni", "Manage quick actions" : "Gestisci azione rapida", "Load more" : "Carica altro", @@ -259,16 +330,23 @@ "_Unfavorite {number}_::_Unfavorite {number}_" : ["Rimuovi dai preferiti {number}","Rimuovi dai preferiti {number}","Rimuovi dai preferiti {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Aggiungi ai preferiti {number}","Aggiungi ai preferiti {number}","Aggiungi ai preferiti {number}"], "_Unselect {number}_::_Unselect {number}_" : ["Deseleziona {number}","Deseleziona {number}","Deseleziona {number}"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Segna {number} come spam","Segna {number} come spam","Segna {number} come spam"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Segna {number} come non spam","Segna {number} come non spam","Segna {number} come non spam"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Modifica etichetta per {number}","Modifica etichette per {number}","Modifica etichette per {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Sposta {number} conversazione","Sposta {number} conversazioni","Sposta {number} conversazioni"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Inoltra {number} come allegato","Inoltra {number} come allegati","Inoltra {number} come allegati"], "Mark as unread" : "Segna come non letto", "Mark as read" : "Segna come letto", + "Mark as unimportant" : "Segna come non importante", + "Mark as important" : "Segna come importante", "Report this bug" : "Segnala questo bug", "Event created" : "Evento creato", "Could not create event" : "Impossibile creare l'evento", "Create event" : "Crea evento", + "Title" : "Titolo", "All day" : "Tutto il giorno", "Attendees" : "Partecipanti", + "You can only invite attendees if your account has an email address set" : "Puoi invitare partecipanti solo se il tuo account ha un indirizzo email configurato", "Select calendar" : "Seleziona calendario", "Description" : "Descrizione", "Create" : "Crea", @@ -291,43 +369,81 @@ "Decline" : "Rifiuta", "Tentatively accept" : "Accetta provvisoriamente", "More options" : "Altre opzioni", + "This message has an attached invitation but the invitation dates are in the past" : "Questo messaggio contiene un invito, ma le date dell’invito sono già passate.", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Questo messaggio contiene un invito, ma nell’invito non è presente alcun partecipante associato agli indirizzi email configurati.", + "Could not remove internal address {sender}" : "Non è stato possibile rimuovere l’indirizzo interno {sender}", + "Could not add internal address {address}" : "Non è stato possibile aggiungere l’indirizzo interno {address}", "individual" : "individuale", "domain" : "dominio", "Remove" : "Rimuovi", "Add internal address" : "Aggiungi indirizzo interno", + "Add internal email or domain" : "Aggiungi indirizzo email o dominio interno", "Itinerary for {type} is not supported yet" : "L'itinerario per {type} non è ancora supportato", + "To archive a message please configure an archive folder in account settings" : "Per archiviare un messaggio, configura prima una cartella Archivio nelle impostazioni dell’account", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Non ti è consentito spostare questo messaggio nella cartella degli archivi e/o eliminare questo messaggio dalla cartella corrente.", + "Your IMAP server does not support storing the seen/unseen state." : "Il server IMAP non supporta il salvataggio dello stato letto/non letto.", + "Could not mark message as seen/unseen" : "Non è stato possibile segnare il messaggio come letto/non letto", "Last hour" : "Ultima ora", "Today" : "Oggi", "Yesterday" : "Ieri", "Last week" : "Ultima settimana", "Last month" : "Ultimo mese", + "Could not open folder" : "Non è possibile aprire la cartella", + "Loading messages …" : "Caricamento messaggi in corso …", + "Indexing your messages. This can take a bit longer for larger folders." : "Indicizzazione dei messaggi in corso. Per le cartelle più grandi l’operazione potrebbe richiedere più tempo.", "Choose target folder" : "Scegli la cartella di destinazione", "No more submailboxes in here" : "Qui non ci sono altre sotto-caselle di posta", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "I messaggi verranno contrassegnati automaticamente come importanti tramite l’IA. Il sistema impara dai messaggi con cui interagisci o che segni come importanti. All’inizio potresti dover modificare manualmente il livello di importanza per addestrarlo, ma la precisione migliorerà nel tempo.", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "I messaggi che hai aggiunto ai preferiti verranno mostrati in cima alle cartelle. Puoi disattivare questa opzione dalle impostazioni di Posta.", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "L’IA identifica i messaggi inviati da te che probabilmente richiedono una risposta ma che non ne hanno ricevuta dopo alcuni giorni, e li mostra qui.", "Favorites" : "Preferiti", + "Favorites info" : "Informazioni sui preferiti", + "Load more favorites" : "Carica altri preferiti", + "Follow up" : "Follow-up", + "Follow up info" : "Informazioni sui follow-up", + "Load more follow ups" : "Carica altri follow-up", "Important info" : "Informazione importante", + "Load more important messages" : "Carica altri messaggi importanti", "Other" : "Altro", + "Load more other messages" : "Carica altri messaggi", "Could not send mdn" : "Impossibile inviare mdn", "The sender of this message has asked to be notified when you read this message." : "Il mittente di questo messaggio ha chiesto di essere avvisato quando leggi questo messaggio.", "Notify the sender" : "Notifica al mittente", "You sent a read confirmation to the sender of this message." : "Hai inviato una conferma di lettura al mittente di questo messaggio.", + "Message was snoozed" : "Messaggio posticipato", + "Could not snooze message" : "Non è possibile posticipare il messaggio", + "Message was unsnoozed" : "Posticipo del messaggio annullato", + "Could not unsnooze message" : "Non è stato possibile annullare il posticipo del messaggio", + "Direct link copied to clipboard" : "Collegamento diretto copiato negli appunti", "Forward" : "Inoltra", + "Link copied" : "Collegamento copiato", "Move message" : "Sposta messaggio", "Translate" : "Traduci", + "Forward message as attachment" : "Inoltra il messaggio come allegato", "View source" : "Visualizza sorgente", "Print message" : "Stampa messaggio", + "Create mail filter" : "Crea filtro email", "Download thread data for debugging" : "Scarica i dati del conversazione per il debug", + "Suggested replies are using AI" : "Le risposte suggerite sono generate tramite IA", "Message body" : "Corpo del messaggio", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Attenzione: la firma S/MIME di questo messaggio non è verificata. Il mittente potrebbe non essere chi dichiara di essere.", + "AI info" : "IA informazioni", "Unnamed" : "Senza nome", "Embedded message" : "Messaggio incorporato", + "Attachment saved to Files" : "Allegato salvato in Files", + "Attachment could not be saved" : "L'allegato non può essere salvato", "calendar imported" : "calendario importato", "Choose a folder to store the attachment in" : "Scegli una cartella dove salvare l'allegato", "Import into calendar" : "Importa nel calendario", "Download attachment" : "Scarica allegato", "Save to Files" : "Salva in File", + "Attachments saved to Files" : "Allegati salvati in Files", + "Error while saving attachments" : "Errore durante il salvataggio degli allegati", + "View fewer attachments" : "Mostra meno allegati", "Choose a folder to store the attachments in" : "Scegli una cartella in cui salvare gli allegati", "Save all to Files" : "Salva tutto in File", "Download Zip" : "Scarica Zip", + "_View {count} more attachment_::_View {count} more attachments_" : ["Mostra altri {count} allegati","Mostra altri {count} allegati","Mostra altri {count} allegati"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Questo messaggio è cifrato con PGP. Installa Mailvelope per decifrarlo.", "The images have been blocked to protect your privacy." : "Le immagini sono state bloccate per proteggere la tua riservatezza.", "Show images" : "Mostra le immagini", @@ -340,11 +456,19 @@ "Moving" : "Spostamento", "Moving thread" : "Spostamento conversazione", "Moving message" : "Spostamento messaggio", + "This account cannot connect" : "Questo account non riesce a connettersi", + "Connection failed. Please verify your information and try again" : "Connessione non riuscita. Verifica i dati inseriti e riprova.", + "Change password" : "Modifica password", "Used quota: {quota}% ({limit})" : "Spazio utilizzato: {quota} % ({limit})", "Used quota: {quota}%" : "Spazio utilizzato: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Non è stato possibile creare la cartella. Il nome contiene probabilmente caratteri non validi. Prova a usare un altro nome.", "Remove account" : "Rimuovi account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "L'account per {email} e i dati di posta elettronica memorizzati nella cache saranno rimossi da Nextcloud, ma non dal tuo fornitore di posta elettronica.", "Remove {email}" : "Rimuovi {email}", + "could not delete account" : "Non è stato possibile eliminare l’account", + "Provisioned account is disabled" : "L’account configurato automaticamente è disattivato", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Accedi con password per abilitare questo account. La sessione corrente usa un accesso senza password, ad esempio SSO o WebAuthn.", + "Delegate account" : "Account delegato", "Show only subscribed folders" : "Mostra solo le cartelle sottoscritte", "Add folder" : "Aggiungi cartella", "Folder name" : "Nome della cartella", @@ -357,19 +481,26 @@ "_{total} message_::_{total} messages_" : ["{total} messaggio","{total} messaggi","{total} messaggi"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} non letto di {total}","{unread} non letti di {total}","{unread} non letti di {total}"], "Loading …" : "Caricamento in corso...", + "All messages in mailbox will be deleted." : "Tutti i messaggi presenti nella cartella verranno eliminati.", + "Clear mailbox {name}" : "Svuota cartella {name}", + "Clear folder" : "Svuota cartella", "The folder and all messages in it will be deleted." : "La cartella e tutti i messaggi in essa saranno eliminati.", "Delete folder" : "Elimina cartella", "Delete folder {name}" : "Elimina cartella {name}", "An error occurred, unable to rename the mailbox." : "Si è verificato un errore, impossibile rinominare la casella di posta.", + "Please wait 10 minutes before repairing again" : "Attendi 10 minuti prima di ripetere la riparazione", "Mark all as read" : "Marca tutti come letti", "Add subfolder" : "Aggiungi sottocartella", "Rename" : "Rinomina", "Move folder" : "Sposta cartella", + "Repair folder" : "Ripara cartella", "Clear cache" : "Svuota cache", "Clear locally cached data, in case there are issues with synchronization." : "Cancella i dati locali in cache, nel caso ci siano problemi di sincronizzazione.", "Subscribed" : "Sottoscritta", "Sync in background" : "Sincronizza in background", + "Delete all messages" : "Elimina tutti i messaggi", "Outbox" : "Posta in uscita", + "Translate this message to {language}" : "Traduci questo messaggio in {language}", "New message" : "Nuovo messaggio", "Edit message" : "Modifica messaggio", "Draft" : "Bozza", @@ -379,36 +510,59 @@ "Failed to save draft" : "Impossibile salvare la bozza", "attachment" : "allegato", "attached" : "allegato", + "No \"sent\" folder configured. Please pick one in the account settings." : "Nessuna cartella “Posta inviata” configurata. Selezionane una nelle impostazioni dell’account.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Stai tentando di inviare a troppi destinatari in A e/o CC. Considera l'idea di utilizzare CCN per nascondere gli indirizzi dei destinatari.", "Your message has no subject. Do you want to send it anyway?" : "Il tuo messaggio non ha oggetto. Vuoi inviarlo comunque?", "You mentioned an attachment. Did you forget to add it?" : "Hai menzionato un allegato. Hai dimenticato di aggiungerlo?", "Message discarded" : "Messaggio scartato", "Could not discard message" : "Impossibile eliminare il messaggio", + "Maximize composer" : "Espandi finestra", + "Show recipient details" : "Mostra dettagli dei destinatari", + "Hide recipient details" : "Nascondi dettagli dei destinatari", + "Minimize composer" : "Riduci finestra", "Error sending your message" : "Errore di invio del messaggio", "Retry" : "Riprova", "Warning sending your message" : "Avviso durante l'invio del tuo messaggio", "Send anyway" : "Invia comunque", - "Autoresponder off" : "Risponditore automatico spento", - "Autoresponder on" : "Risponditore automatico attivo", + "Welcome to {productName} Mail" : "Benvenuto in {productName} Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Inizia a scrivere un messaggio cliccando qui sotto oppure seleziona un messaggio esistente per visualizzarne il contenuto", + "Autoresponder off" : "Risposta automatica disattivata", + "Autoresponder on" : "Risposta automatica attiva", + "Autoresponder follows system settings" : "La risposta automatica segue le impostazioni di sistema", + "The autoresponder follows your personal absence period settings." : "La risposta automatica segue le impostazioni del tuo periodo di assenza.", + "Edit absence settings" : "Modifica impostazioni di assenza", "First day" : "Primo giorno", "Last day (optional)" : "Ultimo giorno (facoltativo)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} verrà sostituito con l’oggetto del messaggio a cui stai rispondendo", "Message" : "Messaggio", "Oh Snap!" : "Accidenti!", - "Save autoresponder" : "Salva risponditore automatico", + "Save autoresponder" : "Salva risposta automatica", "Could not open outbox" : "Impossibile aprire la posta in uscita", + "Pending or not sent messages will show up here" : "Qui verranno mostrati i messaggi in sospeso o non ancora inviati", + "Could not copy to \"Sent\" folder" : "Non è possibile copiare nella cartella \"Posta inviata\"", + "Mail server error" : "Errore del server di posta", "Message could not be sent" : "Il messaggio non può essere inviato", "Message deleted" : "Messaggio eliminato", + "Copy to \"Sent\" Folder" : "Copia nella cartella \"Posta inviata\"", + "Copy to Sent Folder" : "Copia nella cartella Posta inviata", + "Phishing email" : "Email di phishing", + "This email might be a phishing attempt" : "Questa email potrebbe essere un tentativo di phishing", + "Hide suspicious links" : "Nascondi link sospetti", + "Show suspicious links" : "Mostra link sospetti", + "link text" : "testo del link", "Copied email address to clipboard" : "Indirizzo email copiato negli appunti", "Could not copy email address to clipboard" : "Impossibile copiare l'indirizzo email negli appunti", "Contacts with this address" : "Contatti con questo indirizzo", "Add to Contact" : "Aggiungi ai contatti", "New Contact" : "Nuovo contatto", "Copy to clipboard" : "Copia negli appunti", + "Contact name …" : "Nome contatto …", "Add" : "Aggiungi", "Show less" : "Mostra meno", "Show more" : "Mostra più", "Clear" : "Pulisci", "Search in folder" : "Cerca nella cartella", + "Open search modal" : "Apri finestra di ricerca", "Close" : "Chiudi", "Search parameters" : "Parametri di ricerca", "Search subject" : "Cerca nell'oggetto", @@ -423,9 +577,13 @@ "Select BCC recipients" : "Seleziona i destinatari CCN", "Tags" : "Etichette", "Select tags" : "Seleziona etichette", + "Marked as" : "Contrassegnato come", "Has attachments" : "Ha allegati", + "Mentions me" : "Mi menziona", + "Has attachment" : "Con allegato", + "To me" : "A me", "Enable mail body search" : "Abilita ricerca nel corpo del messaggio", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve è un potente linguaggio per la creazione di filtri per la tua casella di posta. Puoi gestire gli script Sieve nell’app Posta se il tuo servizio email lo supporta. Sieve è inoltre necessario per utilizzare il risponditore automatico e i filtri.", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve è un potente linguaggio per la creazione di filtri per la tua casella di posta. Puoi gestire gli script Sieve nell’app Posta se il tuo servizio email lo supporta. Sieve è inoltre necessario per utilizzare le risposte automatiche e i filtri.", "Enable sieve filter" : "Abilita filtri Sieve", "Sieve host" : "Host Sieve", "Sieve security" : "Sicurezza Sieve", @@ -435,33 +593,68 @@ "Custom" : "Personalizzato", "Sieve User" : "Utente Sieve", "Sieve Password" : "Password Sieve", + "Oh snap!" : "Ops!", "Save sieve settings" : "Salva impostazione Sieve", + "The syntax seems to be incorrect:" : "La sintassi non sembra corretta:", "Save sieve script" : "Salva script Sieve", "Signature …" : "Scrivi firma …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "La firma supera i 2 MB e potrebbe rallentare l’editor.", "Save signature" : "Salva firma", "Place signature above quoted text" : "Posiziona la firma sopra il testo citato", "Message source" : "Sorgente del messaggio", "An error occurred, unable to rename the tag." : "Si è verificato un errore, impossibile rinominare l'etichetta.", "Edit name or color" : "Modifica nome o colore", + "Saving new tag name …" : "Salvataggio del nuovo nome dell’etichetta in corso …", "Delete tag" : "Elimina etichetta", + "Set tag" : "Assegna etichetta", + "Unset tag" : "Rimuovi etichetta", + "Tag name is a hidden system tag" : "Questo nome è riservato a un’etichetta di sistema nascosta", "Tag already exists" : "L'etichetta esiste già", + "Tag name cannot be empty" : "Il nome dell’etichetta non può essere vuoto", "An error occurred, unable to create the tag." : "Si è verificato un errore, impossibile creare l'etichetta.", "Add default tags" : "Aggiungi etichette predefiniti", "Add tag" : "Aggiungi etichetta", + "Saving tag …" : "Salvataggio etichetta in corso …", "Task created" : "Attività creata", "Could not create task" : "Impossibile creare l'attività", + "No calendars with task list support" : "Nessun calendario supporta le liste di attività", + "Summarizing thread failed." : "Non è stato possibile generare il riepilogo della conversazione.", "Could not load your message thread" : "Impossibile caricare la tua discussione", + "The thread doesn't exist or has been deleted" : "La conversazione non esiste oppure è stata eliminata", + "Email was not able to be opened" : "Non è stato possibile aprire l’email", "Print" : "Stampa", "Could not print message" : "Impossibile stampare il messaggio", + "Loading thread" : "Caricamento conversazione in corso", "Not found" : "Non trovato", "Encrypted & verified " : "Cifrato e verificato", "Signature verified" : "Firma verificata", "Signature unverified " : "Firma non verificata", "This message was encrypted by the sender before it was sent." : "Questo messaggio è stato cifrato dal mittente prima di essere inviato.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Questo messaggio contiene una firma digitale S/MIME verificata. Il messaggio non è stato modificato dopo l’invio.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Questo messaggio contiene una firma digitale S/MIME non verificata. Il messaggio potrebbe essere stato modificato dopo l’invio oppure il certificato del firmatario potrebbe non essere attendibile.", "Reply all" : "Rispondi a tutti", + "Unsubscribe request sent" : "Richiesta di disiscrizione inviata", + "Could not unsubscribe from mailing list" : "Non è stato possibile disiscriversi dalla mailing list", + "Please wait for the message to load" : "Attendi il caricamento del messaggio", + "Disable reminder" : "Disattiva promemoria", "Unsubscribe" : "Rimuovi sottoscrizione", "Reply to sender only" : "Rispondi solo al mittente", + "Mark as unfavorite" : "Rimuovi dai preferiti", + "Mark as favorite" : "Aggiungi ai preferiti", + "From:" : "Da:", + "To:" : "A: ", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", + "Unsubscribe via link" : "Disiscriviti tramite link", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Disiscrivendoti non riceverai più messaggi da questa mailing list {sender}", + "Send unsubscribe email" : "Invia email di disiscrizione", + "Unsubscribe via email" : "Disiscriviti tramite email", + "{name} Assistant" : "{name} Assistente", + "Thread summary" : "Riepilogo della conversazione", "Go to latest message" : "Vai all'ultimo messaggio", + "Newest message" : "Messaggio più recente", + "This summary is AI generated and may contain mistakes." : "Questo riepilogo è stato generato tramite IA e potrebbe contenere imprecisioni.", + "Please select languages to translate to and from" : "Seleziona la lingua di partenza e quella di destinazione per la traduzione", "The message could not be translated" : "Questo messaggio non può essere tradotto", "Translation copied to clipboard" : "Traduzione copiata negli appunti", "Translation could not be copied" : "La traduzione non può essere copiata", @@ -471,6 +664,7 @@ "Target language to translate into" : "Lingua di destinazione in cui tradurre", "Translate to" : "Traduci in", "Translating" : "Traduco", + "This translation is generated using AI and may contain inaccuracies" : "Questa traduzione è stata generata con l’IA e potrebbe contenere imprecisioni", "Copy translated text" : "Copia testo tradotto", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Disattiva la conservazione nel cestino lasciando il campo vuoto o impostandolo a 0. Verranno elaborati solo i messaggi eliminati dopo l’attivazione della conservazione.", "Could not remove trusted sender {sender}" : "Impossibile rimuovere il mittente fidato {sender}", @@ -485,15 +679,48 @@ "{trainNr} from {depStation} to {arrStation}" : "{trainNr} da {depStation} a {arrStation}", "Train from {depStation} to {arrStation}" : "Treno da {depStation} a {arrStation}", "Train" : "Treno", + "Mark message as" : "Contrassegna il messaggio come", + "Add flag" : "Aggiungi contrassegno", "Move into folder" : "Sposta nella cartella", "Stop" : "Ferma", + "Delete action" : "Elimina azione", + "Answered" : "Risposto", "Deleted" : "Eliminato", + "Flagged" : "Contrassegnato", + "Seen" : "Letto", + "Enter flag" : "Inserisci contrassegno", + "Stop ends all processing" : "Interrompi: termina tutte le elaborazioni", + "Sender" : "Mittente", "Recipient" : "Destinatario", + "Create a new mail filter" : "Crea un nuovo filtro email", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Scegli le intestazioni da usare per creare il filtro. Nel passaggio successivo potrai definire meglio le condizioni e indicare quali azioni applicare ai messaggi che corrispondono ai criteri scelti.", "Delete filter" : "Elimina filtro", + "Delete mail filter {filterName}?" : "Cancella filtro email {filterName}?", + "Are you sure to delete the mail filter?" : "Sei sicuro di cancellare il filtro email?", + "New filter" : "Nuovo filtro", + "Filter saved" : "Filtro salvato", + "Could not save filter" : "Impossibile salvare il filtro", + "Filter deleted" : "Filtro cancellato", + "Could not delete filter" : "Impossibile cancellare il filtro", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Metti ordine nella tua posta. I filtri ti aiutano a dare priorità ai messaggi importanti e a ridurre il superfluo.", + "Hang tight while the filters load" : "Caricamento dei filtri in corso", + "Filter is active" : "Il filtro è attivo", + "Filter is not active" : "Il filtro non è attivo", + "If all the conditions are met, the actions will be performed" : "Se tutte le condizioni sono soddisfatte, verranno eseguite le azioni previste", + "If any of the conditions are met, the actions will be performed" : "Se almeno una delle condizioni è soddisfatta, verranno eseguite le azioni previste", "Help" : "Assistenza", "contains" : "contiene", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Corrispondenza parziale. Il campo corrisponde se contiene il valore indicato. Ad esempio, “report” può corrispondere a “Business report 2024”.", "matches" : "corrisponde", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Corrispondenza tramite caratteri jolly. Il simbolo “*” rappresenta qualsiasi numero di caratteri (anche nessuno), mentre “?” rappresenta esattamente un carattere. Ad esempio, “*report*” può corrispondere a “Business report 2024”.", + "Enter subject" : "Inserisci oggetto", + "Enter sender" : "Inserisci mittente", + "Enter recipient" : "Inserisci destinatario", + "is exactly" : "è esattamente", + "Conditions" : "Condizioni", + "Add condition" : "Aggiungi condizione", "Actions" : "Azioni", + "Add action" : "Aggiungi azione", "Priority" : "Priorità", "Enable filter" : "Abilita filtri", "Tag" : "Etichetta", @@ -501,11 +728,19 @@ "Edit quick action" : "Modifica azione rapida", "Add quick action" : "Aggiungi azione rapida", "Quick action deleted" : "Azione rapida eliminata", + "Failed to delete quick action" : "Non è stato possibile eliminare l’azione rapida", + "Failed to update quick action" : "Non è stato possibile aggiornare l’azione rapida", + "Failed to update step in quick action" : "Non è stato possibile aggiornare il passaggio dell’azione rapida", "Quick action updated" : "Azione rapida aggiornata", + "Failed to create quick action" : "Non è stato possibile creare l’azione rapida", + "Failed to add steps to quick action" : "Non è stato possibile aggiungere passaggi all’azione rapida", "Quick action created" : "Azione rapida creata", + "Failed to delete action step" : "Non è stato possibile eliminare il passaggio dell’azione", "No quick actions yet." : "Nessuna azione rapida disponibile al momento.", "Edit" : "Modifica", "Quick action name" : "Azione rapida nome", + "Do the following actions" : "Esegui le seguenti azioni", + "Add another action" : "Aggiungi un’altra azione", "Successfully updated config for \"{domain}\"" : "Configurazione aggiornata con successo per \"{domain}\"", "Error saving config" : "Errore durante il salvataggio della configurazione", "Saved config for \"{domain}\"" : "Configurazione salvata per \"{domain}\"", @@ -514,6 +749,7 @@ "There was an error when provisioning accounts." : "Si è verificato un errore durante il approvvigionamento degli account.", "Successfully deleted and deprovisioned accounts for \"{domain}\"" : " Account eliminati e approvvigionato correttamente per \"{domain}\"", "Error when deleting and deprovisioning accounts for \"{domain}\"" : "Errore durante l'eliminazione e il approvvigionamento degli account per \"{domain}\"", + "Could not save default classification setting" : "Non è stato possibile salvare l’impostazione di classificazione predefinita", "Mail app" : "Applicazione di posta", "The mail app allows users to read mails on their IMAP accounts." : "L'applicazione di posta consente agli utenti di leggere i messaggi dei propri account IMAP.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Qui puoi trovare le impostazioni a livello di istanza. Le impostazioni specifiche dell'utente si trovano nell'applicazione stessa (angolo in basso a sinistra).", @@ -529,11 +765,28 @@ "Provisioning Configurations" : "Configurazione di approvvigionamento", "Add new config" : "Aggiungi nuova configurazione", "Provision all accounts" : "Predisponi tutti gli account", + "Allow additional mail accounts" : "Consenti account email aggiuntivi", + "Allow additional Mail accounts from User Settings" : "Consenti account Mail aggiuntivi dalle impostazioni utente", + "Enable text processing through LLMs" : "Abilita elaborazione del testo tramite LLM", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "L’app Mail può elaborare i dati dell’utente tramite il modello linguistico configurato e offrire funzionalità avanzate come riepiloghi delle conversazioni, risposte intelligenti e agenda degli eventi.", + "Enable LLM processing" : "Abilita elaborazione tramite LLM", + "Enable classification by importance by default" : "Abilita di default la classificazione per importanza", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "L’app Mail può classificare automaticamente le email in arrivo in base alla loro importanza tramite machine learning. La funzionalità è attiva per impostazione predefinita, ma può essere disattivata qui. I singoli utenti potranno comunque abilitarla o disabilitarla per il proprio account.", + "Enable classification of important mails by default" : "Abilita di default la classificazione delle email importanti", "Anti Spam Service" : "Servizio anti-spam", "You can set up an anti spam service email address here." : "È possibile impostare un indirizzo e-mail del servizio Anti-Spam qui.", "Any email that is marked as spam will be sent to the anti spam service." : "Qualsiasi email contrassegnata come posta indesiderata verrà inviata al servizio anti-spam.", "Gmail integration" : "Integrazione Gmail", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail consente l’accesso alle email tramite IMAP. Per motivi di sicurezza, questa modalità è disponibile solo tramite una connessione OAuth 2.0 oppure per gli account Google con autenticazione a due fattori e password per le app.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Devi registrare un nuovo Client ID di tipo “Applicazione web” nella console Google Cloud. Aggiungi l’URL {url} come URI di reindirizzamento autorizzato.", "Microsoft integration" : "Integrazione Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft richiede l’accesso alle email tramite IMAP con autenticazione OAuth 2.0. Per configurarlo, devi registrare un’app in Microsoft Entra ID, in precedenza noto come Microsoft Azure Active Directory.", + "Redirect URI" : "URI di reindirizzamento", + "For more details, please click here to open our documentation." : "Per maggiori dettagli, fai clic qui per aprire la documentazione.", + "User Interface Preference Defaults" : "Preferenze predefinite dell’interfaccia utente", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Queste impostazioni servono a preconfigurare le preferenze dell’interfaccia utente. L’utente potrà comunque modificarle dalle impostazioni di Posta.", + "Message View Mode" : "Modalità di visualizzazione dei messaggi", + "Show only the selected message" : "Mostra solo il messaggio selezionato", "Successfully set up anti spam email addresses" : "Impostare correttamente gli indirizzi e-mail anti-spam", "Error saving anti spam email addresses" : "Errore durante il salvataggio degli indirizzi email anti-spam", "Successfully deleted anti spam reporting email" : "Email di segnalazione anti-spam eliminata con successo", @@ -586,7 +839,9 @@ "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Il certificato PKCS #12 fornito deve contenere almeno un certificato ed esattamente una chiave privata.", "Failed to import the certificate. Please check the password." : "Impossibile importare il certificato. Controlla la password.", "Certificate imported successfully" : "Certificato importato correttamente", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Non è stato possibile importare il certificato. Verifica che la chiave privata corrisponda al certificato e che non sia protetta da passphrase.", "Failed to import the certificate" : "Importare del certificato non riuscita", + "Import S/MIME certificate" : "Importa certificato S/MIME", "S/MIME certificates" : "Certificati S/MIME", "Certificate name" : "Nome del certificato", "E-mail address" : "Indirizzo di posta", @@ -594,7 +849,6 @@ "Delete certificate" : "Elimina certificato", "No certificate imported yet" : "Ancora nessun certificato importato", "Import certificate" : "Importa certificato", - "Import S/MIME certificate" : "Importa certificato S/MIME", "PKCS #12 Certificate" : "Certificato PKCS #12", "PEM Certificate" : "Certificato PEM", "Certificate" : "Certificato", @@ -602,13 +856,24 @@ "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "La chiave privata è necessaria solo se si intende inviare email firmate e cifrate utilizzando questo certificato.", "Submit" : "Invia", "No text blocks available" : "Nessun blocco di testo disponibile", + "Text block deleted" : "Blocco di testo cancellato", + "Failed to delete text block" : "Cancellazione testo di blocco fallita", + "Text block shared with {sharee}" : "Blocco di testo condiviso con {sharee}", + "Failed to share text block with {sharee}" : "Non è stato possibile condividere il blocco di testo con {sharee}", + "Share deleted for {name}" : "Condivisione rimossa per {name}", + "Failed to delete share with {name}" : "Non è stato possibile rimuovere la condivisione con {name}", "Guest" : "Ospite", "Group" : "Gruppo", + "Failed to save text block" : "Salvataggio testo di blocco fallito", "Shared" : "Condiviso", "Edit {title}" : "Modifica {title}", "Delete {title}" : "Elimina {title}", + "Edit text block" : "Modifica blocco di testo", "Shares" : "Condivisioni", + "Search for users or groups" : "Cerca utenti o gruppi", + "Choose a text block to insert at the cursor" : "Scegli un blocco di testo da inserire nel punto selezionato", "Insert" : "Inserisci", + "Insert text block" : "Inserisci testo di blocco", "Account connected" : "Account connesso", "You can close this window" : "Puoi chiudere questa finestra", "Connect your mail account" : "Connetti il tuo account di posta", @@ -630,17 +895,25 @@ "Discard changes" : "Scarta le modifiche", "Discard unsaved changes" : "Scartare le modifiche non salvate", "Keep editing message" : "Continua a modificare il messaggio", + "(All or part of this reply was generated by AI)" : "(Questa risposta è stata generata interamente o parzialmente dall'IA)", "Attachments were not copied. Please add them manually." : "Gli allegati non sono stati copiati. Aggiungili manualmente.", + "Could not create snooze mailbox" : "Non è stato possibile creare la cartella per i messaggi posticipati", + "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Non è stato possibile caricare il messaggio. La bozza potrebbe non esistere più. Aggiorna la pagina e riprova.", + "Sending message…" : "Invio del messaggio in corso...", "Message sent" : "Messaggio inviato", "Could not send message" : "Impossibile inviare il messaggio", + "Message copied to \"Sent\" folder" : "Messaggio copiato nella cartella “Posta inviata”", + "Could not copy message to \"Sent\" folder" : "Non è possibile copiare messaggi nella cartella \"Posta inviata\"", "Could not load {tag}{name}{endtag}" : "Impossibile caricare {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Si è verificato un programma durante il caricamento di {tag}{name}{endtag}", "Could not load your message" : "Impossibile caricare il tuo messaggio", "Could not load the desired message" : "Impossibile caricare messaggio desiderato", "Could not load the message" : "Impossibile caricare il messaggio", "Error loading message" : "Errore durante il caricamento del messaggio", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "I messaggi saranno automaticamente contrassegnati come importanti in base ai messaggi con cui hai interagito o contrassegnati come importanti. All'inizio potresti dover cambiare manualmente l'importanza per addestrare il sistema, ma migliorerà nel tempo.", - "Mark all messages of this folder as read" : "Marca tutti i messaggi di questa cartella come letti", - "Last 7 days" : "Ultimi 7 giorni" + "Add share link from Files" : "Aggiungi link condiviso da Files", + "Choose a file to add as attachment" : "Scegli un file da aggiungere come allegato", + "Choose a file to share as a link" : "Scegli un file da condividere come un collegamento", + "Delegated access to {userId}" : "Accesso delegato a {userId}", + "Revoked access for {userId}" : "Revoca l'accesso a {userId}" },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/ja.js b/l10n/ja.js index 6dee994c55..37205505a0 100644 --- a/l10n/ja.js +++ b/l10n/ja.js @@ -20,9 +20,15 @@ OC.L10N.register( "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "送信者の電子メール: %1$s はアドレス帳にありませんが、送信者名: %2$s は次の電子メールと共にアドレス帳にあります: %3$s", "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "送信者は、送信者の電子メール: %2$s ではなくカスタム電子メール: %1$s を使用しています", "Sent date is in the future" : "送信日が未来の日付です", + "Mail server marked this message as phishing attempt" : "メールサーバーはこのメッセージをフィッシング攻撃としてマークしました", "Some addresses in this message are not matching the link text" : "このメッセージの一部のアドレスがリンクテキストと一致しません", + "Reply-To email: %1$s is different from sender email: %2$s" : "返信先の電子メール: %1$s は送信者の電子メール: %2$s と異なります", + "Mail connection performance" : "メール接続パフォーマンス", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "メールサービスの遅延が検出されました(%1$s)。複数のアカウントへの接続試行に、アカウントあたり平均%2$s秒かかりました。", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "メールサービスの遅延が検出されました(%1$s)複数のアカウントでメールボックスリスト操作を実行しようとしたところ、アカウントあたり平均%2$s秒かかりました", "Mail Transport configuration" : "メール転送の設定", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "app.mail.transport設定がsmtpに設定されていません。この設定は、SPFやDKIMといった最新の電子メールセキュリティ対策で問題を引き起こす可能性があります。なぜなら、電子メールはWebサーバーから直接送信されるため、この目的のために適切に設定されていないことが多いからです。この問題に対処するため、メールトランスポートのサポートを終了しました。SMTPトランスポートを使用し、このメッセージを非表示にするには、設定からapp.mail.transportを削除してください。メール配信を確実に行うには、SMTPを適切に設定する必要があります。", + "Mail account parameters, aliases and preferences" : "メールアカウントのパラメータ、エイリアス、および設定", "💌 A mail app for Nextcloud" : "💌Nextcloudのメールアプリ", "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud 用メールアプリ**\n\n- **🚀 他の Nextcloud アプリとの連携!** 現在は連絡先、カレンダー、ファイルに対応しています。今後さらに対応予定です。\n- **📥 複数のメールアカウントに対応!** 個人アカウントと会社アカウント、どちらも問題なく、受信トレイが統合されます。あらゆる IMAP アカウントに接続できます。\n- **🔒 暗号化メールを送受信!** 優れた [Mailvelope](https://mailvelope.com) ブラウザ拡張機能を使用。\n- **🙈 車輪の再発明ではありません!** 優れた [Horde](https://www.horde.org) ライブラリをベースにしています。\n- **📬 独自のメールサーバーをホストしたいですか?** [Mail-in-a-Box](https://mailinabox.email) をセットアップすれば済むので、再実装する必要はありません!\n\n## 倫理的AI評価\n\n### 優先受信トレイ\n\n良い点:\n* このモデルのトレーニングと推論に使用するソフトウェアはオープンソースです。\n* このモデルは、ユーザー自身のデータに基づいてオンプレミスで作成およびトレーニングされています。\n* トレーニングデータはユーザーがアクセスできるため、バイアスの確認や修正、パフォーマンスとCO2排出量の最適化が可能です。\n\n### スレッド概要(オプトイン)\n\n**評価:** 🟢/🟡/🟠/🔴\n\n評価はインストールされているテキスト処理バックエンドによって異なります。詳細は[評価の概要](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html)をご覧ください。\n\nNextcloud倫理的AI評価の詳細については、[ブログ](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)をご覧ください。", "Your session has expired. The page will be reloaded." : "あなたのセッションは期間切れています。ページを再リロードしてください", @@ -55,6 +61,10 @@ OC.L10N.register( "SMTP server is not reachable" : "SMTPサーバーにアクセスできません", "IMAP username or password is wrong" : "IMAP ユーザー名またはパスワードが間違っています", "SMTP username or password is wrong" : "SMTP ユーザー名またはパスワードが間違っています", + "IMAP server denied authentication" : "IMAPサーバーが認証を拒否しました", + "SMTP server denied authentication" : "SMTPサーバーが認証を拒否しました", + "IMAP authentication error" : "IMAP認証エラー", + "SMTP authentication error" : "SMTP認証エラー", "IMAP connection failed" : "IMAP 接続が失敗しました", "SMTP connection failed" : "SMTP接続が失敗しました", "Authorization pop-up closed" : "承認ポップアップは閉じました", @@ -66,6 +76,7 @@ OC.L10N.register( "name@example.org" : "name@example.org", "Please enter an email of the format name@example.com" : "name@example.com形式のメールを入力してください。", "Password" : "パスワード", + "Enable mark as important classification" : "重要分類としてマーク", "Manual" : "手動", "IMAP Settings" : "IMAP設定", "IMAP Host" : "IMAPホスト", @@ -82,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "SMTPポート", "SMTP User" : "SMTPユーザー", "SMTP Password" : "SMTPパスワード", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Googleアカウントでこのアプリを使用するには、Googleの2要素認証を有効にし、アプリパスワードを生成する必要があります。", "Account settings" : "アカウント設定", "Aliases" : "別名", "Alias to S/MIME certificate mapping" : "エイリアスから S/MIME 証明書へのマッピング", @@ -103,13 +113,13 @@ OC.L10N.register( "Mail server" : "メールサーバー", "Sieve server" : "Sieveサーバー", "Folder search" : "フォルダ検索", + "Email address" : "メールアドレス", "Update alias" : "エイリアスを更新する", "Rename alias" : "エイリアスの名前を変更する", "Show update alias form" : "エイリアスの更新フォームを表示する", "Delete alias" : "別名を削除", "Go back" : "戻る", "Change name" : "名称変更", - "Email address" : "メールアドレス", "Add alias" : "別名を追加", "Create alias" : "別名をつける", "Cancel" : "キャンセル", @@ -118,6 +128,7 @@ OC.L10N.register( "Could not update preference" : "環境設定を更新できませんでした", "Mail settings" : "メール設定", "General" : "一般", + "Set as default mail app" : "既定のメールアプリとして設定", "Add mail account" : "メールアカウントを追加", "Appearance" : "表示", "Layout" : "レーアウト", @@ -127,6 +138,7 @@ OC.L10N.register( "Sorting" : "並べ替え", "Newest first" : "新しい順", "Oldest first" : "日付(昇順)", + "Ok" : "OK", "Text blocks" : "テキストブロック", "Privacy" : "プライバシー", "Security" : "セキュリティ", @@ -146,7 +158,6 @@ OC.L10N.register( "Send" : "送信", "Refresh" : "同期", "About" : "Nextcloud について", - "Ok" : "OK", "No certificate" : "証明書がありません", "Certificate updated" : "証明書が更新されました", "Could not update certificate" : "証明書を更新できませんでした", @@ -185,7 +196,6 @@ OC.L10N.register( "Disable formatting" : "フォーマットを無効化する", "Upload attachment" : "添付ファイルをアップロードする", "Add attachment from Files" : "ファイルから添付ファイルの追加", - "Add share link from Files" : "ファイル から共有リンクを追加", "Smart picker" : "スマートピッカー", "Request a read receipt" : "開封の通知を要求する", "Sign message with S/MIME" : "S/MIMEでメッセージに署名する", @@ -197,15 +207,18 @@ OC.L10N.register( "Monday morning" : "月曜日の朝", "Custom date and time" : "カスタム日時&時間", "Enter a date" : "日付を入力してください", - "Choose" : "選択", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["添付ファイルのサイズが 許可された{size}を超えています。代わりにリンクでファイルを共有してください。"], - "Choose a file to add as attachment" : "添付として追加するファイルを選択", - "Choose a file to share as a link" : "共有リンクにして送信するファイルを選択", + "Choose a file" : "ファイルを選択する", "_{count} attachment_::_{count} attachments_" : ["{count} 個の添付ファイル"], "Untitled message" : "無題のメッセージ", "Expand composer" : "コンポーザーを展開する", "Close composer" : "コンポーザーを閉じる", "Confirm" : "承認", + "Revoke" : "取り消す", + "Delegation" : "委任", + "Revoke access" : "アクセスを取り消す", + "Add delegate" : "代理人を追加", + "Revoke access?" : "アクセスを取り消しますか?", "Tag: {name} deleted" : "タグ:{name}削除済み", "An error occurred, unable to delete the tag." : "タグ削除を無効にする時エラーが発生しました", "The tag will be deleted from all messages." : "全てのメッセージからタグが削除されました", @@ -213,6 +226,7 @@ OC.L10N.register( "Rich text" : "リッチテキスト", "No messages in this folder" : "このフォルダーにメッセージはありません", "No messages" : "メッセージはありません", + "Choose" : "選択", "Blind copy recipients only" : "BCC受信者のみ", "No subject" : "件名無し", "Later today – {timeLocale}" : "今日この後 – {timeLocale}", @@ -245,14 +259,14 @@ OC.L10N.register( "Move thread" : "スレッドを移動する", "Archive thread" : "スレッドをアーカイブする", "Archive message" : "メッセージをアーカイブする", - "Delete thread" : "スレッドを削除", - "Delete message" : "メッセージを削除", "More actions" : "その他のアクション", "Back" : "戻る", "Set custom snooze" : "カスタムスヌーズを設定する", "Edit as new message" : "新しいメッセージとして編集", "Create task" : "タスクを作成する", "Download message" : "メッセージをダウンロードする", + "Delete thread" : "スレッドを削除", + "Delete message" : "メッセージを削除", "Load more" : "さらに読み込む", "_Mark {number} read_::_Mark {number} read_" : ["{number} を既読としてマークします"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number} を未読としてマークする"], @@ -273,6 +287,7 @@ OC.L10N.register( "Event created" : "イベントを作成しました", "Could not create event" : "イベントを作成できませんでした。", "Create event" : "イベントを作成", + "Title" : "タイトル", "All day" : "終日", "Attendees" : "参加者", "Select calendar" : "カレンダーを選択する", @@ -325,7 +340,9 @@ OC.L10N.register( "Could not snooze message" : "メッセージをスヌーズできませんでした", "Message was unsnoozed" : "メッセージがスヌーズ解除されました", "Could not unsnooze message" : "メッセージのスヌーズを解除できませんでした", + "Direct link copied to clipboard" : "クリップボードにコピーされた直接リンク", "Forward" : "転送", + "Link copied" : "リンクをコピーしました", "Move message" : "メッセージを移動", "Translate" : "翻訳", "Forward message as attachment" : "メッセージを添付ファイルとして転送する", @@ -362,6 +379,7 @@ OC.L10N.register( "Moving" : "移動中", "Moving thread" : "スレッドを移動しています", "Moving message" : "メッセージを移動しています", + "Change password" : "パスワードを変更", "Remove account" : "アカウント削除", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email}のアカウントとキャッシュされたメールデータはNextcloudから削除されますが、メールプロバイダーからは削除されません。", "Remove {email}" : "{email} を削除", @@ -518,6 +536,8 @@ OC.L10N.register( "Reply to sender only" : "送信者のみに返信", "Mark as unfavorite" : "お気に入りから外す", "Mark as favorite" : "お気に入りにする", + "From:" : "元:", + "To:" : "先:", "Unsubscribe via link" : "リンク経由で購読を解除する", "Unsubscribing will stop all messages from the mailing list {sender}" : "リスト{sender}から全ての配信メッセージを停止する", "Send unsubscribe email" : "配信停止メールを送信する", @@ -673,6 +693,7 @@ OC.L10N.register( "Certificate imported successfully" : "証明書のインポートが成功しました", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "証明書のインポートに失敗しました。秘密鍵が証明書と一致し、パスフレーズで保護されていないことを確認してください。", "Failed to import the certificate" : "証明書のインポートするが失敗した", + "Import S/MIME certificate" : "S/MIME 証明書をインポートする", "S/MIME certificates" : "S/MIME証明書", "Certificate name" : "証明書名", "E-mail address" : "メールアドレス", @@ -680,7 +701,6 @@ OC.L10N.register( "Delete certificate" : "証明書を削除する", "No certificate imported yet" : "証明書はまだインポートされていません", "Import certificate" : "証明書をインポートする", - "Import S/MIME certificate" : "S/MIME 証明書をインポートする", "PKCS #12 Certificate" : "PKCS #12 証明書", "PEM Certificate" : "PEM証明書", "Certificate" : "証明", @@ -723,10 +743,8 @@ OC.L10N.register( "Could not load the desired message" : "目的のメッセージを読み込めませんでした", "Could not load the message" : "メッセージを読み込めませんでした", "Error loading message" : "メッセージ読み込みエラー", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "あなたの過去の操作を元にしてメールには自動的に重要マークがつけられます。最初のうちは重要マークを手動でつけたり外したりしてシステムに重要なメールを教える必要がありますが、精度は徐々に向上します。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "返信が必要なメッセージを送信したが、数日経っても返信がない場合は、ここに表示されます。", - "Mark all messages of this folder as read" : "このフォルダのすべてのメッセージを開封済みにする", - "Last 7 days" : "7日以内", - "From me" : "私から" + "Add share link from Files" : "ファイル から共有リンクを追加", + "Choose a file to add as attachment" : "添付として追加するファイルを選択", + "Choose a file to share as a link" : "共有リンクにして送信するファイルを選択" }, "nplurals=1; plural=0;"); diff --git a/l10n/ja.json b/l10n/ja.json index 1c0513ca82..58dfe8afba 100644 --- a/l10n/ja.json +++ b/l10n/ja.json @@ -18,9 +18,15 @@ "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "送信者の電子メール: %1$s はアドレス帳にありませんが、送信者名: %2$s は次の電子メールと共にアドレス帳にあります: %3$s", "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "送信者は、送信者の電子メール: %2$s ではなくカスタム電子メール: %1$s を使用しています", "Sent date is in the future" : "送信日が未来の日付です", + "Mail server marked this message as phishing attempt" : "メールサーバーはこのメッセージをフィッシング攻撃としてマークしました", "Some addresses in this message are not matching the link text" : "このメッセージの一部のアドレスがリンクテキストと一致しません", + "Reply-To email: %1$s is different from sender email: %2$s" : "返信先の電子メール: %1$s は送信者の電子メール: %2$s と異なります", + "Mail connection performance" : "メール接続パフォーマンス", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "メールサービスの遅延が検出されました(%1$s)。複数のアカウントへの接続試行に、アカウントあたり平均%2$s秒かかりました。", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "メールサービスの遅延が検出されました(%1$s)複数のアカウントでメールボックスリスト操作を実行しようとしたところ、アカウントあたり平均%2$s秒かかりました", "Mail Transport configuration" : "メール転送の設定", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "app.mail.transport設定がsmtpに設定されていません。この設定は、SPFやDKIMといった最新の電子メールセキュリティ対策で問題を引き起こす可能性があります。なぜなら、電子メールはWebサーバーから直接送信されるため、この目的のために適切に設定されていないことが多いからです。この問題に対処するため、メールトランスポートのサポートを終了しました。SMTPトランスポートを使用し、このメッセージを非表示にするには、設定からapp.mail.transportを削除してください。メール配信を確実に行うには、SMTPを適切に設定する必要があります。", + "Mail account parameters, aliases and preferences" : "メールアカウントのパラメータ、エイリアス、および設定", "💌 A mail app for Nextcloud" : "💌Nextcloudのメールアプリ", "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud 用メールアプリ**\n\n- **🚀 他の Nextcloud アプリとの連携!** 現在は連絡先、カレンダー、ファイルに対応しています。今後さらに対応予定です。\n- **📥 複数のメールアカウントに対応!** 個人アカウントと会社アカウント、どちらも問題なく、受信トレイが統合されます。あらゆる IMAP アカウントに接続できます。\n- **🔒 暗号化メールを送受信!** 優れた [Mailvelope](https://mailvelope.com) ブラウザ拡張機能を使用。\n- **🙈 車輪の再発明ではありません!** 優れた [Horde](https://www.horde.org) ライブラリをベースにしています。\n- **📬 独自のメールサーバーをホストしたいですか?** [Mail-in-a-Box](https://mailinabox.email) をセットアップすれば済むので、再実装する必要はありません!\n\n## 倫理的AI評価\n\n### 優先受信トレイ\n\n良い点:\n* このモデルのトレーニングと推論に使用するソフトウェアはオープンソースです。\n* このモデルは、ユーザー自身のデータに基づいてオンプレミスで作成およびトレーニングされています。\n* トレーニングデータはユーザーがアクセスできるため、バイアスの確認や修正、パフォーマンスとCO2排出量の最適化が可能です。\n\n### スレッド概要(オプトイン)\n\n**評価:** 🟢/🟡/🟠/🔴\n\n評価はインストールされているテキスト処理バックエンドによって異なります。詳細は[評価の概要](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html)をご覧ください。\n\nNextcloud倫理的AI評価の詳細については、[ブログ](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)をご覧ください。", "Your session has expired. The page will be reloaded." : "あなたのセッションは期間切れています。ページを再リロードしてください", @@ -53,6 +59,10 @@ "SMTP server is not reachable" : "SMTPサーバーにアクセスできません", "IMAP username or password is wrong" : "IMAP ユーザー名またはパスワードが間違っています", "SMTP username or password is wrong" : "SMTP ユーザー名またはパスワードが間違っています", + "IMAP server denied authentication" : "IMAPサーバーが認証を拒否しました", + "SMTP server denied authentication" : "SMTPサーバーが認証を拒否しました", + "IMAP authentication error" : "IMAP認証エラー", + "SMTP authentication error" : "SMTP認証エラー", "IMAP connection failed" : "IMAP 接続が失敗しました", "SMTP connection failed" : "SMTP接続が失敗しました", "Authorization pop-up closed" : "承認ポップアップは閉じました", @@ -64,6 +74,7 @@ "name@example.org" : "name@example.org", "Please enter an email of the format name@example.com" : "name@example.com形式のメールを入力してください。", "Password" : "パスワード", + "Enable mark as important classification" : "重要分類としてマーク", "Manual" : "手動", "IMAP Settings" : "IMAP設定", "IMAP Host" : "IMAPホスト", @@ -80,7 +91,6 @@ "SMTP Port" : "SMTPポート", "SMTP User" : "SMTPユーザー", "SMTP Password" : "SMTPパスワード", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Googleアカウントでこのアプリを使用するには、Googleの2要素認証を有効にし、アプリパスワードを生成する必要があります。", "Account settings" : "アカウント設定", "Aliases" : "別名", "Alias to S/MIME certificate mapping" : "エイリアスから S/MIME 証明書へのマッピング", @@ -101,13 +111,13 @@ "Mail server" : "メールサーバー", "Sieve server" : "Sieveサーバー", "Folder search" : "フォルダ検索", + "Email address" : "メールアドレス", "Update alias" : "エイリアスを更新する", "Rename alias" : "エイリアスの名前を変更する", "Show update alias form" : "エイリアスの更新フォームを表示する", "Delete alias" : "別名を削除", "Go back" : "戻る", "Change name" : "名称変更", - "Email address" : "メールアドレス", "Add alias" : "別名を追加", "Create alias" : "別名をつける", "Cancel" : "キャンセル", @@ -116,6 +126,7 @@ "Could not update preference" : "環境設定を更新できませんでした", "Mail settings" : "メール設定", "General" : "一般", + "Set as default mail app" : "既定のメールアプリとして設定", "Add mail account" : "メールアカウントを追加", "Appearance" : "表示", "Layout" : "レーアウト", @@ -125,6 +136,7 @@ "Sorting" : "並べ替え", "Newest first" : "新しい順", "Oldest first" : "日付(昇順)", + "Ok" : "OK", "Text blocks" : "テキストブロック", "Privacy" : "プライバシー", "Security" : "セキュリティ", @@ -144,7 +156,6 @@ "Send" : "送信", "Refresh" : "同期", "About" : "Nextcloud について", - "Ok" : "OK", "No certificate" : "証明書がありません", "Certificate updated" : "証明書が更新されました", "Could not update certificate" : "証明書を更新できませんでした", @@ -183,7 +194,6 @@ "Disable formatting" : "フォーマットを無効化する", "Upload attachment" : "添付ファイルをアップロードする", "Add attachment from Files" : "ファイルから添付ファイルの追加", - "Add share link from Files" : "ファイル から共有リンクを追加", "Smart picker" : "スマートピッカー", "Request a read receipt" : "開封の通知を要求する", "Sign message with S/MIME" : "S/MIMEでメッセージに署名する", @@ -195,15 +205,18 @@ "Monday morning" : "月曜日の朝", "Custom date and time" : "カスタム日時&時間", "Enter a date" : "日付を入力してください", - "Choose" : "選択", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["添付ファイルのサイズが 許可された{size}を超えています。代わりにリンクでファイルを共有してください。"], - "Choose a file to add as attachment" : "添付として追加するファイルを選択", - "Choose a file to share as a link" : "共有リンクにして送信するファイルを選択", + "Choose a file" : "ファイルを選択する", "_{count} attachment_::_{count} attachments_" : ["{count} 個の添付ファイル"], "Untitled message" : "無題のメッセージ", "Expand composer" : "コンポーザーを展開する", "Close composer" : "コンポーザーを閉じる", "Confirm" : "承認", + "Revoke" : "取り消す", + "Delegation" : "委任", + "Revoke access" : "アクセスを取り消す", + "Add delegate" : "代理人を追加", + "Revoke access?" : "アクセスを取り消しますか?", "Tag: {name} deleted" : "タグ:{name}削除済み", "An error occurred, unable to delete the tag." : "タグ削除を無効にする時エラーが発生しました", "The tag will be deleted from all messages." : "全てのメッセージからタグが削除されました", @@ -211,6 +224,7 @@ "Rich text" : "リッチテキスト", "No messages in this folder" : "このフォルダーにメッセージはありません", "No messages" : "メッセージはありません", + "Choose" : "選択", "Blind copy recipients only" : "BCC受信者のみ", "No subject" : "件名無し", "Later today – {timeLocale}" : "今日この後 – {timeLocale}", @@ -243,14 +257,14 @@ "Move thread" : "スレッドを移動する", "Archive thread" : "スレッドをアーカイブする", "Archive message" : "メッセージをアーカイブする", - "Delete thread" : "スレッドを削除", - "Delete message" : "メッセージを削除", "More actions" : "その他のアクション", "Back" : "戻る", "Set custom snooze" : "カスタムスヌーズを設定する", "Edit as new message" : "新しいメッセージとして編集", "Create task" : "タスクを作成する", "Download message" : "メッセージをダウンロードする", + "Delete thread" : "スレッドを削除", + "Delete message" : "メッセージを削除", "Load more" : "さらに読み込む", "_Mark {number} read_::_Mark {number} read_" : ["{number} を既読としてマークします"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number} を未読としてマークする"], @@ -271,6 +285,7 @@ "Event created" : "イベントを作成しました", "Could not create event" : "イベントを作成できませんでした。", "Create event" : "イベントを作成", + "Title" : "タイトル", "All day" : "終日", "Attendees" : "参加者", "Select calendar" : "カレンダーを選択する", @@ -323,7 +338,9 @@ "Could not snooze message" : "メッセージをスヌーズできませんでした", "Message was unsnoozed" : "メッセージがスヌーズ解除されました", "Could not unsnooze message" : "メッセージのスヌーズを解除できませんでした", + "Direct link copied to clipboard" : "クリップボードにコピーされた直接リンク", "Forward" : "転送", + "Link copied" : "リンクをコピーしました", "Move message" : "メッセージを移動", "Translate" : "翻訳", "Forward message as attachment" : "メッセージを添付ファイルとして転送する", @@ -360,6 +377,7 @@ "Moving" : "移動中", "Moving thread" : "スレッドを移動しています", "Moving message" : "メッセージを移動しています", + "Change password" : "パスワードを変更", "Remove account" : "アカウント削除", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email}のアカウントとキャッシュされたメールデータはNextcloudから削除されますが、メールプロバイダーからは削除されません。", "Remove {email}" : "{email} を削除", @@ -516,6 +534,8 @@ "Reply to sender only" : "送信者のみに返信", "Mark as unfavorite" : "お気に入りから外す", "Mark as favorite" : "お気に入りにする", + "From:" : "元:", + "To:" : "先:", "Unsubscribe via link" : "リンク経由で購読を解除する", "Unsubscribing will stop all messages from the mailing list {sender}" : "リスト{sender}から全ての配信メッセージを停止する", "Send unsubscribe email" : "配信停止メールを送信する", @@ -671,6 +691,7 @@ "Certificate imported successfully" : "証明書のインポートが成功しました", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "証明書のインポートに失敗しました。秘密鍵が証明書と一致し、パスフレーズで保護されていないことを確認してください。", "Failed to import the certificate" : "証明書のインポートするが失敗した", + "Import S/MIME certificate" : "S/MIME 証明書をインポートする", "S/MIME certificates" : "S/MIME証明書", "Certificate name" : "証明書名", "E-mail address" : "メールアドレス", @@ -678,7 +699,6 @@ "Delete certificate" : "証明書を削除する", "No certificate imported yet" : "証明書はまだインポートされていません", "Import certificate" : "証明書をインポートする", - "Import S/MIME certificate" : "S/MIME 証明書をインポートする", "PKCS #12 Certificate" : "PKCS #12 証明書", "PEM Certificate" : "PEM証明書", "Certificate" : "証明", @@ -721,10 +741,8 @@ "Could not load the desired message" : "目的のメッセージを読み込めませんでした", "Could not load the message" : "メッセージを読み込めませんでした", "Error loading message" : "メッセージ読み込みエラー", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "あなたの過去の操作を元にしてメールには自動的に重要マークがつけられます。最初のうちは重要マークを手動でつけたり外したりしてシステムに重要なメールを教える必要がありますが、精度は徐々に向上します。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "返信が必要なメッセージを送信したが、数日経っても返信がない場合は、ここに表示されます。", - "Mark all messages of this folder as read" : "このフォルダのすべてのメッセージを開封済みにする", - "Last 7 days" : "7日以内", - "From me" : "私から" + "Add share link from Files" : "ファイル から共有リンクを追加", + "Choose a file to add as attachment" : "添付として追加するファイルを選択", + "Choose a file to share as a link" : "共有リンクにして送信するファイルを選択" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/ka.js b/l10n/ka.js index c9c7c7c7be..5e0938656e 100644 --- a/l10n/ka.js +++ b/l10n/ka.js @@ -69,7 +69,6 @@ OC.L10N.register( "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -85,13 +84,13 @@ OC.L10N.register( "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days.", "Calendar settings" : "Calendar settings", "Mail server" : "Mail server", + "Email address" : "Email address", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "Change name", - "Email address" : "Email address", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "Cancel", @@ -104,6 +103,7 @@ OC.L10N.register( "Sorting" : "Sorting", "Newest first" : "Newest first", "Oldest first" : "Oldest first", + "Ok" : "Ok", "Shared with me" : "Shared with me", "Privacy" : "Privacy", "Security" : "Security", @@ -120,7 +120,6 @@ OC.L10N.register( "Send" : "Send", "Refresh" : "Refresh", "About" : "About", - "Ok" : "Ok", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", "Could not update certificate" : "Could not update certificate", @@ -166,21 +165,21 @@ OC.L10N.register( "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "Choose", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "Choose a file", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "Confirm", + "Revoke" : "Revoke", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", "Plain text" : "Plain text", "Rich text" : "Rich text", "No messages" : "No messages", + "Choose" : "Choose", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "Later today – {timeLocale}" : "Later today – {timeLocale}", @@ -212,14 +211,14 @@ OC.L10N.register( "Move thread" : "Move thread", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "Back", "Set custom snooze" : "Set custom snooze", "Edit as new message" : "Edit as new message", "Create task" : "Create task", "Download message" : "Download message", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Load more" : "Load more", "_Mark {number} read_::_Mark {number} read_" : ["Mark {number} read","Mark {number} read"], "_Mark {number} unread_::_Mark {number} unread_" : ["Mark {number} unread","Mark {number} unread"], @@ -286,6 +285,7 @@ OC.L10N.register( "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", "Forward" : "Forward", + "Link copied" : "ლინკი მოიკოპა", "Move message" : "Move message", "Translate" : "Translate", "Forward message as attachment" : "Forward message as attachment", @@ -317,6 +317,7 @@ OC.L10N.register( "Moving" : "Moving", "Moving thread" : "Moving thread", "Moving message" : "Moving message", + "Change password" : "Change password", "Remove account" : "Remove account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", "Remove {email}" : "Remove {email}", @@ -442,6 +443,8 @@ OC.L10N.register( "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Mark as unfavorite", "Mark as favorite" : "Mark as favorite", + "From:" : "From:", + "To:" : "To:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -563,6 +566,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -570,7 +574,6 @@ OC.L10N.register( "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -612,7 +615,7 @@ OC.L10N.register( "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Last 7 days" : "Last 7 days" + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link" }, "nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka.json b/l10n/ka.json index 64a9dd41a4..7bce2719a8 100644 --- a/l10n/ka.json +++ b/l10n/ka.json @@ -67,7 +67,6 @@ "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -83,13 +82,13 @@ "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days.", "Calendar settings" : "Calendar settings", "Mail server" : "Mail server", + "Email address" : "Email address", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "Change name", - "Email address" : "Email address", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "Cancel", @@ -102,6 +101,7 @@ "Sorting" : "Sorting", "Newest first" : "Newest first", "Oldest first" : "Oldest first", + "Ok" : "Ok", "Shared with me" : "Shared with me", "Privacy" : "Privacy", "Security" : "Security", @@ -118,7 +118,6 @@ "Send" : "Send", "Refresh" : "Refresh", "About" : "About", - "Ok" : "Ok", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", "Could not update certificate" : "Could not update certificate", @@ -164,21 +163,21 @@ "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "Choose", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachment exceed the allowed attachments size of {size}. Please share the file via link instead.","The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "Choose a file", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "Confirm", + "Revoke" : "Revoke", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", "Plain text" : "Plain text", "Rich text" : "Rich text", "No messages" : "No messages", + "Choose" : "Choose", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "Later today – {timeLocale}" : "Later today – {timeLocale}", @@ -210,14 +209,14 @@ "Move thread" : "Move thread", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "Back", "Set custom snooze" : "Set custom snooze", "Edit as new message" : "Edit as new message", "Create task" : "Create task", "Download message" : "Download message", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Load more" : "Load more", "_Mark {number} read_::_Mark {number} read_" : ["Mark {number} read","Mark {number} read"], "_Mark {number} unread_::_Mark {number} unread_" : ["Mark {number} unread","Mark {number} unread"], @@ -284,6 +283,7 @@ "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", "Forward" : "Forward", + "Link copied" : "ლინკი მოიკოპა", "Move message" : "Move message", "Translate" : "Translate", "Forward message as attachment" : "Forward message as attachment", @@ -315,6 +315,7 @@ "Moving" : "Moving", "Moving thread" : "Moving thread", "Moving message" : "Moving message", + "Change password" : "Change password", "Remove account" : "Remove account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider.", "Remove {email}" : "Remove {email}", @@ -440,6 +441,8 @@ "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Mark as unfavorite", "Mark as favorite" : "Mark as favorite", + "From:" : "From:", + "To:" : "To:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -561,6 +564,7 @@ "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -568,7 +572,6 @@ "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -610,7 +613,7 @@ "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Last 7 days" : "Last 7 days" + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link" },"pluralForm" :"nplurals=2; plural=(n!=1);" } \ No newline at end of file diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js index 48b6302e7b..4fbfd0ee36 100644 --- a/l10n/ka_GE.js +++ b/l10n/ka_GE.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "საფოსტო ანგარიშის დამატება", "Newest first" : "ჯერ ახალი", "Oldest first" : "ჯერ ძველი", + "Ok" : "კარგი", "Security" : "უსაფრთხოება", "Compose new message" : "ახალი წერილის შედგენა", "Newer message" : "უფრო ახალი წერილი", @@ -44,14 +45,14 @@ OC.L10N.register( "Send" : "გაგზავნა", "Refresh" : "განახლება", "About" : "ჩვენს შესახებ", - "Ok" : "კარგი", "Select account" : "აირჩიეთ ანგარიში", "Subject" : "სათაური", "Upload attachment" : "დანართის ატვირთვა", "Add attachment from Files" : "დანართის დამატება ფაილებიდან", - "Choose" : "აირჩიეთ", - "Choose a file to add as attachment" : "დანართად დასამატებლად აირჩიეთ ფაილი", + "Choose a file" : "აირჩიეთ ფაილი", "Confirm" : "დადასტურება", + "Revoke" : "წვდომის გაუქმება", + "Choose" : "აირჩიეთ", "Unfavorite" : "რჩეულებიდან ამოშლა", "Favorite" : "რჩეული", "Read" : "წაკითხვა", @@ -60,6 +61,7 @@ OC.L10N.register( "Back" : "უკან", "Mark as unread" : "წაუკითხავად მონიშვნა", "Mark as read" : "წაკითხულად მონიშვნა", + "Title" : "სათაური", "All day" : "მთელი დღე", "Attendees" : "დამსწრეები", "Description" : "აღწერილობა", @@ -104,6 +106,8 @@ OC.L10N.register( "Select tags" : "აირჩიეთ ტეგები", "Custom" : "ინდივიდუალური", "Add tag" : "ტეგის დამატება", + "From:" : "ვისგან:", + "To:" : "ვის:", "Deleted" : "გაუქმდა", "Recipient" : "მიმღები", "Help" : "დახმარება", @@ -139,6 +143,7 @@ OC.L10N.register( "Could not load your message" : "თქვენი წერილის ჩატვირთვა ვერ მოხერხდა", "Could not load the desired message" : "სასურველი წერილის ჩატვირთვა ვერ მოხერხდა", "Could not load the message" : "წერილის ჩატვირთვა ვერ მოხერხდა", - "Error loading message" : "წერილის ჩატვირთვისას წარმოიშვა შეცდომა" + "Error loading message" : "წერილის ჩატვირთვისას წარმოიშვა შეცდომა", + "Choose a file to add as attachment" : "დანართად დასამატებლად აირჩიეთ ფაილი" }, "nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json index a89ead8dc4..39cde45a05 100644 --- a/l10n/ka_GE.json +++ b/l10n/ka_GE.json @@ -30,6 +30,7 @@ "Add mail account" : "საფოსტო ანგარიშის დამატება", "Newest first" : "ჯერ ახალი", "Oldest first" : "ჯერ ძველი", + "Ok" : "კარგი", "Security" : "უსაფრთხოება", "Compose new message" : "ახალი წერილის შედგენა", "Newer message" : "უფრო ახალი წერილი", @@ -42,14 +43,14 @@ "Send" : "გაგზავნა", "Refresh" : "განახლება", "About" : "ჩვენს შესახებ", - "Ok" : "კარგი", "Select account" : "აირჩიეთ ანგარიში", "Subject" : "სათაური", "Upload attachment" : "დანართის ატვირთვა", "Add attachment from Files" : "დანართის დამატება ფაილებიდან", - "Choose" : "აირჩიეთ", - "Choose a file to add as attachment" : "დანართად დასამატებლად აირჩიეთ ფაილი", + "Choose a file" : "აირჩიეთ ფაილი", "Confirm" : "დადასტურება", + "Revoke" : "წვდომის გაუქმება", + "Choose" : "აირჩიეთ", "Unfavorite" : "რჩეულებიდან ამოშლა", "Favorite" : "რჩეული", "Read" : "წაკითხვა", @@ -58,6 +59,7 @@ "Back" : "უკან", "Mark as unread" : "წაუკითხავად მონიშვნა", "Mark as read" : "წაკითხულად მონიშვნა", + "Title" : "სათაური", "All day" : "მთელი დღე", "Attendees" : "დამსწრეები", "Description" : "აღწერილობა", @@ -102,6 +104,8 @@ "Select tags" : "აირჩიეთ ტეგები", "Custom" : "ინდივიდუალური", "Add tag" : "ტეგის დამატება", + "From:" : "ვისგან:", + "To:" : "ვის:", "Deleted" : "გაუქმდა", "Recipient" : "მიმღები", "Help" : "დახმარება", @@ -137,6 +141,7 @@ "Could not load your message" : "თქვენი წერილის ჩატვირთვა ვერ მოხერხდა", "Could not load the desired message" : "სასურველი წერილის ჩატვირთვა ვერ მოხერხდა", "Could not load the message" : "წერილის ჩატვირთვა ვერ მოხერხდა", - "Error loading message" : "წერილის ჩატვირთვისას წარმოიშვა შეცდომა" + "Error loading message" : "წერილის ჩატვირთვისას წარმოიშვა შეცდომა", + "Choose a file to add as attachment" : "დანართად დასამატებლად აირჩიეთ ფაილი" },"pluralForm" :"nplurals=2; plural=(n!=1);" } \ No newline at end of file diff --git a/l10n/kab.js b/l10n/kab.js index 0ce4007b30..049653511c 100644 --- a/l10n/kab.js +++ b/l10n/kab.js @@ -1,81 +1,199 @@ OC.L10N.register( "mail", { + "Important" : "D axatar", + "Work" : "Amahil", "Personal" : "Udmawan", + "To Do" : "Ad yettwaxdem", + "Later" : "Ticki", "Mail" : "Tirawt", + "Connecting" : "Itteqqen", + "Sign in with Google" : "Qqen s Google", "Save" : "Sekles", "Connect" : "Qqen", + "Password required" : "I_laq wawal n uɛeddi", + "Auto" : "Awurman", "Name" : "Nom", "Password" : "Awal uffir", + "Manual" : "Awfus", + "IMAP Settings" : "Iɣewwran IMAP", "None" : "Ula d yiwen", - "Go back" : "Tuɣalin", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "TLS", + "SMTP Settings" : "Iɣewwran SMTP", + "Account settings" : "Iɣewwaren n umiḍan", + "Aliases" : "Alias", + "Signature" : "Azmul", + "Autoresponder" : "Amerri awurman", + "Filters" : "Imsizdigen", + "Quick actions" : "Tigawin tiruradin", "Email address" : "Tansa imayl", + "Go back" : "Tuɣalin", + "Change name" : "Change name", "Cancel" : "Sefsex", + "Activate" : "Sermed", "General" : "Amatu", "Appearance" : "Udem", + "Layout" : "Taneɣruft", "List" : "Tabdart", + "Sorting" : "Asmizzwer", "Newest first" : "Imaynuten d imezwura", "Oldest first" : "Iqbuṛen d imezwura", + "Ok" : "Ih", + "Top" : "D asawen", + "Bottom" : "Ddaw", "Privacy" : "Vie privée", + "Security" : "Taɣellist", + "Step 1" : "Asurif 1", + "Step 2" : "Asurif wis 2", + "Archive" : "Taṛcivt", "Delete" : "Kkes", "Search" : "Nadi", "Send" : "Tuzna", "Refresh" : "Sismeḍ", "About" : "Γef", - "Ok" : "Ih", - "Choose" : "Fren", + "Acknowledgements" : "Iwiziwen-nneɣ", + "From" : "Seg", + "Select account" : "Fren amiḍan", + "To" : "Ɣer", + "Cc" : "Cc", + "Bcc" : "Bcc", + "Subject" : "Asentel", + "Save draft" : "Sekles arewway", "Confirm" : "Serggeg", + "Revoke" : "Kkes", + "Select a user" : "Fren aseqdac", + "Plain text" : "Adris aččuran", + "No messages" : "Ulac iznan", + "Choose" : "Fren", + "No subject" : "Ulac asentel", + "Unfavorite" : "Kkes seg yismenyifen", "Favorite" : "Menyif", + "Unread" : "Ur nettwaɣra ara", "Read" : "Taɣuri", + "Mark as spam" : "Creḍ-it d aspam", + "Snooze" : "Snooze", "More actions" : "Ugar n tigawin", "Back" : "Retour", + "Delete message" : "Kkes izen", + "Load more" : "Sali-d ugar", "Mark as unread" : "Creḍ ur yettwaɣra ara", "Mark as read" : "Creḍ yettwaɣra", + "Title" : "Azwel", + "All day" : "Ass kamel", + "Attendees" : "Imttekkiyen", + "Select calendar" : "Fren awitay", "Description" : "Aglam", "Create" : "Snulfu-d", "Select" : "Fren", "Comment" : "Commentaire", + "Accept" : "Agez", + "Decline" : "Agwi", + "More options" : "Ugar n textiṛiyin", + "domain" : "taɣult", "Remove" : "Kkes", "Today" : "Ass-a", "Yesterday" : "Iḍelli", + "Last week" : "Amalas yezrin", + "Last month" : "Ayyur yezrin", "Choose target folder" : "Fren akaram aniccan", "Favorites" : "Imenyafen", "Other" : "Wayeḍ", "Forward" : "Avancer", + "Link copied" : "Aseɣwen yettwanɣel", "Translate" : "Suqel", + "View source" : "Wali aɣbalu", + "Unnamed" : "Warisem", + "Show images" : "Sken tugniwin", "Move" : "Senkez", + "Change password" : "Beddel awal n uɛaddi", "Remove account" : "Kkes amiḍan", "Add folder" : "Rnu akaram", "Folder name" : "Isem n ukaram", + "Saving" : "Asekles", + "Move up" : "Ali", + "Move down" : "Ader", "Delete folder" : "Kkes akaram", + "Mark all as read" : "Creḍ kullec yettwaɣra", + "Add subfolder" : "Rnu adukaram", "Rename" : "Beddel isem", + "Clear cache" : "Sfeḍ tuffirt", + "Outbox" : "Tanaka n tuzna", + "New message" : "Izen amaynut", + "Edit message" : "Ẓreg izen", "Draft" : "Arewway", "Reply" : "Err", + "attachment" : "taceqquft yeddan", "Retry" : "Ɛreḍ tikkelt-nniḍen", + "Send anyway" : "Azen akken ibɣu yili", "Message" : "Izen", + "Message deleted" : "Izen yettwakkes", + "New Contact" : "Anermis amaynut", "Copy to clipboard" : "Nɣel-it ar tecfawit", "Add" : "Rnu", + "Show less" : "Ssken cwiṭ", + "Show more" : "Sken ugar", "Clear" : "Ṣfeḍ", "Close" : "Mdel", + "Body" : "Tafekka", "Date" : "Azemz", + "Select recipients" : "Fren iɣarwaḍen", "Tags" : "Tibzimin", + "Custom" : "Udmawan", + "Add tag" : "Rnu tabzimt", "Task created" : "Tawuri tettwarna", + "Print" : "Siggez", "Not found" : "Ulac-it", + "Reply all" : "Err-assen akk", + "Unsubscribe" : "Ffeɣ seg ujerred", + "Mark as favorite" : "Creḍ d amenyaf", + "From:" : "Sɣur:", + "To:" : "Ɣer:", + "Cc:" : "Anɣ. I:", + "Bcc:" : "Anɣ. Uff. I:", "Translate from" : "Suqel seg", "Translate to" : "Suqel ar", + "Translating" : "Asuqel", + "Train" : "Tamacint", + "Stop" : "Seḥbes", "Deleted" : "Yettwakkes", + "Seen" : "Yemmẓer", + "Sender" : "Amazan", + "Recipient" : "Aɣerwaḍ", + "New filter" : "Amsizdeg amaynut", "Help" : "Tallalt", + "contains" : "i yegebren", + "matches" : "Tinmeγruḍin", + "is exactly" : "swaswa am", + "Conditions" : "Tiwtilin", "Actions" : "Tigawin", + "Priority" : "Tazwarayt", + "Tag" : "Tabzimt", + "delete" : "ekkes", "Edit" : "Ẓreg", + "Reset" : "Ɛiwed-d s wadda", + "Client ID" : "Asulay ID n wemsaɣ", + "Unlink" : "Kkes aseɣwen", + "IMAP" : "IMAP", "User" : "Aseqdac", + "Host" : "Asenneftaɣ", + "Port" : "Tawwurt", + "SMTP" : "SMTP", + "Import certificate" : "Kter-d aselkin", + "Certificate" : "Aselkin", + "Submit" : "Azen", "Guest" : "Inebgi", "Group" : "Agraw", "Shared" : "Yettwabḍa", + "Insert" : "Ger", "Account connected" : "Amiḍan d uqqin", "All" : "Akk", + "Drafts" : "Irewwayen", "Inbox" : "Tanaka", + "Sent" : "Ttwazanen", + "Trash" : "Iḍumman", "Nextcloud Mail" : "Imayl n Nextcloud", - "Message sent" : "Izen yettwazen", - "Last 7 days" : "7 n wussan yezrin" + "Discard changes" : "Sefsex ibeddilen", + "Message sent" : "Izen yettwazen" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/kab.json b/l10n/kab.json index 707d9033b1..7a20bb0552 100644 --- a/l10n/kab.json +++ b/l10n/kab.json @@ -1,79 +1,197 @@ { "translations": { + "Important" : "D axatar", + "Work" : "Amahil", "Personal" : "Udmawan", + "To Do" : "Ad yettwaxdem", + "Later" : "Ticki", "Mail" : "Tirawt", + "Connecting" : "Itteqqen", + "Sign in with Google" : "Qqen s Google", "Save" : "Sekles", "Connect" : "Qqen", + "Password required" : "I_laq wawal n uɛeddi", + "Auto" : "Awurman", "Name" : "Nom", "Password" : "Awal uffir", + "Manual" : "Awfus", + "IMAP Settings" : "Iɣewwran IMAP", "None" : "Ula d yiwen", - "Go back" : "Tuɣalin", + "SSL/TLS" : "SSL/TLS", + "STARTTLS" : "TLS", + "SMTP Settings" : "Iɣewwran SMTP", + "Account settings" : "Iɣewwaren n umiḍan", + "Aliases" : "Alias", + "Signature" : "Azmul", + "Autoresponder" : "Amerri awurman", + "Filters" : "Imsizdigen", + "Quick actions" : "Tigawin tiruradin", "Email address" : "Tansa imayl", + "Go back" : "Tuɣalin", + "Change name" : "Change name", "Cancel" : "Sefsex", + "Activate" : "Sermed", "General" : "Amatu", "Appearance" : "Udem", + "Layout" : "Taneɣruft", "List" : "Tabdart", + "Sorting" : "Asmizzwer", "Newest first" : "Imaynuten d imezwura", "Oldest first" : "Iqbuṛen d imezwura", + "Ok" : "Ih", + "Top" : "D asawen", + "Bottom" : "Ddaw", "Privacy" : "Vie privée", + "Security" : "Taɣellist", + "Step 1" : "Asurif 1", + "Step 2" : "Asurif wis 2", + "Archive" : "Taṛcivt", "Delete" : "Kkes", "Search" : "Nadi", "Send" : "Tuzna", "Refresh" : "Sismeḍ", "About" : "Γef", - "Ok" : "Ih", - "Choose" : "Fren", + "Acknowledgements" : "Iwiziwen-nneɣ", + "From" : "Seg", + "Select account" : "Fren amiḍan", + "To" : "Ɣer", + "Cc" : "Cc", + "Bcc" : "Bcc", + "Subject" : "Asentel", + "Save draft" : "Sekles arewway", "Confirm" : "Serggeg", + "Revoke" : "Kkes", + "Select a user" : "Fren aseqdac", + "Plain text" : "Adris aččuran", + "No messages" : "Ulac iznan", + "Choose" : "Fren", + "No subject" : "Ulac asentel", + "Unfavorite" : "Kkes seg yismenyifen", "Favorite" : "Menyif", + "Unread" : "Ur nettwaɣra ara", "Read" : "Taɣuri", + "Mark as spam" : "Creḍ-it d aspam", + "Snooze" : "Snooze", "More actions" : "Ugar n tigawin", "Back" : "Retour", + "Delete message" : "Kkes izen", + "Load more" : "Sali-d ugar", "Mark as unread" : "Creḍ ur yettwaɣra ara", "Mark as read" : "Creḍ yettwaɣra", + "Title" : "Azwel", + "All day" : "Ass kamel", + "Attendees" : "Imttekkiyen", + "Select calendar" : "Fren awitay", "Description" : "Aglam", "Create" : "Snulfu-d", "Select" : "Fren", "Comment" : "Commentaire", + "Accept" : "Agez", + "Decline" : "Agwi", + "More options" : "Ugar n textiṛiyin", + "domain" : "taɣult", "Remove" : "Kkes", "Today" : "Ass-a", "Yesterday" : "Iḍelli", + "Last week" : "Amalas yezrin", + "Last month" : "Ayyur yezrin", "Choose target folder" : "Fren akaram aniccan", "Favorites" : "Imenyafen", "Other" : "Wayeḍ", "Forward" : "Avancer", + "Link copied" : "Aseɣwen yettwanɣel", "Translate" : "Suqel", + "View source" : "Wali aɣbalu", + "Unnamed" : "Warisem", + "Show images" : "Sken tugniwin", "Move" : "Senkez", + "Change password" : "Beddel awal n uɛaddi", "Remove account" : "Kkes amiḍan", "Add folder" : "Rnu akaram", "Folder name" : "Isem n ukaram", + "Saving" : "Asekles", + "Move up" : "Ali", + "Move down" : "Ader", "Delete folder" : "Kkes akaram", + "Mark all as read" : "Creḍ kullec yettwaɣra", + "Add subfolder" : "Rnu adukaram", "Rename" : "Beddel isem", + "Clear cache" : "Sfeḍ tuffirt", + "Outbox" : "Tanaka n tuzna", + "New message" : "Izen amaynut", + "Edit message" : "Ẓreg izen", "Draft" : "Arewway", "Reply" : "Err", + "attachment" : "taceqquft yeddan", "Retry" : "Ɛreḍ tikkelt-nniḍen", + "Send anyway" : "Azen akken ibɣu yili", "Message" : "Izen", + "Message deleted" : "Izen yettwakkes", + "New Contact" : "Anermis amaynut", "Copy to clipboard" : "Nɣel-it ar tecfawit", "Add" : "Rnu", + "Show less" : "Ssken cwiṭ", + "Show more" : "Sken ugar", "Clear" : "Ṣfeḍ", "Close" : "Mdel", + "Body" : "Tafekka", "Date" : "Azemz", + "Select recipients" : "Fren iɣarwaḍen", "Tags" : "Tibzimin", + "Custom" : "Udmawan", + "Add tag" : "Rnu tabzimt", "Task created" : "Tawuri tettwarna", + "Print" : "Siggez", "Not found" : "Ulac-it", + "Reply all" : "Err-assen akk", + "Unsubscribe" : "Ffeɣ seg ujerred", + "Mark as favorite" : "Creḍ d amenyaf", + "From:" : "Sɣur:", + "To:" : "Ɣer:", + "Cc:" : "Anɣ. I:", + "Bcc:" : "Anɣ. Uff. I:", "Translate from" : "Suqel seg", "Translate to" : "Suqel ar", + "Translating" : "Asuqel", + "Train" : "Tamacint", + "Stop" : "Seḥbes", "Deleted" : "Yettwakkes", + "Seen" : "Yemmẓer", + "Sender" : "Amazan", + "Recipient" : "Aɣerwaḍ", + "New filter" : "Amsizdeg amaynut", "Help" : "Tallalt", + "contains" : "i yegebren", + "matches" : "Tinmeγruḍin", + "is exactly" : "swaswa am", + "Conditions" : "Tiwtilin", "Actions" : "Tigawin", + "Priority" : "Tazwarayt", + "Tag" : "Tabzimt", + "delete" : "ekkes", "Edit" : "Ẓreg", + "Reset" : "Ɛiwed-d s wadda", + "Client ID" : "Asulay ID n wemsaɣ", + "Unlink" : "Kkes aseɣwen", + "IMAP" : "IMAP", "User" : "Aseqdac", + "Host" : "Asenneftaɣ", + "Port" : "Tawwurt", + "SMTP" : "SMTP", + "Import certificate" : "Kter-d aselkin", + "Certificate" : "Aselkin", + "Submit" : "Azen", "Guest" : "Inebgi", "Group" : "Agraw", "Shared" : "Yettwabḍa", + "Insert" : "Ger", "Account connected" : "Amiḍan d uqqin", "All" : "Akk", + "Drafts" : "Irewwayen", "Inbox" : "Tanaka", + "Sent" : "Ttwazanen", + "Trash" : "Iḍumman", "Nextcloud Mail" : "Imayl n Nextcloud", - "Message sent" : "Izen yettwazen", - "Last 7 days" : "7 n wussan yezrin" + "Discard changes" : "Sefsex ibeddilen", + "Message sent" : "Izen yettwazen" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/km.js b/l10n/km.js index 6a3a2ca7d4..7f41b1f26e 100644 --- a/l10n/km.js +++ b/l10n/km.js @@ -12,10 +12,10 @@ OC.L10N.register( "None" : "គ្មាន", "Cancel" : "បោះបង់", "General" : "ទូទៅ", + "Ok" : "ព្រម", "Delete" : "លុប", "Search" : "Search", "Send" : "ផ្ញើ", - "Ok" : "ព្រម", "Choose" : "ជ្រើស", "Back" : "ត្រឡប់ក្រោយ", "Attendees" : "អ្នក​ចូលរួម", @@ -36,6 +36,8 @@ OC.L10N.register( "Close" : "បិទ", "Date" : "កាលបរិច្ឆេទ", "Tags" : "ស្លាក", + "From:" : "ចាប់ពីៈ", + "To:" : "រហូតដល់ៈ", "Deleted" : "បាន​លុប", "Help" : "ជំនួយ", "contains" : "មានផ្ទុក", diff --git a/l10n/km.json b/l10n/km.json index bd344c968a..40c0ccf675 100644 --- a/l10n/km.json +++ b/l10n/km.json @@ -10,10 +10,10 @@ "None" : "គ្មាន", "Cancel" : "បោះបង់", "General" : "ទូទៅ", + "Ok" : "ព្រម", "Delete" : "លុប", "Search" : "Search", "Send" : "ផ្ញើ", - "Ok" : "ព្រម", "Choose" : "ជ្រើស", "Back" : "ត្រឡប់ក្រោយ", "Attendees" : "អ្នក​ចូលរួម", @@ -34,6 +34,8 @@ "Close" : "បិទ", "Date" : "កាលបរិច្ឆេទ", "Tags" : "ស្លាក", + "From:" : "ចាប់ពីៈ", + "To:" : "រហូតដល់ៈ", "Deleted" : "បាន​លុប", "Help" : "ជំនួយ", "contains" : "មានផ្ទុក", diff --git a/l10n/ko.js b/l10n/ko.js index 773d954ec6..936a2ce65d 100644 --- a/l10n/ko.js +++ b/l10n/ko.js @@ -67,7 +67,6 @@ OC.L10N.register( "SMTP Port" : "SMTP 포트", "SMTP User" : "SMTP 사용자", "SMTP Password" : "SMTP 암호", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "이 앱에서 구글 계정을 사용하기 위해서는, 해당 구글 계정에서 2단계 인증을 활성화하고 앱 암호를 생성하십시오", "Account settings" : "계정 설정", "Aliases" : "별칭", "Alias to S/MIME certificate mapping" : "S/MIME 인증 매핑을 위한 별칭", @@ -84,13 +83,13 @@ OC.L10N.register( "Calendar settings" : "달력 설정", "Filters" : "필터", "Mail server" : "메일 서버", + "Email address" : "이메일 주소", "Update alias" : "별칭 갱신", "Rename alias" : "별칭 변경", "Show update alias form" : "별칭 양식 갱신 표시", "Delete alias" : "별칭 삭제", "Go back" : "뒤로 가기", "Change name" : "이름 변경", - "Email address" : "이메일 주소", "Add alias" : "별칭 추가", "Create alias" : "별칭 만들기", "Cancel" : "취소", @@ -107,8 +106,11 @@ OC.L10N.register( "Sorting" : "정렬", "Newest first" : "최신순", "Oldest first" : "오래된순", - "Text blocks" : "텍스트 블록", "New text block" : "새로운 텍스트 블록", + "Title of the text block" : "텍스트 블록의 제목", + "Content of the text block" : "텍스트 블록의 내용", + "Ok" : "확인", + "Text blocks" : "텍스트 블록", "Privacy" : "프라이버시", "Security" : "보안", "S/MIME" : "S/MIME", @@ -124,9 +126,6 @@ OC.L10N.register( "Send" : "보내기", "Refresh" : "새로 고침", "About" : "정보", - "Title of the text block" : "텍스트 블록의 제목", - "Content of the text block" : "텍스트 블록의 내용", - "Ok" : "확인", "No certificate" : "인증서 없음", "Certificate updated" : "인증서 갱신됨", "Could not update certificate" : "인증서를 갱신할 수 없음", @@ -173,13 +172,12 @@ OC.L10N.register( "Monday morning" : "월요일 아침", "Custom date and time" : "사용자 지정 날짜 및 시간", "Enter a date" : "날짜 입력", - "Choose" : "선택", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["첨부파일이 허용 용량 {size}를 초과했습니다. 해당 파일을 첨부 대신 링크공유하십시오."], - "Choose a file to add as attachment" : "첨부할 파일을 선택하십시오", - "Choose a file to share as a link" : "공유할 링크 파일을 선택하세요.", + "Choose a file" : "파일 선택", "_{count} attachment_::_{count} attachments_" : ["{count}개의 첨부파일"], "Untitled message" : "제목 없는 메시지", "Confirm" : "확인", + "Revoke" : "취소", "Tag: {name} deleted" : "태그: {name}이(가) 삭제됨", "An error occurred, unable to delete the tag." : "오류가 발생하여 태그를 삭제할 수 없습니다", "The tag will be deleted from all messages." : "태그가 모든 메시지로부터 삭제됩니다.", @@ -187,6 +185,7 @@ OC.L10N.register( "Rich text" : "서식 있는 텍스트", "No messages in this folder" : "이 폴더에 메시지가 없음", "No messages" : "메시지가 없음", + "Choose" : "선택", "No subject" : "제목 없음", "Later today – {timeLocale}" : "오늘 나중 – {timeLocale}", "Set reminder for later today" : "알림을 오늘 나중에 설정", @@ -217,14 +216,14 @@ OC.L10N.register( "Move thread" : "쓰레드 이동", "Archive thread" : "쓰레드 보관", "Archive message" : "메시지 보관", - "Delete thread" : "쓰레드 삭제", - "Delete message" : "메시지 삭제", "More actions" : "더 많은 동작", "Back" : "뒤로", "Set custom snooze" : "사용자 지정 다시 알림 사용", "Edit as new message" : "새 메시지로 편집", "Create task" : "작업 만들기", "Download message" : "메시지 다운로드", + "Delete thread" : "쓰레드 삭제", + "Delete message" : "메시지 삭제", "Load more" : "더 불러오기", "_Mark {number} read_::_Mark {number} read_" : ["{number}을(를) 읽음으로 표시"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number}을(를) 읽지 않음으로 표시"], @@ -244,6 +243,7 @@ OC.L10N.register( "Event created" : "일정 생성됨", "Could not create event" : "일정을 생성할 수 없음", "Create event" : "일정 만들기", + "Title" : "제목", "All day" : "하루 종일", "Attendees" : "참석자", "Select calendar" : "달력 선택", @@ -288,7 +288,9 @@ OC.L10N.register( "Could not snooze message" : "메시지를 다시 알림 설정할 수 없음", "Message was unsnoozed" : "메시지의 다시 알림 설정을 해제함", "Could not unsnooze message" : "메시지의 다시 알림 설정을 해제할 수 없음", + "Direct link copied to clipboard" : "직접 링크가 클립보드에 복사됨", "Forward" : "전달", + "Link copied" : "링크 복사됨", "Move message" : "메시지 이동", "Translate" : "번역:", "Forward message as attachment" : "메시지를 첨부파일로 전달", @@ -318,6 +320,7 @@ OC.L10N.register( "Moving" : "이동 중", "Moving thread" : "쓰레드 이동 중", "Moving message" : "메시지 이동 중", + "Change password" : "암호 변경", "Remove account" : "계정 삭제", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 계정 및 캐시된 이메일 데이터가 Nextcloud에서 삭제되지만, 이메일 서비스 제공자에서 삭제되지는 않습니다.", "Remove {email}" : "{email} 제거", @@ -452,6 +455,8 @@ OC.L10N.register( "Reply to sender only" : "발신자에게만 답장", "Mark as unfavorite" : "즐겨찾기에서 해제", "Mark as favorite" : "즐겨찾기로 표시", + "From:" : "시작:", + "To:" : "끝:", "Unsubscribe via link" : "링크로 구독 해지", "Unsubscribing will stop all messages from the mailing list {sender}" : "구독 해지는 메일링 리스트 {sender}이(가) 보내는 모든 메시지의 발신을 정지합니다", "Send unsubscribe email" : "구독 해지 이메일 보내기", @@ -574,6 +579,7 @@ OC.L10N.register( "Certificate imported successfully" : "인증서를 성공적으로 불러옴", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "인증서를 불러올 수 없음. 개인 키와 인증서의 연동 및 개인 키의 암구호 미사용 여부를 확인하십시오.", "Failed to import the certificate" : "인증서를 가져올 수 없음", + "Import S/MIME certificate" : "S/MIME 인증서 가져오기", "S/MIME certificates" : "S/MIME 인증서", "Certificate name" : "인증서 이름", "E-mail address" : "이메일 주소", @@ -581,7 +587,6 @@ OC.L10N.register( "Delete certificate" : "인증서 삭제", "No certificate imported yet" : "가져온 인증서 없음", "Import certificate" : "인증서 가져오기", - "Import S/MIME certificate" : "S/MIME 인증서 가져오기", "PKCS #12 Certificate" : "PKCS #12 인증서", "PEM Certificate" : "PEM 인증서", "Certificate" : "인증서", @@ -632,7 +637,7 @@ OC.L10N.register( "Could not load the desired message" : "원하는 메시지를 불러올 수 없음", "Could not load the message" : "메시지를 불러올 수 없음", "Error loading message" : "메시지 불러오기 오류", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "사용자의 메시지 상호작용, 중요 표시 정보 등을 바탕으로 특정 메시지가 자동으로 중요 표시됩니다. 초기 단계에서는 시스템의 학습을 위해 사용자가 중요 여부를 수동으로 변경하게 될 수 있으나, 이는 점차 개선될 것입니다.", - "Last 7 days" : "지난 7일" + "Choose a file to add as attachment" : "첨부할 파일을 선택하십시오", + "Choose a file to share as a link" : "공유할 링크 파일을 선택하세요." }, "nplurals=1; plural=0;"); diff --git a/l10n/ko.json b/l10n/ko.json index 9f7a06bd60..ee0a0a5a66 100644 --- a/l10n/ko.json +++ b/l10n/ko.json @@ -65,7 +65,6 @@ "SMTP Port" : "SMTP 포트", "SMTP User" : "SMTP 사용자", "SMTP Password" : "SMTP 암호", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "이 앱에서 구글 계정을 사용하기 위해서는, 해당 구글 계정에서 2단계 인증을 활성화하고 앱 암호를 생성하십시오", "Account settings" : "계정 설정", "Aliases" : "별칭", "Alias to S/MIME certificate mapping" : "S/MIME 인증 매핑을 위한 별칭", @@ -82,13 +81,13 @@ "Calendar settings" : "달력 설정", "Filters" : "필터", "Mail server" : "메일 서버", + "Email address" : "이메일 주소", "Update alias" : "별칭 갱신", "Rename alias" : "별칭 변경", "Show update alias form" : "별칭 양식 갱신 표시", "Delete alias" : "별칭 삭제", "Go back" : "뒤로 가기", "Change name" : "이름 변경", - "Email address" : "이메일 주소", "Add alias" : "별칭 추가", "Create alias" : "별칭 만들기", "Cancel" : "취소", @@ -105,8 +104,11 @@ "Sorting" : "정렬", "Newest first" : "최신순", "Oldest first" : "오래된순", - "Text blocks" : "텍스트 블록", "New text block" : "새로운 텍스트 블록", + "Title of the text block" : "텍스트 블록의 제목", + "Content of the text block" : "텍스트 블록의 내용", + "Ok" : "확인", + "Text blocks" : "텍스트 블록", "Privacy" : "프라이버시", "Security" : "보안", "S/MIME" : "S/MIME", @@ -122,9 +124,6 @@ "Send" : "보내기", "Refresh" : "새로 고침", "About" : "정보", - "Title of the text block" : "텍스트 블록의 제목", - "Content of the text block" : "텍스트 블록의 내용", - "Ok" : "확인", "No certificate" : "인증서 없음", "Certificate updated" : "인증서 갱신됨", "Could not update certificate" : "인증서를 갱신할 수 없음", @@ -171,13 +170,12 @@ "Monday morning" : "월요일 아침", "Custom date and time" : "사용자 지정 날짜 및 시간", "Enter a date" : "날짜 입력", - "Choose" : "선택", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["첨부파일이 허용 용량 {size}를 초과했습니다. 해당 파일을 첨부 대신 링크공유하십시오."], - "Choose a file to add as attachment" : "첨부할 파일을 선택하십시오", - "Choose a file to share as a link" : "공유할 링크 파일을 선택하세요.", + "Choose a file" : "파일 선택", "_{count} attachment_::_{count} attachments_" : ["{count}개의 첨부파일"], "Untitled message" : "제목 없는 메시지", "Confirm" : "확인", + "Revoke" : "취소", "Tag: {name} deleted" : "태그: {name}이(가) 삭제됨", "An error occurred, unable to delete the tag." : "오류가 발생하여 태그를 삭제할 수 없습니다", "The tag will be deleted from all messages." : "태그가 모든 메시지로부터 삭제됩니다.", @@ -185,6 +183,7 @@ "Rich text" : "서식 있는 텍스트", "No messages in this folder" : "이 폴더에 메시지가 없음", "No messages" : "메시지가 없음", + "Choose" : "선택", "No subject" : "제목 없음", "Later today – {timeLocale}" : "오늘 나중 – {timeLocale}", "Set reminder for later today" : "알림을 오늘 나중에 설정", @@ -215,14 +214,14 @@ "Move thread" : "쓰레드 이동", "Archive thread" : "쓰레드 보관", "Archive message" : "메시지 보관", - "Delete thread" : "쓰레드 삭제", - "Delete message" : "메시지 삭제", "More actions" : "더 많은 동작", "Back" : "뒤로", "Set custom snooze" : "사용자 지정 다시 알림 사용", "Edit as new message" : "새 메시지로 편집", "Create task" : "작업 만들기", "Download message" : "메시지 다운로드", + "Delete thread" : "쓰레드 삭제", + "Delete message" : "메시지 삭제", "Load more" : "더 불러오기", "_Mark {number} read_::_Mark {number} read_" : ["{number}을(를) 읽음으로 표시"], "_Mark {number} unread_::_Mark {number} unread_" : ["{number}을(를) 읽지 않음으로 표시"], @@ -242,6 +241,7 @@ "Event created" : "일정 생성됨", "Could not create event" : "일정을 생성할 수 없음", "Create event" : "일정 만들기", + "Title" : "제목", "All day" : "하루 종일", "Attendees" : "참석자", "Select calendar" : "달력 선택", @@ -286,7 +286,9 @@ "Could not snooze message" : "메시지를 다시 알림 설정할 수 없음", "Message was unsnoozed" : "메시지의 다시 알림 설정을 해제함", "Could not unsnooze message" : "메시지의 다시 알림 설정을 해제할 수 없음", + "Direct link copied to clipboard" : "직접 링크가 클립보드에 복사됨", "Forward" : "전달", + "Link copied" : "링크 복사됨", "Move message" : "메시지 이동", "Translate" : "번역:", "Forward message as attachment" : "메시지를 첨부파일로 전달", @@ -316,6 +318,7 @@ "Moving" : "이동 중", "Moving thread" : "쓰레드 이동 중", "Moving message" : "메시지 이동 중", + "Change password" : "암호 변경", "Remove account" : "계정 삭제", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 계정 및 캐시된 이메일 데이터가 Nextcloud에서 삭제되지만, 이메일 서비스 제공자에서 삭제되지는 않습니다.", "Remove {email}" : "{email} 제거", @@ -450,6 +453,8 @@ "Reply to sender only" : "발신자에게만 답장", "Mark as unfavorite" : "즐겨찾기에서 해제", "Mark as favorite" : "즐겨찾기로 표시", + "From:" : "시작:", + "To:" : "끝:", "Unsubscribe via link" : "링크로 구독 해지", "Unsubscribing will stop all messages from the mailing list {sender}" : "구독 해지는 메일링 리스트 {sender}이(가) 보내는 모든 메시지의 발신을 정지합니다", "Send unsubscribe email" : "구독 해지 이메일 보내기", @@ -572,6 +577,7 @@ "Certificate imported successfully" : "인증서를 성공적으로 불러옴", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "인증서를 불러올 수 없음. 개인 키와 인증서의 연동 및 개인 키의 암구호 미사용 여부를 확인하십시오.", "Failed to import the certificate" : "인증서를 가져올 수 없음", + "Import S/MIME certificate" : "S/MIME 인증서 가져오기", "S/MIME certificates" : "S/MIME 인증서", "Certificate name" : "인증서 이름", "E-mail address" : "이메일 주소", @@ -579,7 +585,6 @@ "Delete certificate" : "인증서 삭제", "No certificate imported yet" : "가져온 인증서 없음", "Import certificate" : "인증서 가져오기", - "Import S/MIME certificate" : "S/MIME 인증서 가져오기", "PKCS #12 Certificate" : "PKCS #12 인증서", "PEM Certificate" : "PEM 인증서", "Certificate" : "인증서", @@ -630,7 +635,7 @@ "Could not load the desired message" : "원하는 메시지를 불러올 수 없음", "Could not load the message" : "메시지를 불러올 수 없음", "Error loading message" : "메시지 불러오기 오류", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "사용자의 메시지 상호작용, 중요 표시 정보 등을 바탕으로 특정 메시지가 자동으로 중요 표시됩니다. 초기 단계에서는 시스템의 학습을 위해 사용자가 중요 여부를 수동으로 변경하게 될 수 있으나, 이는 점차 개선될 것입니다.", - "Last 7 days" : "지난 7일" + "Choose a file to add as attachment" : "첨부할 파일을 선택하십시오", + "Choose a file to share as a link" : "공유할 링크 파일을 선택하세요." },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/lb.js b/l10n/lb.js index 2412aafbdc..f4aed41cab 100644 --- a/l10n/lb.js +++ b/l10n/lb.js @@ -13,14 +13,14 @@ OC.L10N.register( "Go back" : "Zeréckgoen", "Cancel" : "Ofbriechen", "General" : "Allgemeng", + "Ok" : "OK", "Delete" : "Läschen", "Search" : "Search", "Send" : "Schécken", "Refresh" : "Opfrëschen", - "Ok" : "OK", "Select account" : "Account auswielen", - "Choose" : "Auswielen", "Confirm" : "Konfirméieren", + "Choose" : "Auswielen", "Favorite" : "Favorit", "Edit tags" : "Tags editéieren", "Back" : "Zeréck", @@ -33,6 +33,7 @@ OC.L10N.register( "Today" : "Haut", "Favorites" : "Favoriten", "Other" : "Aner", + "Link copied" : "Link kopéiert", "Translate" : "Iwwersetzen", "Unnamed" : "ouni Numm", "Move" : "Verschieben", @@ -46,6 +47,8 @@ OC.L10N.register( "Date" : "Date", "Tags" : "Tags", "Custom" : "Individualiséier", + "From:" : "Vun:", + "To:" : "Un:", "Deleted" : "Geläscht", "Help" : "Hëllef", "Actions" : "Aktiounen", diff --git a/l10n/lb.json b/l10n/lb.json index 6cbfac2dde..9b6f937d4a 100644 --- a/l10n/lb.json +++ b/l10n/lb.json @@ -11,14 +11,14 @@ "Go back" : "Zeréckgoen", "Cancel" : "Ofbriechen", "General" : "Allgemeng", + "Ok" : "OK", "Delete" : "Läschen", "Search" : "Search", "Send" : "Schécken", "Refresh" : "Opfrëschen", - "Ok" : "OK", "Select account" : "Account auswielen", - "Choose" : "Auswielen", "Confirm" : "Konfirméieren", + "Choose" : "Auswielen", "Favorite" : "Favorit", "Edit tags" : "Tags editéieren", "Back" : "Zeréck", @@ -31,6 +31,7 @@ "Today" : "Haut", "Favorites" : "Favoriten", "Other" : "Aner", + "Link copied" : "Link kopéiert", "Translate" : "Iwwersetzen", "Unnamed" : "ouni Numm", "Move" : "Verschieben", @@ -44,6 +45,8 @@ "Date" : "Date", "Tags" : "Tags", "Custom" : "Individualiséier", + "From:" : "Vun:", + "To:" : "Un:", "Deleted" : "Geläscht", "Help" : "Hëllef", "Actions" : "Aktiounen", diff --git a/l10n/lo.js b/l10n/lo.js index c6a43a1cec..389d904895 100644 --- a/l10n/lo.js +++ b/l10n/lo.js @@ -86,7 +86,6 @@ OC.L10N.register( "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -109,13 +108,13 @@ OC.L10N.register( "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Folder search", + "Email address" : "ທີ່ຢູ່ອີເມວ", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "ປ່ຽນຊື່", - "Email address" : "ທີ່ຢູ່ອີເມວ", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "ຍົກເລີກ", @@ -138,13 +137,16 @@ OC.L10N.register( "Sorting" : "Sorting", "Newest first" : "ໃໝ່ທີ່ສຸດກ່ອນ", "Oldest first" : "ເກົ່າທີ່ສຸດກ່ອນ", + "New text block" : "New text block", + "Title of the text block" : "Title of the text block", + "Content of the text block" : "Content of the text block", + "Ok" : "ຕົກລົງ", "Avatars from Gravatar and favicons" : "Avatars from Gravatar and favicons", "Reply position" : "Reply position", "Top" : "Top", "Bottom" : "Bottom", "Text blocks" : "Text blocks", "Reusable pieces of text that can be inserted in messages" : "Reusable pieces of text that can be inserted in messages", - "New text block" : "New text block", "Shared with me" : "Shared with me", "Privacy" : "ຄວາມເປັນສ່ວນຕົວ", "Data collection" : "Data collection", @@ -175,9 +177,6 @@ OC.L10N.register( "About" : "ກ່ຽວກັບ", "Acknowledgements" : "Acknowledgements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Title of the text block", - "Content of the text block" : "Content of the text block", - "Ok" : "ຕົກລົງ", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", "Could not update certificate" : "Could not update certificate", @@ -220,7 +219,6 @@ OC.L10N.register( "Disable formatting" : "Disable formatting", "Upload attachment" : "Upload attachment", "Add attachment from Files" : "Add attachment from Files", - "Add share link from Files" : "Add share link from Files", "Smart picker" : "Smart picker", "Request a read receipt" : "Request a read receipt", "Sign message with S/MIME" : "Sign message with S/MIME", @@ -232,15 +230,14 @@ OC.L10N.register( "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "ເລືອກ", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "ເລືອກຟາຍ", "_{count} attachment_::_{count} attachments_" : ["{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "ຢືນຢັນ", + "Revoke" : "Revoke", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", @@ -248,6 +245,7 @@ OC.L10N.register( "Rich text" : "Rich text", "No messages in this folder" : "No messages in this folder", "No messages" : "No messages", + "Choose" : "ເລືອກ", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -287,8 +285,6 @@ OC.L10N.register( "Move Message" : "Move Message", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "ຫຼັງ", "Set custom snooze" : "Set custom snooze", @@ -296,6 +292,8 @@ OC.L10N.register( "Reply with meeting" : "Reply with meeting", "Create task" : "Create task", "Download message" : "Download message", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Back to all actions" : "Back to all actions", "Manage quick actions" : "Manage quick actions", "Load more" : "Load more", @@ -319,6 +317,7 @@ OC.L10N.register( "Event created" : "Event created", "Could not create event" : "Could not create event", "Create event" : "Create event", + "Title" : "ຫົວຂໍ້", "All day" : "ຕະຫຼອດມື້", "Attendees" : "Attendees", "You can only invite attendees if your account has an email address set" : "You can only invite attendees if your account has an email address set", @@ -384,7 +383,9 @@ OC.L10N.register( "Could not snooze message" : "Could not snooze message", "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", + "Direct link copied to clipboard" : "Direct link copied to clipboard", "Forward" : "ໄປຂ້າງຫນ້າ", + "Link copied" : "ສຳເນົາລິ້ງແລ້ວ", "Move message" : "Move message", "Translate" : "ແປ", "Forward message as attachment" : "Forward message as attachment", @@ -424,6 +425,7 @@ OC.L10N.register( "Moving message" : "Moving message", "This account cannot connect" : "This account cannot connect", "Connection failed. Please verify your information and try again" : "Connection failed. Please verify your information and try again", + "Change password" : "ປ່ຽນລະຫັດຜ່ານ", "Used quota: {quota}% ({limit})" : "Used quota: {quota}% ({limit})", "Used quota: {quota}%" : "Used quota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Unable to create mailbox. The name likely contains invalid characters. Please try another name.", @@ -603,6 +605,8 @@ OC.L10N.register( "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Mark as unfavorite", "Mark as favorite" : "Mark as favorite", + "From:" : "ຈາກ:", + "To:" : "ເຖິງ:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -794,6 +798,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -801,7 +806,6 @@ OC.L10N.register( "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -861,11 +865,8 @@ OC.L10N.register( "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Determine importance using machine learning" : "Determine importance using machine learning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here.", - "Mark all messages of this folder as read" : "Mark all messages of this folder as read", - "Last 7 days" : "Last 7 days", - "From me" : "From me" + "Add share link from Files" : "Add share link from Files", + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link" }, "nplurals=1; plural=0;"); diff --git a/l10n/lo.json b/l10n/lo.json index e7e9afeff9..3d20af5c62 100644 --- a/l10n/lo.json +++ b/l10n/lo.json @@ -84,7 +84,6 @@ "SMTP Port" : "SMTP Port", "SMTP User" : "SMTP User", "SMTP Password" : "SMTP Password", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password.", "Account settings" : "Account settings", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Alias to S/MIME certificate mapping", @@ -107,13 +106,13 @@ "Mail server" : "Mail server", "Sieve server" : "Sieve server", "Folder search" : "Folder search", + "Email address" : "ທີ່ຢູ່ອີເມວ", "Update alias" : "Update alias", "Rename alias" : "Rename alias", "Show update alias form" : "Show update alias form", "Delete alias" : "Delete alias", "Go back" : "Go back", "Change name" : "ປ່ຽນຊື່", - "Email address" : "ທີ່ຢູ່ອີເມວ", "Add alias" : "Add alias", "Create alias" : "Create alias", "Cancel" : "ຍົກເລີກ", @@ -136,13 +135,16 @@ "Sorting" : "Sorting", "Newest first" : "ໃໝ່ທີ່ສຸດກ່ອນ", "Oldest first" : "ເກົ່າທີ່ສຸດກ່ອນ", + "New text block" : "New text block", + "Title of the text block" : "Title of the text block", + "Content of the text block" : "Content of the text block", + "Ok" : "ຕົກລົງ", "Avatars from Gravatar and favicons" : "Avatars from Gravatar and favicons", "Reply position" : "Reply position", "Top" : "Top", "Bottom" : "Bottom", "Text blocks" : "Text blocks", "Reusable pieces of text that can be inserted in messages" : "Reusable pieces of text that can be inserted in messages", - "New text block" : "New text block", "Shared with me" : "Shared with me", "Privacy" : "ຄວາມເປັນສ່ວນຕົວ", "Data collection" : "Data collection", @@ -173,9 +175,6 @@ "About" : "ກ່ຽວກັບ", "Acknowledgements" : "Acknowledgements", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2.", - "Title of the text block" : "Title of the text block", - "Content of the text block" : "Content of the text block", - "Ok" : "ຕົກລົງ", "No certificate" : "No certificate", "Certificate updated" : "Certificate updated", "Could not update certificate" : "Could not update certificate", @@ -218,7 +217,6 @@ "Disable formatting" : "Disable formatting", "Upload attachment" : "Upload attachment", "Add attachment from Files" : "Add attachment from Files", - "Add share link from Files" : "Add share link from Files", "Smart picker" : "Smart picker", "Request a read receipt" : "Request a read receipt", "Sign message with S/MIME" : "Sign message with S/MIME", @@ -230,15 +228,14 @@ "Monday morning" : "Monday morning", "Custom date and time" : "Custom date and time", "Enter a date" : "Enter a date", - "Choose" : "ເລືອກ", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["The attachments exceed the allowed attachments size of {size}. Please share the files via link instead."], - "Choose a file to add as attachment" : "Choose a file to add as attachment", - "Choose a file to share as a link" : "Choose a file to share as a link", + "Choose a file" : "ເລືອກຟາຍ", "_{count} attachment_::_{count} attachments_" : ["{count} attachments"], "Untitled message" : "Untitled message", "Expand composer" : "Expand composer", "Close composer" : "Close composer", "Confirm" : "ຢືນຢັນ", + "Revoke" : "Revoke", "Tag: {name} deleted" : "Tag: {name} deleted", "An error occurred, unable to delete the tag." : "An error occurred, unable to delete the tag.", "The tag will be deleted from all messages." : "The tag will be deleted from all messages.", @@ -246,6 +243,7 @@ "Rich text" : "Rich text", "No messages in this folder" : "No messages in this folder", "No messages" : "No messages", + "Choose" : "ເລືອກ", "Blind copy recipients only" : "Blind copy recipients only", "No subject" : "No subject", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -285,8 +283,6 @@ "Move Message" : "Move Message", "Archive thread" : "Archive thread", "Archive message" : "Archive message", - "Delete thread" : "Delete thread", - "Delete message" : "Delete message", "More actions" : "More actions", "Back" : "ຫຼັງ", "Set custom snooze" : "Set custom snooze", @@ -294,6 +290,8 @@ "Reply with meeting" : "Reply with meeting", "Create task" : "Create task", "Download message" : "Download message", + "Delete thread" : "Delete thread", + "Delete message" : "Delete message", "Back to all actions" : "Back to all actions", "Manage quick actions" : "Manage quick actions", "Load more" : "Load more", @@ -317,6 +315,7 @@ "Event created" : "Event created", "Could not create event" : "Could not create event", "Create event" : "Create event", + "Title" : "ຫົວຂໍ້", "All day" : "ຕະຫຼອດມື້", "Attendees" : "Attendees", "You can only invite attendees if your account has an email address set" : "You can only invite attendees if your account has an email address set", @@ -382,7 +381,9 @@ "Could not snooze message" : "Could not snooze message", "Message was unsnoozed" : "Message was unsnoozed", "Could not unsnooze message" : "Could not unsnooze message", + "Direct link copied to clipboard" : "Direct link copied to clipboard", "Forward" : "ໄປຂ້າງຫນ້າ", + "Link copied" : "ສຳເນົາລິ້ງແລ້ວ", "Move message" : "Move message", "Translate" : "ແປ", "Forward message as attachment" : "Forward message as attachment", @@ -422,6 +423,7 @@ "Moving message" : "Moving message", "This account cannot connect" : "This account cannot connect", "Connection failed. Please verify your information and try again" : "Connection failed. Please verify your information and try again", + "Change password" : "ປ່ຽນລະຫັດຜ່ານ", "Used quota: {quota}% ({limit})" : "Used quota: {quota}% ({limit})", "Used quota: {quota}%" : "Used quota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Unable to create mailbox. The name likely contains invalid characters. Please try another name.", @@ -601,6 +603,8 @@ "Reply to sender only" : "Reply to sender only", "Mark as unfavorite" : "Mark as unfavorite", "Mark as favorite" : "Mark as favorite", + "From:" : "ຈາກ:", + "To:" : "ເຖິງ:", "Unsubscribe via link" : "Unsubscribe via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Unsubscribing will stop all messages from the mailing list {sender}", "Send unsubscribe email" : "Send unsubscribe email", @@ -792,6 +796,7 @@ "Certificate imported successfully" : "Certificate imported successfully", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase.", "Failed to import the certificate" : "Failed to import the certificate", + "Import S/MIME certificate" : "Import S/MIME certificate", "S/MIME certificates" : "S/MIME certificates", "Certificate name" : "Certificate name", "E-mail address" : "E-mail address", @@ -799,7 +804,6 @@ "Delete certificate" : "Delete certificate", "No certificate imported yet" : "No certificate imported yet", "Import certificate" : "Import certificate", - "Import S/MIME certificate" : "Import S/MIME certificate", "PKCS #12 Certificate" : "PKCS #12 Certificate", "PEM Certificate" : "PEM Certificate", "Certificate" : "Certificate", @@ -859,11 +863,8 @@ "Could not load the desired message" : "Could not load the desired message", "Could not load the message" : "Could not load the message", "Error loading message" : "Error loading message", - "Determine importance using machine learning" : "Determine importance using machine learning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here.", - "Mark all messages of this folder as read" : "Mark all messages of this folder as read", - "Last 7 days" : "Last 7 days", - "From me" : "From me" + "Add share link from Files" : "Add share link from Files", + "Choose a file to add as attachment" : "Choose a file to add as attachment", + "Choose a file to share as a link" : "Choose a file to share as a link" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js index 245b2a2cad..bb8ad63e84 100644 --- a/l10n/lt_LT.js +++ b/l10n/lt_LT.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Paštas", "You are reaching your mailbox quota limit for {account_email}" : "Jūs pasiekiate savo {account_email} pašto dėžutės kvotos limitą", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Šiuo metu naudojate {percentage} savo pašto dėžutės saugyklos. Atlaisvinkite vietos ištrindami nereikalingus el. laiškus.", + "{account_email} has been delegated to you" : "{account_email} buvo jums deleguotas", + "{user} delegated {account} to you" : "{user} delegavo {account} jums", + "{account_email} is no longer delegated to you" : "{account_email} nebėra jums deleguotas", + "{user} revoked delegation for {account}" : "{user} atšaukė delegavimą skirtą {account}", "Mail Application" : "Pašto programėlė", "Mails" : "El. laiškai", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Siuntėjo el. pašto adreso %1$s nėra adresų knygoje, bet siuntėjo vardas: %2$s yra adresų knygoje su šiuo el. pašto adresu: %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP prievadas", "SMTP User" : "SMTP naudotojo vardas", "SMTP Password" : "SMTP slaptažodis", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Kad „Google“ paskyra veiktų su šia programėle, turite įjungti dviejų veiksnių autentifikavimą „Google“ sistemoje ir sugeneruoti programos slaptažodį.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "„Google“ reikalauja „OAuth“ autentifikavimo. Jei jūsų „Nextcloud“ administratorius nesukonfigūravo „Google OAuth“, galite naudoti „Google“ programos slaptažodį.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "„Microsoft“ reikalauja „OAuth“ autentifikavimo. Paprašykite „Nextcloud“ administratoriaus sukonfigūruoti „Microsoft OAuth“ administratoriaus nustatymuose.", "Account settings" : "Paskyros nustatymai", "Aliases" : "Pseudonimai", "Alias to S/MIME certificate mapping" : "Slapyvardžio ir S/MIME sertifikato susiejimas", @@ -117,25 +122,27 @@ OC.L10N.register( "Mail server" : "Pašto serveris", "Sieve server" : "„Sieve“ serveris", "Folder search" : "Aplanko paieška", + "Alias name" : "Slapyvardis", + "Email address" : "El. pašto adresas", "Update alias" : "Atnaujinti slapyvardį", "Rename alias" : "Pervardyti slapyvardį", "Show update alias form" : "Rodyti atnaujinimo slapyvardžio formą", "Delete alias" : "Ištrinti slapyvardį", "Go back" : "Grįžti", "Change name" : "Keisti vardą", - "Email address" : "El. pašto adresas", "Add alias" : "Pridėti alternatyvų vardą", "Create alias" : "Sukurti slapyvardį", "Cancel" : "Atsisakyti", "Search the body of messages in priority Inbox" : "Ieškoti prioritetinėje pašto dėžutėje pranešimų tekste", "Activate" : "Aktyvuoti", - "Make mails available to Context Chat" : "Padaryti laiškus pasiekiamus kontekstiniame pokalbyje", + "Make mails available to Context Chat" : "Padaryti laiškus pasiekiamus „Context Chat“", "Remind about messages that require a reply but received none" : "Priminti apie pranešimus, į kuriuos reikia atsakyti, bet į kuriuos nebuvo gautas atsakymas", "Highlight external addresses" : "Pabrėžti išorinius adresus", "Could not update preference" : "Nepavyko atnaujinti nuostatos", "Mail settings" : "Pašto nustatymai", "General" : "Bendra", "Set as default mail app" : "Nustatyti kaip numatytąją pašto programėlę", + "{email} (delegated)" : "{email} (deleguotas)", "Add mail account" : "Pridėti pašto paskyrą", "Appearance" : "Išvaizda", "Show all messages in thread" : "Rodyti visus šio pokalbio pranešimus", @@ -147,16 +154,19 @@ OC.L10N.register( "Horizontal split" : "Padalijimas horizontaliai", "List" : "Sąrašas", "Use compact mode" : "Naudoti kompaktiškąjį režimą", - "Sorting" : "Rikiavimas", + "Sorting" : "Rūšiavimas", "Newest first" : "Naujausi pirma", "Oldest first" : "Seniausi pirma", + "New text block" : "Naujas teksto blokas", + "Title of the text block" : "Teksto bloko pavadinimas", + "Content of the text block" : "Teksto bloko turinys", + "Ok" : "Gerai", "Avatars from Gravatar and favicons" : "Avatarai iš „Gravatar“ ir svetainių piktogramos", "Reply position" : "Atsakymo vieta", "Top" : "Viršuje", "Bottom" : "Apačioje", "Text blocks" : "Teksto blokai", "Reusable pieces of text that can be inserted in messages" : "Pakartotinai naudojami teksto fragmentai, kuriuos galima įterpti į pranešimus", - "New text block" : "Naujas teksto blokas", "Shared with me" : "Bendrinta su manimi", "Privacy" : "Privatumas", "Data collection" : "Duomenų rinkimas", @@ -165,7 +175,7 @@ OC.L10N.register( "Security" : "Saugumas", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Tvarkykite savo vidinius adresus ir domenus, kad atpažinti kontaktai neliktų pažymėti", "S/MIME" : "S/MIME", - "Manage certificates" : "Tvarkyti liudijimus", + "Manage certificates" : "Tvarkyti sertifikatus", "Mailvelope" : "„Mailvelope“", "Mailvelope is enabled for the current domain." : "„Mailvelope“ yra įjungta dabartiniam domenui.", "Step 1" : "1 žingsnis", @@ -173,7 +183,7 @@ OC.L10N.register( "Step 2" : "2 žingsnis", "Enable for the current domain" : "Įjungti dabartiniam domenui", "Assistance features" : "Pagalbos funkcijos", - "Context Chat integration" : "Kontekstinis pokalbių integravimas", + "Context Chat integration" : "„Context Chat“ integravimas", "Compose new message" : "Rašyti naują laišką", "Newer message" : "Naujesni laiškai", "Older message" : "Senesni laiškai", @@ -184,16 +194,16 @@ OC.L10N.register( "Search" : "Ieškoti", "Send" : "Siųsti", "Refresh" : "Įkelti iš naujo", + "Heading1" : "Antraštė 1", + "Heading2" : "Antraštė 2", + "Heading3" : "Antraštė 3", "About" : "Apie", "Acknowledgements" : "Padėkos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ši programėlė naudoja atvirojo kodo redaktorių CKEditor. Autorinės teisės © CKEditor kūrėjai. Licencija pagal GPLv2.", - "Title of the text block" : "Teksto bloko pavadinimas", - "Content of the text block" : "Teksto bloko turinys", - "Ok" : "Gerai", "Automatically create tentative appointments in calendar" : "Automatiškai kurti preliminarius susitikimus kalendoriuje", "No certificate" : "Sertifikato nėra", - "Certificate updated" : "Liudijimas atnaujintas", - "Could not update certificate" : "Nepavyko atnaujinti liudijimo", + "Certificate updated" : "Sertifikatas atnaujintas", + "Could not update certificate" : "Nepavyko atnaujinti sertifikato", "{commonName} - Valid until {expiryDate}" : "{commonName} – Galioja iki {expiryDate}", "Select an alias" : "Pasirinkite slapyvardį", "Select certificates" : "Pasirinkti sertifikatus", @@ -221,7 +231,7 @@ OC.L10N.register( "Subject" : "Tema", "Subject …" : "Pasirinkti  ...", "This message came from a noreply address so your reply will probably not be read." : "Šis laiškas atėjo iš adreso, kuris nėra skirtas atsakyti, taigi jūsų atsakymas, tikriausiai, nebus perskaitytas.", - "The following recipients do not have a S/MIME certificate: {recipients}." : "Šie gavėjai neturi S/MIME liudijimo: {recipients}.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "Šie gavėjai neturi S/MIME sertifikato: {recipients}.", "The following recipients do not have a PGP key: {recipients}." : "Šie gavėjai neturi PGP rakto: {recipients}.", "Write message …" : "Rašyti žinutę  ...", "Saving draft …" : "Išsaugomas juodraštis  …", @@ -233,8 +243,7 @@ OC.L10N.register( "Disable formatting" : "Išjungti formatavimą", "Upload attachment" : "Įkelti priedą", "Add attachment from Files" : "Pridėti priedą iš Failų", - "Add share link from Files" : "Pridėti bendrinimo nuorodą iš Failų", - "Smart picker" : "\"Smart picker\"", + "Smart picker" : "„Išmanusis rinkiklis“", "Request a read receipt" : "Paprašyti patvirtinimo apie perskaitymą", "Sign message with S/MIME" : "Pasirašyti laišką naudojant S/MIME", "Encrypt message with S/MIME" : "Šifruoti laišką naudojant S/MIME", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Pirmadienio rytas", "Custom date and time" : "Tinkinta data ir laikas", "Enter a date" : "Įveskite datą", - "Choose" : "Pasirinkite", + "Remove attachment {fileName}" : "Šalinti priedą {fileName}", + "Add as attachment" : "Pridėti kaip priedą", + "Add as share link" : "Pridėti kaip bendrinimo nuorodą", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Priedo dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą."], - "Choose a file to add as attachment" : "Pasirinkite failą, kurį prisegsite prie laiško", - "Choose a file to share as a link" : "Pasirinkite failą, kurį bendrinsite kaip nuorodą", + "Choose a file" : "Pasirinkti failą", "_{count} attachment_::_{count} attachments_" : ["{count} priedas","{count} priedai","{count} priedų","{count} priedas"], "Untitled message" : "Pranešimas be pavadinimo", "Expand composer" : "Išskleisti rašymo langą", "Close composer" : "Uždaryti rašymo langą", "Confirm" : "Patvirtinti", + "Delegate access" : "Deleguoti prieigą", + "Revoke" : "Panaikinti", + "{userId} will no longer be able to act on your behalf" : "{userId} nebegalės veikti jūsų vardu", + "Could not fetch delegates" : "Nepavyko gauti delegatų", + "Delegated access to {displayName}" : "Deleguota prieiga prie {displayName}", + "Could not delegate access" : "Nepavyko deleguoti prieigos", + "Revoked access for {displayName}" : "Atšaukta prieiga prie {displayName}", + "Could not revoke delegation" : "Nepavyko atšaukti delegavimo", + "Delegation" : "Delegavimas", + "Allow users to send, receive, and delete mail on your behalf" : "Leisti vartotojams siųsti, gauti ir ištrinti el. laiškus jūsų vardu", + "Revoke access" : "Atšaukti prieigą", + "Add delegate" : "Pridėti delegatą", + "Select a user" : "Pasirinkite vartotoją", + "They will be able to send, receive, and delete mail on your behalf" : "Jie galės siųsti, gauti ir ištrinti el. laiškus jūsų vardu", + "Revoke access?" : "Atšaukti prieigą?", "Tag: {name} deleted" : "Žyma: {name} ištrinta", "An error occurred, unable to delete the tag." : "Įvyko klaida, nepavyko ištrinti žymos.", "The tag will be deleted from all messages." : "Žymė bus ištrinta iš visų pranešimų.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Raiškusis tekstas", "No messages in this folder" : "Šiame aplanke laiškų nėra", "No messages" : "Nėra laiškų", + "Choose" : "Pasirinkite", "Blind copy recipients only" : "Tik paslėptų kopijų gavėjai", "No subject" : "Be temos", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} juodraštis: {markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Nepavyko atidėti temos", "Thread was unsnoozed" : "Tema buvo atnaujinta", "Could not unsnooze thread" : "Nepavyko atnaujinti temos", + "Message saved to Files" : "Pranešimas išsaugotas failuose", + "Message could not be saved" : "Pranešimas negalėjo būti išsaugotas", "This summary was AI generated" : "Šią santrauką sukūrė DI", "Encrypted message" : "Šifruotas laiškas", "This message is unread" : "Šis laiškas yra neskaitytas", + "Choose a folder to store the message in" : "Pasirinkite aplanką, kuriame išsaugoti pranešimą", "Unfavorite" : "Nebežymėti kaip mėgstamą", "Favorite" : "Mėgstamas", "Unread" : "Neskaityta", @@ -300,15 +329,16 @@ OC.L10N.register( "Move Message" : "Perkelti laišką", "Archive thread" : "Archyvuoti giją", "Archive message" : "Archyvuoti pranešimą", - "Delete thread" : "Ištrinti giją", - "Delete message" : "Ištrinti laišką", "More actions" : "Daugiau veiksmų", "Back" : "Atgal", "Set custom snooze" : "Nustatyti pasirinktinį atidėjimą", - "Edit as new message" : "Taisyti kaip naują laišką", + "Edit as new message" : "Redaguoti kaip naują laišką", "Reply with meeting" : "Atsisakyti siūlant susitikimą", "Create task" : "Sukurti užduotį", "Download message" : "Atsisiųsti laišką", + "Save message to Files" : "Išsaugoti pranešimą failuose", + "Delete thread" : "Ištrinti giją", + "Delete message" : "Ištrinti laišką", "Back to all actions" : "Grįžti prie visų veiksmų", "Manage quick actions" : "Valdyti greituosius veiksmus", "Load more" : "Įkelti daugiau", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Žymėti kaip nesvarbų", "Mark as important" : "Žymėti kaip svarbų", "Report this bug" : "Pranešti apie šią klaidą", + "This description was generated by AI." : "Šį aprašymą sugeneravo DI.", "Event created" : "Įvykis sukurtas", "Could not create event" : "Nepavyko sukurti įvykio", "Create event" : "Sukurti įvykį", + "Title" : "Pavadinimas", "All day" : "Visą dieną", "Attendees" : "Dalyviai", "You can only invite attendees if your account has an email address set" : "Dalyvius galite pakviesti tik tuo atveju, jei jūsų paskyroje yra nustatytas el. pašto adresas.", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Nepavyko atidėti pranešimo", "Message was unsnoozed" : "Pranešimas buvo atnaujintas", "Could not unsnooze message" : "Nepavyko atnaujinti pranešimo", + "Could not generate direct link: Message ID is missing" : "Nepavyko sugeneruoti tiesioginės nuorodos: trūksta pranešimo ID", + "Direct link copied to clipboard" : "Tiesioginė nuoroda nukopijuota į iškarpinę", + "Copy direct link" : "Kopijuoti tiesioginę nuorodą", "Forward" : "Persiųsti", + "Only for message recipients" : "Tik pranešimų gavėjams", + "Link copied" : "Nuoroda nukopijuota", "Move message" : "Perkelti laišką", "Translate" : "Verskite", "Forward message as attachment" : "Persiųsti laišką kaip priedą", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Perkeliamas pranešimas", "This account cannot connect" : "Ši paskyra negali prisijungti", "Connection failed. Please verify your information and try again" : "Ryšys nutrūko. Patikrinkite savo duomenis ir pabandykite dar kartą", + "Change password" : "Keisti slaptažodį", "Used quota: {quota}% ({limit})" : "Panaudota kvota: {quota} % ({limit})", "Used quota: {quota}%" : "Panaudota kvota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nepavyko sukurti pašto dėžutės. Pavadinime greičiausiai yra netinkamų simbolių. Pabandykite įvesti kitą pavadinimą.", "Remove account" : "Šalinti paskyrą", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Paskyra {email} ir podėlyje esantys el. pašto duomenys bus pašalinti iš Nextcloud, tačiau nebus pašalinti iš jūsų el. pašto teikėjo puslapio.", "Remove {email}" : "Šalinti {email}", + "could not delete account" : "nepavyko ištrinti paskyros", "Provisioned account is disabled" : "Parengtoji paskyra yra išjungta", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Norėdami aktyvuoti šią paskyrą, prisijunkite naudodami slaptažodį. Dabartinė sesija naudoja autentifikavimą be slaptažodžio, pvz., SSO arba WebAuthn.", + "Delegate account" : "Deleguoti paskyrą", "Show only subscribed folders" : "Rodyti tik prenumeruotus aplankus", "Add folder" : "Pridėti aplanką", "Folder name" : "Aplanko pavadinimas", @@ -485,7 +525,7 @@ OC.L10N.register( "Outbox" : "Išsiuntimo dėžutė", "Translate this message to {language}" : "Versti šį laišką į {language} kalbą", "New message" : "Naujas laiškas", - "Edit message" : "Taisyti laišką", + "Edit message" : "Redaguoti laišką", "Draft" : "Juodraštis", "Reply" : "Atsakyti", "Message saved" : "Laiškas įrašytas", @@ -537,7 +577,7 @@ OC.L10N.register( "Could not copy email address to clipboard" : "Nepavyko nukopijuoti el. pašto adreso į iškarpinę", "Contacts with this address" : "Adresatai turintys šį adresą", "Add to Contact" : "Pridėti prie „Kontaktai“", - "New Contact" : "Naujas adresatas", + "New Contact" : "Naujas kontaktas", "Copy to clipboard" : "Kopijuoti į iškarpinę", "Contact name …" : "Adresato vardas …", "Add" : "Pridėti", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Atsakyti tik siuntėjui", "Mark as unfavorite" : "Pažymėti kaip nepatinkantį", "Mark as favorite" : "Žymėti kaip mėgstamiausią", + "From:" : "Nuo:", + "To:" : "Iki:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Atsisakyti prenumeratos per nuorodą", "Unsubscribing will stop all messages from the mailing list {sender}" : "Atsisakę prenumeratos, nebegausite jokių laiškų iš šio pašto sąrašo {sender}", "Send unsubscribe email" : "Siųsti laišką dėl prenumeratos atsisakymo", @@ -659,7 +703,7 @@ OC.L10N.register( "Train from {depStation} to {arrStation}" : "Traukinys iš {depStation} į {arrStation}", "Train" : "Traukinys", "Mark message as" : "Pažymėti pranešimą kaip", - "Add flag" : "Pridėti vėliavėlę", + "Add flag" : "Pažymėti vėliavėle", "Move into folder" : "Perkelti į aplanką", "Stop" : "Stabdyti", "Delete action" : "Ištrinti veiksmą", @@ -667,7 +711,7 @@ OC.L10N.register( "Deleted" : "Ištrinta", "Flagged" : "Pažymėta", "Seen" : "Peržiūrėta", - "Enter flag" : "Įvesti vėliavėlę", + "Enter flag" : "Įveskite žymę", "Stop ends all processing" : "Sustabdymas nutraukia visą duomenų tvarkymą", "Sender" : "Siuntėjas", "Recipient" : "Gavėjas", @@ -716,7 +760,7 @@ OC.L10N.register( "Quick action created" : "Greitasis veiksmas sukurtas", "Failed to delete action step" : "Nepavyko ištrinti veiksmo žingsnio", "No quick actions yet." : "Kol kas jokių greitųjų veiksmų.", - "Edit" : "Taisyti", + "Edit" : "Redaguoti", "Quick action name" : "Greitojo veiksmo pavadinimas", "Do the following actions" : "Atlikti šiuos veiksmus", "Add another action" : "Pridėti kitą veiksmą", @@ -730,8 +774,8 @@ OC.L10N.register( "Error when deleting and deprovisioning accounts for \"{domain}\"" : "Klaida trinant ir atšaukiant „{domain}“ srities paskyrų parengimą", "Could not save default classification setting" : "Nepavyko išsaugoti numatytojo klasifikavimo nustatymo", "Mail app" : "Pašto programėlė", - "The mail app allows users to read mails on their IMAP accounts." : "Pašto programėlė leidžia naudotojams skaityti laiškus savo IMAP paskyrose.", - "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Čia galite rasti egzemplioriaus masto nustatymus. Specifinius naudotojo nustatymus galite rasti pačioje programėlėje (apatiniame kairiajame kampe).", + "The mail app allows users to read mails on their IMAP accounts." : "Pašto programėlė leidžia vartotojams skaityti laiškus savo IMAP paskyrose.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Čia galite rasti egzemplioriaus masto nustatymus. Specifinius vartotojo nustatymus galite rasti pačioje programėlėje (apatiniame kairiajame kampe).", "Account provisioning" : "Paskyros parengimas", "A provisioning configuration will provision all accounts with a matching email address." : "Naudojant parengimo konfigūraciją, bus sukurtos visos atitinkamą el. pašto adresą turinčios paskyros.", "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Naudojant pakaitos simbolį (*) parengimo domeno lauke, bus sukurta konfigūracija, kuri bus taikoma visiems vartotojams, jei jie neatitinka kitos konfigūracijos.", @@ -757,7 +801,7 @@ OC.L10N.register( "Any email that is marked as spam will be sent to the anti spam service." : "Bet koks el. laiškas, pažymėtas kaip šlamštas, bus išsiųstas į antišlamšto paslaugą.", "Gmail integration" : "„Gmail“ integracija", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "„Gmail“ leidžia vartotojams pasiekti savo el. paštą per IMAP. Dėl saugumo priežasčių ši prieiga įmanoma tik naudojant „OAuth 2.0“ ryšį arba „Google“ paskyras, kuriose naudojamas dviejų veiksnių autentifikavimas ir programų slaptažodžiai.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "„Google Cloud“ konsolėje turite užregistruoti naują kliento ID „Žiniatinklio programai“. Pridėkite URL {url} kaip įgaliotąjį peradresavimo URI.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "„Google Cloud“ konsolėje turite užregistruoti naują kliento ID skirtą „Žiniatinklio programėlei“. Pridėkite URL {url} kaip įgaliotąjį peradresavimo URI.", "Microsoft integration" : "„Microsoft“ integracija", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "„Microsoft“ reikalauja, kad prie el. laiškų prisijungtumėte per IMAP, naudodami „OAuth 2.0“ autentifikavimą. Norėdami tai padaryti, turite užregistruoti programėlę su „Microsoft Entra ID“, anksčiau žinomu kaip „Microsoft Azure Active Directory“.", "Redirect URI" : "Peradresuoti URI", @@ -798,7 +842,7 @@ OC.L10N.register( "Provisioning domain" : "Parengimo domenas", "Email address template" : "El. pašto adreso šablonas", "IMAP" : "IMAP", - "User" : "Naudotojas", + "User" : "Vartotojas", "Host" : "Serveris", "Port" : "Prievadas", "SMTP" : "SMTP", @@ -817,20 +861,20 @@ OC.L10N.register( "With the settings above, the app will create account settings in the following way:" : "Naudodama aukščiau esančius nustatymus, programėlė sukurs paskyrai nustatymus štai tokiu būdu: ", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Pateiktame PKCS #12 sertifikate turi būti bent vienas sertifikatas ir lygiai vienas privatusis raktas.", "Failed to import the certificate. Please check the password." : "Nepavyko importuoti sertifikato. Patikrinkite slaptažodį.", - "Certificate imported successfully" : "Liudijimas sėkmingai importuotas", + "Certificate imported successfully" : "Sertifikatas sėkmingai importuotas", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nepavyko importuoti sertifikato. Įsitikinkite, kad privatusis raktas atitinka sertifikatą ir nėra apsaugotas slaptafraze.", - "Failed to import the certificate" : "Nepavyko importuoti liudijimo", - "S/MIME certificates" : "S/MIME liudijimai", - "Certificate name" : "Liudijimo pavadinimas", + "Failed to import the certificate" : "Nepavyko importuoti sertifikato", + "Import S/MIME certificate" : "Importuoti S/MIME sertifikatą", + "S/MIME certificates" : "S/MIME sertifikatai", + "Certificate name" : "Sertifikato pavadinimas", "E-mail address" : "El. pašto adresas", "Valid until" : "Galioja iki", - "Delete certificate" : "Ištrinti liudijimą", + "Delete certificate" : "Ištrinti sertifikatą", "No certificate imported yet" : "Dar neimportuotas joks sertifikatas", - "Import certificate" : "Importuoti liudijimą", - "Import S/MIME certificate" : "Importuoti S/MIME liudijimą", - "PKCS #12 Certificate" : "PKCS #12 liudijimas", - "PEM Certificate" : "PEM liudijimas", - "Certificate" : "Liudijimas", + "Import certificate" : "Importuoti sertifikatą", + "PKCS #12 Certificate" : "PKCS #12 sertifikatas", + "PEM Certificate" : "PEM sertifikatas", + "Certificate" : "Sertifikatas", "Private key (optional)" : "Privatus raktas (neprivaloma)", "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Privatusis raktas reikalingas tik tuo atveju, jei ketinate siųsti pasirašytus ir užšifruotus el. laiškus naudodami šį sertifikatą.", "Submit" : "Pateikti", @@ -845,17 +889,17 @@ OC.L10N.register( "Group" : "Grupė", "Failed to save text block" : "Nepavyko išsaugoti teksto bloko", "Shared" : "Bendrinama", - "Edit {title}" : "Taisyti {title}", + "Edit {title}" : "Redaguoti {title}", "Delete {title}" : "Ištrinti {title}", "Edit text block" : "Redaguoti teksto bloką", - "Shares" : "Viešiniai", + "Shares" : "Bendrinimai", "Search for users or groups" : "Ieškoti vartotojų arba grupių", "Choose a text block to insert at the cursor" : "Pasirinkite teksto bloką, kurį norite įterpti ties žymekliu", "Insert" : "Įterpti", "Insert text block" : "Įterpti teksto bloką", "Account connected" : "Paskyra prijungta", "You can close this window" : "Galite užverti šį langą", - "Connect your mail account" : "Priregistruoti elektroninio pašto paskyrą", + "Connect your mail account" : "Pridėti elektroninio pašto paskyrą", "To add a mail account, please contact your administrator." : "Norėdami pridėti pašto paskyrą, susisiekite su savo administratoriumi.", "All" : "Visos", "Drafts" : "Juodraščiai", @@ -873,7 +917,7 @@ OC.L10N.register( "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Jau vyksta žinutės rašymas. Jei tęsite, visi neišsaugoti pakeitimai bus prarasti!", "Discard changes" : "Atmesti pakeitimus", "Discard unsaved changes" : "Atmesti neįrašytus pakeitimus", - "Keep editing message" : "Toliau taisyti laišką", + "Keep editing message" : "Toliau redaguoti laišką", "(All or part of this reply was generated by AI)" : "(Visas šis atsakymas arba jo dalis buvo sugeneruota dirbtinio intelekto)", "Attachments were not copied. Please add them manually." : "Priedai nebuvo nukopijuoti. Pridėkite juos rankiniu būdu.", "Could not create snooze mailbox" : "Nepavyko sukurti atidėjimo pašto dėžutės", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Nepavyko įkelti pageidaujamo laiško", "Could not load the message" : "Nepavyko įkelti laiško", "Error loading message" : "Klaida įkeliant laišką", - "Determine importance using machine learning" : "Nustatyti svarbą naudojant mašininį mokymąsi", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Pranešimai bus automatiškai pažymėti kaip svarbūs, atsižvelgiant į tai, su kuriais pranešimais jūs sąveikavote arba kuriuos pažymėjote kaip svarbius. Pradžioje gali tekti rankiniu būdu pakeisti svarbos lygį, kad sistema išmoktų, tačiau laikui bėgant ji tobulės.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Čia bus rodomos jūsų išsiųstos žinutės, į kurias reikia atsakyti, bet per keletą dienų atsakymo negauta.", - "Mark all messages of this folder as read" : "Žymėti visus laiškus šiame aplanke kaip skaitytus", - "Last 7 days" : "Paskutinės 7 dienos", - "From me" : "Iš manęs" + "Add share link from Files" : "Pridėti bendrinimo nuorodą iš Failų", + "Choose a file to add as attachment" : "Pasirinkite failą, kurį prisegsite prie laiško", + "Choose a file to share as a link" : "Pasirinkite failą, kurį bendrinsite kaip nuorodą", + "Delegated access to {userId}" : "Deleguota prieiga prie {userId}", + "Revoked access for {userId}" : "Atšaukta prieiga {userId}" }, "nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json index e45b690fea..f04b94fb4c 100644 --- a/l10n/lt_LT.json +++ b/l10n/lt_LT.json @@ -12,6 +12,10 @@ "Mail" : "Paštas", "You are reaching your mailbox quota limit for {account_email}" : "Jūs pasiekiate savo {account_email} pašto dėžutės kvotos limitą", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Šiuo metu naudojate {percentage} savo pašto dėžutės saugyklos. Atlaisvinkite vietos ištrindami nereikalingus el. laiškus.", + "{account_email} has been delegated to you" : "{account_email} buvo jums deleguotas", + "{user} delegated {account} to you" : "{user} delegavo {account} jums", + "{account_email} is no longer delegated to you" : "{account_email} nebėra jums deleguotas", + "{user} revoked delegation for {account}" : "{user} atšaukė delegavimą skirtą {account}", "Mail Application" : "Pašto programėlė", "Mails" : "El. laiškai", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Siuntėjo el. pašto adreso %1$s nėra adresų knygoje, bet siuntėjo vardas: %2$s yra adresų knygoje su šiuo el. pašto adresu: %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP prievadas", "SMTP User" : "SMTP naudotojo vardas", "SMTP Password" : "SMTP slaptažodis", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Kad „Google“ paskyra veiktų su šia programėle, turite įjungti dviejų veiksnių autentifikavimą „Google“ sistemoje ir sugeneruoti programos slaptažodį.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "„Google“ reikalauja „OAuth“ autentifikavimo. Jei jūsų „Nextcloud“ administratorius nesukonfigūravo „Google OAuth“, galite naudoti „Google“ programos slaptažodį.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "„Microsoft“ reikalauja „OAuth“ autentifikavimo. Paprašykite „Nextcloud“ administratoriaus sukonfigūruoti „Microsoft OAuth“ administratoriaus nustatymuose.", "Account settings" : "Paskyros nustatymai", "Aliases" : "Pseudonimai", "Alias to S/MIME certificate mapping" : "Slapyvardžio ir S/MIME sertifikato susiejimas", @@ -115,25 +120,27 @@ "Mail server" : "Pašto serveris", "Sieve server" : "„Sieve“ serveris", "Folder search" : "Aplanko paieška", + "Alias name" : "Slapyvardis", + "Email address" : "El. pašto adresas", "Update alias" : "Atnaujinti slapyvardį", "Rename alias" : "Pervardyti slapyvardį", "Show update alias form" : "Rodyti atnaujinimo slapyvardžio formą", "Delete alias" : "Ištrinti slapyvardį", "Go back" : "Grįžti", "Change name" : "Keisti vardą", - "Email address" : "El. pašto adresas", "Add alias" : "Pridėti alternatyvų vardą", "Create alias" : "Sukurti slapyvardį", "Cancel" : "Atsisakyti", "Search the body of messages in priority Inbox" : "Ieškoti prioritetinėje pašto dėžutėje pranešimų tekste", "Activate" : "Aktyvuoti", - "Make mails available to Context Chat" : "Padaryti laiškus pasiekiamus kontekstiniame pokalbyje", + "Make mails available to Context Chat" : "Padaryti laiškus pasiekiamus „Context Chat“", "Remind about messages that require a reply but received none" : "Priminti apie pranešimus, į kuriuos reikia atsakyti, bet į kuriuos nebuvo gautas atsakymas", "Highlight external addresses" : "Pabrėžti išorinius adresus", "Could not update preference" : "Nepavyko atnaujinti nuostatos", "Mail settings" : "Pašto nustatymai", "General" : "Bendra", "Set as default mail app" : "Nustatyti kaip numatytąją pašto programėlę", + "{email} (delegated)" : "{email} (deleguotas)", "Add mail account" : "Pridėti pašto paskyrą", "Appearance" : "Išvaizda", "Show all messages in thread" : "Rodyti visus šio pokalbio pranešimus", @@ -145,16 +152,19 @@ "Horizontal split" : "Padalijimas horizontaliai", "List" : "Sąrašas", "Use compact mode" : "Naudoti kompaktiškąjį režimą", - "Sorting" : "Rikiavimas", + "Sorting" : "Rūšiavimas", "Newest first" : "Naujausi pirma", "Oldest first" : "Seniausi pirma", + "New text block" : "Naujas teksto blokas", + "Title of the text block" : "Teksto bloko pavadinimas", + "Content of the text block" : "Teksto bloko turinys", + "Ok" : "Gerai", "Avatars from Gravatar and favicons" : "Avatarai iš „Gravatar“ ir svetainių piktogramos", "Reply position" : "Atsakymo vieta", "Top" : "Viršuje", "Bottom" : "Apačioje", "Text blocks" : "Teksto blokai", "Reusable pieces of text that can be inserted in messages" : "Pakartotinai naudojami teksto fragmentai, kuriuos galima įterpti į pranešimus", - "New text block" : "Naujas teksto blokas", "Shared with me" : "Bendrinta su manimi", "Privacy" : "Privatumas", "Data collection" : "Duomenų rinkimas", @@ -163,7 +173,7 @@ "Security" : "Saugumas", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Tvarkykite savo vidinius adresus ir domenus, kad atpažinti kontaktai neliktų pažymėti", "S/MIME" : "S/MIME", - "Manage certificates" : "Tvarkyti liudijimus", + "Manage certificates" : "Tvarkyti sertifikatus", "Mailvelope" : "„Mailvelope“", "Mailvelope is enabled for the current domain." : "„Mailvelope“ yra įjungta dabartiniam domenui.", "Step 1" : "1 žingsnis", @@ -171,7 +181,7 @@ "Step 2" : "2 žingsnis", "Enable for the current domain" : "Įjungti dabartiniam domenui", "Assistance features" : "Pagalbos funkcijos", - "Context Chat integration" : "Kontekstinis pokalbių integravimas", + "Context Chat integration" : "„Context Chat“ integravimas", "Compose new message" : "Rašyti naują laišką", "Newer message" : "Naujesni laiškai", "Older message" : "Senesni laiškai", @@ -182,16 +192,16 @@ "Search" : "Ieškoti", "Send" : "Siųsti", "Refresh" : "Įkelti iš naujo", + "Heading1" : "Antraštė 1", + "Heading2" : "Antraštė 2", + "Heading3" : "Antraštė 3", "About" : "Apie", "Acknowledgements" : "Padėkos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ši programėlė naudoja atvirojo kodo redaktorių CKEditor. Autorinės teisės © CKEditor kūrėjai. Licencija pagal GPLv2.", - "Title of the text block" : "Teksto bloko pavadinimas", - "Content of the text block" : "Teksto bloko turinys", - "Ok" : "Gerai", "Automatically create tentative appointments in calendar" : "Automatiškai kurti preliminarius susitikimus kalendoriuje", "No certificate" : "Sertifikato nėra", - "Certificate updated" : "Liudijimas atnaujintas", - "Could not update certificate" : "Nepavyko atnaujinti liudijimo", + "Certificate updated" : "Sertifikatas atnaujintas", + "Could not update certificate" : "Nepavyko atnaujinti sertifikato", "{commonName} - Valid until {expiryDate}" : "{commonName} – Galioja iki {expiryDate}", "Select an alias" : "Pasirinkite slapyvardį", "Select certificates" : "Pasirinkti sertifikatus", @@ -219,7 +229,7 @@ "Subject" : "Tema", "Subject …" : "Pasirinkti  ...", "This message came from a noreply address so your reply will probably not be read." : "Šis laiškas atėjo iš adreso, kuris nėra skirtas atsakyti, taigi jūsų atsakymas, tikriausiai, nebus perskaitytas.", - "The following recipients do not have a S/MIME certificate: {recipients}." : "Šie gavėjai neturi S/MIME liudijimo: {recipients}.", + "The following recipients do not have a S/MIME certificate: {recipients}." : "Šie gavėjai neturi S/MIME sertifikato: {recipients}.", "The following recipients do not have a PGP key: {recipients}." : "Šie gavėjai neturi PGP rakto: {recipients}.", "Write message …" : "Rašyti žinutę  ...", "Saving draft …" : "Išsaugomas juodraštis  …", @@ -231,8 +241,7 @@ "Disable formatting" : "Išjungti formatavimą", "Upload attachment" : "Įkelti priedą", "Add attachment from Files" : "Pridėti priedą iš Failų", - "Add share link from Files" : "Pridėti bendrinimo nuorodą iš Failų", - "Smart picker" : "\"Smart picker\"", + "Smart picker" : "„Išmanusis rinkiklis“", "Request a read receipt" : "Paprašyti patvirtinimo apie perskaitymą", "Sign message with S/MIME" : "Pasirašyti laišką naudojant S/MIME", "Encrypt message with S/MIME" : "Šifruoti laišką naudojant S/MIME", @@ -243,15 +252,31 @@ "Monday morning" : "Pirmadienio rytas", "Custom date and time" : "Tinkinta data ir laikas", "Enter a date" : "Įveskite datą", - "Choose" : "Pasirinkite", + "Remove attachment {fileName}" : "Šalinti priedą {fileName}", + "Add as attachment" : "Pridėti kaip priedą", + "Add as share link" : "Pridėti kaip bendrinimo nuorodą", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Priedo dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą.","Priedų dydis viršija leistiną ribą {size}. Prašome failus atsiųsti naudojant nuorodą."], - "Choose a file to add as attachment" : "Pasirinkite failą, kurį prisegsite prie laiško", - "Choose a file to share as a link" : "Pasirinkite failą, kurį bendrinsite kaip nuorodą", + "Choose a file" : "Pasirinkti failą", "_{count} attachment_::_{count} attachments_" : ["{count} priedas","{count} priedai","{count} priedų","{count} priedas"], "Untitled message" : "Pranešimas be pavadinimo", "Expand composer" : "Išskleisti rašymo langą", "Close composer" : "Uždaryti rašymo langą", "Confirm" : "Patvirtinti", + "Delegate access" : "Deleguoti prieigą", + "Revoke" : "Panaikinti", + "{userId} will no longer be able to act on your behalf" : "{userId} nebegalės veikti jūsų vardu", + "Could not fetch delegates" : "Nepavyko gauti delegatų", + "Delegated access to {displayName}" : "Deleguota prieiga prie {displayName}", + "Could not delegate access" : "Nepavyko deleguoti prieigos", + "Revoked access for {displayName}" : "Atšaukta prieiga prie {displayName}", + "Could not revoke delegation" : "Nepavyko atšaukti delegavimo", + "Delegation" : "Delegavimas", + "Allow users to send, receive, and delete mail on your behalf" : "Leisti vartotojams siųsti, gauti ir ištrinti el. laiškus jūsų vardu", + "Revoke access" : "Atšaukti prieigą", + "Add delegate" : "Pridėti delegatą", + "Select a user" : "Pasirinkite vartotoją", + "They will be able to send, receive, and delete mail on your behalf" : "Jie galės siųsti, gauti ir ištrinti el. laiškus jūsų vardu", + "Revoke access?" : "Atšaukti prieigą?", "Tag: {name} deleted" : "Žyma: {name} ištrinta", "An error occurred, unable to delete the tag." : "Įvyko klaida, nepavyko ištrinti žymos.", "The tag will be deleted from all messages." : "Žymė bus ištrinta iš visų pranešimų.", @@ -259,6 +284,7 @@ "Rich text" : "Raiškusis tekstas", "No messages in this folder" : "Šiame aplanke laiškų nėra", "No messages" : "Nėra laiškų", + "Choose" : "Pasirinkite", "Blind copy recipients only" : "Tik paslėptų kopijų gavėjai", "No subject" : "Be temos", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} juodraštis: {markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Nepavyko atidėti temos", "Thread was unsnoozed" : "Tema buvo atnaujinta", "Could not unsnooze thread" : "Nepavyko atnaujinti temos", + "Message saved to Files" : "Pranešimas išsaugotas failuose", + "Message could not be saved" : "Pranešimas negalėjo būti išsaugotas", "This summary was AI generated" : "Šią santrauką sukūrė DI", "Encrypted message" : "Šifruotas laiškas", "This message is unread" : "Šis laiškas yra neskaitytas", + "Choose a folder to store the message in" : "Pasirinkite aplanką, kuriame išsaugoti pranešimą", "Unfavorite" : "Nebežymėti kaip mėgstamą", "Favorite" : "Mėgstamas", "Unread" : "Neskaityta", @@ -298,15 +327,16 @@ "Move Message" : "Perkelti laišką", "Archive thread" : "Archyvuoti giją", "Archive message" : "Archyvuoti pranešimą", - "Delete thread" : "Ištrinti giją", - "Delete message" : "Ištrinti laišką", "More actions" : "Daugiau veiksmų", "Back" : "Atgal", "Set custom snooze" : "Nustatyti pasirinktinį atidėjimą", - "Edit as new message" : "Taisyti kaip naują laišką", + "Edit as new message" : "Redaguoti kaip naują laišką", "Reply with meeting" : "Atsisakyti siūlant susitikimą", "Create task" : "Sukurti užduotį", "Download message" : "Atsisiųsti laišką", + "Save message to Files" : "Išsaugoti pranešimą failuose", + "Delete thread" : "Ištrinti giją", + "Delete message" : "Ištrinti laišką", "Back to all actions" : "Grįžti prie visų veiksmų", "Manage quick actions" : "Valdyti greituosius veiksmus", "Load more" : "Įkelti daugiau", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Žymėti kaip nesvarbų", "Mark as important" : "Žymėti kaip svarbų", "Report this bug" : "Pranešti apie šią klaidą", + "This description was generated by AI." : "Šį aprašymą sugeneravo DI.", "Event created" : "Įvykis sukurtas", "Could not create event" : "Nepavyko sukurti įvykio", "Create event" : "Sukurti įvykį", + "Title" : "Pavadinimas", "All day" : "Visą dieną", "Attendees" : "Dalyviai", "You can only invite attendees if your account has an email address set" : "Dalyvius galite pakviesti tik tuo atveju, jei jūsų paskyroje yra nustatytas el. pašto adresas.", @@ -400,7 +432,12 @@ "Could not snooze message" : "Nepavyko atidėti pranešimo", "Message was unsnoozed" : "Pranešimas buvo atnaujintas", "Could not unsnooze message" : "Nepavyko atnaujinti pranešimo", + "Could not generate direct link: Message ID is missing" : "Nepavyko sugeneruoti tiesioginės nuorodos: trūksta pranešimo ID", + "Direct link copied to clipboard" : "Tiesioginė nuoroda nukopijuota į iškarpinę", + "Copy direct link" : "Kopijuoti tiesioginę nuorodą", "Forward" : "Persiųsti", + "Only for message recipients" : "Tik pranešimų gavėjams", + "Link copied" : "Nuoroda nukopijuota", "Move message" : "Perkelti laišką", "Translate" : "Verskite", "Forward message as attachment" : "Persiųsti laišką kaip priedą", @@ -442,14 +479,17 @@ "Moving message" : "Perkeliamas pranešimas", "This account cannot connect" : "Ši paskyra negali prisijungti", "Connection failed. Please verify your information and try again" : "Ryšys nutrūko. Patikrinkite savo duomenis ir pabandykite dar kartą", + "Change password" : "Keisti slaptažodį", "Used quota: {quota}% ({limit})" : "Panaudota kvota: {quota} % ({limit})", "Used quota: {quota}%" : "Panaudota kvota: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nepavyko sukurti pašto dėžutės. Pavadinime greičiausiai yra netinkamų simbolių. Pabandykite įvesti kitą pavadinimą.", "Remove account" : "Šalinti paskyrą", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Paskyra {email} ir podėlyje esantys el. pašto duomenys bus pašalinti iš Nextcloud, tačiau nebus pašalinti iš jūsų el. pašto teikėjo puslapio.", "Remove {email}" : "Šalinti {email}", + "could not delete account" : "nepavyko ištrinti paskyros", "Provisioned account is disabled" : "Parengtoji paskyra yra išjungta", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Norėdami aktyvuoti šią paskyrą, prisijunkite naudodami slaptažodį. Dabartinė sesija naudoja autentifikavimą be slaptažodžio, pvz., SSO arba WebAuthn.", + "Delegate account" : "Deleguoti paskyrą", "Show only subscribed folders" : "Rodyti tik prenumeruotus aplankus", "Add folder" : "Pridėti aplanką", "Folder name" : "Aplanko pavadinimas", @@ -483,7 +523,7 @@ "Outbox" : "Išsiuntimo dėžutė", "Translate this message to {language}" : "Versti šį laišką į {language} kalbą", "New message" : "Naujas laiškas", - "Edit message" : "Taisyti laišką", + "Edit message" : "Redaguoti laišką", "Draft" : "Juodraštis", "Reply" : "Atsakyti", "Message saved" : "Laiškas įrašytas", @@ -535,7 +575,7 @@ "Could not copy email address to clipboard" : "Nepavyko nukopijuoti el. pašto adreso į iškarpinę", "Contacts with this address" : "Adresatai turintys šį adresą", "Add to Contact" : "Pridėti prie „Kontaktai“", - "New Contact" : "Naujas adresatas", + "New Contact" : "Naujas kontaktas", "Copy to clipboard" : "Kopijuoti į iškarpinę", "Contact name …" : "Adresato vardas …", "Add" : "Pridėti", @@ -622,6 +662,10 @@ "Reply to sender only" : "Atsakyti tik siuntėjui", "Mark as unfavorite" : "Pažymėti kaip nepatinkantį", "Mark as favorite" : "Žymėti kaip mėgstamiausią", + "From:" : "Nuo:", + "To:" : "Iki:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Atsisakyti prenumeratos per nuorodą", "Unsubscribing will stop all messages from the mailing list {sender}" : "Atsisakę prenumeratos, nebegausite jokių laiškų iš šio pašto sąrašo {sender}", "Send unsubscribe email" : "Siųsti laišką dėl prenumeratos atsisakymo", @@ -657,7 +701,7 @@ "Train from {depStation} to {arrStation}" : "Traukinys iš {depStation} į {arrStation}", "Train" : "Traukinys", "Mark message as" : "Pažymėti pranešimą kaip", - "Add flag" : "Pridėti vėliavėlę", + "Add flag" : "Pažymėti vėliavėle", "Move into folder" : "Perkelti į aplanką", "Stop" : "Stabdyti", "Delete action" : "Ištrinti veiksmą", @@ -665,7 +709,7 @@ "Deleted" : "Ištrinta", "Flagged" : "Pažymėta", "Seen" : "Peržiūrėta", - "Enter flag" : "Įvesti vėliavėlę", + "Enter flag" : "Įveskite žymę", "Stop ends all processing" : "Sustabdymas nutraukia visą duomenų tvarkymą", "Sender" : "Siuntėjas", "Recipient" : "Gavėjas", @@ -714,7 +758,7 @@ "Quick action created" : "Greitasis veiksmas sukurtas", "Failed to delete action step" : "Nepavyko ištrinti veiksmo žingsnio", "No quick actions yet." : "Kol kas jokių greitųjų veiksmų.", - "Edit" : "Taisyti", + "Edit" : "Redaguoti", "Quick action name" : "Greitojo veiksmo pavadinimas", "Do the following actions" : "Atlikti šiuos veiksmus", "Add another action" : "Pridėti kitą veiksmą", @@ -728,8 +772,8 @@ "Error when deleting and deprovisioning accounts for \"{domain}\"" : "Klaida trinant ir atšaukiant „{domain}“ srities paskyrų parengimą", "Could not save default classification setting" : "Nepavyko išsaugoti numatytojo klasifikavimo nustatymo", "Mail app" : "Pašto programėlė", - "The mail app allows users to read mails on their IMAP accounts." : "Pašto programėlė leidžia naudotojams skaityti laiškus savo IMAP paskyrose.", - "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Čia galite rasti egzemplioriaus masto nustatymus. Specifinius naudotojo nustatymus galite rasti pačioje programėlėje (apatiniame kairiajame kampe).", + "The mail app allows users to read mails on their IMAP accounts." : "Pašto programėlė leidžia vartotojams skaityti laiškus savo IMAP paskyrose.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Čia galite rasti egzemplioriaus masto nustatymus. Specifinius vartotojo nustatymus galite rasti pačioje programėlėje (apatiniame kairiajame kampe).", "Account provisioning" : "Paskyros parengimas", "A provisioning configuration will provision all accounts with a matching email address." : "Naudojant parengimo konfigūraciją, bus sukurtos visos atitinkamą el. pašto adresą turinčios paskyros.", "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Naudojant pakaitos simbolį (*) parengimo domeno lauke, bus sukurta konfigūracija, kuri bus taikoma visiems vartotojams, jei jie neatitinka kitos konfigūracijos.", @@ -755,7 +799,7 @@ "Any email that is marked as spam will be sent to the anti spam service." : "Bet koks el. laiškas, pažymėtas kaip šlamštas, bus išsiųstas į antišlamšto paslaugą.", "Gmail integration" : "„Gmail“ integracija", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "„Gmail“ leidžia vartotojams pasiekti savo el. paštą per IMAP. Dėl saugumo priežasčių ši prieiga įmanoma tik naudojant „OAuth 2.0“ ryšį arba „Google“ paskyras, kuriose naudojamas dviejų veiksnių autentifikavimas ir programų slaptažodžiai.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "„Google Cloud“ konsolėje turite užregistruoti naują kliento ID „Žiniatinklio programai“. Pridėkite URL {url} kaip įgaliotąjį peradresavimo URI.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "„Google Cloud“ konsolėje turite užregistruoti naują kliento ID skirtą „Žiniatinklio programėlei“. Pridėkite URL {url} kaip įgaliotąjį peradresavimo URI.", "Microsoft integration" : "„Microsoft“ integracija", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "„Microsoft“ reikalauja, kad prie el. laiškų prisijungtumėte per IMAP, naudodami „OAuth 2.0“ autentifikavimą. Norėdami tai padaryti, turite užregistruoti programėlę su „Microsoft Entra ID“, anksčiau žinomu kaip „Microsoft Azure Active Directory“.", "Redirect URI" : "Peradresuoti URI", @@ -796,7 +840,7 @@ "Provisioning domain" : "Parengimo domenas", "Email address template" : "El. pašto adreso šablonas", "IMAP" : "IMAP", - "User" : "Naudotojas", + "User" : "Vartotojas", "Host" : "Serveris", "Port" : "Prievadas", "SMTP" : "SMTP", @@ -815,20 +859,20 @@ "With the settings above, the app will create account settings in the following way:" : "Naudodama aukščiau esančius nustatymus, programėlė sukurs paskyrai nustatymus štai tokiu būdu: ", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Pateiktame PKCS #12 sertifikate turi būti bent vienas sertifikatas ir lygiai vienas privatusis raktas.", "Failed to import the certificate. Please check the password." : "Nepavyko importuoti sertifikato. Patikrinkite slaptažodį.", - "Certificate imported successfully" : "Liudijimas sėkmingai importuotas", + "Certificate imported successfully" : "Sertifikatas sėkmingai importuotas", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nepavyko importuoti sertifikato. Įsitikinkite, kad privatusis raktas atitinka sertifikatą ir nėra apsaugotas slaptafraze.", - "Failed to import the certificate" : "Nepavyko importuoti liudijimo", - "S/MIME certificates" : "S/MIME liudijimai", - "Certificate name" : "Liudijimo pavadinimas", + "Failed to import the certificate" : "Nepavyko importuoti sertifikato", + "Import S/MIME certificate" : "Importuoti S/MIME sertifikatą", + "S/MIME certificates" : "S/MIME sertifikatai", + "Certificate name" : "Sertifikato pavadinimas", "E-mail address" : "El. pašto adresas", "Valid until" : "Galioja iki", - "Delete certificate" : "Ištrinti liudijimą", + "Delete certificate" : "Ištrinti sertifikatą", "No certificate imported yet" : "Dar neimportuotas joks sertifikatas", - "Import certificate" : "Importuoti liudijimą", - "Import S/MIME certificate" : "Importuoti S/MIME liudijimą", - "PKCS #12 Certificate" : "PKCS #12 liudijimas", - "PEM Certificate" : "PEM liudijimas", - "Certificate" : "Liudijimas", + "Import certificate" : "Importuoti sertifikatą", + "PKCS #12 Certificate" : "PKCS #12 sertifikatas", + "PEM Certificate" : "PEM sertifikatas", + "Certificate" : "Sertifikatas", "Private key (optional)" : "Privatus raktas (neprivaloma)", "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Privatusis raktas reikalingas tik tuo atveju, jei ketinate siųsti pasirašytus ir užšifruotus el. laiškus naudodami šį sertifikatą.", "Submit" : "Pateikti", @@ -843,17 +887,17 @@ "Group" : "Grupė", "Failed to save text block" : "Nepavyko išsaugoti teksto bloko", "Shared" : "Bendrinama", - "Edit {title}" : "Taisyti {title}", + "Edit {title}" : "Redaguoti {title}", "Delete {title}" : "Ištrinti {title}", "Edit text block" : "Redaguoti teksto bloką", - "Shares" : "Viešiniai", + "Shares" : "Bendrinimai", "Search for users or groups" : "Ieškoti vartotojų arba grupių", "Choose a text block to insert at the cursor" : "Pasirinkite teksto bloką, kurį norite įterpti ties žymekliu", "Insert" : "Įterpti", "Insert text block" : "Įterpti teksto bloką", "Account connected" : "Paskyra prijungta", "You can close this window" : "Galite užverti šį langą", - "Connect your mail account" : "Priregistruoti elektroninio pašto paskyrą", + "Connect your mail account" : "Pridėti elektroninio pašto paskyrą", "To add a mail account, please contact your administrator." : "Norėdami pridėti pašto paskyrą, susisiekite su savo administratoriumi.", "All" : "Visos", "Drafts" : "Juodraščiai", @@ -871,7 +915,7 @@ "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Jau vyksta žinutės rašymas. Jei tęsite, visi neišsaugoti pakeitimai bus prarasti!", "Discard changes" : "Atmesti pakeitimus", "Discard unsaved changes" : "Atmesti neįrašytus pakeitimus", - "Keep editing message" : "Toliau taisyti laišką", + "Keep editing message" : "Toliau redaguoti laišką", "(All or part of this reply was generated by AI)" : "(Visas šis atsakymas arba jo dalis buvo sugeneruota dirbtinio intelekto)", "Attachments were not copied. Please add them manually." : "Priedai nebuvo nukopijuoti. Pridėkite juos rankiniu būdu.", "Could not create snooze mailbox" : "Nepavyko sukurti atidėjimo pašto dėžutės", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Nepavyko įkelti pageidaujamo laiško", "Could not load the message" : "Nepavyko įkelti laiško", "Error loading message" : "Klaida įkeliant laišką", - "Determine importance using machine learning" : "Nustatyti svarbą naudojant mašininį mokymąsi", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Pranešimai bus automatiškai pažymėti kaip svarbūs, atsižvelgiant į tai, su kuriais pranešimais jūs sąveikavote arba kuriuos pažymėjote kaip svarbius. Pradžioje gali tekti rankiniu būdu pakeisti svarbos lygį, kad sistema išmoktų, tačiau laikui bėgant ji tobulės.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Čia bus rodomos jūsų išsiųstos žinutės, į kurias reikia atsakyti, bet per keletą dienų atsakymo negauta.", - "Mark all messages of this folder as read" : "Žymėti visus laiškus šiame aplanke kaip skaitytus", - "Last 7 days" : "Paskutinės 7 dienos", - "From me" : "Iš manęs" + "Add share link from Files" : "Pridėti bendrinimo nuorodą iš Failų", + "Choose a file to add as attachment" : "Pasirinkite failą, kurį prisegsite prie laiško", + "Choose a file to share as a link" : "Pasirinkite failą, kurį bendrinsite kaip nuorodą", + "Delegated access to {userId}" : "Deleguota prieiga prie {userId}", + "Revoked access for {userId}" : "Atšaukta prieiga {userId}" },"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" } \ No newline at end of file diff --git a/l10n/lv.js b/l10n/lv.js index ecd447e926..fb0416291a 100644 --- a/l10n/lv.js +++ b/l10n/lv.js @@ -44,15 +44,16 @@ OC.L10N.register( "Signature" : "Paraksts", "Calendar settings" : "Kalendāra iestatījumi", "Filters" : "Filtri", + "Email address" : "E-pasta adrese", "Rename alias" : "Pārdēvēt aizstājvārdu", "Go back" : "Atpakaļ", - "Email address" : "E-pasta adrese", "Cancel" : "Atcelt", "General" : "Vispārīgi", "Add mail account" : "Pievienot e-pasta kontu", "Appearance" : "Izskats", "Newest first" : "Jaunākie pirms", "Oldest first" : "Vecākie pirms", + "Ok" : "Labi", "Privacy" : "Privātums", "Security" : "Drošība", "Archive" : "Arhīvi", @@ -60,18 +61,17 @@ OC.L10N.register( "Search" : "Meklēt", "Send" : "Sūtīt", "Refresh" : "Atsvaidzināt", - "Ok" : "Labi", "From" : "No", "Select account" : "Atlasīt kontu", "To" : "Līdz", "Subject" : "Temats", "Add attachment from Files" : "Pievienot pielikumu no Datnēm", "Enter a date" : "Ievadiet datumu", - "Choose" : "Izvēlēties", - "Choose a file to add as attachment" : "Izvēlēties datni, ko pievienot kā pielikumu", - "Choose a file to share as a link" : "Jāizvēlas datne, ko kopīgot kā saiti", + "Choose a file" : "Izvēlēties datni", "Confirm" : "Apstiprināt", + "Revoke" : "Atsaukt", "No messages in this folder" : "Šajā mapē nav neviens ziņojums", + "Choose" : "Izvēlēties", "Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}", "Set reminder for later today" : "Iestatīt atgādinājumu vēlākam šodien", "Favorite" : "Izlasē", @@ -80,6 +80,7 @@ OC.L10N.register( "Back" : "Atpakaļ", "Load more" : "Ielādēt vairāk", "Create event" : "Izveidot notikumu", + "Title" : "Virsraksts", "All day" : "Visas dienas", "Attendees" : "Dalībnieki", "Description" : "Apraksts", @@ -96,6 +97,7 @@ OC.L10N.register( "Other" : "Cits", "The sender of this message has asked to be notified when you read this message." : "Šī ziņojuma sūtītājs ir norādījis, ka vēlas saņemt paziņojumu par šī ziņojuma izlasīšanu.", "Forward" : "Turpināt", + "Link copied" : "Saite nokopēta", "Translate" : "Tulkot", "View source" : "Skatīt avotu", "Unnamed" : "Nenosaukts", @@ -139,6 +141,8 @@ OC.L10N.register( "Tag name is a hidden system tag" : "Birkas nosaukums ir slēpta sistēmas birka", "Tag already exists" : "Birka jau pastāv", "Not found" : "Nav atrasts", + "From:" : "No:", + "To:" : "Kam:", "Untitled event" : "Nenosaukts notikums", "Deleted" : "Izdzēsts", "Recipient" : "Saņēmējs", @@ -172,7 +176,7 @@ OC.L10N.register( "Inbox" : "Iesūtne", "Junk" : "Nevēlams", "Sent" : "Izsūtne", - "Trash" : "Miskaste", + "Trash" : "Atkritne", "Error while sharing file" : "Kļūda datnes kopīgošanā", "{from}\n{subject}" : "{from}\n{subject}", "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Jau tiek apstrādāts ziņojums. Tiks zaudētas visas nesaglabātas izmaiņas, ja turpināsi.", @@ -180,6 +184,7 @@ OC.L10N.register( "Could not load {tag}{name}{endtag}" : "Nevarēja ielādēt {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Radusies problēma, ielādējot {tag}{name}{endtag}", "Error loading message" : "Kļūda ielādējot vēstuli", - "From me" : "No manis" + "Choose a file to add as attachment" : "Izvēlēties datni, ko pievienot kā pielikumu", + "Choose a file to share as a link" : "Jāizvēlas datne, ko kopīgot kā saiti" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/l10n/lv.json b/l10n/lv.json index ac7d5231e4..36d0e3f63b 100644 --- a/l10n/lv.json +++ b/l10n/lv.json @@ -42,15 +42,16 @@ "Signature" : "Paraksts", "Calendar settings" : "Kalendāra iestatījumi", "Filters" : "Filtri", + "Email address" : "E-pasta adrese", "Rename alias" : "Pārdēvēt aizstājvārdu", "Go back" : "Atpakaļ", - "Email address" : "E-pasta adrese", "Cancel" : "Atcelt", "General" : "Vispārīgi", "Add mail account" : "Pievienot e-pasta kontu", "Appearance" : "Izskats", "Newest first" : "Jaunākie pirms", "Oldest first" : "Vecākie pirms", + "Ok" : "Labi", "Privacy" : "Privātums", "Security" : "Drošība", "Archive" : "Arhīvi", @@ -58,18 +59,17 @@ "Search" : "Meklēt", "Send" : "Sūtīt", "Refresh" : "Atsvaidzināt", - "Ok" : "Labi", "From" : "No", "Select account" : "Atlasīt kontu", "To" : "Līdz", "Subject" : "Temats", "Add attachment from Files" : "Pievienot pielikumu no Datnēm", "Enter a date" : "Ievadiet datumu", - "Choose" : "Izvēlēties", - "Choose a file to add as attachment" : "Izvēlēties datni, ko pievienot kā pielikumu", - "Choose a file to share as a link" : "Jāizvēlas datne, ko kopīgot kā saiti", + "Choose a file" : "Izvēlēties datni", "Confirm" : "Apstiprināt", + "Revoke" : "Atsaukt", "No messages in this folder" : "Šajā mapē nav neviens ziņojums", + "Choose" : "Izvēlēties", "Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}", "Set reminder for later today" : "Iestatīt atgādinājumu vēlākam šodien", "Favorite" : "Izlasē", @@ -78,6 +78,7 @@ "Back" : "Atpakaļ", "Load more" : "Ielādēt vairāk", "Create event" : "Izveidot notikumu", + "Title" : "Virsraksts", "All day" : "Visas dienas", "Attendees" : "Dalībnieki", "Description" : "Apraksts", @@ -94,6 +95,7 @@ "Other" : "Cits", "The sender of this message has asked to be notified when you read this message." : "Šī ziņojuma sūtītājs ir norādījis, ka vēlas saņemt paziņojumu par šī ziņojuma izlasīšanu.", "Forward" : "Turpināt", + "Link copied" : "Saite nokopēta", "Translate" : "Tulkot", "View source" : "Skatīt avotu", "Unnamed" : "Nenosaukts", @@ -137,6 +139,8 @@ "Tag name is a hidden system tag" : "Birkas nosaukums ir slēpta sistēmas birka", "Tag already exists" : "Birka jau pastāv", "Not found" : "Nav atrasts", + "From:" : "No:", + "To:" : "Kam:", "Untitled event" : "Nenosaukts notikums", "Deleted" : "Izdzēsts", "Recipient" : "Saņēmējs", @@ -170,7 +174,7 @@ "Inbox" : "Iesūtne", "Junk" : "Nevēlams", "Sent" : "Izsūtne", - "Trash" : "Miskaste", + "Trash" : "Atkritne", "Error while sharing file" : "Kļūda datnes kopīgošanā", "{from}\n{subject}" : "{from}\n{subject}", "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Jau tiek apstrādāts ziņojums. Tiks zaudētas visas nesaglabātas izmaiņas, ja turpināsi.", @@ -178,6 +182,7 @@ "Could not load {tag}{name}{endtag}" : "Nevarēja ielādēt {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Radusies problēma, ielādējot {tag}{name}{endtag}", "Error loading message" : "Kļūda ielādējot vēstuli", - "From me" : "No manis" + "Choose a file to add as attachment" : "Izvēlēties datni, ko pievienot kā pielikumu", + "Choose a file to share as a link" : "Jāizvēlas datne, ko kopīgot kā saiti" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" } \ No newline at end of file diff --git a/l10n/mk.js b/l10n/mk.js index bdb21f140b..89c1dc4aee 100644 --- a/l10n/mk.js +++ b/l10n/mk.js @@ -34,7 +34,7 @@ OC.L10N.register( "Configuration discovery failed. Please use the manual settings" : "Неуспешна детекција на конфигурација. Користете рачни поставки", "Password required" : "Потребна е лозинка", "Testing authentication" : "Тестирање на автентикација", - "Loading account" : "Вчирување на сметка", + "Loading account" : "Вчитување на сметка", "Account updated" : "Сметката е ажурирана", "IMAP server is not reachable" : "IMAP серверот не е достапен", "SMTP server is not reachable" : "SMTP серверот не е достапен", @@ -65,7 +65,6 @@ OC.L10N.register( "SMTP Port" : "SMTP порта", "SMTP User" : "SMTP корисник", "SMTP Password" : "SMTP лозинка", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "За да работи Google сметка, потребно е да активирате дво-факторна авторизација за Google и да генерирате лозинка за апликација.", "Account settings" : "Праметри за сметката", "Signature" : "Потпис", "A signature is added to the text of new messages and replies." : "Потписот ќе се додава на крајот од текстот на нови пораки и одговори.", @@ -78,11 +77,11 @@ OC.L10N.register( "Calendar settings" : "Параметри за календар", "Filters" : "Филтри", "Mail server" : "Сервер за е-пошта", + "Email address" : "Е-пошта адреси", "Update alias" : "Ажурирај алијас", "Delete alias" : "Избриши алијас", "Go back" : "Назад", "Change name" : "Промени име", - "Email address" : "Е-пошта адреси", "Add alias" : "Додади псевдоним", "Create alias" : "Креирај алијас", "Cancel" : "Откажи", @@ -99,6 +98,7 @@ OC.L10N.register( "Sorting" : "Сортирање", "Newest first" : "Новите прво", "Oldest first" : "Старите прво", + "Ok" : "Во ред", "Privacy" : "Приватност", "Security" : "Безбедност", "Compose new message" : "Состави нова порака", @@ -113,7 +113,6 @@ OC.L10N.register( "Refresh" : "Освежи", "About" : "За", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Оваа апликација го вклучува CKEditor, уредник со отворен код. Copyright © CKEditor contributors. Лиценцирано под GPLv2.", - "Ok" : "Во ред", "No certificate" : "Нема сертификат", "Certificate updated" : "Сертификатот е ажуриран", "Could not update certificate" : "Неможе да се ажурира сертификатот", @@ -149,6 +148,7 @@ OC.L10N.register( "Disable formatting" : "Оневозможи форматирање", "Upload attachment" : "Прикачи прилог", "Add attachment from Files" : "Додади прилог од датотеките", + "Smart picker" : "Паметен избирач", "Request a read receipt" : "Побарај потврда за прочитана порака", "Sign message with S/MIME" : "Потпиши ја пораката со S/MIME", "Encrypt message with S/MIME" : "Шифрирај порака со S/MIME", @@ -159,17 +159,16 @@ OC.L10N.register( "Monday morning" : "Понеделник наутро", "Custom date and time" : "Одреден датум и време", "Enter a date" : "Внеси датум", - "Choose" : "Избери", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Прилогот ја надминува најголемата дозволена големина за прилози од {size}. Споделете го прилогот со линк.","Прилозите ја надминуваат најголемата дозволена големина за прилози од {size}. Споделете ги прилозите со линк."], - "Choose a file to add as attachment" : "Избери датотека за да додадете прилог", - "Choose a file to share as a link" : "Избери датотека за да се сподели како линк", "_{count} attachment_::_{count} attachments_" : ["{count} прилог","{count} прилози"], "Untitled message" : "Неименувана порака", "Confirm" : "Потврди", + "Revoke" : "Одземи", "Plain text" : "Обичен текст", "Rich text" : "Богат текст", "No messages in this folder" : "Нема пораки во оваа папка", "No messages" : "Нема пораки", + "Choose" : "Избери", "Blind copy recipients only" : "Само приматели на слепи копии", "No subject" : "Нема наслов", "Later today – {timeLocale}" : "Денес покасно – {timeLocale}", @@ -190,12 +189,12 @@ OC.L10N.register( "Mark not spam" : "Од-означи СПАМ", "Mark as spam" : "Означи како СПАМ", "Edit tags" : "Удери ознаки", - "Delete message" : "Избриши порака", "More actions" : "Повеќе акции", "Back" : "Назад", "Edit as new message" : "Измени како нова порака", "Create task" : "Креирај задача", "Download message" : "Преземи порака", + "Delete message" : "Избриши порака", "Load more" : "Вчитај повеќе", "_Mark {number} read_::_Mark {number} read_" : ["Означи {number} прочитана","Означи {number} прочитани"], "_Mark {number} unread_::_Mark {number} unread_" : ["Означи {number} непрочитана","Означи {number} непрочитани"], @@ -211,6 +210,7 @@ OC.L10N.register( "Event created" : "Создаден е настан", "Could not create event" : "Неможе да се креира настан", "Create event" : "Креирај настан", + "Title" : "Наслов", "All day" : "Цели денови", "Attendees" : "Присутни", "Select calendar" : "Избери календар", @@ -244,7 +244,9 @@ OC.L10N.register( "The sender of this message has asked to be notified when you read this message." : "Испраќачот на оваа порака посака да биде известен кога ќе ја прочитате оваа порака.", "Notify the sender" : "Извести го испраќачот", "You sent a read confirmation to the sender of this message." : "Испративте потврда до испраќачот дека е прочитана пораката.", + "Direct link copied to clipboard" : "Линкот е копиран во клипборд", "Forward" : "Препрати", + "Link copied" : "Линкот е копиран", "Move message" : "Премести порака", "Translate" : "Преведи", "Forward message as attachment" : "Препрати ја пораката како прилог", @@ -271,6 +273,7 @@ OC.L10N.register( "Move" : "Премести", "Moving" : "Преместува", "Moving message" : "Преместување порака", + "Change password" : "Смени лозинка", "Used quota: {quota}% ({limit})" : "Искористен простор: {quota}% ({limit})", "Used quota: {quota}%" : "Искористен простор: {quota}%", "Remove account" : "Отстрани сметка", @@ -369,6 +372,8 @@ OC.L10N.register( "Reply to sender only" : "Одговор само до испраќачот", "Mark as unfavorite" : "Од-означи омилена", "Mark as favorite" : "Означи како омилена", + "From:" : "Од:", + "To:" : "До:", "Untitled event" : "Неименуван настан", "(organizer)" : "(organizer)", "Import into {calendar}" : "Увези во {calendar}", @@ -411,6 +416,7 @@ OC.L10N.register( "Certificate imported successfully" : "Сертификатот е успешно увезен", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Неуспешно увезување на сертификат. Проверете дали приватниот клуч се совпаѓа со сертификатот и не е заштитен со лозинка.", "Failed to import the certificate" : "Неуспешен увоз на сертификат", + "Import S/MIME certificate" : "Увези S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име на сертификатот", "E-mail address" : "Е-пошта адреса", @@ -418,7 +424,6 @@ OC.L10N.register( "Delete certificate" : "Избриши сертификат", "No certificate imported yet" : "Сеуште нема увезено сертификат", "Import certificate" : "Увези сертификат", - "Import S/MIME certificate" : "Увези S/MIME сертификат", "PKCS #12 Certificate" : "PKCS #12 Сертификат", "PEM Certificate" : "PEM Сертификат", "Certificate" : "Сертификат", @@ -455,8 +460,7 @@ OC.L10N.register( "Could not load the desired message" : "Неможе да се вчита посакуваната порака", "Could not load the message" : "Неможе да се вчита пораката", "Error loading message" : "Грешка при вчитување на пораката", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Пораките автоматски ќе бидат означени како важни врз основа на кои пораки сте комуницирале или сте ги означиле како важни. На почетокот можеби ќе треба рачно да ја менувате важноста да го научите системот, но тоа ќе се подобрува со текот на времето.", - "Mark all messages of this folder as read" : "Означи ги сите пораки во оваа папка како прочитани", - "Last 7 days" : "Предходни 7 дена" + "Choose a file to add as attachment" : "Избери датотека за да додадете прилог", + "Choose a file to share as a link" : "Избери датотека за да се сподели како линк" }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/l10n/mk.json b/l10n/mk.json index e981410641..3802997980 100644 --- a/l10n/mk.json +++ b/l10n/mk.json @@ -32,7 +32,7 @@ "Configuration discovery failed. Please use the manual settings" : "Неуспешна детекција на конфигурација. Користете рачни поставки", "Password required" : "Потребна е лозинка", "Testing authentication" : "Тестирање на автентикација", - "Loading account" : "Вчирување на сметка", + "Loading account" : "Вчитување на сметка", "Account updated" : "Сметката е ажурирана", "IMAP server is not reachable" : "IMAP серверот не е достапен", "SMTP server is not reachable" : "SMTP серверот не е достапен", @@ -63,7 +63,6 @@ "SMTP Port" : "SMTP порта", "SMTP User" : "SMTP корисник", "SMTP Password" : "SMTP лозинка", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "За да работи Google сметка, потребно е да активирате дво-факторна авторизација за Google и да генерирате лозинка за апликација.", "Account settings" : "Праметри за сметката", "Signature" : "Потпис", "A signature is added to the text of new messages and replies." : "Потписот ќе се додава на крајот од текстот на нови пораки и одговори.", @@ -76,11 +75,11 @@ "Calendar settings" : "Параметри за календар", "Filters" : "Филтри", "Mail server" : "Сервер за е-пошта", + "Email address" : "Е-пошта адреси", "Update alias" : "Ажурирај алијас", "Delete alias" : "Избриши алијас", "Go back" : "Назад", "Change name" : "Промени име", - "Email address" : "Е-пошта адреси", "Add alias" : "Додади псевдоним", "Create alias" : "Креирај алијас", "Cancel" : "Откажи", @@ -97,6 +96,7 @@ "Sorting" : "Сортирање", "Newest first" : "Новите прво", "Oldest first" : "Старите прво", + "Ok" : "Во ред", "Privacy" : "Приватност", "Security" : "Безбедност", "Compose new message" : "Состави нова порака", @@ -111,7 +111,6 @@ "Refresh" : "Освежи", "About" : "За", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Оваа апликација го вклучува CKEditor, уредник со отворен код. Copyright © CKEditor contributors. Лиценцирано под GPLv2.", - "Ok" : "Во ред", "No certificate" : "Нема сертификат", "Certificate updated" : "Сертификатот е ажуриран", "Could not update certificate" : "Неможе да се ажурира сертификатот", @@ -147,6 +146,7 @@ "Disable formatting" : "Оневозможи форматирање", "Upload attachment" : "Прикачи прилог", "Add attachment from Files" : "Додади прилог од датотеките", + "Smart picker" : "Паметен избирач", "Request a read receipt" : "Побарај потврда за прочитана порака", "Sign message with S/MIME" : "Потпиши ја пораката со S/MIME", "Encrypt message with S/MIME" : "Шифрирај порака со S/MIME", @@ -157,17 +157,16 @@ "Monday morning" : "Понеделник наутро", "Custom date and time" : "Одреден датум и време", "Enter a date" : "Внеси датум", - "Choose" : "Избери", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Прилогот ја надминува најголемата дозволена големина за прилози од {size}. Споделете го прилогот со линк.","Прилозите ја надминуваат најголемата дозволена големина за прилози од {size}. Споделете ги прилозите со линк."], - "Choose a file to add as attachment" : "Избери датотека за да додадете прилог", - "Choose a file to share as a link" : "Избери датотека за да се сподели како линк", "_{count} attachment_::_{count} attachments_" : ["{count} прилог","{count} прилози"], "Untitled message" : "Неименувана порака", "Confirm" : "Потврди", + "Revoke" : "Одземи", "Plain text" : "Обичен текст", "Rich text" : "Богат текст", "No messages in this folder" : "Нема пораки во оваа папка", "No messages" : "Нема пораки", + "Choose" : "Избери", "Blind copy recipients only" : "Само приматели на слепи копии", "No subject" : "Нема наслов", "Later today – {timeLocale}" : "Денес покасно – {timeLocale}", @@ -188,12 +187,12 @@ "Mark not spam" : "Од-означи СПАМ", "Mark as spam" : "Означи како СПАМ", "Edit tags" : "Удери ознаки", - "Delete message" : "Избриши порака", "More actions" : "Повеќе акции", "Back" : "Назад", "Edit as new message" : "Измени како нова порака", "Create task" : "Креирај задача", "Download message" : "Преземи порака", + "Delete message" : "Избриши порака", "Load more" : "Вчитај повеќе", "_Mark {number} read_::_Mark {number} read_" : ["Означи {number} прочитана","Означи {number} прочитани"], "_Mark {number} unread_::_Mark {number} unread_" : ["Означи {number} непрочитана","Означи {number} непрочитани"], @@ -209,6 +208,7 @@ "Event created" : "Создаден е настан", "Could not create event" : "Неможе да се креира настан", "Create event" : "Креирај настан", + "Title" : "Наслов", "All day" : "Цели денови", "Attendees" : "Присутни", "Select calendar" : "Избери календар", @@ -242,7 +242,9 @@ "The sender of this message has asked to be notified when you read this message." : "Испраќачот на оваа порака посака да биде известен кога ќе ја прочитате оваа порака.", "Notify the sender" : "Извести го испраќачот", "You sent a read confirmation to the sender of this message." : "Испративте потврда до испраќачот дека е прочитана пораката.", + "Direct link copied to clipboard" : "Линкот е копиран во клипборд", "Forward" : "Препрати", + "Link copied" : "Линкот е копиран", "Move message" : "Премести порака", "Translate" : "Преведи", "Forward message as attachment" : "Препрати ја пораката како прилог", @@ -269,6 +271,7 @@ "Move" : "Премести", "Moving" : "Преместува", "Moving message" : "Преместување порака", + "Change password" : "Смени лозинка", "Used quota: {quota}% ({limit})" : "Искористен простор: {quota}% ({limit})", "Used quota: {quota}%" : "Искористен простор: {quota}%", "Remove account" : "Отстрани сметка", @@ -367,6 +370,8 @@ "Reply to sender only" : "Одговор само до испраќачот", "Mark as unfavorite" : "Од-означи омилена", "Mark as favorite" : "Означи како омилена", + "From:" : "Од:", + "To:" : "До:", "Untitled event" : "Неименуван настан", "(organizer)" : "(organizer)", "Import into {calendar}" : "Увези во {calendar}", @@ -409,6 +414,7 @@ "Certificate imported successfully" : "Сертификатот е успешно увезен", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Неуспешно увезување на сертификат. Проверете дали приватниот клуч се совпаѓа со сертификатот и не е заштитен со лозинка.", "Failed to import the certificate" : "Неуспешен увоз на сертификат", + "Import S/MIME certificate" : "Увези S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име на сертификатот", "E-mail address" : "Е-пошта адреса", @@ -416,7 +422,6 @@ "Delete certificate" : "Избриши сертификат", "No certificate imported yet" : "Сеуште нема увезено сертификат", "Import certificate" : "Увези сертификат", - "Import S/MIME certificate" : "Увези S/MIME сертификат", "PKCS #12 Certificate" : "PKCS #12 Сертификат", "PEM Certificate" : "PEM Сертификат", "Certificate" : "Сертификат", @@ -453,8 +458,7 @@ "Could not load the desired message" : "Неможе да се вчита посакуваната порака", "Could not load the message" : "Неможе да се вчита пораката", "Error loading message" : "Грешка при вчитување на пораката", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Пораките автоматски ќе бидат означени како важни врз основа на кои пораки сте комуницирале или сте ги означиле како важни. На почетокот можеби ќе треба рачно да ја менувате важноста да го научите системот, но тоа ќе се подобрува со текот на времето.", - "Mark all messages of this folder as read" : "Означи ги сите пораки во оваа папка како прочитани", - "Last 7 days" : "Предходни 7 дена" + "Choose a file to add as attachment" : "Избери датотека за да додадете прилог", + "Choose a file to share as a link" : "Избери датотека за да се сподели како линк" },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" } \ No newline at end of file diff --git a/l10n/mn.js b/l10n/mn.js index fb057630c5..731f80ee68 100644 --- a/l10n/mn.js +++ b/l10n/mn.js @@ -91,7 +91,6 @@ OC.L10N.register( "SMTP Port" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω –ø–æ—Ä—Ç", "SMTP User" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω —Ö—ç—Ä—ç–≥–ª—ç–≥—á", "SMTP Password" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω –Ω—É—É—Ü “Ø–≥", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google бүртгэлийг энэ апп-тай ашиглахын тулд Google-д хоёр хүчин зүйлт баталгаажуулалтыг идэвхжүүлж, аппын нууц үг үүсгэх шаардлагатай.", "Account settings" : "Бүртгэлийн тохиргоо", "Aliases" : "Хоч нэрс", "Alias to S/MIME certificate mapping" : "Хоч нэрийг S/MIME сертификаттай холбох", @@ -115,13 +114,13 @@ OC.L10N.register( "Mail server" : "Мэйл сервер", "Sieve server" : "Sieve сервер", "Folder search" : "Хавтас хайх", + "Email address" : "Имэйл хаяг", "Update alias" : "Хоч нэр шинэчлэх", "Rename alias" : "Хоч нэр өөрчлөх", "Show update alias form" : "Хоч нэр шинэчлэх формыг харуулах", "Delete alias" : "Хоч нэр устгах", "Go back" : "–ë—É—Ü–∞—Ö", "Change name" : "Нэр өөрчлөх", - "Email address" : "Имэйл хаяг", "Add alias" : "Хоч нэр нэмэх", "Create alias" : "Хоч нэр үүсгэх", "Cancel" : "–±–æ–ª–∏—É–ª–∞—Ö", @@ -148,13 +147,16 @@ OC.L10N.register( "Sorting" : "Эрэмбэлэлт", "Newest first" : "–®–∏–Ω–∏–π–≥ —É—Ä–¥ –Ω—å", "Oldest first" : "–•—É—É—á–Ω—ã–≥ —É—Ä–¥ –Ω—å", + "New text block" : "Шинэ текст блок", + "Title of the text block" : "Текст блокийн гарчиг", + "Content of the text block" : "Текст блокийн агуулга", + "Ok" : "–ó–∞", "Avatars from Gravatar and favicons" : "Gravatar болон favicon-с аватар", "Reply position" : "Хариултын байрлал", "Top" : "Дээр", "Bottom" : "Доор", "Text blocks" : "Текст блокууд", "Reusable pieces of text that can be inserted in messages" : "Зурвасуудад оруулж болох дахин ашиглах текстүүд", - "New text block" : "Шинэ текст блок", "Shared with me" : "Надтай хуваалцсан", "Privacy" : "Нууцлал", "Data collection" : "Өгөгдөл цуглуулах", @@ -184,9 +186,6 @@ OC.L10N.register( "Refresh" : "–°—ç—Ä–≥—ç—ç—Ö", "About" : "Тухай", "Acknowledgements" : "Талархал", - "Title of the text block" : "Текст блокийн гарчиг", - "Content of the text block" : "Текст блокийн агуулга", - "Ok" : "–ó–∞", "Automatically create tentative appointments in calendar" : "Календарт түр уулзалт автоматаар үүсгэх", "No certificate" : "Сертификат байхгүй", "Certificate updated" : "Сертификат шинэчлэгдлээ", @@ -226,7 +225,6 @@ OC.L10N.register( "Disable formatting" : "Форматлалт идэвхгүйжүүлэх", "Upload attachment" : "Хавсралт оруулах", "Add attachment from Files" : "–§–∞–π–ª–∞–∞—Å —Ö–∞–≤—Å—Ä–∞–ª—Ç –Ω—ç–º—ç—Ö", - "Add share link from Files" : "Файлуудаас хуваалцах холбоос нэмэх", "Smart picker" : "Ухаалаг сонгогч", "Request a read receipt" : "Унших баталгаа хүсэх", "Sign message with S/MIME" : "S/MIME-ээр зурвасыг гарын үсэг зурах", @@ -238,15 +236,14 @@ OC.L10N.register( "Monday morning" : "Даваа гарагийн өглөө", "Custom date and time" : "Өөрийн огноо, цаг", "Enter a date" : "Огноо оруулах", - "Choose" : "–°–æ–Ω–≥–æ—Ö", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Хавсралт нь зөвшөөрөгдсөн хавсралтын хэмжээ {size}-с хэтэрсэн байна. Оронд нь файлыг холбоосоор хуваалцана уу.","Хавсралтууд нь зөвшөөрөгдсөн хавсралтын хэмжээ {size}-с хэтэрсэн байна. Оронд нь файлуудыг холбоосоор хуваалцана уу."], - "Choose a file to add as attachment" : "Хавсралт болгох файл сонгоно уу", - "Choose a file to share as a link" : "Холбоосоор хуваалцах файл сонгоно уу", + "Choose a file" : "Файл сонгох", "_{count} attachment_::_{count} attachments_" : ["{count} хавсралт","{count} хавсралт"], "Untitled message" : "Гарчиггүй зурвас", "Expand composer" : "Бичигчийг өргөжүүлэх", "Close composer" : "Бичигчийг хаах", "Confirm" : "–ë–∞—Ç–ª–∞—Ö", + "Revoke" : "Цуцлах", "Tag: {name} deleted" : "Таг: {name} устгагдлаа", "An error occurred, unable to delete the tag." : "Алдаа гарлаа, таг устгах боломжгүй.", "The tag will be deleted from all messages." : "Таг бүх зурвасаас устгагдана.", @@ -254,6 +251,7 @@ OC.L10N.register( "Rich text" : "Баялаг текст", "No messages in this folder" : "Энэ хавтаст зурвас байхгүй", "No messages" : "Мессеж байхгүй", + "Choose" : "–°–æ–Ω–≥–æ—Ö", "Blind copy recipients only" : "Зөвхөн нууц хуулбар хүлээн авагчид", "No subject" : "Гарчиггүй", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Ноорог:{markup-end} {subject}", @@ -289,8 +287,6 @@ OC.L10N.register( "Move Message" : "Зурвас зөөх", "Archive thread" : "Яриа архивлах", "Archive message" : "Зурвас архивлах", - "Delete thread" : "Хэлэлцүүлгийг устгах", - "Delete message" : "Зурвас устгах", "More actions" : "Нэмэлт үйлдлүүд", "Back" : "–±—É—Ü–∞—Ö", "Set custom snooze" : "Хойшлуулах цаг тохируулах", @@ -298,6 +294,8 @@ OC.L10N.register( "Reply with meeting" : "Уулзалтаар хариулах", "Create task" : "Даалгавар үүсгэх", "Download message" : "Зурвас татах", + "Delete thread" : "Хэлэлцүүлгийг устгах", + "Delete message" : "Зурвас устгах", "Back to all actions" : "Бүх үйлдэл рүү буцах", "Manage quick actions" : "Түргэн үйлдлүүд удирдах", "Load more" : "Цааш ачаалах", @@ -321,6 +319,7 @@ OC.L10N.register( "Event created" : "Үйл явдал үүслээ", "Could not create event" : "Үйл явдал үүсгэх боломжгүй", "Create event" : "Үйл явдал үүсгэх", + "Title" : "–¶–æ–ª/–ê–ª–±–∞–Ω —Ç—É—à–∞–∞–ª", "All day" : "Бүтэн өдөр", "Attendees" : "–û—Ä–æ–ª—Ü–æ–≥—á–∏–¥", "You can only invite attendees if your account has an email address set" : "Зөвхөн таны бүртгэлд и-мэйл хаяг тохируулсан үед л оролцогчдыг урих боломжтой", @@ -391,6 +390,7 @@ OC.L10N.register( "Message was unsnoozed" : "Зурвасыг хойшлуулалтаас гаргалаа", "Could not unsnooze message" : "Зурвасыг хойшлуулалтаас гаргах боломжгүй", "Forward" : "–¥–∞–º–∂–∏—Ö", + "Link copied" : "Холбоос хуулагдсан", "Move message" : "Зурвас зөөх", "Translate" : "–û—Ä—á—É—É–ª–≥–∞", "Forward message as attachment" : "Зурвасыг хавсралт болгож дамжуулах", @@ -430,6 +430,7 @@ OC.L10N.register( "Moving message" : "Зурвас зөөж байна", "This account cannot connect" : "Энэ бүртгэл холбогдох боломжгүй", "Connection failed. Please verify your information and try again" : "Холболт амжилтгүй боллоо. Мэдээллээ шалгаад дахин оролдоно уу", + "Change password" : "Нууц үг өөрчлөх", "Used quota: {quota}% ({limit})" : "Ашигласан квот: {quota}% ({limit})", "Used quota: {quota}%" : "Ашигласан квот: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Шуудангийн хайрцаг үүсгэх боломжгүй. Нэр нь хүчингүй тэмдэгтүүд агуулж байж магадгүй. Өөр нэрээр оролдоно уу.", @@ -801,6 +802,7 @@ OC.L10N.register( "Certificate imported successfully" : "Сертификат амжилттай импортлогдлоо", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Сертификатыг импортлоход амжилтгүй боллоо. Хувийн түлхүүр сертификаттай тохирч байгаа эсэх болон нууц үгээр хамгаалагдаагүй эсэхийг шалгана уу.", "Failed to import the certificate" : "Сертификат импортлоход алдаа гарлаа", + "Import S/MIME certificate" : "S/MIME сертификат импортлох", "S/MIME certificates" : "S/MIME сертификатууд", "Certificate name" : "Сертификатын нэр", "E-mail address" : "И-мэйл хаяг", @@ -808,7 +810,6 @@ OC.L10N.register( "Delete certificate" : "Сертификат устгах", "No certificate imported yet" : "Сертификат импортлогдоогүй байна", "Import certificate" : "Сертификат импортлох", - "Import S/MIME certificate" : "S/MIME сертификат импортлох", "PKCS #12 Certificate" : "PKCS #12 сертификат", "PEM Certificate" : "PEM сертификат", "Certificate" : "–ì—ç—Ä—á–∏–ª–≥—ç—ç", @@ -868,11 +869,8 @@ OC.L10N.register( "Could not load the desired message" : "Хүссэн зурвасыг ачаалах боломжгүй", "Could not load the message" : "Зурвас ачаалах боломжгүй", "Error loading message" : "–∞–ª–¥–∞–∞—Ç–∞–π –∞—á–∞–∞–ª–ª–∞—Ö –∑—É—Ä–≤–∞—Å", - "Determine importance using machine learning" : "Машин сургалт ашиглан чухлыг тодорхойлох", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Таны ямар зурвастай харилцаж байсан эсвэл чухал гэж тэмдэглэсэн дээр суурилан зурвасууд автоматаар чухал гэж тэмдэглэгдэнэ. Эхэндээ та системд заахын тулд чухлын зэргийг гараар өөрчлөх шаардлагатай байж магадгүй, гэхдээ цаг хугацааны явцад сайжирна.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Таны илгээсэн зурвасуудаас хариу шаардлагатай боловч хэд хоногийн дараа хариу аваагүй зурвасууд энд харагдана.", - "Mark all messages of this folder as read" : "Энэ хавтасны бүх зурвасыг уншсан гэж тэмдэглэх", - "Last 7 days" : "Сүүлийн 7 хоног", - "From me" : "Миний талаас" + "Add share link from Files" : "Файлуудаас хуваалцах холбоос нэмэх", + "Choose a file to add as attachment" : "Хавсралт болгох файл сонгоно уу", + "Choose a file to share as a link" : "Холбоосоор хуваалцах файл сонгоно уу" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/mn.json b/l10n/mn.json index f9e84fd702..b4f4f0d570 100644 --- a/l10n/mn.json +++ b/l10n/mn.json @@ -89,7 +89,6 @@ "SMTP Port" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω –ø–æ—Ä—Ç", "SMTP User" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω —Ö—ç—Ä—ç–≥–ª—ç–≥—á", "SMTP Password" : "–≠–Ω–≥–∏–π–Ω –º—ç–π–ª –¥–∞–º–∂—É—É–ª–∞—Ö –ø—Ä–æ—Ç–æ–∫–æ–ª-–∏–π–Ω –Ω—É—É—Ü “Ø–≥", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google бүртгэлийг энэ апп-тай ашиглахын тулд Google-д хоёр хүчин зүйлт баталгаажуулалтыг идэвхжүүлж, аппын нууц үг үүсгэх шаардлагатай.", "Account settings" : "Бүртгэлийн тохиргоо", "Aliases" : "Хоч нэрс", "Alias to S/MIME certificate mapping" : "Хоч нэрийг S/MIME сертификаттай холбох", @@ -113,13 +112,13 @@ "Mail server" : "Мэйл сервер", "Sieve server" : "Sieve сервер", "Folder search" : "Хавтас хайх", + "Email address" : "Имэйл хаяг", "Update alias" : "Хоч нэр шинэчлэх", "Rename alias" : "Хоч нэр өөрчлөх", "Show update alias form" : "Хоч нэр шинэчлэх формыг харуулах", "Delete alias" : "Хоч нэр устгах", "Go back" : "–ë—É—Ü–∞—Ö", "Change name" : "Нэр өөрчлөх", - "Email address" : "Имэйл хаяг", "Add alias" : "Хоч нэр нэмэх", "Create alias" : "Хоч нэр үүсгэх", "Cancel" : "–±–æ–ª–∏—É–ª–∞—Ö", @@ -146,13 +145,16 @@ "Sorting" : "Эрэмбэлэлт", "Newest first" : "–®–∏–Ω–∏–π–≥ —É—Ä–¥ –Ω—å", "Oldest first" : "–•—É—É—á–Ω—ã–≥ —É—Ä–¥ –Ω—å", + "New text block" : "Шинэ текст блок", + "Title of the text block" : "Текст блокийн гарчиг", + "Content of the text block" : "Текст блокийн агуулга", + "Ok" : "–ó–∞", "Avatars from Gravatar and favicons" : "Gravatar болон favicon-с аватар", "Reply position" : "Хариултын байрлал", "Top" : "Дээр", "Bottom" : "Доор", "Text blocks" : "Текст блокууд", "Reusable pieces of text that can be inserted in messages" : "Зурвасуудад оруулж болох дахин ашиглах текстүүд", - "New text block" : "Шинэ текст блок", "Shared with me" : "Надтай хуваалцсан", "Privacy" : "Нууцлал", "Data collection" : "Өгөгдөл цуглуулах", @@ -182,9 +184,6 @@ "Refresh" : "–°—ç—Ä–≥—ç—ç—Ö", "About" : "Тухай", "Acknowledgements" : "Талархал", - "Title of the text block" : "Текст блокийн гарчиг", - "Content of the text block" : "Текст блокийн агуулга", - "Ok" : "–ó–∞", "Automatically create tentative appointments in calendar" : "Календарт түр уулзалт автоматаар үүсгэх", "No certificate" : "Сертификат байхгүй", "Certificate updated" : "Сертификат шинэчлэгдлээ", @@ -224,7 +223,6 @@ "Disable formatting" : "Форматлалт идэвхгүйжүүлэх", "Upload attachment" : "Хавсралт оруулах", "Add attachment from Files" : "–§–∞–π–ª–∞–∞—Å —Ö–∞–≤—Å—Ä–∞–ª—Ç –Ω—ç–º—ç—Ö", - "Add share link from Files" : "Файлуудаас хуваалцах холбоос нэмэх", "Smart picker" : "Ухаалаг сонгогч", "Request a read receipt" : "Унших баталгаа хүсэх", "Sign message with S/MIME" : "S/MIME-ээр зурвасыг гарын үсэг зурах", @@ -236,15 +234,14 @@ "Monday morning" : "Даваа гарагийн өглөө", "Custom date and time" : "Өөрийн огноо, цаг", "Enter a date" : "Огноо оруулах", - "Choose" : "–°–æ–Ω–≥–æ—Ö", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Хавсралт нь зөвшөөрөгдсөн хавсралтын хэмжээ {size}-с хэтэрсэн байна. Оронд нь файлыг холбоосоор хуваалцана уу.","Хавсралтууд нь зөвшөөрөгдсөн хавсралтын хэмжээ {size}-с хэтэрсэн байна. Оронд нь файлуудыг холбоосоор хуваалцана уу."], - "Choose a file to add as attachment" : "Хавсралт болгох файл сонгоно уу", - "Choose a file to share as a link" : "Холбоосоор хуваалцах файл сонгоно уу", + "Choose a file" : "Файл сонгох", "_{count} attachment_::_{count} attachments_" : ["{count} хавсралт","{count} хавсралт"], "Untitled message" : "Гарчиггүй зурвас", "Expand composer" : "Бичигчийг өргөжүүлэх", "Close composer" : "Бичигчийг хаах", "Confirm" : "–ë–∞—Ç–ª–∞—Ö", + "Revoke" : "Цуцлах", "Tag: {name} deleted" : "Таг: {name} устгагдлаа", "An error occurred, unable to delete the tag." : "Алдаа гарлаа, таг устгах боломжгүй.", "The tag will be deleted from all messages." : "Таг бүх зурвасаас устгагдана.", @@ -252,6 +249,7 @@ "Rich text" : "Баялаг текст", "No messages in this folder" : "Энэ хавтаст зурвас байхгүй", "No messages" : "Мессеж байхгүй", + "Choose" : "–°–æ–Ω–≥–æ—Ö", "Blind copy recipients only" : "Зөвхөн нууц хуулбар хүлээн авагчид", "No subject" : "Гарчиггүй", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Ноорог:{markup-end} {subject}", @@ -287,8 +285,6 @@ "Move Message" : "Зурвас зөөх", "Archive thread" : "Яриа архивлах", "Archive message" : "Зурвас архивлах", - "Delete thread" : "Хэлэлцүүлгийг устгах", - "Delete message" : "Зурвас устгах", "More actions" : "Нэмэлт үйлдлүүд", "Back" : "–±—É—Ü–∞—Ö", "Set custom snooze" : "Хойшлуулах цаг тохируулах", @@ -296,6 +292,8 @@ "Reply with meeting" : "Уулзалтаар хариулах", "Create task" : "Даалгавар үүсгэх", "Download message" : "Зурвас татах", + "Delete thread" : "Хэлэлцүүлгийг устгах", + "Delete message" : "Зурвас устгах", "Back to all actions" : "Бүх үйлдэл рүү буцах", "Manage quick actions" : "Түргэн үйлдлүүд удирдах", "Load more" : "Цааш ачаалах", @@ -319,6 +317,7 @@ "Event created" : "Үйл явдал үүслээ", "Could not create event" : "Үйл явдал үүсгэх боломжгүй", "Create event" : "Үйл явдал үүсгэх", + "Title" : "–¶–æ–ª/–ê–ª–±–∞–Ω —Ç—É—à–∞–∞–ª", "All day" : "Бүтэн өдөр", "Attendees" : "–û—Ä–æ–ª—Ü–æ–≥—á–∏–¥", "You can only invite attendees if your account has an email address set" : "Зөвхөн таны бүртгэлд и-мэйл хаяг тохируулсан үед л оролцогчдыг урих боломжтой", @@ -389,6 +388,7 @@ "Message was unsnoozed" : "Зурвасыг хойшлуулалтаас гаргалаа", "Could not unsnooze message" : "Зурвасыг хойшлуулалтаас гаргах боломжгүй", "Forward" : "–¥–∞–º–∂–∏—Ö", + "Link copied" : "Холбоос хуулагдсан", "Move message" : "Зурвас зөөх", "Translate" : "–û—Ä—á—É—É–ª–≥–∞", "Forward message as attachment" : "Зурвасыг хавсралт болгож дамжуулах", @@ -428,6 +428,7 @@ "Moving message" : "Зурвас зөөж байна", "This account cannot connect" : "Энэ бүртгэл холбогдох боломжгүй", "Connection failed. Please verify your information and try again" : "Холболт амжилтгүй боллоо. Мэдээллээ шалгаад дахин оролдоно уу", + "Change password" : "Нууц үг өөрчлөх", "Used quota: {quota}% ({limit})" : "Ашигласан квот: {quota}% ({limit})", "Used quota: {quota}%" : "Ашигласан квот: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Шуудангийн хайрцаг үүсгэх боломжгүй. Нэр нь хүчингүй тэмдэгтүүд агуулж байж магадгүй. Өөр нэрээр оролдоно уу.", @@ -799,6 +800,7 @@ "Certificate imported successfully" : "Сертификат амжилттай импортлогдлоо", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Сертификатыг импортлоход амжилтгүй боллоо. Хувийн түлхүүр сертификаттай тохирч байгаа эсэх болон нууц үгээр хамгаалагдаагүй эсэхийг шалгана уу.", "Failed to import the certificate" : "Сертификат импортлоход алдаа гарлаа", + "Import S/MIME certificate" : "S/MIME сертификат импортлох", "S/MIME certificates" : "S/MIME сертификатууд", "Certificate name" : "Сертификатын нэр", "E-mail address" : "И-мэйл хаяг", @@ -806,7 +808,6 @@ "Delete certificate" : "Сертификат устгах", "No certificate imported yet" : "Сертификат импортлогдоогүй байна", "Import certificate" : "Сертификат импортлох", - "Import S/MIME certificate" : "S/MIME сертификат импортлох", "PKCS #12 Certificate" : "PKCS #12 сертификат", "PEM Certificate" : "PEM сертификат", "Certificate" : "–ì—ç—Ä—á–∏–ª–≥—ç—ç", @@ -866,11 +867,8 @@ "Could not load the desired message" : "Хүссэн зурвасыг ачаалах боломжгүй", "Could not load the message" : "Зурвас ачаалах боломжгүй", "Error loading message" : "–∞–ª–¥–∞–∞—Ç–∞–π –∞—á–∞–∞–ª–ª–∞—Ö –∑—É—Ä–≤–∞—Å", - "Determine importance using machine learning" : "Машин сургалт ашиглан чухлыг тодорхойлох", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Таны ямар зурвастай харилцаж байсан эсвэл чухал гэж тэмдэглэсэн дээр суурилан зурвасууд автоматаар чухал гэж тэмдэглэгдэнэ. Эхэндээ та системд заахын тулд чухлын зэргийг гараар өөрчлөх шаардлагатай байж магадгүй, гэхдээ цаг хугацааны явцад сайжирна.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Таны илгээсэн зурвасуудаас хариу шаардлагатай боловч хэд хоногийн дараа хариу аваагүй зурвасууд энд харагдана.", - "Mark all messages of this folder as read" : "Энэ хавтасны бүх зурвасыг уншсан гэж тэмдэглэх", - "Last 7 days" : "Сүүлийн 7 хоног", - "From me" : "Миний талаас" + "Add share link from Files" : "Файлуудаас хуваалцах холбоос нэмэх", + "Choose a file to add as attachment" : "Хавсралт болгох файл сонгоно уу", + "Choose a file to share as a link" : "Холбоосоор хуваалцах файл сонгоно уу" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/nb.js b/l10n/nb.js index 0254a89e30..94d6708f3c 100644 --- a/l10n/nb.js +++ b/l10n/nb.js @@ -78,7 +78,6 @@ OC.L10N.register( "SMTP Port" : "SMTP-port", "SMTP User" : "SMTP-bruker", "SMTP Password" : "SMTP-passord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For at Google-kontoen skal fungere med denne appen, må du aktivere tofaktorautentisering for Google og generere et app-passord.", "Account settings" : "Kontoinnstillinger", "Aliases" : "Aliaser", "Alias to S/MIME certificate mapping" : "Alias til S/MIME-sertifikattilordning", @@ -95,13 +94,13 @@ OC.L10N.register( "Calendar settings" : "Kalenderinnstillinger", "Filters" : "Filtere", "Mail server" : "E-postserver", + "Email address" : "E-post adresse", "Update alias" : "Oppdater alias", "Rename alias" : "Gi alias nytt navn", "Show update alias form" : "Vis skjema for alias oppdatering", "Delete alias" : "Slett alias", "Go back" : "Gå tilbake", "Change name" : "Bytt navn", - "Email address" : "E-post adresse", "Add alias" : "Legg til alias", "Create alias" : "Opprett alias", "Cancel" : "Avbryt", @@ -120,13 +119,14 @@ OC.L10N.register( "Sorting" : "Sorter", "Newest first" : "Nyeste først", "Oldest first" : "Eldste først", + "New text block" : "Ny tekstblokk", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatarer fra Gravatar og favicons", "Reply position" : "Svarposisjon", "Top" : "Toppen", "Bottom" : "Bunnen", "Text blocks" : "Tekstblokker", "Reusable pieces of text that can be inserted in messages" : "Gjenbrukbare tekstblokker som kan settes inn i meldinger", - "New text block" : "Ny tekstblokk", "Privacy" : "Personvern", "Data collection" : "Innhenting av data", "Allow the app to collect and process data locally to adapt to your preferences" : "Tillat appen å samle inn og behandle data lokalt for å tilpasse seg dine preferanser", @@ -146,7 +146,6 @@ OC.L10N.register( "Send" : "Send", "Refresh" : "Oppdater", "About" : "Om", - "Ok" : "Ok", "No certificate" : "Ingen sertifikat", "Certificate updated" : "Sertifikat oppdatert", "Could not update certificate" : "Kunne ikke oppdatere sertifikatet", @@ -185,7 +184,6 @@ OC.L10N.register( "Disable formatting" : "Deaktiver formatering", "Upload attachment" : "Last opp vedlegg", "Add attachment from Files" : "Legg til vedlegg fra Filer", - "Add share link from Files" : "Legg til delingskobling fra Filer", "Smart picker" : "Smartvelger", "Request a read receipt" : "Be om lesekvittering", "Sign message with S/MIME" : "Signer melding med S/MIME", @@ -197,15 +195,14 @@ OC.L10N.register( "Monday morning" : "Mandag morgen", "Custom date and time" : "Egendefinert dato og klokkeslett", "Enter a date" : "Skriv inn dato", - "Choose" : "Velg", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Vedlegget overskrider den tillatte vedleggsstørrelsen på {size}. Vennligst del filen via lenke i stedet.","Vedleggene overskrider den tillatte vedleggsstørrelsen på {size}. Vennligst del filene via lenke i stedet."], - "Choose a file to add as attachment" : "Velg en fil å legge til som vedlegg", - "Choose a file to share as a link" : "Velg en fil du vil dele som en lenke", + "Choose a file" : "Velg fil", "_{count} attachment_::_{count} attachments_" : ["{count} vedlegg","{count} vedlegg"], "Untitled message" : "Melding uten navn", "Expand composer" : "Utvid skrivebehandler", "Close composer" : "Lukk skrivebehandler", "Confirm" : "Bekreft", + "Revoke" : "Avslå", "Tag: {name} deleted" : "Merke: {name} slettet", "An error occurred, unable to delete the tag." : "En feil oppstod, ikke i stand til å slette merkelappen.", "The tag will be deleted from all messages." : "Merkelappen slettes fra alle meldinger.", @@ -213,6 +210,7 @@ OC.L10N.register( "Rich text" : "Rik tekst", "No messages in this folder" : "Ingen meldinger i denne mappen", "No messages" : "Ingen meldinger", + "Choose" : "Velg", "Blind copy recipients only" : "Kun blind kopi mottakere", "No subject" : "Ingen emne", "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", @@ -244,14 +242,14 @@ OC.L10N.register( "Move thread" : "Flytt tråden", "Archive thread" : "Arkiver tråd", "Archive message" : "Arkiver melding", - "Delete thread" : "Slett tråden", - "Delete message" : "Slett melding", "More actions" : "Flere handlinger", "Back" : "Tilbake", "Set custom snooze" : "Angi tilpasset slumring", "Edit as new message" : "Rediger som ny melding", "Create task" : "Opprett oppgave", "Download message" : "Last ned melding", + "Delete thread" : "Slett tråden", + "Delete message" : "Slett melding", "Load more" : "Last mer", "_Mark {number} read_::_Mark {number} read_" : ["Merk {number} som lest","Merk {number} som leste"], "_Mark {number} unread_::_Mark {number} unread_" : ["Merk {number} som ulest","Merk {number} som uleste"], @@ -272,6 +270,7 @@ OC.L10N.register( "Event created" : "Hendelse opprettet", "Could not create event" : "Kunne ikke opprette hendelsen", "Create event" : "Opprettet hendelse", + "Title" : "Navn", "All day" : "Hele dagen", "Attendees" : "Deltakere", "Select calendar" : "Velg kalender", @@ -325,7 +324,9 @@ OC.L10N.register( "Could not snooze message" : "Kunne ikke slumre melding", "Message was unsnoozed" : "Melding ble ikke slumret", "Could not unsnooze message" : "Kunne ikke oppheve meldingsslumring", + "Direct link copied to clipboard" : "Direkte lenke kopiert til utklippstavlen", "Forward" : "Fremover", + "Link copied" : "Lenke kopiert", "Move message" : "Flytt melding", "Translate" : "Oversette", "Forward message as attachment" : "Videresend melding som et vedlegg", @@ -362,6 +363,7 @@ OC.L10N.register( "Moving" : "Flytter", "Moving thread" : "Flytter tråd", "Moving message" : "Flytter melding", + "Change password" : "Endre passord", "Remove account" : "Fjern konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Kontoen for {email} og bufrede e-postdata vil bli fjernet fra Nextcloud, men ikke fra e-postleverandøren din.", "Remove {email}" : "Fjern {email}", @@ -509,6 +511,8 @@ OC.L10N.register( "Reply to sender only" : "Svar kun til avsender", "Mark as unfavorite" : "Merk som ufavoritt", "Mark as favorite" : "Merk som favoritt", + "From:" : "Fra:", + "To:" : "Til:", "Unsubscribe via link" : "Avslutt abonnement via kobling", "Unsubscribing will stop all messages from the mailing list {sender}" : "Hvis du avslutter abonnementet, stoppes alle meldinger fra adresselisten {avsender}", "Send unsubscribe email" : "Send e-post for avmelding", @@ -643,6 +647,7 @@ OC.L10N.register( "Certificate imported successfully" : "Sertifikatet ble importert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Kan ikke importere sertifikatet. Forsikre deg om at den private nøkkelen samsvarer med sertifikatet og ikke er beskyttet av en passordfrase.", "Failed to import the certificate" : "Kunne ikke importere sertifikatet", + "Import S/MIME certificate" : "Importer S/MIME-sertifikat", "S/MIME certificates" : "S/MIME-sertifikater", "Certificate name" : "Sertifikatnavn", "E-mail address" : "E-postadresse", @@ -650,7 +655,6 @@ OC.L10N.register( "Delete certificate" : "Slett sertifikat", "No certificate imported yet" : "Ingen sertifikat importert enda", "Import certificate" : "Importer sertifikat", - "Import S/MIME certificate" : "Importer S/MIME-sertifikat", "PKCS #12 Certificate" : "PKCS #12-sertifikat", "PEM Certificate" : "PEM-sertifikat", "Certificate" : "Sertifikat", @@ -693,10 +697,8 @@ OC.L10N.register( "Could not load the desired message" : "Kunne ikke laste den ønskede meldingen", "Could not load the message" : "Kunne ikke laste meldingen", "Error loading message" : "Feil ved innlasting av melding", - "Determine importance using machine learning" : "Bestem viktighet ved hjelp av maskinlæring", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Meldinger blir automatisk merket som viktige basert på hvilke meldinger du har interagert med eller merket som viktige. I begynnelsen må du kanskje endre viktigheten manuelt for å lære systemet, men det vil forbedres over tid.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Meldinger sendt av deg som krever svar, men ikke mottok en etter et par dager, vises her.", - "Last 7 days" : "Siste 7 dager", - "From me" : "Fra meg" + "Add share link from Files" : "Legg til delingskobling fra Filer", + "Choose a file to add as attachment" : "Velg en fil å legge til som vedlegg", + "Choose a file to share as a link" : "Velg en fil du vil dele som en lenke" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/nb.json b/l10n/nb.json index 65d8a26f52..856c4173a3 100644 --- a/l10n/nb.json +++ b/l10n/nb.json @@ -76,7 +76,6 @@ "SMTP Port" : "SMTP-port", "SMTP User" : "SMTP-bruker", "SMTP Password" : "SMTP-passord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "For at Google-kontoen skal fungere med denne appen, må du aktivere tofaktorautentisering for Google og generere et app-passord.", "Account settings" : "Kontoinnstillinger", "Aliases" : "Aliaser", "Alias to S/MIME certificate mapping" : "Alias til S/MIME-sertifikattilordning", @@ -93,13 +92,13 @@ "Calendar settings" : "Kalenderinnstillinger", "Filters" : "Filtere", "Mail server" : "E-postserver", + "Email address" : "E-post adresse", "Update alias" : "Oppdater alias", "Rename alias" : "Gi alias nytt navn", "Show update alias form" : "Vis skjema for alias oppdatering", "Delete alias" : "Slett alias", "Go back" : "Gå tilbake", "Change name" : "Bytt navn", - "Email address" : "E-post adresse", "Add alias" : "Legg til alias", "Create alias" : "Opprett alias", "Cancel" : "Avbryt", @@ -118,13 +117,14 @@ "Sorting" : "Sorter", "Newest first" : "Nyeste først", "Oldest first" : "Eldste først", + "New text block" : "Ny tekstblokk", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatarer fra Gravatar og favicons", "Reply position" : "Svarposisjon", "Top" : "Toppen", "Bottom" : "Bunnen", "Text blocks" : "Tekstblokker", "Reusable pieces of text that can be inserted in messages" : "Gjenbrukbare tekstblokker som kan settes inn i meldinger", - "New text block" : "Ny tekstblokk", "Privacy" : "Personvern", "Data collection" : "Innhenting av data", "Allow the app to collect and process data locally to adapt to your preferences" : "Tillat appen å samle inn og behandle data lokalt for å tilpasse seg dine preferanser", @@ -144,7 +144,6 @@ "Send" : "Send", "Refresh" : "Oppdater", "About" : "Om", - "Ok" : "Ok", "No certificate" : "Ingen sertifikat", "Certificate updated" : "Sertifikat oppdatert", "Could not update certificate" : "Kunne ikke oppdatere sertifikatet", @@ -183,7 +182,6 @@ "Disable formatting" : "Deaktiver formatering", "Upload attachment" : "Last opp vedlegg", "Add attachment from Files" : "Legg til vedlegg fra Filer", - "Add share link from Files" : "Legg til delingskobling fra Filer", "Smart picker" : "Smartvelger", "Request a read receipt" : "Be om lesekvittering", "Sign message with S/MIME" : "Signer melding med S/MIME", @@ -195,15 +193,14 @@ "Monday morning" : "Mandag morgen", "Custom date and time" : "Egendefinert dato og klokkeslett", "Enter a date" : "Skriv inn dato", - "Choose" : "Velg", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Vedlegget overskrider den tillatte vedleggsstørrelsen på {size}. Vennligst del filen via lenke i stedet.","Vedleggene overskrider den tillatte vedleggsstørrelsen på {size}. Vennligst del filene via lenke i stedet."], - "Choose a file to add as attachment" : "Velg en fil å legge til som vedlegg", - "Choose a file to share as a link" : "Velg en fil du vil dele som en lenke", + "Choose a file" : "Velg fil", "_{count} attachment_::_{count} attachments_" : ["{count} vedlegg","{count} vedlegg"], "Untitled message" : "Melding uten navn", "Expand composer" : "Utvid skrivebehandler", "Close composer" : "Lukk skrivebehandler", "Confirm" : "Bekreft", + "Revoke" : "Avslå", "Tag: {name} deleted" : "Merke: {name} slettet", "An error occurred, unable to delete the tag." : "En feil oppstod, ikke i stand til å slette merkelappen.", "The tag will be deleted from all messages." : "Merkelappen slettes fra alle meldinger.", @@ -211,6 +208,7 @@ "Rich text" : "Rik tekst", "No messages in this folder" : "Ingen meldinger i denne mappen", "No messages" : "Ingen meldinger", + "Choose" : "Velg", "Blind copy recipients only" : "Kun blind kopi mottakere", "No subject" : "Ingen emne", "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", @@ -242,14 +240,14 @@ "Move thread" : "Flytt tråden", "Archive thread" : "Arkiver tråd", "Archive message" : "Arkiver melding", - "Delete thread" : "Slett tråden", - "Delete message" : "Slett melding", "More actions" : "Flere handlinger", "Back" : "Tilbake", "Set custom snooze" : "Angi tilpasset slumring", "Edit as new message" : "Rediger som ny melding", "Create task" : "Opprett oppgave", "Download message" : "Last ned melding", + "Delete thread" : "Slett tråden", + "Delete message" : "Slett melding", "Load more" : "Last mer", "_Mark {number} read_::_Mark {number} read_" : ["Merk {number} som lest","Merk {number} som leste"], "_Mark {number} unread_::_Mark {number} unread_" : ["Merk {number} som ulest","Merk {number} som uleste"], @@ -270,6 +268,7 @@ "Event created" : "Hendelse opprettet", "Could not create event" : "Kunne ikke opprette hendelsen", "Create event" : "Opprettet hendelse", + "Title" : "Navn", "All day" : "Hele dagen", "Attendees" : "Deltakere", "Select calendar" : "Velg kalender", @@ -323,7 +322,9 @@ "Could not snooze message" : "Kunne ikke slumre melding", "Message was unsnoozed" : "Melding ble ikke slumret", "Could not unsnooze message" : "Kunne ikke oppheve meldingsslumring", + "Direct link copied to clipboard" : "Direkte lenke kopiert til utklippstavlen", "Forward" : "Fremover", + "Link copied" : "Lenke kopiert", "Move message" : "Flytt melding", "Translate" : "Oversette", "Forward message as attachment" : "Videresend melding som et vedlegg", @@ -360,6 +361,7 @@ "Moving" : "Flytter", "Moving thread" : "Flytter tråd", "Moving message" : "Flytter melding", + "Change password" : "Endre passord", "Remove account" : "Fjern konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Kontoen for {email} og bufrede e-postdata vil bli fjernet fra Nextcloud, men ikke fra e-postleverandøren din.", "Remove {email}" : "Fjern {email}", @@ -507,6 +509,8 @@ "Reply to sender only" : "Svar kun til avsender", "Mark as unfavorite" : "Merk som ufavoritt", "Mark as favorite" : "Merk som favoritt", + "From:" : "Fra:", + "To:" : "Til:", "Unsubscribe via link" : "Avslutt abonnement via kobling", "Unsubscribing will stop all messages from the mailing list {sender}" : "Hvis du avslutter abonnementet, stoppes alle meldinger fra adresselisten {avsender}", "Send unsubscribe email" : "Send e-post for avmelding", @@ -641,6 +645,7 @@ "Certificate imported successfully" : "Sertifikatet ble importert", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Kan ikke importere sertifikatet. Forsikre deg om at den private nøkkelen samsvarer med sertifikatet og ikke er beskyttet av en passordfrase.", "Failed to import the certificate" : "Kunne ikke importere sertifikatet", + "Import S/MIME certificate" : "Importer S/MIME-sertifikat", "S/MIME certificates" : "S/MIME-sertifikater", "Certificate name" : "Sertifikatnavn", "E-mail address" : "E-postadresse", @@ -648,7 +653,6 @@ "Delete certificate" : "Slett sertifikat", "No certificate imported yet" : "Ingen sertifikat importert enda", "Import certificate" : "Importer sertifikat", - "Import S/MIME certificate" : "Importer S/MIME-sertifikat", "PKCS #12 Certificate" : "PKCS #12-sertifikat", "PEM Certificate" : "PEM-sertifikat", "Certificate" : "Sertifikat", @@ -691,10 +695,8 @@ "Could not load the desired message" : "Kunne ikke laste den ønskede meldingen", "Could not load the message" : "Kunne ikke laste meldingen", "Error loading message" : "Feil ved innlasting av melding", - "Determine importance using machine learning" : "Bestem viktighet ved hjelp av maskinlæring", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Meldinger blir automatisk merket som viktige basert på hvilke meldinger du har interagert med eller merket som viktige. I begynnelsen må du kanskje endre viktigheten manuelt for å lære systemet, men det vil forbedres over tid.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Meldinger sendt av deg som krever svar, men ikke mottok en etter et par dager, vises her.", - "Last 7 days" : "Siste 7 dager", - "From me" : "Fra meg" + "Add share link from Files" : "Legg til delingskobling fra Filer", + "Choose a file to add as attachment" : "Velg en fil å legge til som vedlegg", + "Choose a file to share as a link" : "Velg en fil du vil dele som en lenke" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/nl.js b/l10n/nl.js index 8ebd0a599f..bf8e8f88bc 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "E-mail", "You are reaching your mailbox quota limit for {account_email}" : "Je nadert je mailbox-quotumlimiet voor {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Je gebruikt momenteel {percentage} van je mailbox-opslag. Gelieve ruimte vrij te maken door onnodige mails te verwijderen.", + "{account_email} has been delegated to you" : "{account_email} is aan je gedelegeerd", + "{user} delegated {account} to you" : "{user} heeft {account} aan je gedelegeerd", + "{account_email} is no longer delegated to you" : "{account_email} is niet langer aan je gedelegeerd", + "{user} revoked delegation for {account}" : "{user} heeft de delegatie voor {account} ingetrokken", "Mail Application" : "Mailtoepassing", "Mails" : "Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mailadres van afzender: %1$s staat niet in het adresboek, maar de naam van de afzender: %2$s staat wel in het adresboek met het volgende e-mailadres: %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP poort", "SMTP User" : "SMTP gebruikersnaam", "SMTP Password" : "SMTP wachtwoord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Om het Google account te laten werken met deze applicatie moet de tweede-factor authenticatie voor Google worden geactiveerd en een applicatie wachtwoord aangemaakt.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google vereist OAuth-authenticatie. Als je Nextcloud-beheerder Google OAuth niet heeft ingesteld, kun je in plaats daarvan een Google-app-wachtwoord gebruiken.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft vereist OAuth-authenticatie. Vraag je Nextcloud-beheerder om Microsoft OAuth in te stellen in de beheerinstellingen.", "Account settings" : "Accountinstellingen", "Aliases" : "Aliassen", "Alias to S/MIME certificate mapping" : "Alias voor S/MIME certificaat toewijzing", @@ -117,16 +122,18 @@ OC.L10N.register( "Mail server" : "Mailserver", "Sieve server" : "Sieve server", "Folder search" : "Zoeken in map", + "Alias name" : "Bijnaam", + "Email address" : "E-mailadres", "Update alias" : "Bijwerken alias", "Rename alias" : "Wijzig alias", "Show update alias form" : "Toon formulier Bijwerken alias", "Delete alias" : "Verwijderen alias", "Go back" : "Ga terug", "Change name" : "Naam veranderen", - "Email address" : "E-mailadres", "Add alias" : "Voeg bijnaam toe", "Create alias" : "Aanmaken alias", "Cancel" : "Annuleren", + "Search the body of messages in priority Inbox" : "Zoek in de inhoud van berichten in de prioriteits-inbox", "Activate" : "Activeer", "Make mails available to Context Chat" : "Stel e-mails beschikbaar aan Context Chat", "Remind about messages that require a reply but received none" : "Waarschuw over berichten die een reactie vereisen maar nog geen hebben ontvangen", @@ -135,10 +142,13 @@ OC.L10N.register( "Mail settings" : "E-mail instellingen", "General" : "Algemeen", "Set as default mail app" : "Als standaard e-mail applicatie instellen", + "{email} (delegated)" : "{email} (gedelegeerd)", "Add mail account" : "Voeg e-mailaccount toe", "Appearance" : "Uiterlijk", - "Show all messages in thread" : "Toon alle berichten in een draad", + "Show all messages in thread" : "Toon alle berichten", "When off, only the selected message will be shown" : "Indien uitgeschakeld, zullen enkel de geselecteerde berichten worden getoond", + "Sort favorites up" : "Favorieten bovenaan sorteren", + "When on, favorite messages will be sorted to the top of folders" : "Indien ingeschakeld worden favoriete berichten bovenaan de mappen gesorteerd", "Layout" : "Layout", "Vertical split" : "Verticale splitsing", "Horizontal split" : "Horizontale splitsing", @@ -147,15 +157,20 @@ OC.L10N.register( "Sorting" : "Sorteren", "Newest first" : "Nieuwste eerst", "Oldest first" : "Oudste eerst", + "New text block" : "Nieuw tekstblok", + "Title of the text block" : "Titel van het tekstblok", + "Content of the text block" : "Inhoud van het tekstblok", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatars van Gravatar en favicons", + "Reply position" : "Antwoordpositie", "Top" : "Boven", "Bottom" : "Onder", "Text blocks" : "Tekstblokken", "Reusable pieces of text that can be inserted in messages" : "Tekstblokken voor hergebruik in berichten. ", - "New text block" : "Nieuw tekstblok", "Shared with me" : "Gedeeld met mij", "Privacy" : "Privacy", "Data collection" : "Gegevensverzameling", + "Allow the app to collect and process data locally to adapt to your preferences" : "De app toestaan om lokaal gegevens te verzamelen en te verwerken om zich aan je voorkeuren aan te passen", "Always show images from" : "Toon altijd afbeeldingen van", "Security" : "Beveiliging", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Beheer je interne adressen en domeinen zodat bekende contacten ongemarkeerd blijven", @@ -167,6 +182,8 @@ OC.L10N.register( "Install the browser extension" : "Installeer the browser uitbreiding", "Step 2" : "Stap 2", "Enable for the current domain" : "Activeer voor het huidige domein", + "Assistance features" : "Assistentiefuncties", + "Context Chat integration" : "Context Chat-integratie", "Compose new message" : "Opstellen nieuw bericht", "Newer message" : "Recenter bericht", "Older message" : "Ouder bericht", @@ -177,11 +194,12 @@ OC.L10N.register( "Search" : "Zoeken", "Send" : "Versturen", "Refresh" : "Verversen", + "Heading1" : "Kop1", + "Heading2" : "Kop2", + "Heading3" : "Kop3", "About" : "Over", "Acknowledgements" : "Erkenningen", - "Title of the text block" : "Titel van het tekstblok", - "Content of the text block" : "Inhoud van het tekstblok", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Deze applicatie bevat CKEditor, een open-source editor. Copyright © CKEditor-bijdragers. Gelicentieerd onder GPLv2.", "Automatically create tentative appointments in calendar" : "Maak automatisch voorlopige afspraken aan in de agenda", "No certificate" : "Geen certificaat", "Certificate updated" : "Certificaat opgewaardeerd", @@ -225,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Opmaak uitschakelen", "Upload attachment" : "Bijlage uploaden", "Add attachment from Files" : "Bijlage toevoegen vanuit Bestanden", - "Add share link from Files" : "Voeg een gedeelde koppeling toe vanuit Bestanden", "Smart picker" : "Smart Picker", "Request a read receipt" : "Vraag een leesbevestiging", "Sign message with S/MIME" : "Onderteken het bericht met S/MIME", @@ -237,13 +254,29 @@ OC.L10N.register( "Monday morning" : "Maandagochtend", "Custom date and time" : "Aangepaste datum en tijd", "Enter a date" : "Voeg een datum toe", - "Choose" : "Kies", + "Remove attachment {fileName}" : "Verwijder bijlage {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["De bijlage overschrijdt de toegestane omvang van {size}. Deel de bestanden in plaats daarvan via een link.","De bijlagen overschrijden de toegestane omvang van {size}. Deel de bestanden in plaats daarvan via een link."], - "Choose a file to add as attachment" : "Kies een bestand om als bijlage toe te voegen", - "Choose a file to share as a link" : "Kies een bestand om als link te delen", + "Choose a file" : "Kies een bestand", "_{count} attachment_::_{count} attachments_" : ["{count} bijlagen","{count} bijlagen"], "Untitled message" : "Naamloos bericht", + "Expand composer" : "Opsteller uitvouwen", + "Close composer" : "Opsteller sluiten", "Confirm" : "Bevestigen", + "Delegate access" : "Toegang delegeren", + "Revoke" : "Intrekken", + "{userId} will no longer be able to act on your behalf" : "{userId} kan niet langer namens jou handelen", + "Could not fetch delegates" : "Kon gedelegeerden niet ophalen", + "Delegated access to {displayName}" : "Toegang gedelegeerd aan {displayName}", + "Could not delegate access" : "Kon toegang niet delegeren", + "Revoked access for {displayName}" : "Toegang ingetrokken voor {displayName}", + "Could not revoke delegation" : "Kon delegatie niet intrekken", + "Delegation" : "Delegatie", + "Allow users to send, receive, and delete mail on your behalf" : "Gebruikers toestaan om namens jou e-mail te versturen, ontvangen en verwijderen", + "Revoke access" : "Toegang intrekken", + "Add delegate" : "Gedelegeerde toevoegen", + "Select a user" : "Selecteer een gebruiker", + "They will be able to send, receive, and delete mail on your behalf" : "Zij kunnen namens jou e-mail versturen, ontvangen en verwijderen", + "Revoke access?" : "Toegang intrekken?", "Tag: {name} deleted" : "Etiket: {name} verwijderd", "An error occurred, unable to delete the tag." : "Er is een fout opgetreden, etiket kan niet verwijderd worden.", "The tag will be deleted from all messages." : "Dit etiket wordt verwijderd uit alle berichten.", @@ -251,6 +284,7 @@ OC.L10N.register( "Rich text" : "Rijke tekst", "No messages in this folder" : "Geen berichten in deze map", "No messages" : "Geen berichten", + "Choose" : "Kies", "Blind copy recipients only" : "Alleen ontvangers van blinde kopie", "No subject" : "Geen onderwerp", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Concept:{markup-end} {subject}", @@ -262,13 +296,17 @@ OC.L10N.register( "Set reminder for this weekend" : "Herinnering voor het weekend instellen", "Next week – {timeLocale}" : "Volgende week - {timeLocale}", "Set reminder for next week" : "Herinnering instellen voor volgende week", + "Could not apply tag, configured tag not found" : "Kon label niet toepassen, ingesteld label niet gevonden", + "Could not move thread, destination mailbox not found" : "Kon niet worden verplaatst, doelpostvak niet gevonden", + "Could not execute quick action" : "Kon snelle actie niet uitvoeren", + "Quick action executed" : "Snelle actie uitgevoerd", "No trash folder configured" : "Geen prullenbak geconfigureerd", "Could not delete message" : "Kon bericht niet verwijderen", "Could not archive message" : "Kan bericht niet archiveren", - "Thread was snoozed" : "Sluimerende draad", - "Could not snooze thread" : "Draad kan niet sluimeren", - "Thread was unsnoozed" : "Draad is gewekt", - "Could not unsnooze thread" : "Kan draad niet wekken", + "Thread was snoozed" : "Sluimerende conversatie", + "Could not snooze thread" : "De conversatie kon niet worden gesluimerd", + "Thread was unsnoozed" : "De conversatie is weer zichtbaar gemaakt", + "Could not unsnooze thread" : "Kon de conversatie niet uit de slaapstand halen", "This summary was AI generated" : "Deze samenvatting is door AI gegenereerd", "Encrypted message" : "Versleuteld bericht", "This message is unread" : "Dit is een ongelezen bericht", @@ -282,12 +320,10 @@ OC.L10N.register( "Edit tags" : "Bewerken tags", "Snooze" : "Sluimeren", "Unsnooze" : "Gewekt", - "Move thread" : "Verplaats draadje", + "Move thread" : "Verplaats", "Move Message" : "Verplaats bericht", - "Archive thread" : "Gearchiveerde draad", + "Archive thread" : "Archiveren", "Archive message" : "Archiveer bericht", - "Delete thread" : "Verwijder draadje", - "Delete message" : "Bericht verwijderen", "More actions" : "Meer acties", "Back" : "Terug", "Set custom snooze" : "Instellen sluimeren", @@ -295,6 +331,8 @@ OC.L10N.register( "Reply with meeting" : "Antwoord met vergadering", "Create task" : "Aanmaken taak", "Download message" : "Bericht ophalen", + "Delete thread" : "Verwijderen", + "Delete message" : "Bericht verwijderen", "Back to all actions" : "Terug naar alle acties", "Manage quick actions" : "Beheer snelle acties", "Load more" : "Laad meer", @@ -305,18 +343,24 @@ OC.L10N.register( "_Unfavorite {number}_::_Unfavorite {number}_" : ["Favoriet weghalen {number}","Favoriet weghalen {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Favoriet maken {number}","Favoriet maken {number}"], "_Unselect {number}_::_Unselect {number}_" : ["De-selecteren {number}","De-selecteren {number}"], - "_Move {number} thread_::_Move {number} threads_" : ["Verplaatsen {number} draadje","Verplaatsen {number} draadjes"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["{number} als spam markeren","{number} als spam markeren"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["{number} als geen spam markeren","{number} als geen spam markeren"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Labels bewerken voor {number}","Labels bewerken voor {number}"], + "_Move {number} thread_::_Move {number} threads_" : ["Verplaatsen {number} draadje","Verplaats {number} conversaties"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Doorsturen {number} als bijlage","Doorsturen {number} als bijlage"], "Mark as unread" : "Markeren als ongelezen", "Mark as read" : "Markeren als gelezen", "Mark as unimportant" : "Markeren als onbelangrijk", "Mark as important" : "Markeren als belangrijk", "Report this bug" : "Meld deze fout", + "This description was generated by AI." : "Deze beschrijving is door AI gegenereerd.", "Event created" : "Afspraak aangemaakt", "Could not create event" : "Kon afspraak niet creëren", "Create event" : "Creëer afspraak", + "Title" : "Titel", "All day" : "Alle dagen", "Attendees" : "Deelnemers", + "You can only invite attendees if your account has an email address set" : "Je kunt alleen deelnemers uitnodigen als er een e-mailadres voor je account is ingesteld", "Select calendar" : "Selecteer een kalender", "Description" : "Omschrijving", "Create" : "Aanmaken", @@ -341,12 +385,18 @@ OC.L10N.register( "More options" : "Meer opties", "This message has an attached invitation but the invitation dates are in the past" : "Dit bericht bevat een uitnodiging maar de datum voor de uitnodiging is verstreken", "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Dit bericht bevat een uitnodiging maar de uitnodiging maar geen enkele deelnemer is met een e-mail adres bekent", + "Could not remove internal address {sender}" : "Kon intern adres {sender} niet verwijderen", + "Could not add internal address {address}" : "Kon intern adres {address} niet toevoegen", "individual" : "individueel", "domain" : "domein", "Remove" : "Verwijderen", "Add internal address" : "Voeg een intern adres toe", "Add internal email or domain" : "Voeg een interne e-mail of domein toe", "Itinerary for {type} is not supported yet" : "route voor {type} wordt nog niet ondersteund", + "To archive a message please configure an archive folder in account settings" : "Om een bericht te archiveren, stel je een archiefmap in bij de accountinstellingen", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Je hebt geen toestemming om dit bericht naar de archiefmap te verplaatsen en/of dit bericht uit de huidige map te verwijderen", + "Your IMAP server does not support storing the seen/unseen state." : "Je IMAP-server ondersteunt het opslaan van de gelezen/ongelezen-status niet.", + "Could not mark message as seen/unseen" : "Kon bericht niet als gelezen/ongelezen markeren", "Last hour" : "Laatste uur", "Today" : "Vandaag", "Yesterday" : "Gisteren", @@ -357,45 +407,85 @@ OC.L10N.register( "Indexing your messages. This can take a bit longer for larger folders." : "Berichten aan het indexeren. Dit kan wat langer duren voor grote mappen. ", "Choose target folder" : "Kies doelmap…", "No more submailboxes in here" : "Niet meer subpostbussen hier", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Berichten worden automatisch als belangrijk gemarkeerd met behulp van AI. Het systeem leert van welke berichten je opent of als belangrijk markeert. In het begin moet je het belang mogelijk handmatig aanpassen om het te trainen, maar het wordt na verloop van tijd beter", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Berichten die je als favoriet hebt gemarkeerd, worden bovenaan de mappen getoond. Je kunt dit gedrag uitschakelen in de app-instellingen", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "AI identificeert berichten die je hebt verzonden en waarop waarschijnlijk een antwoord nodig is maar dat na een paar dagen is uitgebleven, en toont ze hier", "Favorites" : "Favorieten", + "Favorites info" : "Info over favorieten", + "Load more favorites" : "Meer favorieten laden", "Follow up" : "Opvolgen", + "Follow up info" : "Info over opvolging", + "Load more follow ups" : "Meer opvolgingen laden", "Important info" : "Belangrijke informatie", + "Load more important messages" : "Meer belangrijke berichten laden", "Other" : "Ander", + "Load more other messages" : "Meer overige berichten laden", "Could not send mdn" : "Kon mdn niet versturen", "The sender of this message has asked to be notified when you read this message." : "De afzender van dit bericht heeft om een leesbevestiging gevraagd.", "Notify the sender" : "Informeer de afzender", "You sent a read confirmation to the sender of this message." : "Je hebt een leesbevestiging aan de afzender van dit bericht gestuurd.", + "Message was snoozed" : "Bericht is gesnoozed", + "Could not snooze message" : "Kon bericht niet snoozen", + "Message was unsnoozed" : "Snooze van bericht is opgeheven", + "Could not unsnooze message" : "Kon snooze van bericht niet opheffen", + "Could not generate direct link: Message ID is missing" : "Er kon geen directe link worden gegenereerd: het bericht-ID ontbreekt", + "Direct link copied to clipboard" : "Directe link gekopieerd naar klembord", + "Copy direct link" : "Directe link kopiëren", "Forward" : "Doorsturen", + "Only for message recipients" : "Alleen voor ontvangers van het bericht", + "Link copied" : "Link gekopieerd", "Move message" : "Verplaats bericht", "Translate" : "Vertaal", + "Forward message as attachment" : "Bericht als bijlage doorsturen", "View source" : "Bekijk bron", + "Print message" : "Bericht afdrukken", + "Create mail filter" : "Mailfilter aanmaken", "Download thread data for debugging" : "Download gegevens voor foutopsporing", + "Suggested replies are using AI" : "Voorgestelde antwoorden maken gebruik van AI", "Message body" : "Berichttekst", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Waarschuwing: de S/MIME-handtekening van dit bericht is niet geverifieerd. De afzender doet zich mogelijk voor als iemand anders!", + "AI info" : "AI-info", "Unnamed" : "Onbenoemd", "Embedded message" : "Ingebed bericht", + "Attachment saved to Files" : "Bijlage opgeslagen in Bestanden", + "Attachment could not be saved" : "Bijlage kon niet worden opgeslagen", + "calendar imported" : "agenda geïmporteerd", "Choose a folder to store the attachment in" : "Kies een map op de bijlage in op te slaan", "Import into calendar" : "Toevoegen aan agenda", "Download attachment" : "Download bijlage", "Save to Files" : "Opslaan in Bestanden", + "Attachments saved to Files" : "Bijlagen opgeslagen in Bestanden", + "Error while saving attachments" : "Fout bij opslaan van bijlagen", + "View fewer attachments" : "Minder bijlagen weergeven", "Choose a folder to store the attachments in" : "Selecteer een folder waarin de bijlagen opgeslagen moeten worden", "Save all to Files" : "Sla alles op in Bestanden", "Download Zip" : "Download Zip", + "_View {count} more attachment_::_View {count} more attachments_" : ["Nog {count} bijlage weergeven","Nog {count} bijlagen weergeven"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Dit bericht is versleuteld met PGP. Installeer Mailvelope om het te ontcijferen.", "The images have been blocked to protect your privacy." : "De afbeeldingen zijn geblokkeerd om je privacy te beschermen", - "Show images" : "Tonen afbeeldingen", - "Show images temporarily" : "Tonen afbeeldingen tijdelijk", - "Always show images from {sender}" : "Afbeeldingen van {sender} altijd tonen", - "Always show images from {domain}" : "Afbeeldingen van {domain} altijd tonen", + "Show images" : "Afbeeldingen weergeven", + "Show images temporarily" : "Afbeeldingen tijdelijk weergeven", + "Always show images from {sender}" : "Afbeeldingen van {sender} altijd weergeven", + "Always show images from {domain}" : "Afbeeldingen van {domain} altijd weergeven", "Message frame" : "Berichtenkader", "Quoted text" : "Geciteerde tekst", "Move" : "Verplaatsen", "Moving" : "Verplaatsen", - "Moving thread" : "Verplaatsen draadje", - "Moving message" : "Verplaatsen bericht", + "Moving thread" : "Verplaatsen", + "Moving message" : "Bericht verplaatsen", + "This account cannot connect" : "Dit account kan geen verbinding maken", + "Connection failed. Please verify your information and try again" : "Verbinding mislukt. Controleer je gegevens en probeer het opnieuw", + "Change password" : "Wachtwoord wijzigen", + "Used quota: {quota}% ({limit})" : "Gebruikt quotum: {quota}% ({limit})", + "Used quota: {quota}%" : "Gebruikt quotum: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Kan mailbox niet creëren. De naam bevat waarschijnlijk ongeldige karakters. Probeer een andere naam.", "Remove account" : "Verwijder account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Het account voor {email} en alle gecachte data zal verwijderd worden van Nextcloud, maar niet van je e-mailprovider.", "Remove {email}" : "Verwijder {email}", + "could not delete account" : "kon account niet verwijderen", + "Provisioned account is disabled" : "Geprovisioneerd account is uitgeschakeld", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Log in met een wachtwoord om dit account in te schakelen. De huidige sessie gebruikt wachtwoordloze authenticatie, bijv. SSO of WebAuthn.", + "Delegate account" : "Account delegeren", "Show only subscribed folders" : "Toon alleen geabonneerde mappen", "Add folder" : "Map toevoegen", "Folder name" : "Mapnaam", @@ -408,11 +498,14 @@ OC.L10N.register( "_{total} message_::_{total} messages_" : ["{total} bericht","{total} berichten"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} ongelezen van de {total}","{unread} ongelezen van de {total}"], "Loading …" : "Aan het laden...", + "All messages in mailbox will be deleted." : "Alle berichten in het postvak worden verwijderd.", + "Clear mailbox {name}" : "Postvak {name} legen", "Clear folder" : "Map leegmaken", "The folder and all messages in it will be deleted." : "De map en alle berichten erin worden verwijderd.", "Delete folder" : "Map verwijderen", "Delete folder {name}" : "Verwijder map {name}", "An error occurred, unable to rename the mailbox." : "Er is een fout opgetreden, de naam van de mailbox kon niet worden gewijzigd.", + "Please wait 10 minutes before repairing again" : "Wacht 10 minuten voordat je opnieuw repareert", "Mark all as read" : "Alles als gelezen markeren", "Add subfolder" : "Toevoegen submap", "Rename" : "Hernoemen", @@ -422,80 +515,163 @@ OC.L10N.register( "Clear locally cached data, in case there are issues with synchronization." : "Maak de lokale gegevenscache schoon, als er problemen zijn bij synchronisatie.", "Subscribed" : "Geabonneerd", "Sync in background" : "Synchroniseer op de achtergrond", - "Outbox" : "Uitbak", + "Delete all messages" : "Alle berichten verwijderen", + "Outbox" : "Postvak UIT", + "Translate this message to {language}" : "Dit bericht vertalen naar {language}", "New message" : "Nieuw bericht", "Edit message" : "Bewerk bericht", "Draft" : "Concept", "Reply" : "Antwoord", + "Message saved" : "Bericht opgeslagen", + "Failed to save message" : "Bericht opslaan mislukt", + "Failed to save draft" : "Concept opslaan mislukt", + "attachment" : "bijlage", + "attached" : "bijgevoegd", + "No \"sent\" folder configured. Please pick one in the account settings." : "Geen map voor verzonden berichten ingesteld. Kies er een bij de accountinstellingen.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Je probeert een e-mail te versturen met veel ontvangers in Aan en /of Cc. Overweeg om Bcc te gebruiken om de adressen van de ontvangers voor elkaar te verbergen.", + "Your message has no subject. Do you want to send it anyway?" : "Je bericht heeft geen onderwerp. Wil je het toch versturen?", + "You mentioned an attachment. Did you forget to add it?" : "Je noemde een bijlage. Ben je vergeten die toe te voegen?", + "Message discarded" : "Bericht verwijderd", + "Could not discard message" : "Kon bericht niet verwijderen", + "Maximize composer" : "Opsteller maximaliseren", + "Show recipient details" : "Ontvangerdetails tonen", + "Hide recipient details" : "Ontvangerdetails verbergen", + "Minimize composer" : "Opsteller minimaliseren", "Error sending your message" : "Fout bij het versturen van jouw bericht", "Retry" : "Opnieuw proberen", "Warning sending your message" : "Waarschuwing bij het versturen van jouw bericht", "Send anyway" : "Toch verzenden", + "Welcome to {productName} Mail" : "Welkom bij {productName} Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Begin met het schrijven van een bericht door hieronder te klikken, of selecteer een bestaand bericht om de inhoud weer te geven", + "Autoresponder off" : "Automatisch antwoord uit", + "Autoresponder on" : "Automatisch antwoord aan", + "Autoresponder follows system settings" : "Automatisch antwoord volgt systeeminstellingen", + "The autoresponder follows your personal absence period settings." : "Het automatische antwoord volgt je persoonlijke afwezigheidsinstellingen.", + "Edit absence settings" : "Afwezigheidsinstellingen bewerken", "First day" : "Eerste dag", + "Last day (optional)" : "Laatste dag (optioneel)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} wordt vervangen door het onderwerp van het bericht waarop je antwoordt", "Message" : "Bericht", "Oh Snap!" : "O nee!", + "Save autoresponder" : "Automatisch antwoord opslaan", + "Could not open outbox" : "Kon postvak uit niet openen", + "Pending or not sent messages will show up here" : "Berichten die in behandeling zijn of niet zijn verzonden, verschijnen hier", "Could not copy to \"Sent\" folder" : "Kon niet naar \"Verzonden\" map kopiëren", + "Mail server error" : "Mailserverfout", + "Message could not be sent" : "Bericht kon niet worden verzonden", + "Message deleted" : "Bericht verwijderd", "Copy to \"Sent\" Folder" : "Kopieer naar \"Verzonden\" map", "Copy to Sent Folder" : "Kopieer naar Verzonden map", + "Phishing email" : "Phishing-e-mail", + "This email might be a phishing attempt" : "Deze e-mail is mogelijk een phishingpoging", + "Hide suspicious links" : "Verdachte links verbergen", + "Show suspicious links" : "Verdachte links tonen", + "link text" : "linktekst", + "Copied email address to clipboard" : "E-mailadres naar klembord gekopieerd", + "Could not copy email address to clipboard" : "Kon e-mailadres niet naar klembord kopiëren", "Contacts with this address" : "Contactpersonen met dit adres", "Add to Contact" : "Toevoegen aan contactpersoon", "New Contact" : "Nieuwe contactpersoon", "Copy to clipboard" : "Kopiëren naar het klembord", + "Contact name …" : "Contactnaam …", "Add" : "Toevoegen", "Show less" : "Toon minder", "Show more" : "Toon meer", "Clear" : "Terug", "Search in folder" : "Zoek in map", + "Open search modal" : "Zoekvenster openen", "Close" : "Sluit", + "Search parameters" : "Zoekparameters", + "Search subject" : "Onderwerp doorzoeken", "Body" : "Body", + "Search body" : "Inhoud doorzoeken", "Date" : "Datum", + "Pick a start date" : "Kies een startdatum", + "Pick an end date" : "Kies een einddatum", + "Select senders" : "Selecteer afzenders", + "Select recipients" : "Selecteer ontvangers", + "Select CC recipients" : "Selecteer CC-ontvangers", + "Select BCC recipients" : "Selecteer BCC-ontvangers", "Tags" : "Tags", "Select tags" : "Kies tags", + "Marked as" : "Gemarkeerd als", + "Has attachments" : "Heeft bijlagen", + "Mentions me" : "Noemt mij", + "Has attachment" : "Heeft bijlage", + "To me" : "Aan mij", + "Enable mail body search" : "Zoeken in berichtinhoud inschakelen", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve is een krachtige taal voor het schrijven van filters voor je postvak. Je kunt de sieve-scripts in Mail beheren als je e-maildienst dit ondersteunt. Sieve is ook vereist om Automatisch antwoord en Filters te gebruiken.", + "Enable sieve filter" : "Sieve-filter inschakelen", + "Sieve host" : "Sieve-host", + "Sieve security" : "Sieve-beveiliging", "Sieve Port" : "Sieve poort", + "Sieve credentials" : "Sieve-inloggegevens", "IMAP credentials" : "IMAP inloggegevens", "Custom" : "Maatwerk", "Sieve User" : "Sieve gebruiker", "Sieve Password" : "Sieve Wachtwoord", + "Oh snap!" : "Oeps!", "Save sieve settings" : "Bewaar sieve instellingen", "The syntax seems to be incorrect:" : "De syntaxis lijkt niet juist", "Save sieve script" : "Bewaar sieve-script", "Signature …" : "Handtekening …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Je handtekening is groter dan 2 MB. Dit kan de prestaties van je editor beïnvloeden.", "Save signature" : "Handtekening opslaan", "Place signature above quoted text" : "Plaats handtekening boven de aangehaalde tekst", "Message source" : "Bericht brontekst", "An error occurred, unable to rename the tag." : "Er is een fout opgetreden, kan tag niet hernoemen", "Edit name or color" : "Wijzig naam of kleur", + "Saving new tag name …" : "Nieuwe labelnaam opslaan …", "Delete tag" : "Verwijderen tag", + "Set tag" : "Label instellen", + "Unset tag" : "Label opheffen", + "Tag name is a hidden system tag" : "Labelnaam is een verborgen systeemlabel", "Tag already exists" : "Markering bestaat al", "Tag name cannot be empty" : "Etiketnaam kan niet leeg zijn", "An error occurred, unable to create the tag." : "Er trad een fout op, tag kon niet worden gecreëerd.", "Add default tags" : "Voeg standaard tags toe", "Add tag" : "Toevoegen tag", + "Saving tag …" : "Label opslaan …", + "Task created" : "Taak aangemaakt", "Could not create task" : "Er kon geen taak worden aangemaakt", - "Could not load your message thread" : "Kon je berichtendraad niet laden", - "The thread doesn't exist or has been deleted" : "De draad bestaat niet of is verwijderd", + "No calendars with task list support" : "Geen agenda's met ondersteuning voor takenlijsten", + "Summarizing thread failed." : "Samenvatten van conversatie mislukt.", + "Could not load your message thread" : "Kon je berichten niet laden", + "The thread doesn't exist or has been deleted" : "De conversatie bestaat niet of is verwijderd", "Email was not able to be opened" : "E-mail kon niet worden geopend", "Print" : "Afdrukken", + "Could not print message" : "Kon bericht niet afdrukken", + "Loading thread" : "Conversatie laden", "Not found" : "Niet gevonden", "Encrypted & verified " : "Versleuteld en geverifieerd", "Signature verified" : "Handtekening geverifieerd", "Signature unverified " : "Handtekening niet geverifieerd", "This message was encrypted by the sender before it was sent." : "Dit bericht was versleuteld door de afzender voordat het was verzonden", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Dit bericht bevat een geverifieerde digitale S/MIME-handtekening. Het bericht is niet gewijzigd sinds het is verzonden.", "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Dit bericht bevat een niet geverifieerde digitale S/MIME handtekening. Het bericht kan gewijzigd zijn nadat het was verstuurd of de ondertekenaar is niet vertrouwd.", "Reply all" : "Beantwoord iedereen", "Unsubscribe request sent" : "Uitschrijvingsverzoek is verstuurd", "Could not unsubscribe from mailing list" : "Kon niet uitschrijven van de verzendlijst", + "Please wait for the message to load" : "Wacht tot het bericht is geladen", "Disable reminder" : "Verwijder herinnering", "Unsubscribe" : "Afmelden", "Reply to sender only" : "Antwoord alleen op afzender", "Mark as unfavorite" : "Verwijder als favoriet", "Mark as favorite" : "Markeer als favoriet", + "From:" : "Van:", + "To:" : "Aan:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Uitschrijven via koppeling", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Door je uit te schrijven stoppen alle berichten van de mailinglijst {sender}", "Send unsubscribe email" : "Verstuur een uitschrijving e-mail", "Unsubscribe via email" : "Uitschrijven via e-mail", - "Thread summary" : "Draad samenvatting", + "{name} Assistant" : "{name} Assistent", + "Thread summary" : "Samenvatting conversatie", "Go to latest message" : "Ga naar het laatste bericht", + "Newest message" : "Nieuwste bericht", + "This summary is AI generated and may contain mistakes." : "Deze samenvatting is door AI gegenereerd en kan fouten bevatten.", + "Please select languages to translate to and from" : "Selecteer talen om naar en uit te vertalen", "The message could not be translated" : "Het bericht kon niet vertaald worden", "Translation copied to clipboard" : "Vertaling gekopieerd naar klembord", "Translation could not be copied" : "Vertaling kon niet gekopieerd worden", @@ -505,7 +681,9 @@ OC.L10N.register( "Target language to translate into" : "Doeltaal om naar te vertalen", "Translate to" : "Vertaal naar", "Translating" : "Vertalen", + "This translation is generated using AI and may contain inaccuracies" : "Deze vertaling is met AI gegenereerd en kan onnauwkeurigheden bevatten", "Copy translated text" : "Kopieer vertaalde tekst", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Schakel het bewaren van de prullenbak uit door het veld leeg te laten of op 0 te zetten. Alleen e-mails die zijn verwijderd nadat het bewaren van de prullenbak is ingeschakeld, worden verwerkt.", "Could not remove trusted sender {sender}" : "Kon vertrouwde afzender niet verwijderen {sender}", "No senders are trusted at the moment." : "Er zijn nu geen vertrouwde afzenders.", "Untitled event" : "Naamloos evenement", @@ -518,14 +696,40 @@ OC.L10N.register( "{trainNr} from {depStation} to {arrStation}" : "{trainNr} van {depStation} naar {arrStation}", "Train from {depStation} to {arrStation}" : "Trein van {depStation} naar {arrStation}", "Train" : "Trein", + "Mark message as" : "Bericht markeren als", "Add flag" : "Markering toevoegen", + "Move into folder" : "Naar map verplaatsen", "Stop" : "Stop", + "Delete action" : "Verwijderactie", + "Answered" : "Beantwoord", "Deleted" : "Verwijderd", + "Flagged" : "Gemarkeerd", + "Seen" : "Gelezen", + "Enter flag" : "Voer vlag in", + "Stop ends all processing" : "Stop beëindigt alle verwerking", "Sender" : "Afzender", "Recipient" : "Ontvanger", + "Create a new mail filter" : "Een nieuwe mailfilter aanmaken", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Kies de headers die je wilt gebruiken om je filter te maken. In de volgende stap kun je de filtervoorwaarden verfijnen en de acties opgeven die moeten worden uitgevoerd op berichten die aan je criteria voldoen.", + "Delete filter" : "Filter verwijderen", + "Delete mail filter {filterName}?" : "Mailfilter {filterName} verwijderen?", + "Are you sure to delete the mail filter?" : "Weet je zeker dat je de mailfilter wilt verwijderen?", + "New filter" : "Nieuw filter", + "Filter saved" : "Filter opgeslagen", + "Could not save filter" : "Kon filter niet opslaan", + "Filter deleted" : "Filter verwijderd", + "Could not delete filter" : "Kon filter niet verwijderen", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Neem de controle over je e-mailchaos. Filters helpen je om te prioriteren wat belangrijk is en rommel te elimineren.", + "Hang tight while the filters load" : "Even geduld terwijl de filters laden", + "Filter is active" : "Filter is actief", + "Filter is not active" : "Filter is niet actief", + "If all the conditions are met, the actions will be performed" : "Als aan alle voorwaarden is voldaan, worden de acties uitgevoerd", + "If any of the conditions are met, the actions will be performed" : "Als aan een van de voorwaarden is voldaan, worden de acties uitgevoerd", "Help" : "Hulp", "contains" : "bevat", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Een gedeeltelijke overeenkomst. Het veld komt overeen als de opgegeven waarde erin voorkomt. Bijvoorbeeld: \"report\" komt overeen met \"port\".", "matches" : "komt overeen", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Een patroonovereenkomst met jokertekens. Het symbool \"*\" staat voor een willekeurig aantal tekens (inclusief geen), terwijl \"?\" staat voor precies één teken. Bijvoorbeeld: \"*report*\" komt overeen met \"Business report 2024\".", "Enter subject" : "Invoeren onderwerp", "Enter sender" : "Invoeren afzender", "Enter recipient" : "Invoeren ontvanger", @@ -541,6 +745,9 @@ OC.L10N.register( "Edit quick action" : "Wijzig snelle actie", "Add quick action" : "Voeg snelle actie toe", "Quick action deleted" : "Snelle actie verwijderd", + "Failed to delete quick action" : "Kon snelle actie niet verwijderen", + "Failed to update quick action" : "Kon snelle actie niet bijwerken", + "Failed to update step in quick action" : "Kon stap in snelle actie niet bijwerken", "Quick action updated" : "Snelle actie opgewaardeerd", "Failed to create quick action" : "Aanmaken snelle actie mislukt", "Failed to add steps to quick action" : "Snelle actie onderdelen aanmaken mislukt", @@ -576,16 +783,27 @@ OC.L10N.register( "Add new config" : "Toevoegen nieuwe configuratie", "Provision all accounts" : "Inrichten alle accounts", "Allow additional mail accounts" : "Aanvaard additionele e-mail accounts", + "Allow additional Mail accounts from User Settings" : "Aanvullende Mail-accounts toestaan via gebruikersinstellingen", "Enable text processing through LLMs" : "Activeer tekstverwerking door LLM's", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "De Mail-app kan gebruikersgegevens verwerken met behulp van het ingestelde grote taalmodel en assistentiefuncties bieden zoals berichten samenvattingen, slimme antwoorden en gebeurtenisagenda's.", "Enable LLM processing" : "Activeer LLM verwerking", "Enable classification by importance by default" : "Activeer classificatie standaard volgens belang", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "De Mail-app kan binnenkomende e-mails op belang classificeren met behulp van machine learning. Deze functie is standaard ingeschakeld, maar kan hier standaard worden uitgeschakeld. Individuele gebruikers kunnen de functie nog steeds in- of uitschakelen voor hun accounts.", "Enable classification of important mails by default" : "Activeer classificatie standaard van e-mails volgens belang", "Anti Spam Service" : "Anti-spam Service", "You can set up an anti spam service email address here." : "Je kunt hier een anti-spam service e-mail adres instellen.", "Any email that is marked as spam will be sent to the anti spam service." : "Elke e-mail die als spam wordt gemarkeerd wordt naar de anti-spam service verzonden.", "Gmail integration" : "Gmail integratie", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail staat gebruikers toe hun e-mail via IMAP te benaderen. Om veiligheidsredenen is deze toegang alleen mogelijk met een OAuth 2.0-verbinding of Google-accounts die tweefactorauthenticatie en app-wachtwoorden gebruiken.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Je moet een nieuwe client-ID registreren voor een \"webapplicatie\" in de Google Cloud-console. Voeg de URL {url} toe als geautoriseerde redirect-URI.", "Microsoft integration" : "Microsoft integratie", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft vereist dat je je e-mails via IMAP benadert met OAuth 2.0-authenticatie. Hiervoor moet je een app registreren bij Microsoft Entra ID, voorheen bekend als Microsoft Azure Active Directory.", "Redirect URI" : "Omleiden URI", + "For more details, please click here to open our documentation." : "Klik hier voor meer details om onze documentatie te openen.", + "User Interface Preference Defaults" : "Standaardvoorkeuren gebruikersinterface", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Deze instellingen worden gebruikt om de gebruikersinterface-voorkeuren vooraf in te stellen; ze kunnen door de gebruiker worden overschreven in de mailinstellingen", + "Message View Mode" : "Weergavemodus bericht", + "Show only the selected message" : "Alleen het geselecteerde bericht tonen", "Successfully set up anti spam email addresses" : "Anti-spam e-mail adressen succesvol ingesteld", "Error saving anti spam email addresses" : "Fout bij het opslaan van anti-spam e-mail adressen", "Successfully deleted anti spam reporting email" : "Anti-spam rapporteer e-mail succesvol toegevoegd", @@ -597,11 +815,15 @@ OC.L10N.register( "\"Mark as Spam\" Email Address" : "\"Markeer als Spam\" E-mail adres", "\"Mark Not Junk\" Email Address" : "\"Markeer geen spam\" E-mail Adres", "Reset" : "Herstellen", + "Google integration configured" : "Google-integratie ingesteld", + "Could not configure Google integration" : "Kon Google-integratie niet instellen", "Google integration unlinked" : "Google integratie ontkoppeld", + "Could not unlink Google integration" : "Kon Google-integratie niet ontkoppelen", "Client ID" : "Client-ID", "Client secret" : "Clientgeheim", "Unlink" : "Ontkoppelen", "Microsoft integration configured" : "Microsoft integratie ingesteld", + "Could not configure Microsoft integration" : "Kon Microsoft-integratie niet instellen", "Microsoft integration unlinked" : "Microsoft integratie ontkoppeld", "Could not unlink Microsoft integration" : "Ontkoppelen Microsoft integratie mislukt", "Tenant ID (optional)" : "Pachter ID (optioneel)", @@ -631,10 +853,12 @@ OC.L10N.register( "Unprovision & Delete Config" : "De-provision & verwijder config", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% en %EMAIL% zal worden vervangen door de gebruikers UID en e-mail", "With the settings above, the app will create account settings in the following way:" : "Met de bovenstaande instellingen maakt de app op de volgende manier accountinstellingen:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Het opgegeven PKCS #12-certificaat moet ten minste één certificaat en precies één privésleutel bevatten.", "Failed to import the certificate. Please check the password." : "Importeren van het certificaat mislukt. Controleer het wachtwoord.", "Certificate imported successfully" : "Certificaat succesvol geïmporteerd", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Importeren van het certificaat is mislukt. Controleer of de privaatsleutel overeenkomt met het certificaat en niet beschermd is door een beveiligingszin.", "Failed to import the certificate" : "Importeren van het certificaat mislukt", + "Import S/MIME certificate" : "Importeer S/MIME certificaat", "S/MIME certificates" : "S/MIME certificaten", "Certificate name" : "Certificaat naam", "E-mail address" : "E-mailadres", @@ -642,7 +866,6 @@ OC.L10N.register( "Delete certificate" : "Verwijder certificaat", "No certificate imported yet" : "Nog geen certificaat geïmporteerd", "Import certificate" : "Importeer certificaat", - "Import S/MIME certificate" : "Importeer S/MIME certificaat", "PKCS #12 Certificate" : "PKCS #12 Certificaat", "PEM Certificate" : "PEM certificaat", "Certificate" : "Certificaat", @@ -654,6 +877,8 @@ OC.L10N.register( "Failed to delete text block" : "Verwijderen tekstblok mislukt", "Text block shared with {sharee}" : "Tekstblok gedeeld met {sharee}", "Failed to share text block with {sharee}" : "Delen van de tekstblok met {sharee} mislukt", + "Share deleted for {name}" : "Gedeelde toegang verwijderd voor {name}", + "Failed to delete share with {name}" : "Kon gedeelde toegang met {name} niet verwijderen", "Guest" : "Gast", "Group" : "Groep", "Failed to save text block" : "Tekstblok kon niet worden opgeslagen", @@ -678,13 +903,16 @@ OC.L10N.register( "Junk" : "Ongewenst", "Sent" : "Verzonden", "Trash" : "Verwijderen", + "Connect OAUTH2 account" : "OAUTH2-account verbinden", "Error while sharing file" : "Fout bij delen bestand", "{from}\n{subject}" : "{from}\n{subject}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n nieuw bericht \nvan {from}","%n nieuwe berichten \nvan {from}"], "Nextcloud Mail" : "Nextcloud E-mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Er is al een bericht in bewerking. Alle niet-opgeslagen wijzigingen gaan verloren als je doorgaat!", "Discard changes" : "Negeer wijzigingen", "Discard unsaved changes" : "Negeer niet opgeslagen wijzigingen", "Keep editing message" : "Blijf bij het wijzigen van het bericht", + "(All or part of this reply was generated by AI)" : "(Dit antwoord is geheel of gedeeltelijk door AI gegenereerd)", "Attachments were not copied. Please add them manually." : "Bijlagen zijn niet gekopiëerd. Voeg ze handmatig toe.", "Could not create snooze mailbox" : "Kon geen sluimer e-mail map aanmaken", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Het bericht kon niet worden geladen. Het concept is misschien niet meer beschikbaar. Ververs de pagina en probeer opnieuw.", @@ -699,10 +927,10 @@ OC.L10N.register( "Could not load the desired message" : "Kon het gewenste bericht niet laden", "Could not load the message" : "Kon het bericht niet laden", "Error loading message" : "Fout bij laden bericht", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Berichten zullen automatisch als belangrijk gemarkeerd worden, gebaseerd op met welke berichten je gewerkt hebt of welke je als belangrijk hebt gemarkeerd. In het begin moet je misschien handmatig de belangrijkheid aanpassen om het systeem in te leren, maar het wordt beter met de tijd.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Door jouw verzonden berichten die een antwoord vereisen maar die na enkele dagen nog geen reactie hebben ontvangen worden hier getoond.", - "Mark all messages of this folder as read" : "Markeer alle berichten in deze map als gelezen", - "Last 7 days" : "Laatste 7 dagen", - "From me" : "Van mij" + "Add share link from Files" : "Voeg een gedeelde koppeling toe vanuit Bestanden", + "Choose a file to add as attachment" : "Kies een bestand om als bijlage toe te voegen", + "Choose a file to share as a link" : "Kies een bestand om als link te delen", + "Delegated access to {userId}" : "Toegang gedelegeerd aan {userId}", + "Revoked access for {userId}" : "Toegang ingetrokken voor {userId}" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/nl.json b/l10n/nl.json index 1d9f428672..0ce33fcfc4 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -12,6 +12,10 @@ "Mail" : "E-mail", "You are reaching your mailbox quota limit for {account_email}" : "Je nadert je mailbox-quotumlimiet voor {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Je gebruikt momenteel {percentage} van je mailbox-opslag. Gelieve ruimte vrij te maken door onnodige mails te verwijderen.", + "{account_email} has been delegated to you" : "{account_email} is aan je gedelegeerd", + "{user} delegated {account} to you" : "{user} heeft {account} aan je gedelegeerd", + "{account_email} is no longer delegated to you" : "{account_email} is niet langer aan je gedelegeerd", + "{user} revoked delegation for {account}" : "{user} heeft de delegatie voor {account} ingetrokken", "Mail Application" : "Mailtoepassing", "Mails" : "Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mailadres van afzender: %1$s staat niet in het adresboek, maar de naam van de afzender: %2$s staat wel in het adresboek met het volgende e-mailadres: %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP poort", "SMTP User" : "SMTP gebruikersnaam", "SMTP Password" : "SMTP wachtwoord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Om het Google account te laten werken met deze applicatie moet de tweede-factor authenticatie voor Google worden geactiveerd en een applicatie wachtwoord aangemaakt.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google vereist OAuth-authenticatie. Als je Nextcloud-beheerder Google OAuth niet heeft ingesteld, kun je in plaats daarvan een Google-app-wachtwoord gebruiken.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft vereist OAuth-authenticatie. Vraag je Nextcloud-beheerder om Microsoft OAuth in te stellen in de beheerinstellingen.", "Account settings" : "Accountinstellingen", "Aliases" : "Aliassen", "Alias to S/MIME certificate mapping" : "Alias voor S/MIME certificaat toewijzing", @@ -115,16 +120,18 @@ "Mail server" : "Mailserver", "Sieve server" : "Sieve server", "Folder search" : "Zoeken in map", + "Alias name" : "Bijnaam", + "Email address" : "E-mailadres", "Update alias" : "Bijwerken alias", "Rename alias" : "Wijzig alias", "Show update alias form" : "Toon formulier Bijwerken alias", "Delete alias" : "Verwijderen alias", "Go back" : "Ga terug", "Change name" : "Naam veranderen", - "Email address" : "E-mailadres", "Add alias" : "Voeg bijnaam toe", "Create alias" : "Aanmaken alias", "Cancel" : "Annuleren", + "Search the body of messages in priority Inbox" : "Zoek in de inhoud van berichten in de prioriteits-inbox", "Activate" : "Activeer", "Make mails available to Context Chat" : "Stel e-mails beschikbaar aan Context Chat", "Remind about messages that require a reply but received none" : "Waarschuw over berichten die een reactie vereisen maar nog geen hebben ontvangen", @@ -133,10 +140,13 @@ "Mail settings" : "E-mail instellingen", "General" : "Algemeen", "Set as default mail app" : "Als standaard e-mail applicatie instellen", + "{email} (delegated)" : "{email} (gedelegeerd)", "Add mail account" : "Voeg e-mailaccount toe", "Appearance" : "Uiterlijk", - "Show all messages in thread" : "Toon alle berichten in een draad", + "Show all messages in thread" : "Toon alle berichten", "When off, only the selected message will be shown" : "Indien uitgeschakeld, zullen enkel de geselecteerde berichten worden getoond", + "Sort favorites up" : "Favorieten bovenaan sorteren", + "When on, favorite messages will be sorted to the top of folders" : "Indien ingeschakeld worden favoriete berichten bovenaan de mappen gesorteerd", "Layout" : "Layout", "Vertical split" : "Verticale splitsing", "Horizontal split" : "Horizontale splitsing", @@ -145,15 +155,20 @@ "Sorting" : "Sorteren", "Newest first" : "Nieuwste eerst", "Oldest first" : "Oudste eerst", + "New text block" : "Nieuw tekstblok", + "Title of the text block" : "Titel van het tekstblok", + "Content of the text block" : "Inhoud van het tekstblok", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatars van Gravatar en favicons", + "Reply position" : "Antwoordpositie", "Top" : "Boven", "Bottom" : "Onder", "Text blocks" : "Tekstblokken", "Reusable pieces of text that can be inserted in messages" : "Tekstblokken voor hergebruik in berichten. ", - "New text block" : "Nieuw tekstblok", "Shared with me" : "Gedeeld met mij", "Privacy" : "Privacy", "Data collection" : "Gegevensverzameling", + "Allow the app to collect and process data locally to adapt to your preferences" : "De app toestaan om lokaal gegevens te verzamelen en te verwerken om zich aan je voorkeuren aan te passen", "Always show images from" : "Toon altijd afbeeldingen van", "Security" : "Beveiliging", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Beheer je interne adressen en domeinen zodat bekende contacten ongemarkeerd blijven", @@ -165,6 +180,8 @@ "Install the browser extension" : "Installeer the browser uitbreiding", "Step 2" : "Stap 2", "Enable for the current domain" : "Activeer voor het huidige domein", + "Assistance features" : "Assistentiefuncties", + "Context Chat integration" : "Context Chat-integratie", "Compose new message" : "Opstellen nieuw bericht", "Newer message" : "Recenter bericht", "Older message" : "Ouder bericht", @@ -175,11 +192,12 @@ "Search" : "Zoeken", "Send" : "Versturen", "Refresh" : "Verversen", + "Heading1" : "Kop1", + "Heading2" : "Kop2", + "Heading3" : "Kop3", "About" : "Over", "Acknowledgements" : "Erkenningen", - "Title of the text block" : "Titel van het tekstblok", - "Content of the text block" : "Inhoud van het tekstblok", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Deze applicatie bevat CKEditor, een open-source editor. Copyright © CKEditor-bijdragers. Gelicentieerd onder GPLv2.", "Automatically create tentative appointments in calendar" : "Maak automatisch voorlopige afspraken aan in de agenda", "No certificate" : "Geen certificaat", "Certificate updated" : "Certificaat opgewaardeerd", @@ -223,7 +241,6 @@ "Disable formatting" : "Opmaak uitschakelen", "Upload attachment" : "Bijlage uploaden", "Add attachment from Files" : "Bijlage toevoegen vanuit Bestanden", - "Add share link from Files" : "Voeg een gedeelde koppeling toe vanuit Bestanden", "Smart picker" : "Smart Picker", "Request a read receipt" : "Vraag een leesbevestiging", "Sign message with S/MIME" : "Onderteken het bericht met S/MIME", @@ -235,13 +252,29 @@ "Monday morning" : "Maandagochtend", "Custom date and time" : "Aangepaste datum en tijd", "Enter a date" : "Voeg een datum toe", - "Choose" : "Kies", + "Remove attachment {fileName}" : "Verwijder bijlage {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["De bijlage overschrijdt de toegestane omvang van {size}. Deel de bestanden in plaats daarvan via een link.","De bijlagen overschrijden de toegestane omvang van {size}. Deel de bestanden in plaats daarvan via een link."], - "Choose a file to add as attachment" : "Kies een bestand om als bijlage toe te voegen", - "Choose a file to share as a link" : "Kies een bestand om als link te delen", + "Choose a file" : "Kies een bestand", "_{count} attachment_::_{count} attachments_" : ["{count} bijlagen","{count} bijlagen"], "Untitled message" : "Naamloos bericht", + "Expand composer" : "Opsteller uitvouwen", + "Close composer" : "Opsteller sluiten", "Confirm" : "Bevestigen", + "Delegate access" : "Toegang delegeren", + "Revoke" : "Intrekken", + "{userId} will no longer be able to act on your behalf" : "{userId} kan niet langer namens jou handelen", + "Could not fetch delegates" : "Kon gedelegeerden niet ophalen", + "Delegated access to {displayName}" : "Toegang gedelegeerd aan {displayName}", + "Could not delegate access" : "Kon toegang niet delegeren", + "Revoked access for {displayName}" : "Toegang ingetrokken voor {displayName}", + "Could not revoke delegation" : "Kon delegatie niet intrekken", + "Delegation" : "Delegatie", + "Allow users to send, receive, and delete mail on your behalf" : "Gebruikers toestaan om namens jou e-mail te versturen, ontvangen en verwijderen", + "Revoke access" : "Toegang intrekken", + "Add delegate" : "Gedelegeerde toevoegen", + "Select a user" : "Selecteer een gebruiker", + "They will be able to send, receive, and delete mail on your behalf" : "Zij kunnen namens jou e-mail versturen, ontvangen en verwijderen", + "Revoke access?" : "Toegang intrekken?", "Tag: {name} deleted" : "Etiket: {name} verwijderd", "An error occurred, unable to delete the tag." : "Er is een fout opgetreden, etiket kan niet verwijderd worden.", "The tag will be deleted from all messages." : "Dit etiket wordt verwijderd uit alle berichten.", @@ -249,6 +282,7 @@ "Rich text" : "Rijke tekst", "No messages in this folder" : "Geen berichten in deze map", "No messages" : "Geen berichten", + "Choose" : "Kies", "Blind copy recipients only" : "Alleen ontvangers van blinde kopie", "No subject" : "Geen onderwerp", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Concept:{markup-end} {subject}", @@ -260,13 +294,17 @@ "Set reminder for this weekend" : "Herinnering voor het weekend instellen", "Next week – {timeLocale}" : "Volgende week - {timeLocale}", "Set reminder for next week" : "Herinnering instellen voor volgende week", + "Could not apply tag, configured tag not found" : "Kon label niet toepassen, ingesteld label niet gevonden", + "Could not move thread, destination mailbox not found" : "Kon niet worden verplaatst, doelpostvak niet gevonden", + "Could not execute quick action" : "Kon snelle actie niet uitvoeren", + "Quick action executed" : "Snelle actie uitgevoerd", "No trash folder configured" : "Geen prullenbak geconfigureerd", "Could not delete message" : "Kon bericht niet verwijderen", "Could not archive message" : "Kan bericht niet archiveren", - "Thread was snoozed" : "Sluimerende draad", - "Could not snooze thread" : "Draad kan niet sluimeren", - "Thread was unsnoozed" : "Draad is gewekt", - "Could not unsnooze thread" : "Kan draad niet wekken", + "Thread was snoozed" : "Sluimerende conversatie", + "Could not snooze thread" : "De conversatie kon niet worden gesluimerd", + "Thread was unsnoozed" : "De conversatie is weer zichtbaar gemaakt", + "Could not unsnooze thread" : "Kon de conversatie niet uit de slaapstand halen", "This summary was AI generated" : "Deze samenvatting is door AI gegenereerd", "Encrypted message" : "Versleuteld bericht", "This message is unread" : "Dit is een ongelezen bericht", @@ -280,12 +318,10 @@ "Edit tags" : "Bewerken tags", "Snooze" : "Sluimeren", "Unsnooze" : "Gewekt", - "Move thread" : "Verplaats draadje", + "Move thread" : "Verplaats", "Move Message" : "Verplaats bericht", - "Archive thread" : "Gearchiveerde draad", + "Archive thread" : "Archiveren", "Archive message" : "Archiveer bericht", - "Delete thread" : "Verwijder draadje", - "Delete message" : "Bericht verwijderen", "More actions" : "Meer acties", "Back" : "Terug", "Set custom snooze" : "Instellen sluimeren", @@ -293,6 +329,8 @@ "Reply with meeting" : "Antwoord met vergadering", "Create task" : "Aanmaken taak", "Download message" : "Bericht ophalen", + "Delete thread" : "Verwijderen", + "Delete message" : "Bericht verwijderen", "Back to all actions" : "Terug naar alle acties", "Manage quick actions" : "Beheer snelle acties", "Load more" : "Laad meer", @@ -303,18 +341,24 @@ "_Unfavorite {number}_::_Unfavorite {number}_" : ["Favoriet weghalen {number}","Favoriet weghalen {number}"], "_Favorite {number}_::_Favorite {number}_" : ["Favoriet maken {number}","Favoriet maken {number}"], "_Unselect {number}_::_Unselect {number}_" : ["De-selecteren {number}","De-selecteren {number}"], - "_Move {number} thread_::_Move {number} threads_" : ["Verplaatsen {number} draadje","Verplaatsen {number} draadjes"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["{number} als spam markeren","{number} als spam markeren"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["{number} als geen spam markeren","{number} als geen spam markeren"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Labels bewerken voor {number}","Labels bewerken voor {number}"], + "_Move {number} thread_::_Move {number} threads_" : ["Verplaatsen {number} draadje","Verplaats {number} conversaties"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Doorsturen {number} als bijlage","Doorsturen {number} als bijlage"], "Mark as unread" : "Markeren als ongelezen", "Mark as read" : "Markeren als gelezen", "Mark as unimportant" : "Markeren als onbelangrijk", "Mark as important" : "Markeren als belangrijk", "Report this bug" : "Meld deze fout", + "This description was generated by AI." : "Deze beschrijving is door AI gegenereerd.", "Event created" : "Afspraak aangemaakt", "Could not create event" : "Kon afspraak niet creëren", "Create event" : "Creëer afspraak", + "Title" : "Titel", "All day" : "Alle dagen", "Attendees" : "Deelnemers", + "You can only invite attendees if your account has an email address set" : "Je kunt alleen deelnemers uitnodigen als er een e-mailadres voor je account is ingesteld", "Select calendar" : "Selecteer een kalender", "Description" : "Omschrijving", "Create" : "Aanmaken", @@ -339,12 +383,18 @@ "More options" : "Meer opties", "This message has an attached invitation but the invitation dates are in the past" : "Dit bericht bevat een uitnodiging maar de datum voor de uitnodiging is verstreken", "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Dit bericht bevat een uitnodiging maar de uitnodiging maar geen enkele deelnemer is met een e-mail adres bekent", + "Could not remove internal address {sender}" : "Kon intern adres {sender} niet verwijderen", + "Could not add internal address {address}" : "Kon intern adres {address} niet toevoegen", "individual" : "individueel", "domain" : "domein", "Remove" : "Verwijderen", "Add internal address" : "Voeg een intern adres toe", "Add internal email or domain" : "Voeg een interne e-mail of domein toe", "Itinerary for {type} is not supported yet" : "route voor {type} wordt nog niet ondersteund", + "To archive a message please configure an archive folder in account settings" : "Om een bericht te archiveren, stel je een archiefmap in bij de accountinstellingen", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Je hebt geen toestemming om dit bericht naar de archiefmap te verplaatsen en/of dit bericht uit de huidige map te verwijderen", + "Your IMAP server does not support storing the seen/unseen state." : "Je IMAP-server ondersteunt het opslaan van de gelezen/ongelezen-status niet.", + "Could not mark message as seen/unseen" : "Kon bericht niet als gelezen/ongelezen markeren", "Last hour" : "Laatste uur", "Today" : "Vandaag", "Yesterday" : "Gisteren", @@ -355,45 +405,85 @@ "Indexing your messages. This can take a bit longer for larger folders." : "Berichten aan het indexeren. Dit kan wat langer duren voor grote mappen. ", "Choose target folder" : "Kies doelmap…", "No more submailboxes in here" : "Niet meer subpostbussen hier", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Berichten worden automatisch als belangrijk gemarkeerd met behulp van AI. Het systeem leert van welke berichten je opent of als belangrijk markeert. In het begin moet je het belang mogelijk handmatig aanpassen om het te trainen, maar het wordt na verloop van tijd beter", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Berichten die je als favoriet hebt gemarkeerd, worden bovenaan de mappen getoond. Je kunt dit gedrag uitschakelen in de app-instellingen", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "AI identificeert berichten die je hebt verzonden en waarop waarschijnlijk een antwoord nodig is maar dat na een paar dagen is uitgebleven, en toont ze hier", "Favorites" : "Favorieten", + "Favorites info" : "Info over favorieten", + "Load more favorites" : "Meer favorieten laden", "Follow up" : "Opvolgen", + "Follow up info" : "Info over opvolging", + "Load more follow ups" : "Meer opvolgingen laden", "Important info" : "Belangrijke informatie", + "Load more important messages" : "Meer belangrijke berichten laden", "Other" : "Ander", + "Load more other messages" : "Meer overige berichten laden", "Could not send mdn" : "Kon mdn niet versturen", "The sender of this message has asked to be notified when you read this message." : "De afzender van dit bericht heeft om een leesbevestiging gevraagd.", "Notify the sender" : "Informeer de afzender", "You sent a read confirmation to the sender of this message." : "Je hebt een leesbevestiging aan de afzender van dit bericht gestuurd.", + "Message was snoozed" : "Bericht is gesnoozed", + "Could not snooze message" : "Kon bericht niet snoozen", + "Message was unsnoozed" : "Snooze van bericht is opgeheven", + "Could not unsnooze message" : "Kon snooze van bericht niet opheffen", + "Could not generate direct link: Message ID is missing" : "Er kon geen directe link worden gegenereerd: het bericht-ID ontbreekt", + "Direct link copied to clipboard" : "Directe link gekopieerd naar klembord", + "Copy direct link" : "Directe link kopiëren", "Forward" : "Doorsturen", + "Only for message recipients" : "Alleen voor ontvangers van het bericht", + "Link copied" : "Link gekopieerd", "Move message" : "Verplaats bericht", "Translate" : "Vertaal", + "Forward message as attachment" : "Bericht als bijlage doorsturen", "View source" : "Bekijk bron", + "Print message" : "Bericht afdrukken", + "Create mail filter" : "Mailfilter aanmaken", "Download thread data for debugging" : "Download gegevens voor foutopsporing", + "Suggested replies are using AI" : "Voorgestelde antwoorden maken gebruik van AI", "Message body" : "Berichttekst", + "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Waarschuwing: de S/MIME-handtekening van dit bericht is niet geverifieerd. De afzender doet zich mogelijk voor als iemand anders!", + "AI info" : "AI-info", "Unnamed" : "Onbenoemd", "Embedded message" : "Ingebed bericht", + "Attachment saved to Files" : "Bijlage opgeslagen in Bestanden", + "Attachment could not be saved" : "Bijlage kon niet worden opgeslagen", + "calendar imported" : "agenda geïmporteerd", "Choose a folder to store the attachment in" : "Kies een map op de bijlage in op te slaan", "Import into calendar" : "Toevoegen aan agenda", "Download attachment" : "Download bijlage", "Save to Files" : "Opslaan in Bestanden", + "Attachments saved to Files" : "Bijlagen opgeslagen in Bestanden", + "Error while saving attachments" : "Fout bij opslaan van bijlagen", + "View fewer attachments" : "Minder bijlagen weergeven", "Choose a folder to store the attachments in" : "Selecteer een folder waarin de bijlagen opgeslagen moeten worden", "Save all to Files" : "Sla alles op in Bestanden", "Download Zip" : "Download Zip", + "_View {count} more attachment_::_View {count} more attachments_" : ["Nog {count} bijlage weergeven","Nog {count} bijlagen weergeven"], "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Dit bericht is versleuteld met PGP. Installeer Mailvelope om het te ontcijferen.", "The images have been blocked to protect your privacy." : "De afbeeldingen zijn geblokkeerd om je privacy te beschermen", - "Show images" : "Tonen afbeeldingen", - "Show images temporarily" : "Tonen afbeeldingen tijdelijk", - "Always show images from {sender}" : "Afbeeldingen van {sender} altijd tonen", - "Always show images from {domain}" : "Afbeeldingen van {domain} altijd tonen", + "Show images" : "Afbeeldingen weergeven", + "Show images temporarily" : "Afbeeldingen tijdelijk weergeven", + "Always show images from {sender}" : "Afbeeldingen van {sender} altijd weergeven", + "Always show images from {domain}" : "Afbeeldingen van {domain} altijd weergeven", "Message frame" : "Berichtenkader", "Quoted text" : "Geciteerde tekst", "Move" : "Verplaatsen", "Moving" : "Verplaatsen", - "Moving thread" : "Verplaatsen draadje", - "Moving message" : "Verplaatsen bericht", + "Moving thread" : "Verplaatsen", + "Moving message" : "Bericht verplaatsen", + "This account cannot connect" : "Dit account kan geen verbinding maken", + "Connection failed. Please verify your information and try again" : "Verbinding mislukt. Controleer je gegevens en probeer het opnieuw", + "Change password" : "Wachtwoord wijzigen", + "Used quota: {quota}% ({limit})" : "Gebruikt quotum: {quota}% ({limit})", + "Used quota: {quota}%" : "Gebruikt quotum: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Kan mailbox niet creëren. De naam bevat waarschijnlijk ongeldige karakters. Probeer een andere naam.", "Remove account" : "Verwijder account", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Het account voor {email} en alle gecachte data zal verwijderd worden van Nextcloud, maar niet van je e-mailprovider.", "Remove {email}" : "Verwijder {email}", + "could not delete account" : "kon account niet verwijderen", + "Provisioned account is disabled" : "Geprovisioneerd account is uitgeschakeld", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Log in met een wachtwoord om dit account in te schakelen. De huidige sessie gebruikt wachtwoordloze authenticatie, bijv. SSO of WebAuthn.", + "Delegate account" : "Account delegeren", "Show only subscribed folders" : "Toon alleen geabonneerde mappen", "Add folder" : "Map toevoegen", "Folder name" : "Mapnaam", @@ -406,11 +496,14 @@ "_{total} message_::_{total} messages_" : ["{total} bericht","{total} berichten"], "_{unread} unread of {total}_::_{unread} unread of {total}_" : ["{unread} ongelezen van de {total}","{unread} ongelezen van de {total}"], "Loading …" : "Aan het laden...", + "All messages in mailbox will be deleted." : "Alle berichten in het postvak worden verwijderd.", + "Clear mailbox {name}" : "Postvak {name} legen", "Clear folder" : "Map leegmaken", "The folder and all messages in it will be deleted." : "De map en alle berichten erin worden verwijderd.", "Delete folder" : "Map verwijderen", "Delete folder {name}" : "Verwijder map {name}", "An error occurred, unable to rename the mailbox." : "Er is een fout opgetreden, de naam van de mailbox kon niet worden gewijzigd.", + "Please wait 10 minutes before repairing again" : "Wacht 10 minuten voordat je opnieuw repareert", "Mark all as read" : "Alles als gelezen markeren", "Add subfolder" : "Toevoegen submap", "Rename" : "Hernoemen", @@ -420,80 +513,163 @@ "Clear locally cached data, in case there are issues with synchronization." : "Maak de lokale gegevenscache schoon, als er problemen zijn bij synchronisatie.", "Subscribed" : "Geabonneerd", "Sync in background" : "Synchroniseer op de achtergrond", - "Outbox" : "Uitbak", + "Delete all messages" : "Alle berichten verwijderen", + "Outbox" : "Postvak UIT", + "Translate this message to {language}" : "Dit bericht vertalen naar {language}", "New message" : "Nieuw bericht", "Edit message" : "Bewerk bericht", "Draft" : "Concept", "Reply" : "Antwoord", + "Message saved" : "Bericht opgeslagen", + "Failed to save message" : "Bericht opslaan mislukt", + "Failed to save draft" : "Concept opslaan mislukt", + "attachment" : "bijlage", + "attached" : "bijgevoegd", + "No \"sent\" folder configured. Please pick one in the account settings." : "Geen map voor verzonden berichten ingesteld. Kies er een bij de accountinstellingen.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Je probeert een e-mail te versturen met veel ontvangers in Aan en /of Cc. Overweeg om Bcc te gebruiken om de adressen van de ontvangers voor elkaar te verbergen.", + "Your message has no subject. Do you want to send it anyway?" : "Je bericht heeft geen onderwerp. Wil je het toch versturen?", + "You mentioned an attachment. Did you forget to add it?" : "Je noemde een bijlage. Ben je vergeten die toe te voegen?", + "Message discarded" : "Bericht verwijderd", + "Could not discard message" : "Kon bericht niet verwijderen", + "Maximize composer" : "Opsteller maximaliseren", + "Show recipient details" : "Ontvangerdetails tonen", + "Hide recipient details" : "Ontvangerdetails verbergen", + "Minimize composer" : "Opsteller minimaliseren", "Error sending your message" : "Fout bij het versturen van jouw bericht", "Retry" : "Opnieuw proberen", "Warning sending your message" : "Waarschuwing bij het versturen van jouw bericht", "Send anyway" : "Toch verzenden", + "Welcome to {productName} Mail" : "Welkom bij {productName} Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Begin met het schrijven van een bericht door hieronder te klikken, of selecteer een bestaand bericht om de inhoud weer te geven", + "Autoresponder off" : "Automatisch antwoord uit", + "Autoresponder on" : "Automatisch antwoord aan", + "Autoresponder follows system settings" : "Automatisch antwoord volgt systeeminstellingen", + "The autoresponder follows your personal absence period settings." : "Het automatische antwoord volgt je persoonlijke afwezigheidsinstellingen.", + "Edit absence settings" : "Afwezigheidsinstellingen bewerken", "First day" : "Eerste dag", + "Last day (optional)" : "Laatste dag (optioneel)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} wordt vervangen door het onderwerp van het bericht waarop je antwoordt", "Message" : "Bericht", "Oh Snap!" : "O nee!", + "Save autoresponder" : "Automatisch antwoord opslaan", + "Could not open outbox" : "Kon postvak uit niet openen", + "Pending or not sent messages will show up here" : "Berichten die in behandeling zijn of niet zijn verzonden, verschijnen hier", "Could not copy to \"Sent\" folder" : "Kon niet naar \"Verzonden\" map kopiëren", + "Mail server error" : "Mailserverfout", + "Message could not be sent" : "Bericht kon niet worden verzonden", + "Message deleted" : "Bericht verwijderd", "Copy to \"Sent\" Folder" : "Kopieer naar \"Verzonden\" map", "Copy to Sent Folder" : "Kopieer naar Verzonden map", + "Phishing email" : "Phishing-e-mail", + "This email might be a phishing attempt" : "Deze e-mail is mogelijk een phishingpoging", + "Hide suspicious links" : "Verdachte links verbergen", + "Show suspicious links" : "Verdachte links tonen", + "link text" : "linktekst", + "Copied email address to clipboard" : "E-mailadres naar klembord gekopieerd", + "Could not copy email address to clipboard" : "Kon e-mailadres niet naar klembord kopiëren", "Contacts with this address" : "Contactpersonen met dit adres", "Add to Contact" : "Toevoegen aan contactpersoon", "New Contact" : "Nieuwe contactpersoon", "Copy to clipboard" : "Kopiëren naar het klembord", + "Contact name …" : "Contactnaam …", "Add" : "Toevoegen", "Show less" : "Toon minder", "Show more" : "Toon meer", "Clear" : "Terug", "Search in folder" : "Zoek in map", + "Open search modal" : "Zoekvenster openen", "Close" : "Sluit", + "Search parameters" : "Zoekparameters", + "Search subject" : "Onderwerp doorzoeken", "Body" : "Body", + "Search body" : "Inhoud doorzoeken", "Date" : "Datum", + "Pick a start date" : "Kies een startdatum", + "Pick an end date" : "Kies een einddatum", + "Select senders" : "Selecteer afzenders", + "Select recipients" : "Selecteer ontvangers", + "Select CC recipients" : "Selecteer CC-ontvangers", + "Select BCC recipients" : "Selecteer BCC-ontvangers", "Tags" : "Tags", "Select tags" : "Kies tags", + "Marked as" : "Gemarkeerd als", + "Has attachments" : "Heeft bijlagen", + "Mentions me" : "Noemt mij", + "Has attachment" : "Heeft bijlage", + "To me" : "Aan mij", + "Enable mail body search" : "Zoeken in berichtinhoud inschakelen", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve is een krachtige taal voor het schrijven van filters voor je postvak. Je kunt de sieve-scripts in Mail beheren als je e-maildienst dit ondersteunt. Sieve is ook vereist om Automatisch antwoord en Filters te gebruiken.", + "Enable sieve filter" : "Sieve-filter inschakelen", + "Sieve host" : "Sieve-host", + "Sieve security" : "Sieve-beveiliging", "Sieve Port" : "Sieve poort", + "Sieve credentials" : "Sieve-inloggegevens", "IMAP credentials" : "IMAP inloggegevens", "Custom" : "Maatwerk", "Sieve User" : "Sieve gebruiker", "Sieve Password" : "Sieve Wachtwoord", + "Oh snap!" : "Oeps!", "Save sieve settings" : "Bewaar sieve instellingen", "The syntax seems to be incorrect:" : "De syntaxis lijkt niet juist", "Save sieve script" : "Bewaar sieve-script", "Signature …" : "Handtekening …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Je handtekening is groter dan 2 MB. Dit kan de prestaties van je editor beïnvloeden.", "Save signature" : "Handtekening opslaan", "Place signature above quoted text" : "Plaats handtekening boven de aangehaalde tekst", "Message source" : "Bericht brontekst", "An error occurred, unable to rename the tag." : "Er is een fout opgetreden, kan tag niet hernoemen", "Edit name or color" : "Wijzig naam of kleur", + "Saving new tag name …" : "Nieuwe labelnaam opslaan …", "Delete tag" : "Verwijderen tag", + "Set tag" : "Label instellen", + "Unset tag" : "Label opheffen", + "Tag name is a hidden system tag" : "Labelnaam is een verborgen systeemlabel", "Tag already exists" : "Markering bestaat al", "Tag name cannot be empty" : "Etiketnaam kan niet leeg zijn", "An error occurred, unable to create the tag." : "Er trad een fout op, tag kon niet worden gecreëerd.", "Add default tags" : "Voeg standaard tags toe", "Add tag" : "Toevoegen tag", + "Saving tag …" : "Label opslaan …", + "Task created" : "Taak aangemaakt", "Could not create task" : "Er kon geen taak worden aangemaakt", - "Could not load your message thread" : "Kon je berichtendraad niet laden", - "The thread doesn't exist or has been deleted" : "De draad bestaat niet of is verwijderd", + "No calendars with task list support" : "Geen agenda's met ondersteuning voor takenlijsten", + "Summarizing thread failed." : "Samenvatten van conversatie mislukt.", + "Could not load your message thread" : "Kon je berichten niet laden", + "The thread doesn't exist or has been deleted" : "De conversatie bestaat niet of is verwijderd", "Email was not able to be opened" : "E-mail kon niet worden geopend", "Print" : "Afdrukken", + "Could not print message" : "Kon bericht niet afdrukken", + "Loading thread" : "Conversatie laden", "Not found" : "Niet gevonden", "Encrypted & verified " : "Versleuteld en geverifieerd", "Signature verified" : "Handtekening geverifieerd", "Signature unverified " : "Handtekening niet geverifieerd", "This message was encrypted by the sender before it was sent." : "Dit bericht was versleuteld door de afzender voordat het was verzonden", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Dit bericht bevat een geverifieerde digitale S/MIME-handtekening. Het bericht is niet gewijzigd sinds het is verzonden.", "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Dit bericht bevat een niet geverifieerde digitale S/MIME handtekening. Het bericht kan gewijzigd zijn nadat het was verstuurd of de ondertekenaar is niet vertrouwd.", "Reply all" : "Beantwoord iedereen", "Unsubscribe request sent" : "Uitschrijvingsverzoek is verstuurd", "Could not unsubscribe from mailing list" : "Kon niet uitschrijven van de verzendlijst", + "Please wait for the message to load" : "Wacht tot het bericht is geladen", "Disable reminder" : "Verwijder herinnering", "Unsubscribe" : "Afmelden", "Reply to sender only" : "Antwoord alleen op afzender", "Mark as unfavorite" : "Verwijder als favoriet", "Mark as favorite" : "Markeer als favoriet", + "From:" : "Van:", + "To:" : "Aan:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Uitschrijven via koppeling", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Door je uit te schrijven stoppen alle berichten van de mailinglijst {sender}", "Send unsubscribe email" : "Verstuur een uitschrijving e-mail", "Unsubscribe via email" : "Uitschrijven via e-mail", - "Thread summary" : "Draad samenvatting", + "{name} Assistant" : "{name} Assistent", + "Thread summary" : "Samenvatting conversatie", "Go to latest message" : "Ga naar het laatste bericht", + "Newest message" : "Nieuwste bericht", + "This summary is AI generated and may contain mistakes." : "Deze samenvatting is door AI gegenereerd en kan fouten bevatten.", + "Please select languages to translate to and from" : "Selecteer talen om naar en uit te vertalen", "The message could not be translated" : "Het bericht kon niet vertaald worden", "Translation copied to clipboard" : "Vertaling gekopieerd naar klembord", "Translation could not be copied" : "Vertaling kon niet gekopieerd worden", @@ -503,7 +679,9 @@ "Target language to translate into" : "Doeltaal om naar te vertalen", "Translate to" : "Vertaal naar", "Translating" : "Vertalen", + "This translation is generated using AI and may contain inaccuracies" : "Deze vertaling is met AI gegenereerd en kan onnauwkeurigheden bevatten", "Copy translated text" : "Kopieer vertaalde tekst", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Schakel het bewaren van de prullenbak uit door het veld leeg te laten of op 0 te zetten. Alleen e-mails die zijn verwijderd nadat het bewaren van de prullenbak is ingeschakeld, worden verwerkt.", "Could not remove trusted sender {sender}" : "Kon vertrouwde afzender niet verwijderen {sender}", "No senders are trusted at the moment." : "Er zijn nu geen vertrouwde afzenders.", "Untitled event" : "Naamloos evenement", @@ -516,14 +694,40 @@ "{trainNr} from {depStation} to {arrStation}" : "{trainNr} van {depStation} naar {arrStation}", "Train from {depStation} to {arrStation}" : "Trein van {depStation} naar {arrStation}", "Train" : "Trein", + "Mark message as" : "Bericht markeren als", "Add flag" : "Markering toevoegen", + "Move into folder" : "Naar map verplaatsen", "Stop" : "Stop", + "Delete action" : "Verwijderactie", + "Answered" : "Beantwoord", "Deleted" : "Verwijderd", + "Flagged" : "Gemarkeerd", + "Seen" : "Gelezen", + "Enter flag" : "Voer vlag in", + "Stop ends all processing" : "Stop beëindigt alle verwerking", "Sender" : "Afzender", "Recipient" : "Ontvanger", + "Create a new mail filter" : "Een nieuwe mailfilter aanmaken", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Kies de headers die je wilt gebruiken om je filter te maken. In de volgende stap kun je de filtervoorwaarden verfijnen en de acties opgeven die moeten worden uitgevoerd op berichten die aan je criteria voldoen.", + "Delete filter" : "Filter verwijderen", + "Delete mail filter {filterName}?" : "Mailfilter {filterName} verwijderen?", + "Are you sure to delete the mail filter?" : "Weet je zeker dat je de mailfilter wilt verwijderen?", + "New filter" : "Nieuw filter", + "Filter saved" : "Filter opgeslagen", + "Could not save filter" : "Kon filter niet opslaan", + "Filter deleted" : "Filter verwijderd", + "Could not delete filter" : "Kon filter niet verwijderen", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Neem de controle over je e-mailchaos. Filters helpen je om te prioriteren wat belangrijk is en rommel te elimineren.", + "Hang tight while the filters load" : "Even geduld terwijl de filters laden", + "Filter is active" : "Filter is actief", + "Filter is not active" : "Filter is niet actief", + "If all the conditions are met, the actions will be performed" : "Als aan alle voorwaarden is voldaan, worden de acties uitgevoerd", + "If any of the conditions are met, the actions will be performed" : "Als aan een van de voorwaarden is voldaan, worden de acties uitgevoerd", "Help" : "Hulp", "contains" : "bevat", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Een gedeeltelijke overeenkomst. Het veld komt overeen als de opgegeven waarde erin voorkomt. Bijvoorbeeld: \"report\" komt overeen met \"port\".", "matches" : "komt overeen", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Een patroonovereenkomst met jokertekens. Het symbool \"*\" staat voor een willekeurig aantal tekens (inclusief geen), terwijl \"?\" staat voor precies één teken. Bijvoorbeeld: \"*report*\" komt overeen met \"Business report 2024\".", "Enter subject" : "Invoeren onderwerp", "Enter sender" : "Invoeren afzender", "Enter recipient" : "Invoeren ontvanger", @@ -539,6 +743,9 @@ "Edit quick action" : "Wijzig snelle actie", "Add quick action" : "Voeg snelle actie toe", "Quick action deleted" : "Snelle actie verwijderd", + "Failed to delete quick action" : "Kon snelle actie niet verwijderen", + "Failed to update quick action" : "Kon snelle actie niet bijwerken", + "Failed to update step in quick action" : "Kon stap in snelle actie niet bijwerken", "Quick action updated" : "Snelle actie opgewaardeerd", "Failed to create quick action" : "Aanmaken snelle actie mislukt", "Failed to add steps to quick action" : "Snelle actie onderdelen aanmaken mislukt", @@ -574,16 +781,27 @@ "Add new config" : "Toevoegen nieuwe configuratie", "Provision all accounts" : "Inrichten alle accounts", "Allow additional mail accounts" : "Aanvaard additionele e-mail accounts", + "Allow additional Mail accounts from User Settings" : "Aanvullende Mail-accounts toestaan via gebruikersinstellingen", "Enable text processing through LLMs" : "Activeer tekstverwerking door LLM's", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "De Mail-app kan gebruikersgegevens verwerken met behulp van het ingestelde grote taalmodel en assistentiefuncties bieden zoals berichten samenvattingen, slimme antwoorden en gebeurtenisagenda's.", "Enable LLM processing" : "Activeer LLM verwerking", "Enable classification by importance by default" : "Activeer classificatie standaard volgens belang", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "De Mail-app kan binnenkomende e-mails op belang classificeren met behulp van machine learning. Deze functie is standaard ingeschakeld, maar kan hier standaard worden uitgeschakeld. Individuele gebruikers kunnen de functie nog steeds in- of uitschakelen voor hun accounts.", "Enable classification of important mails by default" : "Activeer classificatie standaard van e-mails volgens belang", "Anti Spam Service" : "Anti-spam Service", "You can set up an anti spam service email address here." : "Je kunt hier een anti-spam service e-mail adres instellen.", "Any email that is marked as spam will be sent to the anti spam service." : "Elke e-mail die als spam wordt gemarkeerd wordt naar de anti-spam service verzonden.", "Gmail integration" : "Gmail integratie", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail staat gebruikers toe hun e-mail via IMAP te benaderen. Om veiligheidsredenen is deze toegang alleen mogelijk met een OAuth 2.0-verbinding of Google-accounts die tweefactorauthenticatie en app-wachtwoorden gebruiken.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Je moet een nieuwe client-ID registreren voor een \"webapplicatie\" in de Google Cloud-console. Voeg de URL {url} toe als geautoriseerde redirect-URI.", "Microsoft integration" : "Microsoft integratie", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft vereist dat je je e-mails via IMAP benadert met OAuth 2.0-authenticatie. Hiervoor moet je een app registreren bij Microsoft Entra ID, voorheen bekend als Microsoft Azure Active Directory.", "Redirect URI" : "Omleiden URI", + "For more details, please click here to open our documentation." : "Klik hier voor meer details om onze documentatie te openen.", + "User Interface Preference Defaults" : "Standaardvoorkeuren gebruikersinterface", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Deze instellingen worden gebruikt om de gebruikersinterface-voorkeuren vooraf in te stellen; ze kunnen door de gebruiker worden overschreven in de mailinstellingen", + "Message View Mode" : "Weergavemodus bericht", + "Show only the selected message" : "Alleen het geselecteerde bericht tonen", "Successfully set up anti spam email addresses" : "Anti-spam e-mail adressen succesvol ingesteld", "Error saving anti spam email addresses" : "Fout bij het opslaan van anti-spam e-mail adressen", "Successfully deleted anti spam reporting email" : "Anti-spam rapporteer e-mail succesvol toegevoegd", @@ -595,11 +813,15 @@ "\"Mark as Spam\" Email Address" : "\"Markeer als Spam\" E-mail adres", "\"Mark Not Junk\" Email Address" : "\"Markeer geen spam\" E-mail Adres", "Reset" : "Herstellen", + "Google integration configured" : "Google-integratie ingesteld", + "Could not configure Google integration" : "Kon Google-integratie niet instellen", "Google integration unlinked" : "Google integratie ontkoppeld", + "Could not unlink Google integration" : "Kon Google-integratie niet ontkoppelen", "Client ID" : "Client-ID", "Client secret" : "Clientgeheim", "Unlink" : "Ontkoppelen", "Microsoft integration configured" : "Microsoft integratie ingesteld", + "Could not configure Microsoft integration" : "Kon Microsoft-integratie niet instellen", "Microsoft integration unlinked" : "Microsoft integratie ontkoppeld", "Could not unlink Microsoft integration" : "Ontkoppelen Microsoft integratie mislukt", "Tenant ID (optional)" : "Pachter ID (optioneel)", @@ -629,10 +851,12 @@ "Unprovision & Delete Config" : "De-provision & verwijder config", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% en %EMAIL% zal worden vervangen door de gebruikers UID en e-mail", "With the settings above, the app will create account settings in the following way:" : "Met de bovenstaande instellingen maakt de app op de volgende manier accountinstellingen:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Het opgegeven PKCS #12-certificaat moet ten minste één certificaat en precies één privésleutel bevatten.", "Failed to import the certificate. Please check the password." : "Importeren van het certificaat mislukt. Controleer het wachtwoord.", "Certificate imported successfully" : "Certificaat succesvol geïmporteerd", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Importeren van het certificaat is mislukt. Controleer of de privaatsleutel overeenkomt met het certificaat en niet beschermd is door een beveiligingszin.", "Failed to import the certificate" : "Importeren van het certificaat mislukt", + "Import S/MIME certificate" : "Importeer S/MIME certificaat", "S/MIME certificates" : "S/MIME certificaten", "Certificate name" : "Certificaat naam", "E-mail address" : "E-mailadres", @@ -640,7 +864,6 @@ "Delete certificate" : "Verwijder certificaat", "No certificate imported yet" : "Nog geen certificaat geïmporteerd", "Import certificate" : "Importeer certificaat", - "Import S/MIME certificate" : "Importeer S/MIME certificaat", "PKCS #12 Certificate" : "PKCS #12 Certificaat", "PEM Certificate" : "PEM certificaat", "Certificate" : "Certificaat", @@ -652,6 +875,8 @@ "Failed to delete text block" : "Verwijderen tekstblok mislukt", "Text block shared with {sharee}" : "Tekstblok gedeeld met {sharee}", "Failed to share text block with {sharee}" : "Delen van de tekstblok met {sharee} mislukt", + "Share deleted for {name}" : "Gedeelde toegang verwijderd voor {name}", + "Failed to delete share with {name}" : "Kon gedeelde toegang met {name} niet verwijderen", "Guest" : "Gast", "Group" : "Groep", "Failed to save text block" : "Tekstblok kon niet worden opgeslagen", @@ -676,13 +901,16 @@ "Junk" : "Ongewenst", "Sent" : "Verzonden", "Trash" : "Verwijderen", + "Connect OAUTH2 account" : "OAUTH2-account verbinden", "Error while sharing file" : "Fout bij delen bestand", "{from}\n{subject}" : "{from}\n{subject}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n nieuw bericht \nvan {from}","%n nieuwe berichten \nvan {from}"], "Nextcloud Mail" : "Nextcloud E-mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Er is al een bericht in bewerking. Alle niet-opgeslagen wijzigingen gaan verloren als je doorgaat!", "Discard changes" : "Negeer wijzigingen", "Discard unsaved changes" : "Negeer niet opgeslagen wijzigingen", "Keep editing message" : "Blijf bij het wijzigen van het bericht", + "(All or part of this reply was generated by AI)" : "(Dit antwoord is geheel of gedeeltelijk door AI gegenereerd)", "Attachments were not copied. Please add them manually." : "Bijlagen zijn niet gekopiëerd. Voeg ze handmatig toe.", "Could not create snooze mailbox" : "Kon geen sluimer e-mail map aanmaken", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Het bericht kon niet worden geladen. Het concept is misschien niet meer beschikbaar. Ververs de pagina en probeer opnieuw.", @@ -697,10 +925,10 @@ "Could not load the desired message" : "Kon het gewenste bericht niet laden", "Could not load the message" : "Kon het bericht niet laden", "Error loading message" : "Fout bij laden bericht", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Berichten zullen automatisch als belangrijk gemarkeerd worden, gebaseerd op met welke berichten je gewerkt hebt of welke je als belangrijk hebt gemarkeerd. In het begin moet je misschien handmatig de belangrijkheid aanpassen om het systeem in te leren, maar het wordt beter met de tijd.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Door jouw verzonden berichten die een antwoord vereisen maar die na enkele dagen nog geen reactie hebben ontvangen worden hier getoond.", - "Mark all messages of this folder as read" : "Markeer alle berichten in deze map als gelezen", - "Last 7 days" : "Laatste 7 dagen", - "From me" : "Van mij" + "Add share link from Files" : "Voeg een gedeelde koppeling toe vanuit Bestanden", + "Choose a file to add as attachment" : "Kies een bestand om als bijlage toe te voegen", + "Choose a file to share as a link" : "Kies een bestand om als link te delen", + "Delegated access to {userId}" : "Toegang gedelegeerd aan {userId}", + "Revoked access for {userId}" : "Toegang ingetrokken voor {userId}" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/nn_NO.js b/l10n/nn_NO.js index 75129e736b..2ce9676c44 100644 --- a/l10n/nn_NO.js +++ b/l10n/nn_NO.js @@ -11,30 +11,34 @@ OC.L10N.register( "Password" : "Passord", "None" : "Ingen", "Signature" : "Signatur", + "Filters" : "Filter", "Cancel" : "Avbryt", "General" : "Generelt", "Appearance" : "Utsjånad", "Newest first" : "Nyaste fyrst", "Oldest first" : "Eldste fyrst", + "Ok" : "Greitt", "Privacy" : "Personvern", "Delete" : "Ta bort", "Search" : "Search", "Send" : "Send", "Refresh" : "Last inn på nytt", - "Ok" : "Greitt", "Choose" : "Vel", "Favorite" : "Favoritt", + "More actions" : "Fleire handlingar", "Back" : "Tilbake", "Attendees" : "Deltakarar", "Description" : "Skildring", "Create" : "Lag", "Select" : "Vel", "Comment" : "Kommentér", + "Accept" : "Godta", "Remove" : "Fjern", "Today" : "I dag", "Yesterday" : "I går", "Favorites" : "Favorit", "Other" : "Anna", + "Link copied" : "Lenkje kopiert", "Move" : "Move", "Folder name" : "Katalognavn", "Saving" : "Lagrar", @@ -45,6 +49,8 @@ OC.L10N.register( "Close" : "Lat att", "Date" : "Dato", "Tags" : "Emneord", + "Not found" : "Ikkje funne", + "From:" : "Frå:", "Deleted" : "Sletta", "Recipient" : "Mottakar", "Help" : "Hjelp", diff --git a/l10n/nn_NO.json b/l10n/nn_NO.json index 9416c2a304..70e561aacb 100644 --- a/l10n/nn_NO.json +++ b/l10n/nn_NO.json @@ -9,30 +9,34 @@ "Password" : "Passord", "None" : "Ingen", "Signature" : "Signatur", + "Filters" : "Filter", "Cancel" : "Avbryt", "General" : "Generelt", "Appearance" : "Utsjånad", "Newest first" : "Nyaste fyrst", "Oldest first" : "Eldste fyrst", + "Ok" : "Greitt", "Privacy" : "Personvern", "Delete" : "Ta bort", "Search" : "Search", "Send" : "Send", "Refresh" : "Last inn på nytt", - "Ok" : "Greitt", "Choose" : "Vel", "Favorite" : "Favoritt", + "More actions" : "Fleire handlingar", "Back" : "Tilbake", "Attendees" : "Deltakarar", "Description" : "Skildring", "Create" : "Lag", "Select" : "Vel", "Comment" : "Kommentér", + "Accept" : "Godta", "Remove" : "Fjern", "Today" : "I dag", "Yesterday" : "I går", "Favorites" : "Favorit", "Other" : "Anna", + "Link copied" : "Lenkje kopiert", "Move" : "Move", "Folder name" : "Katalognavn", "Saving" : "Lagrar", @@ -43,6 +47,8 @@ "Close" : "Lat att", "Date" : "Dato", "Tags" : "Emneord", + "Not found" : "Ikkje funne", + "From:" : "Frå:", "Deleted" : "Sletta", "Recipient" : "Mottakar", "Help" : "Hjelp", diff --git a/l10n/oc.js b/l10n/oc.js index 22ef4317b9..579fffd40a 100644 --- a/l10n/oc.js +++ b/l10n/oc.js @@ -25,9 +25,9 @@ OC.L10N.register( "Account settings" : "Paramètres de compte", "Signature" : "Signatura", "Mail server" : "Servidor email", + "Email address" : "Adreça mail", "Rename alias" : "Renomenar l’àlias", "Go back" : "Revenir en arrière", - "Email address" : "Adreça mail", "Cancel" : "Anullar", "General" : "Generals", "Appearance" : "Aparéncia", @@ -42,10 +42,10 @@ OC.L10N.register( "About" : "A prepaus", "From" : "De", "Monday morning" : "Diluns matin", - "Choose" : "Causir", - "Choose a file to add as attachment" : "Causissètz un fichièr de jónher al messatge", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages" : "Cap de messatge", + "Choose" : "Causir", "Tomorrow – {timeLocale}" : "Deman – {timeLocale}", "Favorite" : "Favorit", "Read" : "Legit", @@ -53,6 +53,7 @@ OC.L10N.register( "Back" : "Retorn", "Mark as unread" : "Marcar coma pas legit", "Mark as read" : "Marcar coma legit", + "Title" : "Títol", "All day" : "Tota la jornada", "Attendees" : "Convidats", "Description" : "Descripcion", @@ -68,6 +69,7 @@ OC.L10N.register( "Last month" : "Lo mes passat", "Favorites" : "Favorits", "Other" : "Autre", + "Link copied" : "Ligam copiat", "Translate" : "Tradurre", "Choose a folder to store the attachment in" : "Causissètz lo dorsièr dins lo qual enregistrar la pèça junta", "Move" : "Move", @@ -89,6 +91,8 @@ OC.L10N.register( "Tags" : "Etiquetas", "Custom" : "Personalizats", "Not found" : "Non trobat", + "From:" : "Del :", + "To:" : "Al :", "Translate message" : "Traduire lo messatge", "Translating" : "Traduccion", "Untitled event" : "Eveniment sens títol", @@ -122,6 +126,7 @@ OC.L10N.register( "Error while sharing file" : "Error pendent lo partiment del fichièr", "{from}\n{subject}" : "{from}\n{subject}", "Message sent" : "Messatge mandat", - "Error loading message" : "Error al moment del cargament del messatge" + "Error loading message" : "Error al moment del cargament del messatge", + "Choose a file to add as attachment" : "Causissètz un fichièr de jónher al messatge" }, "nplurals=2; plural=(n > 1);"); diff --git a/l10n/oc.json b/l10n/oc.json index 96d7b3b15c..afeb49c9fe 100644 --- a/l10n/oc.json +++ b/l10n/oc.json @@ -23,9 +23,9 @@ "Account settings" : "Paramètres de compte", "Signature" : "Signatura", "Mail server" : "Servidor email", + "Email address" : "Adreça mail", "Rename alias" : "Renomenar l’àlias", "Go back" : "Revenir en arrière", - "Email address" : "Adreça mail", "Cancel" : "Anullar", "General" : "Generals", "Appearance" : "Aparéncia", @@ -40,10 +40,10 @@ "About" : "A prepaus", "From" : "De", "Monday morning" : "Diluns matin", - "Choose" : "Causir", - "Choose a file to add as attachment" : "Causissètz un fichièr de jónher al messatge", "Confirm" : "Confirmar", + "Revoke" : "Revocar", "No messages" : "Cap de messatge", + "Choose" : "Causir", "Tomorrow – {timeLocale}" : "Deman – {timeLocale}", "Favorite" : "Favorit", "Read" : "Legit", @@ -51,6 +51,7 @@ "Back" : "Retorn", "Mark as unread" : "Marcar coma pas legit", "Mark as read" : "Marcar coma legit", + "Title" : "Títol", "All day" : "Tota la jornada", "Attendees" : "Convidats", "Description" : "Descripcion", @@ -66,6 +67,7 @@ "Last month" : "Lo mes passat", "Favorites" : "Favorits", "Other" : "Autre", + "Link copied" : "Ligam copiat", "Translate" : "Tradurre", "Choose a folder to store the attachment in" : "Causissètz lo dorsièr dins lo qual enregistrar la pèça junta", "Move" : "Move", @@ -87,6 +89,8 @@ "Tags" : "Etiquetas", "Custom" : "Personalizats", "Not found" : "Non trobat", + "From:" : "Del :", + "To:" : "Al :", "Translate message" : "Traduire lo messatge", "Translating" : "Traduccion", "Untitled event" : "Eveniment sens títol", @@ -120,6 +124,7 @@ "Error while sharing file" : "Error pendent lo partiment del fichièr", "{from}\n{subject}" : "{from}\n{subject}", "Message sent" : "Messatge mandat", - "Error loading message" : "Error al moment del cargament del messatge" + "Error loading message" : "Error al moment del cargament del messatge", + "Choose a file to add as attachment" : "Causissètz un fichièr de jónher al messatge" },"pluralForm" :"nplurals=2; plural=(n > 1);" } \ No newline at end of file diff --git a/l10n/pl.js b/l10n/pl.js index f510910710..018c562dad 100644 --- a/l10n/pl.js +++ b/l10n/pl.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Poczta", "You are reaching your mailbox quota limit for {account_email}" : "Osiągnięto limit skrzynki pocztowej dla {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Obecnie używasz {percentage} przestrzeni dyskowej skrzynki pocztowej. Zrób trochę miejsca, usuwając niepotrzebne wiadomości e-mail.", + "{account_email} has been delegated to you" : "{account_email} zostało delegowane do Ciebie ", + "{user} delegated {account} to you" : "{user} delegował konto {account} do Ciebie", + "{account_email} is no longer delegated to you" : "{account_email} nie jest już delegowane do Ciebie", + "{user} revoked delegation for {account}" : "{user} cofnął/cofnęła delegację dla {account}", "Mail Application" : "Aplikacja poczty", "Mails" : "E-maile", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Adres e-mail nadawcy %1$s: nie znajduje się w książce adresowej, ale nazwa nadawcy: %2$s znajduje się w książce adresowej pod następującym adresem e-mail: %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "Port SMTP", "SMTP User" : "Użytkownik SMTP", "SMTP Password" : "Hasło SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Aby konto Google mogło współpracować z tą aplikacją, musisz włączyć uwierzytelnianie dwuskładnikowe dla Google i wygenerować hasło do aplikacji.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google wymaga uwierzytelniania OAuth. Jeśli administrator Nextcloud nie skonfigurował OAuth Google, możesz zamiast tego użyć hasła aplikacji Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft wymaga uwierzytelniania OAuth. Poproś administratora Nextcloud o skonfigurowanie OAuth Microsoft w ustawieniach administracyjnych.", "Account settings" : "Ustawienia konta", "Aliases" : "Aliasy", "Alias to S/MIME certificate mapping" : "Mapowanie aliasu do certyfikatu S/MIME", @@ -117,13 +122,13 @@ OC.L10N.register( "Mail server" : "Serwer poczty", "Sieve server" : "Serwer Sieve", "Folder search" : "Wyszukiwanie w folderach", + "Email address" : "Adres e-mail", "Update alias" : "Zaktualizuj alias", "Rename alias" : "Zmień nazwę aliasu", "Show update alias form" : "Pokaż formularz aktualizacji aliasu", "Delete alias" : "Usuń alias", "Go back" : "Wstecz", "Change name" : "Zmień nazwę", - "Email address" : "Adres e-mail", "Add alias" : "Dodaj alias", "Create alias" : "Utwórz alias", "Cancel" : "Anuluj", @@ -136,6 +141,7 @@ OC.L10N.register( "Mail settings" : "Ustawienia Poczty", "General" : "Ogólne", "Set as default mail app" : "Ustaw jako domyślną aplikację poczty", + "{email} (delegated)" : "{email} (delegowany)", "Add mail account" : "Dodaj konto e-mail", "Appearance" : "Wygląd", "Show all messages in thread" : "Pokaż wszystkie wiadomości w wątku", @@ -150,13 +156,16 @@ OC.L10N.register( "Sorting" : "Sortuj", "Newest first" : "Od najnowszych", "Oldest first" : "Od najstarszych", + "New text block" : "Nowy blok tekstowy", + "Title of the text block" : "Tytuł bloku tekstowego", + "Content of the text block" : "Zawartość bloku tekstowego", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Awatary z Gravatar i favicon", "Reply position" : "Pozycja odpowiedzi", "Top" : "Góra", "Bottom" : "Dół", "Text blocks" : "Bloki tekstowe", "Reusable pieces of text that can be inserted in messages" : "Fragmenty tekstu wielokrotnego użytku , które można wstawiać do wiadomości", - "New text block" : "Nowy blok tekstowy", "Shared with me" : "Udostępnione dla mnie", "Privacy" : "Prywatność", "Data collection" : "Zbieranie danych", @@ -187,9 +196,6 @@ OC.L10N.register( "About" : "O aplikacji", "Acknowledgements" : "Podziękowania", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ta aplikacja zawiera CKEditor, edytor open-source. Copyright © współtwórcy CKEditor. Licencjonowane na GPLv2.", - "Title of the text block" : "Tytuł bloku tekstowego", - "Content of the text block" : "Zawartość bloku tekstowego", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automatycznie twórz wstępne wydarzenia w kalendarzu", "No certificate" : "Brak certyfikatu", "Certificate updated" : "Aktualizacja certyfikatu", @@ -233,7 +239,6 @@ OC.L10N.register( "Disable formatting" : "Wyłącz formatowanie", "Upload attachment" : "Dodaj załącznik", "Add attachment from Files" : "Dodaj załącznik z Plików", - "Add share link from Files" : "Dodaj link do udostępnienia z Plików", "Smart picker" : "Inteligentna selekcja", "Request a read receipt" : "Poproś o potwierdzenie przeczytania", "Sign message with S/MIME" : "Podpisz wiadomość przy użyciu S/MIME", @@ -245,15 +250,26 @@ OC.L10N.register( "Monday morning" : "W poniedziałek rano", "Custom date and time" : "Własna data i godzina", "Enter a date" : "Wpisz datę", - "Choose" : "Wybierz", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Załącznik przekracza dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij plik za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku."], - "Choose a file to add as attachment" : "Wybierz plik, aby dodać jako załącznik", - "Choose a file to share as a link" : "Wybierz plik do udostępnienia przez link", + "Choose a file" : "Wybierz plik", "_{count} attachment_::_{count} attachments_" : ["{count} załącznik","{count} załączniki","{count} załączników","{count} załączników"], "Untitled message" : "Wiadomość bez tytułu", "Expand composer" : "Rozwiń edytor wiadomości", "Close composer" : "Zamknij edytor wiadomości", "Confirm" : "Potwierdź", + "Delegate access" : "Deleguj dostęp", + "Revoke" : "Cofnij", + "{userId} will no longer be able to act on your behalf" : "{userId} nie będzie już mógł/mogła działać w Twoim imieniu", + "Could not fetch delegates" : "Nie udało się pobrać delegatów", + "Could not delegate access" : "Nie udało się delegować dostępu", + "Could not revoke delegation" : "Nie udało się cofnąć delegacji", + "Delegation" : "Delegacja", + "Allow users to send, receive, and delete mail on your behalf" : "Pozwól użytkownikom wysyłać, odbierać i usuwać pocztę w Twoim imieniu", + "Revoke access" : "Cofnij dostęp", + "Add delegate" : "Dodaj delegata", + "Select a user" : "Wybierz użytkownika", + "They will be able to send, receive, and delete mail on your behalf" : "Będzie mógł/mogła wysyłać, odbierać i usuwać pocztę w Twoim imieniu", + "Revoke access?" : "Cofnąć dostęp?", "Tag: {name} deleted" : "Tag: {name} usunięty", "An error occurred, unable to delete the tag." : "Wystąpił błąd, nie udało się usunąć tagu.", "The tag will be deleted from all messages." : "Tag zostanie usunięty ze wszystkich wiadomości.", @@ -261,6 +277,7 @@ OC.L10N.register( "Rich text" : "Tekst sformatowany", "No messages in this folder" : "Brak wiadomości w tym folderze", "No messages" : "Brak wiadomości", + "Choose" : "Wybierz", "Blind copy recipients only" : "Tylko dla niewidocznych kopii", "No subject" : "Brak tematu", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Szkic: {markup-end} {subject}", @@ -300,8 +317,6 @@ OC.L10N.register( "Move Message" : "Przenieś wiadomość", "Archive thread" : "Wątek archiwalny", "Archive message" : "Przenieś wiadomość do archiwum", - "Delete thread" : "Usuń wątek", - "Delete message" : "Usuń wiadomość", "More actions" : "Więcej akcji", "Back" : "Poprzednia", "Set custom snooze" : "Ustaw niestandardowe odłożenie", @@ -309,6 +324,8 @@ OC.L10N.register( "Reply with meeting" : "Odpowiedz spotkaniem", "Create task" : "Utwórz zadanie", "Download message" : "Pobierz wiadomość", + "Delete thread" : "Usuń wątek", + "Delete message" : "Usuń wiadomość", "Back to all actions" : "Powrót do wszystkich akcji", "Manage quick actions" : "Zarządzaj szybkimi akcjami", "Load more" : "Wczytaj więcej", @@ -332,6 +349,7 @@ OC.L10N.register( "Event created" : "Utworzono wydarzenie", "Could not create event" : "Nie można utworzyć wydarzenia", "Create event" : "Utwórz wydarzenie", + "Title" : "Tytuł", "All day" : "Cały dzień", "Attendees" : "Uczestnicy", "You can only invite attendees if your account has an email address set" : "Możesz zapraszać uczestników tylko, jeśli twoje konto ma ustawiony adres e-mail", @@ -381,7 +399,9 @@ OC.L10N.register( "Indexing your messages. This can take a bit longer for larger folders." : "Indeksowanie twoich wiadomości. Może to zająć trochę więcej czasu dla większych folderów", "Choose target folder" : "Wybierz katalog docelowy", "No more submailboxes in here" : "Nie ma więcej skrzynek podrzędnych", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Wiadomości będą automatycznie oznaczane jako ważne przy użyciu AI. System uczy się na podstawie wiadomości, które oznaczasz jako ważne lub nieważne. Na początku może być konieczna ręczna zmiana ważności, aby go nauczyć, ale z czasem będzie się poprawiał", "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Wiadomości oznaczone jako ulubione będą wyświetlane na górze folderów. Możesz wyłączyć to zachowanie w ustawieniach aplikacji", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "AI identyfikuje wiadomości wysłane przez Ciebie, które prawdopodobnie wymagają odpowiedzi, ale nie otrzymały jej po kilku dniach, i wyświetla je tutaj", "Favorites" : "Ulubione", "Favorites info" : "Informacje o ulubionych", "Load more favorites" : "Załaduj więcej ulubionych", @@ -400,7 +420,9 @@ OC.L10N.register( "Could not snooze message" : "Nie można odłożyć wiadomości", "Message was unsnoozed" : "Wycofano odłożenie wiadomości", "Could not unsnooze message" : "Nieudało się wycofać odłożenia wiadomości", + "Direct link copied to clipboard" : "Bezpośredni odnośnik skopiowany do schowka", "Forward" : "Przekaż dalej", + "Link copied" : "Link skopiowany", "Move message" : "Przenieś wiadomość", "Translate" : "Tłumaczenie", "Forward message as attachment" : "Wyślij wiadomość jako załącznik", @@ -408,8 +430,10 @@ OC.L10N.register( "Print message" : "Drukuj wiadomość", "Create mail filter" : "Utwórz filtr poczty", "Download thread data for debugging" : "Pobierz dane wątku do debugowania", + "Suggested replies are using AI" : "Sugerowane odpowiedzi wykorzystują AI", "Message body" : "Treść wiadomości", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Ostrzeżenie: Podpis S/MIME tej wiadomości jest niezweryfikowany. Nadawca może podszywać się pod kogoś!", + "AI info" : "Informacje o AI", "Unnamed" : "Bez nazwy", "Embedded message" : "Osadzona wiadomość", "Attachment saved to Files" : "Załącznik zapisany w plikach.", @@ -440,14 +464,17 @@ OC.L10N.register( "Moving message" : "Przenoszenie wiadomości", "This account cannot connect" : "To konto nie może się połączyć", "Connection failed. Please verify your information and try again" : "Połączenie nie powiodło się. Sprawdź swoje dane i spróbuj ponownie", + "Change password" : "Zmień hasło", "Used quota: {quota}% ({limit})" : "Wykorzystana quota: {quota} % ({limit})", "Used quota: {quota}%" : "Wykorzystana przestrzeń: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nie można utworzyć skrzynki pocztowej. Nazwa prawdopodobnie zawiera nieprawidłowe znaki. Spróbuj innej nazwy.", "Remove account" : "Usuń konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Konto dla {email} i zapisane w pamięci podręcznej dane e-mail zostaną usunięte z Nextcloud, ale pozostaną nadal u dostawcy poczty e-mail.", "Remove {email}" : "Usuń {email}", + "could not delete account" : "nie udało się usunąć konta", "Provisioned account is disabled" : "Zabezpieczone konto jest wyłączone", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Zaloguj się przy użyciu hasła, aby włączyć to konto. Bieżąca sesja korzysta z uwierzytelniania bez hasła, m.in. SSO lub WebAuthn.", + "Delegate account" : "Deleguj konto", "Show only subscribed folders" : "Pokaż tylko subskrybowane foldery", "Add folder" : "Dodaj katalog", "Folder name" : "Nazwa katalogu", @@ -620,6 +647,10 @@ OC.L10N.register( "Reply to sender only" : "Odpowiedz tylko nadawcy", "Mark as unfavorite" : "Oznacz jako nieulubione", "Mark as favorite" : "Oznacz jako nieulubione", + "From:" : "Od:", + "To:" : "Do:", + "Cc:" : "DW:", + "Bcc:" : "UDW:", "Unsubscribe via link" : "Wypisz się przez link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Wypisanie zatrzyma wszystkie wiadomości z listy mailingowej od {sender}", "Send unsubscribe email" : "Wyślij e-mail wypisujący", @@ -639,6 +670,7 @@ OC.L10N.register( "Target language to translate into" : "Język docelowy, na który chcesz tłumaczyć", "Translate to" : "Przetłumacz na", "Translating" : "Tłumaczenie", + "This translation is generated using AI and may contain inaccuracies" : "To tłumaczenie zostało wygenerowane przez AI i może zawierać błędy", "Copy translated text" : "Kopiuj przetłumaczony tekst", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Wyłącz przechowywanie kosza pozostawiając pole puste lub ustawiając je na 0. Przetwarzane będą tylko maile usunięte po włączeniu przechowywania kosza.", "Could not remove trusted sender {sender}" : "Nie udało się usunąć zaufanego nadawcy {sender}", @@ -815,6 +847,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certyfikat został zaimportowany pomyślnie", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nie udało się zaimportować certyfikatu. Upewnij się, że klucz prywatny jest zgodny z certyfikatem i nie jest chroniony hasłem.", "Failed to import the certificate" : "Nie udało się zaimportować certyfikatu", + "Import S/MIME certificate" : "Importuj certyfikat S/MIME", "S/MIME certificates" : "Certyfikaty S/MIME", "Certificate name" : "Nazwa certyfikatu", "E-mail address" : "Adres e-mail", @@ -822,7 +855,6 @@ OC.L10N.register( "Delete certificate" : "Usuń certyfikat", "No certificate imported yet" : "Nie zaimportowano jeszcze żadnego certyfikatu", "Import certificate" : "Importuj certyfikat", - "Import S/MIME certificate" : "Importuj certyfikat S/MIME", "PKCS #12 Certificate" : "Certyfikat PKCS #12", "PEM Certificate" : "Certyfikat PEM", "Certificate" : "Certyfikat", @@ -869,6 +901,7 @@ OC.L10N.register( "Discard changes" : "Odrzuć zmiany", "Discard unsaved changes" : "Odrzuć niezapisane zmiany", "Keep editing message" : "Kontynuuj edycję wiadomości", + "(All or part of this reply was generated by AI)" : "(Całość lub część tej odpowiedzi została wygenerowana przez AI)", "Attachments were not copied. Please add them manually." : "Załączniki nie zostały skopiowane. Dodaj je ręcznie.", "Could not create snooze mailbox" : "Nie udało się utworzyć skrzynki pocztowej drzemki (snooze mailbox)", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Przepraszamy, nie udało się wczytać wiadomości. Wersja robocza mogła już nie istnieć. Odśwież stronę i spróbuj ponownie.", @@ -883,11 +916,10 @@ OC.L10N.register( "Could not load the desired message" : "Nie można wczytać żądanej wiadomości", "Could not load the message" : "Nie można wczytać wiadomości", "Error loading message" : "Błąd podczas wczytywania wiadomości", - "Determine importance using machine learning" : "Określ ważność przy użyciu uczenia maszynowego", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Wiadomości będą automatycznie oznaczane jako ważne na podstawie wiadomości, z którymi wchodziłeś w interakcję lub które oznaczałeś jako ważne. Na początku być może trzeba będzie ręcznie zmienić ważność dla uczenia systemu, ale z czasem będzie się poprawiać.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Wiadomości wysłane przez ciebie, które wymagają odpowiedzi, ale jej nie otrzymały po kilku dniach, będą wyświetlane tutaj", - "Mark all messages of this folder as read" : "Oznacz wszystkie wiadomości w tym folderze jako przeczytane", - "Last 7 days" : "Ostatnie 7 dni", - "From me" : "Ode mnie" + "Add share link from Files" : "Dodaj link do udostępnienia z Plików", + "Choose a file to add as attachment" : "Wybierz plik, aby dodać jako załącznik", + "Choose a file to share as a link" : "Wybierz plik do udostępnienia przez link", + "Delegated access to {userId}" : "Dostęp został delegowany do {userId}", + "Revoked access for {userId}" : "Cofnięto dostęp dla {userId}" }, "nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/l10n/pl.json b/l10n/pl.json index 0e6d0b4cbc..31adc6ba05 100644 --- a/l10n/pl.json +++ b/l10n/pl.json @@ -12,6 +12,10 @@ "Mail" : "Poczta", "You are reaching your mailbox quota limit for {account_email}" : "Osiągnięto limit skrzynki pocztowej dla {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Obecnie używasz {percentage} przestrzeni dyskowej skrzynki pocztowej. Zrób trochę miejsca, usuwając niepotrzebne wiadomości e-mail.", + "{account_email} has been delegated to you" : "{account_email} zostało delegowane do Ciebie ", + "{user} delegated {account} to you" : "{user} delegował konto {account} do Ciebie", + "{account_email} is no longer delegated to you" : "{account_email} nie jest już delegowane do Ciebie", + "{user} revoked delegation for {account}" : "{user} cofnął/cofnęła delegację dla {account}", "Mail Application" : "Aplikacja poczty", "Mails" : "E-maile", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Adres e-mail nadawcy %1$s: nie znajduje się w książce adresowej, ale nazwa nadawcy: %2$s znajduje się w książce adresowej pod następującym adresem e-mail: %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "Port SMTP", "SMTP User" : "Użytkownik SMTP", "SMTP Password" : "Hasło SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Aby konto Google mogło współpracować z tą aplikacją, musisz włączyć uwierzytelnianie dwuskładnikowe dla Google i wygenerować hasło do aplikacji.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google wymaga uwierzytelniania OAuth. Jeśli administrator Nextcloud nie skonfigurował OAuth Google, możesz zamiast tego użyć hasła aplikacji Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft wymaga uwierzytelniania OAuth. Poproś administratora Nextcloud o skonfigurowanie OAuth Microsoft w ustawieniach administracyjnych.", "Account settings" : "Ustawienia konta", "Aliases" : "Aliasy", "Alias to S/MIME certificate mapping" : "Mapowanie aliasu do certyfikatu S/MIME", @@ -115,13 +120,13 @@ "Mail server" : "Serwer poczty", "Sieve server" : "Serwer Sieve", "Folder search" : "Wyszukiwanie w folderach", + "Email address" : "Adres e-mail", "Update alias" : "Zaktualizuj alias", "Rename alias" : "Zmień nazwę aliasu", "Show update alias form" : "Pokaż formularz aktualizacji aliasu", "Delete alias" : "Usuń alias", "Go back" : "Wstecz", "Change name" : "Zmień nazwę", - "Email address" : "Adres e-mail", "Add alias" : "Dodaj alias", "Create alias" : "Utwórz alias", "Cancel" : "Anuluj", @@ -134,6 +139,7 @@ "Mail settings" : "Ustawienia Poczty", "General" : "Ogólne", "Set as default mail app" : "Ustaw jako domyślną aplikację poczty", + "{email} (delegated)" : "{email} (delegowany)", "Add mail account" : "Dodaj konto e-mail", "Appearance" : "Wygląd", "Show all messages in thread" : "Pokaż wszystkie wiadomości w wątku", @@ -148,13 +154,16 @@ "Sorting" : "Sortuj", "Newest first" : "Od najnowszych", "Oldest first" : "Od najstarszych", + "New text block" : "Nowy blok tekstowy", + "Title of the text block" : "Tytuł bloku tekstowego", + "Content of the text block" : "Zawartość bloku tekstowego", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Awatary z Gravatar i favicon", "Reply position" : "Pozycja odpowiedzi", "Top" : "Góra", "Bottom" : "Dół", "Text blocks" : "Bloki tekstowe", "Reusable pieces of text that can be inserted in messages" : "Fragmenty tekstu wielokrotnego użytku , które można wstawiać do wiadomości", - "New text block" : "Nowy blok tekstowy", "Shared with me" : "Udostępnione dla mnie", "Privacy" : "Prywatność", "Data collection" : "Zbieranie danych", @@ -185,9 +194,6 @@ "About" : "O aplikacji", "Acknowledgements" : "Podziękowania", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Ta aplikacja zawiera CKEditor, edytor open-source. Copyright © współtwórcy CKEditor. Licencjonowane na GPLv2.", - "Title of the text block" : "Tytuł bloku tekstowego", - "Content of the text block" : "Zawartość bloku tekstowego", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Automatycznie twórz wstępne wydarzenia w kalendarzu", "No certificate" : "Brak certyfikatu", "Certificate updated" : "Aktualizacja certyfikatu", @@ -231,7 +237,6 @@ "Disable formatting" : "Wyłącz formatowanie", "Upload attachment" : "Dodaj załącznik", "Add attachment from Files" : "Dodaj załącznik z Plików", - "Add share link from Files" : "Dodaj link do udostępnienia z Plików", "Smart picker" : "Inteligentna selekcja", "Request a read receipt" : "Poproś o potwierdzenie przeczytania", "Sign message with S/MIME" : "Podpisz wiadomość przy użyciu S/MIME", @@ -243,15 +248,26 @@ "Monday morning" : "W poniedziałek rano", "Custom date and time" : "Własna data i godzina", "Enter a date" : "Wpisz datę", - "Choose" : "Wybierz", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Załącznik przekracza dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij plik za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku.","Załączniki przekraczają dozwolony rozmiar załączników z {size}. Zamiast tego udostępnij pliki za pośrednictwem linku."], - "Choose a file to add as attachment" : "Wybierz plik, aby dodać jako załącznik", - "Choose a file to share as a link" : "Wybierz plik do udostępnienia przez link", + "Choose a file" : "Wybierz plik", "_{count} attachment_::_{count} attachments_" : ["{count} załącznik","{count} załączniki","{count} załączników","{count} załączników"], "Untitled message" : "Wiadomość bez tytułu", "Expand composer" : "Rozwiń edytor wiadomości", "Close composer" : "Zamknij edytor wiadomości", "Confirm" : "Potwierdź", + "Delegate access" : "Deleguj dostęp", + "Revoke" : "Cofnij", + "{userId} will no longer be able to act on your behalf" : "{userId} nie będzie już mógł/mogła działać w Twoim imieniu", + "Could not fetch delegates" : "Nie udało się pobrać delegatów", + "Could not delegate access" : "Nie udało się delegować dostępu", + "Could not revoke delegation" : "Nie udało się cofnąć delegacji", + "Delegation" : "Delegacja", + "Allow users to send, receive, and delete mail on your behalf" : "Pozwól użytkownikom wysyłać, odbierać i usuwać pocztę w Twoim imieniu", + "Revoke access" : "Cofnij dostęp", + "Add delegate" : "Dodaj delegata", + "Select a user" : "Wybierz użytkownika", + "They will be able to send, receive, and delete mail on your behalf" : "Będzie mógł/mogła wysyłać, odbierać i usuwać pocztę w Twoim imieniu", + "Revoke access?" : "Cofnąć dostęp?", "Tag: {name} deleted" : "Tag: {name} usunięty", "An error occurred, unable to delete the tag." : "Wystąpił błąd, nie udało się usunąć tagu.", "The tag will be deleted from all messages." : "Tag zostanie usunięty ze wszystkich wiadomości.", @@ -259,6 +275,7 @@ "Rich text" : "Tekst sformatowany", "No messages in this folder" : "Brak wiadomości w tym folderze", "No messages" : "Brak wiadomości", + "Choose" : "Wybierz", "Blind copy recipients only" : "Tylko dla niewidocznych kopii", "No subject" : "Brak tematu", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Szkic: {markup-end} {subject}", @@ -298,8 +315,6 @@ "Move Message" : "Przenieś wiadomość", "Archive thread" : "Wątek archiwalny", "Archive message" : "Przenieś wiadomość do archiwum", - "Delete thread" : "Usuń wątek", - "Delete message" : "Usuń wiadomość", "More actions" : "Więcej akcji", "Back" : "Poprzednia", "Set custom snooze" : "Ustaw niestandardowe odłożenie", @@ -307,6 +322,8 @@ "Reply with meeting" : "Odpowiedz spotkaniem", "Create task" : "Utwórz zadanie", "Download message" : "Pobierz wiadomość", + "Delete thread" : "Usuń wątek", + "Delete message" : "Usuń wiadomość", "Back to all actions" : "Powrót do wszystkich akcji", "Manage quick actions" : "Zarządzaj szybkimi akcjami", "Load more" : "Wczytaj więcej", @@ -330,6 +347,7 @@ "Event created" : "Utworzono wydarzenie", "Could not create event" : "Nie można utworzyć wydarzenia", "Create event" : "Utwórz wydarzenie", + "Title" : "Tytuł", "All day" : "Cały dzień", "Attendees" : "Uczestnicy", "You can only invite attendees if your account has an email address set" : "Możesz zapraszać uczestników tylko, jeśli twoje konto ma ustawiony adres e-mail", @@ -379,7 +397,9 @@ "Indexing your messages. This can take a bit longer for larger folders." : "Indeksowanie twoich wiadomości. Może to zająć trochę więcej czasu dla większych folderów", "Choose target folder" : "Wybierz katalog docelowy", "No more submailboxes in here" : "Nie ma więcej skrzynek podrzędnych", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Wiadomości będą automatycznie oznaczane jako ważne przy użyciu AI. System uczy się na podstawie wiadomości, które oznaczasz jako ważne lub nieważne. Na początku może być konieczna ręczna zmiana ważności, aby go nauczyć, ale z czasem będzie się poprawiał", "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Wiadomości oznaczone jako ulubione będą wyświetlane na górze folderów. Możesz wyłączyć to zachowanie w ustawieniach aplikacji", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "AI identyfikuje wiadomości wysłane przez Ciebie, które prawdopodobnie wymagają odpowiedzi, ale nie otrzymały jej po kilku dniach, i wyświetla je tutaj", "Favorites" : "Ulubione", "Favorites info" : "Informacje o ulubionych", "Load more favorites" : "Załaduj więcej ulubionych", @@ -398,7 +418,9 @@ "Could not snooze message" : "Nie można odłożyć wiadomości", "Message was unsnoozed" : "Wycofano odłożenie wiadomości", "Could not unsnooze message" : "Nieudało się wycofać odłożenia wiadomości", + "Direct link copied to clipboard" : "Bezpośredni odnośnik skopiowany do schowka", "Forward" : "Przekaż dalej", + "Link copied" : "Link skopiowany", "Move message" : "Przenieś wiadomość", "Translate" : "Tłumaczenie", "Forward message as attachment" : "Wyślij wiadomość jako załącznik", @@ -406,8 +428,10 @@ "Print message" : "Drukuj wiadomość", "Create mail filter" : "Utwórz filtr poczty", "Download thread data for debugging" : "Pobierz dane wątku do debugowania", + "Suggested replies are using AI" : "Sugerowane odpowiedzi wykorzystują AI", "Message body" : "Treść wiadomości", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Ostrzeżenie: Podpis S/MIME tej wiadomości jest niezweryfikowany. Nadawca może podszywać się pod kogoś!", + "AI info" : "Informacje o AI", "Unnamed" : "Bez nazwy", "Embedded message" : "Osadzona wiadomość", "Attachment saved to Files" : "Załącznik zapisany w plikach.", @@ -438,14 +462,17 @@ "Moving message" : "Przenoszenie wiadomości", "This account cannot connect" : "To konto nie może się połączyć", "Connection failed. Please verify your information and try again" : "Połączenie nie powiodło się. Sprawdź swoje dane i spróbuj ponownie", + "Change password" : "Zmień hasło", "Used quota: {quota}% ({limit})" : "Wykorzystana quota: {quota} % ({limit})", "Used quota: {quota}%" : "Wykorzystana przestrzeń: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nie można utworzyć skrzynki pocztowej. Nazwa prawdopodobnie zawiera nieprawidłowe znaki. Spróbuj innej nazwy.", "Remove account" : "Usuń konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Konto dla {email} i zapisane w pamięci podręcznej dane e-mail zostaną usunięte z Nextcloud, ale pozostaną nadal u dostawcy poczty e-mail.", "Remove {email}" : "Usuń {email}", + "could not delete account" : "nie udało się usunąć konta", "Provisioned account is disabled" : "Zabezpieczone konto jest wyłączone", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Zaloguj się przy użyciu hasła, aby włączyć to konto. Bieżąca sesja korzysta z uwierzytelniania bez hasła, m.in. SSO lub WebAuthn.", + "Delegate account" : "Deleguj konto", "Show only subscribed folders" : "Pokaż tylko subskrybowane foldery", "Add folder" : "Dodaj katalog", "Folder name" : "Nazwa katalogu", @@ -618,6 +645,10 @@ "Reply to sender only" : "Odpowiedz tylko nadawcy", "Mark as unfavorite" : "Oznacz jako nieulubione", "Mark as favorite" : "Oznacz jako nieulubione", + "From:" : "Od:", + "To:" : "Do:", + "Cc:" : "DW:", + "Bcc:" : "UDW:", "Unsubscribe via link" : "Wypisz się przez link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Wypisanie zatrzyma wszystkie wiadomości z listy mailingowej od {sender}", "Send unsubscribe email" : "Wyślij e-mail wypisujący", @@ -637,6 +668,7 @@ "Target language to translate into" : "Język docelowy, na który chcesz tłumaczyć", "Translate to" : "Przetłumacz na", "Translating" : "Tłumaczenie", + "This translation is generated using AI and may contain inaccuracies" : "To tłumaczenie zostało wygenerowane przez AI i może zawierać błędy", "Copy translated text" : "Kopiuj przetłumaczony tekst", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Wyłącz przechowywanie kosza pozostawiając pole puste lub ustawiając je na 0. Przetwarzane będą tylko maile usunięte po włączeniu przechowywania kosza.", "Could not remove trusted sender {sender}" : "Nie udało się usunąć zaufanego nadawcy {sender}", @@ -813,6 +845,7 @@ "Certificate imported successfully" : "Certyfikat został zaimportowany pomyślnie", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nie udało się zaimportować certyfikatu. Upewnij się, że klucz prywatny jest zgodny z certyfikatem i nie jest chroniony hasłem.", "Failed to import the certificate" : "Nie udało się zaimportować certyfikatu", + "Import S/MIME certificate" : "Importuj certyfikat S/MIME", "S/MIME certificates" : "Certyfikaty S/MIME", "Certificate name" : "Nazwa certyfikatu", "E-mail address" : "Adres e-mail", @@ -820,7 +853,6 @@ "Delete certificate" : "Usuń certyfikat", "No certificate imported yet" : "Nie zaimportowano jeszcze żadnego certyfikatu", "Import certificate" : "Importuj certyfikat", - "Import S/MIME certificate" : "Importuj certyfikat S/MIME", "PKCS #12 Certificate" : "Certyfikat PKCS #12", "PEM Certificate" : "Certyfikat PEM", "Certificate" : "Certyfikat", @@ -867,6 +899,7 @@ "Discard changes" : "Odrzuć zmiany", "Discard unsaved changes" : "Odrzuć niezapisane zmiany", "Keep editing message" : "Kontynuuj edycję wiadomości", + "(All or part of this reply was generated by AI)" : "(Całość lub część tej odpowiedzi została wygenerowana przez AI)", "Attachments were not copied. Please add them manually." : "Załączniki nie zostały skopiowane. Dodaj je ręcznie.", "Could not create snooze mailbox" : "Nie udało się utworzyć skrzynki pocztowej drzemki (snooze mailbox)", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Przepraszamy, nie udało się wczytać wiadomości. Wersja robocza mogła już nie istnieć. Odśwież stronę i spróbuj ponownie.", @@ -881,11 +914,10 @@ "Could not load the desired message" : "Nie można wczytać żądanej wiadomości", "Could not load the message" : "Nie można wczytać wiadomości", "Error loading message" : "Błąd podczas wczytywania wiadomości", - "Determine importance using machine learning" : "Określ ważność przy użyciu uczenia maszynowego", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Wiadomości będą automatycznie oznaczane jako ważne na podstawie wiadomości, z którymi wchodziłeś w interakcję lub które oznaczałeś jako ważne. Na początku być może trzeba będzie ręcznie zmienić ważność dla uczenia systemu, ale z czasem będzie się poprawiać.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Wiadomości wysłane przez ciebie, które wymagają odpowiedzi, ale jej nie otrzymały po kilku dniach, będą wyświetlane tutaj", - "Mark all messages of this folder as read" : "Oznacz wszystkie wiadomości w tym folderze jako przeczytane", - "Last 7 days" : "Ostatnie 7 dni", - "From me" : "Ode mnie" + "Add share link from Files" : "Dodaj link do udostępnienia z Plików", + "Choose a file to add as attachment" : "Wybierz plik, aby dodać jako załącznik", + "Choose a file to share as a link" : "Wybierz plik do udostępnienia przez link", + "Delegated access to {userId}" : "Dostęp został delegowany do {userId}", + "Revoked access for {userId}" : "Cofnięto dostęp dla {userId}" },"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" } \ No newline at end of file diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js index 0a07ea3727..011331ce84 100644 --- a/l10n/pt_BR.js +++ b/l10n/pt_BR.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Você está atingindo seu limite de cota de caixa de correio para {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "No momento, você está usando {percentage} do armazenamento da sua caixa de correio. Por favor, libere algum espaço excluindo e-mails desnecessários.", + "{account_email} has been delegated to you" : "{account_email} foi delegado a você", + "{user} delegated {account} to you" : "{user} delegou {account} a você", + "{account_email} is no longer delegated to you" : "{account_email} não está mais delegado a você", + "{user} revoked delegation for {account}" : "{user} revogou a delegação para {account}", "Mail Application" : "Aplicativo de E-Mails", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com o seguinte e-mail: %3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "Porta SMTP", "SMTP User" : "Usuário SMTP", "SMTP Password" : "Senha SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que a conta do Google funcione com este aplicativo, você precisa ativar a autenticação de dois fatores para o Google e gerar uma senha de aplicativo.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "O Google exige autenticação OAuth. Se a administração do Nextcloud não tiver configurado o OAuth do Google, você pode usar uma senha de aplicativo do Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "O Microsoft exige autenticação OAuth. Peça à administração do Nextcloud para configurar o OAuth do Microsoft nas configurações de administração.", "Account settings" : "Configurações de conta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Mapeamento de alias para certificado S/MIME", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "Servidor de e-mail", "Sieve server" : "Servidor Sieve", "Folder search" : "Pesquisa em pastas", + "Alias name" : "Nome alias", + "Email address" : "Endereço de e-mail ", "Update alias" : "Atualizar alias ", "Rename alias" : "Renomear alias", "Show update alias form" : "Mostrar formulário de atualização de alias ", "Delete alias" : "Excluir alias ", "Go back" : "Voltar", "Change name" : "Alterar nome", - "Email address" : "Endereço de e-mail ", "Add alias" : "Adicionar alias", "Create alias" : "Criar alias", "Cancel" : "Cancelar", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "Configurações de e-mail", "General" : "Geral", "Set as default mail app" : "Definir como aplicativo de e-mail padrão", + "{email} (delegated)" : "{email} (delegado)", "Add mail account" : "Adicionar conta de e-mail", "Appearance" : "Aparência", "Show all messages in thread" : "Mostrar todas as mensagens no fio", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "Ordenação", "Newest first" : "Mais recente primeiro", "Oldest first" : "Mais antigo primeiro", + "New text block" : "Novo bloco de texto", + "Title of the text block" : "Título do bloco de texto", + "Content of the text block" : "Conteúdo do bloco de texto", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatares de Gravatar e favicons", "Reply position" : "Posição da reposta", "Top" : "Acima", "Bottom" : "Abaixo", "Text blocks" : "Blocos de texto", "Reusable pieces of text that can be inserted in messages" : "Trechos de texto reutilizáveis que podem ser inseridos em mensagens", - "New text block" : "Novo bloco de texto", "Shared with me" : "Compartilhado comigo", "Privacy" : "Privacidade", "Data collection" : "Coleção de dados", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "Pesquisar", "Send" : "Enviar", "Refresh" : "Atualizar", + "Heading1" : "Cabeçalho1", + "Heading2" : "Cabeçalho2", + "Heading3" : "Cabeçalho3", "About" : "Sobre", "Acknowledgements" : "Reconhecimentos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Este aplicativo inclui o CKEditor, um editor de código aberto. Direitos autorais © Colaboradores do CKEditor. Licenciado sob a GPLv2.", - "Title of the text block" : "Título do bloco de texto", - "Content of the text block" : "Conteúdo do bloco de texto", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Criar automaticamente compromissos tentativa no calendário", "No certificate" : "Sem certificado", "Certificate updated" : "Certificado atualizado", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "Desativar formatação", "Upload attachment" : "Enviar anexo", "Add attachment from Files" : "Adicionar anexo a partir de arquivos", - "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", "Smart picker" : "Seletor inteligente", "Request a read receipt" : "Solicitar confirmação de recebimento", "Sign message with S/MIME" : "Assinar mensagem com S/MIME", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "Segunda-feira de manhã", "Custom date and time" : "Data e hora personalizadas", "Enter a date" : "Insira uma data", - "Choose" : "Escolher", + "Remove attachment {fileName}" : "Remover anexo {fileName}", + "Add as attachment" : "Adicionar como anexo", + "Add as share link" : "Adicionar como link de compartilhamento", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["O anexo excede o tamanho permitido de {size}. Em vez disso, compartilhe o arquivo por meio de um link.","Os anexos excedem o tamanho permitido de {size}. Em vez disso, compartilhe os arquivos por meio de um link.","Os anexos excedem o tamanho permitido de {size}. Em vez disso, compartilhe os arquivos por meio de um link."], - "Choose a file to add as attachment" : "Escolha um arquivo para adicionar como anexo", - "Choose a file to share as a link" : "Escolher um arquivo para compartilhar como link", + "Choose a file" : "Escolher um arquivo", "_{count} attachment_::_{count} attachments_" : ["{count} anexo","{count} anexos","{count} anexos"], "Untitled message" : "Mensagem sem título", "Expand composer" : "Expandir compositor", "Close composer" : "Fechar compositor", "Confirm" : "Confirmar", + "Delegate access" : "Delegar acesso", + "Revoke" : "Revogar", + "{userId} will no longer be able to act on your behalf" : "{userId} não poderá mais agir em seu nome", + "Could not fetch delegates" : "Não foi possível obter os delegados", + "Delegated access to {displayName}" : "Delegar acesso a {displayName}", + "Could not delegate access" : "Não foi possível delegar o acesso", + "Revoked access for {displayName}" : "Acesso revogado de {displayName}", + "Could not revoke delegation" : "Não foi possível revogar a delegação", + "Delegation" : "Delegação", + "Allow users to send, receive, and delete mail on your behalf" : "Permita que os usuários enviem, recebam e excluam e-mails em seu nome", + "Revoke access" : "Revogar acesso", + "Add delegate" : "Adicionar delegado", + "Select a user" : "Selecione um usuário", + "They will be able to send, receive, and delete mail on your behalf" : "Eles poderão enviar, receber e excluir e-mails em seu nome", + "Revoke access?" : "Revogar acesso?", "Tag: {name} deleted" : "Etiqueta: {name} excluída", "An error occurred, unable to delete the tag." : "Ocorreu um erro, não foi possível excluir a etiqueta.", "The tag will be deleted from all messages." : "A etiqueta será excluída de todas as mensagens.", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "Texto rich", "No messages in this folder" : "Sem mensagens nesta pasta", "No messages" : "Sem mensagens", + "Choose" : "Escolher", "Blind copy recipients only" : "Somente destinatários de cópia oculta", "No subject" : "Sem assunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Rascunho:{markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "Não foi possível adiar fio", "Thread was unsnoozed" : "O fio foi desadiado", "Could not unsnooze thread" : "Não foi possível desadiar fio", + "Message saved to Files" : "Mensagem salva em Arquivos", + "Message could not be saved" : "Não foi possível salvar a mensagem", "This summary was AI generated" : "Este resumo foi gerado por IA", "Encrypted message" : "Mensagem criptografada", "This message is unread" : "Esta mensagem não foi lida.", + "Choose a folder to store the message in" : "Escolha uma pasta para salvar a mensagem", "Unfavorite" : "Desfavoritar", "Favorite" : "Favorito", "Unread" : "Não lido", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "Mover Mensagem", "Archive thread" : "Arquivar fio", "Archive message" : "Arquivar mensagem", - "Delete thread" : "Excluir fio", - "Delete message" : "Excluir mensagem", "More actions" : "Mais ações", "Back" : "Voltar", "Set custom snooze" : "Definir adiamento personalizado", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "Responder com reunião", "Create task" : "Criar tarefa", "Download message" : "Baixar mensagem", + "Save message to Files" : "Salvar mensagem em Arquivos", + "Delete thread" : "Excluir fio", + "Delete message" : "Excluir mensagem", "Back to all actions" : "Voltar a todas as ações", "Manage quick actions" : "Gerenciar ações rápidas", "Load more" : "Carregar mais", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "Marcar como não importante", "Mark as important" : "Marcar como importante", "Report this bug" : "Reportar este erro", + "This description was generated by AI." : "Esta descrição foi gerada por IA.", "Event created" : "Evento criado", "Could not create event" : "Não foi possível criar o evento", "Create event" : "Criar evento", + "Title" : "Título", "All day" : "Dia inteiro", "Attendees" : "Participantes", "You can only invite attendees if your account has an email address set" : "Você só pode convidar participantes se sua conta tiver um endereço de e-mail definido.", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "Não foi possível adiar mensagem", "Message was unsnoozed" : "Mensagem foi desadiada", "Could not unsnooze message" : "Não foi possível desadiar mensagem", + "Could not generate direct link: Message ID is missing" : "Não foi possível gerar um link direto: o ID da mensagem está faltando", + "Direct link copied to clipboard" : "Link direto copiado para a área de transferência", + "Copy direct link" : "Copiar link direto", "Forward" : "Encaminhar", + "Only for message recipients" : "Apenas para os destinatários da mensagem", + "Link copied" : "Link copiado", "Move message" : "Mover mensagem", "Translate" : "Traduzir", "Forward message as attachment" : "Encaminhar mensagem como anexo", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "Mover mensagem", "This account cannot connect" : "Esta conta não pode conectar", "Connection failed. Please verify your information and try again" : "Falha na conexão. Verifique suas informações e tente novamente", + "Change password" : "Alterar senha", "Used quota: {quota}% ({limit})" : "Cota usada: {quota}% ({limit})", "Used quota: {quota}%" : "Cota usada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Não foi possível criar a caixa de correio. O nome provavelmente contém caracteres inválidos. Tente outro nome.", "Remove account" : "Excluir a conta", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "A conta do e-mail {email} e os dados em cache serão removidos do Nextcloud, mas não do seu provedor de e-mail.", "Remove {email}" : "Excluir {email}", + "could not delete account" : "não foi possível excluir a conta", "Provisioned account is disabled" : "A conta provisionada está desativada", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Faça o login usando uma senha para habilitar esta conta. A sessão atual está usando autenticação sem senha, p. ex., SSO ou WebAuthn.", + "Delegate account" : "Delegar conta", "Show only subscribed folders" : "Mostrar apenas pastas subscritas", "Add folder" : "Adicionar pasta", "Folder name" : "Nome da pasta", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "Responder somente ao remetente", "Mark as unfavorite" : "Marcar como não-favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", + "Cc:" : "Cc:", + "Bcc:" : "Cco:", "Unsubscribe via link" : "Cancelar inscrição via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar a inscrição interromperá todas as mensagens da lista de discussão {sender}", "Send unsubscribe email" : "Enviar e-mail de cancelamento", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certificado importado com sucesso", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Falha ao importar o certificado. Por favor, certifique-se de que a chave privada corresponda ao certificado e não esteja protegida por uma frase secreta.", "Failed to import the certificate" : "Falha ao importar o certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nome do certificado", "E-mail address" : "Endereço de e-mail", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "Excluir certificado", "No certificate imported yet" : "Nenhum certificado importado ainda", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "Não foi possível carregar a mensagem desejada", "Could not load the message" : "Não foi possível carregar a mensagem", "Error loading message" : "Erro carregando mensagem", - "Determine importance using machine learning" : "Determinar a importância usando aprendizado de máquina", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "As mensagens serão automaticamente marcadas como importantes com base nas mensagens com as quais você interagiu ou marcou como importantes. No início você pode ter que mudar manualmente a importância para ensinar o sistema, mas ele irá melhorar com o tempo.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "As mensagens enviadas por você que exigem uma resposta, mas não receberam uma após alguns dias, serão mostradas aqui.", - "Mark all messages of this folder as read" : "Marcar todas as mensagens desta pasta como lidas", - "Last 7 days" : "Últimos 7 dias", - "From me" : "De mim" + "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", + "Choose a file to add as attachment" : "Escolha um arquivo para adicionar como anexo", + "Choose a file to share as a link" : "Escolher um arquivo para compartilhar como link", + "Delegated access to {userId}" : "Delegar acesso a {userId}", + "Revoked access for {userId}" : "Acesso revogado de {userId}" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json index c04318c81e..9d2145e9b9 100644 --- a/l10n/pt_BR.json +++ b/l10n/pt_BR.json @@ -12,6 +12,10 @@ "Mail" : "E-Mail", "You are reaching your mailbox quota limit for {account_email}" : "Você está atingindo seu limite de cota de caixa de correio para {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "No momento, você está usando {percentage} do armazenamento da sua caixa de correio. Por favor, libere algum espaço excluindo e-mails desnecessários.", + "{account_email} has been delegated to you" : "{account_email} foi delegado a você", + "{user} delegated {account} to you" : "{user} delegou {account} a você", + "{account_email} is no longer delegated to you" : "{account_email} não está mais delegado a você", + "{user} revoked delegation for {account}" : "{user} revogou a delegação para {account}", "Mail Application" : "Aplicativo de E-Mails", "Mails" : "E-Mails", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com o seguinte e-mail: %3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "Porta SMTP", "SMTP User" : "Usuário SMTP", "SMTP Password" : "Senha SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Para que a conta do Google funcione com este aplicativo, você precisa ativar a autenticação de dois fatores para o Google e gerar uma senha de aplicativo.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "O Google exige autenticação OAuth. Se a administração do Nextcloud não tiver configurado o OAuth do Google, você pode usar uma senha de aplicativo do Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "O Microsoft exige autenticação OAuth. Peça à administração do Nextcloud para configurar o OAuth do Microsoft nas configurações de administração.", "Account settings" : "Configurações de conta", "Aliases" : "Aliases", "Alias to S/MIME certificate mapping" : "Mapeamento de alias para certificado S/MIME", @@ -115,13 +120,14 @@ "Mail server" : "Servidor de e-mail", "Sieve server" : "Servidor Sieve", "Folder search" : "Pesquisa em pastas", + "Alias name" : "Nome alias", + "Email address" : "Endereço de e-mail ", "Update alias" : "Atualizar alias ", "Rename alias" : "Renomear alias", "Show update alias form" : "Mostrar formulário de atualização de alias ", "Delete alias" : "Excluir alias ", "Go back" : "Voltar", "Change name" : "Alterar nome", - "Email address" : "Endereço de e-mail ", "Add alias" : "Adicionar alias", "Create alias" : "Criar alias", "Cancel" : "Cancelar", @@ -134,6 +140,7 @@ "Mail settings" : "Configurações de e-mail", "General" : "Geral", "Set as default mail app" : "Definir como aplicativo de e-mail padrão", + "{email} (delegated)" : "{email} (delegado)", "Add mail account" : "Adicionar conta de e-mail", "Appearance" : "Aparência", "Show all messages in thread" : "Mostrar todas as mensagens no fio", @@ -148,13 +155,16 @@ "Sorting" : "Ordenação", "Newest first" : "Mais recente primeiro", "Oldest first" : "Mais antigo primeiro", + "New text block" : "Novo bloco de texto", + "Title of the text block" : "Título do bloco de texto", + "Content of the text block" : "Conteúdo do bloco de texto", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "Avatares de Gravatar e favicons", "Reply position" : "Posição da reposta", "Top" : "Acima", "Bottom" : "Abaixo", "Text blocks" : "Blocos de texto", "Reusable pieces of text that can be inserted in messages" : "Trechos de texto reutilizáveis que podem ser inseridos em mensagens", - "New text block" : "Novo bloco de texto", "Shared with me" : "Compartilhado comigo", "Privacy" : "Privacidade", "Data collection" : "Coleção de dados", @@ -182,12 +192,12 @@ "Search" : "Pesquisar", "Send" : "Enviar", "Refresh" : "Atualizar", + "Heading1" : "Cabeçalho1", + "Heading2" : "Cabeçalho2", + "Heading3" : "Cabeçalho3", "About" : "Sobre", "Acknowledgements" : "Reconhecimentos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Este aplicativo inclui o CKEditor, um editor de código aberto. Direitos autorais © Colaboradores do CKEditor. Licenciado sob a GPLv2.", - "Title of the text block" : "Título do bloco de texto", - "Content of the text block" : "Conteúdo do bloco de texto", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "Criar automaticamente compromissos tentativa no calendário", "No certificate" : "Sem certificado", "Certificate updated" : "Certificado atualizado", @@ -231,7 +241,6 @@ "Disable formatting" : "Desativar formatação", "Upload attachment" : "Enviar anexo", "Add attachment from Files" : "Adicionar anexo a partir de arquivos", - "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", "Smart picker" : "Seletor inteligente", "Request a read receipt" : "Solicitar confirmação de recebimento", "Sign message with S/MIME" : "Assinar mensagem com S/MIME", @@ -243,15 +252,31 @@ "Monday morning" : "Segunda-feira de manhã", "Custom date and time" : "Data e hora personalizadas", "Enter a date" : "Insira uma data", - "Choose" : "Escolher", + "Remove attachment {fileName}" : "Remover anexo {fileName}", + "Add as attachment" : "Adicionar como anexo", + "Add as share link" : "Adicionar como link de compartilhamento", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["O anexo excede o tamanho permitido de {size}. Em vez disso, compartilhe o arquivo por meio de um link.","Os anexos excedem o tamanho permitido de {size}. Em vez disso, compartilhe os arquivos por meio de um link.","Os anexos excedem o tamanho permitido de {size}. Em vez disso, compartilhe os arquivos por meio de um link."], - "Choose a file to add as attachment" : "Escolha um arquivo para adicionar como anexo", - "Choose a file to share as a link" : "Escolher um arquivo para compartilhar como link", + "Choose a file" : "Escolher um arquivo", "_{count} attachment_::_{count} attachments_" : ["{count} anexo","{count} anexos","{count} anexos"], "Untitled message" : "Mensagem sem título", "Expand composer" : "Expandir compositor", "Close composer" : "Fechar compositor", "Confirm" : "Confirmar", + "Delegate access" : "Delegar acesso", + "Revoke" : "Revogar", + "{userId} will no longer be able to act on your behalf" : "{userId} não poderá mais agir em seu nome", + "Could not fetch delegates" : "Não foi possível obter os delegados", + "Delegated access to {displayName}" : "Delegar acesso a {displayName}", + "Could not delegate access" : "Não foi possível delegar o acesso", + "Revoked access for {displayName}" : "Acesso revogado de {displayName}", + "Could not revoke delegation" : "Não foi possível revogar a delegação", + "Delegation" : "Delegação", + "Allow users to send, receive, and delete mail on your behalf" : "Permita que os usuários enviem, recebam e excluam e-mails em seu nome", + "Revoke access" : "Revogar acesso", + "Add delegate" : "Adicionar delegado", + "Select a user" : "Selecione um usuário", + "They will be able to send, receive, and delete mail on your behalf" : "Eles poderão enviar, receber e excluir e-mails em seu nome", + "Revoke access?" : "Revogar acesso?", "Tag: {name} deleted" : "Etiqueta: {name} excluída", "An error occurred, unable to delete the tag." : "Ocorreu um erro, não foi possível excluir a etiqueta.", "The tag will be deleted from all messages." : "A etiqueta será excluída de todas as mensagens.", @@ -259,6 +284,7 @@ "Rich text" : "Texto rich", "No messages in this folder" : "Sem mensagens nesta pasta", "No messages" : "Sem mensagens", + "Choose" : "Escolher", "Blind copy recipients only" : "Somente destinatários de cópia oculta", "No subject" : "Sem assunto", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Rascunho:{markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "Não foi possível adiar fio", "Thread was unsnoozed" : "O fio foi desadiado", "Could not unsnooze thread" : "Não foi possível desadiar fio", + "Message saved to Files" : "Mensagem salva em Arquivos", + "Message could not be saved" : "Não foi possível salvar a mensagem", "This summary was AI generated" : "Este resumo foi gerado por IA", "Encrypted message" : "Mensagem criptografada", "This message is unread" : "Esta mensagem não foi lida.", + "Choose a folder to store the message in" : "Escolha uma pasta para salvar a mensagem", "Unfavorite" : "Desfavoritar", "Favorite" : "Favorito", "Unread" : "Não lido", @@ -298,8 +327,6 @@ "Move Message" : "Mover Mensagem", "Archive thread" : "Arquivar fio", "Archive message" : "Arquivar mensagem", - "Delete thread" : "Excluir fio", - "Delete message" : "Excluir mensagem", "More actions" : "Mais ações", "Back" : "Voltar", "Set custom snooze" : "Definir adiamento personalizado", @@ -307,6 +334,9 @@ "Reply with meeting" : "Responder com reunião", "Create task" : "Criar tarefa", "Download message" : "Baixar mensagem", + "Save message to Files" : "Salvar mensagem em Arquivos", + "Delete thread" : "Excluir fio", + "Delete message" : "Excluir mensagem", "Back to all actions" : "Voltar a todas as ações", "Manage quick actions" : "Gerenciar ações rápidas", "Load more" : "Carregar mais", @@ -327,9 +357,11 @@ "Mark as unimportant" : "Marcar como não importante", "Mark as important" : "Marcar como importante", "Report this bug" : "Reportar este erro", + "This description was generated by AI." : "Esta descrição foi gerada por IA.", "Event created" : "Evento criado", "Could not create event" : "Não foi possível criar o evento", "Create event" : "Criar evento", + "Title" : "Título", "All day" : "Dia inteiro", "Attendees" : "Participantes", "You can only invite attendees if your account has an email address set" : "Você só pode convidar participantes se sua conta tiver um endereço de e-mail definido.", @@ -400,7 +432,12 @@ "Could not snooze message" : "Não foi possível adiar mensagem", "Message was unsnoozed" : "Mensagem foi desadiada", "Could not unsnooze message" : "Não foi possível desadiar mensagem", + "Could not generate direct link: Message ID is missing" : "Não foi possível gerar um link direto: o ID da mensagem está faltando", + "Direct link copied to clipboard" : "Link direto copiado para a área de transferência", + "Copy direct link" : "Copiar link direto", "Forward" : "Encaminhar", + "Only for message recipients" : "Apenas para os destinatários da mensagem", + "Link copied" : "Link copiado", "Move message" : "Mover mensagem", "Translate" : "Traduzir", "Forward message as attachment" : "Encaminhar mensagem como anexo", @@ -442,14 +479,17 @@ "Moving message" : "Mover mensagem", "This account cannot connect" : "Esta conta não pode conectar", "Connection failed. Please verify your information and try again" : "Falha na conexão. Verifique suas informações e tente novamente", + "Change password" : "Alterar senha", "Used quota: {quota}% ({limit})" : "Cota usada: {quota}% ({limit})", "Used quota: {quota}%" : "Cota usada: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Não foi possível criar a caixa de correio. O nome provavelmente contém caracteres inválidos. Tente outro nome.", "Remove account" : "Excluir a conta", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "A conta do e-mail {email} e os dados em cache serão removidos do Nextcloud, mas não do seu provedor de e-mail.", "Remove {email}" : "Excluir {email}", + "could not delete account" : "não foi possível excluir a conta", "Provisioned account is disabled" : "A conta provisionada está desativada", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Faça o login usando uma senha para habilitar esta conta. A sessão atual está usando autenticação sem senha, p. ex., SSO ou WebAuthn.", + "Delegate account" : "Delegar conta", "Show only subscribed folders" : "Mostrar apenas pastas subscritas", "Add folder" : "Adicionar pasta", "Folder name" : "Nome da pasta", @@ -622,6 +662,10 @@ "Reply to sender only" : "Responder somente ao remetente", "Mark as unfavorite" : "Marcar como não-favorito", "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", + "Cc:" : "Cc:", + "Bcc:" : "Cco:", "Unsubscribe via link" : "Cancelar inscrição via link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar a inscrição interromperá todas as mensagens da lista de discussão {sender}", "Send unsubscribe email" : "Enviar e-mail de cancelamento", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "Certificado importado com sucesso", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Falha ao importar o certificado. Por favor, certifique-se de que a chave privada corresponda ao certificado e não esteja protegida por uma frase secreta.", "Failed to import the certificate" : "Falha ao importar o certificado", + "Import S/MIME certificate" : "Importar certificado S/MIME", "S/MIME certificates" : "Certificados S/MIME", "Certificate name" : "Nome do certificado", "E-mail address" : "Endereço de e-mail", @@ -825,7 +870,6 @@ "Delete certificate" : "Excluir certificado", "No certificate imported yet" : "Nenhum certificado importado ainda", "Import certificate" : "Importar certificado", - "Import S/MIME certificate" : "Importar certificado S/MIME", "PKCS #12 Certificate" : "Certificado PKCS #12", "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", @@ -887,11 +931,10 @@ "Could not load the desired message" : "Não foi possível carregar a mensagem desejada", "Could not load the message" : "Não foi possível carregar a mensagem", "Error loading message" : "Erro carregando mensagem", - "Determine importance using machine learning" : "Determinar a importância usando aprendizado de máquina", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "As mensagens serão automaticamente marcadas como importantes com base nas mensagens com as quais você interagiu ou marcou como importantes. No início você pode ter que mudar manualmente a importância para ensinar o sistema, mas ele irá melhorar com o tempo.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "As mensagens enviadas por você que exigem uma resposta, mas não receberam uma após alguns dias, serão mostradas aqui.", - "Mark all messages of this folder as read" : "Marcar todas as mensagens desta pasta como lidas", - "Last 7 days" : "Últimos 7 dias", - "From me" : "De mim" + "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", + "Choose a file to add as attachment" : "Escolha um arquivo para adicionar como anexo", + "Choose a file to share as a link" : "Escolher um arquivo para compartilhar como link", + "Delegated access to {userId}" : "Delegar acesso a {userId}", + "Revoked access for {userId}" : "Acesso revogado de {userId}" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/pt_PT.js b/l10n/pt_PT.js index 79a4c010a7..259446e0a7 100644 --- a/l10n/pt_PT.js +++ b/l10n/pt_PT.js @@ -3,6 +3,7 @@ OC.L10N.register( { "Embedded message %s" : "Mensagem embebida %s", "Important mail" : "Mensagem importante", + "No message found yet" : "Nenhuma mensagem ainda", "Set up an account" : "Configurar uma conta", "Unread mail" : "Mensagem por ler", "Important" : "Importante", @@ -11,20 +12,65 @@ OC.L10N.register( "To Do" : "A fazer", "Later" : "Mais tarde", "Mail" : "Correio", + "You are reaching your mailbox quota limit for {account_email}" : "Você está atingindo seu limite de cota de caixa de correio para {account_email}", + "{account_email} has been delegated to you" : "{account_email} foi delegado a você", + "{user} delegated {account} to you" : "{user} delegou {account} a você", + "{account_email} is no longer delegated to you" : "{account_email} não está mais delegado a você", + "{user} revoked delegation for {account}" : "{user} revogou a delegação para {account}", + "Mail Application" : "Aplicativo de E-Mails", "Mails" : "Mensagens", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com o seguinte e-mail: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com os seguintes e-mails: %3$s", + "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "O remetente está usando um e-mail personalizado: %1$s em vez do e-mail do remetente: %2$s", + "Sent date is in the future" : "A data de envio está no futuro", + "Mail server marked this message as phishing attempt" : "O servidor de e-mail marcou esta mensagem como tentativa de phishing", + "Some addresses in this message are not matching the link text" : "Alguns endereços nesta mensagem não correspondem ao texto dos links", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Detectada lentidão no serviço de e-mail (%1$s) uma tentativa de conexão com várias contas levou uma média de %2$s segundos por conta", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Detectada lentidão no serviço de e-mail (%1$s) uma tentativa de realizar uma operação de listagem de caixas de e-mail em várias contas levou uma média de %2$s segundos por conta", + "Mail Transport configuration" : "Configuração de Transporte de E-mail", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "A configuração app.mail.transport não está definida como smtp. Essa configuração pode causar problemas com medidas modernas de segurança de e-mail, como SPF e DKIM, porque os e-mails são enviados diretamente do servidor web, que geralmente não está configurado corretamente para essa finalidade. Para resolver esse problema, descontinuamos o suporte ao transporte de e-mail. Remova app.mail.transport de sua configuração para usar o transporte SMTP e ocultar esta mensagem. É necessária uma configuração SMTP adequada para garantir a entrega de e-mails.", + "Mail account parameters, aliases and preferences" : "Parâmetros, aliases e preferências da conta de e-mail", "💌 A mail app for Nextcloud" : "Uma aplicação de correio eletrónico para Nextcloud", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Um aplicativo de e-mail para o Nextcloud**\n\n- **🚀 Integração com outros aplicativos do Nextcloud!** Atualmente, Contatos, Calendário e Arquivos - mais em breve.\n- **📥 Várias contas de e-mail!** Conta pessoal e conta da empresa? Sem problemas, e uma bela caixa de entrada unificada. Conecte qualquer conta IMAP.\n- **🔒 Envie & receba e-mails criptografados!** Usando a excelente extensão de navegador [Mailvelope](https://mailvelope.com).\n- **🙈 Não estamos reinventando a roda!** Baseado nas excelentes bibliotecas [Horde](https://www.horde.org).\n- **📬 Deseja hospedar seu próprio servidor de e-mail?** Não precisamos reimplementar isso, pois você pode configurar o [Mail-in-a-Box](https://mailinabox.email)!\n\n## Classificação Ética de IA\n\n### Caixa de Entrada Prioritária\n\nPositivo:\n* O software para treinamento e inferência desse modelo é de código aberto.\n* O modelo é criado e treinado no local com base nos dados do próprio usuário.\n* Os dados de treinamento podem ser acessados pelo usuário, possibilitando a verificação ou a correção de vieses ou a otimização do desempenho e do uso de CO2.\n\n### Resumos de fios (opt-in)\n\n**Classificação:** 🟢/🟡/🟠/🔴\n\nA classificação depende do back-end de processamento de texto instalado. Consulte [a visão geral da classificação](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) para obter detalhes.\n\nSaiba mais sobre a Classificação Ética de IA do Nextcloud [em nosso blog] (https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", + "Your session has expired. The page will be reloaded." : "Sua sessão expirou. A página será recarregada.", "Drafts are saved in:" : "Os rascunhos são guardados em:", "Sent messages are saved in:" : "As mensagens enviadas são guardadas em:", "Deleted messages are moved in:" : "Deleted messages are moved in:", + "Archived messages are moved in:" : "Mensagens arquivadas são movidas para:", + "Snoozed messages are moved in:" : "Mensagens no modo soneca são movidas para:", "Connecting" : "A ligar", "Reconnect Google account" : "Religar conta Google", + "Sign in with Google" : "Faça login no Google", "Reconnect Microsoft account" : "Religar conta Microsoft", + "Sign in with Microsoft" : "Fazer login com a Microsoft", "Save" : "Guardar", "Connect" : "Ligar", + "Looking up configuration" : "Procurando configuração", + "Checking mail host connectivity" : "Verificando a conectividade do host de e-mail", + "Configuration discovery failed. Please use the manual settings" : "Falha na descoberta da configuração. Por favor, use as configurações manuais", "Password required" : "Necessário palavra-passe", + "Testing authentication" : "Testando a autenticação", + "Account created. Please follow the pop-up instructions to link your Google account" : "Conta criada. Por favor, siga as instruções no pop-up para vincular sua conta do Google", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "Conta criada. Por favor, siga as instruções no pop-up para vincular sua conta da Microsoft", + "Loading account" : "Carregando conta", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "Conta atualizada. Por favor, siga as instruções no pop-up para reconectar sua conta da Microsoft", + "Account updated" : "Conta atualizada", + "IMAP server is not reachable" : "O servidor IMAP não está acessível", + "SMTP server is not reachable" : "O servidor SMTP não está acessível", + "IMAP username or password is wrong" : "O nome de usuário ou senha IMAP está errado", + "SMTP username or password is wrong" : "O nome de usuário ou senha SMTP está errado", + "SMTP server denied authentication" : "O servidor SMTP negou a autenticação", + "IMAP authentication error" : "Erro de autenticação IMAP", + "IMAP connection failed" : "Falha na conexão IMAP", + "SMTP connection failed" : "Falha na conexão SMTP", + "Authorization pop-up closed" : "Pop-up de autorização fechado", + "Configuration discovery temporarily not available. Please try again later." : "Descoberta de configuração temporariamente indisponível. Por favor, tente novamente mais tarde.", + "There was an error while setting up your account" : "Ocorreu um erro ao configurar sua conta", "Auto" : "Auto", "Name" : "Nome", + "name@example.org" : "nome@example.org", "Password" : "Palavra-passe", + "Enable mark as important classification" : "Ativar a classificação \"marcar como importante\"", "Manual" : "Manual", "IMAP Settings" : "Definições IMAP", "IMAP Host" : "Anfitrião de IMAP", @@ -41,22 +87,39 @@ OC.L10N.register( "SMTP Port" : "Porto SMTP", "SMTP User" : "Utilizador SMTP", "SMTP Password" : "Palavra-passe SMTP", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "O Google exige autenticação OAuth. Se a administração do Nextcloud não tiver configurado o OAuth do Google, você pode usar uma senha de aplicativo do Google.", "Account settings" : "Definições da conta", + "Alias to S/MIME certificate mapping" : "Mapeamento de alias para certificado S/MIME", "Signature" : "Assinatura", "A signature is added to the text of new messages and replies." : "A assinatura é adicionada ao texto das novas mensagens e respostas.", "Writing mode" : "Modo de escrita", "Preferred writing mode for new messages and replies." : "Modo de escrita pré definido para novas mensagens e respostas.", "Default folders" : "Pastas pré definidas", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "As pastas a serem usadas para rascunhos, mensagens enviadas, mensagens excluídas, mensagens arquivadas e mensagens de spam.", + "Days after which messages in Trash will automatically be deleted:" : "Dias após os quais as mensagens na Lixeira serão excluídas automaticamente:", + "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Resposta automática às mensagens recebidas. Se alguém lhe enviar várias mensagens, esta resposta automática será enviada no máximo uma vez a cada 4 dias.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "A resposta automática usa o Sieve, uma linguagem de script suportada por muitos provedores de e-mail. Se não tiver certeza de que o seu suporta, verifique com seu provedor. Se o Sieve estiver disponível, clique no botão para acessar as configurações e ativá-lo.", + "Go to Sieve settings" : "Vá para as configurações do Sieve", "Calendar settings" : "Configurações do calendário", "Filters" : "Filtros", + "Quick actions" : "Ações rápidas", "Mail server" : "Servidor de correio eletrónico", + "Sieve server" : "Servidor Sieve", + "Folder search" : "Pesquisa em pastas", + "Email address" : "Endereço de email", + "Rename alias" : "Renomear alias", + "Show update alias form" : "Mostrar formulário de atualização de alias ", "Go back" : "Voltar", "Change name" : "Alterar nome", - "Email address" : "Endereço de email", "Add alias" : "Adicionar alcunha", + "Create alias" : "Criar alias", "Cancel" : "Cancelar", "Search the body of messages in priority Inbox" : "Pesquise o corpo das mensagens na Caixa de entrada prioritária.", + "Activate" : "Ativar", + "Make mails available to Context Chat" : "Disponibilizar e-mails para o Context Chat", + "Remind about messages that require a reply but received none" : "Lembrar sobre mensagens que exigem uma resposta, mas não receberam nenhuma", "Highlight external addresses" : "Destacar endereços externos", + "Could not update preference" : "Não foi possível atualizar a preferência ", "Mail settings" : "Definições de e-mail", "General" : "Geral", "Set as default mail app" : "Definir como aplicação de e-mail predefinida", @@ -64,20 +127,24 @@ OC.L10N.register( "Appearance" : "Aspeto", "Show all messages in thread" : "Mostrar todas as mensagens da conversa", "When off, only the selected message will be shown" : "Quando desativado, apenas a mensagem selecionada será apresentada.", + "Sort favorites up" : "Ordenar favoritos no topo", "Layout" : "Esquema", "Vertical split" : "Divisão vertical", "Horizontal split" : "Divisão horizontal", "List" : "Lista", + "Use compact mode" : "Usar modo compacto", "Sorting" : "Ordenação", "Newest first" : "Recentes primeiro", "Oldest first" : "Antigos primeiro", + "New text block" : "Novo bloco de texto", + "Content of the text block" : "Conteúdo do bloco de texto", + "Ok" : "CONFIRMAR", "Avatars from Gravatar and favicons" : "Avatares do Gravatar e favicons", "Reply position" : "Posição de resposta", "Top" : "Topo", "Bottom" : "Fundo", "Text blocks" : "Blocos de texto", "Reusable pieces of text that can be inserted in messages" : "Excertos de texto reutilizáveis ​​que podem ser inseridos nas mensagens.", - "New text block" : "Novo bloco de texto", "Shared with me" : "Partilhadas comigo", "Privacy" : "Privacidade", "Data collection" : "Recolha de dados", @@ -85,11 +152,14 @@ OC.L10N.register( "Always show images from" : "Mostrar sempre imagens de", "Security" : "Segurança", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Faça a gestão dos seus endereços e domínios internos para garantir que os contactos reconhecidos permanecem sem marcação.", + "S/MIME" : "S/MIME", "Manage certificates" : "Gerir certificados", "Mailvelope" : "Mailvelope", "Mailvelope is enabled for the current domain." : "O Mailvelope está ativado para o domínio atual", + "Step 1" : "Etapa 1", "Install the browser extension" : "Instalar a extensão do browser", "Enable for the current domain" : "Ativar para o domínio atual", + "Context Chat integration" : "Integração Context Chat", "Compose new message" : "Compor nova mensagem", "Newer message" : "Mensagem mais recente", "Older message" : "Mensagem mais antiga", @@ -100,72 +170,216 @@ OC.L10N.register( "Search" : "Pesquisar", "Send" : "Enviar", "Refresh" : "Atualizar", + "Heading1" : "Cabeçalho1", + "Heading2" : "Cabeçalho2", + "Heading3" : "Cabeçalho3", "About" : "Sobre", "Acknowledgements" : "Reconhecimentos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicação inclui o CKEditor, um editor de código aberto. Copyright © Colaboradores do CKEditor. Licenciado sob a GPLv2.", - "Ok" : "CONFIRMAR", + "Automatically create tentative appointments in calendar" : "Criar automaticamente compromissos tentativa no calendário", + "Could not update certificate" : "Não foi possível atualizar o certificado", + "{commonName} - Valid until {expiryDate}" : "{commonName} - Válido até {expiryDate}", + "Select an alias" : "Selecionar alias", + "Select certificates" : "Selecionar certificados", + "Update Certificate" : "Atualizar Certificado", + "Encrypt with S/MIME and send later" : "Criptografar com S/MIME e enviar mais tarde", + "Encrypt with S/MIME and send" : "Criptografar com S/MIME e enviar", + "Encrypt with Mailvelope and send later" : "Criptografar com Mailvelope e enviar mais tarde", + "Send later" : "Enviar mais tarde", + "Message {id} could not be found" : "A mensagem {id} não foi encontrada", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "A opção Assinar ou Criptografar com S/MIME foi selecionada, mas não temos um certificado para o alias selecionado. A mensagem não será assinada ou criptografada.", + "Turn off formatting" : "Desativar formatação", + "Turn off and remove formatting" : "Desativar e remover formatação", "From" : "De", "Select account" : "Selecionar uma conta", "To" : "Para", + "Cc/Bcc" : "Cc/Cco", + "Contact or email address …" : "Contato ou endereço de e-mail …", "Cc" : "Cc", "Bcc" : "Bcc", "Subject" : "Assunto", + "Subject …" : "Assunto …", + "This message came from a noreply address so your reply will probably not be read." : "Esta mensagem veio de um endereço noreply, portanto sua resposta provavelmente não será lida.", + "The following recipients do not have a PGP key: {recipients}." : "Os seguintes destinatários não possuem uma chave PGP: {recipients}.", + "Write message …" : "Escrever a mensagem …", + "Error saving draft" : "Erro ao salvar rascunho", "Draft saved" : "Rascunho guardado", + "Save draft" : "Salvar rascunho", "Enable formatting" : "Ativar formatação", + "Disable formatting" : "Desativar formatação", "Upload attachment" : "Carregar anexo", "Add attachment from Files" : "Adicionar anexo a partir dos ficheiros", + "Smart picker" : "Seletor inteligente", "Request a read receipt" : "Solicitar um recibo de leitura", + "Encrypt message with S/MIME" : "Criptografar mensagem com S/MIME", "Encrypt message with Mailvelope" : "Cifrar a mensagem com Mailvelope", - "Choose" : "Escolher", - "Choose a file to add as attachment" : "Escolha um ficheiro para adicionar como anexo", + "Send now" : "Enviar agora", + "Tomorrow morning" : "Amanhã de manhã", + "Tomorrow afternoon" : "Amanhã à tarde", + "Enter a date" : "Insira uma data", + "Remove attachment {fileName}" : "Remover anexo {fileName}", + "Choose a file" : "Escolher um arquivo", + "Untitled message" : "Mensagem sem título", + "Expand composer" : "Expandir compositor", + "Close composer" : "Fechar compositor", "Confirm" : "Confirmar", + "Delegate access" : "Delegar acesso", + "Revoke" : "Revogar", + "Delegated access to {displayName}" : "Delegar acesso a {displayName}", + "Could not delegate access" : "Não foi possível delegar o acesso", + "Revoked access for {displayName}" : "Acesso revogado de {displayName}", + "Could not revoke delegation" : "Não foi possível revogar a delegação", + "Delegation" : "Delegação", + "Allow users to send, receive, and delete mail on your behalf" : "Permita que os usuários enviem, recebam e excluam e-mails em seu nome", + "Revoke access" : "Revogar acesso", + "Add delegate" : "Adicionar delegado", + "Select a user" : "Selecione um usuário", + "Revoke access?" : "Revogar acesso?", + "Tag: {name} deleted" : "Etiqueta: {name} excluída", + "An error occurred, unable to delete the tag." : "Ocorreu um erro, não foi possível excluir a etiqueta.", + "The tag will be deleted from all messages." : "A etiqueta será excluída de todas as mensagens.", "Plain text" : "Texto simples", + "Rich text" : "Texto rich", + "No messages in this folder" : "Sem mensagens nesta pasta", "No messages" : "Sem mensagens", + "Choose" : "Escolher", + "Blind copy recipients only" : "Somente destinatários de cópia oculta", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Rascunho:{markup-end} {subject}", + "Later today – {timeLocale}" : "Hoje mais tarde – {timeLocale}", + "Set reminder for later today" : "Definir lembrete para hoje mais tarde", + "Tomorrow – {timeLocale}" : "Amanhã – {timeLocale}", + "Set reminder for tomorrow" : "Definir lembrete para amanhã", + "This weekend – {timeLocale}" : "Este fim de semana – {timeLocale}", + "Set reminder for this weekend" : "Definir lembrete para este fim de semana", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Set reminder for next week" : "Definir lembrete para próxima semana", + "Could not apply tag, configured tag not found" : "Não foi possível aplicar a etiqueta, etiqueta configurada não encontrada", + "Could not move thread, destination mailbox not found" : "Não foi possível mover o fio, caixa de correio de destino não encontrada", + "Could not execute quick action" : "Não foi possível executar a ação rápida", + "Quick action executed" : "Ação rápida executada", + "No trash folder configured" : "Nenhuma pasta \"lixeira\" configurada", "Could not delete message" : "Não foi possível apagar a mensagem", + "Could not archive message" : "Não foi possível arquivar a mensagem", + "Could not snooze thread" : "Não foi possível adiar fio", + "Could not unsnooze thread" : "Não foi possível desadiar fio", + "This summary was AI generated" : "Este resumo foi gerado por IA", + "Encrypted message" : "Mensagem criptografada", + "This message is unread" : "Esta mensagem não foi lida.", "Unfavorite" : "Não favorito", "Favorite" : "Favorito", + "Unread" : "Não lido", "Read" : "Ler", + "Unimportant" : "Não importante", "Mark as spam" : "Marcar como spam", "Edit tags" : "Editar etiquetas", + "Unsnooze" : "Desadiar", + "Move thread" : "Mover fio", + "Archive thread" : "Arquivar fio", + "Archive message" : "Arquivar mensagem", "More actions" : "Mais ações", "Back" : "Anterior", + "Set custom snooze" : "Definir adiamento personalizado", "Edit as new message" : "Editar como nova mensagem", + "Create task" : "Criar tarefa", "Download message" : "Transferir mensagem", + "Delete thread" : "Excluir fio", + "Delete message" : "Excluir mensagem", + "Manage quick actions" : "Gerenciar ações rápidas", "Load more" : "Carregar mais", "_Edit tags for {number}_::_Edit tags for {number}_" : ["Editar etiquetas para {number}","Editar etiquetas para {number}","Editar etiquetas para {number}"], + "Mark as unread" : "Marcar como não lido", + "Mark as read" : "Marcar como lido", + "Mark as unimportant" : "Marcar como não importante", + "This description was generated by AI." : "Esta descrição foi gerada por IA.", + "Event created" : "Evento criado", "Could not create event" : "Não foi possível criar o evento", "Create event" : "Criar evento", + "Title" : "Título", "All day" : "Todo o dia", "Attendees" : "Participantes", + "You can only invite attendees if your account has an email address set" : "Você só pode convidar participantes se sua conta tiver um endereço de e-mail definido.", + "Select calendar" : "Selecionar calendário", "Description" : "Descrição", "Create" : "Criar", + "This event was updated" : "Este evento foi atualizado", + "{attendeeName} accepted your invitation" : "{attendeeName} aceitou seu convite", + "{attendeeName} tentatively accepted your invitation" : "{attendeeName} aceitou seu convite como tentativa", + "{attendeeName} declined your invitation" : "{attendeeName} recusou seu convite", + "{attendeeName} reacted to your invitation" : "{attendeeName} reagiu ao seu convite", + "You accepted this invitation" : "Você aceitou este convite", + "You tentatively accepted this invitation" : "Você aceitou este convite como tentativa", + "You already reacted to this invitation" : "Você já reagiu a este convite", + "This event was cancelled" : "Este evento foi cancelado", + "Save to" : "Salvar em", "Select" : "Selecionar", "Comment" : "Comentário", "Accept" : "Aceitar", "Decline" : "Recusar", + "Tentatively accept" : "Aceitar como tentativa", + "More options" : "Mais opções", + "This message has an attached invitation but the invitation dates are in the past" : "Esta mensagem tem um convite anexado, mas as datas do convite estão no passado", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Esta mensagem tem um convite anexado, mas o convite não contém um participante que corresponda a nenhum endereço de conta de e-mail configurado", + "Could not remove internal address {sender}" : "Não foi possível remover o endereço interno {sender}", + "Could not add internal address {address}" : "Não foi possível adicionar o endereço interno {address}", "individual" : "individual", "domain" : "domínio", "Remove" : "Remover", "Add internal address" : "Adicionar endereço interno", + "Add internal email or domain" : "Adicionar e-mail ou domínio interno", + "Itinerary for {type} is not supported yet" : "O itinerário para {type} ainda não é suportado", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Você não tem permissão para mover esta mensagem para a pasta de arquivos e/ou excluir esta mensagem da pasta atual", + "Your IMAP server does not support storing the seen/unseen state." : "Seu servidor IMAP não suporta o armazenamento do estado visto/não visto.", "Last hour" : "Ultima hora", "Today" : "Hoje", + "Yesterday" : "Ontem", "Last week" : "Ultima semana", "Last month" : "Ultimo mês", + "Could not open folder" : "Não foi possível abrir a pasta", + "Loading messages …" : "Carregando a mensagem …", + "Indexing your messages. This can take a bit longer for larger folders." : "Indexação de suas mensagens. Isso pode demorar um pouco mais para pastas maiores.", "Choose target folder" : "Escolher pasta de destino", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "As mensagens serão automaticamente marcadas como importantes usando IA. O sistema aprende com quais mensagens você interage ou marca como importantes. No início, talvez seja necessário alterar manualmente a importância para ensiná-lo, mas ele irá melhorar com o tempo", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "As mensagens que você marcou como favoritas serão exibidas na parte superior das pastas. Você pode desativar esse comportamento nas configurações do aplicativo", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "A IA identifica as mensagens enviadas por você que provavelmente exigem uma resposta, mas não receberam nenhuma após alguns dias, e as exibe aqui.", "Favorites" : "Favoritos", + "Load more favorites" : "Carregar mais favoritos", + "Follow up" : "Acompanhar", + "Follow up info" : "Informações de acompanhamento", "Important info" : "Informação importante", + "Load more important messages" : "Carregar mais mensagens importantes", "Other" : "Outro", + "Load more other messages" : "Carregar mais outras mensagens", + "Could not send mdn" : "Não foi possível enviar MDN", "Notify the sender" : "Notificar o remetente", + "Message was snoozed" : "Mensagem foi adiada", + "Could not snooze message" : "Não foi possível adiar mensagem", + "Message was unsnoozed" : "Mensagem foi desadiada", + "Could not unsnooze message" : "Não foi possível desadiar mensagem", + "Could not generate direct link: Message ID is missing" : "Não foi possível gerar um link direto: o ID da mensagem está faltando", + "Direct link copied to clipboard" : "Ligação direta copiada para a área de transferência", + "Copy direct link" : "Copiar link direto", "Forward" : "Encaminhar", + "Link copied" : "Hiperligação copiada", + "Move message" : "Mover mensagem", "Translate" : "Traduzir", "View source" : "Ver fonte", + "Print message" : "Imprimir mensagem", + "Create mail filter" : "Criar filtro de e-mail", + "Download thread data for debugging" : "Baixar dados do fio para depuração", + "Suggested replies are using AI" : "As respostas sugeridas são geradas por IA", "Message body" : "Corpo da mensagem", + "AI info" : "Informações sobre IA", "Unnamed" : "Sem nome", "Embedded message" : "Mensagem embebida", + "Attachment saved to Files" : "Anexo salvo em Arquivos", + "Attachment could not be saved" : "Não foi possível salvar o anexo", + "calendar imported" : "calendário importado", "Choose a folder to store the attachment in" : "Escolha uma pasta para guardar o anexo", "Import into calendar" : "Importar para o calendário", "Download attachment" : "Transferir anexo", "Save to Files" : "Guardar em Ficheiros", + "Error while saving attachments" : "Erro ao salvar anexos", + "View fewer attachments" : "Exibir menos anexos", "Choose a folder to store the attachments in" : "Escolha uma pasta para armazenar anexos", "Save all to Files" : "Guardar todos em Ficheiros", "Download Zip" : "Transferir Zip", @@ -174,87 +388,344 @@ OC.L10N.register( "Show images temporarily" : "Mostrar imagens temporariamente", "Always show images from {sender}" : "Mostrar sempre as imagem de {sender}", "Always show images from {domain}" : "Mostrar sempre as imagem de {domain}", + "Message frame" : "Quadro da mensagem", + "Quoted text" : "Texto citado", "Move" : "Mover", "Moving" : "A mover", + "Moving thread" : "Movendo fio", + "Moving message" : "Mover mensagem", + "This account cannot connect" : "Esta conta não pode conectar", + "Change password" : "Alterar senha", + "Used quota: {quota}% ({limit})" : "Cota usada: {quota}% ({limit})", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Não foi possível criar a caixa de correio. O nome provavelmente contém caracteres inválidos. Tente outro nome.", "Remove account" : "Remover conta", + "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "A conta do e-mail {email} e os dados em cache serão removidos do Nextcloud, mas não do seu provedor de e-mail.", "Remove {email}" : "Remover {email}", + "could not delete account" : "não foi possível excluir a conta", + "Provisioned account is disabled" : "A conta provisionada está desativada", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Faça o login usando uma senha para habilitar esta conta. A sessão atual está usando autenticação sem senha, p. ex., SSO ou WebAuthn.", + "Delegate account" : "Delegar conta", + "Add folder" : "Adicionar pasta", "Folder name" : "Nome da pasta", "Saving" : "A guardar", "Move up" : "Mover para cima", "Move down" : "Mover para baixo", + "Show all subscribed folders" : "Mostrar todas as pastas subscritas", "Show all folders" : "Mostrar todas as pastas", "Collapse folders" : "Ocultar pastas", + "Loading …" : "Carregando …", + "All messages in mailbox will be deleted." : "Todas as mensagens desta caixa de correio serão excluídas.", + "Clear mailbox {name}" : "Limpar caixa de correio {name}", + "The folder and all messages in it will be deleted." : "A pasta e todas as mensagens contidas nela serão excluídas.", "Delete folder" : "Apagar pasta", + "Delete folder {name}" : "Excluir pasta {name}", + "Please wait 10 minutes before repairing again" : "Por favor, aguarde 10 minutos antes de reparar novamente", "Mark all as read" : "Marcar todas como lidas", + "Add subfolder" : "Adicionar subpasta", "Rename" : "Renomear", + "Move folder" : "Mover pasta", + "Repair folder" : "Reparar pasta", "Clear cache" : "Limpar cache", "Clear locally cached data, in case there are issues with synchronization." : "Limpe a cache de dados local no caso de ter problemas com a sincronização.", "Subscribed" : "Subscrito", + "Sync in background" : "Sincronizar em segundo plano", + "Delete all messages" : "Excluir todas as mensagens ", + "Translate this message to {language}" : "Traduzir esta mensagem para o {language}", "New message" : "Nova mensagem", + "Edit message" : "Editar mensagem", + "Draft" : "Rascunho", "Reply" : "Resposta", + "Message saved" : "Mensagem salva", + "Failed to save draft" : "Falha ao salvar rascunho", + "attachment" : "anexo", + "attached" : "anexado", + "No \"sent\" folder configured. Please pick one in the account settings." : "Nenhuma pasta \"enviadas\" configurada. Escolha uma nas configurações da conta.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Você está tentando enviar para vários destinatários em Para e/ou Cc. Considere o uso de Cco para ocultar endereços de destinatários.", + "Your message has no subject. Do you want to send it anyway?" : "Sua mensagem não tem assunto. Deseja enviá-la mesmo assim?", + "Message discarded" : "Mensagem descartada", + "Could not discard message" : "Não foi possível descartar a mensagem", + "Hide recipient details" : "Ocultar detalhes do destinatário", + "Minimize composer" : "Minimizar compositor", "Error sending your message" : "Erro ao enviar a sua mensagem", "Retry" : "Repetir", "Warning sending your message" : "Aviso ao enviar a sua mensagem", "Send anyway" : "Enviar de qualquer maneira", + "Welcome to {productName} Mail" : "Bem-vindo ao {productName} E-Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Comece a escrever uma mensagem clicando abaixo ou selecione uma mensagem existente para exibir seu conteúdo", + "Autoresponder off" : "Resposta automática desligada", + "Autoresponder follows system settings" : "Resposta automática segue as configurações do sistema", + "The autoresponder follows your personal absence period settings." : "A resposta automática segue suas configurações pessoais de período de ausência.", "First day" : "First day", + "Last day (optional)" : "Último dia (opcional)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} será substituído pelo assunto da mensagem que você está respondendo", "Message" : "Mensagem", + "Oh Snap!" : "Oh Snap!", + "Pending or not sent messages will show up here" : "Mensagens pendentes ou não enviadas aparecerão aqui", + "Could not copy to \"Sent\" folder" : "Não foi possível copiar para pasta \"Enviadas\"", + "Mail server error" : "Erro no servidor de e-mail", + "Message could not be sent" : "A mensagem não pôde ser enviada", + "Message deleted" : "Mensagem excluída", + "Copy to \"Sent\" Folder" : "Copiar para a pasta \"Enviadas\"", + "This email might be a phishing attempt" : "Este e-mail pode ser uma tentativa de phishing", + "Hide suspicious links" : "Ocultar links suspeitos", + "Show suspicious links" : "Mostrar links suspeitos", + "Copied email address to clipboard" : "Endereço de e-mail copiado para a área de transferência", + "Could not copy email address to clipboard" : "Não foi possível copiar o endereço de e-mail para a área de transferência", "Contacts with this address" : "Contactos com este endereço", "Add to Contact" : "Adicionar aos contactos", "New Contact" : "Novo contacto", "Copy to clipboard" : "Copiar para área de transferência", + "Contact name …" : "Nome de contato …", "Add" : "Adicionar", "Show less" : "Mostrar menos", + "Show more" : "Mostrar mais", "Clear" : "Limpar", + "Search in folder" : "Pesquisar na pasta", + "Open search modal" : "Abrir modal de pesquisa", "Close" : "Fechar", "Body" : "Corpo", + "Search body" : "Pesquisar nos corpos", "Date" : "Data", + "Pick a start date" : "Escolha uma data de início", + "Pick an end date" : "Escolha uma data de fim", + "Select recipients" : "Selecione destinatários", + "Select BCC recipients" : "Selecionar destinatários CCO", "Tags" : "Etiquetas", "Select tags" : "Selecione etiquetas", + "Marked as" : "Marcado como", + "Has attachments" : "Tem anexos", + "Has attachment" : "Tem anexo", + "Enable mail body search" : "Ativar pesquisa nos corpos dos e-mails", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "O Sieve é ​​uma linguagem poderosa para escrever filtros para mensagens. Você pode gerenciar os scripts do Sieve no E-mail se seu serviço de e-mail oferecer suporte a ele. O Sieve também é necessário para usar a Resposta automática e Filtros.", + "Enable sieve filter" : "Ativar filtro Sieve", + "Sieve security" : "Segurança do Sieve", + "Sieve Port" : "Porta do Sieve", + "IMAP credentials" : "Credenciais IMAP", "Custom" : "Personalizado", + "Sieve Password" : "Senha do Sieve", + "Oh snap!" : "Opa!", + "Save sieve settings" : "Salvar configurações do Sieve", + "Signature …" : "Assinatura …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Sua assinatura tem mais de 2 MB. Isso pode afetar o desempenho de seu editor.", "Save signature" : "Guardar assinatura", + "Place signature above quoted text" : "Colocar a assinatura acima do texto citado ", "Message source" : "Fonte da mensagem", + "An error occurred, unable to rename the tag." : "Ocorreu um erro, não foi possível renomear a etiqueta.", + "Saving new tag name …" : "Salvando o novo nome da etiqueta …", + "Delete tag" : "Excluir etiqueta", + "Unset tag" : "Redefinir etiqueta", "Tag already exists" : "A etiqueta já existe", + "Tag name cannot be empty" : "O nome da etiqueta não pode ficar vazio", + "An error occurred, unable to create the tag." : "Ocorreu um erro, não foi possível criar a etiqueta.", "Add default tags" : "Adicionar etiquetas padrão", + "Add tag" : "Adicionar etiqueta", + "Task created" : "Tarefa criada", + "Could not create task" : "Não foi possível criar a tarefa", + "No calendars with task list support" : "Não há calendários com suporte a listas de tarefas", + "Summarizing thread failed." : "Falha ao resumir o fio.", + "Could not load your message thread" : "Não foi possível carregar seu fio de mensagem", + "Email was not able to be opened" : "Não foi possível abrir o e-mail", + "Print" : "Imprimir", + "Could not print message" : "Não foi possível imprimir a mensagem", "Not found" : "Não encontrado", + "Signature verified" : "Assinatura verificada", + "Signature unverified " : "Assinatura não verificada", + "This message was encrypted by the sender before it was sent." : "Esta mensagem foi criptografada pelo remetente antes de ser enviada.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Esta mensagem contém uma assinatura S/MIME digital verificada. A mensagem não foi alterada desde que foi enviada.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Esta mensagem contém uma assinatura S/MIME digital não verificada. A mensagem pode ter sido alterada desde que foi enviada ou o certificado do signatário não é confiável.", + "Reply all" : "Responder a todos", + "Unsubscribe request sent" : "Solicitação de cancelamento de inscrição enviada", + "Could not unsubscribe from mailing list" : "Não foi possível cancelar a inscrição na lista de discussão", + "Disable reminder" : "Desativar lembrete", + "Unsubscribe" : "Cancelar inscrição", "Reply to sender only" : "Resposta apenas ao remetente", + "Mark as unfavorite" : "Marcar como não-favorito", + "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", + "Bcc:" : "Cco:", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar a inscrição interromperá todas as mensagens da lista de discussão {sender}", + "Send unsubscribe email" : "Enviar e-mail de cancelamento", + "{name} Assistant" : "{name} Assistente", + "Thread summary" : "Resumo do fio", + "Go to latest message" : "Ir para a última mensagem", + "Newest message" : "Mensagem mais nova", + "Please select languages to translate to and from" : "Selecione os idiomas para os/dos quais deseja traduzir", + "The message could not be translated" : "A mensagem não pôde ser traduzida", + "Translation could not be copied" : "Não foi possível copiar a tradução", + "Translate message" : "Traduzir mensagem", + "Source language to translate from" : "Idioma de origem do qual traduzir", + "Translate from" : "Traduzir do", + "Target language to translate into" : "Idioma de destino para o qual traduzir", + "Translate to" : "Traduzir para", + "This translation is generated using AI and may contain inaccuracies" : "Esta tradução foi gerada por IA e pode conter imprecisões", + "Copy translated text" : "Copiar texto traduzido", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Desative a retenção de lixo deixando o campo vazio ou definindo-o como 0. Somente os e-mails excluídos após a ativação da retenção de lixo serão processados.", + "Could not remove trusted sender {sender}" : "Não é possível remover remetente confiável {sender}", "No senders are trusted at the moment." : "Nenhum remetente é confiável no momento.", "Untitled event" : "Evento sem título", + "(organizer)" : "(organizador)", "Import into {calendar}" : "Importar para {calendar}", "Event imported into {calendar}" : "Evento importado para {calendar}", "Airplane" : "Avião", "Reservation {id}" : "Reserva {id}", + "{trainNr} from {depStation} to {arrStation}" : "{trainNr} de {depStation} para {arrStation}", + "Train from {depStation} to {arrStation}" : "Trem de {depStation} a {arrStation}", "Train" : "Comboio", + "Add flag" : "Adicionar sinalizador", + "Move into folder" : "Mover para pasta", + "Stop" : "Encerrar", + "Delete action" : "Excluir ação", + "Answered" : "Respondida", "Deleted" : "Eliminado", + "Flagged" : "Sinalizada", + "Seen" : "Vista", + "Stop ends all processing" : "Parar encerra todo o processamento", "Recipient" : "Destinatário", + "Create a new mail filter" : "Criar um novo filtro de e-mail", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Escolha os cabeçalhos que deseja usar para criar o filtro. Na próxima etapa, você poderá refinar as condições do filtro e especificar as ações a serem executadas nas mensagens que correspondem aos seus critérios.", + "Delete filter" : "Excluir filtro", + "Delete mail filter {filterName}?" : "Excluir o filtro de e-mail {filterName}?", + "New filter" : "Novo filtro", + "Filter saved" : "Filtro salvo", + "Filter deleted" : "Filtro excluído", + "Could not delete filter" : "Não foi possível excluir o filtro", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Assuma o controle do caos do seu e-mail. Os filtros ajudam você a priorizar o que importa e eliminar a desordem.", + "Hang tight while the filters load" : "Aguarde enquanto os filtros são carregados", + "Filter is active" : "Filtro está ativo", + "If any of the conditions are met, the actions will be performed" : "Se alguma das condições for atendida, as ações serão executadas", "Help" : "Ajuda", "contains" : "contém", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Uma correspondência de um parte da cadeia. O campo corresponde se o valor fornecido estiver contido nele. Por exemplo, \"portaria\" corresponderia a \"port\".", "matches" : "corresponde", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Uma correspondência de padrão usando curingas. O símbolo \"*\" representa qualquer número de caracteres (incluindo nenhum), enquanto \"?\" representa exatamente um caractere. Por exemplo, \"*relatório*\" corresponderia a \"Primeiro relatório de 2024\".", + "Enter subject" : "Insira o assunto", + "Enter recipient" : "Insira o destinatário", + "Conditions" : "Condições", + "Add condition" : "Adicionar condição", "Actions" : "Ações", "Priority" : "Prioridade", + "Enable filter" : "Ativar filtro", "Tag" : "Etiqueta", "delete" : "eliminar", + "Edit quick action" : "Editar ação rápida", + "Add quick action" : "Adicionar ação rápida", + "Quick action deleted" : "Ação rápida excluída", + "Failed to delete quick action" : "Falha ao excluir a ação rápida", + "Failed to update quick action" : "Falha ao atualizar a ação rápida", + "Failed to create quick action" : "Falha ao criar a ação rápida", + "Failed to add steps to quick action" : "Falha ao adicionar etapas à ação rápida", + "Quick action created" : "Ação rápida criada", + "Failed to delete action step" : "Falha ao excluir a etapa da ação", + "No quick actions yet." : "Ainda sem ações rápidas.", "Edit" : "Editar", + "Add another action" : "Adicionar outra ação", + "Successfully updated config for \"{domain}\"" : "Atualizada com sucesso a configuração de \"{domain}\"", + "Error saving config" : "Erro ao salvar a configuração", + "Saved config for \"{domain}\"" : "Configuração salva para \"{domain}\"", + "Could not save provisioning setting" : "Não foi possível salvar a configuração de provisionamento", + "There was an error when provisioning accounts." : "Ocorreu um erro ao provisionar contas.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "Contas excluídas e desprovisionadas com sucesso para \"{domain}\"", + "Could not save default classification setting" : "Não foi possível salvar a configuração de classificação padrão", + "The mail app allows users to read mails on their IMAP accounts." : "O aplicativo e-mail permite que os usuários leiam e-mails em suas contas IMAP.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Aqui você encontra os ajustes globais para essa instância. As configurações específicas de cada usuário podem ser encontradas no próprio aplicativo (no canto inferior esquerdo).", + "Account provisioning" : "Provisionamento de contas", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Usar o caractere curinga (*) no campo de domínio de provisionamento criará uma configuração que se aplica a todos os usuários, desde que eles não correspondam a outra configuração.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "O mecanismo de provisionamento priorizará configurações de domínio específicas sobre a configuração de domínio curinga.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Se uma nova configuração correspondente for encontrada depois que o usuário já tiver sido provisionado com outra configuração, a nova configuração terá precedência e o usuário será reprovisionado com a configuração.", + "These settings can be used in conjunction with each other." : "Essas configurações podem ser usadas em conjunto.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "Se você deseja provisionar apenas um domínio para todos os usuários, use o curinga (*).", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Esta configuração só faz mais sentido se você usar o mesmo back-end de usuário para seu Nextcloud e servidor de e-mail de sua organização.", + "Provisioning Configurations" : "Configurações de Provisionamento", + "Allow additional mail accounts" : "Permitir contas de e-mail adicionais", + "Allow additional Mail accounts from User Settings" : "Permitir contas de E-Mail adicionais nas Configurações do Usuário", + "Enable text processing through LLMs" : "Ativar o processamento de texto por meio de LLMs", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "O aplicativo E-Mail pode processar dados do usuário com a ajuda do modelo de linguagem de grande escala configurado e fornecer recursos de assistência como resumos de fios, respostas inteligentes e agendas de eventos.", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "O aplicativo E-Mail pode classificar os e-mails recebidos por importância usando aprendizado de máquina. Este recurso está ativado por padrão, mas pode ser desativado por padrão aqui. Os usuários individuais ainda poderão alternar o recurso para suas contas.", + "Enable classification of important mails by default" : "Ativar a classificação de e-mails importantes por padrão", + "You can set up an anti spam service email address here." : "Você pode configurar um endereço de e-mail do serviço anti-spam aqui.", + "Any email that is marked as spam will be sent to the anti spam service." : "Qualquer e-mail marcado como spam será enviado para o serviço anti-spam.", + "Gmail integration" : "Integração Gmail", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "O Gmail permite que os usuários acessem seus e-mails via IMAP. Por motivos de segurança, este acesso só é possível com uma conexão OAuth 2.0 ou contas do Google que usam autenticação de dois fatores e senhas de aplicativos.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Você precisa registrar um novo ID de Cliente para um \"aplicativo web\" no console do Google Cloud. Adicione o URL {url} como URI de redirecionamento autorizado.", + "Microsoft integration" : "Integração Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "A Microsoft exige que você acesse seus e-mails via IMAP usando a autenticação OAuth 2.0. Para isso, é necessário registrar um aplicativo no Microsoft Entra ID, anteriormente conhecido como Microsoft Azure Active Directory.", + "Redirect URI" : "URI de redirecionamento", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Estas configurações são usadas para pré-configurar as preferências da interface do usuário e podem ser substituídas pelo usuário nas configurações de e-mail", + "Message View Mode" : "Modo da Visualização das Mensagens", + "Show only the selected message" : "Mostrar apenas a mensagem selecionada", + "Error saving anti spam email addresses" : "Erro ao salvar endereços de e-mail anti-spam", + "Error deleting anti spam reporting email" : "Erro ao excluir o e-mail de relatório anti-spam", + "Anti Spam" : "Anti-Spam", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Ao usar esta configuração, um e-mail de relatório será enviado ao servidor de relatório de SPAM quando um usuário clicar em \"Marcar como spam\".", + "\"Mark as Spam\" Email Address" : "Endereço de e-mail para \"Marcar Como Spam\"", "Reset" : "Reiniciar", + "Google integration configured" : "Integração Google configurada", + "Could not configure Google integration" : "Não foi possível configurar a integração Google", + "Google integration unlinked" : "Integração Google desvinculada", + "Could not unlink Google integration" : "Não foi possível desvincular a integração Google", "Client ID" : "Id. de Cliente", "Client secret" : "Segredo de cliente", + "Unlink" : "Desvincular", + "Microsoft integration configured" : "Integração Microsoft configurada", + "Could not configure Microsoft integration" : "Não foi possível configurar a integração Microsoft", + "Microsoft integration unlinked" : "Integração Microsoft desvinculada", + "Could not unlink Microsoft integration" : "Não foi possível desvincular a integração Microsoft", + "Domain Match: {provisioningDomain}" : "Correspondência de Domínio: {provisioningDomain}", "Email: {email}" : "Email: {email}", "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} em {host}:{port} ({ssl} encryption)", "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} em {host}:{port} ({ssl} encryption)", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} em {host}:{port} (Criptografia {ssl})", + "Provisioning domain" : "Domínio de provisionamento", + "Email address template" : "Modelo de endereço de e-mail", "IMAP" : "IMAP", "User" : "Utilizador", "Host" : "Anfitrião", "Port" : "Porta", "SMTP" : "SMTP", + "Use master password" : "Usar senha mestra", + "Enable sieve integration" : "Ativar integração Sieve", + "LDAP aliases integration" : "Integração de aliases LDAP", + "Enable LDAP aliases integration" : "Habilitar integração de aliases LDAP", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "A integração de aliases LDAP lê um atributo do diretório LDAP configurado para fornecer aliases de e-mail.", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Um atributo de vários valores para provisionar aliases de e-mail. Para cada valor, um alias é criado. Os aliases existentes no Nextcloud que não estão no diretório LDAP são excluídos.", + "Unprovision & Delete Config" : "Desprovisionar & Excluir Configuração", + "With the settings above, the app will create account settings in the following way:" : "Com as configurações acima, o aplicativo criará configurações da conta da seguinte maneira:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "O certificado PKCS #12 fornecido deve conter pelo menos um certificado e exatamente uma chave privada.", + "Failed to import the certificate. Please check the password." : "Falha ao importar o certificado. Por favor, verifique a senha.", + "Certificate imported successfully" : "Certificado importado com sucesso", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Falha ao importar o certificado. Por favor, certifique-se de que a chave privada corresponda ao certificado e não esteja protegida por uma frase secreta.", + "Failed to import the certificate" : "Falha ao importar o certificado", + "S/MIME certificates" : "Certificados S/MIME", + "Certificate name" : "Nome do certificado", "Valid until" : "Válido até", + "Delete certificate" : "Excluir certificado", + "No certificate imported yet" : "Nenhum certificado importado ainda", + "PKCS #12 Certificate" : "Certificado PKCS #12", + "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", + "Private key (optional)" : "Chave privada (opcional)", "Submit" : "Submeter", "No text blocks available" : "Não existem blocos de texto disponíveis.", + "Text block deleted" : "Bloco de texto excluído", + "Text block shared with {sharee}" : "Bloco de texto compartilhado com {sharee}", + "Failed to share text block with {sharee}" : "Falha ao compartilhar o bloco de texto com {sharee}", + "Share deleted for {name}" : "Compartilhamento excluído para {name}", + "Failed to delete share with {name}" : "Falho ao excluir o compartilhamento com {name}", "Guest" : "Convidado", "Group" : "Grupo", + "Failed to save text block" : "Falha ao salvar o bloco de texto", "Shared" : "Partilhados", + "Edit {title}" : "Editar {title}", + "Delete {title}" : "Excluir {title}", + "Edit text block" : "Editar bloco de texto", "Shares" : "Partilhas", + "Choose a text block to insert at the cursor" : "Escolha um bloco de texto para inserir no cursor", + "Insert" : "Colar", + "Insert text block" : "Inserir bloco de texto", "Account connected" : "Conta ligada", "Connect your mail account" : "Ligue a sua conta de e-mail", + "To add a mail account, please contact your administrator." : "Para adicionar uma conta de e-mail, por favor, entre em contato com o administrador.", "All" : "Todos", "Drafts" : "Rascunhos", "Priority inbox" : "Caixa de entrada prioritária", @@ -263,15 +734,31 @@ OC.L10N.register( "Junk" : "Lixo", "Sent" : "Enviada", "Trash" : "Reciclagem", + "Connect OAUTH2 account" : "Conectar conta OAUTH2", "Error while sharing file" : "Erro ao partilhar ficheiro", "{from}\n{subject}" : "{from}\n{subject}", + "Nextcloud Mail" : "Nextcloud E-mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Já existe uma mensagem em andamento. Todas as alterações não salvas serão perdidas se você continuar!", + "Discard changes" : "Descartar alterações", + "Discard unsaved changes" : "Descartar alterações não salvas", + "Keep editing message" : "Continuar edição da mensagem", + "(All or part of this reply was generated by AI)" : "(Esta resposta foi gerada, no todo ou em parte, por IA)", + "Attachments were not copied. Please add them manually." : "Os anexos não foram copiados. Adicione-os manualmente.", + "Could not create snooze mailbox" : "Não foi possível criar caixa de correio de adiamento", + "Sending message…" : "Enviando mensagem…", + "Message sent" : "Mensagem enviada", + "Could not send message" : "Não foi possível enviar a mensagem", + "Message copied to \"Sent\" folder" : "Mensagem copiada para a pasta \"Enviadas\"", "Could not load {tag}{name}{endtag}" : "Não foi possível carregar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Ocorreu um problema ao carregar {tag}{name}{endtag}", "Could not load your message" : "Não foi possível carregar a sua mensagem", "Could not load the desired message" : "Não foi possível carregar a mensagem escolhida", "Could not load the message" : "Não foi possível carregar a mensagem", "Error loading message" : "Erro ao carregar a mensagem", - "Determine importance using machine learning" : "Determinar a importância usando aprendizagem de máquina", - "Last 7 days" : "Últimos 7 dias" + "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", + "Choose a file to add as attachment" : "Escolha um ficheiro para adicionar como anexo", + "Choose a file to share as a link" : "Escolha um arquivo para compartilhar como link", + "Delegated access to {userId}" : "Delegar acesso a {userId}", + "Revoked access for {userId}" : "Acesso revogado de {userId}" }, "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/pt_PT.json b/l10n/pt_PT.json index e8a0c90271..f48247765e 100644 --- a/l10n/pt_PT.json +++ b/l10n/pt_PT.json @@ -1,6 +1,7 @@ { "translations": { "Embedded message %s" : "Mensagem embebida %s", "Important mail" : "Mensagem importante", + "No message found yet" : "Nenhuma mensagem ainda", "Set up an account" : "Configurar uma conta", "Unread mail" : "Mensagem por ler", "Important" : "Importante", @@ -9,20 +10,65 @@ "To Do" : "A fazer", "Later" : "Mais tarde", "Mail" : "Correio", + "You are reaching your mailbox quota limit for {account_email}" : "Você está atingindo seu limite de cota de caixa de correio para {account_email}", + "{account_email} has been delegated to you" : "{account_email} foi delegado a você", + "{user} delegated {account} to you" : "{user} delegou {account} a você", + "{account_email} is no longer delegated to you" : "{account_email} não está mais delegado a você", + "{user} revoked delegation for {account}" : "{user} revogou a delegação para {account}", + "Mail Application" : "Aplicativo de E-Mails", "Mails" : "Mensagens", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com o seguinte e-mail: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "E-mail do remetente: %1$s não está no catálogo de endereços, mas o nome do remetente: %2$s está no catálogo de endereços com os seguintes e-mails: %3$s", + "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "O remetente está usando um e-mail personalizado: %1$s em vez do e-mail do remetente: %2$s", + "Sent date is in the future" : "A data de envio está no futuro", + "Mail server marked this message as phishing attempt" : "O servidor de e-mail marcou esta mensagem como tentativa de phishing", + "Some addresses in this message are not matching the link text" : "Alguns endereços nesta mensagem não correspondem ao texto dos links", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Detectada lentidão no serviço de e-mail (%1$s) uma tentativa de conexão com várias contas levou uma média de %2$s segundos por conta", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Detectada lentidão no serviço de e-mail (%1$s) uma tentativa de realizar uma operação de listagem de caixas de e-mail em várias contas levou uma média de %2$s segundos por conta", + "Mail Transport configuration" : "Configuração de Transporte de E-mail", + "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "A configuração app.mail.transport não está definida como smtp. Essa configuração pode causar problemas com medidas modernas de segurança de e-mail, como SPF e DKIM, porque os e-mails são enviados diretamente do servidor web, que geralmente não está configurado corretamente para essa finalidade. Para resolver esse problema, descontinuamos o suporte ao transporte de e-mail. Remova app.mail.transport de sua configuração para usar o transporte SMTP e ocultar esta mensagem. É necessária uma configuração SMTP adequada para garantir a entrega de e-mails.", + "Mail account parameters, aliases and preferences" : "Parâmetros, aliases e preferências da conta de e-mail", "💌 A mail app for Nextcloud" : "Uma aplicação de correio eletrónico para Nextcloud", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Um aplicativo de e-mail para o Nextcloud**\n\n- **🚀 Integração com outros aplicativos do Nextcloud!** Atualmente, Contatos, Calendário e Arquivos - mais em breve.\n- **📥 Várias contas de e-mail!** Conta pessoal e conta da empresa? Sem problemas, e uma bela caixa de entrada unificada. Conecte qualquer conta IMAP.\n- **🔒 Envie & receba e-mails criptografados!** Usando a excelente extensão de navegador [Mailvelope](https://mailvelope.com).\n- **🙈 Não estamos reinventando a roda!** Baseado nas excelentes bibliotecas [Horde](https://www.horde.org).\n- **📬 Deseja hospedar seu próprio servidor de e-mail?** Não precisamos reimplementar isso, pois você pode configurar o [Mail-in-a-Box](https://mailinabox.email)!\n\n## Classificação Ética de IA\n\n### Caixa de Entrada Prioritária\n\nPositivo:\n* O software para treinamento e inferência desse modelo é de código aberto.\n* O modelo é criado e treinado no local com base nos dados do próprio usuário.\n* Os dados de treinamento podem ser acessados pelo usuário, possibilitando a verificação ou a correção de vieses ou a otimização do desempenho e do uso de CO2.\n\n### Resumos de fios (opt-in)\n\n**Classificação:** 🟢/🟡/🟠/🔴\n\nA classificação depende do back-end de processamento de texto instalado. Consulte [a visão geral da classificação](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) para obter detalhes.\n\nSaiba mais sobre a Classificação Ética de IA do Nextcloud [em nosso blog] (https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", + "Your session has expired. The page will be reloaded." : "Sua sessão expirou. A página será recarregada.", "Drafts are saved in:" : "Os rascunhos são guardados em:", "Sent messages are saved in:" : "As mensagens enviadas são guardadas em:", "Deleted messages are moved in:" : "Deleted messages are moved in:", + "Archived messages are moved in:" : "Mensagens arquivadas são movidas para:", + "Snoozed messages are moved in:" : "Mensagens no modo soneca são movidas para:", "Connecting" : "A ligar", "Reconnect Google account" : "Religar conta Google", + "Sign in with Google" : "Faça login no Google", "Reconnect Microsoft account" : "Religar conta Microsoft", + "Sign in with Microsoft" : "Fazer login com a Microsoft", "Save" : "Guardar", "Connect" : "Ligar", + "Looking up configuration" : "Procurando configuração", + "Checking mail host connectivity" : "Verificando a conectividade do host de e-mail", + "Configuration discovery failed. Please use the manual settings" : "Falha na descoberta da configuração. Por favor, use as configurações manuais", "Password required" : "Necessário palavra-passe", + "Testing authentication" : "Testando a autenticação", + "Account created. Please follow the pop-up instructions to link your Google account" : "Conta criada. Por favor, siga as instruções no pop-up para vincular sua conta do Google", + "Account created. Please follow the pop-up instructions to link your Microsoft account" : "Conta criada. Por favor, siga as instruções no pop-up para vincular sua conta da Microsoft", + "Loading account" : "Carregando conta", + "Account updated. Please follow the pop-up instructions to reconnect your Microsoft account" : "Conta atualizada. Por favor, siga as instruções no pop-up para reconectar sua conta da Microsoft", + "Account updated" : "Conta atualizada", + "IMAP server is not reachable" : "O servidor IMAP não está acessível", + "SMTP server is not reachable" : "O servidor SMTP não está acessível", + "IMAP username or password is wrong" : "O nome de usuário ou senha IMAP está errado", + "SMTP username or password is wrong" : "O nome de usuário ou senha SMTP está errado", + "SMTP server denied authentication" : "O servidor SMTP negou a autenticação", + "IMAP authentication error" : "Erro de autenticação IMAP", + "IMAP connection failed" : "Falha na conexão IMAP", + "SMTP connection failed" : "Falha na conexão SMTP", + "Authorization pop-up closed" : "Pop-up de autorização fechado", + "Configuration discovery temporarily not available. Please try again later." : "Descoberta de configuração temporariamente indisponível. Por favor, tente novamente mais tarde.", + "There was an error while setting up your account" : "Ocorreu um erro ao configurar sua conta", "Auto" : "Auto", "Name" : "Nome", + "name@example.org" : "nome@example.org", "Password" : "Palavra-passe", + "Enable mark as important classification" : "Ativar a classificação \"marcar como importante\"", "Manual" : "Manual", "IMAP Settings" : "Definições IMAP", "IMAP Host" : "Anfitrião de IMAP", @@ -39,22 +85,39 @@ "SMTP Port" : "Porto SMTP", "SMTP User" : "Utilizador SMTP", "SMTP Password" : "Palavra-passe SMTP", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "O Google exige autenticação OAuth. Se a administração do Nextcloud não tiver configurado o OAuth do Google, você pode usar uma senha de aplicativo do Google.", "Account settings" : "Definições da conta", + "Alias to S/MIME certificate mapping" : "Mapeamento de alias para certificado S/MIME", "Signature" : "Assinatura", "A signature is added to the text of new messages and replies." : "A assinatura é adicionada ao texto das novas mensagens e respostas.", "Writing mode" : "Modo de escrita", "Preferred writing mode for new messages and replies." : "Modo de escrita pré definido para novas mensagens e respostas.", "Default folders" : "Pastas pré definidas", + "The folders to use for drafts, sent messages, deleted messages, archived messages and junk messages." : "As pastas a serem usadas para rascunhos, mensagens enviadas, mensagens excluídas, mensagens arquivadas e mensagens de spam.", + "Days after which messages in Trash will automatically be deleted:" : "Dias após os quais as mensagens na Lixeira serão excluídas automaticamente:", + "Automated reply to incoming messages. If someone sends you several messages, this automated reply will be sent at most once every 4 days." : "Resposta automática às mensagens recebidas. Se alguém lhe enviar várias mensagens, esta resposta automática será enviada no máximo uma vez a cada 4 dias.", + "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "A resposta automática usa o Sieve, uma linguagem de script suportada por muitos provedores de e-mail. Se não tiver certeza de que o seu suporta, verifique com seu provedor. Se o Sieve estiver disponível, clique no botão para acessar as configurações e ativá-lo.", + "Go to Sieve settings" : "Vá para as configurações do Sieve", "Calendar settings" : "Configurações do calendário", "Filters" : "Filtros", + "Quick actions" : "Ações rápidas", "Mail server" : "Servidor de correio eletrónico", + "Sieve server" : "Servidor Sieve", + "Folder search" : "Pesquisa em pastas", + "Email address" : "Endereço de email", + "Rename alias" : "Renomear alias", + "Show update alias form" : "Mostrar formulário de atualização de alias ", "Go back" : "Voltar", "Change name" : "Alterar nome", - "Email address" : "Endereço de email", "Add alias" : "Adicionar alcunha", + "Create alias" : "Criar alias", "Cancel" : "Cancelar", "Search the body of messages in priority Inbox" : "Pesquise o corpo das mensagens na Caixa de entrada prioritária.", + "Activate" : "Ativar", + "Make mails available to Context Chat" : "Disponibilizar e-mails para o Context Chat", + "Remind about messages that require a reply but received none" : "Lembrar sobre mensagens que exigem uma resposta, mas não receberam nenhuma", "Highlight external addresses" : "Destacar endereços externos", + "Could not update preference" : "Não foi possível atualizar a preferência ", "Mail settings" : "Definições de e-mail", "General" : "Geral", "Set as default mail app" : "Definir como aplicação de e-mail predefinida", @@ -62,20 +125,24 @@ "Appearance" : "Aspeto", "Show all messages in thread" : "Mostrar todas as mensagens da conversa", "When off, only the selected message will be shown" : "Quando desativado, apenas a mensagem selecionada será apresentada.", + "Sort favorites up" : "Ordenar favoritos no topo", "Layout" : "Esquema", "Vertical split" : "Divisão vertical", "Horizontal split" : "Divisão horizontal", "List" : "Lista", + "Use compact mode" : "Usar modo compacto", "Sorting" : "Ordenação", "Newest first" : "Recentes primeiro", "Oldest first" : "Antigos primeiro", + "New text block" : "Novo bloco de texto", + "Content of the text block" : "Conteúdo do bloco de texto", + "Ok" : "CONFIRMAR", "Avatars from Gravatar and favicons" : "Avatares do Gravatar e favicons", "Reply position" : "Posição de resposta", "Top" : "Topo", "Bottom" : "Fundo", "Text blocks" : "Blocos de texto", "Reusable pieces of text that can be inserted in messages" : "Excertos de texto reutilizáveis ​​que podem ser inseridos nas mensagens.", - "New text block" : "Novo bloco de texto", "Shared with me" : "Partilhadas comigo", "Privacy" : "Privacidade", "Data collection" : "Recolha de dados", @@ -83,11 +150,14 @@ "Always show images from" : "Mostrar sempre imagens de", "Security" : "Segurança", "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Faça a gestão dos seus endereços e domínios internos para garantir que os contactos reconhecidos permanecem sem marcação.", + "S/MIME" : "S/MIME", "Manage certificates" : "Gerir certificados", "Mailvelope" : "Mailvelope", "Mailvelope is enabled for the current domain." : "O Mailvelope está ativado para o domínio atual", + "Step 1" : "Etapa 1", "Install the browser extension" : "Instalar a extensão do browser", "Enable for the current domain" : "Ativar para o domínio atual", + "Context Chat integration" : "Integração Context Chat", "Compose new message" : "Compor nova mensagem", "Newer message" : "Mensagem mais recente", "Older message" : "Mensagem mais antiga", @@ -98,72 +168,216 @@ "Search" : "Pesquisar", "Send" : "Enviar", "Refresh" : "Atualizar", + "Heading1" : "Cabeçalho1", + "Heading2" : "Cabeçalho2", + "Heading3" : "Cabeçalho3", "About" : "Sobre", "Acknowledgements" : "Reconhecimentos", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Esta aplicação inclui o CKEditor, um editor de código aberto. Copyright © Colaboradores do CKEditor. Licenciado sob a GPLv2.", - "Ok" : "CONFIRMAR", + "Automatically create tentative appointments in calendar" : "Criar automaticamente compromissos tentativa no calendário", + "Could not update certificate" : "Não foi possível atualizar o certificado", + "{commonName} - Valid until {expiryDate}" : "{commonName} - Válido até {expiryDate}", + "Select an alias" : "Selecionar alias", + "Select certificates" : "Selecionar certificados", + "Update Certificate" : "Atualizar Certificado", + "Encrypt with S/MIME and send later" : "Criptografar com S/MIME e enviar mais tarde", + "Encrypt with S/MIME and send" : "Criptografar com S/MIME e enviar", + "Encrypt with Mailvelope and send later" : "Criptografar com Mailvelope e enviar mais tarde", + "Send later" : "Enviar mais tarde", + "Message {id} could not be found" : "A mensagem {id} não foi encontrada", + "Sign or Encrypt with S/MIME was selected, but we don't have a certificate for the selected alias. The message will not be signed or encrypted." : "A opção Assinar ou Criptografar com S/MIME foi selecionada, mas não temos um certificado para o alias selecionado. A mensagem não será assinada ou criptografada.", + "Turn off formatting" : "Desativar formatação", + "Turn off and remove formatting" : "Desativar e remover formatação", "From" : "De", "Select account" : "Selecionar uma conta", "To" : "Para", + "Cc/Bcc" : "Cc/Cco", + "Contact or email address …" : "Contato ou endereço de e-mail …", "Cc" : "Cc", "Bcc" : "Bcc", "Subject" : "Assunto", + "Subject …" : "Assunto …", + "This message came from a noreply address so your reply will probably not be read." : "Esta mensagem veio de um endereço noreply, portanto sua resposta provavelmente não será lida.", + "The following recipients do not have a PGP key: {recipients}." : "Os seguintes destinatários não possuem uma chave PGP: {recipients}.", + "Write message …" : "Escrever a mensagem …", + "Error saving draft" : "Erro ao salvar rascunho", "Draft saved" : "Rascunho guardado", + "Save draft" : "Salvar rascunho", "Enable formatting" : "Ativar formatação", + "Disable formatting" : "Desativar formatação", "Upload attachment" : "Carregar anexo", "Add attachment from Files" : "Adicionar anexo a partir dos ficheiros", + "Smart picker" : "Seletor inteligente", "Request a read receipt" : "Solicitar um recibo de leitura", + "Encrypt message with S/MIME" : "Criptografar mensagem com S/MIME", "Encrypt message with Mailvelope" : "Cifrar a mensagem com Mailvelope", - "Choose" : "Escolher", - "Choose a file to add as attachment" : "Escolha um ficheiro para adicionar como anexo", + "Send now" : "Enviar agora", + "Tomorrow morning" : "Amanhã de manhã", + "Tomorrow afternoon" : "Amanhã à tarde", + "Enter a date" : "Insira uma data", + "Remove attachment {fileName}" : "Remover anexo {fileName}", + "Choose a file" : "Escolher um arquivo", + "Untitled message" : "Mensagem sem título", + "Expand composer" : "Expandir compositor", + "Close composer" : "Fechar compositor", "Confirm" : "Confirmar", + "Delegate access" : "Delegar acesso", + "Revoke" : "Revogar", + "Delegated access to {displayName}" : "Delegar acesso a {displayName}", + "Could not delegate access" : "Não foi possível delegar o acesso", + "Revoked access for {displayName}" : "Acesso revogado de {displayName}", + "Could not revoke delegation" : "Não foi possível revogar a delegação", + "Delegation" : "Delegação", + "Allow users to send, receive, and delete mail on your behalf" : "Permita que os usuários enviem, recebam e excluam e-mails em seu nome", + "Revoke access" : "Revogar acesso", + "Add delegate" : "Adicionar delegado", + "Select a user" : "Selecione um usuário", + "Revoke access?" : "Revogar acesso?", + "Tag: {name} deleted" : "Etiqueta: {name} excluída", + "An error occurred, unable to delete the tag." : "Ocorreu um erro, não foi possível excluir a etiqueta.", + "The tag will be deleted from all messages." : "A etiqueta será excluída de todas as mensagens.", "Plain text" : "Texto simples", + "Rich text" : "Texto rich", + "No messages in this folder" : "Sem mensagens nesta pasta", "No messages" : "Sem mensagens", + "Choose" : "Escolher", + "Blind copy recipients only" : "Somente destinatários de cópia oculta", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Rascunho:{markup-end} {subject}", + "Later today – {timeLocale}" : "Hoje mais tarde – {timeLocale}", + "Set reminder for later today" : "Definir lembrete para hoje mais tarde", + "Tomorrow – {timeLocale}" : "Amanhã – {timeLocale}", + "Set reminder for tomorrow" : "Definir lembrete para amanhã", + "This weekend – {timeLocale}" : "Este fim de semana – {timeLocale}", + "Set reminder for this weekend" : "Definir lembrete para este fim de semana", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Set reminder for next week" : "Definir lembrete para próxima semana", + "Could not apply tag, configured tag not found" : "Não foi possível aplicar a etiqueta, etiqueta configurada não encontrada", + "Could not move thread, destination mailbox not found" : "Não foi possível mover o fio, caixa de correio de destino não encontrada", + "Could not execute quick action" : "Não foi possível executar a ação rápida", + "Quick action executed" : "Ação rápida executada", + "No trash folder configured" : "Nenhuma pasta \"lixeira\" configurada", "Could not delete message" : "Não foi possível apagar a mensagem", + "Could not archive message" : "Não foi possível arquivar a mensagem", + "Could not snooze thread" : "Não foi possível adiar fio", + "Could not unsnooze thread" : "Não foi possível desadiar fio", + "This summary was AI generated" : "Este resumo foi gerado por IA", + "Encrypted message" : "Mensagem criptografada", + "This message is unread" : "Esta mensagem não foi lida.", "Unfavorite" : "Não favorito", "Favorite" : "Favorito", + "Unread" : "Não lido", "Read" : "Ler", + "Unimportant" : "Não importante", "Mark as spam" : "Marcar como spam", "Edit tags" : "Editar etiquetas", + "Unsnooze" : "Desadiar", + "Move thread" : "Mover fio", + "Archive thread" : "Arquivar fio", + "Archive message" : "Arquivar mensagem", "More actions" : "Mais ações", "Back" : "Anterior", + "Set custom snooze" : "Definir adiamento personalizado", "Edit as new message" : "Editar como nova mensagem", + "Create task" : "Criar tarefa", "Download message" : "Transferir mensagem", + "Delete thread" : "Excluir fio", + "Delete message" : "Excluir mensagem", + "Manage quick actions" : "Gerenciar ações rápidas", "Load more" : "Carregar mais", "_Edit tags for {number}_::_Edit tags for {number}_" : ["Editar etiquetas para {number}","Editar etiquetas para {number}","Editar etiquetas para {number}"], + "Mark as unread" : "Marcar como não lido", + "Mark as read" : "Marcar como lido", + "Mark as unimportant" : "Marcar como não importante", + "This description was generated by AI." : "Esta descrição foi gerada por IA.", + "Event created" : "Evento criado", "Could not create event" : "Não foi possível criar o evento", "Create event" : "Criar evento", + "Title" : "Título", "All day" : "Todo o dia", "Attendees" : "Participantes", + "You can only invite attendees if your account has an email address set" : "Você só pode convidar participantes se sua conta tiver um endereço de e-mail definido.", + "Select calendar" : "Selecionar calendário", "Description" : "Descrição", "Create" : "Criar", + "This event was updated" : "Este evento foi atualizado", + "{attendeeName} accepted your invitation" : "{attendeeName} aceitou seu convite", + "{attendeeName} tentatively accepted your invitation" : "{attendeeName} aceitou seu convite como tentativa", + "{attendeeName} declined your invitation" : "{attendeeName} recusou seu convite", + "{attendeeName} reacted to your invitation" : "{attendeeName} reagiu ao seu convite", + "You accepted this invitation" : "Você aceitou este convite", + "You tentatively accepted this invitation" : "Você aceitou este convite como tentativa", + "You already reacted to this invitation" : "Você já reagiu a este convite", + "This event was cancelled" : "Este evento foi cancelado", + "Save to" : "Salvar em", "Select" : "Selecionar", "Comment" : "Comentário", "Accept" : "Aceitar", "Decline" : "Recusar", + "Tentatively accept" : "Aceitar como tentativa", + "More options" : "Mais opções", + "This message has an attached invitation but the invitation dates are in the past" : "Esta mensagem tem um convite anexado, mas as datas do convite estão no passado", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Esta mensagem tem um convite anexado, mas o convite não contém um participante que corresponda a nenhum endereço de conta de e-mail configurado", + "Could not remove internal address {sender}" : "Não foi possível remover o endereço interno {sender}", + "Could not add internal address {address}" : "Não foi possível adicionar o endereço interno {address}", "individual" : "individual", "domain" : "domínio", "Remove" : "Remover", "Add internal address" : "Adicionar endereço interno", + "Add internal email or domain" : "Adicionar e-mail ou domínio interno", + "Itinerary for {type} is not supported yet" : "O itinerário para {type} ainda não é suportado", + "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Você não tem permissão para mover esta mensagem para a pasta de arquivos e/ou excluir esta mensagem da pasta atual", + "Your IMAP server does not support storing the seen/unseen state." : "Seu servidor IMAP não suporta o armazenamento do estado visto/não visto.", "Last hour" : "Ultima hora", "Today" : "Hoje", + "Yesterday" : "Ontem", "Last week" : "Ultima semana", "Last month" : "Ultimo mês", + "Could not open folder" : "Não foi possível abrir a pasta", + "Loading messages …" : "Carregando a mensagem …", + "Indexing your messages. This can take a bit longer for larger folders." : "Indexação de suas mensagens. Isso pode demorar um pouco mais para pastas maiores.", "Choose target folder" : "Escolher pasta de destino", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "As mensagens serão automaticamente marcadas como importantes usando IA. O sistema aprende com quais mensagens você interage ou marca como importantes. No início, talvez seja necessário alterar manualmente a importância para ensiná-lo, mas ele irá melhorar com o tempo", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "As mensagens que você marcou como favoritas serão exibidas na parte superior das pastas. Você pode desativar esse comportamento nas configurações do aplicativo", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "A IA identifica as mensagens enviadas por você que provavelmente exigem uma resposta, mas não receberam nenhuma após alguns dias, e as exibe aqui.", "Favorites" : "Favoritos", + "Load more favorites" : "Carregar mais favoritos", + "Follow up" : "Acompanhar", + "Follow up info" : "Informações de acompanhamento", "Important info" : "Informação importante", + "Load more important messages" : "Carregar mais mensagens importantes", "Other" : "Outro", + "Load more other messages" : "Carregar mais outras mensagens", + "Could not send mdn" : "Não foi possível enviar MDN", "Notify the sender" : "Notificar o remetente", + "Message was snoozed" : "Mensagem foi adiada", + "Could not snooze message" : "Não foi possível adiar mensagem", + "Message was unsnoozed" : "Mensagem foi desadiada", + "Could not unsnooze message" : "Não foi possível desadiar mensagem", + "Could not generate direct link: Message ID is missing" : "Não foi possível gerar um link direto: o ID da mensagem está faltando", + "Direct link copied to clipboard" : "Ligação direta copiada para a área de transferência", + "Copy direct link" : "Copiar link direto", "Forward" : "Encaminhar", + "Link copied" : "Hiperligação copiada", + "Move message" : "Mover mensagem", "Translate" : "Traduzir", "View source" : "Ver fonte", + "Print message" : "Imprimir mensagem", + "Create mail filter" : "Criar filtro de e-mail", + "Download thread data for debugging" : "Baixar dados do fio para depuração", + "Suggested replies are using AI" : "As respostas sugeridas são geradas por IA", "Message body" : "Corpo da mensagem", + "AI info" : "Informações sobre IA", "Unnamed" : "Sem nome", "Embedded message" : "Mensagem embebida", + "Attachment saved to Files" : "Anexo salvo em Arquivos", + "Attachment could not be saved" : "Não foi possível salvar o anexo", + "calendar imported" : "calendário importado", "Choose a folder to store the attachment in" : "Escolha uma pasta para guardar o anexo", "Import into calendar" : "Importar para o calendário", "Download attachment" : "Transferir anexo", "Save to Files" : "Guardar em Ficheiros", + "Error while saving attachments" : "Erro ao salvar anexos", + "View fewer attachments" : "Exibir menos anexos", "Choose a folder to store the attachments in" : "Escolha uma pasta para armazenar anexos", "Save all to Files" : "Guardar todos em Ficheiros", "Download Zip" : "Transferir Zip", @@ -172,87 +386,344 @@ "Show images temporarily" : "Mostrar imagens temporariamente", "Always show images from {sender}" : "Mostrar sempre as imagem de {sender}", "Always show images from {domain}" : "Mostrar sempre as imagem de {domain}", + "Message frame" : "Quadro da mensagem", + "Quoted text" : "Texto citado", "Move" : "Mover", "Moving" : "A mover", + "Moving thread" : "Movendo fio", + "Moving message" : "Mover mensagem", + "This account cannot connect" : "Esta conta não pode conectar", + "Change password" : "Alterar senha", + "Used quota: {quota}% ({limit})" : "Cota usada: {quota}% ({limit})", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Não foi possível criar a caixa de correio. O nome provavelmente contém caracteres inválidos. Tente outro nome.", "Remove account" : "Remover conta", + "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "A conta do e-mail {email} e os dados em cache serão removidos do Nextcloud, mas não do seu provedor de e-mail.", "Remove {email}" : "Remover {email}", + "could not delete account" : "não foi possível excluir a conta", + "Provisioned account is disabled" : "A conta provisionada está desativada", + "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Faça o login usando uma senha para habilitar esta conta. A sessão atual está usando autenticação sem senha, p. ex., SSO ou WebAuthn.", + "Delegate account" : "Delegar conta", + "Add folder" : "Adicionar pasta", "Folder name" : "Nome da pasta", "Saving" : "A guardar", "Move up" : "Mover para cima", "Move down" : "Mover para baixo", + "Show all subscribed folders" : "Mostrar todas as pastas subscritas", "Show all folders" : "Mostrar todas as pastas", "Collapse folders" : "Ocultar pastas", + "Loading …" : "Carregando …", + "All messages in mailbox will be deleted." : "Todas as mensagens desta caixa de correio serão excluídas.", + "Clear mailbox {name}" : "Limpar caixa de correio {name}", + "The folder and all messages in it will be deleted." : "A pasta e todas as mensagens contidas nela serão excluídas.", "Delete folder" : "Apagar pasta", + "Delete folder {name}" : "Excluir pasta {name}", + "Please wait 10 minutes before repairing again" : "Por favor, aguarde 10 minutos antes de reparar novamente", "Mark all as read" : "Marcar todas como lidas", + "Add subfolder" : "Adicionar subpasta", "Rename" : "Renomear", + "Move folder" : "Mover pasta", + "Repair folder" : "Reparar pasta", "Clear cache" : "Limpar cache", "Clear locally cached data, in case there are issues with synchronization." : "Limpe a cache de dados local no caso de ter problemas com a sincronização.", "Subscribed" : "Subscrito", + "Sync in background" : "Sincronizar em segundo plano", + "Delete all messages" : "Excluir todas as mensagens ", + "Translate this message to {language}" : "Traduzir esta mensagem para o {language}", "New message" : "Nova mensagem", + "Edit message" : "Editar mensagem", + "Draft" : "Rascunho", "Reply" : "Resposta", + "Message saved" : "Mensagem salva", + "Failed to save draft" : "Falha ao salvar rascunho", + "attachment" : "anexo", + "attached" : "anexado", + "No \"sent\" folder configured. Please pick one in the account settings." : "Nenhuma pasta \"enviadas\" configurada. Escolha uma nas configurações da conta.", + "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Você está tentando enviar para vários destinatários em Para e/ou Cc. Considere o uso de Cco para ocultar endereços de destinatários.", + "Your message has no subject. Do you want to send it anyway?" : "Sua mensagem não tem assunto. Deseja enviá-la mesmo assim?", + "Message discarded" : "Mensagem descartada", + "Could not discard message" : "Não foi possível descartar a mensagem", + "Hide recipient details" : "Ocultar detalhes do destinatário", + "Minimize composer" : "Minimizar compositor", "Error sending your message" : "Erro ao enviar a sua mensagem", "Retry" : "Repetir", "Warning sending your message" : "Aviso ao enviar a sua mensagem", "Send anyway" : "Enviar de qualquer maneira", + "Welcome to {productName} Mail" : "Bem-vindo ao {productName} E-Mail", + "Start writing a message by clicking below or select an existing message to display its contents" : "Comece a escrever uma mensagem clicando abaixo ou selecione uma mensagem existente para exibir seu conteúdo", + "Autoresponder off" : "Resposta automática desligada", + "Autoresponder follows system settings" : "Resposta automática segue as configurações do sistema", + "The autoresponder follows your personal absence period settings." : "A resposta automática segue suas configurações pessoais de período de ausência.", "First day" : "First day", + "Last day (optional)" : "Último dia (opcional)", + "${subject} will be replaced with the subject of the message you are responding to" : "${subject} será substituído pelo assunto da mensagem que você está respondendo", "Message" : "Mensagem", + "Oh Snap!" : "Oh Snap!", + "Pending or not sent messages will show up here" : "Mensagens pendentes ou não enviadas aparecerão aqui", + "Could not copy to \"Sent\" folder" : "Não foi possível copiar para pasta \"Enviadas\"", + "Mail server error" : "Erro no servidor de e-mail", + "Message could not be sent" : "A mensagem não pôde ser enviada", + "Message deleted" : "Mensagem excluída", + "Copy to \"Sent\" Folder" : "Copiar para a pasta \"Enviadas\"", + "This email might be a phishing attempt" : "Este e-mail pode ser uma tentativa de phishing", + "Hide suspicious links" : "Ocultar links suspeitos", + "Show suspicious links" : "Mostrar links suspeitos", + "Copied email address to clipboard" : "Endereço de e-mail copiado para a área de transferência", + "Could not copy email address to clipboard" : "Não foi possível copiar o endereço de e-mail para a área de transferência", "Contacts with this address" : "Contactos com este endereço", "Add to Contact" : "Adicionar aos contactos", "New Contact" : "Novo contacto", "Copy to clipboard" : "Copiar para área de transferência", + "Contact name …" : "Nome de contato …", "Add" : "Adicionar", "Show less" : "Mostrar menos", + "Show more" : "Mostrar mais", "Clear" : "Limpar", + "Search in folder" : "Pesquisar na pasta", + "Open search modal" : "Abrir modal de pesquisa", "Close" : "Fechar", "Body" : "Corpo", + "Search body" : "Pesquisar nos corpos", "Date" : "Data", + "Pick a start date" : "Escolha uma data de início", + "Pick an end date" : "Escolha uma data de fim", + "Select recipients" : "Selecione destinatários", + "Select BCC recipients" : "Selecionar destinatários CCO", "Tags" : "Etiquetas", "Select tags" : "Selecione etiquetas", + "Marked as" : "Marcado como", + "Has attachments" : "Tem anexos", + "Has attachment" : "Tem anexo", + "Enable mail body search" : "Ativar pesquisa nos corpos dos e-mails", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "O Sieve é ​​uma linguagem poderosa para escrever filtros para mensagens. Você pode gerenciar os scripts do Sieve no E-mail se seu serviço de e-mail oferecer suporte a ele. O Sieve também é necessário para usar a Resposta automática e Filtros.", + "Enable sieve filter" : "Ativar filtro Sieve", + "Sieve security" : "Segurança do Sieve", + "Sieve Port" : "Porta do Sieve", + "IMAP credentials" : "Credenciais IMAP", "Custom" : "Personalizado", + "Sieve Password" : "Senha do Sieve", + "Oh snap!" : "Opa!", + "Save sieve settings" : "Salvar configurações do Sieve", + "Signature …" : "Assinatura …", + "Your signature is larger than 2 MB. This may affect the performance of your editor." : "Sua assinatura tem mais de 2 MB. Isso pode afetar o desempenho de seu editor.", "Save signature" : "Guardar assinatura", + "Place signature above quoted text" : "Colocar a assinatura acima do texto citado ", "Message source" : "Fonte da mensagem", + "An error occurred, unable to rename the tag." : "Ocorreu um erro, não foi possível renomear a etiqueta.", + "Saving new tag name …" : "Salvando o novo nome da etiqueta …", + "Delete tag" : "Excluir etiqueta", + "Unset tag" : "Redefinir etiqueta", "Tag already exists" : "A etiqueta já existe", + "Tag name cannot be empty" : "O nome da etiqueta não pode ficar vazio", + "An error occurred, unable to create the tag." : "Ocorreu um erro, não foi possível criar a etiqueta.", "Add default tags" : "Adicionar etiquetas padrão", + "Add tag" : "Adicionar etiqueta", + "Task created" : "Tarefa criada", + "Could not create task" : "Não foi possível criar a tarefa", + "No calendars with task list support" : "Não há calendários com suporte a listas de tarefas", + "Summarizing thread failed." : "Falha ao resumir o fio.", + "Could not load your message thread" : "Não foi possível carregar seu fio de mensagem", + "Email was not able to be opened" : "Não foi possível abrir o e-mail", + "Print" : "Imprimir", + "Could not print message" : "Não foi possível imprimir a mensagem", "Not found" : "Não encontrado", + "Signature verified" : "Assinatura verificada", + "Signature unverified " : "Assinatura não verificada", + "This message was encrypted by the sender before it was sent." : "Esta mensagem foi criptografada pelo remetente antes de ser enviada.", + "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Esta mensagem contém uma assinatura S/MIME digital verificada. A mensagem não foi alterada desde que foi enviada.", + "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Esta mensagem contém uma assinatura S/MIME digital não verificada. A mensagem pode ter sido alterada desde que foi enviada ou o certificado do signatário não é confiável.", + "Reply all" : "Responder a todos", + "Unsubscribe request sent" : "Solicitação de cancelamento de inscrição enviada", + "Could not unsubscribe from mailing list" : "Não foi possível cancelar a inscrição na lista de discussão", + "Disable reminder" : "Desativar lembrete", + "Unsubscribe" : "Cancelar inscrição", "Reply to sender only" : "Resposta apenas ao remetente", + "Mark as unfavorite" : "Marcar como não-favorito", + "Mark as favorite" : "Marcar como favorito", + "From:" : "De:", + "To:" : "Para:", + "Bcc:" : "Cco:", + "Unsubscribing will stop all messages from the mailing list {sender}" : "Cancelar a inscrição interromperá todas as mensagens da lista de discussão {sender}", + "Send unsubscribe email" : "Enviar e-mail de cancelamento", + "{name} Assistant" : "{name} Assistente", + "Thread summary" : "Resumo do fio", + "Go to latest message" : "Ir para a última mensagem", + "Newest message" : "Mensagem mais nova", + "Please select languages to translate to and from" : "Selecione os idiomas para os/dos quais deseja traduzir", + "The message could not be translated" : "A mensagem não pôde ser traduzida", + "Translation could not be copied" : "Não foi possível copiar a tradução", + "Translate message" : "Traduzir mensagem", + "Source language to translate from" : "Idioma de origem do qual traduzir", + "Translate from" : "Traduzir do", + "Target language to translate into" : "Idioma de destino para o qual traduzir", + "Translate to" : "Traduzir para", + "This translation is generated using AI and may contain inaccuracies" : "Esta tradução foi gerada por IA e pode conter imprecisões", + "Copy translated text" : "Copiar texto traduzido", + "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Desative a retenção de lixo deixando o campo vazio ou definindo-o como 0. Somente os e-mails excluídos após a ativação da retenção de lixo serão processados.", + "Could not remove trusted sender {sender}" : "Não é possível remover remetente confiável {sender}", "No senders are trusted at the moment." : "Nenhum remetente é confiável no momento.", "Untitled event" : "Evento sem título", + "(organizer)" : "(organizador)", "Import into {calendar}" : "Importar para {calendar}", "Event imported into {calendar}" : "Evento importado para {calendar}", "Airplane" : "Avião", "Reservation {id}" : "Reserva {id}", + "{trainNr} from {depStation} to {arrStation}" : "{trainNr} de {depStation} para {arrStation}", + "Train from {depStation} to {arrStation}" : "Trem de {depStation} a {arrStation}", "Train" : "Comboio", + "Add flag" : "Adicionar sinalizador", + "Move into folder" : "Mover para pasta", + "Stop" : "Encerrar", + "Delete action" : "Excluir ação", + "Answered" : "Respondida", "Deleted" : "Eliminado", + "Flagged" : "Sinalizada", + "Seen" : "Vista", + "Stop ends all processing" : "Parar encerra todo o processamento", "Recipient" : "Destinatário", + "Create a new mail filter" : "Criar um novo filtro de e-mail", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Escolha os cabeçalhos que deseja usar para criar o filtro. Na próxima etapa, você poderá refinar as condições do filtro e especificar as ações a serem executadas nas mensagens que correspondem aos seus critérios.", + "Delete filter" : "Excluir filtro", + "Delete mail filter {filterName}?" : "Excluir o filtro de e-mail {filterName}?", + "New filter" : "Novo filtro", + "Filter saved" : "Filtro salvo", + "Filter deleted" : "Filtro excluído", + "Could not delete filter" : "Não foi possível excluir o filtro", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Assuma o controle do caos do seu e-mail. Os filtros ajudam você a priorizar o que importa e eliminar a desordem.", + "Hang tight while the filters load" : "Aguarde enquanto os filtros são carregados", + "Filter is active" : "Filtro está ativo", + "If any of the conditions are met, the actions will be performed" : "Se alguma das condições for atendida, as ações serão executadas", "Help" : "Ajuda", "contains" : "contém", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Uma correspondência de um parte da cadeia. O campo corresponde se o valor fornecido estiver contido nele. Por exemplo, \"portaria\" corresponderia a \"port\".", "matches" : "corresponde", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Uma correspondência de padrão usando curingas. O símbolo \"*\" representa qualquer número de caracteres (incluindo nenhum), enquanto \"?\" representa exatamente um caractere. Por exemplo, \"*relatório*\" corresponderia a \"Primeiro relatório de 2024\".", + "Enter subject" : "Insira o assunto", + "Enter recipient" : "Insira o destinatário", + "Conditions" : "Condições", + "Add condition" : "Adicionar condição", "Actions" : "Ações", "Priority" : "Prioridade", + "Enable filter" : "Ativar filtro", "Tag" : "Etiqueta", "delete" : "eliminar", + "Edit quick action" : "Editar ação rápida", + "Add quick action" : "Adicionar ação rápida", + "Quick action deleted" : "Ação rápida excluída", + "Failed to delete quick action" : "Falha ao excluir a ação rápida", + "Failed to update quick action" : "Falha ao atualizar a ação rápida", + "Failed to create quick action" : "Falha ao criar a ação rápida", + "Failed to add steps to quick action" : "Falha ao adicionar etapas à ação rápida", + "Quick action created" : "Ação rápida criada", + "Failed to delete action step" : "Falha ao excluir a etapa da ação", + "No quick actions yet." : "Ainda sem ações rápidas.", "Edit" : "Editar", + "Add another action" : "Adicionar outra ação", + "Successfully updated config for \"{domain}\"" : "Atualizada com sucesso a configuração de \"{domain}\"", + "Error saving config" : "Erro ao salvar a configuração", + "Saved config for \"{domain}\"" : "Configuração salva para \"{domain}\"", + "Could not save provisioning setting" : "Não foi possível salvar a configuração de provisionamento", + "There was an error when provisioning accounts." : "Ocorreu um erro ao provisionar contas.", + "Successfully deleted and deprovisioned accounts for \"{domain}\"" : "Contas excluídas e desprovisionadas com sucesso para \"{domain}\"", + "Could not save default classification setting" : "Não foi possível salvar a configuração de classificação padrão", + "The mail app allows users to read mails on their IMAP accounts." : "O aplicativo e-mail permite que os usuários leiam e-mails em suas contas IMAP.", + "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Aqui você encontra os ajustes globais para essa instância. As configurações específicas de cada usuário podem ser encontradas no próprio aplicativo (no canto inferior esquerdo).", + "Account provisioning" : "Provisionamento de contas", + "Using the wildcard (*) in the provisioning domain field will create a configuration that applies to all users, provided they do not match another configuration." : "Usar o caractere curinga (*) no campo de domínio de provisionamento criará uma configuração que se aplica a todos os usuários, desde que eles não correspondam a outra configuração.", + "The provisioning mechanism will prioritise specific domain configurations over the wildcard domain configuration." : "O mecanismo de provisionamento priorizará configurações de domínio específicas sobre a configuração de domínio curinga.", + "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Se uma nova configuração correspondente for encontrada depois que o usuário já tiver sido provisionado com outra configuração, a nova configuração terá precedência e o usuário será reprovisionado com a configuração.", + "These settings can be used in conjunction with each other." : "Essas configurações podem ser usadas em conjunto.", + "If you only want to provision one domain for all users, use the wildcard (*)." : "Se você deseja provisionar apenas um domínio para todos os usuários, use o curinga (*).", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Esta configuração só faz mais sentido se você usar o mesmo back-end de usuário para seu Nextcloud e servidor de e-mail de sua organização.", + "Provisioning Configurations" : "Configurações de Provisionamento", + "Allow additional mail accounts" : "Permitir contas de e-mail adicionais", + "Allow additional Mail accounts from User Settings" : "Permitir contas de E-Mail adicionais nas Configurações do Usuário", + "Enable text processing through LLMs" : "Ativar o processamento de texto por meio de LLMs", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "O aplicativo E-Mail pode processar dados do usuário com a ajuda do modelo de linguagem de grande escala configurado e fornecer recursos de assistência como resumos de fios, respostas inteligentes e agendas de eventos.", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "O aplicativo E-Mail pode classificar os e-mails recebidos por importância usando aprendizado de máquina. Este recurso está ativado por padrão, mas pode ser desativado por padrão aqui. Os usuários individuais ainda poderão alternar o recurso para suas contas.", + "Enable classification of important mails by default" : "Ativar a classificação de e-mails importantes por padrão", + "You can set up an anti spam service email address here." : "Você pode configurar um endereço de e-mail do serviço anti-spam aqui.", + "Any email that is marked as spam will be sent to the anti spam service." : "Qualquer e-mail marcado como spam será enviado para o serviço anti-spam.", + "Gmail integration" : "Integração Gmail", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "O Gmail permite que os usuários acessem seus e-mails via IMAP. Por motivos de segurança, este acesso só é possível com uma conexão OAuth 2.0 ou contas do Google que usam autenticação de dois fatores e senhas de aplicativos.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Você precisa registrar um novo ID de Cliente para um \"aplicativo web\" no console do Google Cloud. Adicione o URL {url} como URI de redirecionamento autorizado.", + "Microsoft integration" : "Integração Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "A Microsoft exige que você acesse seus e-mails via IMAP usando a autenticação OAuth 2.0. Para isso, é necessário registrar um aplicativo no Microsoft Entra ID, anteriormente conhecido como Microsoft Azure Active Directory.", + "Redirect URI" : "URI de redirecionamento", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Estas configurações são usadas para pré-configurar as preferências da interface do usuário e podem ser substituídas pelo usuário nas configurações de e-mail", + "Message View Mode" : "Modo da Visualização das Mensagens", + "Show only the selected message" : "Mostrar apenas a mensagem selecionada", + "Error saving anti spam email addresses" : "Erro ao salvar endereços de e-mail anti-spam", + "Error deleting anti spam reporting email" : "Erro ao excluir o e-mail de relatório anti-spam", + "Anti Spam" : "Anti-Spam", + "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Ao usar esta configuração, um e-mail de relatório será enviado ao servidor de relatório de SPAM quando um usuário clicar em \"Marcar como spam\".", + "\"Mark as Spam\" Email Address" : "Endereço de e-mail para \"Marcar Como Spam\"", "Reset" : "Reiniciar", + "Google integration configured" : "Integração Google configurada", + "Could not configure Google integration" : "Não foi possível configurar a integração Google", + "Google integration unlinked" : "Integração Google desvinculada", + "Could not unlink Google integration" : "Não foi possível desvincular a integração Google", "Client ID" : "Id. de Cliente", "Client secret" : "Segredo de cliente", + "Unlink" : "Desvincular", + "Microsoft integration configured" : "Integração Microsoft configurada", + "Could not configure Microsoft integration" : "Não foi possível configurar a integração Microsoft", + "Microsoft integration unlinked" : "Integração Microsoft desvinculada", + "Could not unlink Microsoft integration" : "Não foi possível desvincular a integração Microsoft", + "Domain Match: {provisioningDomain}" : "Correspondência de Domínio: {provisioningDomain}", "Email: {email}" : "Email: {email}", "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} em {host}:{port} ({ssl} encryption)", "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} em {host}:{port} ({ssl} encryption)", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} em {host}:{port} (Criptografia {ssl})", + "Provisioning domain" : "Domínio de provisionamento", + "Email address template" : "Modelo de endereço de e-mail", "IMAP" : "IMAP", "User" : "Utilizador", "Host" : "Anfitrião", "Port" : "Porta", "SMTP" : "SMTP", + "Use master password" : "Usar senha mestra", + "Enable sieve integration" : "Ativar integração Sieve", + "LDAP aliases integration" : "Integração de aliases LDAP", + "Enable LDAP aliases integration" : "Habilitar integração de aliases LDAP", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "A integração de aliases LDAP lê um atributo do diretório LDAP configurado para fornecer aliases de e-mail.", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Um atributo de vários valores para provisionar aliases de e-mail. Para cada valor, um alias é criado. Os aliases existentes no Nextcloud que não estão no diretório LDAP são excluídos.", + "Unprovision & Delete Config" : "Desprovisionar & Excluir Configuração", + "With the settings above, the app will create account settings in the following way:" : "Com as configurações acima, o aplicativo criará configurações da conta da seguinte maneira:", + "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "O certificado PKCS #12 fornecido deve conter pelo menos um certificado e exatamente uma chave privada.", + "Failed to import the certificate. Please check the password." : "Falha ao importar o certificado. Por favor, verifique a senha.", + "Certificate imported successfully" : "Certificado importado com sucesso", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Falha ao importar o certificado. Por favor, certifique-se de que a chave privada corresponda ao certificado e não esteja protegida por uma frase secreta.", + "Failed to import the certificate" : "Falha ao importar o certificado", + "S/MIME certificates" : "Certificados S/MIME", + "Certificate name" : "Nome do certificado", "Valid until" : "Válido até", + "Delete certificate" : "Excluir certificado", + "No certificate imported yet" : "Nenhum certificado importado ainda", + "PKCS #12 Certificate" : "Certificado PKCS #12", + "PEM Certificate" : "Certificado PEM", "Certificate" : "Certificado", + "Private key (optional)" : "Chave privada (opcional)", "Submit" : "Submeter", "No text blocks available" : "Não existem blocos de texto disponíveis.", + "Text block deleted" : "Bloco de texto excluído", + "Text block shared with {sharee}" : "Bloco de texto compartilhado com {sharee}", + "Failed to share text block with {sharee}" : "Falha ao compartilhar o bloco de texto com {sharee}", + "Share deleted for {name}" : "Compartilhamento excluído para {name}", + "Failed to delete share with {name}" : "Falho ao excluir o compartilhamento com {name}", "Guest" : "Convidado", "Group" : "Grupo", + "Failed to save text block" : "Falha ao salvar o bloco de texto", "Shared" : "Partilhados", + "Edit {title}" : "Editar {title}", + "Delete {title}" : "Excluir {title}", + "Edit text block" : "Editar bloco de texto", "Shares" : "Partilhas", + "Choose a text block to insert at the cursor" : "Escolha um bloco de texto para inserir no cursor", + "Insert" : "Colar", + "Insert text block" : "Inserir bloco de texto", "Account connected" : "Conta ligada", "Connect your mail account" : "Ligue a sua conta de e-mail", + "To add a mail account, please contact your administrator." : "Para adicionar uma conta de e-mail, por favor, entre em contato com o administrador.", "All" : "Todos", "Drafts" : "Rascunhos", "Priority inbox" : "Caixa de entrada prioritária", @@ -261,15 +732,31 @@ "Junk" : "Lixo", "Sent" : "Enviada", "Trash" : "Reciclagem", + "Connect OAUTH2 account" : "Conectar conta OAUTH2", "Error while sharing file" : "Erro ao partilhar ficheiro", "{from}\n{subject}" : "{from}\n{subject}", + "Nextcloud Mail" : "Nextcloud E-mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Já existe uma mensagem em andamento. Todas as alterações não salvas serão perdidas se você continuar!", + "Discard changes" : "Descartar alterações", + "Discard unsaved changes" : "Descartar alterações não salvas", + "Keep editing message" : "Continuar edição da mensagem", + "(All or part of this reply was generated by AI)" : "(Esta resposta foi gerada, no todo ou em parte, por IA)", + "Attachments were not copied. Please add them manually." : "Os anexos não foram copiados. Adicione-os manualmente.", + "Could not create snooze mailbox" : "Não foi possível criar caixa de correio de adiamento", + "Sending message…" : "Enviando mensagem…", + "Message sent" : "Mensagem enviada", + "Could not send message" : "Não foi possível enviar a mensagem", + "Message copied to \"Sent\" folder" : "Mensagem copiada para a pasta \"Enviadas\"", "Could not load {tag}{name}{endtag}" : "Não foi possível carregar {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Ocorreu um problema ao carregar {tag}{name}{endtag}", "Could not load your message" : "Não foi possível carregar a sua mensagem", "Could not load the desired message" : "Não foi possível carregar a mensagem escolhida", "Could not load the message" : "Não foi possível carregar a mensagem", "Error loading message" : "Erro ao carregar a mensagem", - "Determine importance using machine learning" : "Determinar a importância usando aprendizagem de máquina", - "Last 7 days" : "Últimos 7 dias" + "Add share link from Files" : "Adicionar link de compartilhamento de Arquivos", + "Choose a file to add as attachment" : "Escolha um ficheiro para adicionar como anexo", + "Choose a file to share as a link" : "Escolha um arquivo para compartilhar como link", + "Delegated access to {userId}" : "Delegar acesso a {userId}", + "Revoked access for {userId}" : "Acesso revogado de {userId}" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" } \ No newline at end of file diff --git a/l10n/ro.js b/l10n/ro.js index 48c5120d51..175063a56f 100644 --- a/l10n/ro.js +++ b/l10n/ro.js @@ -80,13 +80,13 @@ OC.L10N.register( "Calendar settings" : "Setări calendar", "Filters" : "Filtre", "Mail server" : "Server mail", + "Email address" : "Email", "Update alias" : "Actualizează aliasul", "Rename alias" : "Redenumește aliasul", "Show update alias form" : "Afișează forma de actualizare alias", "Delete alias" : "Șterge alias", "Go back" : "Înapoi", "Change name" : "Schimbă numele", - "Email address" : "Email", "Add alias" : "Adaugă alias", "Create alias" : "Creează alias", "Cancel" : "Anulează", @@ -98,6 +98,7 @@ OC.L10N.register( "List" : "Listă", "Newest first" : "Cel mai nou mai întâi", "Oldest first" : "Cel mai vechi mai întâi", + "Ok" : "Ok", "Shared with me" : "Partajat cu mine", "Privacy" : "Confidențialitate", "Security" : "Securitate", @@ -112,7 +113,6 @@ OC.L10N.register( "Send" : "Trimite", "Refresh" : "Reîmprospătează", "About" : "Despre", - "Ok" : "Ok", "No certificate" : "Niciun certificat", "Certificate updated" : "Certificatul a fost actualizat", "Could not update certificate" : "Nu s-a putut actualiza certificatul", @@ -149,21 +149,20 @@ OC.L10N.register( "Monday morning" : "Luni dimineață", "Custom date and time" : "Dată și oră personalizate", "Enter a date" : "Introdu data", - "Choose" : "Alege", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Atașamentul depășește dimensiunea totală de {size}. Partajați fișierul prin link.","Atașamentele depășesc dimensiunea totală de {size}. Partajați fișierele prin link-uri.","Atașamentele depășesc dimensiunea totală de {size}. Partajați fișierele prin link-uri."], - "Choose a file to add as attachment" : "Selectați un fișier ca atașament", - "Choose a file to share as a link" : "Selectați un fișier pentru partajare ca link", "_{count} attachment_::_{count} attachments_" : ["{count} atașament","{count} atașamente","{count} atașamente"], "Untitled message" : "Mesaj fără titlu", "Expand composer" : "Expandează mesajul", "Close composer" : "Închide mesajul", "Confirm" : "Confirmă", + "Revoke" : "Revocă", "Tag: {name} deleted" : "Eticheta: {name} a fost ștearsă", "An error occurred, unable to delete the tag." : "Eticheta nu a putut fi ștearsă.", "The tag will be deleted from all messages." : "Eticheta va fi ștearsă pentru toate mesajele.", "Plain text" : "Text simplu", "Rich text" : "Text formatat", "No messages" : "Niciun mesaj", + "Choose" : "Alege", "Blind copy recipients only" : "Doar destinatarii din copia blind", "No subject" : "Fără subiect", "Later today – {timeLocale}" : "Azi, mai târziu – {timeLocale}", @@ -195,14 +194,14 @@ OC.L10N.register( "Move thread" : "Mută conversația", "Archive thread" : "Arhivează conversația", "Archive message" : "Arhivează mesajul", - "Delete thread" : "Șterge conversația", - "Delete message" : "Șterge mesajul", "More actions" : "Mai multe acțiuni", "Back" : "Înapoi", "Set custom snooze" : "Setare amânare particularizată", "Edit as new message" : "Editează ca mesaj nou", "Create task" : "Creează sarcină", "Download message" : "Descarcă mesajul", + "Delete thread" : "Șterge conversația", + "Delete message" : "Șterge mesajul", "Load more" : "Încarcă mai mult", "_Mark {number} read_::_Mark {number} read_" : ["Marchează {number} ca citit","Marchează {number} ca citite","Marchează {number} ca citite"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marchează {number} ca necitit","Marchează {number} ca necitite","Marchează {number} ca necitite"], @@ -222,6 +221,7 @@ OC.L10N.register( "Event created" : "Evenimentul a fost creat", "Could not create event" : "Evenimentul nu a putut fi creat", "Create event" : "Creează eveniment", + "Title" : "Titlu", "All day" : "Toată ziua", "Attendees" : "Participanți", "Select calendar" : "Selectează calendarul", @@ -264,6 +264,7 @@ OC.L10N.register( "Message was unsnoozed" : "Mesajul a fost reluat", "Could not unsnooze message" : "Nu s-a putut relua mesajul", "Forward" : "Înainte", + "Link copied" : "Link copiat", "Move message" : "Mută mesajul", "Translate" : "Tradu", "Forward message as attachment" : "Transmite mesajul ca atașament", @@ -405,6 +406,8 @@ OC.L10N.register( "Reply to sender only" : "Răspunde doar expeditorului", "Mark as unfavorite" : "Elimină de la favorite", "Mark as favorite" : "Marchează ca favorit", + "From:" : "De la :", + "To:" : "Catre:", "Unsubscribe via link" : "Dezabonare prin link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Dezabonare va opri mesajele din lista de distribuție {sender}", "Send unsubscribe email" : "Trimite email de dezabonare", @@ -488,7 +491,7 @@ OC.L10N.register( "Could not load the desired message" : "Nu s-a putut încărca mesajul dorit", "Could not load the message" : "Nu s-a putut încărca mesajul", "Error loading message" : "Eroare la încărcarea mesajelor", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Mesajul va fi marcat automat ca important în funcție de mesajele cu care ați interacționat sau pe care le-ați marcat ca importante. La început ar trebui să setați manual importanța pentru antrenarea sistemului, dar aceasta se va îmbunătăți în timp.", - "Last 7 days" : "Ultimele 7 zile" + "Choose a file to add as attachment" : "Selectați un fișier ca atașament", + "Choose a file to share as a link" : "Selectați un fișier pentru partajare ca link" }, "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/l10n/ro.json b/l10n/ro.json index c42b76f76d..98a2fef433 100644 --- a/l10n/ro.json +++ b/l10n/ro.json @@ -78,13 +78,13 @@ "Calendar settings" : "Setări calendar", "Filters" : "Filtre", "Mail server" : "Server mail", + "Email address" : "Email", "Update alias" : "Actualizează aliasul", "Rename alias" : "Redenumește aliasul", "Show update alias form" : "Afișează forma de actualizare alias", "Delete alias" : "Șterge alias", "Go back" : "Înapoi", "Change name" : "Schimbă numele", - "Email address" : "Email", "Add alias" : "Adaugă alias", "Create alias" : "Creează alias", "Cancel" : "Anulează", @@ -96,6 +96,7 @@ "List" : "Listă", "Newest first" : "Cel mai nou mai întâi", "Oldest first" : "Cel mai vechi mai întâi", + "Ok" : "Ok", "Shared with me" : "Partajat cu mine", "Privacy" : "Confidențialitate", "Security" : "Securitate", @@ -110,7 +111,6 @@ "Send" : "Trimite", "Refresh" : "Reîmprospătează", "About" : "Despre", - "Ok" : "Ok", "No certificate" : "Niciun certificat", "Certificate updated" : "Certificatul a fost actualizat", "Could not update certificate" : "Nu s-a putut actualiza certificatul", @@ -147,21 +147,20 @@ "Monday morning" : "Luni dimineață", "Custom date and time" : "Dată și oră personalizate", "Enter a date" : "Introdu data", - "Choose" : "Alege", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Atașamentul depășește dimensiunea totală de {size}. Partajați fișierul prin link.","Atașamentele depășesc dimensiunea totală de {size}. Partajați fișierele prin link-uri.","Atașamentele depășesc dimensiunea totală de {size}. Partajați fișierele prin link-uri."], - "Choose a file to add as attachment" : "Selectați un fișier ca atașament", - "Choose a file to share as a link" : "Selectați un fișier pentru partajare ca link", "_{count} attachment_::_{count} attachments_" : ["{count} atașament","{count} atașamente","{count} atașamente"], "Untitled message" : "Mesaj fără titlu", "Expand composer" : "Expandează mesajul", "Close composer" : "Închide mesajul", "Confirm" : "Confirmă", + "Revoke" : "Revocă", "Tag: {name} deleted" : "Eticheta: {name} a fost ștearsă", "An error occurred, unable to delete the tag." : "Eticheta nu a putut fi ștearsă.", "The tag will be deleted from all messages." : "Eticheta va fi ștearsă pentru toate mesajele.", "Plain text" : "Text simplu", "Rich text" : "Text formatat", "No messages" : "Niciun mesaj", + "Choose" : "Alege", "Blind copy recipients only" : "Doar destinatarii din copia blind", "No subject" : "Fără subiect", "Later today – {timeLocale}" : "Azi, mai târziu – {timeLocale}", @@ -193,14 +192,14 @@ "Move thread" : "Mută conversația", "Archive thread" : "Arhivează conversația", "Archive message" : "Arhivează mesajul", - "Delete thread" : "Șterge conversația", - "Delete message" : "Șterge mesajul", "More actions" : "Mai multe acțiuni", "Back" : "Înapoi", "Set custom snooze" : "Setare amânare particularizată", "Edit as new message" : "Editează ca mesaj nou", "Create task" : "Creează sarcină", "Download message" : "Descarcă mesajul", + "Delete thread" : "Șterge conversația", + "Delete message" : "Șterge mesajul", "Load more" : "Încarcă mai mult", "_Mark {number} read_::_Mark {number} read_" : ["Marchează {number} ca citit","Marchează {number} ca citite","Marchează {number} ca citite"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marchează {number} ca necitit","Marchează {number} ca necitite","Marchează {number} ca necitite"], @@ -220,6 +219,7 @@ "Event created" : "Evenimentul a fost creat", "Could not create event" : "Evenimentul nu a putut fi creat", "Create event" : "Creează eveniment", + "Title" : "Titlu", "All day" : "Toată ziua", "Attendees" : "Participanți", "Select calendar" : "Selectează calendarul", @@ -262,6 +262,7 @@ "Message was unsnoozed" : "Mesajul a fost reluat", "Could not unsnooze message" : "Nu s-a putut relua mesajul", "Forward" : "Înainte", + "Link copied" : "Link copiat", "Move message" : "Mută mesajul", "Translate" : "Tradu", "Forward message as attachment" : "Transmite mesajul ca atașament", @@ -403,6 +404,8 @@ "Reply to sender only" : "Răspunde doar expeditorului", "Mark as unfavorite" : "Elimină de la favorite", "Mark as favorite" : "Marchează ca favorit", + "From:" : "De la :", + "To:" : "Catre:", "Unsubscribe via link" : "Dezabonare prin link", "Unsubscribing will stop all messages from the mailing list {sender}" : "Dezabonare va opri mesajele din lista de distribuție {sender}", "Send unsubscribe email" : "Trimite email de dezabonare", @@ -486,7 +489,7 @@ "Could not load the desired message" : "Nu s-a putut încărca mesajul dorit", "Could not load the message" : "Nu s-a putut încărca mesajul", "Error loading message" : "Eroare la încărcarea mesajelor", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Mesajul va fi marcat automat ca important în funcție de mesajele cu care ați interacționat sau pe care le-ați marcat ca importante. La început ar trebui să setați manual importanța pentru antrenarea sistemului, dar aceasta se va îmbunătăți în timp.", - "Last 7 days" : "Ultimele 7 zile" + "Choose a file to add as attachment" : "Selectați un fișier ca atașament", + "Choose a file to share as a link" : "Selectați un fișier pentru partajare ca link" },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" } \ No newline at end of file diff --git a/l10n/ru.js b/l10n/ru.js index beb67648ca..6d0f1d2e47 100644 --- a/l10n/ru.js +++ b/l10n/ru.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "Почта", "You are reaching your mailbox quota limit for {account_email}" : "Вы достигли предела квоты почтового ящика для {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "В настоящее время вы используете {percentage} места в вашем почтовом ящике. Пожалуйста, освободите место, удалив ненужные электронные письма.", + "{account_email} has been delegated to you" : "{account_email} было делегировано вам", + "{user} delegated {account} to you" : "{user} делегирован {account} вам", + "{account_email} is no longer delegated to you" : "{account_email} вам больше не делегируется", + "{user} revoked delegation for {account}" : "{user} отозвал делегирование для {account}", "Mail Application" : "Почтовое приложение", "Mails" : "Почты", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Адрес электронной почты отправителя: %1$s отсутствует в адресной книге, но имя отправителя: %2$s есть в адресной книге со следующим адресом электронной почты: %3$s", @@ -22,11 +26,15 @@ OC.L10N.register( "Sent date is in the future" : "Дата отправки еще в будущем", "Mail server marked this message as phishing attempt" : "Почтовый сервер пометил это сообщение как попытку фишинга", "Some addresses in this message are not matching the link text" : "Некоторые адреса в этом сообщении не соответствуют тексту ссылки.", + "Reply-To email: %1$s is different from sender email: %2$s" : "Reply-To email: %1$s отличается от отправителя email: %2$s", "Mail connection performance" : "Производительность почтового соединения", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Обнаружен медленный почтовый сервис (%1$s) попытка подключения к нескольким аккаунтам занимала в среднем %2$s секунды на аккаунт", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Обнаружена медленная почтовая служба (%1$s) попытка выполнить операцию списка почтовых ящиков на нескольких учетных записях заняла в среднем %2$s секунд на один аккаунт", "Mail Transport configuration" : "Конфигурация почтового транспорта", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "Для параметра app.mail.transport не задано значение SMTP. Такая конфигурация может вызвать проблемы с современными средствами защиты электронной почты, такими как SPF и DKIM, поскольку письма отправляются непосредственно с веб-сервера, который часто не настроен должным образом для этой цели. Для решения этой проблемы мы прекратили поддержку почтового транспорта. Удалите app.mail.transport из вашей конфигурации, чтобы использовать SMTP-транспорт и скрыть это сообщение. Для обеспечения доставки электронной почты требуется правильно настроенный SMTP.", "Mail account parameters, aliases and preferences" : "Параметры почтовой учетной записи, псевдонимы и настройки", "💌 A mail app for Nextcloud" : "💌 Почта для Nextcloud", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Почтовое приложение для Nextcloud**\n\n- **🚀 Интеграция с другими Nextcloud приложениями!** Сейчас Contacts, Calendar & Files – будет больше.\n- **📥 Множество почтовых аккаунтов!** Личный и корпоративный аккаунт? Нет проблем, и унифицированная папка Входящие. Подключите любой аккаунт IMAP.\n- **🔒 Отправка & получение зашифрованной почты!** Использууйте отличное [Mailvelope](https://mailvelope.com) расширение браузера.\n- **🙈 Мы не изобретаем велосипед!** Основывается на библиотеках [Horde](https://www.horde.org).\n- **📬 Хотите разместить свой собственный почтовый сервер?** Нам не нужно переопределять это, поскольку вы могли бы настроить [Mail-in-a-Box](https://mailinabox.email)!\n\n## Этический рейтинг ИИ\n\n### Приоритетные входящие\n\nПоложительный:\n* Программное обеспечение для обучения и вывода этой модели имеет открытый исходный код.\n* Модель создается и обучается локально на основе собственных данных пользователя.\n* Данные обучения доступны пользователю, что позволяет проверить или исправить погрешность или оптимизировать производительность и использование CO2.\n\n### Сводки тем (опционально)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг зависит от установленного бэкэнда обработки текста. См. [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для подробностей.\n\nУзнайте больше о рейтинге этического ИИ Nextcloud [в нашем блоге](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Истекло время сеанса работы, страница будет обновлена.", "Drafts are saved in:" : "Папка черновиков:", "Sent messages are saved in:" : "Папка отправленных писем:", @@ -89,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "Порт SMTP", "SMTP User" : "Имя пользователя SMTP", "SMTP Password" : "Пароль SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Для настройки учётной записи Google необходимо включить двухфакторную аутентификацию и создать пароль приложения.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google требует аутентификацию OAuth. Если ваш администратор Nextcloud не настроил Google OAuth, вместо этого вы можете использовать пароль приложения Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft требует аутентификации OAuth. Попросите администратора Nextcloud настроить Microsoft OAuth в настройках администратора.", "Account settings" : "Параметры учётной записи", "Aliases" : "Псевдонимы", "Alias to S/MIME certificate mapping" : "Сопоставление псевдонима с сертификатом S/MIME", @@ -113,13 +122,13 @@ OC.L10N.register( "Mail server" : "Почтовый сервер", "Sieve server" : "Сервер Sieve", "Folder search" : "Поиск по папкам", + "Email address" : "Адрес эл. почты", "Update alias" : "Обновить псевдоним", "Rename alias" : "Переименовать псевдоним", "Show update alias form" : "Показать обновления для формы alias", "Delete alias" : "Удалить псевдоним", "Go back" : "Вернуться назад", "Change name" : "Изменить имя", - "Email address" : "Адрес эл. почты", "Add alias" : "Добавить псевдоним", "Create alias" : "Создать псевдоним", "Cancel" : "Отмена", @@ -132,6 +141,7 @@ OC.L10N.register( "Mail settings" : "Параметры эл. почты", "General" : "Основные", "Set as default mail app" : "Установлено в качестве почтового приложения по умолчанию", + "{email} (delegated)" : "{email} (делегировано)", "Add mail account" : "Добавить учётную запись", "Appearance" : "Внешний вид", "Show all messages in thread" : "Показывать все сообщения в теме", @@ -146,13 +156,16 @@ OC.L10N.register( "Sorting" : "Сортировка", "Newest first" : "Самый новый первый", "Oldest first" : "Самый старый первый", + "New text block" : "Новый текстовый блок", + "Title of the text block" : "Заголовок текстового блока", + "Content of the text block" : "Содержимое текстового блока", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Аватары из Gravatar и значки", "Reply position" : "Позиция для ответа", "Top" : "Верх", "Bottom" : "Низ", "Text blocks" : "Текстовые блоки", "Reusable pieces of text that can be inserted in messages" : "Многократно используемые фрагменты текста, которые можно вставлять в сообщения", - "New text block" : "Новый текстовый блок", "Shared with me" : "Поделились с вами", "Privacy" : "Конфиденциальность", "Data collection" : "Сбор данных", @@ -183,9 +196,6 @@ OC.L10N.register( "About" : "О себе", "Acknowledgements" : "Благодарности", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Это приложение включает в себя CKEditor, редактор с открытым исходным кодом. Авторские права © Авторы CKEditor. Лицензия GPLv2.", - "Title of the text block" : "Заголовок текстового блока", - "Content of the text block" : "Содержимое текстового блока", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Автоматическое создание предварительных встреч в календаре", "No certificate" : "Нет сертификата", "Certificate updated" : "Сертификат обновлен", @@ -229,7 +239,6 @@ OC.L10N.register( "Disable formatting" : "Выключить форматирование", "Upload attachment" : "Загрузить файл с ПК", "Add attachment from Files" : "Из приложения «Файлы»", - "Add share link from Files" : "Добавить ссылку для общего доступа из Файлов", "Smart picker" : "Умный подборщик", "Request a read receipt" : "Запросить подтверждение прочтения", "Sign message with S/MIME" : "Подписать сообщение с помощью S/MIME", @@ -241,13 +250,28 @@ OC.L10N.register( "Monday morning" : "В понедельник утром", "Custom date and time" : "Настроить дату и время", "Enter a date" : "Выберите дату", - "Choose" : "Выберите", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Размер этого вложения превышает установленный лимит, который равен {size}. Опубликуйте этот файл с доступом по ссылке и перешлите ссылку, вместо отправки файла.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов."], - "Choose a file to add as attachment" : "Выбрать файл для вложения", - "Choose a file to share as a link" : "Выберите файл для публикации ссылкой", + "Choose a file" : "Выберите файл", "_{count} attachment_::_{count} attachments_" : ["{count} вложение","{count} вложения","{count} вложений","{count} вложений"], "Untitled message" : "Сообщение без названия", + "Expand composer" : "Развернуть композер", + "Close composer" : "Закрыть композер", "Confirm" : "Подтвердить", + "Delegate access" : "Делегировать доступ", + "Revoke" : "Отозвать", + "{userId} will no longer be able to act on your behalf" : "{userId} больше не сможет действовать от вашего имени", + "Could not fetch delegates" : "Не удалось получить делегатов", + "Delegated access to {displayName}" : "Делегирован доступ к {displayName}", + "Could not delegate access" : "Не удалось делегировать доступ", + "Revoked access for {displayName}" : "Отменён доступ для {displayName}", + "Could not revoke delegation" : "Не удалось отозвать делегирование", + "Delegation" : " Делегирование", + "Allow users to send, receive, and delete mail on your behalf" : "Разрешить пользователям отправлять, получать и удалять почту от вашего имени", + "Revoke access" : "Отозвать доступ", + "Add delegate" : "Добавить делегата", + "Select a user" : "Выберите пользователя", + "They will be able to send, receive, and delete mail on your behalf" : "Они смогут отправлять, получать и удалять почту от вашего имени", + "Revoke access?" : "Отозвать доступ?", "Tag: {name} deleted" : "Тег: {name} удален", "An error occurred, unable to delete the tag." : "Произошла ошибка, не удалось удалить тег.", "The tag will be deleted from all messages." : "Тег будет удален из всех сообщений.", @@ -255,8 +279,10 @@ OC.L10N.register( "Rich text" : "Текст с форматированием", "No messages in this folder" : "В этой папке нет сообщений", "No messages" : "Нет ни одного сообщения", + "Choose" : "Выберите", "Blind copy recipients only" : "Только получатели скрытой копии", "No subject" : "Без темы", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Черновик:{markup-end} {subject}", "Later today – {timeLocale}" : "Позднее сегодня – {timeLocale}", "Set reminder for later today" : "Установить напоминание позднее сегодня", "Tomorrow – {timeLocale}" : "Завтра – {timeLocale}", @@ -265,9 +291,18 @@ OC.L10N.register( "Set reminder for this weekend" : "Установить напоминание на эти выходные", "Next week – {timeLocale}" : "Следующая неделя – {timeLocale}", "Set reminder for next week" : "Установить напоминание на следующую неделю", + "Could not apply tag, configured tag not found" : "Не удалось применить тег, настроенный тег не найден", + "Could not move thread, destination mailbox not found" : "Не удалось переместить тему, почтовый ящик назначения не найден", + "Could not execute quick action" : "Не удалось выполнить быстрое действие", + "Quick action executed" : "Быстрое действие выполнено", "No trash folder configured" : "Папка корзины не настроена", "Could not delete message" : "Не удалось удалить сообщение", "Could not archive message" : "Не удалось заархивировать письмо", + "Thread was snoozed" : "Тред был отложен", + "Could not snooze thread" : "Не удалось отложить тред", + "Thread was unsnoozed" : "Тред не был отложен", + "Could not unsnooze thread" : "Не удалось отменить отмену треда", + "This summary was AI generated" : "Это резюме было создано ИИ", "Encrypted message" : "Зашифрованное сообщение", "This message is unread" : "Это сообщение не прочитано", "Unfavorite" : "Убрать из избранного", @@ -278,18 +313,23 @@ OC.L10N.register( "Mark not spam" : "Пометить как не являющееся спамом", "Mark as spam" : "Пометить как спам", "Edit tags" : "Изменить метки", + "Snooze" : "Отложить", + "Unsnooze" : "Отменить откладывание", "Move thread" : "Переместить ветку", "Move Message" : "Переместить сообщение", "Archive thread" : "Архивировать тему", "Archive message" : "Архивное сообщение", - "Delete thread" : "Удалить ветку", - "Delete message" : "Удалить сообщение", "More actions" : "Больше действий", "Back" : "Назад", "Set custom snooze" : "Установить пользовательский режим повтора", "Edit as new message" : "Редактировать как новое сообщение", + "Reply with meeting" : "Ответить при встрече", "Create task" : "Создать задачу", "Download message" : "Скачать письмо", + "Delete thread" : "Удалить ветку", + "Delete message" : "Удалить сообщение", + "Back to all actions" : "Вернуться ко всем действиям", + "Manage quick actions" : "Управление быстрыми действиями", "Load more" : "Загрузить больше", "_Mark {number} read_::_Mark {number} read_" : ["Отметить {number} сообщение как прочитанное","Отметить {number} сообщения как прочитанные","Отметить {number} сообщений как прочитанные","Отметить {number} сообщения как прочитанные"], "_Mark {number} unread_::_Mark {number} unread_" : ["Отметить {number} как непрочитанное","Отметить {number} как непрочитанные","Отметить {number} как непрочитанные","Отметить {number} как непрочитанные"], @@ -298,17 +338,24 @@ OC.L10N.register( "_Unfavorite {number}_::_Unfavorite {number}_" : ["Убрать {number} сообщение из избранного","Убрать из избранного {number} сообщения","Убрать из избранного {number} сообщений","Убрать из избранного {number} сообщения"], "_Favorite {number}_::_Favorite {number}_" : ["Добавить {number} сообщение в избранное","Добавить {number} сообщения в избранное","Добавить {number} сообщений в избранное","Добавить {number} сообщения в избранное"], "_Unselect {number}_::_Unselect {number}_" : ["Отменить выбор {number} сообщения","Отменить выбор {number} сообщений","Отменить выбор {number} сообщений","Отменить выбор {number} сообщений"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Отметить {number} как спам","Отметить {number} как спам","Отметить {number} как спам","Отметить {number} как спам"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Отметить {number} как не спам","Отметить {number} как не спам","Отметить {number} как не спам","Отметить {number} как не спам"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Редактировать теги для {number}","Редактировать теги для {number}","Редактировать теги для {number}","Редактировать теги для {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Переместить {number} ветку","Переместить {number} ветки","Переместить {number} веток","Переместить {number} веток"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Переслать {number} сообщение как вложение","Переслать {number} сообщения как вложение","Переслать {number} сообщений как вложение","Переслать {number} сообщения как вложение"], "Mark as unread" : "Пометить непрочитанным", "Mark as read" : "Пометить прочитанным", + "Mark as unimportant" : "Отметить как неважное", "Mark as important" : "Отметить как важное", "Report this bug" : "Отправить отчёт об этой ошибке", + "This description was generated by AI." : "Это описание было создано AI.", "Event created" : "Событие создано", "Could not create event" : "Не удалось создать событие", "Create event" : "Создать событие", + "Title" : "Название", "All day" : "Весь день", "Attendees" : "Участники", + "You can only invite attendees if your account has an email address set" : "Вы можете приглашать участников только в том случае, если в вашем аккаунте указан адрес электронной почты", "Select calendar" : "Выбрать календарь", "Description" : "Описание", "Create" : "Создать", @@ -331,6 +378,8 @@ OC.L10N.register( "Decline" : "Отклонить", "Tentatively accept" : "Предварительно принять", "More options" : "Дополнительные параметры", + "This message has an attached invitation but the invitation dates are in the past" : "К этому сообщению прикреплено приглашение, но даты приглашения уже в прошлом", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "К этому сообщению прикреплено приглашение, но оно не содержит участника, соответствующего любому настроенному адресу почтового аккаунта", "Could not remove internal address {sender}" : "Не удалось удалить внутренний адрес {sender}", "Could not add internal address {address}" : "Не удалось добавить внутренний адрес {address}", "individual" : "личный", @@ -339,6 +388,7 @@ OC.L10N.register( "Add internal address" : "Добавить внутренний адрес", "Add internal email or domain" : "Добавить внутреннюю электронную почту или домен", "Itinerary for {type} is not supported yet" : "Маршруты типа {type} пока не поддерживаются", + "To archive a message please configure an archive folder in account settings" : "Чтобы заархивировать сообщение, настройте папку архива в настройках аккаунта", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Вам не разрешено перемещать это сообщение в архивную папку и/или удалять это сообщение из текущей папки.", "Your IMAP server does not support storing the seen/unseen state." : "Ваш IMAP-сервер не поддерживает сохранение состояния просмотра/непросмотра.", "Could not mark message as seen/unseen" : "Не удалось пометить сообщение как (не)прочтенное", @@ -348,13 +398,23 @@ OC.L10N.register( "Last week" : "Прошлая неделя", "Last month" : "Последний месяц", "Could not open folder" : "Не удалось открыть папку", + "Loading messages …" : "Загрузка сообщений ...", + "Indexing your messages. This can take a bit longer for larger folders." : "Индексирование ваших сообщений. Для больших папок это может занять немного больше времени.", "Choose target folder" : "Выбор папки назначения", "No more submailboxes in here" : "Вложенные папки отсутствуют", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Сообщения будут автоматически помечены как важные с помощью ИИ. Система узнает, с какими сообщениями вы взаимодействуете или отмечаете их как важные. Вначале вам, возможно, придется вручную изменить важность, чтобы научить её, но со временем она улучшится.", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Сообщения, отмеченные вами как избранные, будут отображаться вверху папок. Вы можете отключить это поведение в настройках приложения", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "ИИ определяет отправленные вами сообщения, которые, вероятно, требуют ответа, но не получили его через пару дней, и показывает их здесь", "Favorites" : "Избранные", + "Favorites info" : "Информация об избранном", + "Load more favorites" : "Загрузить больше избранных", "Follow up" : "Следовать за", "Follow up info" : "Последующая информация", + "Load more follow ups" : "Загрузить больше отслеживаемых", "Important info" : "Важная информация", + "Load more important messages" : "Загрузить больше важных сообщений", "Other" : "Прочие", + "Load more other messages" : "Загрузить больше других сообщений", "Could not send mdn" : "Не удалось отправить уведомление о прочтении", "The sender of this message has asked to be notified when you read this message." : "Отправитель этого сообщения запросил подтверждение прочтения.", "Notify the sender" : "Уведомить отправителя", @@ -363,7 +423,9 @@ OC.L10N.register( "Could not snooze message" : "Не удалось отложить сообщение.", "Message was unsnoozed" : "Сообщение было снято с отложенного просмотра", "Could not unsnooze message" : "Не удалось отложить сообщение.", + "Direct link copied to clipboard" : "Прямая ссылка, скопированная в буфер обмена", "Forward" : "Переслать", + "Link copied" : "Ссылка скопирована", "Move message" : "Переместить сообщение", "Translate" : "Перевести", "Forward message as attachment" : "Переслать сообщение вложением", @@ -371,8 +433,10 @@ OC.L10N.register( "Print message" : "Распечатать сообщение", "Create mail filter" : "Создать почтовый фильтр", "Download thread data for debugging" : "Скачать ветку для отладки", + "Suggested replies are using AI" : "Предлагаемые ответы используют ИИ", "Message body" : "Тело сообщения", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Предупреждение: Подпись S/MIME этого сообщения не проверена. Отправитель может выдавать себя за кого-то другого!", + "AI info" : "Информация об ИИ", "Unnamed" : "Без имени", "Embedded message" : "Внедрённое сообщение", "Attachment saved to Files" : "Вложение сохранено в Файлах", @@ -401,13 +465,19 @@ OC.L10N.register( "Moving" : "Выполняется перемещение", "Moving thread" : "Перемещение ветки", "Moving message" : "Сообщение перемещается", + "This account cannot connect" : "Этот аккаунт не может подключиться", + "Connection failed. Please verify your information and try again" : "Соединение не удалось. Проверьте вашу информацию и повторите попытку", + "Change password" : "Сменить пароль", "Used quota: {quota}% ({limit})" : "Использовано квоты: {quota}% ({limit})", "Used quota: {quota}%" : "Использовано квоты: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Невозможно создать почтовый ящик. Вероятно, имя содержит недопустимые символы. Попробуйте другое имя.", "Remove account" : "Удалить учётную запись", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Учётная запись {email} и сохранённые данные будут удалены из Nextcloud, но сохранятся на исходном почтовом сервере.", "Remove {email}" : "Удалить {email}", + "could not delete account" : "не удалось удалить аккаунт", "Provisioned account is disabled" : "Предоставленный аккаунт отключен", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Пожалуйста, войдите в систему, используя пароль, чтобы активировать эту учетную запись. Текущий сеанс использует аутентификацию без пароля, например. Единый вход или WebAuthn.", + "Delegate account" : "Делегировать аккаунт", "Show only subscribed folders" : "Показывать только папки из подписки", "Add folder" : "Добавить папку", "Folder name" : "Имя папки", @@ -427,6 +497,7 @@ OC.L10N.register( "Delete folder" : "Удалить папку", "Delete folder {name}" : "Удалить папку «{name}»", "An error occurred, unable to rename the mailbox." : "Ошибка переименования папки.", + "Please wait 10 minutes before repairing again" : "Пожалуйста, подождите 10 минут перед повторным восстановлением", "Mark all as read" : "Пометить всё как прочитанное", "Add subfolder" : "Добавить подпапку", "Rename" : "Переименовать", @@ -438,6 +509,7 @@ OC.L10N.register( "Sync in background" : "Фоновая синхронизация", "Delete all messages" : "Удалить все сообщения", "Outbox" : "Исходящие", + "Translate this message to {language}" : "Перевести это сообщение на {language}", "New message" : "Создать сообщение", "Edit message" : "Редактировать сообщение", "Draft" : "Черновик", @@ -447,15 +519,22 @@ OC.L10N.register( "Failed to save draft" : "Не удалось сохранить черновик", "attachment" : "вложение", "attached" : "прикрепить", + "No \"sent\" folder configured. Please pick one in the account settings." : "Папка «Отправленные» не настроена. Пожалуйста, выберите одну в настройках аккаунта.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Вы пытаетесь отправить письмо очень большому количеству получателей, указанных в полях «Кому» или «Коп». Для сокрытия адреса эл. почты получателя, укажите его в поле «Скр. коп.».", "Your message has no subject. Do you want to send it anyway?" : "У вашего сообщения нет темы. Вы все равно хотите его отправить?", "You mentioned an attachment. Did you forget to add it?" : "Вы упомянули вложение. Вы забыли добавить его?", "Message discarded" : "Внесение изменений отменено", "Could not discard message" : "Не удалось отменить внесение изменений", + "Maximize composer" : "Развернуть композер", + "Show recipient details" : "Показать сведения о получателе", + "Hide recipient details" : "Скрыть сведения о получателе", + "Minimize composer" : "Свернуть композер", "Error sending your message" : "Ошибка при отправке вашего сообщения", "Retry" : "Попробовать снова", "Warning sending your message" : "Предупреждать перед отправкой сообщения", "Send anyway" : "Всё равно отправить", + "Welcome to {productName} Mail" : "Добро пожаловать в {productName} почту", + "Start writing a message by clicking below or select an existing message to display its contents" : "Начните писать сообщение, нажав кнопку ниже, или выберите существующее сообщение, чтобы отобразить его содержимое", "Autoresponder off" : "Автоответчик выключен", "Autoresponder on" : "Автоответчик включен", "Autoresponder follows system settings" : "Автоответчик следует системным настройкам", @@ -473,6 +552,8 @@ OC.L10N.register( "Mail server error" : "Ошибка почтового сервера", "Message could not be sent" : "Сообщение не может быть отправлено", "Message deleted" : "Сообщение удалено", + "Copy to \"Sent\" Folder" : "Скопировать в папку «Отправленные»", + "Copy to Sent Folder" : "Скопировать в папку Отправленные", "Phishing email" : "Фишинговое письмо", "This email might be a phishing attempt" : "Это письмо может быть попыткой фишинга", "Hide suspicious links" : "Скрыть подозрительные ссылки", @@ -484,6 +565,7 @@ OC.L10N.register( "Add to Contact" : "Добавить в контакты", "New Contact" : "Новый контакт", "Copy to clipboard" : "Копировать в буфер", + "Contact name …" : "Имя контакта  ...", "Add" : "Добавить", "Show less" : "Показывать меньше", "Show more" : "Показывать больше", @@ -494,17 +576,23 @@ OC.L10N.register( "Search parameters" : "Параметры поиска", "Search subject" : "Тема поиска", "Body" : "Тело", + "Search body" : "Искать тело", "Date" : "Дата", "Pick a start date" : "Выберите дату начала", "Pick an end date" : "Выберите дату окончания", "Select senders" : "Выберите отправителей", "Select recipients" : "Выберите получателей", + "Select CC recipients" : "Выбрать получателей CC", + "Select BCC recipients" : "Выбрать получателей BCC", "Tags" : "Метки", "Select tags" : "Выбор меток", "Marked as" : "Отмечено как", "Has attachments" : "Имеет вложения", "Mentions me" : "Упоминания меня", "Has attachment" : "Имеет вложение", + "To me" : "Мне", + "Enable mail body search" : "Включить поиск по телу письма", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve — мощный язык для написания фильтров для вашего почтового ящика. Вы можете управлять сценариями фильтрации в Mail, если ваша служба электронной почты поддерживает это. Sieve также необходим для использования автоответчика и фильтров.", "Enable sieve filter" : "Включить Sieve фильтр", "Sieve host" : "Хост Sieve", "Sieve security" : "Безопасность Sieve", @@ -525,6 +613,7 @@ OC.L10N.register( "Message source" : "Исходный текст сообщения", "An error occurred, unable to rename the tag." : "Не удалось переименовать метку.", "Edit name or color" : "Отредактируйте название или цвет", + "Saving new tag name …" : "Сохранение нового имени тега …", "Delete tag" : "Удалить метку", "Set tag" : "Установить тег", "Unset tag" : "Неустановленный тег", @@ -534,6 +623,7 @@ OC.L10N.register( "An error occurred, unable to create the tag." : "Не удалось создать метку.", "Add default tags" : "Добавить метки по умолчанию", "Add tag" : "Добавить метку", + "Saving tag …" : "Сохранение тега …", "Task created" : "Задача создана", "Could not create task" : "Не удалось создать задачу", "No calendars with task list support" : "Нет календарей с поддержкой списка задач", @@ -560,6 +650,10 @@ OC.L10N.register( "Reply to sender only" : "Ответить только отправителю", "Mark as unfavorite" : "Отметить как неизбранное", "Mark as favorite" : "Отметить как избранное", + "From:" : "С:", + "To:" : "По:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Отписаться по ссылке", "Unsubscribing will stop all messages from the mailing list {sender}" : "Отказ от подписки приведет к остановке всех сообщений из списка рассылки {sender}", "Send unsubscribe email" : "Отправить письмо об отказе от подписки", @@ -568,6 +662,7 @@ OC.L10N.register( "Thread summary" : "Резюме темы", "Go to latest message" : "Перейти к последнему сообщению", "Newest message" : "Самое свежее сообщение", + "This summary is AI generated and may contain mistakes." : "Это резюме создано ИИ и может содержать ошибки.", "Please select languages to translate to and from" : "Выберите языки с которых и на которые переводить", "The message could not be translated" : "Сообщение не может быть переведено", "Translation copied to clipboard" : "Перевод скопирован в буфер обмена", @@ -578,6 +673,7 @@ OC.L10N.register( "Target language to translate into" : "Целевой язык для перевода на", "Translate to" : "Перевести на", "Translating" : "Идет перевод", + "This translation is generated using AI and may contain inaccuracies" : "Этот перевод создан с использованием ИИ и может содержать неточности", "Copy translated text" : "Копировать переведенный текст", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Отключите сохранение корзины, оставив поле пустым или установив для него значение 0. Будут обрабатываться только письма, удаленные после включения сохранения корзины.", "Could not remove trusted sender {sender}" : "Не удалось удалить доверенного отправителя {sender}", @@ -592,28 +688,44 @@ OC.L10N.register( "{trainNr} from {depStation} to {arrStation}" : "{trainNr} из {depStation} в {arrStation}", "Train from {depStation} to {arrStation}" : "Поезд из {depStation} в {arrStation}", "Train" : "Поезд", + "Mark message as" : "Отметить сообщение как", "Add flag" : "Добавить флаг", "Move into folder" : "Переместить в папку", "Stop" : "Стоп", "Delete action" : "Действие удаления", + "Answered" : "Отвечено", "Deleted" : "Удалено", + "Flagged" : "Помечено", + "Seen" : "Просмотрено", + "Enter flag" : "Введите флаг", + "Stop ends all processing" : "Стоп завершает всю обработку", "Sender" : "Отправитель", "Recipient" : "Получатель", "Create a new mail filter" : "Создать новый почтовый фильтр", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Выберите заголовки, которые вы хотите использовать для создания фильтра. На следующем шаге вы сможете уточнить условия фильтра и указать действия, которые следует выполнять над сообщениями, которые соответствуют вашим критериям.", "Delete filter" : "Удалить фильтр", + "Delete mail filter {filterName}?" : "Удалить почтовый фильтр {filterName}?", "Are you sure to delete the mail filter?" : "Вы уверены, что хотите удалить почтовый фильтр?", "New filter" : "Новый фильтр", "Filter saved" : "Фильтр сохранён", "Could not save filter" : "Не удалось сохранить фильтр", "Filter deleted" : "Фильтр удалён", "Could not delete filter" : "Не удалось удалить фильтр", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Возьмите под контроль хаос в своей электронной почте. Фильтры помогут вам расставить приоритеты и устранить беспорядок.", + "Hang tight while the filters load" : "Держитесь крепче, пока загружаются фильтры", "Filter is active" : "Фильтр активен", "Filter is not active" : "Фильтр не активен", + "If all the conditions are met, the actions will be performed" : "Если все условия соблюдены, действия будут выполнены", + "If any of the conditions are met, the actions will be performed" : "При выполнении любого из условий действия будут выполнены", "Help" : "Справка", "contains" : "содержит", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Совпадение подстроки. Поле соответствует, если в нем содержится указанное значение. Например, \"report\" будет соответствовать \"port\".", "matches" : "соответствует", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Соответствие шаблону с использованием подстановочных знаков. Символ \"*\" представляет любое количество символов (в том числе ни одного), а символ \"?\" представляет ровно один символ. Например, \"*report*\" будет соответствовать \"Business report 2024\".", "Enter subject" : "Введите тему", "Enter sender" : "Введите отправителя", + "Enter recipient" : "Введите получателя", + "is exactly" : "это точно", "Conditions" : "Условие", "Add condition" : "Добавить условие", "Actions" : "Действия", @@ -622,7 +734,22 @@ OC.L10N.register( "Enable filter" : "Включить фильтр", "Tag" : "Метка", "delete" : "удалить", + "Edit quick action" : "Изменить быстрое действие", + "Add quick action" : "Добавить быстрое действие", + "Quick action deleted" : "Быстрое действие удалено", + "Failed to delete quick action" : "Не удалось удалить быстрое действие", + "Failed to update quick action" : "Не удалось обновить быстрое действие", + "Failed to update step in quick action" : "Не удалось обновить шаг в быстром действии", + "Quick action updated" : "Быстрое действие обновлено", + "Failed to create quick action" : "Не удалось создать быстрое действие", + "Failed to add steps to quick action" : "Не удалось добавить шаги к быстрому действию", + "Quick action created" : "Быстрое действие создано", + "Failed to delete action step" : "Не удалось удалить шаг действия", + "No quick actions yet." : "Быстрых действий пока нет.", "Edit" : "Редактирование", + "Quick action name" : "Название быстрого действия", + "Do the following actions" : "Выполнить следующие действия", + "Add another action" : "Добавить ещё одно действие", "Successfully updated config for \"{domain}\"" : "Конфигурация домена «{domain}» обновлена", "Error saving config" : "Не удалось сохранить параметры конфигурации", "Saved config for \"{domain}\"" : "Конфигурация домена «{domain}» сохранена", @@ -662,8 +789,13 @@ OC.L10N.register( "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail позволяет пользователям получать доступ к своей электронной почте через IMAP. По соображениям безопасности этот доступ возможен только при подключении OAuth 2.0 или учетных записях Google, которые используют двухфакторную аутентификацию и пароли приложений.", "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам необходимо зарегистрировать новый идентификатор клиента для «веб-приложения» в консоли Google Cloud. Добавьте URL-адрес {url} в качестве URI авторизованного перенаправления.", "Microsoft integration" : "Интеграция с Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft требует, чтобы вы получали доступ к своей электронной почте через IMAP с использованием аутентификации OAuth 2.0. Для этого вам необходимо зарегистрировать приложение с помощью Microsoft Entra ID, ранее известного как Microsoft Azure Active Directory.", "Redirect URI" : "Адрес перенаправления", + "For more details, please click here to open our documentation." : "Для получения более подробной информации нажмите здесь, чтобы открыть нашу документацию.", + "User Interface Preference Defaults" : "Настройки пользовательского интерфейса по умолчанию", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Эти настройки используются для предварительной настройки предпочтений пользовательского интерфейса. Пользователь может их переопределить в настройках почты", "Message View Mode" : "Режим отображения сообщения", + "Show only the selected message" : "Показать только выбранное сообщение", "Successfully set up anti spam email addresses" : "Успешно установлены анти-спам адреса электронной почты", "Error saving anti spam email addresses" : "Ошибка при сохранении анти-спам адресов электронной почты", "Successfully deleted anti spam reporting email" : "Успешно удалён анти-спам адрес отчёта электронной почты", @@ -718,6 +850,7 @@ OC.L10N.register( "Certificate imported successfully" : "Сертификат успешно импортирован", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Не удалось импортировать сертификат. Убедитесь, что закрытый ключ соответствует сертификату и не защищен парольной фразой.", "Failed to import the certificate" : "Не удалось импортировать сертификат", + "Import S/MIME certificate" : "Импортировать сертификат S/MIME", "S/MIME certificates" : "Сертификаты S/MIME", "Certificate name" : "Название сертификата", "E-mail address" : "Адрес эл. почты", @@ -725,7 +858,6 @@ OC.L10N.register( "Delete certificate" : "Удалить сертификат", "No certificate imported yet" : "Сертификат еще не импортирован", "Import certificate" : "Импортный сертификат", - "Import S/MIME certificate" : "Импортировать сертификат S/MIME", "PKCS #12 Certificate" : "PKCS #12 Сертификат", "PEM Certificate" : "PEM Сертификат", "Certificate" : "Сертификат", @@ -748,6 +880,7 @@ OC.L10N.register( "Edit text block" : "Редактировать текстовый блок", "Shares" : "Приглашения", "Search for users or groups" : "Поиск пользователей или групп", + "Choose a text block to insert at the cursor" : "Выберите текстовый блок для вставки под курсором", "Insert" : "Вставить", "Insert text block" : "Вставить блок текста", "Account connected" : "Аккаунт подключен", @@ -771,6 +904,7 @@ OC.L10N.register( "Discard changes" : "Отменить изменения", "Discard unsaved changes" : "Отменить несохранённые изменения", "Keep editing message" : "Продолжайте редактировать сообщение", + "(All or part of this reply was generated by AI)" : "(Весь или часть этого ответа была создана ИИ)", "Attachments were not copied. Please add them manually." : "Вложения не скопированы, добавьте их вручную.", "Could not create snooze mailbox" : "Не удалось создать почтовый ящик для отсрочки", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Извините, сообщение не удалось загрузить. Возможно, черновик больше не существует. Пожалуйста, обновите страницу и повторите попытку.", @@ -785,11 +919,10 @@ OC.L10N.register( "Could not load the desired message" : "Ошибка получения указанного сообщения", "Could not load the message" : "Ошибка получения этого сообщения", "Error loading message" : "Ошибка загрузки сообщения", - "Determine importance using machine learning" : "Определите важность с помощью машинного обучения", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Письма будут автоматически отмечаться важными на основе анализа ваших действий и присвоения метки «Важно». В первое время, возможно, потребуется обучить систему присвоением и удалением меток вручную.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Здесь будут отображаться отправленные вами сообщения, требующие ответа, но не полученные в течение нескольких дней.", - "Mark all messages of this folder as read" : "Пометить все сообщения в этой папке как прочитанные", - "Last 7 days" : "Последние 7 дней", - "From me" : "От меня" + "Add share link from Files" : "Добавить ссылку для общего доступа из Файлов", + "Choose a file to add as attachment" : "Выбрать файл для вложения", + "Choose a file to share as a link" : "Выберите файл для публикации ссылкой", + "Delegated access to {userId}" : "Делегированный доступ к {userId}", + "Revoked access for {userId}" : "Отменён доступ для {userId}" }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/ru.json b/l10n/ru.json index 6f852fa7c6..7c7a4f12a2 100644 --- a/l10n/ru.json +++ b/l10n/ru.json @@ -12,6 +12,10 @@ "Mail" : "Почта", "You are reaching your mailbox quota limit for {account_email}" : "Вы достигли предела квоты почтового ящика для {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "В настоящее время вы используете {percentage} места в вашем почтовом ящике. Пожалуйста, освободите место, удалив ненужные электронные письма.", + "{account_email} has been delegated to you" : "{account_email} было делегировано вам", + "{user} delegated {account} to you" : "{user} делегирован {account} вам", + "{account_email} is no longer delegated to you" : "{account_email} вам больше не делегируется", + "{user} revoked delegation for {account}" : "{user} отозвал делегирование для {account}", "Mail Application" : "Почтовое приложение", "Mails" : "Почты", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Адрес электронной почты отправителя: %1$s отсутствует в адресной книге, но имя отправителя: %2$s есть в адресной книге со следующим адресом электронной почты: %3$s", @@ -20,11 +24,15 @@ "Sent date is in the future" : "Дата отправки еще в будущем", "Mail server marked this message as phishing attempt" : "Почтовый сервер пометил это сообщение как попытку фишинга", "Some addresses in this message are not matching the link text" : "Некоторые адреса в этом сообщении не соответствуют тексту ссылки.", + "Reply-To email: %1$s is different from sender email: %2$s" : "Reply-To email: %1$s отличается от отправителя email: %2$s", "Mail connection performance" : "Производительность почтового соединения", + "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Обнаружен медленный почтовый сервис (%1$s) попытка подключения к нескольким аккаунтам занимала в среднем %2$s секунды на аккаунт", + "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Обнаружена медленная почтовая служба (%1$s) попытка выполнить операцию списка почтовых ящиков на нескольких учетных записях заняла в среднем %2$s секунд на один аккаунт", "Mail Transport configuration" : "Конфигурация почтового транспорта", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "Для параметра app.mail.transport не задано значение SMTP. Такая конфигурация может вызвать проблемы с современными средствами защиты электронной почты, такими как SPF и DKIM, поскольку письма отправляются непосредственно с веб-сервера, который часто не настроен должным образом для этой цели. Для решения этой проблемы мы прекратили поддержку почтового транспорта. Удалите app.mail.transport из вашей конфигурации, чтобы использовать SMTP-транспорт и скрыть это сообщение. Для обеспечения доставки электронной почты требуется правильно настроенный SMTP.", "Mail account parameters, aliases and preferences" : "Параметры почтовой учетной записи, псевдонимы и настройки", "💌 A mail app for Nextcloud" : "💌 Почта для Nextcloud", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Почтовое приложение для Nextcloud**\n\n- **🚀 Интеграция с другими Nextcloud приложениями!** Сейчас Contacts, Calendar & Files – будет больше.\n- **📥 Множество почтовых аккаунтов!** Личный и корпоративный аккаунт? Нет проблем, и унифицированная папка Входящие. Подключите любой аккаунт IMAP.\n- **🔒 Отправка & получение зашифрованной почты!** Использууйте отличное [Mailvelope](https://mailvelope.com) расширение браузера.\n- **🙈 Мы не изобретаем велосипед!** Основывается на библиотеках [Horde](https://www.horde.org).\n- **📬 Хотите разместить свой собственный почтовый сервер?** Нам не нужно переопределять это, поскольку вы могли бы настроить [Mail-in-a-Box](https://mailinabox.email)!\n\n## Этический рейтинг ИИ\n\n### Приоритетные входящие\n\nПоложительный:\n* Программное обеспечение для обучения и вывода этой модели имеет открытый исходный код.\n* Модель создается и обучается локально на основе собственных данных пользователя.\n* Данные обучения доступны пользователю, что позволяет проверить или исправить погрешность или оптимизировать производительность и использование CO2.\n\n### Сводки тем (опционально)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг зависит от установленного бэкэнда обработки текста. См. [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для подробностей.\n\nУзнайте больше о рейтинге этического ИИ Nextcloud [в нашем блоге](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Истекло время сеанса работы, страница будет обновлена.", "Drafts are saved in:" : "Папка черновиков:", "Sent messages are saved in:" : "Папка отправленных писем:", @@ -87,7 +95,8 @@ "SMTP Port" : "Порт SMTP", "SMTP User" : "Имя пользователя SMTP", "SMTP Password" : "Пароль SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Для настройки учётной записи Google необходимо включить двухфакторную аутентификацию и создать пароль приложения.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google требует аутентификацию OAuth. Если ваш администратор Nextcloud не настроил Google OAuth, вместо этого вы можете использовать пароль приложения Google.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft требует аутентификации OAuth. Попросите администратора Nextcloud настроить Microsoft OAuth в настройках администратора.", "Account settings" : "Параметры учётной записи", "Aliases" : "Псевдонимы", "Alias to S/MIME certificate mapping" : "Сопоставление псевдонима с сертификатом S/MIME", @@ -111,13 +120,13 @@ "Mail server" : "Почтовый сервер", "Sieve server" : "Сервер Sieve", "Folder search" : "Поиск по папкам", + "Email address" : "Адрес эл. почты", "Update alias" : "Обновить псевдоним", "Rename alias" : "Переименовать псевдоним", "Show update alias form" : "Показать обновления для формы alias", "Delete alias" : "Удалить псевдоним", "Go back" : "Вернуться назад", "Change name" : "Изменить имя", - "Email address" : "Адрес эл. почты", "Add alias" : "Добавить псевдоним", "Create alias" : "Создать псевдоним", "Cancel" : "Отмена", @@ -130,6 +139,7 @@ "Mail settings" : "Параметры эл. почты", "General" : "Основные", "Set as default mail app" : "Установлено в качестве почтового приложения по умолчанию", + "{email} (delegated)" : "{email} (делегировано)", "Add mail account" : "Добавить учётную запись", "Appearance" : "Внешний вид", "Show all messages in thread" : "Показывать все сообщения в теме", @@ -144,13 +154,16 @@ "Sorting" : "Сортировка", "Newest first" : "Самый новый первый", "Oldest first" : "Самый старый первый", + "New text block" : "Новый текстовый блок", + "Title of the text block" : "Заголовок текстового блока", + "Content of the text block" : "Содержимое текстового блока", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Аватары из Gravatar и значки", "Reply position" : "Позиция для ответа", "Top" : "Верх", "Bottom" : "Низ", "Text blocks" : "Текстовые блоки", "Reusable pieces of text that can be inserted in messages" : "Многократно используемые фрагменты текста, которые можно вставлять в сообщения", - "New text block" : "Новый текстовый блок", "Shared with me" : "Поделились с вами", "Privacy" : "Конфиденциальность", "Data collection" : "Сбор данных", @@ -181,9 +194,6 @@ "About" : "О себе", "Acknowledgements" : "Благодарности", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Это приложение включает в себя CKEditor, редактор с открытым исходным кодом. Авторские права © Авторы CKEditor. Лицензия GPLv2.", - "Title of the text block" : "Заголовок текстового блока", - "Content of the text block" : "Содержимое текстового блока", - "Ok" : "OK", "Automatically create tentative appointments in calendar" : "Автоматическое создание предварительных встреч в календаре", "No certificate" : "Нет сертификата", "Certificate updated" : "Сертификат обновлен", @@ -227,7 +237,6 @@ "Disable formatting" : "Выключить форматирование", "Upload attachment" : "Загрузить файл с ПК", "Add attachment from Files" : "Из приложения «Файлы»", - "Add share link from Files" : "Добавить ссылку для общего доступа из Файлов", "Smart picker" : "Умный подборщик", "Request a read receipt" : "Запросить подтверждение прочтения", "Sign message with S/MIME" : "Подписать сообщение с помощью S/MIME", @@ -239,13 +248,28 @@ "Monday morning" : "В понедельник утром", "Custom date and time" : "Настроить дату и время", "Enter a date" : "Выберите дату", - "Choose" : "Выберите", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Размер этого вложения превышает установленный лимит, который равен {size}. Опубликуйте этот файл с доступом по ссылке и перешлите ссылку, вместо отправки файла.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов.","Размер этих вложений превышает установленный лимит, который равен {size}. Опубликуйте эти файлы с доступом по ссылке и перешлите ссылку, вместо отправки файлов."], - "Choose a file to add as attachment" : "Выбрать файл для вложения", - "Choose a file to share as a link" : "Выберите файл для публикации ссылкой", + "Choose a file" : "Выберите файл", "_{count} attachment_::_{count} attachments_" : ["{count} вложение","{count} вложения","{count} вложений","{count} вложений"], "Untitled message" : "Сообщение без названия", + "Expand composer" : "Развернуть композер", + "Close composer" : "Закрыть композер", "Confirm" : "Подтвердить", + "Delegate access" : "Делегировать доступ", + "Revoke" : "Отозвать", + "{userId} will no longer be able to act on your behalf" : "{userId} больше не сможет действовать от вашего имени", + "Could not fetch delegates" : "Не удалось получить делегатов", + "Delegated access to {displayName}" : "Делегирован доступ к {displayName}", + "Could not delegate access" : "Не удалось делегировать доступ", + "Revoked access for {displayName}" : "Отменён доступ для {displayName}", + "Could not revoke delegation" : "Не удалось отозвать делегирование", + "Delegation" : " Делегирование", + "Allow users to send, receive, and delete mail on your behalf" : "Разрешить пользователям отправлять, получать и удалять почту от вашего имени", + "Revoke access" : "Отозвать доступ", + "Add delegate" : "Добавить делегата", + "Select a user" : "Выберите пользователя", + "They will be able to send, receive, and delete mail on your behalf" : "Они смогут отправлять, получать и удалять почту от вашего имени", + "Revoke access?" : "Отозвать доступ?", "Tag: {name} deleted" : "Тег: {name} удален", "An error occurred, unable to delete the tag." : "Произошла ошибка, не удалось удалить тег.", "The tag will be deleted from all messages." : "Тег будет удален из всех сообщений.", @@ -253,8 +277,10 @@ "Rich text" : "Текст с форматированием", "No messages in this folder" : "В этой папке нет сообщений", "No messages" : "Нет ни одного сообщения", + "Choose" : "Выберите", "Blind copy recipients only" : "Только получатели скрытой копии", "No subject" : "Без темы", + "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} Черновик:{markup-end} {subject}", "Later today – {timeLocale}" : "Позднее сегодня – {timeLocale}", "Set reminder for later today" : "Установить напоминание позднее сегодня", "Tomorrow – {timeLocale}" : "Завтра – {timeLocale}", @@ -263,9 +289,18 @@ "Set reminder for this weekend" : "Установить напоминание на эти выходные", "Next week – {timeLocale}" : "Следующая неделя – {timeLocale}", "Set reminder for next week" : "Установить напоминание на следующую неделю", + "Could not apply tag, configured tag not found" : "Не удалось применить тег, настроенный тег не найден", + "Could not move thread, destination mailbox not found" : "Не удалось переместить тему, почтовый ящик назначения не найден", + "Could not execute quick action" : "Не удалось выполнить быстрое действие", + "Quick action executed" : "Быстрое действие выполнено", "No trash folder configured" : "Папка корзины не настроена", "Could not delete message" : "Не удалось удалить сообщение", "Could not archive message" : "Не удалось заархивировать письмо", + "Thread was snoozed" : "Тред был отложен", + "Could not snooze thread" : "Не удалось отложить тред", + "Thread was unsnoozed" : "Тред не был отложен", + "Could not unsnooze thread" : "Не удалось отменить отмену треда", + "This summary was AI generated" : "Это резюме было создано ИИ", "Encrypted message" : "Зашифрованное сообщение", "This message is unread" : "Это сообщение не прочитано", "Unfavorite" : "Убрать из избранного", @@ -276,18 +311,23 @@ "Mark not spam" : "Пометить как не являющееся спамом", "Mark as spam" : "Пометить как спам", "Edit tags" : "Изменить метки", + "Snooze" : "Отложить", + "Unsnooze" : "Отменить откладывание", "Move thread" : "Переместить ветку", "Move Message" : "Переместить сообщение", "Archive thread" : "Архивировать тему", "Archive message" : "Архивное сообщение", - "Delete thread" : "Удалить ветку", - "Delete message" : "Удалить сообщение", "More actions" : "Больше действий", "Back" : "Назад", "Set custom snooze" : "Установить пользовательский режим повтора", "Edit as new message" : "Редактировать как новое сообщение", + "Reply with meeting" : "Ответить при встрече", "Create task" : "Создать задачу", "Download message" : "Скачать письмо", + "Delete thread" : "Удалить ветку", + "Delete message" : "Удалить сообщение", + "Back to all actions" : "Вернуться ко всем действиям", + "Manage quick actions" : "Управление быстрыми действиями", "Load more" : "Загрузить больше", "_Mark {number} read_::_Mark {number} read_" : ["Отметить {number} сообщение как прочитанное","Отметить {number} сообщения как прочитанные","Отметить {number} сообщений как прочитанные","Отметить {number} сообщения как прочитанные"], "_Mark {number} unread_::_Mark {number} unread_" : ["Отметить {number} как непрочитанное","Отметить {number} как непрочитанные","Отметить {number} как непрочитанные","Отметить {number} как непрочитанные"], @@ -296,17 +336,24 @@ "_Unfavorite {number}_::_Unfavorite {number}_" : ["Убрать {number} сообщение из избранного","Убрать из избранного {number} сообщения","Убрать из избранного {number} сообщений","Убрать из избранного {number} сообщения"], "_Favorite {number}_::_Favorite {number}_" : ["Добавить {number} сообщение в избранное","Добавить {number} сообщения в избранное","Добавить {number} сообщений в избранное","Добавить {number} сообщения в избранное"], "_Unselect {number}_::_Unselect {number}_" : ["Отменить выбор {number} сообщения","Отменить выбор {number} сообщений","Отменить выбор {number} сообщений","Отменить выбор {number} сообщений"], + "_Mark {number} as spam_::_Mark {number} as spam_" : ["Отметить {number} как спам","Отметить {number} как спам","Отметить {number} как спам","Отметить {number} как спам"], + "_Mark {number} as not spam_::_Mark {number} as not spam_" : ["Отметить {number} как не спам","Отметить {number} как не спам","Отметить {number} как не спам","Отметить {number} как не спам"], + "_Edit tags for {number}_::_Edit tags for {number}_" : ["Редактировать теги для {number}","Редактировать теги для {number}","Редактировать теги для {number}","Редактировать теги для {number}"], "_Move {number} thread_::_Move {number} threads_" : ["Переместить {number} ветку","Переместить {number} ветки","Переместить {number} веток","Переместить {number} веток"], "_Forward {number} as attachment_::_Forward {number} as attachment_" : ["Переслать {number} сообщение как вложение","Переслать {number} сообщения как вложение","Переслать {number} сообщений как вложение","Переслать {number} сообщения как вложение"], "Mark as unread" : "Пометить непрочитанным", "Mark as read" : "Пометить прочитанным", + "Mark as unimportant" : "Отметить как неважное", "Mark as important" : "Отметить как важное", "Report this bug" : "Отправить отчёт об этой ошибке", + "This description was generated by AI." : "Это описание было создано AI.", "Event created" : "Событие создано", "Could not create event" : "Не удалось создать событие", "Create event" : "Создать событие", + "Title" : "Название", "All day" : "Весь день", "Attendees" : "Участники", + "You can only invite attendees if your account has an email address set" : "Вы можете приглашать участников только в том случае, если в вашем аккаунте указан адрес электронной почты", "Select calendar" : "Выбрать календарь", "Description" : "Описание", "Create" : "Создать", @@ -329,6 +376,8 @@ "Decline" : "Отклонить", "Tentatively accept" : "Предварительно принять", "More options" : "Дополнительные параметры", + "This message has an attached invitation but the invitation dates are in the past" : "К этому сообщению прикреплено приглашение, но даты приглашения уже в прошлом", + "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "К этому сообщению прикреплено приглашение, но оно не содержит участника, соответствующего любому настроенному адресу почтового аккаунта", "Could not remove internal address {sender}" : "Не удалось удалить внутренний адрес {sender}", "Could not add internal address {address}" : "Не удалось добавить внутренний адрес {address}", "individual" : "личный", @@ -337,6 +386,7 @@ "Add internal address" : "Добавить внутренний адрес", "Add internal email or domain" : "Добавить внутреннюю электронную почту или домен", "Itinerary for {type} is not supported yet" : "Маршруты типа {type} пока не поддерживаются", + "To archive a message please configure an archive folder in account settings" : "Чтобы заархивировать сообщение, настройте папку архива в настройках аккаунта", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Вам не разрешено перемещать это сообщение в архивную папку и/или удалять это сообщение из текущей папки.", "Your IMAP server does not support storing the seen/unseen state." : "Ваш IMAP-сервер не поддерживает сохранение состояния просмотра/непросмотра.", "Could not mark message as seen/unseen" : "Не удалось пометить сообщение как (не)прочтенное", @@ -346,13 +396,23 @@ "Last week" : "Прошлая неделя", "Last month" : "Последний месяц", "Could not open folder" : "Не удалось открыть папку", + "Loading messages …" : "Загрузка сообщений ...", + "Indexing your messages. This can take a bit longer for larger folders." : "Индексирование ваших сообщений. Для больших папок это может занять немного больше времени.", "Choose target folder" : "Выбор папки назначения", "No more submailboxes in here" : "Вложенные папки отсутствуют", + "Messages will automatically be marked as important using AI. The system learns from which messages you interact with or mark as important. In the beginning you might have to manually change the importance to teach it, but it will improve over time" : "Сообщения будут автоматически помечены как важные с помощью ИИ. Система узнает, с какими сообщениями вы взаимодействуете или отмечаете их как важные. Вначале вам, возможно, придется вручную изменить важность, чтобы научить её, но со временем она улучшится.", + "Messages that you marked as favorite will be shown at the top of folders. You can disable this behavior in the app settings" : "Сообщения, отмеченные вами как избранные, будут отображаться вверху папок. Вы можете отключить это поведение в настройках приложения", + "AI identifies messages sent by you that likely require a reply but did not receive one after a couple of days and shows them here" : "ИИ определяет отправленные вами сообщения, которые, вероятно, требуют ответа, но не получили его через пару дней, и показывает их здесь", "Favorites" : "Избранные", + "Favorites info" : "Информация об избранном", + "Load more favorites" : "Загрузить больше избранных", "Follow up" : "Следовать за", "Follow up info" : "Последующая информация", + "Load more follow ups" : "Загрузить больше отслеживаемых", "Important info" : "Важная информация", + "Load more important messages" : "Загрузить больше важных сообщений", "Other" : "Прочие", + "Load more other messages" : "Загрузить больше других сообщений", "Could not send mdn" : "Не удалось отправить уведомление о прочтении", "The sender of this message has asked to be notified when you read this message." : "Отправитель этого сообщения запросил подтверждение прочтения.", "Notify the sender" : "Уведомить отправителя", @@ -361,7 +421,9 @@ "Could not snooze message" : "Не удалось отложить сообщение.", "Message was unsnoozed" : "Сообщение было снято с отложенного просмотра", "Could not unsnooze message" : "Не удалось отложить сообщение.", + "Direct link copied to clipboard" : "Прямая ссылка, скопированная в буфер обмена", "Forward" : "Переслать", + "Link copied" : "Ссылка скопирована", "Move message" : "Переместить сообщение", "Translate" : "Перевести", "Forward message as attachment" : "Переслать сообщение вложением", @@ -369,8 +431,10 @@ "Print message" : "Распечатать сообщение", "Create mail filter" : "Создать почтовый фильтр", "Download thread data for debugging" : "Скачать ветку для отладки", + "Suggested replies are using AI" : "Предлагаемые ответы используют ИИ", "Message body" : "Тело сообщения", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Предупреждение: Подпись S/MIME этого сообщения не проверена. Отправитель может выдавать себя за кого-то другого!", + "AI info" : "Информация об ИИ", "Unnamed" : "Без имени", "Embedded message" : "Внедрённое сообщение", "Attachment saved to Files" : "Вложение сохранено в Файлах", @@ -399,13 +463,19 @@ "Moving" : "Выполняется перемещение", "Moving thread" : "Перемещение ветки", "Moving message" : "Сообщение перемещается", + "This account cannot connect" : "Этот аккаунт не может подключиться", + "Connection failed. Please verify your information and try again" : "Соединение не удалось. Проверьте вашу информацию и повторите попытку", + "Change password" : "Сменить пароль", "Used quota: {quota}% ({limit})" : "Использовано квоты: {quota}% ({limit})", "Used quota: {quota}%" : "Использовано квоты: {quota}%", + "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Невозможно создать почтовый ящик. Вероятно, имя содержит недопустимые символы. Попробуйте другое имя.", "Remove account" : "Удалить учётную запись", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Учётная запись {email} и сохранённые данные будут удалены из Nextcloud, но сохранятся на исходном почтовом сервере.", "Remove {email}" : "Удалить {email}", + "could not delete account" : "не удалось удалить аккаунт", "Provisioned account is disabled" : "Предоставленный аккаунт отключен", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Пожалуйста, войдите в систему, используя пароль, чтобы активировать эту учетную запись. Текущий сеанс использует аутентификацию без пароля, например. Единый вход или WebAuthn.", + "Delegate account" : "Делегировать аккаунт", "Show only subscribed folders" : "Показывать только папки из подписки", "Add folder" : "Добавить папку", "Folder name" : "Имя папки", @@ -425,6 +495,7 @@ "Delete folder" : "Удалить папку", "Delete folder {name}" : "Удалить папку «{name}»", "An error occurred, unable to rename the mailbox." : "Ошибка переименования папки.", + "Please wait 10 minutes before repairing again" : "Пожалуйста, подождите 10 минут перед повторным восстановлением", "Mark all as read" : "Пометить всё как прочитанное", "Add subfolder" : "Добавить подпапку", "Rename" : "Переименовать", @@ -436,6 +507,7 @@ "Sync in background" : "Фоновая синхронизация", "Delete all messages" : "Удалить все сообщения", "Outbox" : "Исходящие", + "Translate this message to {language}" : "Перевести это сообщение на {language}", "New message" : "Создать сообщение", "Edit message" : "Редактировать сообщение", "Draft" : "Черновик", @@ -445,15 +517,22 @@ "Failed to save draft" : "Не удалось сохранить черновик", "attachment" : "вложение", "attached" : "прикрепить", + "No \"sent\" folder configured. Please pick one in the account settings." : "Папка «Отправленные» не настроена. Пожалуйста, выберите одну в настройках аккаунта.", "You are trying to send to many recipients in To and/or Cc. Consider using Bcc to hide recipient addresses." : "Вы пытаетесь отправить письмо очень большому количеству получателей, указанных в полях «Кому» или «Коп». Для сокрытия адреса эл. почты получателя, укажите его в поле «Скр. коп.».", "Your message has no subject. Do you want to send it anyway?" : "У вашего сообщения нет темы. Вы все равно хотите его отправить?", "You mentioned an attachment. Did you forget to add it?" : "Вы упомянули вложение. Вы забыли добавить его?", "Message discarded" : "Внесение изменений отменено", "Could not discard message" : "Не удалось отменить внесение изменений", + "Maximize composer" : "Развернуть композер", + "Show recipient details" : "Показать сведения о получателе", + "Hide recipient details" : "Скрыть сведения о получателе", + "Minimize composer" : "Свернуть композер", "Error sending your message" : "Ошибка при отправке вашего сообщения", "Retry" : "Попробовать снова", "Warning sending your message" : "Предупреждать перед отправкой сообщения", "Send anyway" : "Всё равно отправить", + "Welcome to {productName} Mail" : "Добро пожаловать в {productName} почту", + "Start writing a message by clicking below or select an existing message to display its contents" : "Начните писать сообщение, нажав кнопку ниже, или выберите существующее сообщение, чтобы отобразить его содержимое", "Autoresponder off" : "Автоответчик выключен", "Autoresponder on" : "Автоответчик включен", "Autoresponder follows system settings" : "Автоответчик следует системным настройкам", @@ -471,6 +550,8 @@ "Mail server error" : "Ошибка почтового сервера", "Message could not be sent" : "Сообщение не может быть отправлено", "Message deleted" : "Сообщение удалено", + "Copy to \"Sent\" Folder" : "Скопировать в папку «Отправленные»", + "Copy to Sent Folder" : "Скопировать в папку Отправленные", "Phishing email" : "Фишинговое письмо", "This email might be a phishing attempt" : "Это письмо может быть попыткой фишинга", "Hide suspicious links" : "Скрыть подозрительные ссылки", @@ -482,6 +563,7 @@ "Add to Contact" : "Добавить в контакты", "New Contact" : "Новый контакт", "Copy to clipboard" : "Копировать в буфер", + "Contact name …" : "Имя контакта  ...", "Add" : "Добавить", "Show less" : "Показывать меньше", "Show more" : "Показывать больше", @@ -492,17 +574,23 @@ "Search parameters" : "Параметры поиска", "Search subject" : "Тема поиска", "Body" : "Тело", + "Search body" : "Искать тело", "Date" : "Дата", "Pick a start date" : "Выберите дату начала", "Pick an end date" : "Выберите дату окончания", "Select senders" : "Выберите отправителей", "Select recipients" : "Выберите получателей", + "Select CC recipients" : "Выбрать получателей CC", + "Select BCC recipients" : "Выбрать получателей BCC", "Tags" : "Метки", "Select tags" : "Выбор меток", "Marked as" : "Отмечено как", "Has attachments" : "Имеет вложения", "Mentions me" : "Упоминания меня", "Has attachment" : "Имеет вложение", + "To me" : "Мне", + "Enable mail body search" : "Включить поиск по телу письма", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve — мощный язык для написания фильтров для вашего почтового ящика. Вы можете управлять сценариями фильтрации в Mail, если ваша служба электронной почты поддерживает это. Sieve также необходим для использования автоответчика и фильтров.", "Enable sieve filter" : "Включить Sieve фильтр", "Sieve host" : "Хост Sieve", "Sieve security" : "Безопасность Sieve", @@ -523,6 +611,7 @@ "Message source" : "Исходный текст сообщения", "An error occurred, unable to rename the tag." : "Не удалось переименовать метку.", "Edit name or color" : "Отредактируйте название или цвет", + "Saving new tag name …" : "Сохранение нового имени тега …", "Delete tag" : "Удалить метку", "Set tag" : "Установить тег", "Unset tag" : "Неустановленный тег", @@ -532,6 +621,7 @@ "An error occurred, unable to create the tag." : "Не удалось создать метку.", "Add default tags" : "Добавить метки по умолчанию", "Add tag" : "Добавить метку", + "Saving tag …" : "Сохранение тега …", "Task created" : "Задача создана", "Could not create task" : "Не удалось создать задачу", "No calendars with task list support" : "Нет календарей с поддержкой списка задач", @@ -558,6 +648,10 @@ "Reply to sender only" : "Ответить только отправителю", "Mark as unfavorite" : "Отметить как неизбранное", "Mark as favorite" : "Отметить как избранное", + "From:" : "С:", + "To:" : "По:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Отписаться по ссылке", "Unsubscribing will stop all messages from the mailing list {sender}" : "Отказ от подписки приведет к остановке всех сообщений из списка рассылки {sender}", "Send unsubscribe email" : "Отправить письмо об отказе от подписки", @@ -566,6 +660,7 @@ "Thread summary" : "Резюме темы", "Go to latest message" : "Перейти к последнему сообщению", "Newest message" : "Самое свежее сообщение", + "This summary is AI generated and may contain mistakes." : "Это резюме создано ИИ и может содержать ошибки.", "Please select languages to translate to and from" : "Выберите языки с которых и на которые переводить", "The message could not be translated" : "Сообщение не может быть переведено", "Translation copied to clipboard" : "Перевод скопирован в буфер обмена", @@ -576,6 +671,7 @@ "Target language to translate into" : "Целевой язык для перевода на", "Translate to" : "Перевести на", "Translating" : "Идет перевод", + "This translation is generated using AI and may contain inaccuracies" : "Этот перевод создан с использованием ИИ и может содержать неточности", "Copy translated text" : "Копировать переведенный текст", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Отключите сохранение корзины, оставив поле пустым или установив для него значение 0. Будут обрабатываться только письма, удаленные после включения сохранения корзины.", "Could not remove trusted sender {sender}" : "Не удалось удалить доверенного отправителя {sender}", @@ -590,28 +686,44 @@ "{trainNr} from {depStation} to {arrStation}" : "{trainNr} из {depStation} в {arrStation}", "Train from {depStation} to {arrStation}" : "Поезд из {depStation} в {arrStation}", "Train" : "Поезд", + "Mark message as" : "Отметить сообщение как", "Add flag" : "Добавить флаг", "Move into folder" : "Переместить в папку", "Stop" : "Стоп", "Delete action" : "Действие удаления", + "Answered" : "Отвечено", "Deleted" : "Удалено", + "Flagged" : "Помечено", + "Seen" : "Просмотрено", + "Enter flag" : "Введите флаг", + "Stop ends all processing" : "Стоп завершает всю обработку", "Sender" : "Отправитель", "Recipient" : "Получатель", "Create a new mail filter" : "Создать новый почтовый фильтр", + "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Выберите заголовки, которые вы хотите использовать для создания фильтра. На следующем шаге вы сможете уточнить условия фильтра и указать действия, которые следует выполнять над сообщениями, которые соответствуют вашим критериям.", "Delete filter" : "Удалить фильтр", + "Delete mail filter {filterName}?" : "Удалить почтовый фильтр {filterName}?", "Are you sure to delete the mail filter?" : "Вы уверены, что хотите удалить почтовый фильтр?", "New filter" : "Новый фильтр", "Filter saved" : "Фильтр сохранён", "Could not save filter" : "Не удалось сохранить фильтр", "Filter deleted" : "Фильтр удалён", "Could not delete filter" : "Не удалось удалить фильтр", + "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Возьмите под контроль хаос в своей электронной почте. Фильтры помогут вам расставить приоритеты и устранить беспорядок.", + "Hang tight while the filters load" : "Держитесь крепче, пока загружаются фильтры", "Filter is active" : "Фильтр активен", "Filter is not active" : "Фильтр не активен", + "If all the conditions are met, the actions will be performed" : "Если все условия соблюдены, действия будут выполнены", + "If any of the conditions are met, the actions will be performed" : "При выполнении любого из условий действия будут выполнены", "Help" : "Справка", "contains" : "содержит", + "A substring match. The field matches if the provided value is contained within it. For example, \"report\" would match \"port\"." : "Совпадение подстроки. Поле соответствует, если в нем содержится указанное значение. Например, \"report\" будет соответствовать \"port\".", "matches" : "соответствует", + "A pattern match using wildcards. The \"*\" symbol represents any number of characters (including none), while \"?\" represents exactly one character. For example, \"*report*\" would match \"Business report 2024\"." : "Соответствие шаблону с использованием подстановочных знаков. Символ \"*\" представляет любое количество символов (в том числе ни одного), а символ \"?\" представляет ровно один символ. Например, \"*report*\" будет соответствовать \"Business report 2024\".", "Enter subject" : "Введите тему", "Enter sender" : "Введите отправителя", + "Enter recipient" : "Введите получателя", + "is exactly" : "это точно", "Conditions" : "Условие", "Add condition" : "Добавить условие", "Actions" : "Действия", @@ -620,7 +732,22 @@ "Enable filter" : "Включить фильтр", "Tag" : "Метка", "delete" : "удалить", + "Edit quick action" : "Изменить быстрое действие", + "Add quick action" : "Добавить быстрое действие", + "Quick action deleted" : "Быстрое действие удалено", + "Failed to delete quick action" : "Не удалось удалить быстрое действие", + "Failed to update quick action" : "Не удалось обновить быстрое действие", + "Failed to update step in quick action" : "Не удалось обновить шаг в быстром действии", + "Quick action updated" : "Быстрое действие обновлено", + "Failed to create quick action" : "Не удалось создать быстрое действие", + "Failed to add steps to quick action" : "Не удалось добавить шаги к быстрому действию", + "Quick action created" : "Быстрое действие создано", + "Failed to delete action step" : "Не удалось удалить шаг действия", + "No quick actions yet." : "Быстрых действий пока нет.", "Edit" : "Редактирование", + "Quick action name" : "Название быстрого действия", + "Do the following actions" : "Выполнить следующие действия", + "Add another action" : "Добавить ещё одно действие", "Successfully updated config for \"{domain}\"" : "Конфигурация домена «{domain}» обновлена", "Error saving config" : "Не удалось сохранить параметры конфигурации", "Saved config for \"{domain}\"" : "Конфигурация домена «{domain}» сохранена", @@ -660,8 +787,13 @@ "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail позволяет пользователям получать доступ к своей электронной почте через IMAP. По соображениям безопасности этот доступ возможен только при подключении OAuth 2.0 или учетных записях Google, которые используют двухфакторную аутентификацию и пароли приложений.", "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам необходимо зарегистрировать новый идентификатор клиента для «веб-приложения» в консоли Google Cloud. Добавьте URL-адрес {url} в качестве URI авторизованного перенаправления.", "Microsoft integration" : "Интеграция с Microsoft", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft требует, чтобы вы получали доступ к своей электронной почте через IMAP с использованием аутентификации OAuth 2.0. Для этого вам необходимо зарегистрировать приложение с помощью Microsoft Entra ID, ранее известного как Microsoft Azure Active Directory.", "Redirect URI" : "Адрес перенаправления", + "For more details, please click here to open our documentation." : "Для получения более подробной информации нажмите здесь, чтобы открыть нашу документацию.", + "User Interface Preference Defaults" : "Настройки пользовательского интерфейса по умолчанию", + "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Эти настройки используются для предварительной настройки предпочтений пользовательского интерфейса. Пользователь может их переопределить в настройках почты", "Message View Mode" : "Режим отображения сообщения", + "Show only the selected message" : "Показать только выбранное сообщение", "Successfully set up anti spam email addresses" : "Успешно установлены анти-спам адреса электронной почты", "Error saving anti spam email addresses" : "Ошибка при сохранении анти-спам адресов электронной почты", "Successfully deleted anti spam reporting email" : "Успешно удалён анти-спам адрес отчёта электронной почты", @@ -716,6 +848,7 @@ "Certificate imported successfully" : "Сертификат успешно импортирован", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Не удалось импортировать сертификат. Убедитесь, что закрытый ключ соответствует сертификату и не защищен парольной фразой.", "Failed to import the certificate" : "Не удалось импортировать сертификат", + "Import S/MIME certificate" : "Импортировать сертификат S/MIME", "S/MIME certificates" : "Сертификаты S/MIME", "Certificate name" : "Название сертификата", "E-mail address" : "Адрес эл. почты", @@ -723,7 +856,6 @@ "Delete certificate" : "Удалить сертификат", "No certificate imported yet" : "Сертификат еще не импортирован", "Import certificate" : "Импортный сертификат", - "Import S/MIME certificate" : "Импортировать сертификат S/MIME", "PKCS #12 Certificate" : "PKCS #12 Сертификат", "PEM Certificate" : "PEM Сертификат", "Certificate" : "Сертификат", @@ -746,6 +878,7 @@ "Edit text block" : "Редактировать текстовый блок", "Shares" : "Приглашения", "Search for users or groups" : "Поиск пользователей или групп", + "Choose a text block to insert at the cursor" : "Выберите текстовый блок для вставки под курсором", "Insert" : "Вставить", "Insert text block" : "Вставить блок текста", "Account connected" : "Аккаунт подключен", @@ -769,6 +902,7 @@ "Discard changes" : "Отменить изменения", "Discard unsaved changes" : "Отменить несохранённые изменения", "Keep editing message" : "Продолжайте редактировать сообщение", + "(All or part of this reply was generated by AI)" : "(Весь или часть этого ответа была создана ИИ)", "Attachments were not copied. Please add them manually." : "Вложения не скопированы, добавьте их вручную.", "Could not create snooze mailbox" : "Не удалось создать почтовый ящик для отсрочки", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Извините, сообщение не удалось загрузить. Возможно, черновик больше не существует. Пожалуйста, обновите страницу и повторите попытку.", @@ -783,11 +917,10 @@ "Could not load the desired message" : "Ошибка получения указанного сообщения", "Could not load the message" : "Ошибка получения этого сообщения", "Error loading message" : "Ошибка загрузки сообщения", - "Determine importance using machine learning" : "Определите важность с помощью машинного обучения", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Письма будут автоматически отмечаться важными на основе анализа ваших действий и присвоения метки «Важно». В первое время, возможно, потребуется обучить систему присвоением и удалением меток вручную.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Здесь будут отображаться отправленные вами сообщения, требующие ответа, но не полученные в течение нескольких дней.", - "Mark all messages of this folder as read" : "Пометить все сообщения в этой папке как прочитанные", - "Last 7 days" : "Последние 7 дней", - "From me" : "От меня" + "Add share link from Files" : "Добавить ссылку для общего доступа из Файлов", + "Choose a file to add as attachment" : "Выбрать файл для вложения", + "Choose a file to share as a link" : "Выберите файл для публикации ссылкой", + "Delegated access to {userId}" : "Делегированный доступ к {userId}", + "Revoked access for {userId}" : "Отменён доступ для {userId}" },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" } \ No newline at end of file diff --git a/l10n/sc.js b/l10n/sc.js index 729e1240ba..ed1993631d 100644 --- a/l10n/sc.js +++ b/l10n/sc.js @@ -45,12 +45,12 @@ OC.L10N.register( "Preferred writing mode for new messages and replies." : "Modalidade de iscritura preferida pro is messàgios noos e de is respostas.", "Default folders" : "Cartellas predefinidas", "Mail server" : "Serbidore de posta", + "Email address" : "Indiritzu de posta eletrònica", "Update alias" : "Agiorna identidade", "Show update alias form" : "Mustra s'agiornamentu de sa forma de su identidade", "Delete alias" : "Cantzella identidade", "Go back" : "Bae in segus", "Change name" : "Càmbia nùmene", - "Email address" : "Indiritzu de posta eletrònica", "Add alias" : "Agiunghe identidade", "Create alias" : "Crea identidade", "Cancel" : "Annulla", @@ -61,6 +61,7 @@ OC.L10N.register( "Sorting" : "Assentende", "Newest first" : "In antis is prus reghentes", "Oldest first" : "In antis is prus betzos", + "Ok" : "AB", "Shared with me" : "Cumpartzidos cun megus", "Security" : "Seguresa", "Compose new message" : "Iscrie messàgiu nou", @@ -74,7 +75,6 @@ OC.L10N.register( "Send" : "Imbia", "Refresh" : "Agiorna", "About" : "In contu de", - "Ok" : "AB", "Message {id} could not be found" : "Su messàgiu {id} no s'est pòdidu agatare", "From" : "Dae", "Select account" : "Seletziona contu", @@ -91,14 +91,14 @@ OC.L10N.register( "Request a read receipt" : "Pedi una cunfirma de letura", "Encrypt message with Mailvelope" : "Tzifra messàgiu cun Mailvelope", "Enter a date" : "Inserta una data", - "Choose" : "Sèbera", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Is alligongiados propassant sa mannària permìtida de {size}. Cumpartzi is archìvios cun unu ligòngiu.","Is alligongiados propassant sa mannària permìtida de {size}. Cumpartzi is archìvios cun unu ligòngiu."], - "Choose a file to add as attachment" : "Sèbera un'archìviu de agiùnghere comente alligongiadu", - "Choose a file to share as a link" : "Sèbera un'archìviu de cumpartzire comente ligòngiu", + "Choose a file" : "Sèbera un'archìviu", "Confirm" : "Cunfirma", + "Revoke" : "Rèvoca", "Plain text" : "Testu simple", "Rich text" : "Testu formatadu", "No messages" : "Perunu messàgiu", + "Choose" : "Sèbera", "Blind copy recipients only" : "Isceti persones destinatàrias in còpia cuada", "Set reminder for later today" : "Cunfigura un'apuntu pro luego", "Set reminder for tomorrow" : "Cunfigura un'apuntu pro cras", @@ -113,12 +113,12 @@ OC.L10N.register( "Mark as spam" : "Marca comente spam", "Edit tags" : "Modìfica etichetas", "Move thread" : "Tràmuda dibata", - "Delete thread" : "Cantzella dibata", - "Delete message" : "Cantzella messàgiu", "More actions" : "Àteras atziones", "Back" : "In segus", "Edit as new message" : "Modìfica comente messàgiu nou", "Create task" : "Crea faina", + "Delete thread" : "Cantzella dibata", + "Delete message" : "Cantzella messàgiu", "Load more" : "Càrriga àteru", "_Mark {number} read_::_Mark {number} read_" : ["Marca {number} lèghidos","Marca {number} lèghidos"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marca {number} no lèghidos","Marca {number} non lèghidos"], @@ -132,6 +132,7 @@ OC.L10N.register( "Report this bug" : "Signala cust'errore", "Could not create event" : "No at fatu a creare s'eventu", "Create event" : "Crea eventu", + "Title" : "Tìtulu", "All day" : "Totu sa die", "Attendees" : "Partetzipantes", "Description" : "Descritzione", @@ -160,6 +161,7 @@ OC.L10N.register( "Notify the sender" : "Notificare a sa persone chi imbiat", "You sent a read confirmation to the sender of this message." : "As imbiadu una cunfirma de letura a sa persone chi at imbiadu custu messàgiu.", "Forward" : "Torra a imbiare", + "Link copied" : "Ligòngiu copiadu", "Move message" : "Tràmuda messàgiu", "Translate" : "Borta", "View source" : "Visualiza sa fonte", @@ -186,6 +188,7 @@ OC.L10N.register( "Moving" : "Tramudende", "Moving thread" : "Tramudende sa dibata", "Moving message" : "Tramudende su messàgiu", + "Change password" : "Càmbia crae", "Remove account" : "Boga·nche contu", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Su contu pro {email} e is datos de posta eletrònica allogados in sa memòria temporànea s'ant a bogare dae Nextcloud, ma no dae su frunidore de posta eletrònica tuo.", "Remove {email}" : "Boga•nche {email}", @@ -241,6 +244,7 @@ OC.L10N.register( "Not found" : "No agatadu", "Unsubscribe" : "Disiscrie·ti", "Reply to sender only" : "Responde isceti a chi at imbiadu", + "From:" : "Dae:", "Could not remove trusted sender {sender}" : "No at fatu a nche bogare s'imbiante afidàbile {sender}", "No senders are trusted at the moment." : "No b'at imbiantes afidàbiles in custu momentu.", "Untitled event" : "Eventu chene tìtulu", @@ -336,7 +340,7 @@ OC.L10N.register( "Could not load the desired message" : "No at fatu a carrigare su messàgiu disigiadu", "Could not load the message" : "No at fatu a carrigare su messàgiu", "Error loading message" : "Errore in su carrigamentu de su messàgiu", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Is messàgios s'ant a marcare in manera automàtica comente importantes in sa base de is messàgios cun is chi as tènnidu interatziones o chi si sunt marcados comente importantes. Fortzis a su cumintzu as a dèpere cambiare a manu s'importàntzia pro ddu imparare a su sistema, ma at a megiorare in su tempus.", - "Last 7 days" : "Ùrtimas 7 dies" + "Choose a file to add as attachment" : "Sèbera un'archìviu de agiùnghere comente alligongiadu", + "Choose a file to share as a link" : "Sèbera un'archìviu de cumpartzire comente ligòngiu" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/sc.json b/l10n/sc.json index 4cc4cccf06..ef863e207b 100644 --- a/l10n/sc.json +++ b/l10n/sc.json @@ -43,12 +43,12 @@ "Preferred writing mode for new messages and replies." : "Modalidade de iscritura preferida pro is messàgios noos e de is respostas.", "Default folders" : "Cartellas predefinidas", "Mail server" : "Serbidore de posta", + "Email address" : "Indiritzu de posta eletrònica", "Update alias" : "Agiorna identidade", "Show update alias form" : "Mustra s'agiornamentu de sa forma de su identidade", "Delete alias" : "Cantzella identidade", "Go back" : "Bae in segus", "Change name" : "Càmbia nùmene", - "Email address" : "Indiritzu de posta eletrònica", "Add alias" : "Agiunghe identidade", "Create alias" : "Crea identidade", "Cancel" : "Annulla", @@ -59,6 +59,7 @@ "Sorting" : "Assentende", "Newest first" : "In antis is prus reghentes", "Oldest first" : "In antis is prus betzos", + "Ok" : "AB", "Shared with me" : "Cumpartzidos cun megus", "Security" : "Seguresa", "Compose new message" : "Iscrie messàgiu nou", @@ -72,7 +73,6 @@ "Send" : "Imbia", "Refresh" : "Agiorna", "About" : "In contu de", - "Ok" : "AB", "Message {id} could not be found" : "Su messàgiu {id} no s'est pòdidu agatare", "From" : "Dae", "Select account" : "Seletziona contu", @@ -89,14 +89,14 @@ "Request a read receipt" : "Pedi una cunfirma de letura", "Encrypt message with Mailvelope" : "Tzifra messàgiu cun Mailvelope", "Enter a date" : "Inserta una data", - "Choose" : "Sèbera", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Is alligongiados propassant sa mannària permìtida de {size}. Cumpartzi is archìvios cun unu ligòngiu.","Is alligongiados propassant sa mannària permìtida de {size}. Cumpartzi is archìvios cun unu ligòngiu."], - "Choose a file to add as attachment" : "Sèbera un'archìviu de agiùnghere comente alligongiadu", - "Choose a file to share as a link" : "Sèbera un'archìviu de cumpartzire comente ligòngiu", + "Choose a file" : "Sèbera un'archìviu", "Confirm" : "Cunfirma", + "Revoke" : "Rèvoca", "Plain text" : "Testu simple", "Rich text" : "Testu formatadu", "No messages" : "Perunu messàgiu", + "Choose" : "Sèbera", "Blind copy recipients only" : "Isceti persones destinatàrias in còpia cuada", "Set reminder for later today" : "Cunfigura un'apuntu pro luego", "Set reminder for tomorrow" : "Cunfigura un'apuntu pro cras", @@ -111,12 +111,12 @@ "Mark as spam" : "Marca comente spam", "Edit tags" : "Modìfica etichetas", "Move thread" : "Tràmuda dibata", - "Delete thread" : "Cantzella dibata", - "Delete message" : "Cantzella messàgiu", "More actions" : "Àteras atziones", "Back" : "In segus", "Edit as new message" : "Modìfica comente messàgiu nou", "Create task" : "Crea faina", + "Delete thread" : "Cantzella dibata", + "Delete message" : "Cantzella messàgiu", "Load more" : "Càrriga àteru", "_Mark {number} read_::_Mark {number} read_" : ["Marca {number} lèghidos","Marca {number} lèghidos"], "_Mark {number} unread_::_Mark {number} unread_" : ["Marca {number} no lèghidos","Marca {number} non lèghidos"], @@ -130,6 +130,7 @@ "Report this bug" : "Signala cust'errore", "Could not create event" : "No at fatu a creare s'eventu", "Create event" : "Crea eventu", + "Title" : "Tìtulu", "All day" : "Totu sa die", "Attendees" : "Partetzipantes", "Description" : "Descritzione", @@ -158,6 +159,7 @@ "Notify the sender" : "Notificare a sa persone chi imbiat", "You sent a read confirmation to the sender of this message." : "As imbiadu una cunfirma de letura a sa persone chi at imbiadu custu messàgiu.", "Forward" : "Torra a imbiare", + "Link copied" : "Ligòngiu copiadu", "Move message" : "Tràmuda messàgiu", "Translate" : "Borta", "View source" : "Visualiza sa fonte", @@ -184,6 +186,7 @@ "Moving" : "Tramudende", "Moving thread" : "Tramudende sa dibata", "Moving message" : "Tramudende su messàgiu", + "Change password" : "Càmbia crae", "Remove account" : "Boga·nche contu", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Su contu pro {email} e is datos de posta eletrònica allogados in sa memòria temporànea s'ant a bogare dae Nextcloud, ma no dae su frunidore de posta eletrònica tuo.", "Remove {email}" : "Boga•nche {email}", @@ -239,6 +242,7 @@ "Not found" : "No agatadu", "Unsubscribe" : "Disiscrie·ti", "Reply to sender only" : "Responde isceti a chi at imbiadu", + "From:" : "Dae:", "Could not remove trusted sender {sender}" : "No at fatu a nche bogare s'imbiante afidàbile {sender}", "No senders are trusted at the moment." : "No b'at imbiantes afidàbiles in custu momentu.", "Untitled event" : "Eventu chene tìtulu", @@ -334,7 +338,7 @@ "Could not load the desired message" : "No at fatu a carrigare su messàgiu disigiadu", "Could not load the message" : "No at fatu a carrigare su messàgiu", "Error loading message" : "Errore in su carrigamentu de su messàgiu", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Is messàgios s'ant a marcare in manera automàtica comente importantes in sa base de is messàgios cun is chi as tènnidu interatziones o chi si sunt marcados comente importantes. Fortzis a su cumintzu as a dèpere cambiare a manu s'importàntzia pro ddu imparare a su sistema, ma at a megiorare in su tempus.", - "Last 7 days" : "Ùrtimas 7 dies" + "Choose a file to add as attachment" : "Sèbera un'archìviu de agiùnghere comente alligongiadu", + "Choose a file to share as a link" : "Sèbera un'archìviu de cumpartzire comente ligòngiu" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/si.js b/l10n/si.js index bec9311c16..622f19a61b 100644 --- a/l10n/si.js +++ b/l10n/si.js @@ -15,11 +15,12 @@ OC.L10N.register( "General" : "සමාන්‍යය", "Privacy" : "පෞද්ගලිකත්වය", "Archive" : "සංරක්ෂණය", + "Delete" : "Delete", "Search" : "සොයන්න", "Send" : "යවන්න", "About" : "පිළිබඳ", - "Choose" : "තෝරන්න", "Confirm" : "තහවුරු කරන්න", + "Choose" : "තෝරන්න", "Favorite" : "ප්‍රියතම", "Read" : "කියවීම", "Back" : "ආපසු", @@ -33,7 +34,9 @@ OC.L10N.register( "Today" : "අද", "Favorites" : "ප්‍රියතම", "Other" : "වෙනත්", + "Link copied" : "සබැඳිය පිටපත් කළා", "Translate" : "පරිවර්තනය", + "Change password" : "මුරපදය වෙනස් කරන්න", "Remove account" : "ගිණුම ඉවත් කරන්න", "Folder name" : "බහාලුමේ නම", "Mark all as read" : "සියල්ල කියවූ ලෙස සලකුණු කරන්න", diff --git a/l10n/si.json b/l10n/si.json index 6dcd3dfeb3..78d59e1f93 100644 --- a/l10n/si.json +++ b/l10n/si.json @@ -13,11 +13,12 @@ "General" : "සමාන්‍යය", "Privacy" : "පෞද්ගලිකත්වය", "Archive" : "සංරක්ෂණය", + "Delete" : "Delete", "Search" : "සොයන්න", "Send" : "යවන්න", "About" : "පිළිබඳ", - "Choose" : "තෝරන්න", "Confirm" : "තහවුරු කරන්න", + "Choose" : "තෝරන්න", "Favorite" : "ප්‍රියතම", "Read" : "කියවීම", "Back" : "ආපසු", @@ -31,7 +32,9 @@ "Today" : "අද", "Favorites" : "ප්‍රියතම", "Other" : "වෙනත්", + "Link copied" : "සබැඳිය පිටපත් කළා", "Translate" : "පරිවර්තනය", + "Change password" : "මුරපදය වෙනස් කරන්න", "Remove account" : "ගිණුම ඉවත් කරන්න", "Folder name" : "බහාලුමේ නම", "Mark all as read" : "සියල්ල කියවූ ලෙස සලකුණු කරන්න", diff --git a/l10n/sk.js b/l10n/sk.js index 5d12deb512..0666eb9567 100644 --- a/l10n/sk.js +++ b/l10n/sk.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "SMTP číslo portu", "SMTP User" : "SMTP používateľ", "SMTP Password" : "SMTP heslo", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Pre správne fungovanie účtu Google s touto aplikáciou musíte povoliť dvojfaktorové overovanie pre Google a vygenerovať heslo pre aplikáciu.", "Account settings" : "Nastavenia účtu", "Aliases" : "Aliasy", "Alias to S/MIME certificate mapping" : "Alias pre mapovanie certifikátu S/MIME", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "Poštový server", "Sieve server" : "Sieve server", "Folder search" : "Vyhľadávanie v priečinku", + "Email address" : "E-mailová adresa", "Update alias" : "Aktualizovať alternatívny názov", "Rename alias" : "Premenovať alias", "Show update alias form" : "Zobraziť formulár pre aktualizáciu alternatívneho názvu", "Delete alias" : "Vymazať alternatívny názov", "Go back" : "Ísť späť", "Change name" : "Zmeniť názov", - "Email address" : "E-mailová adresa", "Add alias" : "Pridať alias", "Create alias" : "Vytvoriť alternatívny názov", "Cancel" : "Zrušiť", @@ -150,13 +149,16 @@ OC.L10N.register( "Sorting" : "Triedenie", "Newest first" : "Najnovšie prvé", "Oldest first" : "Najstaršie prvé", + "New text block" : "Nový textový blok", + "Title of the text block" : "Názov textového bloku", + "Content of the text block" : "Obsah textového bloku", + "Ok" : "Neutrálne", "Avatars from Gravatar and favicons" : "Avatary z Gravataru a favikony", "Reply position" : "Pozícia odpovede", "Top" : "Vrch", "Bottom" : "Spodok", "Text blocks" : "Bloky textu", "Reusable pieces of text that can be inserted in messages" : "Opakovane použiteľné textové úseky, ktoré môžu byť vložené do správ", - "New text block" : "Nový textový blok", "Shared with me" : "Zdieľané so mnou", "Privacy" : "Súkromie", "Data collection" : "Zber údajov", @@ -187,9 +189,6 @@ OC.L10N.register( "About" : "O vás", "Acknowledgements" : "Poďakovanie", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Táto aplikácia obsahuje CKEditor, editor s otvoreným zdrojovým kódom. Autorské práva © prispievatelia CKEditoru. Licencované pod GPLv2.", - "Title of the text block" : "Názov textového bloku", - "Content of the text block" : "Obsah textového bloku", - "Ok" : "Neutrálne", "Automatically create tentative appointments in calendar" : "Automaticky vytvárať predbežné schôdzky v kalendári", "No certificate" : "Žiadny certifikát", "Certificate updated" : "Certifikát aktualizovaný", @@ -233,7 +232,6 @@ OC.L10N.register( "Disable formatting" : "Vypnúť formátovanie", "Upload attachment" : "Nahrať prílohu", "Add attachment from Files" : "Pridať prílohu zo Súborov", - "Add share link from Files" : "Pridať zdieľaný odkaz zo Súborov", "Smart picker" : "Inteligentný výber", "Request a read receipt" : "Vyžiadať si potvrdenie o prečítaní", "Sign message with S/MIME" : "Podpísať správu pomocou S/MIME", @@ -245,15 +243,14 @@ OC.L10N.register( "Monday morning" : "Pondelok ráno", "Custom date and time" : "Vlastný dátum a čas", "Enter a date" : "Zadajte dátum", - "Choose" : "Vybrať", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Príloha prekračuje povolenú veľlkosť {size}. Daný súbor môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu."], - "Choose a file to add as attachment" : "Vyberte súbor, ktorý chcete pridať ako prílohu.", - "Choose a file to share as a link" : "Vyberte súbor, ktorý chcete sprístupniť pomocou odkazu", + "Choose a file" : "Vyberte súbor", "_{count} attachment_::_{count} attachments_" : ["{count} príloha","{count} prílohy","{count} príloh","{count} prílohy"], "Untitled message" : "Nepomenovaná správa", "Expand composer" : "Zobraziť editor správ", "Close composer" : "Zatvoriť editor správ", "Confirm" : "Potvrdiť", + "Revoke" : "Odvolať", "Tag: {name} deleted" : "Štítok: {name} odstránený", "An error occurred, unable to delete the tag." : "Vyskytla sa chyba, nie je možné odstrániť štítok.", "The tag will be deleted from all messages." : "Štítok bude odstránený zo všetkých správ.", @@ -261,6 +258,7 @@ OC.L10N.register( "Rich text" : "Formátovaný text", "No messages in this folder" : "Žiadne správy v tomto priečinku!", "No messages" : "Žiadne správy", + "Choose" : "Vybrať", "Blind copy recipients only" : "Iba príjemcovia slepej kópie", "No subject" : "Žiadny predmet", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Koncept:{markup-end} {subject}", @@ -300,8 +298,6 @@ OC.L10N.register( "Move Message" : "Presunúť Správu", "Archive thread" : "Archivovať vlákno", "Archive message" : "Archivovať správu", - "Delete thread" : "Vymazať konverzáciu", - "Delete message" : "Zmazať správu", "More actions" : "Viac akcií", "Back" : "Späť", "Set custom snooze" : "Nastaviť vlastné odloženie", @@ -309,6 +305,8 @@ OC.L10N.register( "Reply with meeting" : "Odpovedať na stretnutie", "Create task" : "Vytvoriť úlohu", "Download message" : "Stiahnuť správu", + "Delete thread" : "Vymazať konverzáciu", + "Delete message" : "Zmazať správu", "Back to all actions" : "Späť na všetky akcie", "Manage quick actions" : "Spravovať rýchle akcie", "Load more" : "Načítať viac", @@ -332,6 +330,7 @@ OC.L10N.register( "Event created" : "Udalosť bola vytvorená", "Could not create event" : "Udalosť sa nepodarilo vytvoriť", "Create event" : "Vytvoriť udalosť", + "Title" : "Názov", "All day" : "Celý deň", "Attendees" : "Účastníci", "You can only invite attendees if your account has an email address set" : "Môžete pozvať účastníkov iba vtedy, ak má váš účet nastavenú e-mailovú adresu.", @@ -402,7 +401,9 @@ OC.L10N.register( "Could not snooze message" : "Správu nebolo možné stíšiť.", "Message was unsnoozed" : "Bolo zrušené odloženie správy", "Could not unsnooze message" : "Odloženú správu nebolo možné obnoviť.", + "Direct link copied to clipboard" : "Priamy odkaz bol skopírovný do schránky", "Forward" : "Preposlať", + "Link copied" : "Odkaz bol skopírovaný", "Move message" : "Presunúť správu", "Translate" : "Preložiť", "Forward message as attachment" : "Preposlať správu ako prílohu", @@ -444,6 +445,7 @@ OC.L10N.register( "Moving message" : "Presúvam správu", "This account cannot connect" : "Tento účet sa nemôže pripojiť", "Connection failed. Please verify your information and try again" : "Pripojenie zlyhalo. Skontrolujte svoje informácie a skúste to znova", + "Change password" : "Zmeniť heslo", "Used quota: {quota}% ({limit})" : "Použitá kvóta: {quota}% ({limit})", "Used quota: {quota}%" : "Použitá kvóta: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nepodarilo sa vytvoriť poštovú schránku. Názov pravdepodobne obsahuje neplatné znaky. Skúste iný názov.", @@ -624,6 +626,8 @@ OC.L10N.register( "Reply to sender only" : "Odpovedať iba odosielateľovi", "Mark as unfavorite" : "Zrušiť označenie ako obľúbené", "Mark as favorite" : "Označiť ako obľúbené", + "From:" : "Z:", + "To:" : "Do: ", "Unsubscribe via link" : "Odhlásiť sa cez odkaz", "Unsubscribing will stop all messages from the mailing list {sender}" : "Odhlásenie zastaví všetky správy z mailing listu {sender}.", "Send unsubscribe email" : "Poslať e-mail pre odlásenie.", @@ -820,6 +824,7 @@ OC.L10N.register( "Certificate imported successfully" : "Certifikát úspešne importovaný", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nepodarilo sa importovať certifikát. Uistite sa, prosím, že súkromný kľúč zodpovedá certifikátu a nie je chránený heslom.", "Failed to import the certificate" : "Nepodarilo sa importovať certifikát.", + "Import S/MIME certificate" : "Importovať S/MIME certifikát", "S/MIME certificates" : "S/MIME certifikáty", "Certificate name" : "Meno certifikátu", "E-mail address" : "E-mailová adresa", @@ -827,7 +832,6 @@ OC.L10N.register( "Delete certificate" : "Vymazať certifikát", "No certificate imported yet" : "Žiadny certifikát zatiaľ nebol importovaný.", "Import certificate" : "Importovať certifikát", - "Import S/MIME certificate" : "Importovať S/MIME certifikát", "PKCS #12 Certificate" : "PKCS #12 Certifikát", "PEM Certificate" : "PEM Certifikát", "Certificate" : "Certifikát", @@ -889,11 +893,8 @@ OC.L10N.register( "Could not load the desired message" : "Nepodarilo sa načítať požadovanú správu", "Could not load the message" : "Správu sa nepodarilo sa načítať", "Error loading message" : "Chyba načítavania správy", - "Determine importance using machine learning" : "Určte dôležitosť pomocou strojového učenia", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Správy sa automaticky označia ako dôležité v závislosti na tom, ktorými správami ste sa zaoberali alebo označili ako dôležité. Na začiatku bude potrebné meniť dôležitosť ručne a systém tak postupne učiť, ale časom sa to zlepší.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Tu sa zobrazia vami odoslané správy, ktoré vyžadujú odpoveď, no po niekoľkých dňoch ju nedostali.", - "Mark all messages of this folder as read" : "Všetky správy v tomto priečinku označiť ako prečítané", - "Last 7 days" : "Posledných 7 dní", - "From me" : "Odo mňa" + "Add share link from Files" : "Pridať zdieľaný odkaz zo Súborov", + "Choose a file to add as attachment" : "Vyberte súbor, ktorý chcete pridať ako prílohu.", + "Choose a file to share as a link" : "Vyberte súbor, ktorý chcete sprístupniť pomocou odkazu" }, "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/sk.json b/l10n/sk.json index deb45f093b..0c8c668adb 100644 --- a/l10n/sk.json +++ b/l10n/sk.json @@ -91,7 +91,6 @@ "SMTP Port" : "SMTP číslo portu", "SMTP User" : "SMTP používateľ", "SMTP Password" : "SMTP heslo", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Pre správne fungovanie účtu Google s touto aplikáciou musíte povoliť dvojfaktorové overovanie pre Google a vygenerovať heslo pre aplikáciu.", "Account settings" : "Nastavenia účtu", "Aliases" : "Aliasy", "Alias to S/MIME certificate mapping" : "Alias pre mapovanie certifikátu S/MIME", @@ -115,13 +114,13 @@ "Mail server" : "Poštový server", "Sieve server" : "Sieve server", "Folder search" : "Vyhľadávanie v priečinku", + "Email address" : "E-mailová adresa", "Update alias" : "Aktualizovať alternatívny názov", "Rename alias" : "Premenovať alias", "Show update alias form" : "Zobraziť formulár pre aktualizáciu alternatívneho názvu", "Delete alias" : "Vymazať alternatívny názov", "Go back" : "Ísť späť", "Change name" : "Zmeniť názov", - "Email address" : "E-mailová adresa", "Add alias" : "Pridať alias", "Create alias" : "Vytvoriť alternatívny názov", "Cancel" : "Zrušiť", @@ -148,13 +147,16 @@ "Sorting" : "Triedenie", "Newest first" : "Najnovšie prvé", "Oldest first" : "Najstaršie prvé", + "New text block" : "Nový textový blok", + "Title of the text block" : "Názov textového bloku", + "Content of the text block" : "Obsah textového bloku", + "Ok" : "Neutrálne", "Avatars from Gravatar and favicons" : "Avatary z Gravataru a favikony", "Reply position" : "Pozícia odpovede", "Top" : "Vrch", "Bottom" : "Spodok", "Text blocks" : "Bloky textu", "Reusable pieces of text that can be inserted in messages" : "Opakovane použiteľné textové úseky, ktoré môžu byť vložené do správ", - "New text block" : "Nový textový blok", "Shared with me" : "Zdieľané so mnou", "Privacy" : "Súkromie", "Data collection" : "Zber údajov", @@ -185,9 +187,6 @@ "About" : "O vás", "Acknowledgements" : "Poďakovanie", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Táto aplikácia obsahuje CKEditor, editor s otvoreným zdrojovým kódom. Autorské práva © prispievatelia CKEditoru. Licencované pod GPLv2.", - "Title of the text block" : "Názov textového bloku", - "Content of the text block" : "Obsah textového bloku", - "Ok" : "Neutrálne", "Automatically create tentative appointments in calendar" : "Automaticky vytvárať predbežné schôdzky v kalendári", "No certificate" : "Žiadny certifikát", "Certificate updated" : "Certifikát aktualizovaný", @@ -231,7 +230,6 @@ "Disable formatting" : "Vypnúť formátovanie", "Upload attachment" : "Nahrať prílohu", "Add attachment from Files" : "Pridať prílohu zo Súborov", - "Add share link from Files" : "Pridať zdieľaný odkaz zo Súborov", "Smart picker" : "Inteligentný výber", "Request a read receipt" : "Vyžiadať si potvrdenie o prečítaní", "Sign message with S/MIME" : "Podpísať správu pomocou S/MIME", @@ -243,15 +241,14 @@ "Monday morning" : "Pondelok ráno", "Custom date and time" : "Vlastný dátum a čas", "Enter a date" : "Zadajte dátum", - "Choose" : "Vybrať", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Príloha prekračuje povolenú veľlkosť {size}. Daný súbor môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu.","Prílohy prekračujú povolenú veľkosť príloh {size}. Dané súbory môžete sprístupniť pomocou odkazu."], - "Choose a file to add as attachment" : "Vyberte súbor, ktorý chcete pridať ako prílohu.", - "Choose a file to share as a link" : "Vyberte súbor, ktorý chcete sprístupniť pomocou odkazu", + "Choose a file" : "Vyberte súbor", "_{count} attachment_::_{count} attachments_" : ["{count} príloha","{count} prílohy","{count} príloh","{count} prílohy"], "Untitled message" : "Nepomenovaná správa", "Expand composer" : "Zobraziť editor správ", "Close composer" : "Zatvoriť editor správ", "Confirm" : "Potvrdiť", + "Revoke" : "Odvolať", "Tag: {name} deleted" : "Štítok: {name} odstránený", "An error occurred, unable to delete the tag." : "Vyskytla sa chyba, nie je možné odstrániť štítok.", "The tag will be deleted from all messages." : "Štítok bude odstránený zo všetkých správ.", @@ -259,6 +256,7 @@ "Rich text" : "Formátovaný text", "No messages in this folder" : "Žiadne správy v tomto priečinku!", "No messages" : "Žiadne správy", + "Choose" : "Vybrať", "Blind copy recipients only" : "Iba príjemcovia slepej kópie", "No subject" : "Žiadny predmet", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Koncept:{markup-end} {subject}", @@ -298,8 +296,6 @@ "Move Message" : "Presunúť Správu", "Archive thread" : "Archivovať vlákno", "Archive message" : "Archivovať správu", - "Delete thread" : "Vymazať konverzáciu", - "Delete message" : "Zmazať správu", "More actions" : "Viac akcií", "Back" : "Späť", "Set custom snooze" : "Nastaviť vlastné odloženie", @@ -307,6 +303,8 @@ "Reply with meeting" : "Odpovedať na stretnutie", "Create task" : "Vytvoriť úlohu", "Download message" : "Stiahnuť správu", + "Delete thread" : "Vymazať konverzáciu", + "Delete message" : "Zmazať správu", "Back to all actions" : "Späť na všetky akcie", "Manage quick actions" : "Spravovať rýchle akcie", "Load more" : "Načítať viac", @@ -330,6 +328,7 @@ "Event created" : "Udalosť bola vytvorená", "Could not create event" : "Udalosť sa nepodarilo vytvoriť", "Create event" : "Vytvoriť udalosť", + "Title" : "Názov", "All day" : "Celý deň", "Attendees" : "Účastníci", "You can only invite attendees if your account has an email address set" : "Môžete pozvať účastníkov iba vtedy, ak má váš účet nastavenú e-mailovú adresu.", @@ -400,7 +399,9 @@ "Could not snooze message" : "Správu nebolo možné stíšiť.", "Message was unsnoozed" : "Bolo zrušené odloženie správy", "Could not unsnooze message" : "Odloženú správu nebolo možné obnoviť.", + "Direct link copied to clipboard" : "Priamy odkaz bol skopírovný do schránky", "Forward" : "Preposlať", + "Link copied" : "Odkaz bol skopírovaný", "Move message" : "Presunúť správu", "Translate" : "Preložiť", "Forward message as attachment" : "Preposlať správu ako prílohu", @@ -442,6 +443,7 @@ "Moving message" : "Presúvam správu", "This account cannot connect" : "Tento účet sa nemôže pripojiť", "Connection failed. Please verify your information and try again" : "Pripojenie zlyhalo. Skontrolujte svoje informácie a skúste to znova", + "Change password" : "Zmeniť heslo", "Used quota: {quota}% ({limit})" : "Použitá kvóta: {quota}% ({limit})", "Used quota: {quota}%" : "Použitá kvóta: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Nepodarilo sa vytvoriť poštovú schránku. Názov pravdepodobne obsahuje neplatné znaky. Skúste iný názov.", @@ -622,6 +624,8 @@ "Reply to sender only" : "Odpovedať iba odosielateľovi", "Mark as unfavorite" : "Zrušiť označenie ako obľúbené", "Mark as favorite" : "Označiť ako obľúbené", + "From:" : "Z:", + "To:" : "Do: ", "Unsubscribe via link" : "Odhlásiť sa cez odkaz", "Unsubscribing will stop all messages from the mailing list {sender}" : "Odhlásenie zastaví všetky správy z mailing listu {sender}.", "Send unsubscribe email" : "Poslať e-mail pre odlásenie.", @@ -818,6 +822,7 @@ "Certificate imported successfully" : "Certifikát úspešne importovaný", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Nepodarilo sa importovať certifikát. Uistite sa, prosím, že súkromný kľúč zodpovedá certifikátu a nie je chránený heslom.", "Failed to import the certificate" : "Nepodarilo sa importovať certifikát.", + "Import S/MIME certificate" : "Importovať S/MIME certifikát", "S/MIME certificates" : "S/MIME certifikáty", "Certificate name" : "Meno certifikátu", "E-mail address" : "E-mailová adresa", @@ -825,7 +830,6 @@ "Delete certificate" : "Vymazať certifikát", "No certificate imported yet" : "Žiadny certifikát zatiaľ nebol importovaný.", "Import certificate" : "Importovať certifikát", - "Import S/MIME certificate" : "Importovať S/MIME certifikát", "PKCS #12 Certificate" : "PKCS #12 Certifikát", "PEM Certificate" : "PEM Certifikát", "Certificate" : "Certifikát", @@ -887,11 +891,8 @@ "Could not load the desired message" : "Nepodarilo sa načítať požadovanú správu", "Could not load the message" : "Správu sa nepodarilo sa načítať", "Error loading message" : "Chyba načítavania správy", - "Determine importance using machine learning" : "Určte dôležitosť pomocou strojového učenia", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Správy sa automaticky označia ako dôležité v závislosti na tom, ktorými správami ste sa zaoberali alebo označili ako dôležité. Na začiatku bude potrebné meniť dôležitosť ručne a systém tak postupne učiť, ale časom sa to zlepší.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Tu sa zobrazia vami odoslané správy, ktoré vyžadujú odpoveď, no po niekoľkých dňoch ju nedostali.", - "Mark all messages of this folder as read" : "Všetky správy v tomto priečinku označiť ako prečítané", - "Last 7 days" : "Posledných 7 dní", - "From me" : "Odo mňa" + "Add share link from Files" : "Pridať zdieľaný odkaz zo Súborov", + "Choose a file to add as attachment" : "Vyberte súbor, ktorý chcete pridať ako prílohu.", + "Choose a file to share as a link" : "Vyberte súbor, ktorý chcete sprístupniť pomocou odkazu" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" } \ No newline at end of file diff --git a/l10n/sl.js b/l10n/sl.js index 493cd54d64..2e230e1dcd 100644 --- a/l10n/sl.js +++ b/l10n/sl.js @@ -64,7 +64,6 @@ OC.L10N.register( "SMTP Port" : "Vrata SMTP", "SMTP User" : "Uporabnik SMTP", "SMTP Password" : "Geslo SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Za pravilno delovanje poštnega računa Google je treba omogočiti dvostopenjsko overitev in določiti geslo za program.", "Account settings" : "Nastavitve računa", "Aliases" : "Vzdevki", "Signature" : "Podpis", @@ -75,13 +74,13 @@ OC.L10N.register( "Calendar settings" : "Nastavitve koledarja", "Filters" : "Filtri", "Mail server" : "Poštni strežnik", + "Email address" : "Elektronski naslov", "Update alias" : "Posodobi vzdevek", "Rename alias" : "Preimenuj vzdevek", "Show update alias form" : "Pokaži obrazec za posodobitev vzdevka", "Delete alias" : "Izbriši vzdevek", "Go back" : "Nazaj", "Change name" : "Spremeni ime", - "Email address" : "Elektronski naslov", "Add alias" : "Dodaj vzdevek", "Create alias" : "Ustvari vzdevek", "Cancel" : "Prekliči", @@ -94,6 +93,7 @@ OC.L10N.register( "Sorting" : "Razvrščanje", "Newest first" : "najprej najnovejše", "Oldest first" : "najprej najstarejše", + "Ok" : "Sprejemljivo", "Shared with me" : "V souporabi z mano", "Privacy" : "Zasebnost", "Security" : "Varnostna opozorila", @@ -109,7 +109,6 @@ OC.L10N.register( "Send" : "Pošlji", "Refresh" : "Osveži", "About" : "O meni", - "Ok" : "Sprejemljivo", "No certificate" : "Ni potrdil", "Certificate updated" : "Potrdilo je posodobljeno", "Could not update certificate" : "Potrdila ni mogoče posodobiti", @@ -154,17 +153,17 @@ OC.L10N.register( "Monday morning" : "Ponedeljek zjutraj", "Custom date and time" : "Datum in čas po meri", "Enter a date" : "Vpis datuma ...", - "Choose" : "Izbor", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Velikost priloge presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave."], - "Choose a file to add as attachment" : "Izbor datoteke za prilogo", - "Choose a file to share as a link" : "Izberite datoteko, ki jo želite dati v skupno rabo kot povezavo", + "Choose a file" : "Izbor datoteke", "_{count} attachment_::_{count} attachments_" : ["{count} priloga","{count} prilogi","{count} priloge","{count} prilog"], "Untitled message" : "Nenaslovljeno sporočilo", "Confirm" : "Potrdi", + "Revoke" : "Prekliči", "Plain text" : "Besedilno", "Rich text" : "Obogateno besedilo", "No messages in this folder" : "V tej mapi ni sporočil", "No messages" : "Ni sporočil", + "Choose" : "Izbor", "Blind copy recipients only" : "Le prejemniki skrite kopije", "No subject" : "Ni zadeve", "Later today – {timeLocale}" : "Danes – {timeLocale}", @@ -190,13 +189,13 @@ OC.L10N.register( "Move thread" : "Premakni nit", "Archive thread" : "Nit arhiva", "Archive message" : "Arhiviraj sporočilo", - "Delete thread" : "Izbriši nit", - "Delete message" : "Izbriši sporočilo", "More actions" : "Več dejanj", "Back" : "Nazaj", "Edit as new message" : "Uredi kot novo sporočilo", "Create task" : "Ustvari nalogo", "Download message" : "Prejmi sporočilo", + "Delete thread" : "Izbriši nit", + "Delete message" : "Izbriši sporočilo", "Load more" : "Naloži več", "_Mark {number} read_::_Mark {number} read_" : ["Označi {number} sporočilo kot prebrano","Označi {number} sporočili kot prebrani","Označi {number} sporočila kot prebrana","Označi {number} sporočil kot prebrana"], "_Mark {number} unread_::_Mark {number} unread_" : ["Označi {number} sporočilo kot neprebrano","Označi {number} sporočili kot neprebrani","Označi {number} sporočila kot neprebrana","Označi {number} sporočil kot neprebrana"], @@ -211,6 +210,7 @@ OC.L10N.register( "Event created" : "Dogodek je ustvarjen", "Could not create event" : "Ni mogoče ustvariti dogodka", "Create event" : "Ustvari dogodek", + "Title" : "Naslov", "All day" : "Ves dan", "Attendees" : "Udeleženci", "Select calendar" : "Izbor koledarja", @@ -252,7 +252,9 @@ OC.L10N.register( "The sender of this message has asked to be notified when you read this message." : "Pošiljatelj želi biti obveščen, ko preberete to sporočilo.", "Notify the sender" : "Obvesti pošiljatelja", "You sent a read confirmation to the sender of this message." : "Poslali ste potrditev pošiljatelju tega sporočila.", + "Direct link copied to clipboard" : "Povezava je kopirana v odložišče.", "Forward" : "Posreduj", + "Link copied" : "Povezava je kopirana", "Move message" : "Premakni sporočilo", "Translate" : "Prevedi", "Forward message as attachment" : "Posreduj sporočilo kot prilogo", @@ -281,6 +283,7 @@ OC.L10N.register( "Moving" : "Premikanje", "Moving thread" : "Poteka premikanje niti ...", "Moving message" : "Poteka premikanje sporočila ...", + "Change password" : "Spremeni geslo", "Remove account" : "Odstrani račun", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Račun za {email} in podatki tega računa v predpomnilniku bodo odstranjeni iz oblaka Nextcloud, ne pa tudi iz poštnega računa pri ponudniku storitve.", "Remove {email}" : "Odstrani {email}", @@ -378,7 +381,7 @@ OC.L10N.register( "Add tag" : "Dodaj oznako", "Task created" : "Naloga je ustvarjena", "Could not create task" : "Naloge ni mogoče ustvariti", - "No calendars with task list support" : "Koledar s podporo seznama nalog", + "No calendars with task list support" : "Ni koledarjev s podporo seznama nalog", "Could not load your message thread" : "Ni mogoče naložiti niti sporočil", "The thread doesn't exist or has been deleted" : "Nit ne obstaja ali pa je bila izbrisana", "Loading thread" : "Poteka nalaganje niti", @@ -391,6 +394,8 @@ OC.L10N.register( "Reply to sender only" : "Odgovori le pošiljatelju", "Mark as unfavorite" : "Odstrani oznako priljubljeno", "Mark as favorite" : "Označi kot priljubljeno", + "From:" : "Od:", + "To:" : "Do:", "The message could not be translated" : "Sporočila ni mogoče prevesti", "Translation copied to clipboard" : "Prevod je kopiran v odložišče", "Translation could not be copied" : "Prevoda ni mogoče kopirati!", @@ -470,12 +475,13 @@ OC.L10N.register( "SMTP" : "SMTP", "Sieve" : "Sieve", "Enable sieve integration" : "Omogoči združevalnik sieve", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "PRogram LDAP pridobi podatke atributa, nastavljenega v imeniku LDAP za povezovanje elektronskih naslovov z vzdevki.", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "Program LDAP pridobi podatke atributa, nastavljenega v imeniku LDAP za povezovanje elektronskih naslovov z vzdevki.", "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Nastavitev določa atribut z več vrednostmi za povezovanje vzdevkov elektronskih naslovov. Za vsako vrednost je ustvarjen vzdevek, tisti vzdevki, ki so vpisani v oblaku Nextcloud, a niso tudi v imeniku LDAP, se izbrišejo.", "Save Config" : "Shrani nastavitve", "Unprovision & Delete Config" : "Odstrani povezavo in izbriši nastavitve", "With the settings above, the app will create account settings in the following way:" : "Z zgornjo nastavitvijo bo ustvarjen račun s podatki:", "Failed to import the certificate" : "Uvažanje potrdila je spodletelo", + "Import S/MIME certificate" : "Uvozi potrdila S/MIME", "S/MIME certificates" : "Potrdila S/MIME", "Certificate name" : "Ime potrdila", "E-mail address" : "Naslov elektronske pošte", @@ -483,7 +489,6 @@ OC.L10N.register( "Delete certificate" : "Izbriši potrdilo", "No certificate imported yet" : "Ni še uvoženih potrdil", "Import certificate" : "Uvozi potrdilo", - "Import S/MIME certificate" : "Uvozi potrdila S/MIME", "PKCS #12 Certificate" : "Potrdilo PKCS #12", "PEM Certificate" : "Potrdilo PEM", "Certificate" : "Potrdilo", @@ -520,8 +525,7 @@ OC.L10N.register( "Could not load the desired message" : "Želenega sporočila ni mogoče naložiti", "Could not load the message" : "Sporočila ni mogoče naložiti", "Error loading message" : "Napaka nalaganja sporočila", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Sporočila bodo samodejno označena kot pomembna na podlagi do sedaj označenih takih sporočil. V začetku bo verjetno treba kakšno označiti še ročno, a se bo sistem s časom izboljševal.", - "Mark all messages of this folder as read" : "Označi vsa sporočila v tej mapi kot prebrana", - "Last 7 days" : "Zadnjih 7 dni" + "Choose a file to add as attachment" : "Izbor datoteke za prilogo", + "Choose a file to share as a link" : "Izberite datoteko, ki jo želite dati v skupno rabo kot povezavo" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/l10n/sl.json b/l10n/sl.json index 97c92d56e9..2d72d2ad87 100644 --- a/l10n/sl.json +++ b/l10n/sl.json @@ -62,7 +62,6 @@ "SMTP Port" : "Vrata SMTP", "SMTP User" : "Uporabnik SMTP", "SMTP Password" : "Geslo SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Za pravilno delovanje poštnega računa Google je treba omogočiti dvostopenjsko overitev in določiti geslo za program.", "Account settings" : "Nastavitve računa", "Aliases" : "Vzdevki", "Signature" : "Podpis", @@ -73,13 +72,13 @@ "Calendar settings" : "Nastavitve koledarja", "Filters" : "Filtri", "Mail server" : "Poštni strežnik", + "Email address" : "Elektronski naslov", "Update alias" : "Posodobi vzdevek", "Rename alias" : "Preimenuj vzdevek", "Show update alias form" : "Pokaži obrazec za posodobitev vzdevka", "Delete alias" : "Izbriši vzdevek", "Go back" : "Nazaj", "Change name" : "Spremeni ime", - "Email address" : "Elektronski naslov", "Add alias" : "Dodaj vzdevek", "Create alias" : "Ustvari vzdevek", "Cancel" : "Prekliči", @@ -92,6 +91,7 @@ "Sorting" : "Razvrščanje", "Newest first" : "najprej najnovejše", "Oldest first" : "najprej najstarejše", + "Ok" : "Sprejemljivo", "Shared with me" : "V souporabi z mano", "Privacy" : "Zasebnost", "Security" : "Varnostna opozorila", @@ -107,7 +107,6 @@ "Send" : "Pošlji", "Refresh" : "Osveži", "About" : "O meni", - "Ok" : "Sprejemljivo", "No certificate" : "Ni potrdil", "Certificate updated" : "Potrdilo je posodobljeno", "Could not update certificate" : "Potrdila ni mogoče posodobiti", @@ -152,17 +151,17 @@ "Monday morning" : "Ponedeljek zjutraj", "Custom date and time" : "Datum in čas po meri", "Enter a date" : "Vpis datuma ...", - "Choose" : "Izbor", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Velikost priloge presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave.","Velikost prilog presega dovoljeno vrednost {size}. Priporočljivo je omogočiti souporabo prek povezave."], - "Choose a file to add as attachment" : "Izbor datoteke za prilogo", - "Choose a file to share as a link" : "Izberite datoteko, ki jo želite dati v skupno rabo kot povezavo", + "Choose a file" : "Izbor datoteke", "_{count} attachment_::_{count} attachments_" : ["{count} priloga","{count} prilogi","{count} priloge","{count} prilog"], "Untitled message" : "Nenaslovljeno sporočilo", "Confirm" : "Potrdi", + "Revoke" : "Prekliči", "Plain text" : "Besedilno", "Rich text" : "Obogateno besedilo", "No messages in this folder" : "V tej mapi ni sporočil", "No messages" : "Ni sporočil", + "Choose" : "Izbor", "Blind copy recipients only" : "Le prejemniki skrite kopije", "No subject" : "Ni zadeve", "Later today – {timeLocale}" : "Danes – {timeLocale}", @@ -188,13 +187,13 @@ "Move thread" : "Premakni nit", "Archive thread" : "Nit arhiva", "Archive message" : "Arhiviraj sporočilo", - "Delete thread" : "Izbriši nit", - "Delete message" : "Izbriši sporočilo", "More actions" : "Več dejanj", "Back" : "Nazaj", "Edit as new message" : "Uredi kot novo sporočilo", "Create task" : "Ustvari nalogo", "Download message" : "Prejmi sporočilo", + "Delete thread" : "Izbriši nit", + "Delete message" : "Izbriši sporočilo", "Load more" : "Naloži več", "_Mark {number} read_::_Mark {number} read_" : ["Označi {number} sporočilo kot prebrano","Označi {number} sporočili kot prebrani","Označi {number} sporočila kot prebrana","Označi {number} sporočil kot prebrana"], "_Mark {number} unread_::_Mark {number} unread_" : ["Označi {number} sporočilo kot neprebrano","Označi {number} sporočili kot neprebrani","Označi {number} sporočila kot neprebrana","Označi {number} sporočil kot neprebrana"], @@ -209,6 +208,7 @@ "Event created" : "Dogodek je ustvarjen", "Could not create event" : "Ni mogoče ustvariti dogodka", "Create event" : "Ustvari dogodek", + "Title" : "Naslov", "All day" : "Ves dan", "Attendees" : "Udeleženci", "Select calendar" : "Izbor koledarja", @@ -250,7 +250,9 @@ "The sender of this message has asked to be notified when you read this message." : "Pošiljatelj želi biti obveščen, ko preberete to sporočilo.", "Notify the sender" : "Obvesti pošiljatelja", "You sent a read confirmation to the sender of this message." : "Poslali ste potrditev pošiljatelju tega sporočila.", + "Direct link copied to clipboard" : "Povezava je kopirana v odložišče.", "Forward" : "Posreduj", + "Link copied" : "Povezava je kopirana", "Move message" : "Premakni sporočilo", "Translate" : "Prevedi", "Forward message as attachment" : "Posreduj sporočilo kot prilogo", @@ -279,6 +281,7 @@ "Moving" : "Premikanje", "Moving thread" : "Poteka premikanje niti ...", "Moving message" : "Poteka premikanje sporočila ...", + "Change password" : "Spremeni geslo", "Remove account" : "Odstrani račun", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Račun za {email} in podatki tega računa v predpomnilniku bodo odstranjeni iz oblaka Nextcloud, ne pa tudi iz poštnega računa pri ponudniku storitve.", "Remove {email}" : "Odstrani {email}", @@ -376,7 +379,7 @@ "Add tag" : "Dodaj oznako", "Task created" : "Naloga je ustvarjena", "Could not create task" : "Naloge ni mogoče ustvariti", - "No calendars with task list support" : "Koledar s podporo seznama nalog", + "No calendars with task list support" : "Ni koledarjev s podporo seznama nalog", "Could not load your message thread" : "Ni mogoče naložiti niti sporočil", "The thread doesn't exist or has been deleted" : "Nit ne obstaja ali pa je bila izbrisana", "Loading thread" : "Poteka nalaganje niti", @@ -389,6 +392,8 @@ "Reply to sender only" : "Odgovori le pošiljatelju", "Mark as unfavorite" : "Odstrani oznako priljubljeno", "Mark as favorite" : "Označi kot priljubljeno", + "From:" : "Od:", + "To:" : "Do:", "The message could not be translated" : "Sporočila ni mogoče prevesti", "Translation copied to clipboard" : "Prevod je kopiran v odložišče", "Translation could not be copied" : "Prevoda ni mogoče kopirati!", @@ -468,12 +473,13 @@ "SMTP" : "SMTP", "Sieve" : "Sieve", "Enable sieve integration" : "Omogoči združevalnik sieve", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "PRogram LDAP pridobi podatke atributa, nastavljenega v imeniku LDAP za povezovanje elektronskih naslovov z vzdevki.", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "Program LDAP pridobi podatke atributa, nastavljenega v imeniku LDAP za povezovanje elektronskih naslovov z vzdevki.", "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Nastavitev določa atribut z več vrednostmi za povezovanje vzdevkov elektronskih naslovov. Za vsako vrednost je ustvarjen vzdevek, tisti vzdevki, ki so vpisani v oblaku Nextcloud, a niso tudi v imeniku LDAP, se izbrišejo.", "Save Config" : "Shrani nastavitve", "Unprovision & Delete Config" : "Odstrani povezavo in izbriši nastavitve", "With the settings above, the app will create account settings in the following way:" : "Z zgornjo nastavitvijo bo ustvarjen račun s podatki:", "Failed to import the certificate" : "Uvažanje potrdila je spodletelo", + "Import S/MIME certificate" : "Uvozi potrdila S/MIME", "S/MIME certificates" : "Potrdila S/MIME", "Certificate name" : "Ime potrdila", "E-mail address" : "Naslov elektronske pošte", @@ -481,7 +487,6 @@ "Delete certificate" : "Izbriši potrdilo", "No certificate imported yet" : "Ni še uvoženih potrdil", "Import certificate" : "Uvozi potrdilo", - "Import S/MIME certificate" : "Uvozi potrdila S/MIME", "PKCS #12 Certificate" : "Potrdilo PKCS #12", "PEM Certificate" : "Potrdilo PEM", "Certificate" : "Potrdilo", @@ -518,8 +523,7 @@ "Could not load the desired message" : "Želenega sporočila ni mogoče naložiti", "Could not load the message" : "Sporočila ni mogoče naložiti", "Error loading message" : "Napaka nalaganja sporočila", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Sporočila bodo samodejno označena kot pomembna na podlagi do sedaj označenih takih sporočil. V začetku bo verjetno treba kakšno označiti še ročno, a se bo sistem s časom izboljševal.", - "Mark all messages of this folder as read" : "Označi vsa sporočila v tej mapi kot prebrana", - "Last 7 days" : "Zadnjih 7 dni" + "Choose a file to add as attachment" : "Izbor datoteke za prilogo", + "Choose a file to share as a link" : "Izberite datoteko, ki jo želite dati v skupno rabo kot povezavo" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" } \ No newline at end of file diff --git a/l10n/sq.js b/l10n/sq.js index f17befe0e0..137eb9d5aa 100644 --- a/l10n/sq.js +++ b/l10n/sq.js @@ -32,6 +32,7 @@ OC.L10N.register( "Add mail account" : "Shto llogarinë e postës elektronike", "Newest first" : "Më i riu i pari", "Oldest first" : "Më i vjetri i pari", + "Ok" : "Në rregull", "Privacy" : "Privatësi", "Security" : "Siguria", "Manage certificates" : "Menaxhoni certifikatat", @@ -45,14 +46,14 @@ OC.L10N.register( "Send" : "Dërgo", "Refresh" : "Rifresko", "About" : "Rreth", - "Ok" : "Në rregull", "Select account" : "Përzgjidhni llogari", "Subject" : "Temë", "Upload attachment" : "Ngarko bashkëngjitje", "Add attachment from Files" : "Shto bashkëlidhje nga Dosjet", - "Choose" : "Zgjidhni", - "Choose a file to add as attachment" : "Zgjidhni një kartelë që të shtohet si bashkëngjitje", + "Choose a file" : "Zgjidh një Skedar", "Confirm" : "Konfirmo", + "Revoke" : "Anulo", + "Choose" : "Zgjidhni", "Unfavorite" : "Jo i/e preferuar", "Favorite" : "I/E Preferuar", "Read" : "Lexoni", @@ -61,6 +62,7 @@ OC.L10N.register( "Back" : "Prapa", "Mark as unread" : "Shënoje si të palexuar", "Mark as read" : "Shënoje si të lexuar", + "Title" : "Titulli", "All day" : "Gjithë ditën", "Attendees" : "Pjesëmarrës", "Description" : "Përshkrim", @@ -74,6 +76,7 @@ OC.L10N.register( "Favorites" : "Favorites", "Other" : "Tjetër", "Forward" : "Përpara", + "Link copied" : "Linku u kopjua", "Translate" : "Përkthe", "Unnamed" : "E paemër", "Choose a folder to store the attachment in" : "Zgjidhni një dosje ku të depozitohet bashkëngjitja", @@ -83,6 +86,7 @@ OC.L10N.register( "Save all to Files" : "Ruaji të gjitha te Dosjet", "The images have been blocked to protect your privacy." : "Imazhet janë bllokuar për të mbrojtur privatësinë tuaj.", "Move" : "Zhvendos", + "Change password" : "Ndrysho fjalëkalimin", "Remove account" : "Fshij llogarinë", "Folder name" : "Emër dosjeje", "Saving" : "Duke u ruajtur!", @@ -107,6 +111,8 @@ OC.L10N.register( "Delete tag" : "Fshi etiketën", "Tag already exists" : "Etiketa ekziston", "Add tag" : "Shto etiketim", + "From:" : "Nga:", + "To:" : "Deri më:", "Deleted" : "E fshirë", "Recipient" : "Marrës", "Help" : "Ndihmë", @@ -139,6 +145,7 @@ OC.L10N.register( "Message sent" : "Mesazhi u dërgua", "Could not load {tag}{name}{endtag}" : "Nuk mund të ngarkohej {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Pati një problem me ngarkimin e {tag}{name}{endtag}", - "Error loading message" : "Gabim në ngarkimin e kartelës" + "Error loading message" : "Gabim në ngarkimin e kartelës", + "Choose a file to add as attachment" : "Zgjidhni një kartelë që të shtohet si bashkëngjitje" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/sq.json b/l10n/sq.json index a02c218f2b..9c3457da8a 100644 --- a/l10n/sq.json +++ b/l10n/sq.json @@ -30,6 +30,7 @@ "Add mail account" : "Shto llogarinë e postës elektronike", "Newest first" : "Më i riu i pari", "Oldest first" : "Më i vjetri i pari", + "Ok" : "Në rregull", "Privacy" : "Privatësi", "Security" : "Siguria", "Manage certificates" : "Menaxhoni certifikatat", @@ -43,14 +44,14 @@ "Send" : "Dërgo", "Refresh" : "Rifresko", "About" : "Rreth", - "Ok" : "Në rregull", "Select account" : "Përzgjidhni llogari", "Subject" : "Temë", "Upload attachment" : "Ngarko bashkëngjitje", "Add attachment from Files" : "Shto bashkëlidhje nga Dosjet", - "Choose" : "Zgjidhni", - "Choose a file to add as attachment" : "Zgjidhni një kartelë që të shtohet si bashkëngjitje", + "Choose a file" : "Zgjidh një Skedar", "Confirm" : "Konfirmo", + "Revoke" : "Anulo", + "Choose" : "Zgjidhni", "Unfavorite" : "Jo i/e preferuar", "Favorite" : "I/E Preferuar", "Read" : "Lexoni", @@ -59,6 +60,7 @@ "Back" : "Prapa", "Mark as unread" : "Shënoje si të palexuar", "Mark as read" : "Shënoje si të lexuar", + "Title" : "Titulli", "All day" : "Gjithë ditën", "Attendees" : "Pjesëmarrës", "Description" : "Përshkrim", @@ -72,6 +74,7 @@ "Favorites" : "Favorites", "Other" : "Tjetër", "Forward" : "Përpara", + "Link copied" : "Linku u kopjua", "Translate" : "Përkthe", "Unnamed" : "E paemër", "Choose a folder to store the attachment in" : "Zgjidhni një dosje ku të depozitohet bashkëngjitja", @@ -81,6 +84,7 @@ "Save all to Files" : "Ruaji të gjitha te Dosjet", "The images have been blocked to protect your privacy." : "Imazhet janë bllokuar për të mbrojtur privatësinë tuaj.", "Move" : "Zhvendos", + "Change password" : "Ndrysho fjalëkalimin", "Remove account" : "Fshij llogarinë", "Folder name" : "Emër dosjeje", "Saving" : "Duke u ruajtur!", @@ -105,6 +109,8 @@ "Delete tag" : "Fshi etiketën", "Tag already exists" : "Etiketa ekziston", "Add tag" : "Shto etiketim", + "From:" : "Nga:", + "To:" : "Deri më:", "Deleted" : "E fshirë", "Recipient" : "Marrës", "Help" : "Ndihmë", @@ -137,6 +143,7 @@ "Message sent" : "Mesazhi u dërgua", "Could not load {tag}{name}{endtag}" : "Nuk mund të ngarkohej {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Pati një problem me ngarkimin e {tag}{name}{endtag}", - "Error loading message" : "Gabim në ngarkimin e kartelës" + "Error loading message" : "Gabim në ngarkimin e kartelës", + "Choose a file to add as attachment" : "Zgjidhni një kartelë që të shtohet si bashkëngjitje" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/sr.js b/l10n/sr.js index fec45ac5f5..cf2cd69de6 100644 --- a/l10n/sr.js +++ b/l10n/sr.js @@ -85,7 +85,6 @@ OC.L10N.register( "SMTP Port" : "SMTP порт", "SMTP User" : "SMTP корисничко име", "SMTP Password" : "SMTP лозинка", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Да би са апликацијом функционисао Google налог, потребно је да укључите двофакторску аутентификацију за Google и генеришете лозинку апликације.", "Account settings" : "Поставке налога", "Aliases" : "Алијаси", "Alias to S/MIME certificate mapping" : "Алијас на мапирање S/MIME сертификата", @@ -108,13 +107,13 @@ OC.L10N.register( "Mail server" : "Сервер е-поште", "Sieve server" : "Sieve сервер", "Folder search" : "Претрага фолдера", + "Email address" : "Адреса е-поште", "Update alias" : "Ажурирај алијас", "Rename alias" : "Промени име алијаса", "Show update alias form" : "Приказује формулар за ажурирање алијаса", "Delete alias" : "Обриши алијас", "Go back" : "Иди назад", "Change name" : "Промени име", - "Email address" : "Адреса е-поште", "Add alias" : "Додајте алиас", "Create alias" : "Креирај алијас", "Cancel" : "Поништи", @@ -137,13 +136,16 @@ OC.L10N.register( "Sorting" : "Сортирање", "Newest first" : "Прво новије", "Oldest first" : "Прво старије", + "New text block" : "Нови блок текста", + "Title of the text block" : "Наслов блока текста", + "Content of the text block" : "Садржај блока текста", + "Ok" : "У реду", "Avatars from Gravatar and favicons" : "Аватари са Gravatar-а и фавиконе", "Reply position" : "Позиција одговора", "Top" : "Врх", "Bottom" : "Дно", "Text blocks" : "Блокови текста", "Reusable pieces of text that can be inserted in messages" : "Поново искористиви делови текста који могу да се уметну у поруке", - "New text block" : "Нови блок текста", "Shared with me" : "Дељено са мном", "Privacy" : "Приватност", "Data collection" : "Прикупљање података", @@ -171,9 +173,6 @@ OC.L10N.register( "Refresh" : "Освежи", "About" : "О програму", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Део ове апликације је CKEditor, едитор отвореног кода. Ауторска права © CKEditor даваоци доприноса. Лиценцирано под GPLv2.", - "Title of the text block" : "Наслов блока текста", - "Content of the text block" : "Садржај блока текста", - "Ok" : "У реду", "No certificate" : "Нема сертификата", "Certificate updated" : "Сертификат је ажуриран", "Could not update certificate" : "Није могао да се ажурира сертификат", @@ -216,7 +215,6 @@ OC.L10N.register( "Disable formatting" : "Искључи форматирање", "Upload attachment" : "Закачи прилог", "Add attachment from Files" : "Додај прилог из фајлова", - "Add share link from Files" : "Додај везу дељења из Фајлова", "Smart picker" : "Паметни бирач", "Request a read receipt" : "Захтевај потврду о читању", "Sign message with S/MIME" : "Потпиши поруку са S/MIME", @@ -228,15 +226,14 @@ OC.L10N.register( "Monday morning" : "Понедељак ујутру", "Custom date and time" : "Жељени датум и време", "Enter a date" : "Унеси датум", - "Choose" : "Изаберите", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајл поделите путем линка.","Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајлове поделите путем линка.","Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајлове поделите путем линка."], - "Choose a file to add as attachment" : "Изаберите фајл за прилог", - "Choose a file to share as a link" : "Одаберите фајл који желите да поделите као везу", + "Choose a file" : "Одаберите фајл", "_{count} attachment_::_{count} attachments_" : ["{count} прилог","{count} прилога","{count} прилога"], "Untitled message" : "Ненасловљена порука", "Expand composer" : "Развиј састављач", "Close composer" : "Затвори састављач", "Confirm" : "Потврди", + "Revoke" : "Повуци", "Tag: {name} deleted" : "Ознака: {name} је обрисана", "An error occurred, unable to delete the tag." : "Дошло је до грешке, не може да се обрише ознака.", "The tag will be deleted from all messages." : "Ознака ће се обрисати из свих порука.", @@ -244,6 +241,7 @@ OC.L10N.register( "Rich text" : "Обогаћени текст", "No messages in this folder" : "Нема порука у овој фасцикли", "No messages" : "Нема порука", + "Choose" : "Изаберите", "Blind copy recipients only" : "Само примаоци невидљиве копије", "No subject" : "Нема наслова", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Нацрт:{markup-end} {subject}", @@ -283,8 +281,6 @@ OC.L10N.register( "Move Message" : "Премести поруку", "Archive thread" : "Архивирај нит", "Archive message" : "Архивирај поруку", - "Delete thread" : "Обриши нит", - "Delete message" : "Обриши поруку", "More actions" : "Још акција", "Back" : "Назад", "Set custom snooze" : "Постави произвољно одлагање", @@ -292,6 +288,8 @@ OC.L10N.register( "Reply with meeting" : "Одговори састанком", "Create task" : "Креирај задатак", "Download message" : "Преузми поруку", + "Delete thread" : "Обриши нит", + "Delete message" : "Обриши поруку", "Back to all actions" : "Назад на све акције", "Manage quick actions" : "Управљај брзим акцијама", "Load more" : "Учитај још", @@ -315,6 +313,7 @@ OC.L10N.register( "Event created" : "Креиран је догађај", "Could not create event" : "Не могу да креирам догађај", "Create event" : "Креирај догађај", + "Title" : "Наслов", "All day" : "Цео дан", "Attendees" : "Присутни", "You can only invite attendees if your account has an email address set" : "Учеснике можете да позовете само ако је за ваш налог постављена и-мејл адреса", @@ -380,7 +379,9 @@ OC.L10N.register( "Could not snooze message" : "Порука није могла да се одложи", "Message was unsnoozed" : "Искључено је одлагање поруке", "Could not unsnooze message" : "Није могло да се искључи одлагање поруке", + "Direct link copied to clipboard" : "Директни линк је копиран у клипборд", "Forward" : "Проследи", + "Link copied" : "Веза ископирана", "Move message" : "Премести поруку", "Translate" : "Превођење", "Forward message as attachment" : "Проследи поруку као прилог", @@ -418,6 +419,7 @@ OC.L10N.register( "Moving" : "Померам", "Moving thread" : "Нит се премешта", "Moving message" : "Порука се премешта", + "Change password" : "Измени лозинку", "Used quota: {quota}% ({limit})" : "Употребљена квота: {quota}% ({limit}) ", "Used quota: {quota}%" : "Употребљена квота: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Поштанско сандуче не може да се креира. Име вероватно има неисправне карактере. Молимо вас да покушате са неким другим именом.", @@ -596,6 +598,8 @@ OC.L10N.register( "Reply to sender only" : "Одговори само пошиљаоцу", "Mark as unfavorite" : "Маркирај као неомиљено", "Mark as favorite" : "Маркирај као омиљено", + "From:" : "Од:", + "To:" : "За:", "Unsubscribe via link" : "Одјавите се преко линка", "Unsubscribing will stop all messages from the mailing list {sender}" : "Укидање претплате ће да заустави пријем свих порука иза мејлинг листе {sender}", "Send unsubscribe email" : "Пошаљи и-мејл за одјаву", @@ -787,6 +791,7 @@ OC.L10N.register( "Certificate imported successfully" : "Сертификат је успешно увезен", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Увоз сертификата није успео. Молимо вас да обезбедите да ваш приватни кључ одговара сертификату и да није заштићен вишеделном лозинком.", "Failed to import the certificate" : "Није успео увоз сертификата", + "Import S/MIME certificate" : "Увези S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име сертификата", "E-mail address" : "Адреса е-поште", @@ -794,7 +799,6 @@ OC.L10N.register( "Delete certificate" : "Обриши сертификат", "No certificate imported yet" : "Још увек није увезен ниједан сертификат", "Import certificate" : "Увези сертификат", - "Import S/MIME certificate" : "Увези S/MIME сертификат", "PKCS #12 Certificate" : "PKCS #12 сертификат", "PEM Certificate" : "PEM сертификат", "Certificate" : "Сертификат", @@ -854,11 +858,8 @@ OC.L10N.register( "Could not load the desired message" : "Неуспело учитавање жељене поруке", "Could not load the message" : "Неуспело учитавање поруке", "Error loading message" : "Грешка при учитавању поруке", - "Determine importance using machine learning" : "Одреди важносту употребом машинског учења", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Поруке ће аутоматски бити означаване као важне на основу тога које поруке одговарати или означавате као важне. У почетку ћете можда морати ручно да мењате важност да научите систем, али ће се он поправљати временом.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Овде ће се приказати поруке које сте послали и захтевали да се одговори на њих, али за које нисте примили никакав одговор након неколико дана.", - "Mark all messages of this folder as read" : "Означи све поруке из ове фасцикле као прочитане", - "Last 7 days" : "Последњих 7 дана", - "From me" : "Од мене" + "Add share link from Files" : "Додај везу дељења из Фајлова", + "Choose a file to add as attachment" : "Изаберите фајл за прилог", + "Choose a file to share as a link" : "Одаберите фајл који желите да поделите као везу" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/l10n/sr.json b/l10n/sr.json index 66d7527cda..74884b6f5d 100644 --- a/l10n/sr.json +++ b/l10n/sr.json @@ -83,7 +83,6 @@ "SMTP Port" : "SMTP порт", "SMTP User" : "SMTP корисничко име", "SMTP Password" : "SMTP лозинка", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Да би са апликацијом функционисао Google налог, потребно је да укључите двофакторску аутентификацију за Google и генеришете лозинку апликације.", "Account settings" : "Поставке налога", "Aliases" : "Алијаси", "Alias to S/MIME certificate mapping" : "Алијас на мапирање S/MIME сертификата", @@ -106,13 +105,13 @@ "Mail server" : "Сервер е-поште", "Sieve server" : "Sieve сервер", "Folder search" : "Претрага фолдера", + "Email address" : "Адреса е-поште", "Update alias" : "Ажурирај алијас", "Rename alias" : "Промени име алијаса", "Show update alias form" : "Приказује формулар за ажурирање алијаса", "Delete alias" : "Обриши алијас", "Go back" : "Иди назад", "Change name" : "Промени име", - "Email address" : "Адреса е-поште", "Add alias" : "Додајте алиас", "Create alias" : "Креирај алијас", "Cancel" : "Поништи", @@ -135,13 +134,16 @@ "Sorting" : "Сортирање", "Newest first" : "Прво новије", "Oldest first" : "Прво старије", + "New text block" : "Нови блок текста", + "Title of the text block" : "Наслов блока текста", + "Content of the text block" : "Садржај блока текста", + "Ok" : "У реду", "Avatars from Gravatar and favicons" : "Аватари са Gravatar-а и фавиконе", "Reply position" : "Позиција одговора", "Top" : "Врх", "Bottom" : "Дно", "Text blocks" : "Блокови текста", "Reusable pieces of text that can be inserted in messages" : "Поново искористиви делови текста који могу да се уметну у поруке", - "New text block" : "Нови блок текста", "Shared with me" : "Дељено са мном", "Privacy" : "Приватност", "Data collection" : "Прикупљање података", @@ -169,9 +171,6 @@ "Refresh" : "Освежи", "About" : "О програму", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Део ове апликације је CKEditor, едитор отвореног кода. Ауторска права © CKEditor даваоци доприноса. Лиценцирано под GPLv2.", - "Title of the text block" : "Наслов блока текста", - "Content of the text block" : "Садржај блока текста", - "Ok" : "У реду", "No certificate" : "Нема сертификата", "Certificate updated" : "Сертификат је ажуриран", "Could not update certificate" : "Није могао да се ажурира сертификат", @@ -214,7 +213,6 @@ "Disable formatting" : "Искључи форматирање", "Upload attachment" : "Закачи прилог", "Add attachment from Files" : "Додај прилог из фајлова", - "Add share link from Files" : "Додај везу дељења из Фајлова", "Smart picker" : "Паметни бирач", "Request a read receipt" : "Захтевај потврду о читању", "Sign message with S/MIME" : "Потпиши поруку са S/MIME", @@ -226,15 +224,14 @@ "Monday morning" : "Понедељак ујутру", "Custom date and time" : "Жељени датум и време", "Enter a date" : "Унеси датум", - "Choose" : "Изаберите", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајл поделите путем линка.","Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајлове поделите путем линка.","Величина прилога прелази максимално довољену величину прилога {size}. Молимо вас да фајлове поделите путем линка."], - "Choose a file to add as attachment" : "Изаберите фајл за прилог", - "Choose a file to share as a link" : "Одаберите фајл који желите да поделите као везу", + "Choose a file" : "Одаберите фајл", "_{count} attachment_::_{count} attachments_" : ["{count} прилог","{count} прилога","{count} прилога"], "Untitled message" : "Ненасловљена порука", "Expand composer" : "Развиј састављач", "Close composer" : "Затвори састављач", "Confirm" : "Потврди", + "Revoke" : "Повуци", "Tag: {name} deleted" : "Ознака: {name} је обрисана", "An error occurred, unable to delete the tag." : "Дошло је до грешке, не може да се обрише ознака.", "The tag will be deleted from all messages." : "Ознака ће се обрисати из свих порука.", @@ -242,6 +239,7 @@ "Rich text" : "Обогаћени текст", "No messages in this folder" : "Нема порука у овој фасцикли", "No messages" : "Нема порука", + "Choose" : "Изаберите", "Blind copy recipients only" : "Само примаоци невидљиве копије", "No subject" : "Нема наслова", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Нацрт:{markup-end} {subject}", @@ -281,8 +279,6 @@ "Move Message" : "Премести поруку", "Archive thread" : "Архивирај нит", "Archive message" : "Архивирај поруку", - "Delete thread" : "Обриши нит", - "Delete message" : "Обриши поруку", "More actions" : "Још акција", "Back" : "Назад", "Set custom snooze" : "Постави произвољно одлагање", @@ -290,6 +286,8 @@ "Reply with meeting" : "Одговори састанком", "Create task" : "Креирај задатак", "Download message" : "Преузми поруку", + "Delete thread" : "Обриши нит", + "Delete message" : "Обриши поруку", "Back to all actions" : "Назад на све акције", "Manage quick actions" : "Управљај брзим акцијама", "Load more" : "Учитај још", @@ -313,6 +311,7 @@ "Event created" : "Креиран је догађај", "Could not create event" : "Не могу да креирам догађај", "Create event" : "Креирај догађај", + "Title" : "Наслов", "All day" : "Цео дан", "Attendees" : "Присутни", "You can only invite attendees if your account has an email address set" : "Учеснике можете да позовете само ако је за ваш налог постављена и-мејл адреса", @@ -378,7 +377,9 @@ "Could not snooze message" : "Порука није могла да се одложи", "Message was unsnoozed" : "Искључено је одлагање поруке", "Could not unsnooze message" : "Није могло да се искључи одлагање поруке", + "Direct link copied to clipboard" : "Директни линк је копиран у клипборд", "Forward" : "Проследи", + "Link copied" : "Веза ископирана", "Move message" : "Премести поруку", "Translate" : "Превођење", "Forward message as attachment" : "Проследи поруку као прилог", @@ -416,6 +417,7 @@ "Moving" : "Померам", "Moving thread" : "Нит се премешта", "Moving message" : "Порука се премешта", + "Change password" : "Измени лозинку", "Used quota: {quota}% ({limit})" : "Употребљена квота: {quota}% ({limit}) ", "Used quota: {quota}%" : "Употребљена квота: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Поштанско сандуче не може да се креира. Име вероватно има неисправне карактере. Молимо вас да покушате са неким другим именом.", @@ -594,6 +596,8 @@ "Reply to sender only" : "Одговори само пошиљаоцу", "Mark as unfavorite" : "Маркирај као неомиљено", "Mark as favorite" : "Маркирај као омиљено", + "From:" : "Од:", + "To:" : "За:", "Unsubscribe via link" : "Одјавите се преко линка", "Unsubscribing will stop all messages from the mailing list {sender}" : "Укидање претплате ће да заустави пријем свих порука иза мејлинг листе {sender}", "Send unsubscribe email" : "Пошаљи и-мејл за одјаву", @@ -785,6 +789,7 @@ "Certificate imported successfully" : "Сертификат је успешно увезен", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Увоз сертификата није успео. Молимо вас да обезбедите да ваш приватни кључ одговара сертификату и да није заштићен вишеделном лозинком.", "Failed to import the certificate" : "Није успео увоз сертификата", + "Import S/MIME certificate" : "Увези S/MIME сертификат", "S/MIME certificates" : "S/MIME сертификати", "Certificate name" : "Име сертификата", "E-mail address" : "Адреса е-поште", @@ -792,7 +797,6 @@ "Delete certificate" : "Обриши сертификат", "No certificate imported yet" : "Још увек није увезен ниједан сертификат", "Import certificate" : "Увези сертификат", - "Import S/MIME certificate" : "Увези S/MIME сертификат", "PKCS #12 Certificate" : "PKCS #12 сертификат", "PEM Certificate" : "PEM сертификат", "Certificate" : "Сертификат", @@ -852,11 +856,8 @@ "Could not load the desired message" : "Неуспело учитавање жељене поруке", "Could not load the message" : "Неуспело учитавање поруке", "Error loading message" : "Грешка при учитавању поруке", - "Determine importance using machine learning" : "Одреди важносту употребом машинског учења", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Поруке ће аутоматски бити означаване као важне на основу тога које поруке одговарати или означавате као важне. У почетку ћете можда морати ручно да мењате важност да научите систем, али ће се он поправљати временом.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Овде ће се приказати поруке које сте послали и захтевали да се одговори на њих, али за које нисте примили никакав одговор након неколико дана.", - "Mark all messages of this folder as read" : "Означи све поруке из ове фасцикле као прочитане", - "Last 7 days" : "Последњих 7 дана", - "From me" : "Од мене" + "Add share link from Files" : "Додај везу дељења из Фајлова", + "Choose a file to add as attachment" : "Изаберите фајл за прилог", + "Choose a file to share as a link" : "Одаберите фајл који желите да поделите као везу" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" } \ No newline at end of file diff --git a/l10n/sr@latin.js b/l10n/sr@latin.js index efcbda1bfb..c952883b09 100644 --- a/l10n/sr@latin.js +++ b/l10n/sr@latin.js @@ -15,12 +15,12 @@ OC.L10N.register( "Appearance" : "Izgled", "Newest first" : "Prvo novije", "Oldest first" : "prvo starije", + "Ok" : "Ok", "Delete" : "Delete", "Search" : "Search", "Send" : "Pošalji", "Refresh" : "Osveži", "About" : "O programu", - "Ok" : "Ok", "Select account" : "Označite nalog", "Choose" : "Odaberi", "Favorite" : "Omiljene", @@ -37,6 +37,7 @@ OC.L10N.register( "Favorites" : "Omiljene", "Other" : "Ostali", "Forward" : "Prosledi", + "Link copied" : "Veza iskopirana", "Translate" : "Prevedi", "Move" : "Premesti", "Remove account" : "Ukloni nalog", @@ -51,6 +52,8 @@ OC.L10N.register( "Date" : "Date", "Tags" : "Oznake", "Not found" : "Nije nađeno", + "From:" : "Od:", + "To:" : "Za:", "Deleted" : "Obrisano", "Help" : "Pomoć", "delete" : "obriši", diff --git a/l10n/sr@latin.json b/l10n/sr@latin.json index dfd984b68f..4775e8d2de 100644 --- a/l10n/sr@latin.json +++ b/l10n/sr@latin.json @@ -13,12 +13,12 @@ "Appearance" : "Izgled", "Newest first" : "Prvo novije", "Oldest first" : "prvo starije", + "Ok" : "Ok", "Delete" : "Delete", "Search" : "Search", "Send" : "Pošalji", "Refresh" : "Osveži", "About" : "O programu", - "Ok" : "Ok", "Select account" : "Označite nalog", "Choose" : "Odaberi", "Favorite" : "Omiljene", @@ -35,6 +35,7 @@ "Favorites" : "Omiljene", "Other" : "Ostali", "Forward" : "Prosledi", + "Link copied" : "Veza iskopirana", "Translate" : "Prevedi", "Move" : "Premesti", "Remove account" : "Ukloni nalog", @@ -49,6 +50,8 @@ "Date" : "Date", "Tags" : "Oznake", "Not found" : "Nije nađeno", + "From:" : "Od:", + "To:" : "Za:", "Deleted" : "Obrisano", "Help" : "Pomoć", "delete" : "obriši", diff --git a/l10n/sv.js b/l10n/sv.js index 3804eddbfe..06d13ea318 100644 --- a/l10n/sv.js +++ b/l10n/sv.js @@ -14,19 +14,23 @@ OC.L10N.register( "Mail" : "E-post", "You are reaching your mailbox quota limit for {account_email}" : "Du närmar dig din kvot för {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Du använder för närvarande {percentage}av din allokerade datamängd. Frigör utrymme genom att radera onödiga e-postmeddelanden.", - "Mail Application" : "E-post app", + "{account_email} has been delegated to you" : "{account_email} har delegerats till dig", + "{user} delegated {account} to you" : "{user} delegerade {account} till dig", + "{account_email} is no longer delegated to you" : "{account_email}är inte längre delegerat till dig", + "{user} revoked delegation for {account}" : "{user} återkallade delegation för {account}", + "Mail Application" : "E-postapp", "Mails" : "E-post", - "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Avsändarens e-post adress: %1$s finns inte i adressboken, men avsändarens namn: %2$sfinns i adressboken med följande e-postadress: %3$s", - "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Avsändarens e-post adress: %1$s finns inte i adressboken, men avsändarens namn: %2$sfinns i adressboken med följande e-postadresser: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Avsändarens e-postadress %1$s finns inte i adressboken, men avsändarnamnet %2$s finns där med följande e-postadress: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Avsändarens e-postadress %1$s finns inte i adressboken, men avsändarnamnet %2$s finns där med följande e-postadresser: %3$s", "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "Avsändaren använder en anpassad e-postadress: %1$s istället för avsändarens e-postadress: %2$s", "Sent date is in the future" : "Skickat datum är i framtiden", "Mail server marked this message as phishing attempt" : "E-postservern markerade detta meddelande som ett försök till nätfiske", "Some addresses in this message are not matching the link text" : "Vissa adresser i det här meddelandet matchar inte länktexten", - "Reply-To email: %1$s is different from sender email: %2$s" : "Svara-till epost-adress: %1$s skiljer sig från avsändarens e-postadress: %2$s", + "Reply-To email: %1$s is different from sender email: %2$s" : "Svarsadressen %1$s skiljer sig från avsändarens e-postadress %2$s", "Mail connection performance" : "Prestanda för e-postanslutning", "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Långsam e-posttjänst upptäckt (%1$s). Vid ett försök att ansluta till flera konton tog i genomsnitt %2$s sekunder per konto", "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Långsam e-posttjänst upptäckt (%1$s). Vid ett försök att utföra en postlådelistning på flera konton tog i genomsnitt %2$s sekunder per konto", - "Mail Transport configuration" : "Mail Transport konfiguration", + "Mail Transport configuration" : "Konfiguration av e-posttransport", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "Inställningen \"app.mail.transport\" är inte inställd som smtp. Den här konfigurationen kan orsaka problem med moderna e-postsäkerhetsåtgärder som SPF och DKIM eftersom e-postmeddelanden skickas direkt från webbservern, som ofta inte är korrekt konfigurerad för detta ändamål. För att åtgärda detta har stödet för e-posttransport upphört. Ta bort \"app.mail.transport\" från din konfiguration för att använda SMTP-transport och dölja det här meddelandet. En korrekt konfigurerad SMTP-konfiguration krävs för att säkerställa e-postleverans.", "Mail account parameters, aliases and preferences" : "Parametrar, alias och inställningar för e-postkonto", "💌 A mail app for Nextcloud" : "En e-post-app för Nextcloud", @@ -44,7 +48,7 @@ OC.L10N.register( "Save" : "Spara", "Connect" : "Anslut", "Looking up configuration" : "Kontrollerar konfiguration", - "Checking mail host connectivity" : "Kontrollerar kontakt med e-post server", + "Checking mail host connectivity" : "Kontrollerar anslutningen till e-postservern", "Configuration discovery failed. Please use the manual settings" : "Automatisk konfiguration misslyckades. Använd manuell inställning", "Password required" : "Lösenord krävs", "Testing authentication" : "Testar autentisering", @@ -68,7 +72,7 @@ OC.L10N.register( "Authorization pop-up closed" : "Popup-fönstret för auktorisering stängt", "Configuration discovery temporarily not available. Please try again later." : "Konfigurationsidentifiering är inte tillgänglig för tillfälligt . Försök igen senare.", "There was an error while setting up your account" : "Det uppstod ett fel när ditt konto skulle skapas", - "Auto" : "Auto", + "Auto" : "Automatisk", "Name" : "Namn", "Mail address" : "E-postadress", "name@example.org" : "namn@example.org", @@ -91,7 +95,6 @@ OC.L10N.register( "SMTP Port" : "SMTP-port", "SMTP User" : "SMTP-användare", "SMTP Password" : "SMTP-lösenord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "För att Google-kontot ska fungera med den här appen måste du aktivera tvåfaktorsautentisering för Google och generera ett lösenord.", "Account settings" : "Kontoinställningar", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Alias ​​till S/MIME-certifikatmappning", @@ -113,15 +116,15 @@ OC.L10N.register( "Quick actions" : "Snabbval", "Sieve script editor" : "Sieve skript editor", "Mail server" : "E-postserver", - "Sieve server" : "Sieve server", + "Sieve server" : "Sieve-server", "Folder search" : "Mappsökning", + "Email address" : "E-postadress", "Update alias" : "Uppdatera alias", "Rename alias" : "Ändra alias", "Show update alias form" : "Visa uppdateringsformulär för alias", "Delete alias" : "Radera alias", "Go back" : "Gå tillbaka", "Change name" : "Byt namn", - "Email address" : "E-postadress", "Add alias" : "Lägg till alias", "Create alias" : "Skapa alias", "Cancel" : "Avbryt", @@ -129,10 +132,11 @@ OC.L10N.register( "Activate" : "Aktivera", "Remind about messages that require a reply but received none" : "Påminnelse om meddelanden som kräver ett svar men där inget har mottagits", "Highlight external addresses" : "Markera externa adresser", - "Could not update preference" : "Kunde inte uppdatera inställningar", + "Could not update preference" : "Det gick inte att uppdatera inställningen", "Mail settings" : "E-postinställningar", "General" : "Allmänt", - "Set as default mail app" : "Använd som standard e-post app", + "Set as default mail app" : "Använd som standardapp för e-post", + "{email} (delegated)" : "{email} (delegerat)", "Add mail account" : "Lägg till e-postkonto", "Appearance" : "Utseende", "Show all messages in thread" : "Visa alla meddelanden i tråden", @@ -147,20 +151,23 @@ OC.L10N.register( "Sorting" : "Sortering", "Newest first" : "Nyast först", "Oldest first" : "Äldst först", + "New text block" : "Nytt textblock", + "Title of the text block" : "Namn", + "Content of the text block" : "Innehåll", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Avatars från gravatar och favicons", "Reply position" : "Positionera svar", "Top" : "Topp", "Bottom" : "Botten", - "Text blocks" : "Text blocks", + "Text blocks" : "Textblock", "Reusable pieces of text that can be inserted in messages" : "Återanvändningsbara block av text som kan importeras i meddelanden", - "New text block" : "Nytt text block", "Shared with me" : "Delat med mig", "Privacy" : "Integritet", "Data collection" : "Data insamling", "Allow the app to collect and process data locally to adapt to your preferences" : "Tillåt insamling och hantering av data lokalt för att implementera inställningar", "Always show images from" : "Visa alltid bilder från", "Security" : "Säkerhet", - "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Hantera interna adresser och domäner så att kända kontakter ej markeras", + "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Hantera interna adresser och domäner så att kända kontakter inte markeras", "S/MIME" : "S/MIME", "Manage certificates" : "Hantera certifikat", "Mailvelope" : "Mailvelope", @@ -181,16 +188,16 @@ OC.L10N.register( "Search" : "Sök", "Send" : "Skicka", "Refresh" : "Uppdatera", + "Heading1" : "Rubrik1", + "Heading2" : "Rubrik2", + "Heading3" : "Rubrik3", "About" : "Om", "Acknowledgements" : "Tillkännagivanden", - "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Denna applikation inkluderar CKE editor, en open-source editor. Copyright © CKEditor contributors. Licens enligt GPLv2.", - "Title of the text block" : "Namn", - "Content of the text block" : "Innehåll", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Den här appen innehåller CKEditor, en redigerare med öppen källkod. Copyright © CKEditor-bidragsgivarna. Licensierad under GPLv2.", "Automatically create tentative appointments in calendar" : "Skapa automatiskt preliminära möten i kalendern", "No certificate" : "Certifikat saknas", "Certificate updated" : "Certifikat uppdaterat", - "Could not update certificate" : "Kunde inte uppdatera certifikat", + "Could not update certificate" : "Det gick inte att uppdatera certifikat", "{commonName} - Valid until {expiryDate}" : "{commonName} - Giltigt tills {expiryDate}", "Select an alias" : "Välj ett alias", "Select certificates" : "Välj certifikat", @@ -212,7 +219,7 @@ OC.L10N.register( "To" : "Till", "Cc/Bcc" : "Cc/Bcc", "Select recipient" : "Välj mottagare", - "Contact or email address …" : "Kontakt eller e-post adress …", + "Contact or email address …" : "Kontakt eller e-postadress …", "Cc" : "Cc", "Bcc" : "Bcc", "Subject" : "Ämne", @@ -222,7 +229,7 @@ OC.L10N.register( "The following recipients do not have a PGP key: {recipients}." : "Följande mottagare har ingen PGP-nyckel: {recipients}.", "Write message …" : "Skriv meddelande …", "Saving draft …" : "Sparar utkast...", - "Error saving draft" : "Kunde inte spara utkast", + "Error saving draft" : "Det gick inte att spara utkastet", "Draft saved" : "Utkast sparat", "Save draft" : "Spara utkast", "Discard & close draft" : "Stäng och radera utkast", @@ -230,8 +237,7 @@ OC.L10N.register( "Disable formatting" : "Inaktivera formatering", "Upload attachment" : "Ladda upp bilaga", "Add attachment from Files" : "Lägg till bilaga från Filer", - "Add share link from Files" : "Lägg till delningslänk från Filer", - "Smart picker" : "Smart picker", + "Smart picker" : "Smartväljare", "Request a read receipt" : "Begär läskvitto", "Sign message with S/MIME" : "Signera meddelande med S/MIME", "Encrypt message with S/MIME" : "Kryptera meddelande med S/MIME", @@ -242,19 +248,34 @@ OC.L10N.register( "Monday morning" : "Måndag morgon", "Custom date and time" : "Anpassat datum och tid", "Enter a date" : "Ange datum", - "Choose" : "Välj", - "Choose a file to add as attachment" : "Välj en fil att lägga som bilaga", - "Choose a file to share as a link" : "Välj en fil att dela som länk", + "Remove attachment {fileName}" : "Ta bort bilaga {fileName}", + "Choose a file" : "Välj en fil", "_{count} attachment_::_{count} attachments_" : ["{count} bilaga","{count} bilagor"], "Untitled message" : "Namnlöst meddelande", "Confirm" : "Bekräfta", + "Delegate access" : "Delegera behörighet", + "Revoke" : "Återkalla", + "{userId} will no longer be able to act on your behalf" : "{userId} kommer inte längre att kunna agera för din räkning", + "Could not fetch delegates" : "Det gick inte att hämta ombud", + "Delegated access to {displayName}" : "Delegerad åtkomst till {displayName}", + "Could not delegate access" : "Det gick inte att delegera åtkomst", + "Revoked access for {displayName}" : "Återkallade tillgång för {displayName}", + "Could not revoke delegation" : "Det gick inte att återkalla delegeringen", + "Delegation" : "Delegering", + "Allow users to send, receive, and delete mail on your behalf" : "Låt användare skicka, ta emot och radera e-post åt dig", + "Revoke access" : "Återkalla åtkomst", + "Add delegate" : "Lägg till delegering", + "Select a user" : "Välj en användare", + "They will be able to send, receive, and delete mail on your behalf" : "De kommer att kunna skicka, ta emot och radera post åt dig", + "Revoke access?" : "Återkalla åtkomst?", "Tag: {name} deleted" : "Tagg: {name} borttagen", "An error occurred, unable to delete the tag." : "Ett fel uppstod, det gick inte att ta bort taggen.", "The tag will be deleted from all messages." : "Taggen kommer att raderas från alla meddelanden.", "Plain text" : "Oformaterad text", "Rich text" : "Formaterad text", - "No messages in this folder" : "Inga meddelanden i denna mapp", + "No messages in this folder" : "Det finns inga meddelanden i den här mappen", "No messages" : "Inga meddelanden", + "Choose" : "Välj", "Blind copy recipients only" : "Endast mottagare för blindkopior", "No subject" : "Ingen ämnesrad", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Utkast:{markup-end} {subject}", @@ -263,17 +284,17 @@ OC.L10N.register( "Tomorrow – {timeLocale}" : "Imorgon – {timeLocale}", "Set reminder for tomorrow" : "Ställ in påminnelse för imorgon", "This weekend – {timeLocale}" : "Den här helgen – {timeLocale}", - "Set reminder for this weekend" : "Ställ in påminnelse för denna helg", + "Set reminder for this weekend" : "Ange en påminnelse för den här helgen", "Next week – {timeLocale}" : "Nästa vecka – {timeLocale}", "Set reminder for next week" : "Ställ in påminnelse för nästa vecka", - "Could not apply tag, configured tag not found" : "Kunde inte tillämpa taggen, konfigurerad tagg hittades inte", - "Could not move thread, destination mailbox not found" : "Kunde inte flytta tråden, destinationsbrevlådan hittades inte", - "Could not execute quick action" : "Kunde inte utföra snabbval", + "Could not apply tag, configured tag not found" : "Det gick inte att använda taggen eftersom den konfigurerade taggen inte hittades", + "Could not move thread, destination mailbox not found" : "Det gick inte att flytta tråden eftersom målmappen inte hittades", + "Could not execute quick action" : "Det gick inte att utföra snabbåtgärden", "Quick action executed" : "Snabbval utfört", "No trash folder configured" : "Ingen mapp för papperskorgen är konfigurerad", - "Could not delete message" : "Kunde inte radera meddelande", - "Could not archive message" : "Kunde inte arkivera meddelandet", - "This summary was AI generated" : "Denna sammanfattning är AI genererad ", + "Could not delete message" : "Det gick inte att ta bort meddelandet", + "Could not archive message" : "Det gick inte att arkivera meddelandet", + "This summary was AI generated" : "Den här sammanfattningen har genererats av AI", "Encrypted message" : "Krypterat meddelande", "This message is unread" : "Det här meddelandet är oläst", "Unfavorite" : "Inte favorit", @@ -281,21 +302,21 @@ OC.L10N.register( "Unread" : "Oläst", "Read" : "Läs", "Unimportant" : "Oviktigt", - "Mark not spam" : "Markera som ej skräppost", + "Mark not spam" : "Markera som inte skräppost", "Mark as spam" : "Markera som skräppost", "Edit tags" : "Redigera taggar", "Move thread" : "Flytta tråd", "Move Message" : "Flytta meddelande", "Archive thread" : "Arkivera tråd", "Archive message" : "Arkivera meddelandet", - "Delete thread" : "Radera tråd", - "Delete message" : "Radera meddelande", "More actions" : "Fler händelser", "Back" : "Tillbaka", "Edit as new message" : "Redigera som nytt meddelande", "Reply with meeting" : "Svara med möte", "Create task" : "Skapa uppgift", "Download message" : "Hämta meddelande", + "Delete thread" : "Radera tråd", + "Delete message" : "Radera meddelande", "Back to all actions" : "Tillbaka", "Manage quick actions" : "Hantera snabbval", "Load more" : "Ladda mer", @@ -312,8 +333,9 @@ OC.L10N.register( "Mark as important" : "Markera som viktigt", "Report this bug" : "Rapportera detta fel", "Event created" : "Evenemang skapat", - "Could not create event" : "Kunde inte skapa händelse", + "Could not create event" : "Det gick inte att skapa händelsen", "Create event" : "Skapa evenemang", + "Title" : "Titel", "All day" : "Hela dagen", "Attendees" : "Deltagare", "You can only invite attendees if your account has an email address set" : "Deltagare kan bara bjudas in om kontot har en e-postadress", @@ -327,7 +349,7 @@ OC.L10N.register( "{attendeeName} reacted to your invitation" : "{attendeeName} har reagerat på din inbjudan", "Failed to save your participation status" : "Det gick inte att spara din deltagarstatus", "You accepted this invitation" : "Du tackade ja till den här inbjudan", - "You tentatively accepted this invitation" : "Du accepterade preliminärt denna inbjudan", + "You tentatively accepted this invitation" : "Du svarade preliminärt ja på den här inbjudan", "You declined this invitation" : "Du tackade nej till den här inbjudan", "You already reacted to this invitation" : "Du har redan svarat på den här inbjudan", "You have been invited to an event" : "Du har blivit inbjuden till ett evenemang", @@ -341,18 +363,18 @@ OC.L10N.register( "More options" : "Fler alternativ", "This message has an attached invitation but the invitation dates are in the past" : "Det här meddelandet har en bifogad inbjudan men inbjudningsdatumen har redan varit", "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Det här meddelandet har en bifogad inbjudan, men inbjudan innehåller ingen deltagare som matchar någon konfigurerad e-postadress.", - "Could not remove internal address {sender}" : "Kunde inte ta bort den interna adressen: {sender}", - "Could not add internal address {address}" : "Kunde inte lägga till intern adress: {address}", + "Could not remove internal address {sender}" : "Det gick inte att ta bort den interna adressen {sender}", + "Could not add internal address {address}" : "Det gick inte att lägga till den interna adressen {address}", "individual" : "individ", "domain" : "domän", "Remove" : "Ta bort", "Add internal address" : "Lägg till intern adress", - "Add internal email or domain" : "Lägg till intern e-post eller domän", + "Add internal email or domain" : "Lägg till intern e-postadress eller domän", "Itinerary for {type} is not supported yet" : "Resplan för {type} stöds inte än", "To archive a message please configure an archive folder in account settings" : "För att arkivera ett meddelande, konfigurera en arkivmapp i kontoinställningarna", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Du har inte behörighet att flytta det här meddelandet till arkivmappen och/eller ta bort det här meddelandet från den aktuella mappen.", "Your IMAP server does not support storing the seen/unseen state." : "Din IMAP-server stöder inte lagring av status för \"seen/unseen\".", - "Could not mark message as seen/unseen" : "Kunde inte markera meddelandet som \"seen/unseen\"", + "Could not mark message as seen/unseen" : "Det gick inte att markera meddelandet som läst eller oläst", "Last hour" : "Senaste timmen", "Today" : "Idag", "Yesterday" : "I går", @@ -373,17 +395,19 @@ OC.L10N.register( "Load more important messages" : "Hämta fler viktiga meddelanden", "Other" : "Övrigt", "Load more other messages" : "Hämta fler andra meddelanden", - "Could not send mdn" : "Kunde inte skicka mdn", + "Could not send mdn" : "Det gick inte att skicka läskvittot", "The sender of this message has asked to be notified when you read this message." : "Avsändaren av detta meddelande har bett om att bli meddelad när du läser det.", "Notify the sender" : "Meddela avsändaren", "You sent a read confirmation to the sender of this message." : "Du har skickat ett läskvitto till meddelandets avsändare.", + "Direct link copied to clipboard" : "Direktlänk kopierad till urklipp", "Forward" : "Vidarebefordra", + "Link copied" : "Länken har kopierats", "Move message" : "Flytta meddelande", "Translate" : "Översätt", "Forward message as attachment" : "Vidarebefordra medelande som bilaga", "View source" : "Visa källa", "Print message" : "Skriv ut meddelande", - "Create mail filter" : "Skapa e-post filter", + "Create mail filter" : "Skapa e-postfilter", "Download thread data for debugging" : "Hämta tråddata för felsökning", "Message body" : "Meddelandetext", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Varning: S/MIME-signaturen för det här meddelandet är overifierad. Avsändaren kan utge sig för att vara någon annan!", @@ -401,7 +425,7 @@ OC.L10N.register( "View fewer attachments" : "Visa färre bilagor", "Choose a folder to store the attachments in" : "Välj en mapp att spara bifogade filer i", "Save all to Files" : "Spara alla i filer", - "Download Zip" : "Ladda ner arkiv", + "Download Zip" : "Hämta ZIP-arkiv", "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Detta meddelande är krypterat med PGP. Installera \"Mailvelope\" för att dekryptera det.", "The images have been blocked to protect your privacy." : "Bilderna har blockerats av säkerhetsskäl.", "Show images" : "Visa bilder", @@ -416,13 +440,16 @@ OC.L10N.register( "Moving message" : "Flyttar meddelande", "This account cannot connect" : "Det här kontot kan inte ansluta", "Connection failed. Please verify your information and try again" : "Anslutningen misslyckades. Verifiera din information och försök igen.", + "Change password" : "Byt lösenord", "Used quota: {quota}% ({limit})" : "Använt utrymme: {quota}% ({limit})", "Used quota: {quota}%" : "Använt utrymme: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Det gick inte att skapa postlådan. Namnet innehåller troligen ogiltiga tecken. Försök med ett annat namn.", "Remove account" : "Ta bort konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Kontot för {email} och sparat e-postdata kommer att tas bort från Nextcloud, men inte från din e-postleverantör.", "Remove {email}" : "Ta bort {email}", + "could not delete account" : "det gick inte att ta bort kontot", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Logga in med ett lösenord för att aktivera det här kontot. Den aktuella sessionen använder lösenordsfri autentisering, t.ex. SSO eller WebAuthn.", + "Delegate account" : "Delegera konto", "Show only subscribed folders" : "Visa endast mappar som du prenumererar på", "Add folder" : "Lägg till mapp", "Folder name" : "Mappnamn", @@ -460,8 +487,8 @@ OC.L10N.register( "Draft" : "Utkast", "Reply" : "Svara", "Message saved" : "Meddelande sparat", - "Failed to save message" : "Meddelande kunde inte sparas", - "Failed to save draft" : "Kunde inte spara utkast", + "Failed to save message" : "Det gick inte att spara meddelandet", + "Failed to save draft" : "Det gick inte att spara utkastet", "attachment" : "bilaga", "attached" : "bifogad", "No \"sent\" folder configured. Please pick one in the account settings." : "Ingen mapp för \"skickat\" har konfigurerats. Välj en i kontoinställningarna.", @@ -469,7 +496,7 @@ OC.L10N.register( "Your message has no subject. Do you want to send it anyway?" : "Ditt meddelande har inget ämne. Vill du skicka det ändå?", "You mentioned an attachment. Did you forget to add it?" : "Du nämnde en bilaga. Glömde du att lägga till den?", "Message discarded" : "Meddelandet har kasserats", - "Could not discard message" : "Meddelandet kunde inte kasseras", + "Could not discard message" : "Det gick inte att kassera meddelandet", "Maximize composer" : "Maximera editor", "Show recipient details" : "Visa mottagarens detaljer", "Hide recipient details" : "Dölj mottagarens detaljer", @@ -491,11 +518,11 @@ OC.L10N.register( "Message" : "Meddelande", "Oh Snap!" : "Hoppsan!", "Save autoresponder" : "Spara autosvar", - "Could not open outbox" : "Kunde inte öppna utkorgen", - "Pending or not sent messages will show up here" : "Väntande eller ej skickade meddelanden visas här", - "Could not copy to \"Sent\" folder" : "Kunde inte kopiera till mappen \"Skickat\"", + "Could not open outbox" : "Det gick inte att öppna utkorgen", + "Pending or not sent messages will show up here" : "Väntande eller oskickade meddelanden visas här", + "Could not copy to \"Sent\" folder" : "Det gick inte att kopiera till mappen ”Skickat”", "Mail server error" : "Server fel", - "Message could not be sent" : "Meddelande kunde inte skickas", + "Message could not be sent" : "Det gick inte att skicka meddelandet", "Message deleted" : "Meddelande borttaget", "Copy to \"Sent\" Folder" : "Kopiera till mappen \"Skickat\"", "Copy to Sent Folder" : "Kopiera till mappen Skickat", @@ -505,7 +532,7 @@ OC.L10N.register( "Show suspicious links" : "Visa misstänkta länkar", "link text" : "länk text", "Copied email address to clipboard" : "E-postadress kopierad till urklipp", - "Could not copy email address to clipboard" : "Kunde inte kopiera e-postadressen till urklipp", + "Could not copy email address to clipboard" : "Det gick inte att kopiera e-postadressen till urklipp", "Contacts with this address" : "Kontakter med den här adressen", "Add to Contact" : "Lägg till i Kontakter", "New Contact" : "Ny kontakt", @@ -537,12 +564,12 @@ OC.L10N.register( "Has attachment" : "Har bilaga", "To me" : "Till mig", "Enable mail body search" : "Aktivera sökning i meddelandetext", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve är ett kraftfullt språk för att skriva filter för din inkorg. Du kan hantera Sieve-skripten i Mail om din e-posttjänst stöder det. Sieve krävs också för att använda Autoresponder och Filter.", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve är ett kraftfullt språk för att skapa filter för din brevlåda. Du kan hantera Sieve-skript i Mail om e-posttjänsten stöder det. Sieve krävs även för autosvar och filter.", "Enable sieve filter" : "Aktivera sieve filter", "Sieve host" : "Sieve server", "Sieve security" : "Sieve säkerhet", "Sieve Port" : "Sieve port", - "Sieve credentials" : "Sieve credentials", + "Sieve credentials" : "Sieve-inloggningsuppgifter", "IMAP credentials" : "IMAP inställningar", "Custom" : "Anpassad", "Sieve User" : "Sieve användare", @@ -555,7 +582,7 @@ OC.L10N.register( "Save signature" : "Spara signatur", "Place signature above quoted text" : "Placera signaturen ovanför citerad text", "Message source" : "Meddelandekälla", - "An error occurred, unable to rename the tag." : "Ett fel uppstod, kunde inte byta taggens namn.", + "An error occurred, unable to rename the tag." : "Ett fel uppstod. Det gick inte att byta namn på taggen.", "Edit name or color" : "Redigera namn eller färg", "Saving new tag name …" : "Sparar nytt namn på tagg …", "Delete tag" : "Radera tagg", @@ -564,33 +591,37 @@ OC.L10N.register( "Tag name is a hidden system tag" : "Taggnamnet är en dold systemtagg", "Tag already exists" : "Taggen finns redan", "Tag name cannot be empty" : "Taggnamnet får inte vara tomt", - "An error occurred, unable to create the tag." : "Ett fel uppstod, kunde inte spara taggen.", + "An error occurred, unable to create the tag." : "Ett fel uppstod. Det gick inte att skapa taggen.", "Add default tags" : "Lägg till standardtaggar", "Add tag" : "Lägg till tagg", "Saving tag …" : "Sparar tagg ...", "Task created" : "Uppgift skapad", - "Summarizing thread failed." : "Kunde inte skapa sammanfattning", + "Summarizing thread failed." : "Det gick inte att sammanfatta tråden.", "Could not load your message thread" : "Det gick inte att ladda meddelandetråden", "The thread doesn't exist or has been deleted" : "Tråden finns inte eller har raderats", - "Email was not able to be opened" : "E-post kunde inte öppnas", + "Email was not able to be opened" : "Det gick inte att öppna e-postmeddelandet", "Print" : "Skriv ut", - "Could not print message" : "Kunde inte skriva ut", + "Could not print message" : "Det gick inte att skriva ut meddelandet", "Loading thread" : "Hämta tråd", "Not found" : "Hittades inte", "Encrypted & verified " : "Krypterad och verifierad", "Signature verified" : "Signatur verifierad", - "Signature unverified " : "Signaturen ej verifierad", + "Signature unverified " : "Signaturen är inte verifierad", "This message was encrypted by the sender before it was sent." : "Detta meddelande krypterades av avsändaren innan det skickades.", "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Det här meddelandet innehåller en verifierad digital S/MIME signatur. Meddelandet har inte ändrats sedan det skickades.", "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Det här meddelandet innehåller en overifierad digital S/MIME signatur. Meddelandet kan ha ändrats sedan det skickades, eller så är certifikatet inte betrott.", "Reply all" : "Svara alla", "Unsubscribe request sent" : "Begäran om att avsluta prenumerationen har skickats", - "Could not unsubscribe from mailing list" : "Kunde inte avsluta prenumerationen från e-postlistan", + "Could not unsubscribe from mailing list" : "Det gick inte att avsluta prenumerationen på e-postlistan", "Please wait for the message to load" : "Vänta tills meddelandet hämtas", "Disable reminder" : "Inaktivera påminnelse", "Unsubscribe" : "Avsluta prenumeration", "Reply to sender only" : "Svara endast avsändaren", "Mark as favorite" : "Markera som favorit", + "From:" : "Från:", + "To:" : "Till:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Avsluta prenumerationen via länk", "Unsubscribing will stop all messages from the mailing list {sender}" : "Om du avslutar prenumerationen stoppas alla meddelanden från e-postlistan {sender}", "Send unsubscribe email" : "Skicka e-postmeddelande för avregistrering", @@ -598,11 +629,11 @@ OC.L10N.register( "Thread summary" : "Sammanfattning", "Go to latest message" : "Gå till senaste meddelandet", "Newest message" : "Nyaste meddelandet", - "This summary is AI generated and may contain mistakes." : "Denna sammanfattning är AI-genererad och kan innehålla fel.", + "This summary is AI generated and may contain mistakes." : "Den här sammanfattningen har genererats av AI och kan innehålla fel.", "Please select languages to translate to and from" : "Välj språk att översätta till och från", - "The message could not be translated" : "Meddelandet kunde inte översättas", + "The message could not be translated" : "Det gick inte att översätta meddelandet", "Translation copied to clipboard" : "Översättningen har kopierats till urklipp", - "Translation could not be copied" : "Översättningen kunde inte kopieras", + "Translation could not be copied" : "Det gick inte att kopiera översättningen", "Translate message" : "Översätt meddelande", "Source language to translate from" : "Språk att översätta från", "Translate from" : "Översätt från", @@ -611,7 +642,7 @@ OC.L10N.register( "Translating" : "Översätter", "Copy translated text" : "Kopiera översatt text", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Inaktivera papperskorgen genom att lämna fältet tomt eller ställa in det på 0. Endast e-postmeddelanden som raderas efter att papperskorgen har aktiverats kommer att behandlas.", - "Could not remove trusted sender {sender}" : "Kunde inte ta bort betrodd avsändare: {sender}", + "Could not remove trusted sender {sender}" : "Det gick inte att ta bort den betrodda avsändaren {sender}", "No senders are trusted at the moment." : "Inga avsändare är betrodda för tillfället.", "Untitled event" : "Namnlös händelse", "(organizer)" : "(arrangör)", @@ -637,13 +668,13 @@ OC.L10N.register( "Create a new mail filter" : "Skapa ett nytt e-postfilter", "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Välj de rubriker du vill använda för att skapa ditt filter. I nästa steg kan du förfina filtervillkoren och ange de åtgärder som ska vidtas för meddelanden som matchar dina kriterier.", "Delete filter" : "Ta bort filter", - "Delete mail filter {filterName}?" : "Radera e-post filter {filterName}?", + "Delete mail filter {filterName}?" : "Ta bort e-postfiltret {filterName}?", "Are you sure to delete the mail filter?" : "Är du säker på att du vill ta bort e-postfiltret?", "New filter" : "Nytt filter", "Filter saved" : "Filtret är sparat", - "Could not save filter" : "Kunde inte spara filter", + "Could not save filter" : "Det gick inte att spara filtret", "Filter deleted" : "Filtret är raderat", - "Could not delete filter" : "Kunde inte radera filter", + "Could not delete filter" : "Det gick inte att ta bort filtret", "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Ta kontroll över din e-post. Filter hjälper dig att prioritera det som är viktigt.", "Hang tight while the filters load" : "Vänta medans filtren laddas.", "Filter is active" : "Filtret är aktivt", @@ -670,81 +701,81 @@ OC.L10N.register( "Edit quick action" : "Uppdatera snabbval", "Add quick action" : "Lägg till snabbval", "Quick action deleted" : "Snabbval borttaget", - "Failed to delete quick action" : "Kunde inte ta bort snabbval", - "Failed to update quick action" : "Kunde inte uppdatera snabbval", + "Failed to delete quick action" : "Det gick inte att ta bort snabbåtgärden", + "Failed to update quick action" : "Det gick inte att uppdatera snabbåtgärden", "Failed to update step in quick action" : "Misslyckades med att uppdatera steg i snabbval", "Quick action updated" : "Snabbval uppdaterat", - "Failed to create quick action" : "Kunde inte lägga till snabbval", - "Failed to add steps to quick action" : "Kunde inte lägga till steg i snabbval", + "Failed to create quick action" : "Det gick inte att skapa snabbåtgärden", + "Failed to add steps to quick action" : "Det gick inte att lägga till steg i snabbåtgärden", "Quick action created" : "Snabbval skapat", - "Failed to delete action step" : "Kunde inte ta bort steg", + "Failed to delete action step" : "Det gick inte att ta bort åtgärdssteget", "No quick actions yet." : "Snabbval saknas.", "Edit" : "Redigera", "Quick action name" : "Namn på snabbval", "Do the following actions" : "Utför följande åtgärder", "Add another action" : "Lägg till åtgärd", "Successfully updated config for \"{domain}\"" : "Uppdatering av konfiguration lyckades för \"{domain}\"", - "Error saving config" : "Konfiguration kunde inte sparas", + "Error saving config" : "Det gick inte att spara konfigurationen", "Saved config for \"{domain}\"" : "Sparade konfiguration för \"{domain}\"", - "Could not save default classification setting" : "Kunde inte spara standardinställning för klassificering", - "Mail app" : "Mail-app", - "The mail app allows users to read mails on their IMAP accounts." : "Mail-appen tillåter användare att läsa e-post på sina IMAP-konton.", + "Could not save default classification setting" : "Det gick inte att spara standardinställningen för klassificering", + "Mail app" : "Mail-appen", + "The mail app allows users to read mails on their IMAP accounts." : "Mail-appen gör det möjligt för användare att läsa e-post från sina IMAP-konton.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Här hittar du övergripande inställningar för varje instans. Användarspecifika inställningar finns i själva appen (nedre vänstra hörnet).", "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Om en ny matchande konfiguration hittas efter att användaren redan har etablerats med en annan konfiguration, kommer den nya konfigurationen att prioriteras och användaren kommer att uppdateras med konfigurationen.", "There can only be one configuration per domain and only one wildcard domain configuration." : "Det kan bara finnas en konfiguration per domän och endast en domänkonfiguration med jokertecken (*).", - "These settings can be used in conjunction with each other." : "These settings can be used in conjunction with each other.", + "These settings can be used in conjunction with each other." : "Dessa inställningar kan användas tillsammans.", "If you only want to provision one domain for all users, use the wildcard (*)." : "Om du bara vill använda en domän för alla användare använder du jokertecknet (*).", - "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Den här inställningen är bara mest meningsfull om du använder samma \"backend\" för din Nextcloud och e-postserver i din organisation.", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Den här inställningen är främst användbar om organisationens Nextcloud- och e-postserver använder samma användarbakände.", "Add new config" : "Lägg till ny konfiguration", - "Provision all accounts" : "Provision all accounts", + "Provision all accounts" : "Provisionera alla konton", "Allow additional mail accounts" : "Tillåt ytterligare e-postkonton", "Allow additional Mail accounts from User Settings" : "Tillåt ytterligare e-postkonton från användarinställningar", "Enable text processing through LLMs" : " Aktivera textbearbetning via LLM", - "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas.", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Mail-appen kan behandla användardata med hjälp av den konfigurerade stora språkmodellen och erbjuda funktioner som trådsammanfattningar, smarta svar och mötesagendor.", "Enable LLM processing" : "Aktivera LLM bearbetning", "Enable classification by importance by default" : "Aktivera klassificering efter vikt som standard", - "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "E-postappen kan klassificera inkommande e-postmeddelanden med hjälp av maskininlärning. Den här funktionen är aktiverad som standard men kan inaktiveras. Enskilda användare kommer fortfarande att kunna aktivera och deaktivera funktionen för sina konton.", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Mail-appen kan klassificera inkommande e-post efter hur viktig den är med hjälp av maskininlärning. Funktionen är aktiverad som standard, men standardläget kan ändras här. Enskilda användare kan fortfarande slå på eller av funktionen för sina konton.", "Enable classification of important mails by default" : "Aktivera klassificering av viktiga e-postmeddelanden som standard", - "Anti Spam Service" : "Anti Spam tjänst", + "Anti Spam Service" : "Antispamtjänst", "You can set up an anti spam service email address here." : "Du kan skapa en e-postadress för anti-spam-tjänsten här.", "Any email that is marked as spam will be sent to the anti spam service." : "Alla e-postmeddelanden som markeras som skräppost skickas till anti-skräpposttjänsten.", - "Gmail integration" : "Gmail integration", - "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail tillåter användare att komma åt sin e-post via IMAP. Av säkerhetsskäl är denna åtkomst endast möjlig med en OAuth 2.0-anslutning eller Google-konton som använder tvåfaktorsautentisering och lösenord.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : " Du måste registrera ett nytt klient-ID för en \"webbapplikation\" i Google Cloud-konsolen. Lägg till URL:en {url} som auktoriserad omdirigerings-URI.", - "Microsoft integration" : "Microsoft integration", - "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft kräver att du kommer åt dina e-postmeddelanden via IMAP med OAuth 2.0-autentisering. För att göra detta måste du registrera med Microsoft Entra ID, tidigare känt som Microsoft Azure Active Directory.", + "Gmail integration" : "Gmail-integrering", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail låter användare komma åt sin e-post via IMAP. Av säkerhetsskäl krävs antingen en OAuth 2.0-anslutning eller ett Google-konto med tvåfaktorsautentisering och ett applösenord.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Du måste registrera ett nytt klient-ID för en ”webbapp” i Google Cloud-konsolen. Lägg till URL:en {url} som auktoriserad omdirigerings-URI.", + "Microsoft integration" : "Microsoft-integrering", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft kräver att du använder OAuth 2.0-autentisering för att komma åt e-post via IMAP. Registrera därför en app i Microsoft Entra ID, tidigare Microsoft Azure Active Directory.", "Redirect URI" : "Omdirigerings URL", "For more details, please click here to open our documentation." : "För mer information, klicka här för att öppna dokumentationen.", "User Interface Preference Defaults" : "Standardinställningar för användargränssnitt", "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Dessa inställningar används för att förkonfigurera användargränssnittets inställningar. De kan ändras av användaren i e-postinställningarna.", "Show only the selected message" : "Visa endast det valda meddelandet", - "Successfully set up anti spam email addresses" : "Antispam e-post adress har sparas", - "Error saving anti spam email addresses" : "Antispam e-post adress kunde inte sparas", - "Successfully deleted anti spam reporting email" : "E-postmeddelande om skräppost rapportering raderat", - "Error deleting anti spam reporting email" : "Fel vid borttagning av e-postmeddelande om skräppost rapportering", - "Anti Spam" : "Anti Spam", - "Add the email address of your anti spam report service here." : "Lägg till e-postadressen till din anti spam rapporteringstjänst här.", + "Successfully set up anti spam email addresses" : "Antispamadresserna har konfigurerats", + "Error saving anti spam email addresses" : "Det gick inte att spara antispamadresserna", + "Successfully deleted anti spam reporting email" : "E-postadressen för skräppostrapportering har tagits bort", + "Error deleting anti spam reporting email" : "Det gick inte att ta bort e-postadressen för skräppostrapportering", + "Anti Spam" : "Antispam", + "Add the email address of your anti spam report service here." : "Lägg till e-postadressen till tjänsten för skräppostrapportering här.", "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Om aktiverad, skickas ett rapportmeddelande till SPAM-rapportservern när en användare klickar på \"Markera som skräppost\".", "The original message will be attached as a \"message/rfc822\" attachment." : "Det ursprungliga meddelandet kommer att bifogas som en bilaga av typen \"message/rfc822\".", - "\"Mark as Spam\" Email Address" : "\"Markera som Spam\" e-post adress", - "\"Mark Not Junk\" Email Address" : "\"Markera som ej skräp\" e-post adress", + "\"Mark as Spam\" Email Address" : "E-postadress för ”Markera som skräppost”", + "\"Mark Not Junk\" Email Address" : "E-postadress för ”Markera som inte skräppost”", "Reset" : "Återställ", - "Google integration configured" : "Google-integration konfigurerad", - "Could not configure Google integration" : "Kunde inte konfigurera Google-integration ", - "Google integration unlinked" : "Google-integration har tagits bort", - "Could not unlink Google integration" : "Kunde inte ta bort Google-integration", + "Google integration configured" : "Google-integrationen har konfigurerats", + "Could not configure Google integration" : "Det gick inte att konfigurera Google-integrationen", + "Google integration unlinked" : "Google-integrationen har kopplats från", + "Could not unlink Google integration" : "Det gick inte att koppla från Google-integrationen", "Client ID" : "Klient-ID", "Client secret" : "Klienthemlighet", - "Unlink" : "Unlink", - "Microsoft integration configured" : "Microsoft integration konfigurerad", - "Could not configure Microsoft integration" : "Kunde inte konfigurera Microsoft integration ", - "Microsoft integration unlinked" : "Microsoft-integration har tagits bort", - "Could not unlink Microsoft integration" : "Kunde inte ta bort Microsoft-integration", - "Domain Match: {provisioningDomain}" : "Domain Match: {provisioningDomain}", + "Unlink" : "Koppla från", + "Microsoft integration configured" : "Microsoft-integrationen har konfigurerats", + "Could not configure Microsoft integration" : "Det gick inte att konfigurera Microsoft-integrationen", + "Microsoft integration unlinked" : "Microsoft-integrationen har kopplats från", + "Could not unlink Microsoft integration" : "Det gick inte att koppla från Microsoft-integrationen", + "Domain Match: {provisioningDomain}" : "Domänmatchning: {provisioningDomain}", "Email: {email}" : "E-post: {email}", - "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} på {host}:{port} ({ssl}-krypterat)", - "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} på {host}:{port} ({ssl}-krypterat)", - "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} på {host}:{port} ({ssl} kryptering)", + "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} på {host}:{port} ({ssl}-kryptering)", + "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} på {host}:{port} ({ssl}-kryptering)", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} på {host}:{port} ({ssl}-kryptering)", "Configuration for \"{provisioningDomain}\"" : "Konfiguration för \"{provisioningDomain}\"", "Provisioning domain" : "Provisioneringsdomän", "Email address template" : "Mall för e-postadress", @@ -756,58 +787,58 @@ OC.L10N.register( "Master password" : "Huvudlösenord", "Use master password" : "Använd huvudlösenord", "Sieve" : "Sieve", - "Enable sieve integration" : "Aktivera sieve integration", - "LDAP aliases integration" : "LDAP aliases integration", - "Enable LDAP aliases integration" : "Aktivera LDAP aliases integration", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "LDAP-alias integrationen läser ett attribut från den konfigurerade LDAP-katalogen för att tillhandahålla e-post alias.", - "LDAP attribute for aliases" : "LDAP attribut för alias", - "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Ett attribut med flera värden för att tillhandahålla e-post alias. För varje värde skapas ett alias. Alias ​​som finns i Nextcloud och som inte finns i LDAP-katalogen raderas.", + "Enable sieve integration" : "Aktivera Sieve-integrering", + "LDAP aliases integration" : "LDAP-aliasintegrering", + "Enable LDAP aliases integration" : "Aktivera LDAP-aliasintegrering", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "LDAP-aliasintegreringen läser ett attribut från den konfigurerade LDAP-katalogen för att provisionera e-postalias.", + "LDAP attribute for aliases" : "LDAP-attribut för alias", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Ett flervärdesattribut för provisionering av e-postalias. Ett alias skapas för varje värde. Alias som finns i Nextcloud men inte i LDAP-katalogen tas bort.", "Save Config" : "Spara inställningar", - "Unprovision & Delete Config" : "Avregistrera och ta bort konfiguration", - "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% och %EMAIL% kommer ersättas av användarens UID och e-post", + "Unprovision & Delete Config" : "Ta bort provisionering och konfiguration", + "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% och %EMAIL% ersätts med användarens UID och e-postadress", "With the settings above, the app will create account settings in the following way:" : "Med inställningarna ovan skapar appen kontoinställningar på följande sätt:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Det angivna PKCS #12-certifikatet måste innehålla minst ett certifikat och exakt en privat nyckel.", "Failed to import the certificate. Please check the password." : "Det gick inte att importera certifikatet. Kontrollera lösenordet.", "Certificate imported successfully" : "Certifikatet har importerats", - "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Det gick inte att importera certifikatet. Kontrollera att den privata nyckeln matchar certifikatet och inte är skyddad av ett löseord.", - "Failed to import the certificate" : "Kunde inte importera certifikatet", - "S/MIME certificates" : "S/MIME certifikat", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Det gick inte att importera certifikatet. Kontrollera att den privata nyckeln matchar certifikatet och inte är skyddad av en lösenfras.", + "Failed to import the certificate" : "Det gick inte att importera certifikatet", + "Import S/MIME certificate" : "Importera S/MIME-certifikat", + "S/MIME certificates" : "S/MIME-certifikat", "Certificate name" : "Certifikatets namn", "E-mail address" : "E-postadress", "Valid until" : "Giltigt till", "Delete certificate" : "Ta bort certifikat", "No certificate imported yet" : "Certifikat saknas", "Import certificate" : "Importera certifikat", - "Import S/MIME certificate" : "Importera S/MIME certifikat", - "PKCS #12 Certificate" : "PKCS #12 Certifikat", - "PEM Certificate" : "PEM Certifikat", + "PKCS #12 Certificate" : "PKCS #12-certifikat", + "PEM Certificate" : "PEM-certifikat", "Certificate" : "Certifikat", "Private key (optional)" : "Privat nyckel (valfritt)", - "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "En privat nyckel behövs endast om signerade och krypterade meddelanden skall skickas via detta certifikat.", + "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Den privata nyckeln krävs endast om du vill skicka signerade och krypterade e-postmeddelanden med certifikatet.", "Submit" : "Skicka", - "No text blocks available" : "Text block saknas", - "Text block deleted" : "Text block borttaget", - "Failed to delete text block" : "Failed to delete text block", - "Text block shared with {sharee}" : "Text block delad med {sharee}", - "Failed to share text block with {sharee}" : "Kunde inte dela text block med {sharee}", + "No text blocks available" : "Det finns inga textblock", + "Text block deleted" : "Textblocket har tagits bort", + "Failed to delete text block" : "Det gick inte att ta bort textblocket", + "Text block shared with {sharee}" : "Textblocket har delats med {sharee}", + "Failed to share text block with {sharee}" : "Det gick inte att dela textblocket med {sharee}", "Share deleted for {name}" : "Delning borttagen för {name}", - "Failed to delete share with {name}" : "Kunde inte ta bort delning med {name}", + "Failed to delete share with {name}" : "Det gick inte att ta bort delning med {name}", "Guest" : "Gäst", "Group" : "Grupp", - "Failed to save text block" : "Kunde inte spara text block", + "Failed to save text block" : "Det gick inte att spara textblocket", "Shared" : "Delad", "Edit {title}" : "Uppdatera {title}", "Delete {title}" : "Ta bort {title}", - "Edit text block" : "Editera text block", + "Edit text block" : "Redigera textblock", "Shares" : "Delningar", "Search for users or groups" : "Sök användare eller grupper", - "Choose a text block to insert at the cursor" : "Välj ett text block att infoga vid markören", + "Choose a text block to insert at the cursor" : "Välj ett textblock att infoga vid markören", "Insert" : "Infoga", - "Insert text block" : "Infoga text block", + "Insert text block" : "Infoga textblock", "Account connected" : "Konto anslutet", "You can close this window" : "Du kan stänga detta fönster", "Connect your mail account" : "Anslut ditt e-postkonto", - "To add a mail account, please contact your administrator." : "Kontakta din systemadministratör för att skapa ett e-post konto", + "To add a mail account, please contact your administrator." : "Kontakta administratören för att lägga till ett e-postkonto.", "All" : "Alla", "Drafts" : "Utkast", "Priority inbox" : "Prioriterad inkorg", @@ -820,29 +851,28 @@ OC.L10N.register( "Error while sharing file" : "Fel vid delning av fil", "{from}\n{subject}" : "{from}\n{subject}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n nytt meddelande \nfrån {from}","%n nya meddelanden \nfrån {from}"], - "Nextcloud Mail" : "Nextcloud E-post", - "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Det finns redan ett aktivt meddelande. Ej sparade ändringar kommer att förloras! ", + "Nextcloud Mail" : "Nextcloud Mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Ett meddelande redigeras redan. Alla osparade ändringar går förlorade om du fortsätter.", "Discard changes" : "Släng ändringar", - "Discard unsaved changes" : "Kassera ej sparade ändringar", + "Discard unsaved changes" : "Kassera osparade ändringar", "Keep editing message" : "Fortsätt uppdatera meddelande", "Attachments were not copied. Please add them manually." : "Bifogade filer kopierades inte, lägg till dem manuellt.", - "Could not create snooze mailbox" : "Kunde inte skapa \"Snooze\" mailbox", - "Sending message…" : "Skickar meddelande...", + "Could not create snooze mailbox" : "Det gick inte att skapa mappen för uppskjutna meddelanden", + "Sending message…" : "Skickar meddelandet …", "Message sent" : "Meddelande skickat", - "Could not send message" : "Meddelande kunde inte skickas", - "Message copied to \"Sent\" folder" : "Meddelande kopierat till \"Skickat\" mappen", - "Could not copy message to \"Sent\" folder" : "Kunde inte kopiera meddelande till \"Skickat\" mappen", - "Could not load {tag}{name}{endtag}" : "Kunde inte läsa in {tag}{name}{endtag}", - "There was a problem loading {tag}{name}{endtag}" : "Det uppstod ett problem vis inläsning av {tag}{name}{endtag}", - "Could not load your message" : "Kunde inte läsa in ditt meddelande", - "Could not load the desired message" : "Kunde inte läsa in önskat meddelande", - "Could not load the message" : "Kunde inte läsa in meddelandet", + "Could not send message" : "Det gick inte att skicka meddelandet", + "Message copied to \"Sent\" folder" : "Meddelandet kopierades till mappen ”Skickat”", + "Could not copy message to \"Sent\" folder" : "Det gick inte att kopiera meddelandet till mappen ”Skickat”", + "Could not load {tag}{name}{endtag}" : "Det gick inte att läsa in {tag}{name}{endtag}", + "There was a problem loading {tag}{name}{endtag}" : "Ett problem uppstod när {tag}{name}{endtag} lästes in", + "Could not load your message" : "Det gick inte att läsa in ditt meddelande", + "Could not load the desired message" : "Det gick inte att läsa in det önskade meddelandet", + "Could not load the message" : "Det gick inte att läsa in meddelandet", "Error loading message" : "Fel vid inläsning av meddelande", - "Determine importance using machine learning" : "Avgör vikt med maskininlärning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Meddelanden kommer automatiskt att markeras som viktiga baserat på vilka meddelanden du interagerade med eller har markerat som viktiga. I början kan du behöva ändra vikten manuellt, men det kommer att förbättras med tiden.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Meddelanden som du skickat och som kräver svar men inte fått något efter ett par dagar visas här.", - "Mark all messages of this folder as read" : "Markera alla meddelanden i den här mappen som lästa", - "Last 7 days" : "Senaste 7 dagarna", - "From me" : "Från mig" + "Add share link from Files" : "Lägg till delningslänk från Filer", + "Choose a file to add as attachment" : "Välj en fil att lägga som bilaga", + "Choose a file to share as a link" : "Välj en fil att dela som länk", + "Delegated access to {userId}" : "Åtkomst delegerades till {userId}", + "Revoked access for {userId}" : "Åtkomsten återkallades för {userId}" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/sv.json b/l10n/sv.json index 2c343bc8a3..49dcc1d1f5 100644 --- a/l10n/sv.json +++ b/l10n/sv.json @@ -12,19 +12,23 @@ "Mail" : "E-post", "You are reaching your mailbox quota limit for {account_email}" : "Du närmar dig din kvot för {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Du använder för närvarande {percentage}av din allokerade datamängd. Frigör utrymme genom att radera onödiga e-postmeddelanden.", - "Mail Application" : "E-post app", + "{account_email} has been delegated to you" : "{account_email} har delegerats till dig", + "{user} delegated {account} to you" : "{user} delegerade {account} till dig", + "{account_email} is no longer delegated to you" : "{account_email}är inte längre delegerat till dig", + "{user} revoked delegation for {account}" : "{user} återkallade delegation för {account}", + "Mail Application" : "E-postapp", "Mails" : "E-post", - "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Avsändarens e-post adress: %1$s finns inte i adressboken, men avsändarens namn: %2$sfinns i adressboken med följande e-postadress: %3$s", - "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Avsändarens e-post adress: %1$s finns inte i adressboken, men avsändarens namn: %2$sfinns i adressboken med följande e-postadresser: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Avsändarens e-postadress %1$s finns inte i adressboken, men avsändarnamnet %2$s finns där med följande e-postadress: %3$s", + "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Avsändarens e-postadress %1$s finns inte i adressboken, men avsändarnamnet %2$s finns där med följande e-postadresser: %3$s", "Sender is using a custom email: %1$s instead of the sender email: %2$s" : "Avsändaren använder en anpassad e-postadress: %1$s istället för avsändarens e-postadress: %2$s", "Sent date is in the future" : "Skickat datum är i framtiden", "Mail server marked this message as phishing attempt" : "E-postservern markerade detta meddelande som ett försök till nätfiske", "Some addresses in this message are not matching the link text" : "Vissa adresser i det här meddelandet matchar inte länktexten", - "Reply-To email: %1$s is different from sender email: %2$s" : "Svara-till epost-adress: %1$s skiljer sig från avsändarens e-postadress: %2$s", + "Reply-To email: %1$s is different from sender email: %2$s" : "Svarsadressen %1$s skiljer sig från avsändarens e-postadress %2$s", "Mail connection performance" : "Prestanda för e-postanslutning", "Slow mail service detected (%1$s) an attempt to connect to several accounts took an average of %2$s seconds per account" : "Långsam e-posttjänst upptäckt (%1$s). Vid ett försök att ansluta till flera konton tog i genomsnitt %2$s sekunder per konto", "Slow mail service detected (%1$s) an attempt to perform a mail box list operation on several accounts took an average of %2$s seconds per account" : "Långsam e-posttjänst upptäckt (%1$s). Vid ett försök att utföra en postlådelistning på flera konton tog i genomsnitt %2$s sekunder per konto", - "Mail Transport configuration" : "Mail Transport konfiguration", + "Mail Transport configuration" : "Konfiguration av e-posttransport", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "Inställningen \"app.mail.transport\" är inte inställd som smtp. Den här konfigurationen kan orsaka problem med moderna e-postsäkerhetsåtgärder som SPF och DKIM eftersom e-postmeddelanden skickas direkt från webbservern, som ofta inte är korrekt konfigurerad för detta ändamål. För att åtgärda detta har stödet för e-posttransport upphört. Ta bort \"app.mail.transport\" från din konfiguration för att använda SMTP-transport och dölja det här meddelandet. En korrekt konfigurerad SMTP-konfiguration krävs för att säkerställa e-postleverans.", "Mail account parameters, aliases and preferences" : "Parametrar, alias och inställningar för e-postkonto", "💌 A mail app for Nextcloud" : "En e-post-app för Nextcloud", @@ -42,7 +46,7 @@ "Save" : "Spara", "Connect" : "Anslut", "Looking up configuration" : "Kontrollerar konfiguration", - "Checking mail host connectivity" : "Kontrollerar kontakt med e-post server", + "Checking mail host connectivity" : "Kontrollerar anslutningen till e-postservern", "Configuration discovery failed. Please use the manual settings" : "Automatisk konfiguration misslyckades. Använd manuell inställning", "Password required" : "Lösenord krävs", "Testing authentication" : "Testar autentisering", @@ -66,7 +70,7 @@ "Authorization pop-up closed" : "Popup-fönstret för auktorisering stängt", "Configuration discovery temporarily not available. Please try again later." : "Konfigurationsidentifiering är inte tillgänglig för tillfälligt . Försök igen senare.", "There was an error while setting up your account" : "Det uppstod ett fel när ditt konto skulle skapas", - "Auto" : "Auto", + "Auto" : "Automatisk", "Name" : "Namn", "Mail address" : "E-postadress", "name@example.org" : "namn@example.org", @@ -89,7 +93,6 @@ "SMTP Port" : "SMTP-port", "SMTP User" : "SMTP-användare", "SMTP Password" : "SMTP-lösenord", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "För att Google-kontot ska fungera med den här appen måste du aktivera tvåfaktorsautentisering för Google och generera ett lösenord.", "Account settings" : "Kontoinställningar", "Aliases" : "Alias", "Alias to S/MIME certificate mapping" : "Alias ​​till S/MIME-certifikatmappning", @@ -111,15 +114,15 @@ "Quick actions" : "Snabbval", "Sieve script editor" : "Sieve skript editor", "Mail server" : "E-postserver", - "Sieve server" : "Sieve server", + "Sieve server" : "Sieve-server", "Folder search" : "Mappsökning", + "Email address" : "E-postadress", "Update alias" : "Uppdatera alias", "Rename alias" : "Ändra alias", "Show update alias form" : "Visa uppdateringsformulär för alias", "Delete alias" : "Radera alias", "Go back" : "Gå tillbaka", "Change name" : "Byt namn", - "Email address" : "E-postadress", "Add alias" : "Lägg till alias", "Create alias" : "Skapa alias", "Cancel" : "Avbryt", @@ -127,10 +130,11 @@ "Activate" : "Aktivera", "Remind about messages that require a reply but received none" : "Påminnelse om meddelanden som kräver ett svar men där inget har mottagits", "Highlight external addresses" : "Markera externa adresser", - "Could not update preference" : "Kunde inte uppdatera inställningar", + "Could not update preference" : "Det gick inte att uppdatera inställningen", "Mail settings" : "E-postinställningar", "General" : "Allmänt", - "Set as default mail app" : "Använd som standard e-post app", + "Set as default mail app" : "Använd som standardapp för e-post", + "{email} (delegated)" : "{email} (delegerat)", "Add mail account" : "Lägg till e-postkonto", "Appearance" : "Utseende", "Show all messages in thread" : "Visa alla meddelanden i tråden", @@ -145,20 +149,23 @@ "Sorting" : "Sortering", "Newest first" : "Nyast först", "Oldest first" : "Äldst först", + "New text block" : "Nytt textblock", + "Title of the text block" : "Namn", + "Content of the text block" : "Innehåll", + "Ok" : "OK", "Avatars from Gravatar and favicons" : "Avatars från gravatar och favicons", "Reply position" : "Positionera svar", "Top" : "Topp", "Bottom" : "Botten", - "Text blocks" : "Text blocks", + "Text blocks" : "Textblock", "Reusable pieces of text that can be inserted in messages" : "Återanvändningsbara block av text som kan importeras i meddelanden", - "New text block" : "Nytt text block", "Shared with me" : "Delat med mig", "Privacy" : "Integritet", "Data collection" : "Data insamling", "Allow the app to collect and process data locally to adapt to your preferences" : "Tillåt insamling och hantering av data lokalt för att implementera inställningar", "Always show images from" : "Visa alltid bilder från", "Security" : "Säkerhet", - "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Hantera interna adresser och domäner så att kända kontakter ej markeras", + "Manage your internal addresses and domains to ensure recognized contacts stay unmarked" : "Hantera interna adresser och domäner så att kända kontakter inte markeras", "S/MIME" : "S/MIME", "Manage certificates" : "Hantera certifikat", "Mailvelope" : "Mailvelope", @@ -179,16 +186,16 @@ "Search" : "Sök", "Send" : "Skicka", "Refresh" : "Uppdatera", + "Heading1" : "Rubrik1", + "Heading2" : "Rubrik2", + "Heading3" : "Rubrik3", "About" : "Om", "Acknowledgements" : "Tillkännagivanden", - "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Denna applikation inkluderar CKE editor, en open-source editor. Copyright © CKEditor contributors. Licens enligt GPLv2.", - "Title of the text block" : "Namn", - "Content of the text block" : "Innehåll", - "Ok" : "Ok", + "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Den här appen innehåller CKEditor, en redigerare med öppen källkod. Copyright © CKEditor-bidragsgivarna. Licensierad under GPLv2.", "Automatically create tentative appointments in calendar" : "Skapa automatiskt preliminära möten i kalendern", "No certificate" : "Certifikat saknas", "Certificate updated" : "Certifikat uppdaterat", - "Could not update certificate" : "Kunde inte uppdatera certifikat", + "Could not update certificate" : "Det gick inte att uppdatera certifikat", "{commonName} - Valid until {expiryDate}" : "{commonName} - Giltigt tills {expiryDate}", "Select an alias" : "Välj ett alias", "Select certificates" : "Välj certifikat", @@ -210,7 +217,7 @@ "To" : "Till", "Cc/Bcc" : "Cc/Bcc", "Select recipient" : "Välj mottagare", - "Contact or email address …" : "Kontakt eller e-post adress …", + "Contact or email address …" : "Kontakt eller e-postadress …", "Cc" : "Cc", "Bcc" : "Bcc", "Subject" : "Ämne", @@ -220,7 +227,7 @@ "The following recipients do not have a PGP key: {recipients}." : "Följande mottagare har ingen PGP-nyckel: {recipients}.", "Write message …" : "Skriv meddelande …", "Saving draft …" : "Sparar utkast...", - "Error saving draft" : "Kunde inte spara utkast", + "Error saving draft" : "Det gick inte att spara utkastet", "Draft saved" : "Utkast sparat", "Save draft" : "Spara utkast", "Discard & close draft" : "Stäng och radera utkast", @@ -228,8 +235,7 @@ "Disable formatting" : "Inaktivera formatering", "Upload attachment" : "Ladda upp bilaga", "Add attachment from Files" : "Lägg till bilaga från Filer", - "Add share link from Files" : "Lägg till delningslänk från Filer", - "Smart picker" : "Smart picker", + "Smart picker" : "Smartväljare", "Request a read receipt" : "Begär läskvitto", "Sign message with S/MIME" : "Signera meddelande med S/MIME", "Encrypt message with S/MIME" : "Kryptera meddelande med S/MIME", @@ -240,19 +246,34 @@ "Monday morning" : "Måndag morgon", "Custom date and time" : "Anpassat datum och tid", "Enter a date" : "Ange datum", - "Choose" : "Välj", - "Choose a file to add as attachment" : "Välj en fil att lägga som bilaga", - "Choose a file to share as a link" : "Välj en fil att dela som länk", + "Remove attachment {fileName}" : "Ta bort bilaga {fileName}", + "Choose a file" : "Välj en fil", "_{count} attachment_::_{count} attachments_" : ["{count} bilaga","{count} bilagor"], "Untitled message" : "Namnlöst meddelande", "Confirm" : "Bekräfta", + "Delegate access" : "Delegera behörighet", + "Revoke" : "Återkalla", + "{userId} will no longer be able to act on your behalf" : "{userId} kommer inte längre att kunna agera för din räkning", + "Could not fetch delegates" : "Det gick inte att hämta ombud", + "Delegated access to {displayName}" : "Delegerad åtkomst till {displayName}", + "Could not delegate access" : "Det gick inte att delegera åtkomst", + "Revoked access for {displayName}" : "Återkallade tillgång för {displayName}", + "Could not revoke delegation" : "Det gick inte att återkalla delegeringen", + "Delegation" : "Delegering", + "Allow users to send, receive, and delete mail on your behalf" : "Låt användare skicka, ta emot och radera e-post åt dig", + "Revoke access" : "Återkalla åtkomst", + "Add delegate" : "Lägg till delegering", + "Select a user" : "Välj en användare", + "They will be able to send, receive, and delete mail on your behalf" : "De kommer att kunna skicka, ta emot och radera post åt dig", + "Revoke access?" : "Återkalla åtkomst?", "Tag: {name} deleted" : "Tagg: {name} borttagen", "An error occurred, unable to delete the tag." : "Ett fel uppstod, det gick inte att ta bort taggen.", "The tag will be deleted from all messages." : "Taggen kommer att raderas från alla meddelanden.", "Plain text" : "Oformaterad text", "Rich text" : "Formaterad text", - "No messages in this folder" : "Inga meddelanden i denna mapp", + "No messages in this folder" : "Det finns inga meddelanden i den här mappen", "No messages" : "Inga meddelanden", + "Choose" : "Välj", "Blind copy recipients only" : "Endast mottagare för blindkopior", "No subject" : "Ingen ämnesrad", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Utkast:{markup-end} {subject}", @@ -261,17 +282,17 @@ "Tomorrow – {timeLocale}" : "Imorgon – {timeLocale}", "Set reminder for tomorrow" : "Ställ in påminnelse för imorgon", "This weekend – {timeLocale}" : "Den här helgen – {timeLocale}", - "Set reminder for this weekend" : "Ställ in påminnelse för denna helg", + "Set reminder for this weekend" : "Ange en påminnelse för den här helgen", "Next week – {timeLocale}" : "Nästa vecka – {timeLocale}", "Set reminder for next week" : "Ställ in påminnelse för nästa vecka", - "Could not apply tag, configured tag not found" : "Kunde inte tillämpa taggen, konfigurerad tagg hittades inte", - "Could not move thread, destination mailbox not found" : "Kunde inte flytta tråden, destinationsbrevlådan hittades inte", - "Could not execute quick action" : "Kunde inte utföra snabbval", + "Could not apply tag, configured tag not found" : "Det gick inte att använda taggen eftersom den konfigurerade taggen inte hittades", + "Could not move thread, destination mailbox not found" : "Det gick inte att flytta tråden eftersom målmappen inte hittades", + "Could not execute quick action" : "Det gick inte att utföra snabbåtgärden", "Quick action executed" : "Snabbval utfört", "No trash folder configured" : "Ingen mapp för papperskorgen är konfigurerad", - "Could not delete message" : "Kunde inte radera meddelande", - "Could not archive message" : "Kunde inte arkivera meddelandet", - "This summary was AI generated" : "Denna sammanfattning är AI genererad ", + "Could not delete message" : "Det gick inte att ta bort meddelandet", + "Could not archive message" : "Det gick inte att arkivera meddelandet", + "This summary was AI generated" : "Den här sammanfattningen har genererats av AI", "Encrypted message" : "Krypterat meddelande", "This message is unread" : "Det här meddelandet är oläst", "Unfavorite" : "Inte favorit", @@ -279,21 +300,21 @@ "Unread" : "Oläst", "Read" : "Läs", "Unimportant" : "Oviktigt", - "Mark not spam" : "Markera som ej skräppost", + "Mark not spam" : "Markera som inte skräppost", "Mark as spam" : "Markera som skräppost", "Edit tags" : "Redigera taggar", "Move thread" : "Flytta tråd", "Move Message" : "Flytta meddelande", "Archive thread" : "Arkivera tråd", "Archive message" : "Arkivera meddelandet", - "Delete thread" : "Radera tråd", - "Delete message" : "Radera meddelande", "More actions" : "Fler händelser", "Back" : "Tillbaka", "Edit as new message" : "Redigera som nytt meddelande", "Reply with meeting" : "Svara med möte", "Create task" : "Skapa uppgift", "Download message" : "Hämta meddelande", + "Delete thread" : "Radera tråd", + "Delete message" : "Radera meddelande", "Back to all actions" : "Tillbaka", "Manage quick actions" : "Hantera snabbval", "Load more" : "Ladda mer", @@ -310,8 +331,9 @@ "Mark as important" : "Markera som viktigt", "Report this bug" : "Rapportera detta fel", "Event created" : "Evenemang skapat", - "Could not create event" : "Kunde inte skapa händelse", + "Could not create event" : "Det gick inte att skapa händelsen", "Create event" : "Skapa evenemang", + "Title" : "Titel", "All day" : "Hela dagen", "Attendees" : "Deltagare", "You can only invite attendees if your account has an email address set" : "Deltagare kan bara bjudas in om kontot har en e-postadress", @@ -325,7 +347,7 @@ "{attendeeName} reacted to your invitation" : "{attendeeName} har reagerat på din inbjudan", "Failed to save your participation status" : "Det gick inte att spara din deltagarstatus", "You accepted this invitation" : "Du tackade ja till den här inbjudan", - "You tentatively accepted this invitation" : "Du accepterade preliminärt denna inbjudan", + "You tentatively accepted this invitation" : "Du svarade preliminärt ja på den här inbjudan", "You declined this invitation" : "Du tackade nej till den här inbjudan", "You already reacted to this invitation" : "Du har redan svarat på den här inbjudan", "You have been invited to an event" : "Du har blivit inbjuden till ett evenemang", @@ -339,18 +361,18 @@ "More options" : "Fler alternativ", "This message has an attached invitation but the invitation dates are in the past" : "Det här meddelandet har en bifogad inbjudan men inbjudningsdatumen har redan varit", "This message has an attached invitation but the invitation does not contain a participant that matches any configured mail account address" : "Det här meddelandet har en bifogad inbjudan, men inbjudan innehåller ingen deltagare som matchar någon konfigurerad e-postadress.", - "Could not remove internal address {sender}" : "Kunde inte ta bort den interna adressen: {sender}", - "Could not add internal address {address}" : "Kunde inte lägga till intern adress: {address}", + "Could not remove internal address {sender}" : "Det gick inte att ta bort den interna adressen {sender}", + "Could not add internal address {address}" : "Det gick inte att lägga till den interna adressen {address}", "individual" : "individ", "domain" : "domän", "Remove" : "Ta bort", "Add internal address" : "Lägg till intern adress", - "Add internal email or domain" : "Lägg till intern e-post eller domän", + "Add internal email or domain" : "Lägg till intern e-postadress eller domän", "Itinerary for {type} is not supported yet" : "Resplan för {type} stöds inte än", "To archive a message please configure an archive folder in account settings" : "För att arkivera ett meddelande, konfigurera en arkivmapp i kontoinställningarna", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "Du har inte behörighet att flytta det här meddelandet till arkivmappen och/eller ta bort det här meddelandet från den aktuella mappen.", "Your IMAP server does not support storing the seen/unseen state." : "Din IMAP-server stöder inte lagring av status för \"seen/unseen\".", - "Could not mark message as seen/unseen" : "Kunde inte markera meddelandet som \"seen/unseen\"", + "Could not mark message as seen/unseen" : "Det gick inte att markera meddelandet som läst eller oläst", "Last hour" : "Senaste timmen", "Today" : "Idag", "Yesterday" : "I går", @@ -371,17 +393,19 @@ "Load more important messages" : "Hämta fler viktiga meddelanden", "Other" : "Övrigt", "Load more other messages" : "Hämta fler andra meddelanden", - "Could not send mdn" : "Kunde inte skicka mdn", + "Could not send mdn" : "Det gick inte att skicka läskvittot", "The sender of this message has asked to be notified when you read this message." : "Avsändaren av detta meddelande har bett om att bli meddelad när du läser det.", "Notify the sender" : "Meddela avsändaren", "You sent a read confirmation to the sender of this message." : "Du har skickat ett läskvitto till meddelandets avsändare.", + "Direct link copied to clipboard" : "Direktlänk kopierad till urklipp", "Forward" : "Vidarebefordra", + "Link copied" : "Länken har kopierats", "Move message" : "Flytta meddelande", "Translate" : "Översätt", "Forward message as attachment" : "Vidarebefordra medelande som bilaga", "View source" : "Visa källa", "Print message" : "Skriv ut meddelande", - "Create mail filter" : "Skapa e-post filter", + "Create mail filter" : "Skapa e-postfilter", "Download thread data for debugging" : "Hämta tråddata för felsökning", "Message body" : "Meddelandetext", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Varning: S/MIME-signaturen för det här meddelandet är overifierad. Avsändaren kan utge sig för att vara någon annan!", @@ -399,7 +423,7 @@ "View fewer attachments" : "Visa färre bilagor", "Choose a folder to store the attachments in" : "Välj en mapp att spara bifogade filer i", "Save all to Files" : "Spara alla i filer", - "Download Zip" : "Ladda ner arkiv", + "Download Zip" : "Hämta ZIP-arkiv", "This message is encrypted with PGP. Install Mailvelope to decrypt it." : "Detta meddelande är krypterat med PGP. Installera \"Mailvelope\" för att dekryptera det.", "The images have been blocked to protect your privacy." : "Bilderna har blockerats av säkerhetsskäl.", "Show images" : "Visa bilder", @@ -414,13 +438,16 @@ "Moving message" : "Flyttar meddelande", "This account cannot connect" : "Det här kontot kan inte ansluta", "Connection failed. Please verify your information and try again" : "Anslutningen misslyckades. Verifiera din information och försök igen.", + "Change password" : "Byt lösenord", "Used quota: {quota}% ({limit})" : "Använt utrymme: {quota}% ({limit})", "Used quota: {quota}%" : "Använt utrymme: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Det gick inte att skapa postlådan. Namnet innehåller troligen ogiltiga tecken. Försök med ett annat namn.", "Remove account" : "Ta bort konto", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "Kontot för {email} och sparat e-postdata kommer att tas bort från Nextcloud, men inte från din e-postleverantör.", "Remove {email}" : "Ta bort {email}", + "could not delete account" : "det gick inte att ta bort kontot", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Logga in med ett lösenord för att aktivera det här kontot. Den aktuella sessionen använder lösenordsfri autentisering, t.ex. SSO eller WebAuthn.", + "Delegate account" : "Delegera konto", "Show only subscribed folders" : "Visa endast mappar som du prenumererar på", "Add folder" : "Lägg till mapp", "Folder name" : "Mappnamn", @@ -458,8 +485,8 @@ "Draft" : "Utkast", "Reply" : "Svara", "Message saved" : "Meddelande sparat", - "Failed to save message" : "Meddelande kunde inte sparas", - "Failed to save draft" : "Kunde inte spara utkast", + "Failed to save message" : "Det gick inte att spara meddelandet", + "Failed to save draft" : "Det gick inte att spara utkastet", "attachment" : "bilaga", "attached" : "bifogad", "No \"sent\" folder configured. Please pick one in the account settings." : "Ingen mapp för \"skickat\" har konfigurerats. Välj en i kontoinställningarna.", @@ -467,7 +494,7 @@ "Your message has no subject. Do you want to send it anyway?" : "Ditt meddelande har inget ämne. Vill du skicka det ändå?", "You mentioned an attachment. Did you forget to add it?" : "Du nämnde en bilaga. Glömde du att lägga till den?", "Message discarded" : "Meddelandet har kasserats", - "Could not discard message" : "Meddelandet kunde inte kasseras", + "Could not discard message" : "Det gick inte att kassera meddelandet", "Maximize composer" : "Maximera editor", "Show recipient details" : "Visa mottagarens detaljer", "Hide recipient details" : "Dölj mottagarens detaljer", @@ -489,11 +516,11 @@ "Message" : "Meddelande", "Oh Snap!" : "Hoppsan!", "Save autoresponder" : "Spara autosvar", - "Could not open outbox" : "Kunde inte öppna utkorgen", - "Pending or not sent messages will show up here" : "Väntande eller ej skickade meddelanden visas här", - "Could not copy to \"Sent\" folder" : "Kunde inte kopiera till mappen \"Skickat\"", + "Could not open outbox" : "Det gick inte att öppna utkorgen", + "Pending or not sent messages will show up here" : "Väntande eller oskickade meddelanden visas här", + "Could not copy to \"Sent\" folder" : "Det gick inte att kopiera till mappen ”Skickat”", "Mail server error" : "Server fel", - "Message could not be sent" : "Meddelande kunde inte skickas", + "Message could not be sent" : "Det gick inte att skicka meddelandet", "Message deleted" : "Meddelande borttaget", "Copy to \"Sent\" Folder" : "Kopiera till mappen \"Skickat\"", "Copy to Sent Folder" : "Kopiera till mappen Skickat", @@ -503,7 +530,7 @@ "Show suspicious links" : "Visa misstänkta länkar", "link text" : "länk text", "Copied email address to clipboard" : "E-postadress kopierad till urklipp", - "Could not copy email address to clipboard" : "Kunde inte kopiera e-postadressen till urklipp", + "Could not copy email address to clipboard" : "Det gick inte att kopiera e-postadressen till urklipp", "Contacts with this address" : "Kontakter med den här adressen", "Add to Contact" : "Lägg till i Kontakter", "New Contact" : "Ny kontakt", @@ -535,12 +562,12 @@ "Has attachment" : "Har bilaga", "To me" : "Till mig", "Enable mail body search" : "Aktivera sökning i meddelandetext", - "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve är ett kraftfullt språk för att skriva filter för din inkorg. Du kan hantera Sieve-skripten i Mail om din e-posttjänst stöder det. Sieve krävs också för att använda Autoresponder och Filter.", + "Sieve is a powerful language for writing filters for your mailbox. You can manage the sieve scripts in Mail if your email service supports it. Sieve is also required to use Autoresponder and Filters." : "Sieve är ett kraftfullt språk för att skapa filter för din brevlåda. Du kan hantera Sieve-skript i Mail om e-posttjänsten stöder det. Sieve krävs även för autosvar och filter.", "Enable sieve filter" : "Aktivera sieve filter", "Sieve host" : "Sieve server", "Sieve security" : "Sieve säkerhet", "Sieve Port" : "Sieve port", - "Sieve credentials" : "Sieve credentials", + "Sieve credentials" : "Sieve-inloggningsuppgifter", "IMAP credentials" : "IMAP inställningar", "Custom" : "Anpassad", "Sieve User" : "Sieve användare", @@ -553,7 +580,7 @@ "Save signature" : "Spara signatur", "Place signature above quoted text" : "Placera signaturen ovanför citerad text", "Message source" : "Meddelandekälla", - "An error occurred, unable to rename the tag." : "Ett fel uppstod, kunde inte byta taggens namn.", + "An error occurred, unable to rename the tag." : "Ett fel uppstod. Det gick inte att byta namn på taggen.", "Edit name or color" : "Redigera namn eller färg", "Saving new tag name …" : "Sparar nytt namn på tagg …", "Delete tag" : "Radera tagg", @@ -562,33 +589,37 @@ "Tag name is a hidden system tag" : "Taggnamnet är en dold systemtagg", "Tag already exists" : "Taggen finns redan", "Tag name cannot be empty" : "Taggnamnet får inte vara tomt", - "An error occurred, unable to create the tag." : "Ett fel uppstod, kunde inte spara taggen.", + "An error occurred, unable to create the tag." : "Ett fel uppstod. Det gick inte att skapa taggen.", "Add default tags" : "Lägg till standardtaggar", "Add tag" : "Lägg till tagg", "Saving tag …" : "Sparar tagg ...", "Task created" : "Uppgift skapad", - "Summarizing thread failed." : "Kunde inte skapa sammanfattning", + "Summarizing thread failed." : "Det gick inte att sammanfatta tråden.", "Could not load your message thread" : "Det gick inte att ladda meddelandetråden", "The thread doesn't exist or has been deleted" : "Tråden finns inte eller har raderats", - "Email was not able to be opened" : "E-post kunde inte öppnas", + "Email was not able to be opened" : "Det gick inte att öppna e-postmeddelandet", "Print" : "Skriv ut", - "Could not print message" : "Kunde inte skriva ut", + "Could not print message" : "Det gick inte att skriva ut meddelandet", "Loading thread" : "Hämta tråd", "Not found" : "Hittades inte", "Encrypted & verified " : "Krypterad och verifierad", "Signature verified" : "Signatur verifierad", - "Signature unverified " : "Signaturen ej verifierad", + "Signature unverified " : "Signaturen är inte verifierad", "This message was encrypted by the sender before it was sent." : "Detta meddelande krypterades av avsändaren innan det skickades.", "This message contains a verified digital S/MIME signature. The message wasn't changed since it was sent." : "Det här meddelandet innehåller en verifierad digital S/MIME signatur. Meddelandet har inte ändrats sedan det skickades.", "This message contains an unverified digital S/MIME signature. The message might have been changed since it was sent or the certificate of the signer is untrusted." : "Det här meddelandet innehåller en overifierad digital S/MIME signatur. Meddelandet kan ha ändrats sedan det skickades, eller så är certifikatet inte betrott.", "Reply all" : "Svara alla", "Unsubscribe request sent" : "Begäran om att avsluta prenumerationen har skickats", - "Could not unsubscribe from mailing list" : "Kunde inte avsluta prenumerationen från e-postlistan", + "Could not unsubscribe from mailing list" : "Det gick inte att avsluta prenumerationen på e-postlistan", "Please wait for the message to load" : "Vänta tills meddelandet hämtas", "Disable reminder" : "Inaktivera påminnelse", "Unsubscribe" : "Avsluta prenumeration", "Reply to sender only" : "Svara endast avsändaren", "Mark as favorite" : "Markera som favorit", + "From:" : "Från:", + "To:" : "Till:", + "Cc:" : "Cc:", + "Bcc:" : "Bcc:", "Unsubscribe via link" : "Avsluta prenumerationen via länk", "Unsubscribing will stop all messages from the mailing list {sender}" : "Om du avslutar prenumerationen stoppas alla meddelanden från e-postlistan {sender}", "Send unsubscribe email" : "Skicka e-postmeddelande för avregistrering", @@ -596,11 +627,11 @@ "Thread summary" : "Sammanfattning", "Go to latest message" : "Gå till senaste meddelandet", "Newest message" : "Nyaste meddelandet", - "This summary is AI generated and may contain mistakes." : "Denna sammanfattning är AI-genererad och kan innehålla fel.", + "This summary is AI generated and may contain mistakes." : "Den här sammanfattningen har genererats av AI och kan innehålla fel.", "Please select languages to translate to and from" : "Välj språk att översätta till och från", - "The message could not be translated" : "Meddelandet kunde inte översättas", + "The message could not be translated" : "Det gick inte att översätta meddelandet", "Translation copied to clipboard" : "Översättningen har kopierats till urklipp", - "Translation could not be copied" : "Översättningen kunde inte kopieras", + "Translation could not be copied" : "Det gick inte att kopiera översättningen", "Translate message" : "Översätt meddelande", "Source language to translate from" : "Språk att översätta från", "Translate from" : "Översätt från", @@ -609,7 +640,7 @@ "Translating" : "Översätter", "Copy translated text" : "Kopiera översatt text", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Inaktivera papperskorgen genom att lämna fältet tomt eller ställa in det på 0. Endast e-postmeddelanden som raderas efter att papperskorgen har aktiverats kommer att behandlas.", - "Could not remove trusted sender {sender}" : "Kunde inte ta bort betrodd avsändare: {sender}", + "Could not remove trusted sender {sender}" : "Det gick inte att ta bort den betrodda avsändaren {sender}", "No senders are trusted at the moment." : "Inga avsändare är betrodda för tillfället.", "Untitled event" : "Namnlös händelse", "(organizer)" : "(arrangör)", @@ -635,13 +666,13 @@ "Create a new mail filter" : "Skapa ett nytt e-postfilter", "Choose the headers you want to use to create your filter. In the next step, you will be able to refine the filter conditions and specify the actions to be taken on messages that match your criteria." : "Välj de rubriker du vill använda för att skapa ditt filter. I nästa steg kan du förfina filtervillkoren och ange de åtgärder som ska vidtas för meddelanden som matchar dina kriterier.", "Delete filter" : "Ta bort filter", - "Delete mail filter {filterName}?" : "Radera e-post filter {filterName}?", + "Delete mail filter {filterName}?" : "Ta bort e-postfiltret {filterName}?", "Are you sure to delete the mail filter?" : "Är du säker på att du vill ta bort e-postfiltret?", "New filter" : "Nytt filter", "Filter saved" : "Filtret är sparat", - "Could not save filter" : "Kunde inte spara filter", + "Could not save filter" : "Det gick inte att spara filtret", "Filter deleted" : "Filtret är raderat", - "Could not delete filter" : "Kunde inte radera filter", + "Could not delete filter" : "Det gick inte att ta bort filtret", "Take control of your email chaos. Filters help you to prioritize what matters and eliminate clutter." : "Ta kontroll över din e-post. Filter hjälper dig att prioritera det som är viktigt.", "Hang tight while the filters load" : "Vänta medans filtren laddas.", "Filter is active" : "Filtret är aktivt", @@ -668,81 +699,81 @@ "Edit quick action" : "Uppdatera snabbval", "Add quick action" : "Lägg till snabbval", "Quick action deleted" : "Snabbval borttaget", - "Failed to delete quick action" : "Kunde inte ta bort snabbval", - "Failed to update quick action" : "Kunde inte uppdatera snabbval", + "Failed to delete quick action" : "Det gick inte att ta bort snabbåtgärden", + "Failed to update quick action" : "Det gick inte att uppdatera snabbåtgärden", "Failed to update step in quick action" : "Misslyckades med att uppdatera steg i snabbval", "Quick action updated" : "Snabbval uppdaterat", - "Failed to create quick action" : "Kunde inte lägga till snabbval", - "Failed to add steps to quick action" : "Kunde inte lägga till steg i snabbval", + "Failed to create quick action" : "Det gick inte att skapa snabbåtgärden", + "Failed to add steps to quick action" : "Det gick inte att lägga till steg i snabbåtgärden", "Quick action created" : "Snabbval skapat", - "Failed to delete action step" : "Kunde inte ta bort steg", + "Failed to delete action step" : "Det gick inte att ta bort åtgärdssteget", "No quick actions yet." : "Snabbval saknas.", "Edit" : "Redigera", "Quick action name" : "Namn på snabbval", "Do the following actions" : "Utför följande åtgärder", "Add another action" : "Lägg till åtgärd", "Successfully updated config for \"{domain}\"" : "Uppdatering av konfiguration lyckades för \"{domain}\"", - "Error saving config" : "Konfiguration kunde inte sparas", + "Error saving config" : "Det gick inte att spara konfigurationen", "Saved config for \"{domain}\"" : "Sparade konfiguration för \"{domain}\"", - "Could not save default classification setting" : "Kunde inte spara standardinställning för klassificering", - "Mail app" : "Mail-app", - "The mail app allows users to read mails on their IMAP accounts." : "Mail-appen tillåter användare att läsa e-post på sina IMAP-konton.", + "Could not save default classification setting" : "Det gick inte att spara standardinställningen för klassificering", + "Mail app" : "Mail-appen", + "The mail app allows users to read mails on their IMAP accounts." : "Mail-appen gör det möjligt för användare att läsa e-post från sina IMAP-konton.", "Here you can find instance-wide settings. User specific settings are found in the app itself (bottom-left corner)." : "Här hittar du övergripande inställningar för varje instans. Användarspecifika inställningar finns i själva appen (nedre vänstra hörnet).", "Should a new matching configuration be found after the user was already provisioned with another configuration, the new configuration will take precedence and the user will be reprovisioned with the configuration." : "Om en ny matchande konfiguration hittas efter att användaren redan har etablerats med en annan konfiguration, kommer den nya konfigurationen att prioriteras och användaren kommer att uppdateras med konfigurationen.", "There can only be one configuration per domain and only one wildcard domain configuration." : "Det kan bara finnas en konfiguration per domän och endast en domänkonfiguration med jokertecken (*).", - "These settings can be used in conjunction with each other." : "These settings can be used in conjunction with each other.", + "These settings can be used in conjunction with each other." : "Dessa inställningar kan användas tillsammans.", "If you only want to provision one domain for all users, use the wildcard (*)." : "Om du bara vill använda en domän för alla användare använder du jokertecknet (*).", - "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Den här inställningen är bara mest meningsfull om du använder samma \"backend\" för din Nextcloud och e-postserver i din organisation.", + "This setting only makes most sense if you use the same user back-end for your Nextcloud and mail server of your organization." : "Den här inställningen är främst användbar om organisationens Nextcloud- och e-postserver använder samma användarbakände.", "Add new config" : "Lägg till ny konfiguration", - "Provision all accounts" : "Provision all accounts", + "Provision all accounts" : "Provisionera alla konton", "Allow additional mail accounts" : "Tillåt ytterligare e-postkonton", "Allow additional Mail accounts from User Settings" : "Tillåt ytterligare e-postkonton från användarinställningar", "Enable text processing through LLMs" : " Aktivera textbearbetning via LLM", - "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas.", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Mail-appen kan behandla användardata med hjälp av den konfigurerade stora språkmodellen och erbjuda funktioner som trådsammanfattningar, smarta svar och mötesagendor.", "Enable LLM processing" : "Aktivera LLM bearbetning", "Enable classification by importance by default" : "Aktivera klassificering efter vikt som standard", - "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "E-postappen kan klassificera inkommande e-postmeddelanden med hjälp av maskininlärning. Den här funktionen är aktiverad som standard men kan inaktiveras. Enskilda användare kommer fortfarande att kunna aktivera och deaktivera funktionen för sina konton.", + "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Mail-appen kan klassificera inkommande e-post efter hur viktig den är med hjälp av maskininlärning. Funktionen är aktiverad som standard, men standardläget kan ändras här. Enskilda användare kan fortfarande slå på eller av funktionen för sina konton.", "Enable classification of important mails by default" : "Aktivera klassificering av viktiga e-postmeddelanden som standard", - "Anti Spam Service" : "Anti Spam tjänst", + "Anti Spam Service" : "Antispamtjänst", "You can set up an anti spam service email address here." : "Du kan skapa en e-postadress för anti-spam-tjänsten här.", "Any email that is marked as spam will be sent to the anti spam service." : "Alla e-postmeddelanden som markeras som skräppost skickas till anti-skräpposttjänsten.", - "Gmail integration" : "Gmail integration", - "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail tillåter användare att komma åt sin e-post via IMAP. Av säkerhetsskäl är denna åtkomst endast möjlig med en OAuth 2.0-anslutning eller Google-konton som använder tvåfaktorsautentisering och lösenord.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : " Du måste registrera ett nytt klient-ID för en \"webbapplikation\" i Google Cloud-konsolen. Lägg till URL:en {url} som auktoriserad omdirigerings-URI.", - "Microsoft integration" : "Microsoft integration", - "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft kräver att du kommer åt dina e-postmeddelanden via IMAP med OAuth 2.0-autentisering. För att göra detta måste du registrera med Microsoft Entra ID, tidigare känt som Microsoft Azure Active Directory.", + "Gmail integration" : "Gmail-integrering", + "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail låter användare komma åt sin e-post via IMAP. Av säkerhetsskäl krävs antingen en OAuth 2.0-anslutning eller ett Google-konto med tvåfaktorsautentisering och ett applösenord.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Du måste registrera ett nytt klient-ID för en ”webbapp” i Google Cloud-konsolen. Lägg till URL:en {url} som auktoriserad omdirigerings-URI.", + "Microsoft integration" : "Microsoft-integrering", + "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft kräver att du använder OAuth 2.0-autentisering för att komma åt e-post via IMAP. Registrera därför en app i Microsoft Entra ID, tidigare Microsoft Azure Active Directory.", "Redirect URI" : "Omdirigerings URL", "For more details, please click here to open our documentation." : "För mer information, klicka här för att öppna dokumentationen.", "User Interface Preference Defaults" : "Standardinställningar för användargränssnitt", "These settings are used to pre-configure the user interface preferences they can be overridden by the user in the mail settings" : "Dessa inställningar används för att förkonfigurera användargränssnittets inställningar. De kan ändras av användaren i e-postinställningarna.", "Show only the selected message" : "Visa endast det valda meddelandet", - "Successfully set up anti spam email addresses" : "Antispam e-post adress har sparas", - "Error saving anti spam email addresses" : "Antispam e-post adress kunde inte sparas", - "Successfully deleted anti spam reporting email" : "E-postmeddelande om skräppost rapportering raderat", - "Error deleting anti spam reporting email" : "Fel vid borttagning av e-postmeddelande om skräppost rapportering", - "Anti Spam" : "Anti Spam", - "Add the email address of your anti spam report service here." : "Lägg till e-postadressen till din anti spam rapporteringstjänst här.", + "Successfully set up anti spam email addresses" : "Antispamadresserna har konfigurerats", + "Error saving anti spam email addresses" : "Det gick inte att spara antispamadresserna", + "Successfully deleted anti spam reporting email" : "E-postadressen för skräppostrapportering har tagits bort", + "Error deleting anti spam reporting email" : "Det gick inte att ta bort e-postadressen för skräppostrapportering", + "Anti Spam" : "Antispam", + "Add the email address of your anti spam report service here." : "Lägg till e-postadressen till tjänsten för skräppostrapportering här.", "When using this setting, a report email will be sent to the SPAM report server when a user clicks \"Mark as spam\"." : "Om aktiverad, skickas ett rapportmeddelande till SPAM-rapportservern när en användare klickar på \"Markera som skräppost\".", "The original message will be attached as a \"message/rfc822\" attachment." : "Det ursprungliga meddelandet kommer att bifogas som en bilaga av typen \"message/rfc822\".", - "\"Mark as Spam\" Email Address" : "\"Markera som Spam\" e-post adress", - "\"Mark Not Junk\" Email Address" : "\"Markera som ej skräp\" e-post adress", + "\"Mark as Spam\" Email Address" : "E-postadress för ”Markera som skräppost”", + "\"Mark Not Junk\" Email Address" : "E-postadress för ”Markera som inte skräppost”", "Reset" : "Återställ", - "Google integration configured" : "Google-integration konfigurerad", - "Could not configure Google integration" : "Kunde inte konfigurera Google-integration ", - "Google integration unlinked" : "Google-integration har tagits bort", - "Could not unlink Google integration" : "Kunde inte ta bort Google-integration", + "Google integration configured" : "Google-integrationen har konfigurerats", + "Could not configure Google integration" : "Det gick inte att konfigurera Google-integrationen", + "Google integration unlinked" : "Google-integrationen har kopplats från", + "Could not unlink Google integration" : "Det gick inte att koppla från Google-integrationen", "Client ID" : "Klient-ID", "Client secret" : "Klienthemlighet", - "Unlink" : "Unlink", - "Microsoft integration configured" : "Microsoft integration konfigurerad", - "Could not configure Microsoft integration" : "Kunde inte konfigurera Microsoft integration ", - "Microsoft integration unlinked" : "Microsoft-integration har tagits bort", - "Could not unlink Microsoft integration" : "Kunde inte ta bort Microsoft-integration", - "Domain Match: {provisioningDomain}" : "Domain Match: {provisioningDomain}", + "Unlink" : "Koppla från", + "Microsoft integration configured" : "Microsoft-integrationen har konfigurerats", + "Could not configure Microsoft integration" : "Det gick inte att konfigurera Microsoft-integrationen", + "Microsoft integration unlinked" : "Microsoft-integrationen har kopplats från", + "Could not unlink Microsoft integration" : "Det gick inte att koppla från Microsoft-integrationen", + "Domain Match: {provisioningDomain}" : "Domänmatchning: {provisioningDomain}", "Email: {email}" : "E-post: {email}", - "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} på {host}:{port} ({ssl}-krypterat)", - "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} på {host}:{port} ({ssl}-krypterat)", - "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} på {host}:{port} ({ssl} kryptering)", + "IMAP: {user} on {host}:{port} ({ssl} encryption)" : "IMAP: {user} på {host}:{port} ({ssl}-kryptering)", + "SMTP: {user} on {host}:{port} ({ssl} encryption)" : "SMTP: {user} på {host}:{port} ({ssl}-kryptering)", + "Sieve: {user} on {host}:{port} ({ssl} encryption)" : "Sieve: {user} på {host}:{port} ({ssl}-kryptering)", "Configuration for \"{provisioningDomain}\"" : "Konfiguration för \"{provisioningDomain}\"", "Provisioning domain" : "Provisioneringsdomän", "Email address template" : "Mall för e-postadress", @@ -754,58 +785,58 @@ "Master password" : "Huvudlösenord", "Use master password" : "Använd huvudlösenord", "Sieve" : "Sieve", - "Enable sieve integration" : "Aktivera sieve integration", - "LDAP aliases integration" : "LDAP aliases integration", - "Enable LDAP aliases integration" : "Aktivera LDAP aliases integration", - "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "LDAP-alias integrationen läser ett attribut från den konfigurerade LDAP-katalogen för att tillhandahålla e-post alias.", - "LDAP attribute for aliases" : "LDAP attribut för alias", - "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Ett attribut med flera värden för att tillhandahålla e-post alias. För varje värde skapas ett alias. Alias ​​som finns i Nextcloud och som inte finns i LDAP-katalogen raderas.", + "Enable sieve integration" : "Aktivera Sieve-integrering", + "LDAP aliases integration" : "LDAP-aliasintegrering", + "Enable LDAP aliases integration" : "Aktivera LDAP-aliasintegrering", + "The LDAP aliases integration reads an attribute from the configured LDAP directory to provision email aliases." : "LDAP-aliasintegreringen läser ett attribut från den konfigurerade LDAP-katalogen för att provisionera e-postalias.", + "LDAP attribute for aliases" : "LDAP-attribut för alias", + "A multi value attribute to provision email aliases. For each value an alias is created. Aliases existing in Nextcloud which are not in the LDAP directory are deleted." : "Ett flervärdesattribut för provisionering av e-postalias. Ett alias skapas för varje värde. Alias som finns i Nextcloud men inte i LDAP-katalogen tas bort.", "Save Config" : "Spara inställningar", - "Unprovision & Delete Config" : "Avregistrera och ta bort konfiguration", - "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% och %EMAIL% kommer ersättas av användarens UID och e-post", + "Unprovision & Delete Config" : "Ta bort provisionering och konfiguration", + "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% och %EMAIL% ersätts med användarens UID och e-postadress", "With the settings above, the app will create account settings in the following way:" : "Med inställningarna ovan skapar appen kontoinställningar på följande sätt:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Det angivna PKCS #12-certifikatet måste innehålla minst ett certifikat och exakt en privat nyckel.", "Failed to import the certificate. Please check the password." : "Det gick inte att importera certifikatet. Kontrollera lösenordet.", "Certificate imported successfully" : "Certifikatet har importerats", - "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Det gick inte att importera certifikatet. Kontrollera att den privata nyckeln matchar certifikatet och inte är skyddad av ett löseord.", - "Failed to import the certificate" : "Kunde inte importera certifikatet", - "S/MIME certificates" : "S/MIME certifikat", + "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Det gick inte att importera certifikatet. Kontrollera att den privata nyckeln matchar certifikatet och inte är skyddad av en lösenfras.", + "Failed to import the certificate" : "Det gick inte att importera certifikatet", + "Import S/MIME certificate" : "Importera S/MIME-certifikat", + "S/MIME certificates" : "S/MIME-certifikat", "Certificate name" : "Certifikatets namn", "E-mail address" : "E-postadress", "Valid until" : "Giltigt till", "Delete certificate" : "Ta bort certifikat", "No certificate imported yet" : "Certifikat saknas", "Import certificate" : "Importera certifikat", - "Import S/MIME certificate" : "Importera S/MIME certifikat", - "PKCS #12 Certificate" : "PKCS #12 Certifikat", - "PEM Certificate" : "PEM Certifikat", + "PKCS #12 Certificate" : "PKCS #12-certifikat", + "PEM Certificate" : "PEM-certifikat", "Certificate" : "Certifikat", "Private key (optional)" : "Privat nyckel (valfritt)", - "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "En privat nyckel behövs endast om signerade och krypterade meddelanden skall skickas via detta certifikat.", + "The private key is only required if you intend to send signed and encrypted emails using this certificate." : "Den privata nyckeln krävs endast om du vill skicka signerade och krypterade e-postmeddelanden med certifikatet.", "Submit" : "Skicka", - "No text blocks available" : "Text block saknas", - "Text block deleted" : "Text block borttaget", - "Failed to delete text block" : "Failed to delete text block", - "Text block shared with {sharee}" : "Text block delad med {sharee}", - "Failed to share text block with {sharee}" : "Kunde inte dela text block med {sharee}", + "No text blocks available" : "Det finns inga textblock", + "Text block deleted" : "Textblocket har tagits bort", + "Failed to delete text block" : "Det gick inte att ta bort textblocket", + "Text block shared with {sharee}" : "Textblocket har delats med {sharee}", + "Failed to share text block with {sharee}" : "Det gick inte att dela textblocket med {sharee}", "Share deleted for {name}" : "Delning borttagen för {name}", - "Failed to delete share with {name}" : "Kunde inte ta bort delning med {name}", + "Failed to delete share with {name}" : "Det gick inte att ta bort delning med {name}", "Guest" : "Gäst", "Group" : "Grupp", - "Failed to save text block" : "Kunde inte spara text block", + "Failed to save text block" : "Det gick inte att spara textblocket", "Shared" : "Delad", "Edit {title}" : "Uppdatera {title}", "Delete {title}" : "Ta bort {title}", - "Edit text block" : "Editera text block", + "Edit text block" : "Redigera textblock", "Shares" : "Delningar", "Search for users or groups" : "Sök användare eller grupper", - "Choose a text block to insert at the cursor" : "Välj ett text block att infoga vid markören", + "Choose a text block to insert at the cursor" : "Välj ett textblock att infoga vid markören", "Insert" : "Infoga", - "Insert text block" : "Infoga text block", + "Insert text block" : "Infoga textblock", "Account connected" : "Konto anslutet", "You can close this window" : "Du kan stänga detta fönster", "Connect your mail account" : "Anslut ditt e-postkonto", - "To add a mail account, please contact your administrator." : "Kontakta din systemadministratör för att skapa ett e-post konto", + "To add a mail account, please contact your administrator." : "Kontakta administratören för att lägga till ett e-postkonto.", "All" : "Alla", "Drafts" : "Utkast", "Priority inbox" : "Prioriterad inkorg", @@ -818,29 +849,28 @@ "Error while sharing file" : "Fel vid delning av fil", "{from}\n{subject}" : "{from}\n{subject}", "_%n new message \nfrom {from}_::_%n new messages \nfrom {from}_" : ["%n nytt meddelande \nfrån {from}","%n nya meddelanden \nfrån {from}"], - "Nextcloud Mail" : "Nextcloud E-post", - "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Det finns redan ett aktivt meddelande. Ej sparade ändringar kommer att förloras! ", + "Nextcloud Mail" : "Nextcloud Mail", + "There is already a message in progress. All unsaved changes will be lost if you continue!" : "Ett meddelande redigeras redan. Alla osparade ändringar går förlorade om du fortsätter.", "Discard changes" : "Släng ändringar", - "Discard unsaved changes" : "Kassera ej sparade ändringar", + "Discard unsaved changes" : "Kassera osparade ändringar", "Keep editing message" : "Fortsätt uppdatera meddelande", "Attachments were not copied. Please add them manually." : "Bifogade filer kopierades inte, lägg till dem manuellt.", - "Could not create snooze mailbox" : "Kunde inte skapa \"Snooze\" mailbox", - "Sending message…" : "Skickar meddelande...", + "Could not create snooze mailbox" : "Det gick inte att skapa mappen för uppskjutna meddelanden", + "Sending message…" : "Skickar meddelandet …", "Message sent" : "Meddelande skickat", - "Could not send message" : "Meddelande kunde inte skickas", - "Message copied to \"Sent\" folder" : "Meddelande kopierat till \"Skickat\" mappen", - "Could not copy message to \"Sent\" folder" : "Kunde inte kopiera meddelande till \"Skickat\" mappen", - "Could not load {tag}{name}{endtag}" : "Kunde inte läsa in {tag}{name}{endtag}", - "There was a problem loading {tag}{name}{endtag}" : "Det uppstod ett problem vis inläsning av {tag}{name}{endtag}", - "Could not load your message" : "Kunde inte läsa in ditt meddelande", - "Could not load the desired message" : "Kunde inte läsa in önskat meddelande", - "Could not load the message" : "Kunde inte läsa in meddelandet", + "Could not send message" : "Det gick inte att skicka meddelandet", + "Message copied to \"Sent\" folder" : "Meddelandet kopierades till mappen ”Skickat”", + "Could not copy message to \"Sent\" folder" : "Det gick inte att kopiera meddelandet till mappen ”Skickat”", + "Could not load {tag}{name}{endtag}" : "Det gick inte att läsa in {tag}{name}{endtag}", + "There was a problem loading {tag}{name}{endtag}" : "Ett problem uppstod när {tag}{name}{endtag} lästes in", + "Could not load your message" : "Det gick inte att läsa in ditt meddelande", + "Could not load the desired message" : "Det gick inte att läsa in det önskade meddelandet", + "Could not load the message" : "Det gick inte att läsa in meddelandet", "Error loading message" : "Fel vid inläsning av meddelande", - "Determine importance using machine learning" : "Avgör vikt med maskininlärning", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Meddelanden kommer automatiskt att markeras som viktiga baserat på vilka meddelanden du interagerade med eller har markerat som viktiga. I början kan du behöva ändra vikten manuellt, men det kommer att förbättras med tiden.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Meddelanden som du skickat och som kräver svar men inte fått något efter ett par dagar visas här.", - "Mark all messages of this folder as read" : "Markera alla meddelanden i den här mappen som lästa", - "Last 7 days" : "Senaste 7 dagarna", - "From me" : "Från mig" + "Add share link from Files" : "Lägg till delningslänk från Filer", + "Choose a file to add as attachment" : "Välj en fil att lägga som bilaga", + "Choose a file to share as a link" : "Välj en fil att dela som länk", + "Delegated access to {userId}" : "Åtkomst delegerades till {userId}", + "Revoked access for {userId}" : "Åtkomsten återkallades för {userId}" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/sw.js b/l10n/sw.js index 6a68e6664e..88b5d6a44f 100644 --- a/l10n/sw.js +++ b/l10n/sw.js @@ -18,9 +18,9 @@ OC.L10N.register( "Signature" : "Saini", "Calendar settings" : "Mipangilio ya kalenda", "Filters" : "Filters", + "Email address" : "Anwani ya barua pepe", "Go back" : "Rudi nyuma", "Change name" : "Change name", - "Email address" : "Anwani ya barua pepe", "Cancel" : "Cancel", "General" : "Kuu", "Appearance" : "Mwonekano", @@ -29,6 +29,7 @@ OC.L10N.register( "Sorting" : "Sorting", "Newest first" : "Mpya kwanza", "Oldest first" : "Ya zamani kwanza", + "Ok" : "Sawa", "Shared with me" : "Shared with me", "Privacy" : "Faragha", "Security" : "Ulinzi", @@ -39,7 +40,6 @@ OC.L10N.register( "Send" : "Tuma", "Refresh" : "Refresh", "About" : "Kuhusu", - "Ok" : "Sawa", "Send later" : "Tuma baadaye", "From" : "Tangu/ kutoka", "Select account" : "Chagua akaunti", @@ -49,12 +49,12 @@ OC.L10N.register( "Draft saved" : "Draft saved", "Smart picker" : "Smart picker", "Send now" : "Tuma sasa", - "Choose" : "Chagua", - "Choose a file to add as attachment" : "Chagua faili kuongeza kama kiambatanisho", - "Choose a file to share as a link" : "Chagua faili kushirikisha kama kiungo", + "Choose a file" : "Chagua faili", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Confirm" : "Thibitisha", + "Revoke" : "Revoke", "No messages" : "Hakuna jumbe", + "Choose" : "Chagua", "Later today – {timeLocale}" : "Baadaye leo-{timeLocale}", "Set reminder for later today" : "Set reminder for later today", "Tomorrow – {timeLocale}" : "Kesho-{timeLocale}", @@ -67,14 +67,15 @@ OC.L10N.register( "Unread" : "Unread", "Read" : "Soma", "Move thread" : "Move thread", - "Delete message" : "Delete message", "More actions" : "Vitendo zaidi", "Back" : "Rudi", "Create task" : "Tengeneza jukumu", + "Delete message" : "Delete message", "Load more" : "Pakia zaidi", "Mark as unread" : "Weka alama kama haijasomwa", "Mark as read" : "Weka alama kama iliyosomwa", "Create event" : "Tengeneza matukio", + "Title" : "Kichwa cha habari", "All day" : "Siku yote", "Attendees" : "Wahudhuriaji", "Select calendar" : "Select calendar", @@ -95,9 +96,12 @@ OC.L10N.register( "Choose target folder" : "Chagua kasha lililolengwa", "Favorites" : "Vipendwa", "Other" : "Mengine", + "Direct link copied to clipboard" : "Kiungio cha moja kwa moja kimenakiliwa kwenye ubao wa kunakili", "Forward" : "Mbele", + "Link copied" : "Kiungo kimenakiliwa", "Translate" : "Tafsiri", "Move" : "Hamisha", + "Change password" : "Change password", "Remove account" : "Ondoa akaunti", "Remove {email}" : "Remove {email}", "Add folder" : "Ongeza kisanduku", @@ -135,6 +139,8 @@ OC.L10N.register( "Task created" : "Task created", "Not found" : "Haipatikani", "Unsubscribe" : "Unsubscribe", + "From:" : "Tangu:", + "To:" : "Mpaka:", "The message could not be translated" : "The message could not be translated", "Translation copied to clipboard" : "Translation copied to clipboard", "Translation could not be copied" : "Translation could not be copied", @@ -176,6 +182,7 @@ OC.L10N.register( "Nextcloud Mail" : "Nextcloud Mail", "Discard changes" : "Discard changes", "Message sent" : "Ujumbe umetumwa", - "Last 7 days" : "Siku 7 zilizopita" + "Choose a file to add as attachment" : "Chagua faili kuongeza kama kiambatanisho", + "Choose a file to share as a link" : "Chagua faili kushirikisha kama kiungo" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/sw.json b/l10n/sw.json index cbee82d1a6..980b06b665 100644 --- a/l10n/sw.json +++ b/l10n/sw.json @@ -16,9 +16,9 @@ "Signature" : "Saini", "Calendar settings" : "Mipangilio ya kalenda", "Filters" : "Filters", + "Email address" : "Anwani ya barua pepe", "Go back" : "Rudi nyuma", "Change name" : "Change name", - "Email address" : "Anwani ya barua pepe", "Cancel" : "Cancel", "General" : "Kuu", "Appearance" : "Mwonekano", @@ -27,6 +27,7 @@ "Sorting" : "Sorting", "Newest first" : "Mpya kwanza", "Oldest first" : "Ya zamani kwanza", + "Ok" : "Sawa", "Shared with me" : "Shared with me", "Privacy" : "Faragha", "Security" : "Ulinzi", @@ -37,7 +38,6 @@ "Send" : "Tuma", "Refresh" : "Refresh", "About" : "Kuhusu", - "Ok" : "Sawa", "Send later" : "Tuma baadaye", "From" : "Tangu/ kutoka", "Select account" : "Chagua akaunti", @@ -47,12 +47,12 @@ "Draft saved" : "Draft saved", "Smart picker" : "Smart picker", "Send now" : "Tuma sasa", - "Choose" : "Chagua", - "Choose a file to add as attachment" : "Chagua faili kuongeza kama kiambatanisho", - "Choose a file to share as a link" : "Chagua faili kushirikisha kama kiungo", + "Choose a file" : "Chagua faili", "_{count} attachment_::_{count} attachments_" : ["{count} attachment","{count} attachments"], "Confirm" : "Thibitisha", + "Revoke" : "Revoke", "No messages" : "Hakuna jumbe", + "Choose" : "Chagua", "Later today – {timeLocale}" : "Baadaye leo-{timeLocale}", "Set reminder for later today" : "Set reminder for later today", "Tomorrow – {timeLocale}" : "Kesho-{timeLocale}", @@ -65,14 +65,15 @@ "Unread" : "Unread", "Read" : "Soma", "Move thread" : "Move thread", - "Delete message" : "Delete message", "More actions" : "Vitendo zaidi", "Back" : "Rudi", "Create task" : "Tengeneza jukumu", + "Delete message" : "Delete message", "Load more" : "Pakia zaidi", "Mark as unread" : "Weka alama kama haijasomwa", "Mark as read" : "Weka alama kama iliyosomwa", "Create event" : "Tengeneza matukio", + "Title" : "Kichwa cha habari", "All day" : "Siku yote", "Attendees" : "Wahudhuriaji", "Select calendar" : "Select calendar", @@ -93,9 +94,12 @@ "Choose target folder" : "Chagua kasha lililolengwa", "Favorites" : "Vipendwa", "Other" : "Mengine", + "Direct link copied to clipboard" : "Kiungio cha moja kwa moja kimenakiliwa kwenye ubao wa kunakili", "Forward" : "Mbele", + "Link copied" : "Kiungo kimenakiliwa", "Translate" : "Tafsiri", "Move" : "Hamisha", + "Change password" : "Change password", "Remove account" : "Ondoa akaunti", "Remove {email}" : "Remove {email}", "Add folder" : "Ongeza kisanduku", @@ -133,6 +137,8 @@ "Task created" : "Task created", "Not found" : "Haipatikani", "Unsubscribe" : "Unsubscribe", + "From:" : "Tangu:", + "To:" : "Mpaka:", "The message could not be translated" : "The message could not be translated", "Translation copied to clipboard" : "Translation copied to clipboard", "Translation could not be copied" : "Translation could not be copied", @@ -174,6 +180,7 @@ "Nextcloud Mail" : "Nextcloud Mail", "Discard changes" : "Discard changes", "Message sent" : "Ujumbe umetumwa", - "Last 7 days" : "Siku 7 zilizopita" + "Choose a file to add as attachment" : "Chagua faili kuongeza kama kiambatanisho", + "Choose a file to share as a link" : "Chagua faili kushirikisha kama kiungo" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/ta.js b/l10n/ta.js new file mode 100644 index 0000000000..af312b9cb8 --- /dev/null +++ b/l10n/ta.js @@ -0,0 +1,52 @@ +OC.L10N.register( + "mail", + { + "Important" : "முக்கியமான ", + "Work" : "வேலை", + "Personal" : "தனிப்பட்ட", + "Save" : "சேமிக்க ", + "Connect" : "இணைக்க", + "Name" : "பெயர்", + "Password" : "கடவுச்சொல்", + "None" : "ஒன்றுமில்லை", + "Cancel" : "இரத்து செய்க", + "General" : "பொதுவான", + "Ok" : "Ok", + "Delete" : "நீக்குக", + "Search" : "Search", + "Refresh" : "மீள் ஏற்றுக", + "Choose" : "தெரிவுசெய்க ", + "Favorite" : "விருப்பமான", + "Back" : "பின்னுக்கு", + "Title" : "தலைப்பு", + "Attendees" : "பங்கேற்பாளர்கள்", + "Description" : "விவரிப்பு", + "Create" : "உருவாக்குக", + "Select" : "Select", + "Remove" : "அகற்றுக", + "Today" : "இன்று", + "Yesterday" : "நேற்று", + "Favorites" : "விருப்பங்கள்", + "Other" : "மற்றவை", + "Translate" : "Translate", + "Move" : "Move", + "Folder name" : "கோப்புறை பெயர்", + "Saving" : "Saving", + "Rename" : "பெயர்மாற்றம்", + "Add" : "சேர்க்க", + "Close" : "மூடுக", + "Date" : "Date", + "Tags" : "சீட்டுகள்", + "From:" : "இருந்து", + "To:" : "இற்கு", + "Help" : "உதவி", + "Actions" : "செயல்கள்", + "delete" : "நீக்குக", + "Edit" : "தொகுக்க", + "User" : "User", + "Host" : "ஓம்புனர்", + "Port" : "துறை ", + "Group" : "Group", + "All" : "எல்லாம்" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ta.json b/l10n/ta.json new file mode 100644 index 0000000000..b7f3e6b215 --- /dev/null +++ b/l10n/ta.json @@ -0,0 +1,50 @@ +{ "translations": { + "Important" : "முக்கியமான ", + "Work" : "வேலை", + "Personal" : "தனிப்பட்ட", + "Save" : "சேமிக்க ", + "Connect" : "இணைக்க", + "Name" : "பெயர்", + "Password" : "கடவுச்சொல்", + "None" : "ஒன்றுமில்லை", + "Cancel" : "இரத்து செய்க", + "General" : "பொதுவான", + "Ok" : "Ok", + "Delete" : "நீக்குக", + "Search" : "Search", + "Refresh" : "மீள் ஏற்றுக", + "Choose" : "தெரிவுசெய்க ", + "Favorite" : "விருப்பமான", + "Back" : "பின்னுக்கு", + "Title" : "தலைப்பு", + "Attendees" : "பங்கேற்பாளர்கள்", + "Description" : "விவரிப்பு", + "Create" : "உருவாக்குக", + "Select" : "Select", + "Remove" : "அகற்றுக", + "Today" : "இன்று", + "Yesterday" : "நேற்று", + "Favorites" : "விருப்பங்கள்", + "Other" : "மற்றவை", + "Translate" : "Translate", + "Move" : "Move", + "Folder name" : "கோப்புறை பெயர்", + "Saving" : "Saving", + "Rename" : "பெயர்மாற்றம்", + "Add" : "சேர்க்க", + "Close" : "மூடுக", + "Date" : "Date", + "Tags" : "சீட்டுகள்", + "From:" : "இருந்து", + "To:" : "இற்கு", + "Help" : "உதவி", + "Actions" : "செயல்கள்", + "delete" : "நீக்குக", + "Edit" : "தொகுக்க", + "User" : "User", + "Host" : "ஓம்புனர்", + "Port" : "துறை ", + "Group" : "Group", + "All" : "எல்லாம்" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/th.js b/l10n/th.js index fd3f1beaa7..67078c8fe3 100644 --- a/l10n/th.js +++ b/l10n/th.js @@ -15,14 +15,15 @@ OC.L10N.register( "STARTTLS" : "STARTTLS", "SMTP Password" : "รหัสผ่าน SMTP", "Signature" : "ลายเซ็น", + "Email address" : "ที่อยู่อีเมล", "Go back" : "กลับไป", "Change name" : "เปลี่ยนชื่อ", - "Email address" : "ที่อยู่อีเมล", "Cancel" : "ยกเลิก", "General" : "ทั่วไป", "Appearance" : "ลักษณะที่ปรากฏ", "Newest first" : "ใหม่ที่สุดก่อน", "Oldest first" : "เก่าที่สุดก่อน", + "Ok" : "ตกลง", "Privacy" : "ความเป็นส่วนตัว", "Security" : "ความปลอดภัย", "Archive" : "ที่เก็บถาวร", @@ -31,10 +32,9 @@ OC.L10N.register( "Send" : "ส่ง", "Refresh" : "รีเฟรช", "About" : "เกี่ยวกับ", - "Ok" : "ตกลง", - "Choose" : "เลือก", - "Choose a file to add as attachment" : "เลือกไฟล์ที่ต้องการแนบ", "Confirm" : "ยืนยัน", + "Revoke" : "เพิกถอน", + "Choose" : "เลือก", "Favorite" : "รายการโปรด", "Read" : "อ่าน", "Edit tags" : "แก้ไขแท็ก", @@ -55,6 +55,7 @@ OC.L10N.register( "Favorites" : "รายการโปรด", "Other" : "อื่น ๆ", "Forward" : "ส่งต่อ", + "Link copied" : "คัดลอกลิงก์แล้ว", "Translate" : "แปลภาษา", "Unnamed" : "ไม่มีชื่อ", "Choose a folder to store the attachment in" : "เลือกโฟลเดอร์ที่จะเก็บไฟล์แนบลงไป", @@ -78,6 +79,8 @@ OC.L10N.register( "Custom" : "กำหนดเอง", "Tag already exists" : "มีแท็กอยู่แล้ว", "Not found" : "ไม่พบ", + "From:" : "จาก:", + "To:" : "ถึง:", "Deleted" : "ลบแล้ว", "Help" : "ช่วยเหลือ", "Actions" : "การกระทำ", @@ -106,6 +109,6 @@ OC.L10N.register( "Trash" : "ถังขยะ", "{from}\n{subject}" : "{from}\n{subject}", "Error loading message" : "เกิดข้อผิดพลาดขณะโหลดข้อความ", - "Last 7 days" : "ภายใน 7 วัน" + "Choose a file to add as attachment" : "เลือกไฟล์ที่ต้องการแนบ" }, "nplurals=1; plural=0;"); diff --git a/l10n/th.json b/l10n/th.json index a652662e75..045ee78589 100644 --- a/l10n/th.json +++ b/l10n/th.json @@ -13,14 +13,15 @@ "STARTTLS" : "STARTTLS", "SMTP Password" : "รหัสผ่าน SMTP", "Signature" : "ลายเซ็น", + "Email address" : "ที่อยู่อีเมล", "Go back" : "กลับไป", "Change name" : "เปลี่ยนชื่อ", - "Email address" : "ที่อยู่อีเมล", "Cancel" : "ยกเลิก", "General" : "ทั่วไป", "Appearance" : "ลักษณะที่ปรากฏ", "Newest first" : "ใหม่ที่สุดก่อน", "Oldest first" : "เก่าที่สุดก่อน", + "Ok" : "ตกลง", "Privacy" : "ความเป็นส่วนตัว", "Security" : "ความปลอดภัย", "Archive" : "ที่เก็บถาวร", @@ -29,10 +30,9 @@ "Send" : "ส่ง", "Refresh" : "รีเฟรช", "About" : "เกี่ยวกับ", - "Ok" : "ตกลง", - "Choose" : "เลือก", - "Choose a file to add as attachment" : "เลือกไฟล์ที่ต้องการแนบ", "Confirm" : "ยืนยัน", + "Revoke" : "เพิกถอน", + "Choose" : "เลือก", "Favorite" : "รายการโปรด", "Read" : "อ่าน", "Edit tags" : "แก้ไขแท็ก", @@ -53,6 +53,7 @@ "Favorites" : "รายการโปรด", "Other" : "อื่น ๆ", "Forward" : "ส่งต่อ", + "Link copied" : "คัดลอกลิงก์แล้ว", "Translate" : "แปลภาษา", "Unnamed" : "ไม่มีชื่อ", "Choose a folder to store the attachment in" : "เลือกโฟลเดอร์ที่จะเก็บไฟล์แนบลงไป", @@ -76,6 +77,8 @@ "Custom" : "กำหนดเอง", "Tag already exists" : "มีแท็กอยู่แล้ว", "Not found" : "ไม่พบ", + "From:" : "จาก:", + "To:" : "ถึง:", "Deleted" : "ลบแล้ว", "Help" : "ช่วยเหลือ", "Actions" : "การกระทำ", @@ -104,6 +107,6 @@ "Trash" : "ถังขยะ", "{from}\n{subject}" : "{from}\n{subject}", "Error loading message" : "เกิดข้อผิดพลาดขณะโหลดข้อความ", - "Last 7 days" : "ภายใน 7 วัน" + "Choose a file to add as attachment" : "เลือกไฟล์ที่ต้องการแนบ" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/tr.js b/l10n/tr.js index 9462efd008..511403209a 100644 --- a/l10n/tr.js +++ b/l10n/tr.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "E-posta", "You are reaching your mailbox quota limit for {account_email}" : "{account_email} e-posta kutusunun depolama alanı sınırına yaklaşıyorsunuz", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "E-posta kutunuzun depolama alanını {percentage} kadarını kullanıyorsunuz. Lütfen gereksiz e-postaları silerek biraz yer açın.", + "{account_email} has been delegated to you" : "{account_email} yetkisi size devredildi", + "{user} delegated {account} to you" : "{user}, {account} yetkisini size devretti", + "{account_email} is no longer delegated to you" : "{account_email} yetkisi devri sizden geri alındı", + "{user} revoked delegation for {account}" : "{user}, {account} yetki devrini geri aldı", "Mail Application" : "E-posta uygulaması", "Mails" : "E-postalar", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Gönderici e-posta adresi: %1$s adres defterinde yok. Ancak %2$s gönderici adı şu e-posta adresiyle birlikte adres defterinde var: %3$s", @@ -30,7 +34,7 @@ OC.L10N.register( "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "app.mail.transport ayarı SMTP olarak ayarlanmamış. Bu yapılandırma, e-postalar doğrudan internet sunucusundan gönderildiği için SPF ve DKIM gibi modern e-posta güvenlik önlemleriyle ilgili sorunlara neden olabilir. Bu sunucu genellikle bu amaç için düzgün şekilde yapılandırılmamıştır. Bu sorunu çözmek için, e-posta aktarımı desteğini sonlandırdık. Lütfen SMTP aktarımını kullanmak ve bu iletiyi gizlemek için yapılandırmanızdan app.mail.transport seçeneğini kaldırın. E-posta aktarımını sağlamak için düzgün şekilde yapılandırılmış bir SMTP kurulumu gerekir.", "Mail account parameters, aliases and preferences" : "E-posta hesabı bilgileri, takma adlar ve tercihler", "💌 A mail app for Nextcloud" : "💌 Nextcloud e-posta uygulaması", - "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud için bir e-posta uygulaması**\n\n- **🚀 Diğer Nextcloud uygulamalarıyla bütünleşik!** Şu anda Kişiler, Takvim ve Dosyalar ile. Daha fazlası gelecek.\n- **📥 Birden çok e-posta hesabı!** Kişisel ya da şirket hesabınızı mı kullanacaksınız? Sorun değil ve güzel bir birleşik gelen kutusu. Herhangi bir IMAP hesabını bağlayabilirsiniz.\n- **🔒 Şifrelenmiş e-postalar gönderin ve alın!** Harika [Mailvelope](https://mailvelope.com) tarayıcı eklentisi ile.\n- **🙈 Tekerleği yeniden keşfetmiyoruz!** Harika [Horde](https://www.horde.org) kitaplıklarını kullanıyoruz.\n- **📬 Kendi e-posta sunucunuzu barındırmak ister misiniz?** [Mail-in-a-Box](https://mailinabox.email) kurabileceğiniz için bunu yeniden yapmak zorunda değiliz!\n\n## Etik yapay zeka değerlendirmesi\n\n### Öncelikli gelen kutusu 🟢\n\nOlumlu:\n* Bu modelin eğitim ve çıkarım yazılımı açık kaynak kodludur.\n* Model, kullanıcının kendi verilerine göre yerinde oluşturulur ve eğitilir.\n* Eğitim verilerine kullanıcı erişebilir, bu da sapmayı denetlemeyi veya düzeltmeyi ya da başarımı ve CO2 kullanımını iyileştirebilmeyi sağlar.\n\n### Yazışma özetleri (abonelik)\n\n**Değerlendirme:** 🟢/🟡/🟠/🔴\n\nDeğerlendirme, kurulu olan yazı işleme arka yüzüne bağlıdır. Ayrıntılı bilgi almak için [değerlendirme özeti](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) bölümüne bakabilirsiniz.\n\n[Blogumuzda](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) Nextcloud etik yapay zeka değerlendirmesi hakkında ayrıntılı bilgi alabilirsiniz.", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud için bir e-posta uygulaması**\n\n- **🚀 Diğer Nextcloud uygulamalarıyla bütünleşik!** Şu anda Kişiler, Takvim ve Dosyalar ile. Daha fazlası gelecek.\n- **📥 Birden çok e-posta hesabı!** Kişisel ya da şirket hesabınızı mı kullanacaksınız? Sorun değil ve güzel bir birleşik gelen kutusu. Herhangi bir IMAP hesabını bağlayabilirsiniz.\n- **🔒 Şifrelenmiş e-postalar gönderin ve alın!** Harika [Mailvelope](https://mailvelope.com) tarayıcı eklentisi ile.\n- **🙈 Tekerleği yeniden keşfetmiyoruz!** Harika [Horde](https://www.horde.org) kitaplıklarını kullanıyoruz.\n- **📬 Kendi e-posta sunucunuzu barındırmak ister misiniz?** [Mail-in-a-Box](https://mailinabox.email) kurabileceğiniz için bunu yeniden yapmak zorunda değiliz!\n\n## Etik yapay zeka değerlendirmesi\n\n### Öncelikli gelen kutusu 🟢\n\nOlumlu:\n* Bu modelin eğitim ve çıkarım yazılımı açık kaynak kodludur.\n* Model, kullanıcının kendi verilerine göre yerinde oluşturulur ve eğitilir.\n* Eğitim verilerine kullanıcı erişebilir, bu da sapmayı denetlemeyi veya düzeltmeyi ya da başarımı ve CO2 kullanımını iyileştirebilmeyi sağlar.\n\n### Yazışma özetleri (abonelik)\n\n**Değerlendirme:** 🟢/🟡/🟠/🔴\n\nDeğerlendirme, kurulu olan yazı işleme arka yüzüne bağlıdır. Ayrıntılı bilgi almak için [değerlendirme özeti](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) bölümüne bakabilirsiniz.\n\n[Blogumuzda](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) Nextcloud etik yapay zeka değerlendirmesi ile ilgili ayrıntılı bilgi alabilirsiniz.", "Your session has expired. The page will be reloaded." : "Oturumunuzun geçerlilik süresi dolmuş. Sayfa yeniden yüklenecek.", "Drafts are saved in:" : "Taslakların kaydedileceği yer:", "Sent messages are saved in:" : "Gönderilmiş iletilerin kaydedileceği yer:", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP bağlantı noktası", "SMTP User" : "SMTP kullanıcı adı", "SMTP Password" : "SMTP parolası", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google hesabının bu uygulamayla çalışması için Google iki adımlı doğrulamasını açmanız ve bir uygulama parolası oluşturmanız gerekir.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google için, OAuth kimlik doğrulaması gerekir. Nextcloud yöneticiniz Google OAuth yapılandırmasını tamamladıysa, bunun yerine bir Google uygulama parolası kullanabilirsiniz.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft için, OAuth kimlik doğrulaması gerekir. Nextcloud yöneticinizden yönetici ayarlarından Microsoft OAuth yapılandırmasını tamamlamasını isteyin.", "Account settings" : "Hesap ayarları", "Aliases" : "Takma adlar", "Alias to S/MIME certificate mapping" : "S/MIME sertifika eşleştirmesinin takma adı", @@ -117,15 +122,15 @@ OC.L10N.register( "Mail server" : "E-posta sunucusu", "Sieve server" : "Sieve sunucusu", "Folder search" : "Klasör ara", + "Email address" : "E-posta adresi", "Update alias" : "Takma adı güncelle", "Rename alias" : "Kısaltmayı yeniden adlandır", "Show update alias form" : "Takma adı güncelleme formunu görüntüle", "Delete alias" : "Takma adı sil", "Go back" : "Geri dön", "Change name" : "Adı değiştir", - "Email address" : "E-posta adresi", "Add alias" : "Takma ad ekle", - "Create alias" : "Takma ad ekle", + "Create alias" : "Takma ad oluştur", "Cancel" : "İptal", "Search the body of messages in priority Inbox" : "Öncelikli gelen kutusundaki iletilerin içeriğinde arama", "Activate" : "Etkinleştir", @@ -136,6 +141,7 @@ OC.L10N.register( "Mail settings" : "E-posta ayarları", "General" : "Genel", "Set as default mail app" : "Varsayılan e-posta uygulaması olarak ayarla", + "{email} (delegated)" : "{email} (devredildi)", "Add mail account" : "E-posta hesabı ekle", "Appearance" : "Görünüm", "Show all messages in thread" : "Yazışmadaki tüm iletileri görüntüle", @@ -150,13 +156,16 @@ OC.L10N.register( "Sorting" : "Sıralama", "Newest first" : "Yeniden eskiye", "Oldest first" : "Eskiden yeniye", + "New text block" : "Yeni yazı bloğu", + "Title of the text block" : "Yazı bloğunun başlığı", + "Content of the text block" : "Yazı bloğunun içeriği", + "Ok" : "Tamam", "Avatars from Gravatar and favicons" : "Avatarlar Gravatar ve site simgelerinden alınsın", "Reply position" : "Yanıt konumu", "Top" : "Üstte", "Bottom" : "Altta", "Text blocks" : "Yazı blokları", "Reusable pieces of text that can be inserted in messages" : "İletilere eklenebilen yeniden kullanılabilir yazı parçaları", - "New text block" : "Yeni yazı bloğu", "Shared with me" : "Benimle paylaşılanlar", "Privacy" : "Gizlilik", "Data collection" : "Veri toplama", @@ -187,9 +196,6 @@ OC.L10N.register( "About" : "Hakkında", "Acknowledgements" : "Telif hakları", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Bu uygulamada, açık kaynaklı bir düzenleyici olan CKEditor bulunur. Telif Hakkı © CKEditor gönüllüleri. GPLv2 lisansı koşulları altında dağıtılmaktadır.", - "Title of the text block" : "Yazı bloğunun başlığı", - "Content of the text block" : "Yazı bloğunun içeriği", - "Ok" : "Tamam", "Automatically create tentative appointments in calendar" : "Takvimde otomatik olarak belirsiz randevular oluşturulsun", "No certificate" : "Herhangi bir sertifika yok", "Certificate updated" : "Sertifika güncellendi", @@ -233,7 +239,6 @@ OC.L10N.register( "Disable formatting" : "Biçimlendirme kullanılmasın", "Upload attachment" : "Ek dosya yükle", "Add attachment from Files" : "Dosyalardan ek dosya ekle", - "Add share link from Files" : "Dosyalar uygulamasına paylaşım bağlantısı ekle", "Smart picker" : "Akıllı seçici", "Request a read receipt" : "Okundu bilgisi iste", "Sign message with S/MIME" : "İleti S/MIME ile imzalansın", @@ -245,15 +250,28 @@ OC.L10N.register( "Monday morning" : "Pazartesi sabah", "Custom date and time" : "Özel tarih ve saat", "Enter a date" : "Bir tarih yazın", - "Choose" : "Seçin", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Ek dosya izin verilen {size} ek dosya boyutunu aşıyor. Lütfen dosyayı bağlantı ile paylaşın.","Ek dosyalar izin verilen {size} ek dosya boyutunu aşıyor. Lütfen dosyaları bağlantı ile paylaşın."], - "Choose a file to add as attachment" : "Eklenecek ek dosyasını seçin", - "Choose a file to share as a link" : "Bağlantı olarak paylaşılacak bir dosya seçin", + "Choose a file" : "Bir dosya seçin", "_{count} attachment_::_{count} attachments_" : ["{count} ek dosya","{count} ek dosya"], "Untitled message" : "Adlandırılmamış ileti", "Expand composer" : "Oluşturucuyu genişlet", "Close composer" : "Oluşturucuyu kapat", "Confirm" : "Onayla", + "Delegate access" : "Yetkiyi devret", + "Revoke" : "Geçersiz kıl", + "{userId} will no longer be able to act on your behalf" : "{userId} artık sizin adınıza davranamayacak", + "Could not fetch delegates" : "Yetki devirleri alınamadı", + "Delegated access to {displayName}" : "Yetki {displayName} kullanıcısına devredildi", + "Could not delegate access" : "Yetki devredilemedi", + "Revoked access for {displayName}" : "Yetki devri {displayName} kullanıcısından geri alındı", + "Could not revoke delegation" : "Yetki devri geri alınamadı", + "Delegation" : "Yetki devri", + "Allow users to send, receive, and delete mail on your behalf" : "Kullanıcıların sizin adınıza e-posta göndermesine, almasına ve silmesine izin verin", + "Revoke access" : "Yetki devrini geri al", + "Add delegate" : "Yetki devri ekle", + "Select a user" : "Bir kullanıcı seçin", + "They will be able to send, receive, and delete mail on your behalf" : "Sizin adınıza eposta gönderebilecek, alabilecek ve silebilecek", + "Revoke access?" : "Yetki devri geri alınsın mı?", "Tag: {name} deleted" : "Etiket: {name} silindi", "An error occurred, unable to delete the tag." : "Bir sorun çıktı. Etiket silinemedi.", "The tag will be deleted from all messages." : "Etiket tüm iletilerden silinecek.", @@ -261,6 +279,7 @@ OC.L10N.register( "Rich text" : "Zengin yazı", "No messages in this folder" : "Bu klasörde herhangi bir ileti yok", "No messages" : "Herhangi bir ileti yok", + "Choose" : "Seçin", "Blind copy recipients only" : "Alıcılar gizli kopya olarak eklensin", "No subject" : "Konu yok", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Taslak:{markup-end} {subject}", @@ -300,15 +319,15 @@ OC.L10N.register( "Move Message" : "İletiyi taşı", "Archive thread" : "Yazışmayı arşivle", "Archive message" : "İletiyi arşivle", - "Delete thread" : "Yazışmayı sil", - "Delete message" : "İletiyi sil", "More actions" : "Diğer işlemler", "Back" : "Geri", "Set custom snooze" : "Özel erteleme ayarla", "Edit as new message" : "Yeni ileti olarak düzenle", "Reply with meeting" : "Toplamtı ile yanıtla", - "Create task" : "Görev ekle", + "Create task" : "Görev oluştur", "Download message" : "İletiyi indir", + "Delete thread" : "Yazışmayı sil", + "Delete message" : "İletiyi sil", "Back to all actions" : "Tüm işlemlere dön", "Manage quick actions" : "Hızlı işlem yönetimi", "Load more" : "Diğerlerini yükle", @@ -329,15 +348,17 @@ OC.L10N.register( "Mark as unimportant" : "Önemsiz olarak işaretle", "Mark as important" : "Önemli olarak işaretle", "Report this bug" : "Bu hatayı bildirin", - "Event created" : "Etkinlik eklendi", + "This description was generated by AI." : "Bu açıklama yapay zeka tarafından oluşturulmuştur.", + "Event created" : "Etkinlik oluşturuldu", "Could not create event" : "Etkinlik oluşturulamadı", - "Create event" : "Etkinlik ekle", + "Create event" : "Etkinlik oluştur", + "Title" : "Başlık", "All day" : "Tüm gün", "Attendees" : "Katılanlar", "You can only invite attendees if your account has an email address set" : "Katılımcıları davet edebilmek için hesabınızın e-posta adresini ayarlamalısınız", "Select calendar" : "Takvim seçin", "Description" : "Açıklama", - "Create" : "Ekle", + "Create" : "Oluştur", "This event was updated" : "Bu etkinlik güncellendi", "{attendeeName} accepted your invitation" : "{attendeeName} davetinizi kabul etti", "{attendeeName} tentatively accepted your invitation" : "{attendeeName} davetinizi belirsiz olarak kabul etti", @@ -402,7 +423,9 @@ OC.L10N.register( "Could not snooze message" : "İleti ertelenemedi", "Message was unsnoozed" : "İletinin ertelemesi kaldırıldı", "Could not unsnooze message" : "İletinin ertelemesi kaldırılamadı", + "Direct link copied to clipboard" : "Doğrudan bağlantı panoya kopyalandı", "Forward" : "İlet", + "Link copied" : "Bağlantı kopyalandı", "Move message" : "İletiyi taşı", "Translate" : "Çevir", "Forward message as attachment" : "İletiyi ek dosya olarak ilet", @@ -410,8 +433,10 @@ OC.L10N.register( "Print message" : "İletiyi yazdır", "Create mail filter" : "E-posta süzgeçi oluştur", "Download thread data for debugging" : "Hata ayıklama için yazışma verilerini indir", + "Suggested replies are using AI" : "Yapay zeka ile önerilen yanıtlar", "Message body" : "İleti gövdesi", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Uyarı: Bu iletinin S/MIME imzası doğrulanmamış. Gönderici, başka birinin kimliğine bürünmüş olabilir!", + "AI info" : "Yapay zeka bilgileri", "Unnamed" : "Adsız", "Embedded message" : "Gömülü ileti", "Attachment saved to Files" : "Ek dosya Dosyalar uygulamasına kaydedildi.", @@ -442,14 +467,17 @@ OC.L10N.register( "Moving message" : "İleti taşınıyor", "This account cannot connect" : "Bu hesap bağlantı kuramadı", "Connection failed. Please verify your information and try again" : "Bağlantı kurulamadı. Lütfen bilgilerinizi doğrulayıp yeniden deneyin", + "Change password" : "Parolayı değiştir", "Used quota: {quota}% ({limit})" : "Kullanılan kota: %{quota} ({limit})", "Used quota: {quota}%" : "Kullanılan kota: %{quota}", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "E-posta kutusu oluşturulamadı. Büyük olasılıkla adında geçersiz karakterler var. Lütfen başka bir ad deneyin.", "Remove account" : "Hesabı sil", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} hesabı ve ön belleğe alınmış verileri Nextcloud üzerinden silinecek ancak e-posta hizmeti sağlayıcınız üzerinden silinmeyecek.", "Remove {email}" : "{email} sil", + "could not delete account" : "hesap silinemedi", "Provisioned account is disabled" : "Bu hesap kullanımdan kaldırılmış", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bu hesabı kullanıma almak için lütfen bir parola ile oturum açın. Geçerli oturum, tek oturum açma ya da WebAuthn gibi parolasız kimlik doğrulama kullanıyor.", + "Delegate account" : "Hesap yetkisini devret", "Show only subscribed folders" : "Yalnızca abone olunmuş klasörler görüntülensin", "Add folder" : "Klasör ekle", "Folder name" : "Klasör adı", @@ -592,12 +620,12 @@ OC.L10N.register( "Tag name is a hidden system tag" : "Etiket adı sistem tarafından kullanılan bir gizli ad", "Tag already exists" : "Etiket zaten var", "Tag name cannot be empty" : "Etiket adı boş olamaz", - "An error occurred, unable to create the tag." : "Etiket eklenirken bir sorun çıktı.", + "An error occurred, unable to create the tag." : "Etiket oluşturulurken bir sorun çıktı.", "Add default tags" : "Varsayılan etiketler ekle", "Add tag" : "Etiket ekle", "Saving tag …" : "Etiket kaydediliyor…", - "Task created" : "Görev eklendi", - "Could not create task" : "Görev eklenemedi", + "Task created" : "Görev oluşturuldu", + "Could not create task" : "Görev oluşturulamadı", "No calendars with task list support" : "Görev listesi olan bir takvim yok", "Summarizing thread failed." : "Yazışma özetlenemedi.", "Could not load your message thread" : "İleti yazışmanız yüklenemedi", @@ -622,6 +650,10 @@ OC.L10N.register( "Reply to sender only" : "Yalnızca gönderene yanıtla", "Mark as unfavorite" : "Sık kullanılanlardan kaldır", "Mark as favorite" : "Sık kullanılanlara ekle", + "From:" : "Başlangıç:", + "To:" : "Kime:", + "Cc:" : "Kopya:", + "Bcc:" : "Gizli kopya:", "Unsubscribe via link" : "Bağlantı ile abonelikten ayrıl", "Unsubscribing will stop all messages from the mailing list {sender}" : "Abonelikten ayrıldığınızda {sender} e-posta listesinden iletileri almayacaksınız ", "Send unsubscribe email" : "Abonelikten ayrılma e-postası gönder", @@ -818,6 +850,7 @@ OC.L10N.register( "Certificate imported successfully" : "Sertifika içe aktarıldı", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Sertifika içe aktarılamadı. Lütfen kişisel anahtarın sertifika ile eşleştiğinden ve bir parola ile korunmadığından emin olun.", "Failed to import the certificate" : "Sertifika içe aktarılamadı", + "Import S/MIME certificate" : "S/MIME sertifikasını içe aktar", "S/MIME certificates" : "S/MIME sertifikaları", "Certificate name" : "Sertifika adı", "E-mail address" : "E-posta adresi", @@ -825,7 +858,6 @@ OC.L10N.register( "Delete certificate" : "Sertifikayı sil", "No certificate imported yet" : "henüz bir sertifika içe aktarılmamış", "Import certificate" : "Sertifikayı içe aktar", - "Import S/MIME certificate" : "S/MIME sertifikasını içe aktar", "PKCS #12 Certificate" : "PKCS #12 sertifikası", "PEM Certificate" : "PEM sertifikası", "Certificate" : "Sertifika", @@ -872,6 +904,7 @@ OC.L10N.register( "Discard changes" : "Değişiklikleri yok say", "Discard unsaved changes" : "Kaydedilmemiş değişiklikleri yok say", "Keep editing message" : "İletiyi düzenlemeyi sürdür", + "(All or part of this reply was generated by AI)" : "(Bu yanıtın tümü ya da bir bölümü yapay zeka ile oluşturulmuştur)", "Attachments were not copied. Please add them manually." : "Ek dosyalar kopyalanmadı. Lütfen el ile ekleyin.", "Could not create snooze mailbox" : "Erteleme kutusu oluşturulamadı", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Ne yazık ki, ileti yüklenemedi. Taslak artık var olmayabilir. Lütfen sayfayı yenileyip yeniden deneyin.", @@ -886,11 +919,10 @@ OC.L10N.register( "Could not load the desired message" : "İstenilen ileti yüklenemedi", "Could not load the message" : "İleti yüklenemedi", "Error loading message" : "İleti yüklenirken sorun çıktı", - "Determine importance using machine learning" : "Önem makine öğrenmesi ile belirlensin", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "İletiler, hangileri ile etkileşim kurduğunuza ya da hangilerini önemli olarak işaretlediğinize göre otomatik olarak önemli olarak işaretlenecek.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Gönderdiğiniz ve yanıtlanması gereken ancak birkaç gün geçmesine rağmen yanıt alamayan iletileriniz burada görüntülenir.", - "Mark all messages of this folder as read" : "Bu klasördeki tüm iletileri okunmuş olarak işaretle", - "Last 7 days" : "Önceki 7 gün", - "From me" : "Benden" + "Add share link from Files" : "Dosyalar uygulamasına paylaşım bağlantısı ekle", + "Choose a file to add as attachment" : "Eklenecek ek dosyasını seçin", + "Choose a file to share as a link" : "Bağlantı olarak paylaşılacak bir dosya seçin", + "Delegated access to {userId}" : "Yetki {userId} kullanıcısına devredildi", + "Revoked access for {userId}" : "{userId} yetki devri geri alındı" }, "nplurals=2; plural=(n > 1);"); diff --git a/l10n/tr.json b/l10n/tr.json index b9bcbd59e6..b2f95f139b 100644 --- a/l10n/tr.json +++ b/l10n/tr.json @@ -12,6 +12,10 @@ "Mail" : "E-posta", "You are reaching your mailbox quota limit for {account_email}" : "{account_email} e-posta kutusunun depolama alanı sınırına yaklaşıyorsunuz", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "E-posta kutunuzun depolama alanını {percentage} kadarını kullanıyorsunuz. Lütfen gereksiz e-postaları silerek biraz yer açın.", + "{account_email} has been delegated to you" : "{account_email} yetkisi size devredildi", + "{user} delegated {account} to you" : "{user}, {account} yetkisini size devretti", + "{account_email} is no longer delegated to you" : "{account_email} yetkisi devri sizden geri alındı", + "{user} revoked delegation for {account}" : "{user}, {account} yetki devrini geri aldı", "Mail Application" : "E-posta uygulaması", "Mails" : "E-postalar", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Gönderici e-posta adresi: %1$s adres defterinde yok. Ancak %2$s gönderici adı şu e-posta adresiyle birlikte adres defterinde var: %3$s", @@ -28,7 +32,7 @@ "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "app.mail.transport ayarı SMTP olarak ayarlanmamış. Bu yapılandırma, e-postalar doğrudan internet sunucusundan gönderildiği için SPF ve DKIM gibi modern e-posta güvenlik önlemleriyle ilgili sorunlara neden olabilir. Bu sunucu genellikle bu amaç için düzgün şekilde yapılandırılmamıştır. Bu sorunu çözmek için, e-posta aktarımı desteğini sonlandırdık. Lütfen SMTP aktarımını kullanmak ve bu iletiyi gizlemek için yapılandırmanızdan app.mail.transport seçeneğini kaldırın. E-posta aktarımını sağlamak için düzgün şekilde yapılandırılmış bir SMTP kurulumu gerekir.", "Mail account parameters, aliases and preferences" : "E-posta hesabı bilgileri, takma adlar ve tercihler", "💌 A mail app for Nextcloud" : "💌 Nextcloud e-posta uygulaması", - "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud için bir e-posta uygulaması**\n\n- **🚀 Diğer Nextcloud uygulamalarıyla bütünleşik!** Şu anda Kişiler, Takvim ve Dosyalar ile. Daha fazlası gelecek.\n- **📥 Birden çok e-posta hesabı!** Kişisel ya da şirket hesabınızı mı kullanacaksınız? Sorun değil ve güzel bir birleşik gelen kutusu. Herhangi bir IMAP hesabını bağlayabilirsiniz.\n- **🔒 Şifrelenmiş e-postalar gönderin ve alın!** Harika [Mailvelope](https://mailvelope.com) tarayıcı eklentisi ile.\n- **🙈 Tekerleği yeniden keşfetmiyoruz!** Harika [Horde](https://www.horde.org) kitaplıklarını kullanıyoruz.\n- **📬 Kendi e-posta sunucunuzu barındırmak ister misiniz?** [Mail-in-a-Box](https://mailinabox.email) kurabileceğiniz için bunu yeniden yapmak zorunda değiliz!\n\n## Etik yapay zeka değerlendirmesi\n\n### Öncelikli gelen kutusu 🟢\n\nOlumlu:\n* Bu modelin eğitim ve çıkarım yazılımı açık kaynak kodludur.\n* Model, kullanıcının kendi verilerine göre yerinde oluşturulur ve eğitilir.\n* Eğitim verilerine kullanıcı erişebilir, bu da sapmayı denetlemeyi veya düzeltmeyi ya da başarımı ve CO2 kullanımını iyileştirebilmeyi sağlar.\n\n### Yazışma özetleri (abonelik)\n\n**Değerlendirme:** 🟢/🟡/🟠/🔴\n\nDeğerlendirme, kurulu olan yazı işleme arka yüzüne bağlıdır. Ayrıntılı bilgi almak için [değerlendirme özeti](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) bölümüne bakabilirsiniz.\n\n[Blogumuzda](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) Nextcloud etik yapay zeka değerlendirmesi hakkında ayrıntılı bilgi alabilirsiniz.", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Nextcloud için bir e-posta uygulaması**\n\n- **🚀 Diğer Nextcloud uygulamalarıyla bütünleşik!** Şu anda Kişiler, Takvim ve Dosyalar ile. Daha fazlası gelecek.\n- **📥 Birden çok e-posta hesabı!** Kişisel ya da şirket hesabınızı mı kullanacaksınız? Sorun değil ve güzel bir birleşik gelen kutusu. Herhangi bir IMAP hesabını bağlayabilirsiniz.\n- **🔒 Şifrelenmiş e-postalar gönderin ve alın!** Harika [Mailvelope](https://mailvelope.com) tarayıcı eklentisi ile.\n- **🙈 Tekerleği yeniden keşfetmiyoruz!** Harika [Horde](https://www.horde.org) kitaplıklarını kullanıyoruz.\n- **📬 Kendi e-posta sunucunuzu barındırmak ister misiniz?** [Mail-in-a-Box](https://mailinabox.email) kurabileceğiniz için bunu yeniden yapmak zorunda değiliz!\n\n## Etik yapay zeka değerlendirmesi\n\n### Öncelikli gelen kutusu 🟢\n\nOlumlu:\n* Bu modelin eğitim ve çıkarım yazılımı açık kaynak kodludur.\n* Model, kullanıcının kendi verilerine göre yerinde oluşturulur ve eğitilir.\n* Eğitim verilerine kullanıcı erişebilir, bu da sapmayı denetlemeyi veya düzeltmeyi ya da başarımı ve CO2 kullanımını iyileştirebilmeyi sağlar.\n\n### Yazışma özetleri (abonelik)\n\n**Değerlendirme:** 🟢/🟡/🟠/🔴\n\nDeğerlendirme, kurulu olan yazı işleme arka yüzüne bağlıdır. Ayrıntılı bilgi almak için [değerlendirme özeti](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) bölümüne bakabilirsiniz.\n\n[Blogumuzda](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/) Nextcloud etik yapay zeka değerlendirmesi ile ilgili ayrıntılı bilgi alabilirsiniz.", "Your session has expired. The page will be reloaded." : "Oturumunuzun geçerlilik süresi dolmuş. Sayfa yeniden yüklenecek.", "Drafts are saved in:" : "Taslakların kaydedileceği yer:", "Sent messages are saved in:" : "Gönderilmiş iletilerin kaydedileceği yer:", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP bağlantı noktası", "SMTP User" : "SMTP kullanıcı adı", "SMTP Password" : "SMTP parolası", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Google hesabının bu uygulamayla çalışması için Google iki adımlı doğrulamasını açmanız ve bir uygulama parolası oluşturmanız gerekir.", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google için, OAuth kimlik doğrulaması gerekir. Nextcloud yöneticiniz Google OAuth yapılandırmasını tamamladıysa, bunun yerine bir Google uygulama parolası kullanabilirsiniz.", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft için, OAuth kimlik doğrulaması gerekir. Nextcloud yöneticinizden yönetici ayarlarından Microsoft OAuth yapılandırmasını tamamlamasını isteyin.", "Account settings" : "Hesap ayarları", "Aliases" : "Takma adlar", "Alias to S/MIME certificate mapping" : "S/MIME sertifika eşleştirmesinin takma adı", @@ -115,15 +120,15 @@ "Mail server" : "E-posta sunucusu", "Sieve server" : "Sieve sunucusu", "Folder search" : "Klasör ara", + "Email address" : "E-posta adresi", "Update alias" : "Takma adı güncelle", "Rename alias" : "Kısaltmayı yeniden adlandır", "Show update alias form" : "Takma adı güncelleme formunu görüntüle", "Delete alias" : "Takma adı sil", "Go back" : "Geri dön", "Change name" : "Adı değiştir", - "Email address" : "E-posta adresi", "Add alias" : "Takma ad ekle", - "Create alias" : "Takma ad ekle", + "Create alias" : "Takma ad oluştur", "Cancel" : "İptal", "Search the body of messages in priority Inbox" : "Öncelikli gelen kutusundaki iletilerin içeriğinde arama", "Activate" : "Etkinleştir", @@ -134,6 +139,7 @@ "Mail settings" : "E-posta ayarları", "General" : "Genel", "Set as default mail app" : "Varsayılan e-posta uygulaması olarak ayarla", + "{email} (delegated)" : "{email} (devredildi)", "Add mail account" : "E-posta hesabı ekle", "Appearance" : "Görünüm", "Show all messages in thread" : "Yazışmadaki tüm iletileri görüntüle", @@ -148,13 +154,16 @@ "Sorting" : "Sıralama", "Newest first" : "Yeniden eskiye", "Oldest first" : "Eskiden yeniye", + "New text block" : "Yeni yazı bloğu", + "Title of the text block" : "Yazı bloğunun başlığı", + "Content of the text block" : "Yazı bloğunun içeriği", + "Ok" : "Tamam", "Avatars from Gravatar and favicons" : "Avatarlar Gravatar ve site simgelerinden alınsın", "Reply position" : "Yanıt konumu", "Top" : "Üstte", "Bottom" : "Altta", "Text blocks" : "Yazı blokları", "Reusable pieces of text that can be inserted in messages" : "İletilere eklenebilen yeniden kullanılabilir yazı parçaları", - "New text block" : "Yeni yazı bloğu", "Shared with me" : "Benimle paylaşılanlar", "Privacy" : "Gizlilik", "Data collection" : "Veri toplama", @@ -185,9 +194,6 @@ "About" : "Hakkında", "Acknowledgements" : "Telif hakları", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "Bu uygulamada, açık kaynaklı bir düzenleyici olan CKEditor bulunur. Telif Hakkı © CKEditor gönüllüleri. GPLv2 lisansı koşulları altında dağıtılmaktadır.", - "Title of the text block" : "Yazı bloğunun başlığı", - "Content of the text block" : "Yazı bloğunun içeriği", - "Ok" : "Tamam", "Automatically create tentative appointments in calendar" : "Takvimde otomatik olarak belirsiz randevular oluşturulsun", "No certificate" : "Herhangi bir sertifika yok", "Certificate updated" : "Sertifika güncellendi", @@ -231,7 +237,6 @@ "Disable formatting" : "Biçimlendirme kullanılmasın", "Upload attachment" : "Ek dosya yükle", "Add attachment from Files" : "Dosyalardan ek dosya ekle", - "Add share link from Files" : "Dosyalar uygulamasına paylaşım bağlantısı ekle", "Smart picker" : "Akıllı seçici", "Request a read receipt" : "Okundu bilgisi iste", "Sign message with S/MIME" : "İleti S/MIME ile imzalansın", @@ -243,15 +248,28 @@ "Monday morning" : "Pazartesi sabah", "Custom date and time" : "Özel tarih ve saat", "Enter a date" : "Bir tarih yazın", - "Choose" : "Seçin", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Ek dosya izin verilen {size} ek dosya boyutunu aşıyor. Lütfen dosyayı bağlantı ile paylaşın.","Ek dosyalar izin verilen {size} ek dosya boyutunu aşıyor. Lütfen dosyaları bağlantı ile paylaşın."], - "Choose a file to add as attachment" : "Eklenecek ek dosyasını seçin", - "Choose a file to share as a link" : "Bağlantı olarak paylaşılacak bir dosya seçin", + "Choose a file" : "Bir dosya seçin", "_{count} attachment_::_{count} attachments_" : ["{count} ek dosya","{count} ek dosya"], "Untitled message" : "Adlandırılmamış ileti", "Expand composer" : "Oluşturucuyu genişlet", "Close composer" : "Oluşturucuyu kapat", "Confirm" : "Onayla", + "Delegate access" : "Yetkiyi devret", + "Revoke" : "Geçersiz kıl", + "{userId} will no longer be able to act on your behalf" : "{userId} artık sizin adınıza davranamayacak", + "Could not fetch delegates" : "Yetki devirleri alınamadı", + "Delegated access to {displayName}" : "Yetki {displayName} kullanıcısına devredildi", + "Could not delegate access" : "Yetki devredilemedi", + "Revoked access for {displayName}" : "Yetki devri {displayName} kullanıcısından geri alındı", + "Could not revoke delegation" : "Yetki devri geri alınamadı", + "Delegation" : "Yetki devri", + "Allow users to send, receive, and delete mail on your behalf" : "Kullanıcıların sizin adınıza e-posta göndermesine, almasına ve silmesine izin verin", + "Revoke access" : "Yetki devrini geri al", + "Add delegate" : "Yetki devri ekle", + "Select a user" : "Bir kullanıcı seçin", + "They will be able to send, receive, and delete mail on your behalf" : "Sizin adınıza eposta gönderebilecek, alabilecek ve silebilecek", + "Revoke access?" : "Yetki devri geri alınsın mı?", "Tag: {name} deleted" : "Etiket: {name} silindi", "An error occurred, unable to delete the tag." : "Bir sorun çıktı. Etiket silinemedi.", "The tag will be deleted from all messages." : "Etiket tüm iletilerden silinecek.", @@ -259,6 +277,7 @@ "Rich text" : "Zengin yazı", "No messages in this folder" : "Bu klasörde herhangi bir ileti yok", "No messages" : "Herhangi bir ileti yok", + "Choose" : "Seçin", "Blind copy recipients only" : "Alıcılar gizli kopya olarak eklensin", "No subject" : "Konu yok", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Taslak:{markup-end} {subject}", @@ -298,15 +317,15 @@ "Move Message" : "İletiyi taşı", "Archive thread" : "Yazışmayı arşivle", "Archive message" : "İletiyi arşivle", - "Delete thread" : "Yazışmayı sil", - "Delete message" : "İletiyi sil", "More actions" : "Diğer işlemler", "Back" : "Geri", "Set custom snooze" : "Özel erteleme ayarla", "Edit as new message" : "Yeni ileti olarak düzenle", "Reply with meeting" : "Toplamtı ile yanıtla", - "Create task" : "Görev ekle", + "Create task" : "Görev oluştur", "Download message" : "İletiyi indir", + "Delete thread" : "Yazışmayı sil", + "Delete message" : "İletiyi sil", "Back to all actions" : "Tüm işlemlere dön", "Manage quick actions" : "Hızlı işlem yönetimi", "Load more" : "Diğerlerini yükle", @@ -327,15 +346,17 @@ "Mark as unimportant" : "Önemsiz olarak işaretle", "Mark as important" : "Önemli olarak işaretle", "Report this bug" : "Bu hatayı bildirin", - "Event created" : "Etkinlik eklendi", + "This description was generated by AI." : "Bu açıklama yapay zeka tarafından oluşturulmuştur.", + "Event created" : "Etkinlik oluşturuldu", "Could not create event" : "Etkinlik oluşturulamadı", - "Create event" : "Etkinlik ekle", + "Create event" : "Etkinlik oluştur", + "Title" : "Başlık", "All day" : "Tüm gün", "Attendees" : "Katılanlar", "You can only invite attendees if your account has an email address set" : "Katılımcıları davet edebilmek için hesabınızın e-posta adresini ayarlamalısınız", "Select calendar" : "Takvim seçin", "Description" : "Açıklama", - "Create" : "Ekle", + "Create" : "Oluştur", "This event was updated" : "Bu etkinlik güncellendi", "{attendeeName} accepted your invitation" : "{attendeeName} davetinizi kabul etti", "{attendeeName} tentatively accepted your invitation" : "{attendeeName} davetinizi belirsiz olarak kabul etti", @@ -400,7 +421,9 @@ "Could not snooze message" : "İleti ertelenemedi", "Message was unsnoozed" : "İletinin ertelemesi kaldırıldı", "Could not unsnooze message" : "İletinin ertelemesi kaldırılamadı", + "Direct link copied to clipboard" : "Doğrudan bağlantı panoya kopyalandı", "Forward" : "İlet", + "Link copied" : "Bağlantı kopyalandı", "Move message" : "İletiyi taşı", "Translate" : "Çevir", "Forward message as attachment" : "İletiyi ek dosya olarak ilet", @@ -408,8 +431,10 @@ "Print message" : "İletiyi yazdır", "Create mail filter" : "E-posta süzgeçi oluştur", "Download thread data for debugging" : "Hata ayıklama için yazışma verilerini indir", + "Suggested replies are using AI" : "Yapay zeka ile önerilen yanıtlar", "Message body" : "İleti gövdesi", "Warning: The S/MIME signature of this message is unverified. The sender might be impersonating someone!" : "Uyarı: Bu iletinin S/MIME imzası doğrulanmamış. Gönderici, başka birinin kimliğine bürünmüş olabilir!", + "AI info" : "Yapay zeka bilgileri", "Unnamed" : "Adsız", "Embedded message" : "Gömülü ileti", "Attachment saved to Files" : "Ek dosya Dosyalar uygulamasına kaydedildi.", @@ -440,14 +465,17 @@ "Moving message" : "İleti taşınıyor", "This account cannot connect" : "Bu hesap bağlantı kuramadı", "Connection failed. Please verify your information and try again" : "Bağlantı kurulamadı. Lütfen bilgilerinizi doğrulayıp yeniden deneyin", + "Change password" : "Parolayı değiştir", "Used quota: {quota}% ({limit})" : "Kullanılan kota: %{quota} ({limit})", "Used quota: {quota}%" : "Kullanılan kota: %{quota}", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "E-posta kutusu oluşturulamadı. Büyük olasılıkla adında geçersiz karakterler var. Lütfen başka bir ad deneyin.", "Remove account" : "Hesabı sil", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} hesabı ve ön belleğe alınmış verileri Nextcloud üzerinden silinecek ancak e-posta hizmeti sağlayıcınız üzerinden silinmeyecek.", "Remove {email}" : "{email} sil", + "could not delete account" : "hesap silinemedi", "Provisioned account is disabled" : "Bu hesap kullanımdan kaldırılmış", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "Bu hesabı kullanıma almak için lütfen bir parola ile oturum açın. Geçerli oturum, tek oturum açma ya da WebAuthn gibi parolasız kimlik doğrulama kullanıyor.", + "Delegate account" : "Hesap yetkisini devret", "Show only subscribed folders" : "Yalnızca abone olunmuş klasörler görüntülensin", "Add folder" : "Klasör ekle", "Folder name" : "Klasör adı", @@ -590,12 +618,12 @@ "Tag name is a hidden system tag" : "Etiket adı sistem tarafından kullanılan bir gizli ad", "Tag already exists" : "Etiket zaten var", "Tag name cannot be empty" : "Etiket adı boş olamaz", - "An error occurred, unable to create the tag." : "Etiket eklenirken bir sorun çıktı.", + "An error occurred, unable to create the tag." : "Etiket oluşturulurken bir sorun çıktı.", "Add default tags" : "Varsayılan etiketler ekle", "Add tag" : "Etiket ekle", "Saving tag …" : "Etiket kaydediliyor…", - "Task created" : "Görev eklendi", - "Could not create task" : "Görev eklenemedi", + "Task created" : "Görev oluşturuldu", + "Could not create task" : "Görev oluşturulamadı", "No calendars with task list support" : "Görev listesi olan bir takvim yok", "Summarizing thread failed." : "Yazışma özetlenemedi.", "Could not load your message thread" : "İleti yazışmanız yüklenemedi", @@ -620,6 +648,10 @@ "Reply to sender only" : "Yalnızca gönderene yanıtla", "Mark as unfavorite" : "Sık kullanılanlardan kaldır", "Mark as favorite" : "Sık kullanılanlara ekle", + "From:" : "Başlangıç:", + "To:" : "Kime:", + "Cc:" : "Kopya:", + "Bcc:" : "Gizli kopya:", "Unsubscribe via link" : "Bağlantı ile abonelikten ayrıl", "Unsubscribing will stop all messages from the mailing list {sender}" : "Abonelikten ayrıldığınızda {sender} e-posta listesinden iletileri almayacaksınız ", "Send unsubscribe email" : "Abonelikten ayrılma e-postası gönder", @@ -816,6 +848,7 @@ "Certificate imported successfully" : "Sertifika içe aktarıldı", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Sertifika içe aktarılamadı. Lütfen kişisel anahtarın sertifika ile eşleştiğinden ve bir parola ile korunmadığından emin olun.", "Failed to import the certificate" : "Sertifika içe aktarılamadı", + "Import S/MIME certificate" : "S/MIME sertifikasını içe aktar", "S/MIME certificates" : "S/MIME sertifikaları", "Certificate name" : "Sertifika adı", "E-mail address" : "E-posta adresi", @@ -823,7 +856,6 @@ "Delete certificate" : "Sertifikayı sil", "No certificate imported yet" : "henüz bir sertifika içe aktarılmamış", "Import certificate" : "Sertifikayı içe aktar", - "Import S/MIME certificate" : "S/MIME sertifikasını içe aktar", "PKCS #12 Certificate" : "PKCS #12 sertifikası", "PEM Certificate" : "PEM sertifikası", "Certificate" : "Sertifika", @@ -870,6 +902,7 @@ "Discard changes" : "Değişiklikleri yok say", "Discard unsaved changes" : "Kaydedilmemiş değişiklikleri yok say", "Keep editing message" : "İletiyi düzenlemeyi sürdür", + "(All or part of this reply was generated by AI)" : "(Bu yanıtın tümü ya da bir bölümü yapay zeka ile oluşturulmuştur)", "Attachments were not copied. Please add them manually." : "Ek dosyalar kopyalanmadı. Lütfen el ile ekleyin.", "Could not create snooze mailbox" : "Erteleme kutusu oluşturulamadı", "Sorry, the message could not be loaded. The draft may no longer exist. Please refresh the page and try again." : "Ne yazık ki, ileti yüklenemedi. Taslak artık var olmayabilir. Lütfen sayfayı yenileyip yeniden deneyin.", @@ -884,11 +917,10 @@ "Could not load the desired message" : "İstenilen ileti yüklenemedi", "Could not load the message" : "İleti yüklenemedi", "Error loading message" : "İleti yüklenirken sorun çıktı", - "Determine importance using machine learning" : "Önem makine öğrenmesi ile belirlensin", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "İletiler, hangileri ile etkileşim kurduğunuza ya da hangilerini önemli olarak işaretlediğinize göre otomatik olarak önemli olarak işaretlenecek.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Gönderdiğiniz ve yanıtlanması gereken ancak birkaç gün geçmesine rağmen yanıt alamayan iletileriniz burada görüntülenir.", - "Mark all messages of this folder as read" : "Bu klasördeki tüm iletileri okunmuş olarak işaretle", - "Last 7 days" : "Önceki 7 gün", - "From me" : "Benden" + "Add share link from Files" : "Dosyalar uygulamasına paylaşım bağlantısı ekle", + "Choose a file to add as attachment" : "Eklenecek ek dosyasını seçin", + "Choose a file to share as a link" : "Bağlantı olarak paylaşılacak bir dosya seçin", + "Delegated access to {userId}" : "Yetki {userId} kullanıcısına devredildi", + "Revoked access for {userId}" : "{userId} yetki devri geri alındı" },"pluralForm" :"nplurals=2; plural=(n > 1);" } \ No newline at end of file diff --git a/l10n/ug.js b/l10n/ug.js index 21532a170d..9b56a0cbd7 100644 --- a/l10n/ug.js +++ b/l10n/ug.js @@ -93,7 +93,6 @@ OC.L10N.register( "SMTP Port" : "SMTP ئېغىزى", "SMTP User" : "SMTP ئىشلەتكۈچى", "SMTP Password" : "SMTP پارول", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "گۇگۇل ھېساباتىنىڭ بۇ دېتال بىلەن ئىشلىشى ئۈچۈن گۇگۇل ئۈچۈن ئىككى ئامىللىق دەلىللەشنى قوزغىتىپ ، بىر پارول ھاسىل قىلىشىڭىز كېرەك.", "Account settings" : "ھېسابات تەڭشىكى", "Aliases" : "لەقەملەر", "Alias to S/MIME certificate mapping" : "S/MIME گۇۋاھنامىسىنىڭ خەرىتىسى", @@ -117,13 +116,13 @@ OC.L10N.register( "Mail server" : "خەت مۇلازىمېتىرى", "Sieve server" : "مۇلازىمېتىر", "Folder search" : "قىسقۇچ ئىزدەش", + "Email address" : "ئېلخەت ئادرېسى", "Update alias" : "نامىنى يېڭىلاش", "Rename alias" : "نامىنى ئۆزگەرتىڭ", "Show update alias form" : "يېڭىلاش نامىنى كۆرسىتىدۇ", "Delete alias" : "ئۆچۈرۈڭ", "Go back" : "قايتىڭ", "Change name" : "ئىسىم ئۆزگەرتىش", - "Email address" : "ئېلخەت ئادرېسى", "Add alias" : "ئالياس قوشۇڭ", "Create alias" : "لەقەم قۇر", "Cancel" : "ۋاز كەچ", @@ -148,13 +147,16 @@ OC.L10N.register( "Sorting" : "تەرتىپلەش", "Newest first" : "ئەڭ يېڭى", "Oldest first" : "ئەڭ كونا", + "New text block" : "يېڭى تىكىست بۆلىكى", + "Title of the text block" : "تېكىست بۆلىكىنىڭ ماۋزوسى", + "Content of the text block" : "تېكىست بۆلىكىنىڭ مەزمۇنى", + "Ok" : "جەزملە", "Avatars from Gravatar and favicons" : "Gravatar باش سۈرەتلىرى ھەمدە لوگولار", "Reply position" : "جاۋاپ ئورنى", "Top" : "يۇقۇرى", "Bottom" : "تۆۋەن", "Text blocks" : "تىكىست بۆلىكى", "Reusable pieces of text that can be inserted in messages" : "خەۋەرلەرگە قىستۇرغىلى بولىدىغان قايتا ئىشلىتىشكە بولىدىغان تېكىست پارچىلىرى", - "New text block" : "يېڭى تىكىست بۆلىكى", "Shared with me" : "مەن بىلەن ئورتاقلاشتى", "Privacy" : "مەخپىيەتلىك", "Data collection" : "ئۇچۇر يىغىش", @@ -185,9 +187,6 @@ OC.L10N.register( "About" : "ھەققىدە", "Acknowledgements" : "ئېتراپ قىلىش", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "بۇ ئەپ ئوچۇق كودلۇق تەھرىرلىگۈچى CKEditor نى ئۆز ئىچىگە ئالىدۇ. نەشر ھوقۇقى © CKEditor تۆھپىكارلىرىغا تەۋە. GPLv2 بويىچە ئىجازەتنامە بېرىلگەن.", - "Title of the text block" : "تېكىست بۆلىكىنىڭ ماۋزوسى", - "Content of the text block" : "تېكىست بۆلىكىنىڭ مەزمۇنى", - "Ok" : "جەزملە", "No certificate" : "گۇۋاھنامە يوق", "Certificate updated" : "گۇۋاھنامە يېڭىلاندى", "Could not update certificate" : "گۇۋاھنامىنى يېڭىلىيالمىدى", @@ -230,7 +229,6 @@ OC.L10N.register( "Disable formatting" : "فورماتنى چەكلەڭ", "Upload attachment" : "قوشۇمچە ھۆججەتنى يۈكلەڭ", "Add attachment from Files" : "ھۆججەتلەردىن قوشۇمچە ھۆججەت قوشۇڭ", - "Add share link from Files" : "ھۆججەتلەردىن ھەمبەھىر ئۇلانمىسىنى قوشۇڭ", "Smart picker" : "ئەقىللىق تاللىغۇچ", "Request a read receipt" : "ئوقۇش تالونىنى تەلەپ قىلىڭ", "Sign message with S/MIME" : "S/MIME بىلەن ئۇچۇر ئىمزالاڭ", @@ -242,15 +240,14 @@ OC.L10N.register( "Monday morning" : "دۈشەنبە ئەتىگەن", "Custom date and time" : "ئىختىيارى چېسلا ۋە ۋاقىت", "Enter a date" : "چېسلانى كىرگۈزۈڭ", - "Choose" : "تاللاڭ", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["قوشۇمچە ھۆججەتنىڭ چوڭلۇقى {size} دىن ئېشىپ كەتتى. ھۆججەتنى ئۇلىنىش ئارقىلىق ئورتاقلىشىڭ.","قوشۇمچە ھۆججەتلەر رۇخسەت قىلىنغان {size} قوشۇمچە ھۆججەت چوڭلۇقىدىن ئېشىپ كەتتى. ھۆججەتلەرنى ئۇلىنىش ئارقىلىق ئورتاقلىشىڭ."], - "Choose a file to add as attachment" : "قوشۇمچە قىلىپ قوشماقچى بولغان ھۆججەتنى تاللاڭ", - "Choose a file to share as a link" : "ئۇلىنىش سۈپىتىدە ھەمبەھىرلىنىدىغان ھۆججەتنى تاللاڭ", + "Choose a file" : "ھۆججەت تاللاڭ", "_{count} attachment_::_{count} attachments_" : ["{count} يوللانما","{count} يوللانمىلار"], "Untitled message" : "نامسىز ئۇچۇر", "Expand composer" : "كومپوزىتورنى كېڭەيتىڭ", "Close composer" : "كومپوزىتورنى تاقاش", "Confirm" : "جەزملەشتۈرۈڭ", + "Revoke" : "بىكار قىلىش", "Tag: {name} deleted" : "خەتكۈچ: {name} ئۆچۈرۈلدى", "An error occurred, unable to delete the tag." : "خەتكۈچنى ئۆچۈرەلمەي خاتالىق كۆرۈلدى.", "The tag will be deleted from all messages." : "خەتكۈچ بارلىق ئۇچۇرلاردىن ئۆچۈرۈلىدۇ.", @@ -258,6 +255,7 @@ OC.L10N.register( "Rich text" : "مول تېكىست", "No messages in this folder" : "بۇ قىسقۇچتا ئۇچۇر يوق", "No messages" : "ھېچقانداق ئۇچۇر يوق", + "Choose" : "تاللاڭ", "Blind copy recipients only" : "پەقەت ئەمالار كۆپەيتكۈچى", "No subject" : "تېما يوق", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} قوليازما: {markup-end} {subject}", @@ -297,8 +295,6 @@ OC.L10N.register( "Move Message" : "ئۇچۇر يۆتكە", "Archive thread" : "ئارخىپ تېمىسى", "Archive message" : "ئارخىپ ئۇچۇرى", - "Delete thread" : "تېمىنى ئۆچۈرۈڭ", - "Delete message" : "ئۇچۇرنى ئۆچۈرۈڭ", "More actions" : "تېخىمۇ كۆپ ھەرىكەت", "Back" : "قايتىش", "Set custom snooze" : "ئىختىيارى ئۇخلاشنى تەڭشەڭ", @@ -306,6 +302,8 @@ OC.L10N.register( "Reply with meeting" : "يىغىن بىلەن جاۋاپ قايتۇر", "Create task" : "ۋەزىپە قۇرۇش", "Download message" : "ئۇچۇرنى چۈشۈرۈش", + "Delete thread" : "تېمىنى ئۆچۈرۈڭ", + "Delete message" : "ئۇچۇرنى ئۆچۈرۈڭ", "Back to all actions" : "بارلىق ھەركەتكە قايت", "Manage quick actions" : "تېز ھەركەتلەرنى باشقۇر", "Load more" : "تېخىمۇ كۆپ يۈكلەڭ", @@ -329,6 +327,7 @@ OC.L10N.register( "Event created" : "پائالىيەت قۇرۇلدى", "Could not create event" : "ھادىسە قۇرالمىدى", "Create event" : "ھادىسە قۇرۇش", + "Title" : "ماۋزۇ", "All day" : "پۈتۈن كۈن", "Attendees" : "قاتناشقۇچىلار", "You can only invite attendees if your account has an email address set" : "پەقەت ھېساباتىڭىزدا ئېلخەت ئادرېسى بەلگىلەنگەن بولسا، قاتناشقۇچىلارنى تەكلىپ قىلالايسىز", @@ -396,7 +395,9 @@ OC.L10N.register( "Could not snooze message" : "ئۇچۇرنى بوشاشتۇرالمىدى", "Message was unsnoozed" : "ئۇچۇر بىكار قىلىنمىدى", "Could not unsnooze message" : "ئۇچۇرنى بىكار قىلالمىدى", + "Direct link copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن بىۋاسىتە ئۇلىنىش", "Forward" : "ئالدىغا", + "Link copied" : "ئۇلىنىش كۆچۈرۈلدى", "Move message" : "ئۇچۇر يۆتكەش", "Translate" : "تەرجىمە قىلىڭ", "Forward message as attachment" : "قوشۇمچە ئۇچۇر سۈپىتىدە قوشۇمچە ئۇچۇر", @@ -436,6 +437,7 @@ OC.L10N.register( "Moving message" : "يۆتكىلىشچان ئۇچۇر", "This account cannot connect" : "بۇ ھېسابات ئۇلانمىدى", "Connection failed. Please verify your information and try again" : "ئۇلىنىش مەغلۇپ بولدى. ئۇچۇرلىرىڭىزنى جەزملەشتۈرۈپ قايتا سىناپ بېقىڭ.", + "Change password" : "پارولنى ئۆزگەرتىڭ", "Used quota: {quota}% ({limit})" : "ئىشلىتىلگەن سىغىم: {quota}% ({limit})", "Used quota: {quota}%" : "ئىشلىتىلگەن سىغىم: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "پوچتا ساندۇقى قۇرۇلمىدى. بۇ ئىسىمدا خاتا ھەرپلەر بولۇشى مۇمكىن. باشقا ئىسىمنى سىناپ بېقىڭ.", @@ -616,6 +618,8 @@ OC.L10N.register( "Reply to sender only" : "ئەۋەتكۈچىگە جاۋاب قايتۇرۇڭ", "Mark as unfavorite" : "ياقتۇرمايدىغان دەپ بەلگە قويۇڭ", "Mark as favorite" : "ياقتۇرىدىغان دەپ بەلگە قويۇڭ", + "From:" : "دىن:", + "To:" : "غا:", "Unsubscribe via link" : "ئۇلىنىش ئارقىلىق مۇشتەرى بولۇڭ", "Unsubscribing will stop all messages from the mailing list {sender}" : "مۇشتەرى بولۇش خەت ئەۋەتىش تىزىملىكىدىكى بارلىق ئۇچۇرلارنى توختىتىدۇ {sender}", "Send unsubscribe email" : "مۇشتەرى بولمىغان ئېلېكترونلۇق خەت ئەۋەتىڭ", @@ -811,6 +815,7 @@ OC.L10N.register( "Certificate imported successfully" : "مۇۋەپپەقىيەتلىك ئىمپورت قىلىنغان گۇۋاھنامە", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "گۇۋاھنامىنى ئەكىرىش مەغلۇب بولدى. شەخسىي ئاچقۇچنىڭ گۇۋاھنامىگە ماس كېلىدىغانلىقى ۋە ئىم بىلەن قوغدالمىغانلىقىغا كاپالەتلىك قىلىڭ.", "Failed to import the certificate" : "گۇۋاھنامىنى ئەكىرىش مەغلۇب بولدى", + "Import S/MIME certificate" : "S/MIME گۇۋاھنامىسىنى ئەكىرىڭ", "S/MIME certificates" : "S/MIME گۇۋاھنامىسى", "Certificate name" : "گۇۋاھنامە ئىسمى", "E-mail address" : "ئېلېكترونلۇق خەت ئادرېسى", @@ -818,7 +823,6 @@ OC.L10N.register( "Delete certificate" : "گۇۋاھنامىنى ئۆچۈرۈڭ", "No certificate imported yet" : "تېخى ئىمپورت قىلىنغان گۇۋاھنامە يوق", "Import certificate" : "گۇۋاھنامە ئەكىرىش", - "Import S/MIME certificate" : "S/MIME گۇۋاھنامىسىنى ئەكىرىڭ", "PKCS #12 Certificate" : "PKCS # 12 گۇۋاھنامىسى", "PEM Certificate" : "PEM گۇۋاھنامىسى", "Certificate" : "گۇۋاھنامە", @@ -878,11 +882,8 @@ OC.L10N.register( "Could not load the desired message" : "لازىملىق ئۇچۇرنى يۈكلىيەلمىدى", "Could not load the message" : "ئۇچۇرنى يۈكلىيەلمىدى", "Error loading message" : "ئۇچۇر يۈكلەشتە خاتالىق", - "Determine importance using machine learning" : "ماشىنىلىق ئۆگىنىش ئارقىلىق مۇھىملىقىنى بەلگىلە", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "سىز قايسى ئۇچۇرلار بىلەن ئالاقە قىلغان ياكى مۇھىم دەپ بەلگە قويۇلغان ئۇچۇرلار ئاپتوماتىك ھالدا مۇھىم دەپ بەلگە قىلىنىدۇ. باشتا سىز سىستېمىنى ئوقۇتۇشنىڭ مۇھىملىقىنى قولدا ئۆزگەرتىشىڭىز مۇمكىن ، ئەمما ۋاقىتنىڭ ئۆتۈشىگە ئەگىشىپ ياخشىلىنىدۇ.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "سىز ئەۋەتكەن جاۋابنى تەلەپ قىلىدىغان ، ئەمما بىر نەچچە كۈندىن كېيىن تاپشۇرۇۋالمىغان ئۇچۇرلار بۇ يەردە كۆرسىتىلىدۇ.", - "Mark all messages of this folder as read" : "بۇ قىسقۇچتىكى بارلىق ئۇچۇرلارنى ئوقۇغان قىل", - "Last 7 days" : "ئاخىرقى 7 كۈن", - "From me" : "مەندىن" + "Add share link from Files" : "ھۆججەتلەردىن ھەمبەھىر ئۇلانمىسىنى قوشۇڭ", + "Choose a file to add as attachment" : "قوشۇمچە قىلىپ قوشماقچى بولغان ھۆججەتنى تاللاڭ", + "Choose a file to share as a link" : "ئۇلىنىش سۈپىتىدە ھەمبەھىرلىنىدىغان ھۆججەتنى تاللاڭ" }, "nplurals=2; plural=(n != 1);"); diff --git a/l10n/ug.json b/l10n/ug.json index c002da5842..7dc5757d98 100644 --- a/l10n/ug.json +++ b/l10n/ug.json @@ -91,7 +91,6 @@ "SMTP Port" : "SMTP ئېغىزى", "SMTP User" : "SMTP ئىشلەتكۈچى", "SMTP Password" : "SMTP پارول", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "گۇگۇل ھېساباتىنىڭ بۇ دېتال بىلەن ئىشلىشى ئۈچۈن گۇگۇل ئۈچۈن ئىككى ئامىللىق دەلىللەشنى قوزغىتىپ ، بىر پارول ھاسىل قىلىشىڭىز كېرەك.", "Account settings" : "ھېسابات تەڭشىكى", "Aliases" : "لەقەملەر", "Alias to S/MIME certificate mapping" : "S/MIME گۇۋاھنامىسىنىڭ خەرىتىسى", @@ -115,13 +114,13 @@ "Mail server" : "خەت مۇلازىمېتىرى", "Sieve server" : "مۇلازىمېتىر", "Folder search" : "قىسقۇچ ئىزدەش", + "Email address" : "ئېلخەت ئادرېسى", "Update alias" : "نامىنى يېڭىلاش", "Rename alias" : "نامىنى ئۆزگەرتىڭ", "Show update alias form" : "يېڭىلاش نامىنى كۆرسىتىدۇ", "Delete alias" : "ئۆچۈرۈڭ", "Go back" : "قايتىڭ", "Change name" : "ئىسىم ئۆزگەرتىش", - "Email address" : "ئېلخەت ئادرېسى", "Add alias" : "ئالياس قوشۇڭ", "Create alias" : "لەقەم قۇر", "Cancel" : "ۋاز كەچ", @@ -146,13 +145,16 @@ "Sorting" : "تەرتىپلەش", "Newest first" : "ئەڭ يېڭى", "Oldest first" : "ئەڭ كونا", + "New text block" : "يېڭى تىكىست بۆلىكى", + "Title of the text block" : "تېكىست بۆلىكىنىڭ ماۋزوسى", + "Content of the text block" : "تېكىست بۆلىكىنىڭ مەزمۇنى", + "Ok" : "جەزملە", "Avatars from Gravatar and favicons" : "Gravatar باش سۈرەتلىرى ھەمدە لوگولار", "Reply position" : "جاۋاپ ئورنى", "Top" : "يۇقۇرى", "Bottom" : "تۆۋەن", "Text blocks" : "تىكىست بۆلىكى", "Reusable pieces of text that can be inserted in messages" : "خەۋەرلەرگە قىستۇرغىلى بولىدىغان قايتا ئىشلىتىشكە بولىدىغان تېكىست پارچىلىرى", - "New text block" : "يېڭى تىكىست بۆلىكى", "Shared with me" : "مەن بىلەن ئورتاقلاشتى", "Privacy" : "مەخپىيەتلىك", "Data collection" : "ئۇچۇر يىغىش", @@ -183,9 +185,6 @@ "About" : "ھەققىدە", "Acknowledgements" : "ئېتراپ قىلىش", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "بۇ ئەپ ئوچۇق كودلۇق تەھرىرلىگۈچى CKEditor نى ئۆز ئىچىگە ئالىدۇ. نەشر ھوقۇقى © CKEditor تۆھپىكارلىرىغا تەۋە. GPLv2 بويىچە ئىجازەتنامە بېرىلگەن.", - "Title of the text block" : "تېكىست بۆلىكىنىڭ ماۋزوسى", - "Content of the text block" : "تېكىست بۆلىكىنىڭ مەزمۇنى", - "Ok" : "جەزملە", "No certificate" : "گۇۋاھنامە يوق", "Certificate updated" : "گۇۋاھنامە يېڭىلاندى", "Could not update certificate" : "گۇۋاھنامىنى يېڭىلىيالمىدى", @@ -228,7 +227,6 @@ "Disable formatting" : "فورماتنى چەكلەڭ", "Upload attachment" : "قوشۇمچە ھۆججەتنى يۈكلەڭ", "Add attachment from Files" : "ھۆججەتلەردىن قوشۇمچە ھۆججەت قوشۇڭ", - "Add share link from Files" : "ھۆججەتلەردىن ھەمبەھىر ئۇلانمىسىنى قوشۇڭ", "Smart picker" : "ئەقىللىق تاللىغۇچ", "Request a read receipt" : "ئوقۇش تالونىنى تەلەپ قىلىڭ", "Sign message with S/MIME" : "S/MIME بىلەن ئۇچۇر ئىمزالاڭ", @@ -240,15 +238,14 @@ "Monday morning" : "دۈشەنبە ئەتىگەن", "Custom date and time" : "ئىختىيارى چېسلا ۋە ۋاقىت", "Enter a date" : "چېسلانى كىرگۈزۈڭ", - "Choose" : "تاللاڭ", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["قوشۇمچە ھۆججەتنىڭ چوڭلۇقى {size} دىن ئېشىپ كەتتى. ھۆججەتنى ئۇلىنىش ئارقىلىق ئورتاقلىشىڭ.","قوشۇمچە ھۆججەتلەر رۇخسەت قىلىنغان {size} قوشۇمچە ھۆججەت چوڭلۇقىدىن ئېشىپ كەتتى. ھۆججەتلەرنى ئۇلىنىش ئارقىلىق ئورتاقلىشىڭ."], - "Choose a file to add as attachment" : "قوشۇمچە قىلىپ قوشماقچى بولغان ھۆججەتنى تاللاڭ", - "Choose a file to share as a link" : "ئۇلىنىش سۈپىتىدە ھەمبەھىرلىنىدىغان ھۆججەتنى تاللاڭ", + "Choose a file" : "ھۆججەت تاللاڭ", "_{count} attachment_::_{count} attachments_" : ["{count} يوللانما","{count} يوللانمىلار"], "Untitled message" : "نامسىز ئۇچۇر", "Expand composer" : "كومپوزىتورنى كېڭەيتىڭ", "Close composer" : "كومپوزىتورنى تاقاش", "Confirm" : "جەزملەشتۈرۈڭ", + "Revoke" : "بىكار قىلىش", "Tag: {name} deleted" : "خەتكۈچ: {name} ئۆچۈرۈلدى", "An error occurred, unable to delete the tag." : "خەتكۈچنى ئۆچۈرەلمەي خاتالىق كۆرۈلدى.", "The tag will be deleted from all messages." : "خەتكۈچ بارلىق ئۇچۇرلاردىن ئۆچۈرۈلىدۇ.", @@ -256,6 +253,7 @@ "Rich text" : "مول تېكىست", "No messages in this folder" : "بۇ قىسقۇچتا ئۇچۇر يوق", "No messages" : "ھېچقانداق ئۇچۇر يوق", + "Choose" : "تاللاڭ", "Blind copy recipients only" : "پەقەت ئەمالار كۆپەيتكۈچى", "No subject" : "تېما يوق", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start} قوليازما: {markup-end} {subject}", @@ -295,8 +293,6 @@ "Move Message" : "ئۇچۇر يۆتكە", "Archive thread" : "ئارخىپ تېمىسى", "Archive message" : "ئارخىپ ئۇچۇرى", - "Delete thread" : "تېمىنى ئۆچۈرۈڭ", - "Delete message" : "ئۇچۇرنى ئۆچۈرۈڭ", "More actions" : "تېخىمۇ كۆپ ھەرىكەت", "Back" : "قايتىش", "Set custom snooze" : "ئىختىيارى ئۇخلاشنى تەڭشەڭ", @@ -304,6 +300,8 @@ "Reply with meeting" : "يىغىن بىلەن جاۋاپ قايتۇر", "Create task" : "ۋەزىپە قۇرۇش", "Download message" : "ئۇچۇرنى چۈشۈرۈش", + "Delete thread" : "تېمىنى ئۆچۈرۈڭ", + "Delete message" : "ئۇچۇرنى ئۆچۈرۈڭ", "Back to all actions" : "بارلىق ھەركەتكە قايت", "Manage quick actions" : "تېز ھەركەتلەرنى باشقۇر", "Load more" : "تېخىمۇ كۆپ يۈكلەڭ", @@ -327,6 +325,7 @@ "Event created" : "پائالىيەت قۇرۇلدى", "Could not create event" : "ھادىسە قۇرالمىدى", "Create event" : "ھادىسە قۇرۇش", + "Title" : "ماۋزۇ", "All day" : "پۈتۈن كۈن", "Attendees" : "قاتناشقۇچىلار", "You can only invite attendees if your account has an email address set" : "پەقەت ھېساباتىڭىزدا ئېلخەت ئادرېسى بەلگىلەنگەن بولسا، قاتناشقۇچىلارنى تەكلىپ قىلالايسىز", @@ -394,7 +393,9 @@ "Could not snooze message" : "ئۇچۇرنى بوشاشتۇرالمىدى", "Message was unsnoozed" : "ئۇچۇر بىكار قىلىنمىدى", "Could not unsnooze message" : "ئۇچۇرنى بىكار قىلالمىدى", + "Direct link copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن بىۋاسىتە ئۇلىنىش", "Forward" : "ئالدىغا", + "Link copied" : "ئۇلىنىش كۆچۈرۈلدى", "Move message" : "ئۇچۇر يۆتكەش", "Translate" : "تەرجىمە قىلىڭ", "Forward message as attachment" : "قوشۇمچە ئۇچۇر سۈپىتىدە قوشۇمچە ئۇچۇر", @@ -434,6 +435,7 @@ "Moving message" : "يۆتكىلىشچان ئۇچۇر", "This account cannot connect" : "بۇ ھېسابات ئۇلانمىدى", "Connection failed. Please verify your information and try again" : "ئۇلىنىش مەغلۇپ بولدى. ئۇچۇرلىرىڭىزنى جەزملەشتۈرۈپ قايتا سىناپ بېقىڭ.", + "Change password" : "پارولنى ئۆزگەرتىڭ", "Used quota: {quota}% ({limit})" : "ئىشلىتىلگەن سىغىم: {quota}% ({limit})", "Used quota: {quota}%" : "ئىشلىتىلگەن سىغىم: {quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "پوچتا ساندۇقى قۇرۇلمىدى. بۇ ئىسىمدا خاتا ھەرپلەر بولۇشى مۇمكىن. باشقا ئىسىمنى سىناپ بېقىڭ.", @@ -614,6 +616,8 @@ "Reply to sender only" : "ئەۋەتكۈچىگە جاۋاب قايتۇرۇڭ", "Mark as unfavorite" : "ياقتۇرمايدىغان دەپ بەلگە قويۇڭ", "Mark as favorite" : "ياقتۇرىدىغان دەپ بەلگە قويۇڭ", + "From:" : "دىن:", + "To:" : "غا:", "Unsubscribe via link" : "ئۇلىنىش ئارقىلىق مۇشتەرى بولۇڭ", "Unsubscribing will stop all messages from the mailing list {sender}" : "مۇشتەرى بولۇش خەت ئەۋەتىش تىزىملىكىدىكى بارلىق ئۇچۇرلارنى توختىتىدۇ {sender}", "Send unsubscribe email" : "مۇشتەرى بولمىغان ئېلېكترونلۇق خەت ئەۋەتىڭ", @@ -809,6 +813,7 @@ "Certificate imported successfully" : "مۇۋەپپەقىيەتلىك ئىمپورت قىلىنغان گۇۋاھنامە", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "گۇۋاھنامىنى ئەكىرىش مەغلۇب بولدى. شەخسىي ئاچقۇچنىڭ گۇۋاھنامىگە ماس كېلىدىغانلىقى ۋە ئىم بىلەن قوغدالمىغانلىقىغا كاپالەتلىك قىلىڭ.", "Failed to import the certificate" : "گۇۋاھنامىنى ئەكىرىش مەغلۇب بولدى", + "Import S/MIME certificate" : "S/MIME گۇۋاھنامىسىنى ئەكىرىڭ", "S/MIME certificates" : "S/MIME گۇۋاھنامىسى", "Certificate name" : "گۇۋاھنامە ئىسمى", "E-mail address" : "ئېلېكترونلۇق خەت ئادرېسى", @@ -816,7 +821,6 @@ "Delete certificate" : "گۇۋاھنامىنى ئۆچۈرۈڭ", "No certificate imported yet" : "تېخى ئىمپورت قىلىنغان گۇۋاھنامە يوق", "Import certificate" : "گۇۋاھنامە ئەكىرىش", - "Import S/MIME certificate" : "S/MIME گۇۋاھنامىسىنى ئەكىرىڭ", "PKCS #12 Certificate" : "PKCS # 12 گۇۋاھنامىسى", "PEM Certificate" : "PEM گۇۋاھنامىسى", "Certificate" : "گۇۋاھنامە", @@ -876,11 +880,8 @@ "Could not load the desired message" : "لازىملىق ئۇچۇرنى يۈكلىيەلمىدى", "Could not load the message" : "ئۇچۇرنى يۈكلىيەلمىدى", "Error loading message" : "ئۇچۇر يۈكلەشتە خاتالىق", - "Determine importance using machine learning" : "ماشىنىلىق ئۆگىنىش ئارقىلىق مۇھىملىقىنى بەلگىلە", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "سىز قايسى ئۇچۇرلار بىلەن ئالاقە قىلغان ياكى مۇھىم دەپ بەلگە قويۇلغان ئۇچۇرلار ئاپتوماتىك ھالدا مۇھىم دەپ بەلگە قىلىنىدۇ. باشتا سىز سىستېمىنى ئوقۇتۇشنىڭ مۇھىملىقىنى قولدا ئۆزگەرتىشىڭىز مۇمكىن ، ئەمما ۋاقىتنىڭ ئۆتۈشىگە ئەگىشىپ ياخشىلىنىدۇ.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "سىز ئەۋەتكەن جاۋابنى تەلەپ قىلىدىغان ، ئەمما بىر نەچچە كۈندىن كېيىن تاپشۇرۇۋالمىغان ئۇچۇرلار بۇ يەردە كۆرسىتىلىدۇ.", - "Mark all messages of this folder as read" : "بۇ قىسقۇچتىكى بارلىق ئۇچۇرلارنى ئوقۇغان قىل", - "Last 7 days" : "ئاخىرقى 7 كۈن", - "From me" : "مەندىن" + "Add share link from Files" : "ھۆججەتلەردىن ھەمبەھىر ئۇلانمىسىنى قوشۇڭ", + "Choose a file to add as attachment" : "قوشۇمچە قىلىپ قوشماقچى بولغان ھۆججەتنى تاللاڭ", + "Choose a file to share as a link" : "ئۇلىنىش سۈپىتىدە ھەمبەھىرلىنىدىغان ھۆججەتنى تاللاڭ" },"pluralForm" :"nplurals=2; plural=(n != 1);" } \ No newline at end of file diff --git a/l10n/uk.js b/l10n/uk.js index 34c0ffca3b..618d29ba32 100644 --- a/l10n/uk.js +++ b/l10n/uk.js @@ -14,7 +14,7 @@ OC.L10N.register( "Mail" : "Пошта", "You are reaching your mailbox quota limit for {account_email}" : "Ви майже вичерпали доступний вам обсяг поштової скриньки {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Поточний обсяг вагої поштової скриньки {percentage}. Ви можете звільнити більше місця, якщо вилучите непотрібні електронні листи.", - "Mail Application" : "Поштовий додаток", + "Mail Application" : "Застосунок Пошта", "Mails" : "Пошта", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Email відправника: %1$s немає в адресній книзі, але ім'я відправника: %2$s є в адресній книзі з такою адресою: %3$s", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Email відправника: %1$s немає в адресній книзі, але ім'я відправника: %2$s є в адресній книзі з наступними адресами: %3$s", @@ -27,7 +27,7 @@ OC.L10N.register( "Mail Transport configuration" : "Конфігурація поштового транспорту", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "У параметрі app.mail.transport не встановлено значення smtp. Така конфігурація може спричинити проблеми з сучасними засобами захисту електронної пошти, такими як SPF і DKIM, оскільки листи надсилаються безпосередньо з веб-сервера, який часто не налаштований належним чином для цієї мети. Щоб вирішити цю проблему, ми припинили підтримку поштового транспорту. Будь ласка, видаліть app.mail.transport з вашої конфігурації, щоб використовувати транспорт SMTP, і приховайте це повідомлення. Належне налаштування SMTP необхідне для забезпечення доставки електронної пошти.", "💌 A mail app for Nextcloud" : "💌 Поштовий застосунок для Nextcloud", - "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Застосунок Пошта для Nextcloud\n\n- **🚀 Інтеграція з іншими додатками Nextcloud!** Наразі Контакти, Календар та Файли - більше попереду.\n- **📥 Кілька поштових акаунтів! Особистий та корпоративний? Ніяких проблем, і приємна уніфікована поштова скринька. Підключіть будь-який обліковий запис IMAP.\n- **🔒 Надсилайте та отримуйте зашифровані листи! ** Використовуйте чудове розширення для браузера [Mailvelope](https://mailvelope.com).\n- **🙈 Ми не вигадуємо велосипед! ** На основі чудових бібліотек [Horde](https://www.horde.org).\n- **📬 Хочете розмістити свій власний поштовий сервер?** Нам не потрібно реалізовувати це заново, оскільки ви можете налаштувати [Mail-in-a-Box](https://mailinabox.email)!\n\n## Рейтинг етичності ШІ\n\n### Пріоритетні вхідні\n\nПозитивний:\n* Програмне забезпечення для навчання та виведення висновків цієї моделі має відкритий вихідний код.\n* Модель створюється та навчається локально на основі власних даних користувача.\n* Навчальні дані є доступними для користувача, що дає можливість перевірити або виправити упередженість або оптимізувати продуктивність та використання CO2.\n\n### Підсумки потоків (за бажанням)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг залежить від встановленого бекенду обробки тексту. Дивіться [огляд рейтингу] (https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для отримання додаткової інформації.\n\nДізнайтеся більше про рейтинг етичності ШІ Nextcloud [у нашому блозі](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Застосунок Пошта для Nextcloud\n\n- **🚀 Інтеграція з іншими застосунками Nextcloud!** Наразі Контакти, Календар та Файли - більше попереду.\n- **📥 Кілька поштових акаунтів! Особистий та корпоративний? Ніяких проблем, і приємна уніфікована поштова скринька. Підключіть будь-який обліковий запис IMAP.\n- **🔒 Надсилайте та отримуйте зашифровані листи! ** Використовуйте чудове розширення для браузера [Mailvelope](https://mailvelope.com).\n- **🙈 Ми не вигадуємо велосипед! ** На основі чудових бібліотек [Horde](https://www.horde.org).\n- **📬 Хочете розмістити свій власний поштовий сервер?** Нам не потрібно реалізовувати це заново, оскільки ви можете налаштувати [Mail-in-a-Box](https://mailinabox.email)!\n\n## Рейтинг етичності ШІ\n\n### Пріоритетні вхідні\n\nПозитивний:\n* Програмне забезпечення для навчання та виведення висновків цієї моделі має відкритий вихідний код.\n* Модель створюється та навчається локально на основі власних даних користувача.\n* Навчальні дані є доступними для користувача, що дає можливість перевірити або виправити упередженість або оптимізувати продуктивність та використання CO2.\n\n### Підсумки потоків (за бажанням)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг залежить від встановленого бекенду обробки тексту. Дивіться [огляд рейтингу] (https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для отримання додаткової інформації.\n\nДізнайтеся більше про рейтинг етичності ШІ Nextcloud [у нашому блозі](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Ваш сеанс закінчився. Сторінка буде перезавантажена.", "Drafts are saved in:" : "Чернетки зберігаються в:", "Sent messages are saved in:" : "Надіслані повідомлення зберігаються в:", @@ -85,7 +85,6 @@ OC.L10N.register( "SMTP Port" : "Порт SMTP", "SMTP User" : "Користувач SMTP", "SMTP Password" : "Пароль SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Щоби мати доступ до цього застосунку з обліковим записом Google, вам потрібно увімкнути двофакторну автентифікацію у вашому обліковому записі Google, налаштувати пароль для застосунка.", "Account settings" : "Налаштування облікового запису", "Aliases" : "Синоніми", "Alias to S/MIME certificate mapping" : "Синонім для мапування сертифікату S/MIME", @@ -102,19 +101,20 @@ OC.L10N.register( "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Автовідповідач використовує Sieve - скриптову мову, яка підтримується багатьма поштовиками. Якщо ви не впевнені, чи підтримує її ваш провайдер, зверніться до нього. Якщо Sieve доступна, натисніть кнопку, щоб перейти до налаштувань і ввімкнути її.", "Go to Sieve settings" : "Перейдіть до налаштувань сита", "Calendar settings" : "Налаштування", + "Classification settings" : "Налаштування класифікації", "Filters" : "Фільтри", "Quick actions" : "Швидкі дії", "Sieve script editor" : "Редактор скриптів Sieve", "Mail server" : "Поштовий сервер", "Sieve server" : "Ситовий сервер", - "Folder search" : "Пошук у папках", + "Folder search" : "Пошук у каталогах", + "Email address" : "Адреса ел.пошти", "Update alias" : "Оновити синонім", "Rename alias" : "Перейменувати синонім", "Show update alias form" : "Показати форму оновлення синоніму", "Delete alias" : "Вилучити синонім", "Go back" : "Повернутися назад", "Change name" : "Змінити ім'я", - "Email address" : "Адреса ел.пошти", "Add alias" : "Додати синонім", "Create alias" : "Створити синонім", "Cancel" : "Скасувати", @@ -133,10 +133,13 @@ OC.L10N.register( "Sorting" : "Впорядкування", "Newest first" : "Новіші спочатку", "Oldest first" : "Старіші спочатку", + "New text block" : "Новий текстовий блок", + "Title of the text block" : "Назва текстового блоку", + "Content of the text block" : "Вміст текстового блоку", + "Ok" : "Гаразд", "Top" : "Верхня частина", "Bottom" : "Дно.", "Text blocks" : "Текстові блоки", - "New text block" : "Новий текстовий блок", "Shared with me" : "Поділилися зі мною", "Privacy" : "Конфіденційність", "Security" : "Безпека", @@ -157,9 +160,6 @@ OC.L10N.register( "Refresh" : "Оновити", "About" : "Про сервіс", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "До складу цієї програми входить CKEditor, редактор з відкритим вихідним кодом. Авторське право належить авторам CKEditor. Поширюється за ліцензією GPLv2.", - "Title of the text block" : "Назва текстового блоку", - "Content of the text block" : "Вміст текстового блоку", - "Ok" : "Гаразд", "No certificate" : "Немає сертифіката", "Certificate updated" : "Сертифікат оновлено", "Could not update certificate" : "Не вдалося оновити сертифікат", @@ -198,7 +198,6 @@ OC.L10N.register( "Disable formatting" : "Вимкнути форматування", "Upload attachment" : "Завантажити вкладення", "Add attachment from Files" : "Додати вкладення з Файлів", - "Add share link from Files" : "Додати посилання на спільний доступ з Файлів", "Smart picker" : "Асистент розумного вибору", "Request a read receipt" : "Запитати підтвердження про прочитання", "Sign message with S/MIME" : "Підписати лист за допомогою S/MIME", @@ -210,15 +209,18 @@ OC.L10N.register( "Monday morning" : "У понеділок вранці", "Custom date and time" : "Власна дата та час", "Enter a date" : "Введіть дату", - "Choose" : "Вибрати", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Вкладення перевищує дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання."], - "Choose a file to add as attachment" : "Виберіть файл для вкладення", - "Choose a file to share as a link" : "Виберіть файл, яким ви поділитеся через посилання", + "Choose a file" : "Виберіть файл", "_{count} attachment_::_{count} attachments_" : ["{count} долучений файл","{count} долучені файли","{count} долучених файлів","{count} долучених файлів"], "Untitled message" : "Лист без назви", "Expand composer" : "Розгорнути редактор", "Close composer" : "Закрити редактор", "Confirm" : "Підтвердити", + "Revoke" : "Відкликати", + "Delegation" : "Делегування", + "Revoke access" : "Відкликати доступ", + "Add delegate" : "Додати делегата", + "Revoke access?" : "Відкликати доступ?", "Tag: {name} deleted" : "Мітка: {name} вилучено", "An error occurred, unable to delete the tag." : "Пимилка під час вилучення мітки.", "The tag will be deleted from all messages." : "Мітку буде вилучено зі всіх листів.", @@ -226,6 +228,7 @@ OC.L10N.register( "Rich text" : "Текст з форматуванням", "No messages in this folder" : "Відсутні повідомлення у цій теці", "No messages" : "Відсутні повідомлення", + "Choose" : "Вибрати", "Blind copy recipients only" : "Лише отримувачі у прихованій копії", "No subject" : "Без теми", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -237,11 +240,11 @@ OC.L10N.register( "Set reminder for this weekend" : "Встановити нагадування на ці вихідні", "Next week – {timeLocale}" : "Наступного тижня - {timeLocale}", "Set reminder for next week" : "Встановити нагадування на наступний тиждень", - "Could not apply tag, configured tag not found" : "Не вдалося застосувати тег, налаштований тег не знайдено", + "Could not apply tag, configured tag not found" : "Не вдалося застосувати мітку, мітку не знайдено", "Could not move thread, destination mailbox not found" : "Не вдалося перемістити тему, поштову скриньку призначення не знайдено", "Could not execute quick action" : "Не вдалося виконати швидку дію", "Quick action executed" : "Швидка дія виконана", - "No trash folder configured" : "Не налаштовано папку для сміття", + "No trash folder configured" : "Не налаштовано каталог для кошика", "Could not delete message" : "Не вдалося вилучити лист", "Could not archive message" : "Не вдалося архівувати лист", "Thread was snoozed" : "Ланцюг відкладено", @@ -265,8 +268,6 @@ OC.L10N.register( "Move Message" : "Перемістити повідомлення", "Archive thread" : "Архівувати ланцюг", "Archive message" : "Архівувати повідомлення", - "Delete thread" : "Вилучити ланцюг", - "Delete message" : "Вилучити повідомлення", "More actions" : "Більше дій", "Back" : "Назад", "Set custom snooze" : "Налаштувати, на скільки відкладати", @@ -274,6 +275,8 @@ OC.L10N.register( "Reply with meeting" : "Відповісти із зустріччю", "Create task" : "Створити завдання", "Download message" : "Звантажити повідомлення", + "Delete thread" : "Вилучити ланцюг", + "Delete message" : "Вилучити повідомлення", "Back to all actions" : "Повернутися до всіх дій", "Manage quick actions" : "Керуйте швидкими діями", "Load more" : "Більше", @@ -297,6 +300,7 @@ OC.L10N.register( "Event created" : "Подію створено", "Could not create event" : "Не вдалося створити подію", "Create event" : "Додати подію", + "Title" : "Заголовок", "All day" : "Весь день", "Attendees" : "Учасники", "You can only invite attendees if your account has an email address set" : "Запрошувати можна учасників, якщо ви зазначили ел. пошту у вашому обліковому записі", @@ -332,7 +336,7 @@ OC.L10N.register( "Add internal address" : "Додати внутрішню адресу", "Add internal email or domain" : "Додайте внутрішню електронну пошту або домен", "Itinerary for {type} is not supported yet" : "Маршрут для {type} ще не підтримується", - "To archive a message please configure an archive folder in account settings" : "Щоб заархівувати повідомлення, будь ласка, налаштуйте папку для архіву в налаштуваннях акаунта", + "To archive a message please configure an archive folder in account settings" : "Щоб заархівувати повідомлення, будь ласка, налаштуйте каталог для архіву в налаштуваннях обліковогоо запису", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "У вас відсутній доступ переміщувати це повідомлення до каталогу архіву та/або вилучати з поточного каталогу", "Your IMAP server does not support storing the seen/unseen state." : "Ваш IMAP-сервер не підтримує зберігання видимого/невидимого стану.", "Could not mark message as seen/unseen" : "Не вдалося позначити повідомлення як побачене/не побачене", @@ -341,7 +345,7 @@ OC.L10N.register( "Yesterday" : "Вчора", "Last week" : "Минулого тижня", "Last month" : "Минулого місяця", - "Could not open folder" : "Не вдалося відкрити папку", + "Could not open folder" : "Не вдалося відкрити каталог", "Indexing your messages. This can take a bit longer for larger folders." : "Індексація ваших повідомлень. Для великих папок це може зайняти трохи більше часу.", "Choose target folder" : "Виберіть каталог призначення", "No more submailboxes in here" : "Жодних вкладених поштових скриньок більше не знайдено тут", @@ -361,7 +365,9 @@ OC.L10N.register( "Could not snooze message" : "Неможливо відкласти повідомлення", "Message was unsnoozed" : "Повідомлення знову актуалізовано.", "Could not unsnooze message" : "Неможливо актуалізувати повідомлення", + "Direct link copied to clipboard" : "Посилання прямого доступу скопійовано до буфера обміну", "Forward" : "Переслати", + "Link copied" : "Посилання скопійовано", "Move message" : "Перемістити повідомлення", "Translate" : "Перекласти", "Forward message as attachment" : "Надіслати повідомлення вкладенням", @@ -399,6 +405,7 @@ OC.L10N.register( "Moving" : "Переміщення", "Moving thread" : "Переміщення ланцюжка", "Moving message" : "Переміщення повідомлення", + "Change password" : "Змінити пароль", "Used quota: {quota}% ({limit})" : "Використана квота: {quota}% ({limit})", "Used quota: {quota}%" : "Використана квота: {quota}%.", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Не вдалося створити поштову скриньку. Ймовірно, ім'я містить неприпустимі символи. Будь ласка, спробуйте інше ім'я.", @@ -421,7 +428,7 @@ OC.L10N.register( "Loading …" : "Завантаження …", "All messages in mailbox will be deleted." : "Усі повідомлення у поштовій скриньці буде вилучено.", "Clear mailbox {name}" : "Очистити поштову скриньку {name}", - "Clear folder" : "Очистити папку", + "Clear folder" : "Очистити каталог", "The folder and all messages in it will be deleted." : "Теку та всі повідомлення в ній буде видалено.", "Delete folder" : "Вилучити каталог", "Delete folder {name}" : "Видалити каталог {name}", @@ -431,7 +438,7 @@ OC.L10N.register( "Add subfolder" : "Додати підтеку", "Rename" : "Перейменувати", "Move folder" : "Перемістити каталог", - "Repair folder" : "Папка відновлення", + "Repair folder" : "Відновити каталог", "Clear cache" : "Очистити кеш", "Clear locally cached data, in case there are issues with synchronization." : "Очистити локально кешовані дані у разі проблем з синхронізацією.", "Subscribed" : "Підписано", @@ -476,12 +483,12 @@ OC.L10N.register( "Save autoresponder" : "Зберегти налаштування автовідповідача", "Could not open outbox" : "Не вдалося відкрити вихідну скриньку", "Pending or not sent messages will show up here" : "Тут відображатимуться незавершені або не надіслані повідомлення", - "Could not copy to \"Sent\" folder" : "Не вдалося скопіювати до папки \"Надіслані\"", + "Could not copy to \"Sent\" folder" : "Не вдалося скопіювати до каталогу \"Надіслані\"", "Mail server error" : "Помилка поштового сервера", "Message could not be sent" : "Повідомлення неможливо надіслати", "Message deleted" : "Повідомлення вилучено", - "Copy to \"Sent\" Folder" : "Скопіювати до папки \"Надіслані\"", - "Copy to Sent Folder" : "Скопіювати до папки \"Надіслані", + "Copy to \"Sent\" Folder" : "Копіювати до каталогу \"Надіслані\"", + "Copy to Sent Folder" : "Копіювати до каталогу Надіслані", "Phishing email" : "Фішингова електронна пошта", "This email might be a phishing attempt" : "Цей лист може бути спробою фішингу", "Hide suspicious links" : "Приховати підозрілі посилання", @@ -573,6 +580,8 @@ OC.L10N.register( "Reply to sender only" : "Відповісти лише відправникові", "Mark as unfavorite" : "Прибрати зірочку", "Mark as favorite" : "Позначити зірочкою", + "From:" : "Від:", + "To:" : "До:", "Unsubscribe via link" : "Відписатися через посилання", "Unsubscribing will stop all messages from the mailing list {sender}" : "Відписка припинить надсилання всіх повідомлень зі списку розсилки {sender}.", "Send unsubscribe email" : "Надіслати електронний лист щодо відписування", @@ -592,7 +601,7 @@ OC.L10N.register( "Target language to translate into" : "Цільова мова для перекладу", "Translate to" : "Перекласти", "Translating" : "Переклад", - "Copy translated text" : "Скопіювати перекладений текст", + "Copy translated text" : "Копіювати перекладений текст", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Вимкніть зберігання кошика, для цього залиште поле порожнім або встановіть його значення у 0. Це буде застосовано лише до листів, які було вилучено після увімкнення зберігання кошика.", "Could not remove trusted sender {sender}" : "Не вдалося вилучити довіреного відправника {sender}", "No senders are trusted at the moment." : "Наразі відсутні довірені відправники.", @@ -607,7 +616,7 @@ OC.L10N.register( "Train from {depStation} to {arrStation}" : "Потяг з {depStation} до {arrStation}", "Train" : "Потяг", "Add flag" : "Додати прапор", - "Move into folder" : "Перемістити в папку", + "Move into folder" : "Перемістити до каталогу", "Stop" : "Стоп", "Delete action" : "Видалити дію", "Deleted" : "Вилучено", @@ -646,7 +655,7 @@ OC.L10N.register( "Add action" : "Додати дію", "Priority" : "Пріоритет", "Enable filter" : "Увімкнути фільтр", - "Tag" : "Тег", + "Tag" : "Мітка", "delete" : "вилучити", "Edit quick action" : "Редагувати швидку дію", "Add quick action" : "Додати швидку дію", @@ -691,7 +700,7 @@ OC.L10N.register( "Allow additional mail accounts" : "Дозволити додаткові поштові акаунти", "Allow additional Mail accounts from User Settings" : "Дозволити додаткові налаштування поштових облікових записів у налаштуваннях користувача", "Enable text processing through LLMs" : "Увімкнути обробку тексту за допомогою LLM", - "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Додаток Mail може обробляти дані користувача за допомогою налаштованої великої мовної моделі та надавати допоміжні функції, як-от підсумки потоків, розумні відповіді та порядок денний подій.", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Застосунок Пошта може обробляти дані користувача за допомогою налаштованої великої мовної моделі та надавати допоміжні функції, як-от підсумки потоків, розумні відповіді та порядок денний подій.", "Enable LLM processing" : "Ввімкнути обробку LLM", "Enable classification by importance by default" : "Увімкнути класифікацію за важливістю за замовчуванням", "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Програма \"Пошта\" може класифікувати вхідні електронні листи за важливістю за допомогою машинного навчання. За замовчуванням цю функцію ввімкнено, але тут її можна вимкнути. Окремі користувачі зможуть увімкнути цю функцію для своїх акаунтів.", @@ -701,7 +710,7 @@ OC.L10N.register( "Any email that is marked as spam will be sent to the anti spam service." : "Будь-який лист, позначений як спам, буде надіслано до служби антиспаму.", "Gmail integration" : "Інтеграція з Gmail", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail дозволяє користувачам отримувати доступ до своєї електронної пошти через IMAP. З міркувань безпеки цей доступ можливий лише за наявності з'єднання OAuth 2.0 або акаунтів Google, які використовують двофакторну автентифікацію та паролі додатків.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам потрібно зареєструвати новий ідентифікатор клієнта для \"Веб-додатку\" в консолі Google Cloud. Додайте URL-адресу {url} як авторизований URI перенаправлення.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам потрібно зареєструвати новий ідентифікатор клієнта для вебзастосунку в консолі Google Cloud. Додайте URL-адресу {url} як авторизований URI перенаправлення.", "Microsoft integration" : "Інтеграція з Microsoft", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft вимагає, щоб ви отримували доступ до своєї електронної пошти через IMAP за допомогою автентифікації OAuth 2.0. Для цього вам потрібно зареєструвати програму в Microsoft Entra ID, раніше відомій як Microsoft Azure Active Directory.", "Redirect URI" : "Перенаправлення URI", @@ -758,12 +767,13 @@ OC.L10N.register( "Save Config" : "Зберегти конфігурацію", "Unprovision & Delete Config" : "Видалення конфігурації та деконфігурація", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% та %EMAIL% буде замінено на UID та email користувача", - "With the settings above, the app will create account settings in the following way:" : "З наведеними вище налаштуваннями додаток створить налаштування акаунта наступним чином:", + "With the settings above, the app will create account settings in the following way:" : "Із наведеними вище налаштуваннями застосунок створить налаштування облікового запису таким чином:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Наданий сертифікат PKCS #12 повинен містити принаймні один сертифікат і рівно один приватний ключ.", "Failed to import the certificate. Please check the password." : "Не вдалося імпортувати сертифікат. Будь ласка, перевірте пароль.", "Certificate imported successfully" : "Сертифікат успішно імпортовано", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Не вдалося імпортувати сертифікат. Будь ласка, переконайтеся, що приватний ключ збігається з сертифікатом і не захищений парольною фразою.", "Failed to import the certificate" : "Не вдалося імпортувати сертифікат", + "Import S/MIME certificate" : "Імпортувати S/MIME сертифікат", "S/MIME certificates" : "S/MIME сертифікати", "Certificate name" : "Назва сертифікату", "E-mail address" : "Електронна адреса", @@ -771,7 +781,6 @@ OC.L10N.register( "Delete certificate" : "Видалити сертифікат", "No certificate imported yet" : "Сертифікат ще не імпортовано", "Import certificate" : "Сертифікат на імпорт", - "Import S/MIME certificate" : "Імпортувати S/MIME сертифікат", "PKCS #12 Certificate" : "Сертифікат PKCS #12", "PEM Certificate" : "Сертифікат PEM", "Certificate" : "Сертифікат", @@ -823,18 +832,16 @@ OC.L10N.register( "Sending message…" : "Надсилаю повідомлення...", "Message sent" : "Повідомлення відправлено", "Could not send message" : "Не вдалося надіслати повідомлення", - "Message copied to \"Sent\" folder" : "Повідомлення скопійовано до папки \"Відправлені\"", - "Could not copy message to \"Sent\" folder" : "Не вдалося скопіювати повідомлення до папки \"Надіслані\"", + "Message copied to \"Sent\" folder" : "Повідомлення скопійовано до каталогу \"Надіслані\"", + "Could not copy message to \"Sent\" folder" : "Не вдалося скопіювати повідомлення до каталогу \"Надіслані\"", "Could not load {tag}{name}{endtag}" : "Не вдалося завантажити {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Виникла проблема із завантаженням {tag}{name}{endtag}", "Could not load your message" : "Неможливо завантажити повідомлення", "Could not load the desired message" : "Неможливо завантажити обране повідомлення", "Could not load the message" : "Неможливо завантажити повідомлення", "Error loading message" : "Помилка завантаження повідомлення.", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Повідомлення автоматично будуть позначатися як важливі на основі повідомлень, з якими ви взаємодієте або позначаєте як важливі. Спочатку вам потрібно буде вручну змінювати важливість, щоб навчити систему, але з часом автоматичне визначення важливих повідомлень покращиться.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Тут будуть показані надіслані вами повідомлення, які потребують відповіді, але не були отримані протягом декількох днів.", - "Mark all messages of this folder as read" : "Позначити усі повідомлення у цій теці як прочитані", - "Last 7 days" : "За останні 7 днів", - "From me" : "Від мене" + "Add share link from Files" : "Додати посилання на спільний доступ з Файлів", + "Choose a file to add as attachment" : "Виберіть файл для вкладення", + "Choose a file to share as a link" : "Виберіть файл, яким ви поділитеся через посилання" }, "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/l10n/uk.json b/l10n/uk.json index 8af7ada46d..b69c980881 100644 --- a/l10n/uk.json +++ b/l10n/uk.json @@ -12,7 +12,7 @@ "Mail" : "Пошта", "You are reaching your mailbox quota limit for {account_email}" : "Ви майже вичерпали доступний вам обсяг поштової скриньки {account_email}", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "Поточний обсяг вагої поштової скриньки {percentage}. Ви можете звільнити більше місця, якщо вилучите непотрібні електронні листи.", - "Mail Application" : "Поштовий додаток", + "Mail Application" : "Застосунок Пошта", "Mails" : "Пошта", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "Email відправника: %1$s немає в адресній книзі, але ім'я відправника: %2$s є в адресній книзі з такою адресою: %3$s", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following emails: %3$s" : "Email відправника: %1$s немає в адресній книзі, але ім'я відправника: %2$s є в адресній книзі з наступними адресами: %3$s", @@ -25,7 +25,7 @@ "Mail Transport configuration" : "Конфігурація поштового транспорту", "The app.mail.transport setting is not set to smtp. This configuration can cause issues with modern email security measures such as SPF and DKIM because emails are sent directly from the web server, which is often not properly configured for this purpose. To address this, we have discontinued support for the mail transport. Please remove app.mail.transport from your configuration to use the SMTP transport and hide this message. A properly configured SMTP setup is required to ensure email delivery." : "У параметрі app.mail.transport не встановлено значення smtp. Така конфігурація може спричинити проблеми з сучасними засобами захисту електронної пошти, такими як SPF і DKIM, оскільки листи надсилаються безпосередньо з веб-сервера, який часто не налаштований належним чином для цієї мети. Щоб вирішити цю проблему, ми припинили підтримку поштового транспорту. Будь ласка, видаліть app.mail.transport з вашої конфігурації, щоб використовувати транспорт SMTP, і приховайте це повідомлення. Належне налаштування SMTP необхідне для забезпечення доставки електронної пошти.", "💌 A mail app for Nextcloud" : "💌 Поштовий застосунок для Nextcloud", - "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Застосунок Пошта для Nextcloud\n\n- **🚀 Інтеграція з іншими додатками Nextcloud!** Наразі Контакти, Календар та Файли - більше попереду.\n- **📥 Кілька поштових акаунтів! Особистий та корпоративний? Ніяких проблем, і приємна уніфікована поштова скринька. Підключіть будь-який обліковий запис IMAP.\n- **🔒 Надсилайте та отримуйте зашифровані листи! ** Використовуйте чудове розширення для браузера [Mailvelope](https://mailvelope.com).\n- **🙈 Ми не вигадуємо велосипед! ** На основі чудових бібліотек [Horde](https://www.horde.org).\n- **📬 Хочете розмістити свій власний поштовий сервер?** Нам не потрібно реалізовувати це заново, оскільки ви можете налаштувати [Mail-in-a-Box](https://mailinabox.email)!\n\n## Рейтинг етичності ШІ\n\n### Пріоритетні вхідні\n\nПозитивний:\n* Програмне забезпечення для навчання та виведення висновків цієї моделі має відкритий вихідний код.\n* Модель створюється та навчається локально на основі власних даних користувача.\n* Навчальні дані є доступними для користувача, що дає можливість перевірити або виправити упередженість або оптимізувати продуктивність та використання CO2.\n\n### Підсумки потоків (за бажанням)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг залежить від встановленого бекенду обробки тексту. Дивіться [огляд рейтингу] (https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для отримання додаткової інформації.\n\nДізнайтеся більше про рейтинг етичності ШІ Nextcloud [у нашому блозі](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", + "**💌 A mail app for Nextcloud**\n\n- **🚀 Integration with other Nextcloud apps!** Currently Contacts, Calendar & Files – more to come.\n- **📥 Multiple mail accounts!** Personal and company account? No problem, and a nice unified inbox. Connect any IMAP account.\n- **🔒 Send & receive encrypted mails!** Using the great [Mailvelope](https://mailvelope.com) browser extension.\n- **🙈 We’re not reinventing the wheel!** Based on the great [Horde](https://www.horde.org) libraries.\n- **📬 Want to host your own mail server?** We do not have to reimplement this as you could set up [Mail-in-a-Box](https://mailinabox.email)!\n\n## Ethical AI Rating\n\n### Priority Inbox\n\nPositive:\n* The software for training and inferencing of this model is open source.\n* The model is created and trained on-premises based on the user's own data.\n* The training data is accessible to the user, making it possible to check or correct for bias or optimise the performance and CO2 usage.\n\n### Thread Summaries (opt-in)\n\n**Rating:** 🟢/🟡/🟠/🔴\n\nThe rating depends on the installed text processing backend. See [the rating overview](https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) for details.\n\nLearn more about the Nextcloud Ethical AI Rating [in our blog](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/)." : "**💌 Застосунок Пошта для Nextcloud\n\n- **🚀 Інтеграція з іншими застосунками Nextcloud!** Наразі Контакти, Календар та Файли - більше попереду.\n- **📥 Кілька поштових акаунтів! Особистий та корпоративний? Ніяких проблем, і приємна уніфікована поштова скринька. Підключіть будь-який обліковий запис IMAP.\n- **🔒 Надсилайте та отримуйте зашифровані листи! ** Використовуйте чудове розширення для браузера [Mailvelope](https://mailvelope.com).\n- **🙈 Ми не вигадуємо велосипед! ** На основі чудових бібліотек [Horde](https://www.horde.org).\n- **📬 Хочете розмістити свій власний поштовий сервер?** Нам не потрібно реалізовувати це заново, оскільки ви можете налаштувати [Mail-in-a-Box](https://mailinabox.email)!\n\n## Рейтинг етичності ШІ\n\n### Пріоритетні вхідні\n\nПозитивний:\n* Програмне забезпечення для навчання та виведення висновків цієї моделі має відкритий вихідний код.\n* Модель створюється та навчається локально на основі власних даних користувача.\n* Навчальні дані є доступними для користувача, що дає можливість перевірити або виправити упередженість або оптимізувати продуктивність та використання CO2.\n\n### Підсумки потоків (за бажанням)\n\n**Рейтинг:** 🟢/🟡/🟠/🔴\n\nРейтинг залежить від встановленого бекенду обробки тексту. Дивіться [огляд рейтингу] (https://docs.nextcloud.com/server/latest/admin_manual/ai/index.html) для отримання додаткової інформації.\n\nДізнайтеся більше про рейтинг етичності ШІ Nextcloud [у нашому блозі](https://nextcloud.com/blog/nextcloud-ethical-ai-rating/).", "Your session has expired. The page will be reloaded." : "Ваш сеанс закінчився. Сторінка буде перезавантажена.", "Drafts are saved in:" : "Чернетки зберігаються в:", "Sent messages are saved in:" : "Надіслані повідомлення зберігаються в:", @@ -83,7 +83,6 @@ "SMTP Port" : "Порт SMTP", "SMTP User" : "Користувач SMTP", "SMTP Password" : "Пароль SMTP", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "Щоби мати доступ до цього застосунку з обліковим записом Google, вам потрібно увімкнути двофакторну автентифікацію у вашому обліковому записі Google, налаштувати пароль для застосунка.", "Account settings" : "Налаштування облікового запису", "Aliases" : "Синоніми", "Alias to S/MIME certificate mapping" : "Синонім для мапування сертифікату S/MIME", @@ -100,19 +99,20 @@ "The autoresponder uses Sieve, a scripting language supported by many email providers. If you're unsure whether yours does, check with your provider. If Sieve is available, click the button to go to the settings and enable it." : "Автовідповідач використовує Sieve - скриптову мову, яка підтримується багатьма поштовиками. Якщо ви не впевнені, чи підтримує її ваш провайдер, зверніться до нього. Якщо Sieve доступна, натисніть кнопку, щоб перейти до налаштувань і ввімкнути її.", "Go to Sieve settings" : "Перейдіть до налаштувань сита", "Calendar settings" : "Налаштування", + "Classification settings" : "Налаштування класифікації", "Filters" : "Фільтри", "Quick actions" : "Швидкі дії", "Sieve script editor" : "Редактор скриптів Sieve", "Mail server" : "Поштовий сервер", "Sieve server" : "Ситовий сервер", - "Folder search" : "Пошук у папках", + "Folder search" : "Пошук у каталогах", + "Email address" : "Адреса ел.пошти", "Update alias" : "Оновити синонім", "Rename alias" : "Перейменувати синонім", "Show update alias form" : "Показати форму оновлення синоніму", "Delete alias" : "Вилучити синонім", "Go back" : "Повернутися назад", "Change name" : "Змінити ім'я", - "Email address" : "Адреса ел.пошти", "Add alias" : "Додати синонім", "Create alias" : "Створити синонім", "Cancel" : "Скасувати", @@ -131,10 +131,13 @@ "Sorting" : "Впорядкування", "Newest first" : "Новіші спочатку", "Oldest first" : "Старіші спочатку", + "New text block" : "Новий текстовий блок", + "Title of the text block" : "Назва текстового блоку", + "Content of the text block" : "Вміст текстового блоку", + "Ok" : "Гаразд", "Top" : "Верхня частина", "Bottom" : "Дно.", "Text blocks" : "Текстові блоки", - "New text block" : "Новий текстовий блок", "Shared with me" : "Поділилися зі мною", "Privacy" : "Конфіденційність", "Security" : "Безпека", @@ -155,9 +158,6 @@ "Refresh" : "Оновити", "About" : "Про сервіс", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "До складу цієї програми входить CKEditor, редактор з відкритим вихідним кодом. Авторське право належить авторам CKEditor. Поширюється за ліцензією GPLv2.", - "Title of the text block" : "Назва текстового блоку", - "Content of the text block" : "Вміст текстового блоку", - "Ok" : "Гаразд", "No certificate" : "Немає сертифіката", "Certificate updated" : "Сертифікат оновлено", "Could not update certificate" : "Не вдалося оновити сертифікат", @@ -196,7 +196,6 @@ "Disable formatting" : "Вимкнути форматування", "Upload attachment" : "Завантажити вкладення", "Add attachment from Files" : "Додати вкладення з Файлів", - "Add share link from Files" : "Додати посилання на спільний доступ з Файлів", "Smart picker" : "Асистент розумного вибору", "Request a read receipt" : "Запитати підтвердження про прочитання", "Sign message with S/MIME" : "Підписати лист за допомогою S/MIME", @@ -208,15 +207,18 @@ "Monday morning" : "У понеділок вранці", "Custom date and time" : "Власна дата та час", "Enter a date" : "Введіть дату", - "Choose" : "Вибрати", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Вкладення перевищує дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання.","Вкладення перевищують дозволений розмір {size}. Рекомендуємо замість цього поділітися файлами через посилання."], - "Choose a file to add as attachment" : "Виберіть файл для вкладення", - "Choose a file to share as a link" : "Виберіть файл, яким ви поділитеся через посилання", + "Choose a file" : "Виберіть файл", "_{count} attachment_::_{count} attachments_" : ["{count} долучений файл","{count} долучені файли","{count} долучених файлів","{count} долучених файлів"], "Untitled message" : "Лист без назви", "Expand composer" : "Розгорнути редактор", "Close composer" : "Закрити редактор", "Confirm" : "Підтвердити", + "Revoke" : "Відкликати", + "Delegation" : "Делегування", + "Revoke access" : "Відкликати доступ", + "Add delegate" : "Додати делегата", + "Revoke access?" : "Відкликати доступ?", "Tag: {name} deleted" : "Мітка: {name} вилучено", "An error occurred, unable to delete the tag." : "Пимилка під час вилучення мітки.", "The tag will be deleted from all messages." : "Мітку буде вилучено зі всіх листів.", @@ -224,6 +226,7 @@ "Rich text" : "Текст з форматуванням", "No messages in this folder" : "Відсутні повідомлення у цій теці", "No messages" : "Відсутні повідомлення", + "Choose" : "Вибрати", "Blind copy recipients only" : "Лише отримувачі у прихованій копії", "No subject" : "Без теми", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}Draft:{markup-end} {subject}", @@ -235,11 +238,11 @@ "Set reminder for this weekend" : "Встановити нагадування на ці вихідні", "Next week – {timeLocale}" : "Наступного тижня - {timeLocale}", "Set reminder for next week" : "Встановити нагадування на наступний тиждень", - "Could not apply tag, configured tag not found" : "Не вдалося застосувати тег, налаштований тег не знайдено", + "Could not apply tag, configured tag not found" : "Не вдалося застосувати мітку, мітку не знайдено", "Could not move thread, destination mailbox not found" : "Не вдалося перемістити тему, поштову скриньку призначення не знайдено", "Could not execute quick action" : "Не вдалося виконати швидку дію", "Quick action executed" : "Швидка дія виконана", - "No trash folder configured" : "Не налаштовано папку для сміття", + "No trash folder configured" : "Не налаштовано каталог для кошика", "Could not delete message" : "Не вдалося вилучити лист", "Could not archive message" : "Не вдалося архівувати лист", "Thread was snoozed" : "Ланцюг відкладено", @@ -263,8 +266,6 @@ "Move Message" : "Перемістити повідомлення", "Archive thread" : "Архівувати ланцюг", "Archive message" : "Архівувати повідомлення", - "Delete thread" : "Вилучити ланцюг", - "Delete message" : "Вилучити повідомлення", "More actions" : "Більше дій", "Back" : "Назад", "Set custom snooze" : "Налаштувати, на скільки відкладати", @@ -272,6 +273,8 @@ "Reply with meeting" : "Відповісти із зустріччю", "Create task" : "Створити завдання", "Download message" : "Звантажити повідомлення", + "Delete thread" : "Вилучити ланцюг", + "Delete message" : "Вилучити повідомлення", "Back to all actions" : "Повернутися до всіх дій", "Manage quick actions" : "Керуйте швидкими діями", "Load more" : "Більше", @@ -295,6 +298,7 @@ "Event created" : "Подію створено", "Could not create event" : "Не вдалося створити подію", "Create event" : "Додати подію", + "Title" : "Заголовок", "All day" : "Весь день", "Attendees" : "Учасники", "You can only invite attendees if your account has an email address set" : "Запрошувати можна учасників, якщо ви зазначили ел. пошту у вашому обліковому записі", @@ -330,7 +334,7 @@ "Add internal address" : "Додати внутрішню адресу", "Add internal email or domain" : "Додайте внутрішню електронну пошту або домен", "Itinerary for {type} is not supported yet" : "Маршрут для {type} ще не підтримується", - "To archive a message please configure an archive folder in account settings" : "Щоб заархівувати повідомлення, будь ласка, налаштуйте папку для архіву в налаштуваннях акаунта", + "To archive a message please configure an archive folder in account settings" : "Щоб заархівувати повідомлення, будь ласка, налаштуйте каталог для архіву в налаштуваннях обліковогоо запису", "You are not allowed to move this message to the archive folder and/or delete this message from the current folder" : "У вас відсутній доступ переміщувати це повідомлення до каталогу архіву та/або вилучати з поточного каталогу", "Your IMAP server does not support storing the seen/unseen state." : "Ваш IMAP-сервер не підтримує зберігання видимого/невидимого стану.", "Could not mark message as seen/unseen" : "Не вдалося позначити повідомлення як побачене/не побачене", @@ -339,7 +343,7 @@ "Yesterday" : "Вчора", "Last week" : "Минулого тижня", "Last month" : "Минулого місяця", - "Could not open folder" : "Не вдалося відкрити папку", + "Could not open folder" : "Не вдалося відкрити каталог", "Indexing your messages. This can take a bit longer for larger folders." : "Індексація ваших повідомлень. Для великих папок це може зайняти трохи більше часу.", "Choose target folder" : "Виберіть каталог призначення", "No more submailboxes in here" : "Жодних вкладених поштових скриньок більше не знайдено тут", @@ -359,7 +363,9 @@ "Could not snooze message" : "Неможливо відкласти повідомлення", "Message was unsnoozed" : "Повідомлення знову актуалізовано.", "Could not unsnooze message" : "Неможливо актуалізувати повідомлення", + "Direct link copied to clipboard" : "Посилання прямого доступу скопійовано до буфера обміну", "Forward" : "Переслати", + "Link copied" : "Посилання скопійовано", "Move message" : "Перемістити повідомлення", "Translate" : "Перекласти", "Forward message as attachment" : "Надіслати повідомлення вкладенням", @@ -397,6 +403,7 @@ "Moving" : "Переміщення", "Moving thread" : "Переміщення ланцюжка", "Moving message" : "Переміщення повідомлення", + "Change password" : "Змінити пароль", "Used quota: {quota}% ({limit})" : "Використана квота: {quota}% ({limit})", "Used quota: {quota}%" : "Використана квота: {quota}%.", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "Не вдалося створити поштову скриньку. Ймовірно, ім'я містить неприпустимі символи. Будь ласка, спробуйте інше ім'я.", @@ -419,7 +426,7 @@ "Loading …" : "Завантаження …", "All messages in mailbox will be deleted." : "Усі повідомлення у поштовій скриньці буде вилучено.", "Clear mailbox {name}" : "Очистити поштову скриньку {name}", - "Clear folder" : "Очистити папку", + "Clear folder" : "Очистити каталог", "The folder and all messages in it will be deleted." : "Теку та всі повідомлення в ній буде видалено.", "Delete folder" : "Вилучити каталог", "Delete folder {name}" : "Видалити каталог {name}", @@ -429,7 +436,7 @@ "Add subfolder" : "Додати підтеку", "Rename" : "Перейменувати", "Move folder" : "Перемістити каталог", - "Repair folder" : "Папка відновлення", + "Repair folder" : "Відновити каталог", "Clear cache" : "Очистити кеш", "Clear locally cached data, in case there are issues with synchronization." : "Очистити локально кешовані дані у разі проблем з синхронізацією.", "Subscribed" : "Підписано", @@ -474,12 +481,12 @@ "Save autoresponder" : "Зберегти налаштування автовідповідача", "Could not open outbox" : "Не вдалося відкрити вихідну скриньку", "Pending or not sent messages will show up here" : "Тут відображатимуться незавершені або не надіслані повідомлення", - "Could not copy to \"Sent\" folder" : "Не вдалося скопіювати до папки \"Надіслані\"", + "Could not copy to \"Sent\" folder" : "Не вдалося скопіювати до каталогу \"Надіслані\"", "Mail server error" : "Помилка поштового сервера", "Message could not be sent" : "Повідомлення неможливо надіслати", "Message deleted" : "Повідомлення вилучено", - "Copy to \"Sent\" Folder" : "Скопіювати до папки \"Надіслані\"", - "Copy to Sent Folder" : "Скопіювати до папки \"Надіслані", + "Copy to \"Sent\" Folder" : "Копіювати до каталогу \"Надіслані\"", + "Copy to Sent Folder" : "Копіювати до каталогу Надіслані", "Phishing email" : "Фішингова електронна пошта", "This email might be a phishing attempt" : "Цей лист може бути спробою фішингу", "Hide suspicious links" : "Приховати підозрілі посилання", @@ -571,6 +578,8 @@ "Reply to sender only" : "Відповісти лише відправникові", "Mark as unfavorite" : "Прибрати зірочку", "Mark as favorite" : "Позначити зірочкою", + "From:" : "Від:", + "To:" : "До:", "Unsubscribe via link" : "Відписатися через посилання", "Unsubscribing will stop all messages from the mailing list {sender}" : "Відписка припинить надсилання всіх повідомлень зі списку розсилки {sender}.", "Send unsubscribe email" : "Надіслати електронний лист щодо відписування", @@ -590,7 +599,7 @@ "Target language to translate into" : "Цільова мова для перекладу", "Translate to" : "Перекласти", "Translating" : "Переклад", - "Copy translated text" : "Скопіювати перекладений текст", + "Copy translated text" : "Копіювати перекладений текст", "Disable trash retention by leaving the field empty or setting it to 0. Only mails deleted after enabling trash retention will be processed." : "Вимкніть зберігання кошика, для цього залиште поле порожнім або встановіть його значення у 0. Це буде застосовано лише до листів, які було вилучено після увімкнення зберігання кошика.", "Could not remove trusted sender {sender}" : "Не вдалося вилучити довіреного відправника {sender}", "No senders are trusted at the moment." : "Наразі відсутні довірені відправники.", @@ -605,7 +614,7 @@ "Train from {depStation} to {arrStation}" : "Потяг з {depStation} до {arrStation}", "Train" : "Потяг", "Add flag" : "Додати прапор", - "Move into folder" : "Перемістити в папку", + "Move into folder" : "Перемістити до каталогу", "Stop" : "Стоп", "Delete action" : "Видалити дію", "Deleted" : "Вилучено", @@ -644,7 +653,7 @@ "Add action" : "Додати дію", "Priority" : "Пріоритет", "Enable filter" : "Увімкнути фільтр", - "Tag" : "Тег", + "Tag" : "Мітка", "delete" : "вилучити", "Edit quick action" : "Редагувати швидку дію", "Add quick action" : "Додати швидку дію", @@ -689,7 +698,7 @@ "Allow additional mail accounts" : "Дозволити додаткові поштові акаунти", "Allow additional Mail accounts from User Settings" : "Дозволити додаткові налаштування поштових облікових записів у налаштуваннях користувача", "Enable text processing through LLMs" : "Увімкнути обробку тексту за допомогою LLM", - "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Додаток Mail може обробляти дані користувача за допомогою налаштованої великої мовної моделі та надавати допоміжні функції, як-от підсумки потоків, розумні відповіді та порядок денний подій.", + "The Mail app can process user data with the help of the configured large language model and provide assistance features like thread summaries, smart replies and event agendas." : "Застосунок Пошта може обробляти дані користувача за допомогою налаштованої великої мовної моделі та надавати допоміжні функції, як-от підсумки потоків, розумні відповіді та порядок денний подій.", "Enable LLM processing" : "Ввімкнути обробку LLM", "Enable classification by importance by default" : "Увімкнути класифікацію за важливістю за замовчуванням", "The Mail app can classify incoming emails by importance using machine learning. This feature is enabled by default but can be disabled by default here. Individual users will still be able to toggle the feature for their accounts." : "Програма \"Пошта\" може класифікувати вхідні електронні листи за важливістю за допомогою машинного навчання. За замовчуванням цю функцію ввімкнено, але тут її можна вимкнути. Окремі користувачі зможуть увімкнути цю функцію для своїх акаунтів.", @@ -699,7 +708,7 @@ "Any email that is marked as spam will be sent to the anti spam service." : "Будь-який лист, позначений як спам, буде надіслано до служби антиспаму.", "Gmail integration" : "Інтеграція з Gmail", "Gmail allows users to access their email via IMAP. For security reasons this access is only possible with an OAuth 2.0 connection or Google accounts that use two-factor authentication and app passwords." : "Gmail дозволяє користувачам отримувати доступ до своєї електронної пошти через IMAP. З міркувань безпеки цей доступ можливий лише за наявності з'єднання OAuth 2.0 або акаунтів Google, які використовують двофакторну автентифікацію та паролі додатків.", - "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам потрібно зареєструвати новий ідентифікатор клієнта для \"Веб-додатку\" в консолі Google Cloud. Додайте URL-адресу {url} як авторизований URI перенаправлення.", + "You have to register a new Client ID for a \"Web application\" in the Google Cloud console. Add the URL {url} as authorized redirect URI." : "Вам потрібно зареєструвати новий ідентифікатор клієнта для вебзастосунку в консолі Google Cloud. Додайте URL-адресу {url} як авторизований URI перенаправлення.", "Microsoft integration" : "Інтеграція з Microsoft", "Microsoft requires you to access your emails via IMAP using OAuth 2.0 authentication. To do this, you need to register an app with Microsoft Entra ID, formerly known as Microsoft Azure Active Directory." : "Microsoft вимагає, щоб ви отримували доступ до своєї електронної пошти через IMAP за допомогою автентифікації OAuth 2.0. Для цього вам потрібно зареєструвати програму в Microsoft Entra ID, раніше відомій як Microsoft Azure Active Directory.", "Redirect URI" : "Перенаправлення URI", @@ -756,12 +765,13 @@ "Save Config" : "Зберегти конфігурацію", "Unprovision & Delete Config" : "Видалення конфігурації та деконфігурація", "* %USERID% and %EMAIL% will be replaced with the user's UID and email" : "* %USERID% та %EMAIL% буде замінено на UID та email користувача", - "With the settings above, the app will create account settings in the following way:" : "З наведеними вище налаштуваннями додаток створить налаштування акаунта наступним чином:", + "With the settings above, the app will create account settings in the following way:" : "Із наведеними вище налаштуваннями застосунок створить налаштування облікового запису таким чином:", "The provided PKCS #12 certificate must contain at least one certificate and exactly one private key." : "Наданий сертифікат PKCS #12 повинен містити принаймні один сертифікат і рівно один приватний ключ.", "Failed to import the certificate. Please check the password." : "Не вдалося імпортувати сертифікат. Будь ласка, перевірте пароль.", "Certificate imported successfully" : "Сертифікат успішно імпортовано", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "Не вдалося імпортувати сертифікат. Будь ласка, переконайтеся, що приватний ключ збігається з сертифікатом і не захищений парольною фразою.", "Failed to import the certificate" : "Не вдалося імпортувати сертифікат", + "Import S/MIME certificate" : "Імпортувати S/MIME сертифікат", "S/MIME certificates" : "S/MIME сертифікати", "Certificate name" : "Назва сертифікату", "E-mail address" : "Електронна адреса", @@ -769,7 +779,6 @@ "Delete certificate" : "Видалити сертифікат", "No certificate imported yet" : "Сертифікат ще не імпортовано", "Import certificate" : "Сертифікат на імпорт", - "Import S/MIME certificate" : "Імпортувати S/MIME сертифікат", "PKCS #12 Certificate" : "Сертифікат PKCS #12", "PEM Certificate" : "Сертифікат PEM", "Certificate" : "Сертифікат", @@ -821,18 +830,16 @@ "Sending message…" : "Надсилаю повідомлення...", "Message sent" : "Повідомлення відправлено", "Could not send message" : "Не вдалося надіслати повідомлення", - "Message copied to \"Sent\" folder" : "Повідомлення скопійовано до папки \"Відправлені\"", - "Could not copy message to \"Sent\" folder" : "Не вдалося скопіювати повідомлення до папки \"Надіслані\"", + "Message copied to \"Sent\" folder" : "Повідомлення скопійовано до каталогу \"Надіслані\"", + "Could not copy message to \"Sent\" folder" : "Не вдалося скопіювати повідомлення до каталогу \"Надіслані\"", "Could not load {tag}{name}{endtag}" : "Не вдалося завантажити {tag}{name}{endtag}", "There was a problem loading {tag}{name}{endtag}" : "Виникла проблема із завантаженням {tag}{name}{endtag}", "Could not load your message" : "Неможливо завантажити повідомлення", "Could not load the desired message" : "Неможливо завантажити обране повідомлення", "Could not load the message" : "Неможливо завантажити повідомлення", "Error loading message" : "Помилка завантаження повідомлення.", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Повідомлення автоматично будуть позначатися як важливі на основі повідомлень, з якими ви взаємодієте або позначаєте як важливі. Спочатку вам потрібно буде вручну змінювати важливість, щоб навчити систему, але з часом автоматичне визначення важливих повідомлень покращиться.", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "Тут будуть показані надіслані вами повідомлення, які потребують відповіді, але не були отримані протягом декількох днів.", - "Mark all messages of this folder as read" : "Позначити усі повідомлення у цій теці як прочитані", - "Last 7 days" : "За останні 7 днів", - "From me" : "Від мене" + "Add share link from Files" : "Додати посилання на спільний доступ з Файлів", + "Choose a file to add as attachment" : "Виберіть файл для вкладення", + "Choose a file to share as a link" : "Виберіть файл, яким ви поділитеся через посилання" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" } \ No newline at end of file diff --git a/l10n/uz.js b/l10n/uz.js index cbc9062a83..7479830898 100644 --- a/l10n/uz.js +++ b/l10n/uz.js @@ -16,6 +16,7 @@ OC.L10N.register( "General" : "Umumiy", "Appearance" : "Tashqi ko'rinish", "List" : "Ro`yxat", + "Ok" : "Yaxshi", "Privacy" : "Maxfiylik", "Security" : "Xavfsizlik", "Archive" : "Arxiv", @@ -24,18 +25,16 @@ OC.L10N.register( "Send" : "Send", "Refresh" : "Refresh", "About" : "About", - "Ok" : "Yaxshi", "From" : "Dan", "To" : "Gacha", - "Choose" : "Choose", - "Choose a file to add as attachment" : "Ilova sifatida qo'shish uchun faylni tanlang", - "Choose a file to share as a link" : "Havola sifatida almashish uchun faylni tanlang", "_{count} attachment_::_{count} attachments_" : ["{count} qo'shimchalar"], "Confirm" : "Confirm", + "Choose" : "Choose", "Favorite" : "Favorite", "More actions" : "Ko'proq harakatlar", "Back" : "Orqaga", "Create event" : "Tadbir yaratish", + "Title" : "Sarlavha", "All day" : "Butun kun", "Attendees" : "Ishtirokchilar", "Description" : "Tavsif", @@ -54,8 +53,11 @@ OC.L10N.register( "Last month" : "Oxirgi oy", "Favorites" : "Favorites", "Other" : "Boshqa", + "Direct link copied to clipboard" : "Klipbordga nusxa olish", + "Link copied" : "Havola nusxalandi", "Translate" : "Tarjima", "Move" : "Move", + "Change password" : "Change password", "Remove {email}" : " {email} ni o'chirish", "Folder name" : "Jild nomi", "Saving" : "Saving", @@ -92,6 +94,7 @@ OC.L10N.register( "All" : "All", "Error while sharing file" : "Fayl almashishda xatolik yuz berdi", "Discard changes" : "O'zgarishlarni bekor qilish", - "Last 7 days" : "Oxirgi 7 kun" + "Choose a file to add as attachment" : "Ilova sifatida qo'shish uchun faylni tanlang", + "Choose a file to share as a link" : "Havola sifatida almashish uchun faylni tanlang" }, "nplurals=1; plural=0;"); diff --git a/l10n/uz.json b/l10n/uz.json index d5add2f1e6..cfcb90c453 100644 --- a/l10n/uz.json +++ b/l10n/uz.json @@ -14,6 +14,7 @@ "General" : "Umumiy", "Appearance" : "Tashqi ko'rinish", "List" : "Ro`yxat", + "Ok" : "Yaxshi", "Privacy" : "Maxfiylik", "Security" : "Xavfsizlik", "Archive" : "Arxiv", @@ -22,18 +23,16 @@ "Send" : "Send", "Refresh" : "Refresh", "About" : "About", - "Ok" : "Yaxshi", "From" : "Dan", "To" : "Gacha", - "Choose" : "Choose", - "Choose a file to add as attachment" : "Ilova sifatida qo'shish uchun faylni tanlang", - "Choose a file to share as a link" : "Havola sifatida almashish uchun faylni tanlang", "_{count} attachment_::_{count} attachments_" : ["{count} qo'shimchalar"], "Confirm" : "Confirm", + "Choose" : "Choose", "Favorite" : "Favorite", "More actions" : "Ko'proq harakatlar", "Back" : "Orqaga", "Create event" : "Tadbir yaratish", + "Title" : "Sarlavha", "All day" : "Butun kun", "Attendees" : "Ishtirokchilar", "Description" : "Tavsif", @@ -52,8 +51,11 @@ "Last month" : "Oxirgi oy", "Favorites" : "Favorites", "Other" : "Boshqa", + "Direct link copied to clipboard" : "Klipbordga nusxa olish", + "Link copied" : "Havola nusxalandi", "Translate" : "Tarjima", "Move" : "Move", + "Change password" : "Change password", "Remove {email}" : " {email} ni o'chirish", "Folder name" : "Jild nomi", "Saving" : "Saving", @@ -90,6 +92,7 @@ "All" : "All", "Error while sharing file" : "Fayl almashishda xatolik yuz berdi", "Discard changes" : "O'zgarishlarni bekor qilish", - "Last 7 days" : "Oxirgi 7 kun" + "Choose a file to add as attachment" : "Ilova sifatida qo'shish uchun faylni tanlang", + "Choose a file to share as a link" : "Havola sifatida almashish uchun faylni tanlang" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/vi.js b/l10n/vi.js index 65c6d746ec..f7e8229e37 100644 --- a/l10n/vi.js +++ b/l10n/vi.js @@ -42,9 +42,9 @@ OC.L10N.register( "Preferred writing mode for new messages and replies." : "Chế độ soạn thảo ưu tiên cho các tin nhắn và trả lời mới.", "Default folders" : "Thư mục mặc định", "Mail server" : "Máy chủ thư", + "Email address" : "Địa chỉ thư điện tử", "Go back" : "Quay lại", "Change name" : "Đổi tên", - "Email address" : "Địa chỉ thư điện tử", "Add alias" : "Thêm bí danh", "Cancel" : "Hủy bỏ", "General" : "Tổng hợp", @@ -53,6 +53,7 @@ OC.L10N.register( "List" : "Danh sách", "Newest first" : "Mới nhất trước", "Oldest first" : "Cũ nhất trước", + "Ok" : "Đồng ý", "Privacy" : "Bảo mật", "Security" : "Bảo mật", "Compose new message" : "Soạn tin nhăn mơi", @@ -66,7 +67,6 @@ OC.L10N.register( "Send" : "Gởi", "Refresh" : "Làm mới", "About" : "Giới thiệu", - "Ok" : "Đồng ý", "Message {id} could not be found" : "Không tìm thấy tin nhắn {id}", "From" : "Từ", "Select account" : "Chọn tài khoản", @@ -81,12 +81,11 @@ OC.L10N.register( "Request a read receipt" : "Yêu cầu xác nhận đã đọc", "Encrypt message with Mailvelope" : "Mã hóa thư bằng Mailvelope", "Enter a date" : "Nhập ngày", - "Choose" : "Chọn", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Các tệp đính kèm vượt quá kích thước được cho phép là {size}. Thay vào đó, hãy chia sẻ các tệp qua liên kết."], - "Choose a file to add as attachment" : "Chọn một tệp để thêm dưới dạng tệp đính kèm", - "Choose a file to share as a link" : "Chọn một tệp để chia sẻ dưới dạng liên kết", "Confirm" : "Xác nhận", + "Revoke" : "Thu hồi", "No messages" : "Không có tin nhắn", + "Choose" : "Chọn", "Blind copy recipients only" : "Chỉ người nhận bản sao ẩn", "Later today – {timeLocale}" : "Sau này - {timeLocale}", "Tomorrow – {timeLocale}" : "Ngày mai - {timeLocale}", @@ -113,6 +112,7 @@ OC.L10N.register( "Report this bug" : "Báo cáo lỗi này", "Could not create event" : "Không thể tạo sự kiện", "Create event" : "Tạo sự kiện mới", + "Title" : "Tên", "All day" : "Cả ngày", "Attendees" : "Người tham gia", "Description" : "Mô tả", @@ -138,7 +138,9 @@ OC.L10N.register( "The sender of this message has asked to be notified when you read this message." : "Người gửi tin nhắn này đã yêu cầu được thông báo khi bạn đọc tin nhắn này.", "Notify the sender" : "Thông báo cho người gửi", "You sent a read confirmation to the sender of this message." : "Bạn đã gửi xác nhận đã đọc cho người gửi tin nhắn này.", + "Direct link copied to clipboard" : "URL đã được sao chép vào bộ nhớ tạm", "Forward" : "Chuyển tiếp", + "Link copied" : "Đã sao chép liên kết", "Translate" : "Dịch", "View source" : "Xem nguồn", "Download thread data for debugging" : "Tải xuống dữ liệu chuỗi để gỡ lỗi", @@ -207,6 +209,8 @@ OC.L10N.register( "Could not load your message thread" : "Không thể tải chuỗi tin nhắn của bạn", "Not found" : "Không tìm thấy", "Reply to sender only" : "Chỉ trả lời người gửi", + "From:" : "Từ :", + "To:" : "Tới :", "Could not remove trusted sender {sender}" : "Không thể xóa người gửi đáng tin cậy {sender}", "No senders are trusted at the moment." : "Không có người gửi nào được tin cậy vào lúc này.", "Untitled event" : "Sự kiện không tiêu đề", @@ -270,7 +274,7 @@ OC.L10N.register( "Could not load the desired message" : "Không thể tải tin nhắn mong muốn", "Could not load the message" : "Không thể tải tin nhắn", "Error loading message" : "Lỗi khi tải tin nhắn", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Tin nhắn sẽ tự động được đánh dấu là quan trọng dựa trên những tin nhắn bạn đã tương tác hoặc được đánh dấu là quan trọng. Lúc đầu, bạn có thể phải thay đổi thủ công tầm quan trọng để dạy hệ thống, nhưng nó sẽ cải thiện theo thời gian.", - "Last 7 days" : "7 ngày trước" + "Choose a file to add as attachment" : "Chọn một tệp để thêm dưới dạng tệp đính kèm", + "Choose a file to share as a link" : "Chọn một tệp để chia sẻ dưới dạng liên kết" }, "nplurals=1; plural=0;"); diff --git a/l10n/vi.json b/l10n/vi.json index 8d9813461f..4e9fdc95fa 100644 --- a/l10n/vi.json +++ b/l10n/vi.json @@ -40,9 +40,9 @@ "Preferred writing mode for new messages and replies." : "Chế độ soạn thảo ưu tiên cho các tin nhắn và trả lời mới.", "Default folders" : "Thư mục mặc định", "Mail server" : "Máy chủ thư", + "Email address" : "Địa chỉ thư điện tử", "Go back" : "Quay lại", "Change name" : "Đổi tên", - "Email address" : "Địa chỉ thư điện tử", "Add alias" : "Thêm bí danh", "Cancel" : "Hủy bỏ", "General" : "Tổng hợp", @@ -51,6 +51,7 @@ "List" : "Danh sách", "Newest first" : "Mới nhất trước", "Oldest first" : "Cũ nhất trước", + "Ok" : "Đồng ý", "Privacy" : "Bảo mật", "Security" : "Bảo mật", "Compose new message" : "Soạn tin nhăn mơi", @@ -64,7 +65,6 @@ "Send" : "Gởi", "Refresh" : "Làm mới", "About" : "Giới thiệu", - "Ok" : "Đồng ý", "Message {id} could not be found" : "Không tìm thấy tin nhắn {id}", "From" : "Từ", "Select account" : "Chọn tài khoản", @@ -79,12 +79,11 @@ "Request a read receipt" : "Yêu cầu xác nhận đã đọc", "Encrypt message with Mailvelope" : "Mã hóa thư bằng Mailvelope", "Enter a date" : "Nhập ngày", - "Choose" : "Chọn", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["Các tệp đính kèm vượt quá kích thước được cho phép là {size}. Thay vào đó, hãy chia sẻ các tệp qua liên kết."], - "Choose a file to add as attachment" : "Chọn một tệp để thêm dưới dạng tệp đính kèm", - "Choose a file to share as a link" : "Chọn một tệp để chia sẻ dưới dạng liên kết", "Confirm" : "Xác nhận", + "Revoke" : "Thu hồi", "No messages" : "Không có tin nhắn", + "Choose" : "Chọn", "Blind copy recipients only" : "Chỉ người nhận bản sao ẩn", "Later today – {timeLocale}" : "Sau này - {timeLocale}", "Tomorrow – {timeLocale}" : "Ngày mai - {timeLocale}", @@ -111,6 +110,7 @@ "Report this bug" : "Báo cáo lỗi này", "Could not create event" : "Không thể tạo sự kiện", "Create event" : "Tạo sự kiện mới", + "Title" : "Tên", "All day" : "Cả ngày", "Attendees" : "Người tham gia", "Description" : "Mô tả", @@ -136,7 +136,9 @@ "The sender of this message has asked to be notified when you read this message." : "Người gửi tin nhắn này đã yêu cầu được thông báo khi bạn đọc tin nhắn này.", "Notify the sender" : "Thông báo cho người gửi", "You sent a read confirmation to the sender of this message." : "Bạn đã gửi xác nhận đã đọc cho người gửi tin nhắn này.", + "Direct link copied to clipboard" : "URL đã được sao chép vào bộ nhớ tạm", "Forward" : "Chuyển tiếp", + "Link copied" : "Đã sao chép liên kết", "Translate" : "Dịch", "View source" : "Xem nguồn", "Download thread data for debugging" : "Tải xuống dữ liệu chuỗi để gỡ lỗi", @@ -205,6 +207,8 @@ "Could not load your message thread" : "Không thể tải chuỗi tin nhắn của bạn", "Not found" : "Không tìm thấy", "Reply to sender only" : "Chỉ trả lời người gửi", + "From:" : "Từ :", + "To:" : "Tới :", "Could not remove trusted sender {sender}" : "Không thể xóa người gửi đáng tin cậy {sender}", "No senders are trusted at the moment." : "Không có người gửi nào được tin cậy vào lúc này.", "Untitled event" : "Sự kiện không tiêu đề", @@ -268,7 +272,7 @@ "Could not load the desired message" : "Không thể tải tin nhắn mong muốn", "Could not load the message" : "Không thể tải tin nhắn", "Error loading message" : "Lỗi khi tải tin nhắn", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "Tin nhắn sẽ tự động được đánh dấu là quan trọng dựa trên những tin nhắn bạn đã tương tác hoặc được đánh dấu là quan trọng. Lúc đầu, bạn có thể phải thay đổi thủ công tầm quan trọng để dạy hệ thống, nhưng nó sẽ cải thiện theo thời gian.", - "Last 7 days" : "7 ngày trước" + "Choose a file to add as attachment" : "Chọn một tệp để thêm dưới dạng tệp đính kèm", + "Choose a file to share as a link" : "Chọn một tệp để chia sẻ dưới dạng liên kết" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js index 8156b96c53..65233d47fc 100644 --- a/l10n/zh_CN.js +++ b/l10n/zh_CN.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "邮件", "You are reaching your mailbox quota limit for {account_email}" : "您即将达到 {account_email} 的邮箱配额限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前正在使用邮箱存储空间的 {percentage}。 请删除不需要的电子邮件以腾出一些空间。", + "{account_email} has been delegated to you" : "{account_email} 已委派给您", + "{user} delegated {account} to you" : "{user} 已将 {account} 委派给您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委派给您", + "{user} revoked delegation for {account}" : "{user} 已撤销 {account} 的委派", "Mail Application" : "邮件应用程序", "Mails" : "邮件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "发件人电子邮件 %1$s 不在通讯录中,但发件人名称 %2$s 在通讯录中,包含以下电子邮件:%3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP 端口", "SMTP User" : "SMTP 用户", "SMTP Password" : "SMTP 密码", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要在此应用程序中使用 Google 账号, 你需要为 Google 启用两步验证并生成应用程序密码。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 身份验证。如果您的 Nextcloud 管理员尚未配置 Google OAuth,您可以使用 Google 应用密码代替。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要使用 OAuth 身份验证。请您的 Nextcloud 管理员在管理员设置中配置 Microsoft OAuth。", "Account settings" : "账号设置", "Aliases" : "别名", "Alias to S/MIME certificate mapping" : "別名到 S/MIME 证书映射", @@ -117,13 +122,13 @@ OC.L10N.register( "Mail server" : "邮件服务器", "Sieve server" : "Sieve 服务器", "Folder search" : "文件夹搜索", + "Email address" : "电子邮箱地址", "Update alias" : "更新别名", "Rename alias" : "重新命名别名", "Show update alias form" : "显示更新别名表单", "Delete alias" : "删除别名", "Go back" : "后退", "Change name" : "更改名称", - "Email address" : "电子邮箱地址", "Add alias" : "添加别名", "Create alias" : "创建别名", "Cancel" : "取消", @@ -136,6 +141,7 @@ OC.L10N.register( "Mail settings" : "邮件设置", "General" : "常规", "Set as default mail app" : "设为默认邮件应用", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "添加邮件账号", "Appearance" : "外观", "Show all messages in thread" : "显示线程中的所有邮件", @@ -150,13 +156,16 @@ OC.L10N.register( "Sorting" : "排序", "Newest first" : "从新到旧", "Oldest first" : "从旧到新", + "New text block" : "新文本块", + "Title of the text block" : "文本块的标题", + "Content of the text block" : "文本块的内容", + "Ok" : "确定", "Avatars from Gravatar and favicons" : "来自 Gravatar 和网站图标的头像", "Reply position" : "回复位置", "Top" : "顶部", "Bottom" : "底部", "Text blocks" : "文本块", "Reusable pieces of text that can be inserted in messages" : "可重复使用的文本片段,可以插入到邮件中", - "New text block" : "新文本块", "Shared with me" : "与我共享", "Privacy" : "隐私", "Data collection" : "数据收集", @@ -187,9 +196,6 @@ OC.L10N.register( "About" : "关于", "Acknowledgements" : "致谢", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此应用程序包括开源编辑器 CKEditor。版权所有 © CKEditor 贡献者。根据 GPLv2 许可。", - "Title of the text block" : "文本块的标题", - "Content of the text block" : "文本块的内容", - "Ok" : "确定", "Automatically create tentative appointments in calendar" : "自动在日历中创建暂定预约", "No certificate" : "无证书", "Certificate updated" : "证书已更新", @@ -233,7 +239,6 @@ OC.L10N.register( "Disable formatting" : "禁用格式化", "Upload attachment" : "上传附件", "Add attachment from Files" : "从文件添加附件", - "Add share link from Files" : "从文件添加共享链接", "Smart picker" : "Smart Picker", "Request a read receipt" : "请求已读回执", "Sign message with S/MIME" : "使用 S/MIME 签名邮件", @@ -245,15 +250,28 @@ OC.L10N.register( "Monday morning" : "星期一早上", "Custom date and time" : "自定义日期和时间", "Enter a date" : "输入日期", - "Choose" : "选择", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超出了允许的附件最大大小 {size}。请改为通过链接共享文件。"], - "Choose a file to add as attachment" : "选择文件添加为附件", - "Choose a file to share as a link" : "选择要共享为链接的文件", + "Choose a file" : "选择一个文件", "_{count} attachment_::_{count} attachments_" : ["{count} 附件"], "Untitled message" : "无标题邮件", "Expand composer" : "展开编辑器", "Close composer" : "关闭编辑器", "Confirm" : "确认", + "Delegate access" : "委派访问权限", + "Revoke" : "撤销", + "{userId} will no longer be able to act on your behalf" : "{userId} 将无法再代表您执行操作", + "Could not fetch delegates" : "无法获取委派用户", + "Delegated access to {displayName}" : "已委派访问 {displayName}", + "Could not delegate access" : "无法委派访问权限", + "Revoked access for {displayName}" : "已撤销 {displayName} 的访问权限", + "Could not revoke delegation" : "无法撤销委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允许用户代表您发送、接收和删除邮件", + "Revoke access" : "撤销访问权限", + "Add delegate" : "添加委派", + "Select a user" : "选择用户", + "They will be able to send, receive, and delete mail on your behalf" : "他们将能够代表您发送、接收和删除邮件", + "Revoke access?" : "撤销访问权限?", "Tag: {name} deleted" : "标签:{name} 已删除", "An error occurred, unable to delete the tag." : "发生错误,无法删除标签。", "The tag will be deleted from all messages." : "将从所有邮件中删除此标签。", @@ -261,6 +279,7 @@ OC.L10N.register( "Rich text" : "富文本", "No messages in this folder" : "此文件夹中没有邮件", "No messages" : "没有邮件", + "Choose" : "选择", "Blind copy recipients only" : "仅向收件人发送无信头副本", "No subject" : "无主题", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end}{subject}", @@ -300,8 +319,6 @@ OC.L10N.register( "Move Message" : "移动邮件", "Archive thread" : "归档线程", "Archive message" : "归档邮件", - "Delete thread" : "删除线程", - "Delete message" : "删除邮件", "More actions" : "更多操作 ", "Back" : "返回", "Set custom snooze" : "设置自定义延后", @@ -309,6 +326,8 @@ OC.L10N.register( "Reply with meeting" : "回复会议", "Create task" : "创建任务", "Download message" : "下载邮件", + "Delete thread" : "删除线程", + "Delete message" : "删除邮件", "Back to all actions" : "返回所有操作", "Manage quick actions" : "管理快捷操作", "Load more" : "加载更多", @@ -329,9 +348,11 @@ OC.L10N.register( "Mark as unimportant" : "标记为不重要", "Mark as important" : "标记为重要", "Report this bug" : "报告此问题", + "This description was generated by AI." : "此描述由 AI 生成。", "Event created" : "已创建事件", "Could not create event" : "无法创建事件", "Create event" : "创建事件", + "Title" : "标题", "All day" : "全天", "Attendees" : "参加者", "You can only invite attendees if your account has an email address set" : "只有当您的账号设置了电子邮件地址时,您才能邀请参加者", @@ -402,7 +423,9 @@ OC.L10N.register( "Could not snooze message" : "无法延后邮件", "Message was unsnoozed" : "已取消延后邮件", "Could not unsnooze message" : "无法取消延后邮件", + "Direct link copied to clipboard" : "直链已复制至粘贴板", "Forward" : "转发", + "Link copied" : "已复制链接", "Move message" : "移动邮件", "Translate" : "翻译", "Forward message as attachment" : "将邮件作为附件转发", @@ -444,14 +467,17 @@ OC.L10N.register( "Moving message" : "正在移动邮件", "This account cannot connect" : "此账号无法连接", "Connection failed. Please verify your information and try again" : "连接失败。请验证您的信息,然后重试", + "Change password" : "更改密码", "Used quota: {quota}% ({limit})" : "已用配额:{quota}%({limit})", "Used quota: {quota}%" : "已用配额:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "无法创建邮箱。名称可能包含无效字符。请尝试其他名称。", "Remove account" : "移除账号", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email}和缓存的电子邮箱数据将从 Nextcloud 账号中删除,但不会从你的电子邮箱提供商那里删除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "无法删除账号", "Provisioned account is disabled" : "预配账号已禁用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "请使用密码登录以启用此账号。当前会话正在使用无密码身份验证,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派账号", "Show only subscribed folders" : "仅显示已订阅的文件夹", "Add folder" : "添加文件夹", "Folder name" : "文件夹名称", @@ -624,6 +650,10 @@ OC.L10N.register( "Reply to sender only" : "只回复发送者", "Mark as unfavorite" : "取消标记为收藏", "Mark as favorite" : "标记为收藏", + "From:" : "从:", + "To:" : "到:", + "Cc:" : "抄送:", + "Bcc:" : "密送:", "Unsubscribe via link" : "通过链接取消订阅", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消订阅将停止来自邮寄列表 {sender} 的全部邮件", "Send unsubscribe email" : "发送取消订阅电子邮件", @@ -820,6 +850,7 @@ OC.L10N.register( "Certificate imported successfully" : "导入证书成功", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "无法导入证书。请确保私钥与您的证书相符,并且不受口令保护。", "Failed to import the certificate" : "导入证书失败", + "Import S/MIME certificate" : "导入 S/MIME 证书", "S/MIME certificates" : "S/MIME 证书", "Certificate name" : "证书名称", "E-mail address" : "电子邮件地址", @@ -827,7 +858,6 @@ OC.L10N.register( "Delete certificate" : "删除证书", "No certificate imported yet" : "尚未导入证书", "Import certificate" : "导入证书", - "Import S/MIME certificate" : "导入 S/MIME 证书", "PKCS #12 Certificate" : "PKCS #12 证书", "PEM Certificate" : "PEM 证书", "Certificate" : "证书", @@ -889,11 +919,10 @@ OC.L10N.register( "Could not load the desired message" : "无法加载所需邮件", "Could not load the message" : "无法加载邮件", "Error loading message" : "加载邮件时出错", - "Determine importance using machine learning" : "使用机器学习确定重要性", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "将根据您与哪些邮件互动或手动标记为重要,自动标记邮件为重要邮件。开始时,您可能需要手动更改重要性来调教系统,但随着时间的推移,它会不断改进。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您发送的需要回复但几天后未收到回复的邮件将显示在此处。", - "Mark all messages of this folder as read" : "将此文件夹的所有邮件标记为已读", - "Last 7 days" : "过去 7 天", - "From me" : "来自我" + "Add share link from Files" : "从文件添加共享链接", + "Choose a file to add as attachment" : "选择文件添加为附件", + "Choose a file to share as a link" : "选择要共享为链接的文件", + "Delegated access to {userId}" : "已向 {userId} 委派访问权限", + "Revoked access for {userId}" : "已撤销 {userId} 的访问权限" }, "nplurals=1; plural=0;"); diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json index b30a57c7f1..2b20d5662a 100644 --- a/l10n/zh_CN.json +++ b/l10n/zh_CN.json @@ -12,6 +12,10 @@ "Mail" : "邮件", "You are reaching your mailbox quota limit for {account_email}" : "您即将达到 {account_email} 的邮箱配额限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前正在使用邮箱存储空间的 {percentage}。 请删除不需要的电子邮件以腾出一些空间。", + "{account_email} has been delegated to you" : "{account_email} 已委派给您", + "{user} delegated {account} to you" : "{user} 已将 {account} 委派给您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委派给您", + "{user} revoked delegation for {account}" : "{user} 已撤销 {account} 的委派", "Mail Application" : "邮件应用程序", "Mails" : "邮件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "发件人电子邮件 %1$s 不在通讯录中,但发件人名称 %2$s 在通讯录中,包含以下电子邮件:%3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP 端口", "SMTP User" : "SMTP 用户", "SMTP Password" : "SMTP 密码", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要在此应用程序中使用 Google 账号, 你需要为 Google 启用两步验证并生成应用程序密码。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 身份验证。如果您的 Nextcloud 管理员尚未配置 Google OAuth,您可以使用 Google 应用密码代替。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要使用 OAuth 身份验证。请您的 Nextcloud 管理员在管理员设置中配置 Microsoft OAuth。", "Account settings" : "账号设置", "Aliases" : "别名", "Alias to S/MIME certificate mapping" : "別名到 S/MIME 证书映射", @@ -115,13 +120,13 @@ "Mail server" : "邮件服务器", "Sieve server" : "Sieve 服务器", "Folder search" : "文件夹搜索", + "Email address" : "电子邮箱地址", "Update alias" : "更新别名", "Rename alias" : "重新命名别名", "Show update alias form" : "显示更新别名表单", "Delete alias" : "删除别名", "Go back" : "后退", "Change name" : "更改名称", - "Email address" : "电子邮箱地址", "Add alias" : "添加别名", "Create alias" : "创建别名", "Cancel" : "取消", @@ -134,6 +139,7 @@ "Mail settings" : "邮件设置", "General" : "常规", "Set as default mail app" : "设为默认邮件应用", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "添加邮件账号", "Appearance" : "外观", "Show all messages in thread" : "显示线程中的所有邮件", @@ -148,13 +154,16 @@ "Sorting" : "排序", "Newest first" : "从新到旧", "Oldest first" : "从旧到新", + "New text block" : "新文本块", + "Title of the text block" : "文本块的标题", + "Content of the text block" : "文本块的内容", + "Ok" : "确定", "Avatars from Gravatar and favicons" : "来自 Gravatar 和网站图标的头像", "Reply position" : "回复位置", "Top" : "顶部", "Bottom" : "底部", "Text blocks" : "文本块", "Reusable pieces of text that can be inserted in messages" : "可重复使用的文本片段,可以插入到邮件中", - "New text block" : "新文本块", "Shared with me" : "与我共享", "Privacy" : "隐私", "Data collection" : "数据收集", @@ -185,9 +194,6 @@ "About" : "关于", "Acknowledgements" : "致谢", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此应用程序包括开源编辑器 CKEditor。版权所有 © CKEditor 贡献者。根据 GPLv2 许可。", - "Title of the text block" : "文本块的标题", - "Content of the text block" : "文本块的内容", - "Ok" : "确定", "Automatically create tentative appointments in calendar" : "自动在日历中创建暂定预约", "No certificate" : "无证书", "Certificate updated" : "证书已更新", @@ -231,7 +237,6 @@ "Disable formatting" : "禁用格式化", "Upload attachment" : "上传附件", "Add attachment from Files" : "从文件添加附件", - "Add share link from Files" : "从文件添加共享链接", "Smart picker" : "Smart Picker", "Request a read receipt" : "请求已读回执", "Sign message with S/MIME" : "使用 S/MIME 签名邮件", @@ -243,15 +248,28 @@ "Monday morning" : "星期一早上", "Custom date and time" : "自定义日期和时间", "Enter a date" : "输入日期", - "Choose" : "选择", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超出了允许的附件最大大小 {size}。请改为通过链接共享文件。"], - "Choose a file to add as attachment" : "选择文件添加为附件", - "Choose a file to share as a link" : "选择要共享为链接的文件", + "Choose a file" : "选择一个文件", "_{count} attachment_::_{count} attachments_" : ["{count} 附件"], "Untitled message" : "无标题邮件", "Expand composer" : "展开编辑器", "Close composer" : "关闭编辑器", "Confirm" : "确认", + "Delegate access" : "委派访问权限", + "Revoke" : "撤销", + "{userId} will no longer be able to act on your behalf" : "{userId} 将无法再代表您执行操作", + "Could not fetch delegates" : "无法获取委派用户", + "Delegated access to {displayName}" : "已委派访问 {displayName}", + "Could not delegate access" : "无法委派访问权限", + "Revoked access for {displayName}" : "已撤销 {displayName} 的访问权限", + "Could not revoke delegation" : "无法撤销委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允许用户代表您发送、接收和删除邮件", + "Revoke access" : "撤销访问权限", + "Add delegate" : "添加委派", + "Select a user" : "选择用户", + "They will be able to send, receive, and delete mail on your behalf" : "他们将能够代表您发送、接收和删除邮件", + "Revoke access?" : "撤销访问权限?", "Tag: {name} deleted" : "标签:{name} 已删除", "An error occurred, unable to delete the tag." : "发生错误,无法删除标签。", "The tag will be deleted from all messages." : "将从所有邮件中删除此标签。", @@ -259,6 +277,7 @@ "Rich text" : "富文本", "No messages in this folder" : "此文件夹中没有邮件", "No messages" : "没有邮件", + "Choose" : "选择", "Blind copy recipients only" : "仅向收件人发送无信头副本", "No subject" : "无主题", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end}{subject}", @@ -298,8 +317,6 @@ "Move Message" : "移动邮件", "Archive thread" : "归档线程", "Archive message" : "归档邮件", - "Delete thread" : "删除线程", - "Delete message" : "删除邮件", "More actions" : "更多操作 ", "Back" : "返回", "Set custom snooze" : "设置自定义延后", @@ -307,6 +324,8 @@ "Reply with meeting" : "回复会议", "Create task" : "创建任务", "Download message" : "下载邮件", + "Delete thread" : "删除线程", + "Delete message" : "删除邮件", "Back to all actions" : "返回所有操作", "Manage quick actions" : "管理快捷操作", "Load more" : "加载更多", @@ -327,9 +346,11 @@ "Mark as unimportant" : "标记为不重要", "Mark as important" : "标记为重要", "Report this bug" : "报告此问题", + "This description was generated by AI." : "此描述由 AI 生成。", "Event created" : "已创建事件", "Could not create event" : "无法创建事件", "Create event" : "创建事件", + "Title" : "标题", "All day" : "全天", "Attendees" : "参加者", "You can only invite attendees if your account has an email address set" : "只有当您的账号设置了电子邮件地址时,您才能邀请参加者", @@ -400,7 +421,9 @@ "Could not snooze message" : "无法延后邮件", "Message was unsnoozed" : "已取消延后邮件", "Could not unsnooze message" : "无法取消延后邮件", + "Direct link copied to clipboard" : "直链已复制至粘贴板", "Forward" : "转发", + "Link copied" : "已复制链接", "Move message" : "移动邮件", "Translate" : "翻译", "Forward message as attachment" : "将邮件作为附件转发", @@ -442,14 +465,17 @@ "Moving message" : "正在移动邮件", "This account cannot connect" : "此账号无法连接", "Connection failed. Please verify your information and try again" : "连接失败。请验证您的信息,然后重试", + "Change password" : "更改密码", "Used quota: {quota}% ({limit})" : "已用配额:{quota}%({limit})", "Used quota: {quota}%" : "已用配额:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "无法创建邮箱。名称可能包含无效字符。请尝试其他名称。", "Remove account" : "移除账号", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email}和缓存的电子邮箱数据将从 Nextcloud 账号中删除,但不会从你的电子邮箱提供商那里删除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "无法删除账号", "Provisioned account is disabled" : "预配账号已禁用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "请使用密码登录以启用此账号。当前会话正在使用无密码身份验证,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派账号", "Show only subscribed folders" : "仅显示已订阅的文件夹", "Add folder" : "添加文件夹", "Folder name" : "文件夹名称", @@ -622,6 +648,10 @@ "Reply to sender only" : "只回复发送者", "Mark as unfavorite" : "取消标记为收藏", "Mark as favorite" : "标记为收藏", + "From:" : "从:", + "To:" : "到:", + "Cc:" : "抄送:", + "Bcc:" : "密送:", "Unsubscribe via link" : "通过链接取消订阅", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消订阅将停止来自邮寄列表 {sender} 的全部邮件", "Send unsubscribe email" : "发送取消订阅电子邮件", @@ -818,6 +848,7 @@ "Certificate imported successfully" : "导入证书成功", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "无法导入证书。请确保私钥与您的证书相符,并且不受口令保护。", "Failed to import the certificate" : "导入证书失败", + "Import S/MIME certificate" : "导入 S/MIME 证书", "S/MIME certificates" : "S/MIME 证书", "Certificate name" : "证书名称", "E-mail address" : "电子邮件地址", @@ -825,7 +856,6 @@ "Delete certificate" : "删除证书", "No certificate imported yet" : "尚未导入证书", "Import certificate" : "导入证书", - "Import S/MIME certificate" : "导入 S/MIME 证书", "PKCS #12 Certificate" : "PKCS #12 证书", "PEM Certificate" : "PEM 证书", "Certificate" : "证书", @@ -887,11 +917,10 @@ "Could not load the desired message" : "无法加载所需邮件", "Could not load the message" : "无法加载邮件", "Error loading message" : "加载邮件时出错", - "Determine importance using machine learning" : "使用机器学习确定重要性", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "将根据您与哪些邮件互动或手动标记为重要,自动标记邮件为重要邮件。开始时,您可能需要手动更改重要性来调教系统,但随着时间的推移,它会不断改进。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您发送的需要回复但几天后未收到回复的邮件将显示在此处。", - "Mark all messages of this folder as read" : "将此文件夹的所有邮件标记为已读", - "Last 7 days" : "过去 7 天", - "From me" : "来自我" + "Add share link from Files" : "从文件添加共享链接", + "Choose a file to add as attachment" : "选择文件添加为附件", + "Choose a file to share as a link" : "选择要共享为链接的文件", + "Delegated access to {userId}" : "已向 {userId} 委派访问权限", + "Revoked access for {userId}" : "已撤销 {userId} 的访问权限" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/zh_HK.js b/l10n/zh_HK.js index cb14be1644..cbc1a199a5 100644 --- a/l10n/zh_HK.js +++ b/l10n/zh_HK.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "郵件", "You are reaching your mailbox quota limit for {account_email}" : "您即將達到 {account_email} 的郵箱配額限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前使用了郵箱存儲空間的 {percentage} ,請刪除不必要的郵件以釋放空間。", + "{account_email} has been delegated to you" : "{account_email} 已委託給您", + "{user} delegated {account} to you" : "{user} 已委託 {account} 給您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委託給您", + "{user} revoked delegation for {account}" : "{user} 撤銷了 {account} 的委託", "Mail Application" : "郵件應用程式", "Mails" : "郵件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "寄件人電郵地址:%1$s 不在通訊錄中,但寄件人名稱:%2$s 在通訊錄中,其電郵地址為:%3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP 連接埠", "SMTP User" : "SMTP 賬號", "SMTP Password" : "SMTP 密碼", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要使 Google 帳戶與此應用程式配合使用,您需要為 Google 啟用雙重認證並生成應用程式密碼。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 驗證。若您的 Nextcloud 管理員尚未設定 Google OAuth,您可以改用 Google 應用程式密碼。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要 OAuth 驗證。請聯絡您的 Nextcloud 管理員,在管理設定中設定 Microsoft OAuth。", "Account settings" : "賬號設定", "Aliases" : "别名", "Alias to S/MIME certificate mapping" : "别名到 S/MIME 證書映射", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "郵件伺服器", "Sieve server" : "Sieve 伺服器", "Folder search" : "資料夾搜尋", + "Alias name" : "別名", + "Email address" : "電郵地址", "Update alias" : "更新别名", "Rename alias" : "重新命名别名", "Show update alias form" : "顯示更新別名表格", "Delete alias" : "删除别名", "Go back" : "返回", "Change name" : "更改名稱", - "Email address" : "電郵地址", "Add alias" : "新增別名", "Create alias" : "創建别名", "Cancel" : "取消", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "電郵設定", "General" : "一般", "Set as default mail app" : "設置為默認郵件應用", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "添加電郵帳戶", "Appearance" : "外觀", "Show all messages in thread" : "顯示線中的所有訊息", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "排序", "Newest first" : "最新先", "Oldest first" : "最舊先", + "New text block" : "新文本區塊", + "Title of the text block" : "新文本區塊標題", + "Content of the text block" : "文本區塊內容", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "來自 Gravatar 和網站圖標的頭像", "Reply position" : "回覆位置", "Top" : "上方", "Bottom" : "下方", "Text blocks" : "文本區塊", "Reusable pieces of text that can be inserted in messages" : "可以插入消息的可重用文本片段", - "New text block" : "新文本區塊", "Shared with me" : "與我分享", "Privacy" : "私隱", "Data collection" : "數據收集", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "搜尋", "Send" : "傳送", "Refresh" : "重新整理", + "Heading1" : "標題1", + "Heading2" : "標題2", + "Heading3" : "標題3", "About" : "關於", "Acknowledgements" : "致謝", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此應用程式包括 CKEditor,一個開源編輯器。版權所有 © CKEditor 貢獻者。根據 GPLv2 授權。", - "Title of the text block" : "新文本區塊標題", - "Content of the text block" : "文本區塊內容", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "自動在日曆中建立暫定預約", "No certificate" : "沒有證書", "Certificate updated" : "更新了證書", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "停用格式", "Upload attachment" : "已上傳附件", "Add attachment from Files" : "從雲端檔案中加入附件", - "Add share link from Files" : "新增來自檔案的分享連結", "Smart picker" : "聰明的選擇器", "Request a read receipt" : "索取讀取回條", "Sign message with S/MIME" : "使用 S/MIME 簽署訊息", @@ -245,15 +254,31 @@ OC.L10N.register( "Monday morning" : "星期一早上", "Custom date and time" : "自訂日期與時間", "Enter a date" : "輸入日期", - "Choose" : "選擇", + "Remove attachment {fileName}" : "移除附件 {fileName}", + "Add as attachment" : "添加此附件", + "Add as share link" : "添加為分享連結", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超過了允許的附件大小 {size}。請透過連結分享檔案。"], - "Choose a file to add as attachment" : "選擇要作為附件的檔案", - "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Choose a file" : "選擇一個檔案", "_{count} attachment_::_{count} attachments_" : ["{count} 個附件"], "Untitled message" : "未命名訊息", "Expand composer" : "展開編輯器", "Close composer" : "關閉編輯器", "Confirm" : "確認", + "Delegate access" : "委派存取權限", + "Revoke" : "撤銷", + "{userId} will no longer be able to act on your behalf" : "{userId} 將無法再代表你執行操作", + "Could not fetch delegates" : "無法取得委派使用者", + "Delegated access to {displayName}" : "委派存取權限給 {displayName}", + "Could not delegate access" : "無法委派存取權限", + "Revoked access for {displayName}" : "已撤銷 {displayName} 的存取權", + "Could not revoke delegation" : "無法撤銷委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允許使用者代表你傳送、接收及刪除郵件", + "Revoke access" : "撤銷存取權限", + "Add delegate" : "新增委派使用者", + "Select a user" : "選擇使用者", + "They will be able to send, receive, and delete mail on your behalf" : "他們將能代表你傳送、接收及刪除郵件", + "Revoke access?" : "撤銷存取權限?", "Tag: {name} deleted" : "標籤:{name} 已刪除", "An error occurred, unable to delete the tag." : "發生錯誤,無法刪除標籤。", "The tag will be deleted from all messages." : "該標籤將從所有訊息刪除。", @@ -261,6 +286,7 @@ OC.L10N.register( "Rich text" : "RTF", "No messages in this folder" : "此資料夾中沒有訊息", "No messages" : "沒有訊息", + "Choose" : "選擇", "Blind copy recipients only" : "僅密件副本收件者", "No subject" : "無題", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end} {subject}", @@ -283,9 +309,12 @@ OC.L10N.register( "Could not snooze thread" : "無法延後討論串", "Thread was unsnoozed" : "討論串已取消延後", "Could not unsnooze thread" : "無法取消延後討論串", + "Message saved to Files" : "訊息已儲存至檔案", + "Message could not be saved" : "無法儲存訊息", "This summary was AI generated" : "此摘要為人工智能產生", "Encrypted message" : "加密訊息", "This message is unread" : "此訊息未讀", + "Choose a folder to store the message in" : "選擇要存放訊息的資料夾", "Unfavorite" : "取消我的最愛", "Favorite" : "我的最愛", "Unread" : "未讀", @@ -300,8 +329,6 @@ OC.L10N.register( "Move Message" : "移動訊息", "Archive thread" : "封存主題", "Archive message" : "封存郵件", - "Delete thread" : "刪除主題", - "Delete message" : "刪除訊息", "More actions" : "更多操作", "Back" : "返回", "Set custom snooze" : "設定自訂延後", @@ -309,6 +336,9 @@ OC.L10N.register( "Reply with meeting" : "使用會議回覆", "Create task" : "創建任務", "Download message" : "下載訊息", + "Save message to Files" : "儲存訊息至檔案", + "Delete thread" : "刪除主題", + "Delete message" : "刪除訊息", "Back to all actions" : "回到所有操作", "Manage quick actions" : "管理快速操作", "Load more" : "載入更多", @@ -329,9 +359,11 @@ OC.L10N.register( "Mark as unimportant" : "標記為不重要", "Mark as important" : "標記為重要", "Report this bug" : "舉報此錯誤 ", + "This description was generated by AI." : "此描述由 AI 生成。", "Event created" : "活動已建立", "Could not create event" : "無法建立活動", "Create event" : "創建活動", + "Title" : "標題", "All day" : "整日", "Attendees" : "參與者", "You can only invite attendees if your account has an email address set" : "您只能在帳戶設置了電郵地址的情況下邀請與會者", @@ -402,7 +434,12 @@ OC.L10N.register( "Could not snooze message" : "無法延後訊息", "Message was unsnoozed" : "訊息已取消延後", "Could not unsnooze message" : "無法取消延後訊息", + "Could not generate direct link: Message ID is missing" : "無法產生直接連結:缺少訊息 ID", + "Direct link copied to clipboard" : "直接連結已複製到剪貼板", + "Copy direct link" : "複製直接連結", "Forward" : "轉寄", + "Only for message recipients" : "僅限訊息收件者", + "Link copied" : "已複製連結", "Move message" : "移動訊息", "Translate" : "翻譯", "Forward message as attachment" : "將訊息作為附件轉發", @@ -444,14 +481,17 @@ OC.L10N.register( "Moving message" : "移動訊息", "This account cannot connect" : "此帳戶無法連結", "Connection failed. Please verify your information and try again" : "連接失敗。請檢查您的資訊並再試一次", + "Change password" : "更改密碼", "Used quota: {quota}% ({limit})" : "已使用的配額:{quota}% ({limit})", "Used quota: {quota}%" : "已使用的配額:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "無法建立信箱。該名稱可能包含無效字元。請嘗試其他名稱。", "Remove account" : "移除賬號", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 賬號與已快取的電子郵件將會從 Nextcloud 移除,但不會從您的電子郵件提供商移除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "無法刪除帳戶", "Provisioned account is disabled" : "預配帳戶已禁用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "請使用密碼登錄以啟用此帳戶。目前會話正在使用無密碼身份驗證,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派帳戶", "Show only subscribed folders" : "僅顯示已訂閱的資料夾", "Add folder" : "添加資料夾", "Folder name" : "資料夾名稱", @@ -624,6 +664,10 @@ OC.L10N.register( "Reply to sender only" : "僅回覆寄件人", "Mark as unfavorite" : "取消標記我的最愛", "Mark as favorite" : "標記為我的最愛", + "From:" : "從:", + "To:" : "收件者:", + "Cc:" : "副本:", + "Bcc:" : "密件副本:", "Unsubscribe via link" : "透過連結取消訂閱", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消訂閱將停止來自郵寄名單 {sender} 的所有消息", "Send unsubscribe email" : "傳送取消訂閱電子郵件", @@ -820,6 +864,7 @@ OC.L10N.register( "Certificate imported successfully" : "成功導入了證書", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "無法導入證書。請確保私鑰與證書匹配並且不受密碼片語保護。", "Failed to import the certificate" : "導入證書失敗", + "Import S/MIME certificate" : "導入 S/MIME 證書", "S/MIME certificates" : "S/MIME 證書", "Certificate name" : "證書名稱", "E-mail address" : "電郵地址", @@ -827,7 +872,6 @@ OC.L10N.register( "Delete certificate" : "刪除證書", "No certificate imported yet" : "尚未導入證書", "Import certificate" : "導入證書", - "Import S/MIME certificate" : "導入 S/MIME 證書", "PKCS #12 Certificate" : "PKCS #12 證書", "PEM Certificate" : "PEM 證書", "Certificate" : "憑證", @@ -889,11 +933,10 @@ OC.L10N.register( "Could not load the desired message" : "無法載入所選的信件", "Could not load the message" : "無法載入信件", "Error loading message" : "載入信件錯誤", - "Determine importance using machine learning" : "使用機器學習判斷重要性", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "郵件將會以您與其互動或標記為重要的郵件為基礎來自動標記重要郵件。ㄧ開始,您可以能必須手動教導系統哪些是重要郵件,然後它就會與時俱進。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您發送的訊息如果在幾天內未收到回覆,將在此處顯示。", - "Mark all messages of this folder as read" : "將此資料夾中所有的訊息都標記為已讀", - "Last 7 days" : "過去7日", - "From me" : "來自我" + "Add share link from Files" : "新增來自檔案的分享連結", + "Choose a file to add as attachment" : "選擇要作為附件的檔案", + "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Delegated access to {userId}" : "已向 {userId} 委派存取權限", + "Revoked access for {userId}" : "已撤銷 {userId} 的存取權限" }, "nplurals=1; plural=0;"); diff --git a/l10n/zh_HK.json b/l10n/zh_HK.json index dd950bd5f0..7ac6a902e6 100644 --- a/l10n/zh_HK.json +++ b/l10n/zh_HK.json @@ -12,6 +12,10 @@ "Mail" : "郵件", "You are reaching your mailbox quota limit for {account_email}" : "您即將達到 {account_email} 的郵箱配額限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前使用了郵箱存儲空間的 {percentage} ,請刪除不必要的郵件以釋放空間。", + "{account_email} has been delegated to you" : "{account_email} 已委託給您", + "{user} delegated {account} to you" : "{user} 已委託 {account} 給您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委託給您", + "{user} revoked delegation for {account}" : "{user} 撤銷了 {account} 的委託", "Mail Application" : "郵件應用程式", "Mails" : "郵件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "寄件人電郵地址:%1$s 不在通訊錄中,但寄件人名稱:%2$s 在通訊錄中,其電郵地址為:%3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP 連接埠", "SMTP User" : "SMTP 賬號", "SMTP Password" : "SMTP 密碼", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要使 Google 帳戶與此應用程式配合使用,您需要為 Google 啟用雙重認證並生成應用程式密碼。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 驗證。若您的 Nextcloud 管理員尚未設定 Google OAuth,您可以改用 Google 應用程式密碼。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要 OAuth 驗證。請聯絡您的 Nextcloud 管理員,在管理設定中設定 Microsoft OAuth。", "Account settings" : "賬號設定", "Aliases" : "别名", "Alias to S/MIME certificate mapping" : "别名到 S/MIME 證書映射", @@ -115,13 +120,14 @@ "Mail server" : "郵件伺服器", "Sieve server" : "Sieve 伺服器", "Folder search" : "資料夾搜尋", + "Alias name" : "別名", + "Email address" : "電郵地址", "Update alias" : "更新别名", "Rename alias" : "重新命名别名", "Show update alias form" : "顯示更新別名表格", "Delete alias" : "删除别名", "Go back" : "返回", "Change name" : "更改名稱", - "Email address" : "電郵地址", "Add alias" : "新增別名", "Create alias" : "創建别名", "Cancel" : "取消", @@ -134,6 +140,7 @@ "Mail settings" : "電郵設定", "General" : "一般", "Set as default mail app" : "設置為默認郵件應用", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "添加電郵帳戶", "Appearance" : "外觀", "Show all messages in thread" : "顯示線中的所有訊息", @@ -148,13 +155,16 @@ "Sorting" : "排序", "Newest first" : "最新先", "Oldest first" : "最舊先", + "New text block" : "新文本區塊", + "Title of the text block" : "新文本區塊標題", + "Content of the text block" : "文本區塊內容", + "Ok" : "Ok", "Avatars from Gravatar and favicons" : "來自 Gravatar 和網站圖標的頭像", "Reply position" : "回覆位置", "Top" : "上方", "Bottom" : "下方", "Text blocks" : "文本區塊", "Reusable pieces of text that can be inserted in messages" : "可以插入消息的可重用文本片段", - "New text block" : "新文本區塊", "Shared with me" : "與我分享", "Privacy" : "私隱", "Data collection" : "數據收集", @@ -182,12 +192,12 @@ "Search" : "搜尋", "Send" : "傳送", "Refresh" : "重新整理", + "Heading1" : "標題1", + "Heading2" : "標題2", + "Heading3" : "標題3", "About" : "關於", "Acknowledgements" : "致謝", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此應用程式包括 CKEditor,一個開源編輯器。版權所有 © CKEditor 貢獻者。根據 GPLv2 授權。", - "Title of the text block" : "新文本區塊標題", - "Content of the text block" : "文本區塊內容", - "Ok" : "Ok", "Automatically create tentative appointments in calendar" : "自動在日曆中建立暫定預約", "No certificate" : "沒有證書", "Certificate updated" : "更新了證書", @@ -231,7 +241,6 @@ "Disable formatting" : "停用格式", "Upload attachment" : "已上傳附件", "Add attachment from Files" : "從雲端檔案中加入附件", - "Add share link from Files" : "新增來自檔案的分享連結", "Smart picker" : "聰明的選擇器", "Request a read receipt" : "索取讀取回條", "Sign message with S/MIME" : "使用 S/MIME 簽署訊息", @@ -243,15 +252,31 @@ "Monday morning" : "星期一早上", "Custom date and time" : "自訂日期與時間", "Enter a date" : "輸入日期", - "Choose" : "選擇", + "Remove attachment {fileName}" : "移除附件 {fileName}", + "Add as attachment" : "添加此附件", + "Add as share link" : "添加為分享連結", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超過了允許的附件大小 {size}。請透過連結分享檔案。"], - "Choose a file to add as attachment" : "選擇要作為附件的檔案", - "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Choose a file" : "選擇一個檔案", "_{count} attachment_::_{count} attachments_" : ["{count} 個附件"], "Untitled message" : "未命名訊息", "Expand composer" : "展開編輯器", "Close composer" : "關閉編輯器", "Confirm" : "確認", + "Delegate access" : "委派存取權限", + "Revoke" : "撤銷", + "{userId} will no longer be able to act on your behalf" : "{userId} 將無法再代表你執行操作", + "Could not fetch delegates" : "無法取得委派使用者", + "Delegated access to {displayName}" : "委派存取權限給 {displayName}", + "Could not delegate access" : "無法委派存取權限", + "Revoked access for {displayName}" : "已撤銷 {displayName} 的存取權", + "Could not revoke delegation" : "無法撤銷委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允許使用者代表你傳送、接收及刪除郵件", + "Revoke access" : "撤銷存取權限", + "Add delegate" : "新增委派使用者", + "Select a user" : "選擇使用者", + "They will be able to send, receive, and delete mail on your behalf" : "他們將能代表你傳送、接收及刪除郵件", + "Revoke access?" : "撤銷存取權限?", "Tag: {name} deleted" : "標籤:{name} 已刪除", "An error occurred, unable to delete the tag." : "發生錯誤,無法刪除標籤。", "The tag will be deleted from all messages." : "該標籤將從所有訊息刪除。", @@ -259,6 +284,7 @@ "Rich text" : "RTF", "No messages in this folder" : "此資料夾中沒有訊息", "No messages" : "沒有訊息", + "Choose" : "選擇", "Blind copy recipients only" : "僅密件副本收件者", "No subject" : "無題", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end} {subject}", @@ -281,9 +307,12 @@ "Could not snooze thread" : "無法延後討論串", "Thread was unsnoozed" : "討論串已取消延後", "Could not unsnooze thread" : "無法取消延後討論串", + "Message saved to Files" : "訊息已儲存至檔案", + "Message could not be saved" : "無法儲存訊息", "This summary was AI generated" : "此摘要為人工智能產生", "Encrypted message" : "加密訊息", "This message is unread" : "此訊息未讀", + "Choose a folder to store the message in" : "選擇要存放訊息的資料夾", "Unfavorite" : "取消我的最愛", "Favorite" : "我的最愛", "Unread" : "未讀", @@ -298,8 +327,6 @@ "Move Message" : "移動訊息", "Archive thread" : "封存主題", "Archive message" : "封存郵件", - "Delete thread" : "刪除主題", - "Delete message" : "刪除訊息", "More actions" : "更多操作", "Back" : "返回", "Set custom snooze" : "設定自訂延後", @@ -307,6 +334,9 @@ "Reply with meeting" : "使用會議回覆", "Create task" : "創建任務", "Download message" : "下載訊息", + "Save message to Files" : "儲存訊息至檔案", + "Delete thread" : "刪除主題", + "Delete message" : "刪除訊息", "Back to all actions" : "回到所有操作", "Manage quick actions" : "管理快速操作", "Load more" : "載入更多", @@ -327,9 +357,11 @@ "Mark as unimportant" : "標記為不重要", "Mark as important" : "標記為重要", "Report this bug" : "舉報此錯誤 ", + "This description was generated by AI." : "此描述由 AI 生成。", "Event created" : "活動已建立", "Could not create event" : "無法建立活動", "Create event" : "創建活動", + "Title" : "標題", "All day" : "整日", "Attendees" : "參與者", "You can only invite attendees if your account has an email address set" : "您只能在帳戶設置了電郵地址的情況下邀請與會者", @@ -400,7 +432,12 @@ "Could not snooze message" : "無法延後訊息", "Message was unsnoozed" : "訊息已取消延後", "Could not unsnooze message" : "無法取消延後訊息", + "Could not generate direct link: Message ID is missing" : "無法產生直接連結:缺少訊息 ID", + "Direct link copied to clipboard" : "直接連結已複製到剪貼板", + "Copy direct link" : "複製直接連結", "Forward" : "轉寄", + "Only for message recipients" : "僅限訊息收件者", + "Link copied" : "已複製連結", "Move message" : "移動訊息", "Translate" : "翻譯", "Forward message as attachment" : "將訊息作為附件轉發", @@ -442,14 +479,17 @@ "Moving message" : "移動訊息", "This account cannot connect" : "此帳戶無法連結", "Connection failed. Please verify your information and try again" : "連接失敗。請檢查您的資訊並再試一次", + "Change password" : "更改密碼", "Used quota: {quota}% ({limit})" : "已使用的配額:{quota}% ({limit})", "Used quota: {quota}%" : "已使用的配額:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "無法建立信箱。該名稱可能包含無效字元。請嘗試其他名稱。", "Remove account" : "移除賬號", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 賬號與已快取的電子郵件將會從 Nextcloud 移除,但不會從您的電子郵件提供商移除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "無法刪除帳戶", "Provisioned account is disabled" : "預配帳戶已禁用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "請使用密碼登錄以啟用此帳戶。目前會話正在使用無密碼身份驗證,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派帳戶", "Show only subscribed folders" : "僅顯示已訂閱的資料夾", "Add folder" : "添加資料夾", "Folder name" : "資料夾名稱", @@ -622,6 +662,10 @@ "Reply to sender only" : "僅回覆寄件人", "Mark as unfavorite" : "取消標記我的最愛", "Mark as favorite" : "標記為我的最愛", + "From:" : "從:", + "To:" : "收件者:", + "Cc:" : "副本:", + "Bcc:" : "密件副本:", "Unsubscribe via link" : "透過連結取消訂閱", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消訂閱將停止來自郵寄名單 {sender} 的所有消息", "Send unsubscribe email" : "傳送取消訂閱電子郵件", @@ -818,6 +862,7 @@ "Certificate imported successfully" : "成功導入了證書", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "無法導入證書。請確保私鑰與證書匹配並且不受密碼片語保護。", "Failed to import the certificate" : "導入證書失敗", + "Import S/MIME certificate" : "導入 S/MIME 證書", "S/MIME certificates" : "S/MIME 證書", "Certificate name" : "證書名稱", "E-mail address" : "電郵地址", @@ -825,7 +870,6 @@ "Delete certificate" : "刪除證書", "No certificate imported yet" : "尚未導入證書", "Import certificate" : "導入證書", - "Import S/MIME certificate" : "導入 S/MIME 證書", "PKCS #12 Certificate" : "PKCS #12 證書", "PEM Certificate" : "PEM 證書", "Certificate" : "憑證", @@ -887,11 +931,10 @@ "Could not load the desired message" : "無法載入所選的信件", "Could not load the message" : "無法載入信件", "Error loading message" : "載入信件錯誤", - "Determine importance using machine learning" : "使用機器學習判斷重要性", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "郵件將會以您與其互動或標記為重要的郵件為基礎來自動標記重要郵件。ㄧ開始,您可以能必須手動教導系統哪些是重要郵件,然後它就會與時俱進。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您發送的訊息如果在幾天內未收到回覆,將在此處顯示。", - "Mark all messages of this folder as read" : "將此資料夾中所有的訊息都標記為已讀", - "Last 7 days" : "過去7日", - "From me" : "來自我" + "Add share link from Files" : "新增來自檔案的分享連結", + "Choose a file to add as attachment" : "選擇要作為附件的檔案", + "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Delegated access to {userId}" : "已向 {userId} 委派存取權限", + "Revoked access for {userId}" : "已撤銷 {userId} 的存取權限" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js index c96d19a030..a9b2ec2d62 100644 --- a/l10n/zh_TW.js +++ b/l10n/zh_TW.js @@ -14,6 +14,10 @@ OC.L10N.register( "Mail" : "電子郵件", "You are reaching your mailbox quota limit for {account_email}" : "您即將達到 {account_email} 的信箱配額限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前使用了信箱儲存空間的 {percentage}。請刪除不必要的電子郵件以釋出空間。", + "{account_email} has been delegated to you" : "{account_email} 已委託給您", + "{user} delegated {account} to you" : "{user} 已委託 {account} 給您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委託給您", + "{user} revoked delegation for {account}" : "{user} 撤銷了 {account} 的委託", "Mail Application" : "郵件應用程式", "Mails" : "郵件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "寄件者電子郵件:%1$s 不在通訊錄中,但寄件者名稱:%2$s 在通訊錄中,但其電子郵件為:%3$s", @@ -93,7 +97,8 @@ OC.L10N.register( "SMTP Port" : "SMTP 連接埠", "SMTP User" : "SMTP 帳號", "SMTP Password" : "SMTP 密碼", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要讓 Google 帳號與此應用程式搭配使用,您必須為 Google 帳號啟用雙重驗證並產生應用程式密碼。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 驗證。若您的 Nextcloud 管理員尚未設定 Google OAuth,您可以改用 Google 應用程式密碼。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要 OAuth 驗證。請聯絡您的 Nextcloud 管理員,在管理設定中設定 Microsoft OAuth。", "Account settings" : "帳號設定", "Aliases" : "別名", "Alias to S/MIME certificate mapping" : "別名至 S/MIME 憑證對映", @@ -117,13 +122,14 @@ OC.L10N.register( "Mail server" : "郵件伺服器", "Sieve server" : "Sieve 伺服器", "Folder search" : "資料夾搜尋", + "Alias name" : "別名", + "Email address" : "電子郵件地址", "Update alias" : "更新别名", "Rename alias" : "重新命名別名", "Show update alias form" : "顯示更新別名表格", "Delete alias" : "删除别名", "Go back" : "返回", "Change name" : "更改名稱", - "Email address" : "電子郵件地址", "Add alias" : "新增別名", "Create alias" : "建立別名", "Cancel" : "取消", @@ -136,6 +142,7 @@ OC.L10N.register( "Mail settings" : "電子郵件設定", "General" : "一般", "Set as default mail app" : "設定為預設的郵件應用程式", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "新增郵件帳號", "Appearance" : "外觀", "Show all messages in thread" : "在討論串中顯示所有訊息", @@ -150,13 +157,16 @@ OC.L10N.register( "Sorting" : "排序", "Newest first" : "新的在前", "Oldest first" : "舊的在前", + "New text block" : "新文字區塊", + "Title of the text block" : "文字區塊標題", + "Content of the text block" : "文字區塊內容", + "Ok" : "確定", "Avatars from Gravatar and favicons" : "來自 Gravatar 與 favicon 的大頭照", "Reply position" : "回覆位置", "Top" : "頂部", "Bottom" : "底部", "Text blocks" : "文字區塊", "Reusable pieces of text that can be inserted in messages" : "可重複使用的文字片段,可用於插入郵件中", - "New text block" : "新文字區塊", "Shared with me" : "與我分享", "Privacy" : "隱私", "Data collection" : "資料蒐集", @@ -184,12 +194,12 @@ OC.L10N.register( "Search" : "搜尋", "Send" : "傳送", "Refresh" : "重新整理", + "Heading1" : "標題1", + "Heading2" : "標題2", + "Heading3" : "標題3", "About" : "關於", "Acknowledgements" : "致謝", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此應用程式包含 CKEditor,這是開放原始碼的編輯器。Copyright © CKEditor 貢獻者。以 GPLv2 授權。", - "Title of the text block" : "文字區塊標題", - "Content of the text block" : "文字區塊內容", - "Ok" : "確定", "Automatically create tentative appointments in calendar" : "自動在行事曆中建立暫定預約", "No certificate" : "無憑證", "Certificate updated" : "憑證已更新", @@ -233,7 +243,6 @@ OC.L10N.register( "Disable formatting" : "停用格式化", "Upload attachment" : "已上傳附件", "Add attachment from Files" : "從雲端檔案中加入附件", - "Add share link from Files" : "新增來自檔案的分享連結", "Smart picker" : "智慧型挑選器", "Request a read receipt" : "索取讀取回條", "Sign message with S/MIME" : "使用 S/MIME 簽署訊息", @@ -245,15 +254,29 @@ OC.L10N.register( "Monday morning" : "週一早上", "Custom date and time" : "自訂日期與時間", "Enter a date" : "輸入日期", - "Choose" : "選擇", + "Remove attachment {fileName}" : "移除附件 {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超過了允許的附件大小 {size}。請透過連結分享檔案。"], - "Choose a file to add as attachment" : "選擇要作為附件的檔案", - "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Choose a file" : "選擇檔案", "_{count} attachment_::_{count} attachments_" : ["{count} 個附件"], "Untitled message" : "未命名訊息", "Expand composer" : "展開編輯器", "Close composer" : "關閉編輯器", "Confirm" : "確認", + "Delegate access" : "委派存取權", + "Revoke" : "撤銷", + "{userId} will no longer be able to act on your behalf" : "{userId} 將無法再代表您執行操作", + "Could not fetch delegates" : "無法擷取委派使用者", + "Delegated access to {displayName}" : "委派存取權限給 {displayName}", + "Could not delegate access" : "無法委派存取權", + "Revoked access for {displayName}" : "已撤銷 {displayName} 的存取權", + "Could not revoke delegation" : "無法撤銷委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允許使用者代表您傳送、接收與刪除郵件", + "Revoke access" : "撤銷存取權", + "Add delegate" : "新增委派", + "Select a user" : "選取使用者", + "They will be able to send, receive, and delete mail on your behalf" : "他們將能代表您傳送、接收與刪除郵件", + "Revoke access?" : "撤銷存取權", "Tag: {name} deleted" : "標籤:{name} 已刪除", "An error occurred, unable to delete the tag." : "遇到錯誤,無法刪除標籤。", "The tag will be deleted from all messages." : "該標籤將從所有訊息刪除。", @@ -261,6 +284,7 @@ OC.L10N.register( "Rich text" : "RTF", "No messages in this folder" : "此收件匣中沒有信件", "No messages" : "沒有郵件", + "Choose" : "選擇", "Blind copy recipients only" : "僅密件副本收件者", "No subject" : "沒有主旨", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end} {subject}", @@ -283,9 +307,12 @@ OC.L10N.register( "Could not snooze thread" : "無法延後討論串", "Thread was unsnoozed" : "討論已取消延後", "Could not unsnooze thread" : "無法取消延後討論串", + "Message saved to Files" : "訊息已儲存至檔案", + "Message could not be saved" : "無法儲存訊息", "This summary was AI generated" : "此摘要為人工智慧產生", "Encrypted message" : "加密訊息", "This message is unread" : "此訊息未讀", + "Choose a folder to store the message in" : "選擇要存放訊息的資料夾", "Unfavorite" : "取消收藏", "Favorite" : "收藏", "Unread" : "未讀", @@ -300,8 +327,6 @@ OC.L10N.register( "Move Message" : "移動訊息", "Archive thread" : "封存討論串", "Archive message" : "封存訊息", - "Delete thread" : "刪除討論串", - "Delete message" : "刪除訊息", "More actions" : "更多動作", "Back" : "返回", "Set custom snooze" : "設定自訂延後", @@ -309,6 +334,9 @@ OC.L10N.register( "Reply with meeting" : "使用會議回覆", "Create task" : "建立工作項目", "Download message" : "下載訊息", + "Save message to Files" : "儲存訊息至檔案", + "Delete thread" : "刪除討論串", + "Delete message" : "刪除訊息", "Back to all actions" : "回到所有動作", "Manage quick actions" : "管理快速動作", "Load more" : "載入更多", @@ -329,9 +357,11 @@ OC.L10N.register( "Mark as unimportant" : "標記為不重要", "Mark as important" : "標記為重要", "Report this bug" : "回報此臭蟲", + "This description was generated by AI." : "此描述由人工智慧產生。", "Event created" : "已建立事件", "Could not create event" : "無法建立活動", "Create event" : "建立事件", + "Title" : "標題", "All day" : "全天", "Attendees" : "參與者", "You can only invite attendees if your account has an email address set" : "您僅能在您的帳號設定了電子郵件地址的情況下邀請參與者", @@ -402,7 +432,12 @@ OC.L10N.register( "Could not snooze message" : "無法延後郵件", "Message was unsnoozed" : "訊息已取消延後", "Could not unsnooze message" : "無法取消延後訊息", + "Could not generate direct link: Message ID is missing" : "無法產生直接連結:缺少訊息 ID", + "Direct link copied to clipboard" : "直接連結已複製到剪貼簿", + "Copy direct link" : "複製直接連結", "Forward" : "轉寄", + "Only for message recipients" : "僅限訊息收件者", + "Link copied" : "已複製連結", "Move message" : "移動訊息", "Translate" : "翻譯", "Forward message as attachment" : "將郵件作為附件轉發", @@ -444,14 +479,17 @@ OC.L10N.register( "Moving message" : "正在移動訊息", "This account cannot connect" : "此帳號無法連結", "Connection failed. Please verify your information and try again" : "連線失敗。請檢查您的資訊並再試一次", + "Change password" : "變更密碼", "Used quota: {quota}% ({limit})" : "已使用的配額:{quota}% ({limit})", "Used quota: {quota}%" : "已使用的配額:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "無法建立信箱。該名稱可能包含無效字元。請嘗試其他名稱。", "Remove account" : "移除帳號", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 帳號與已快取的電子郵件將會從 Nextcloud 移除,但不會從您的電子郵件提供商移除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "無法刪除帳號", "Provisioned account is disabled" : "預先設定的帳號已停用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "請使用密碼登入以啟用此帳號。目前的工作階段正在使用無密碼身份驗證,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派帳號", "Show only subscribed folders" : "僅顯示已訂閱的資料夾", "Add folder" : "新增資料夾", "Folder name" : "資料夾名稱", @@ -624,6 +662,10 @@ OC.L10N.register( "Reply to sender only" : "僅回覆寄件者", "Mark as unfavorite" : "取消標記為我的最愛", "Mark as favorite" : "標記為我的最愛", + "From:" : "從:", + "To:" : "至:", + "Cc:" : "副本:", + "Bcc:" : "密件副本:", "Unsubscribe via link" : "透過連結取消訂閱", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消訂閱將停止來自郵件清單 {sender} 的所有訊息", "Send unsubscribe email" : "傳送取消訂閱電子郵件", @@ -820,6 +862,7 @@ OC.L10N.register( "Certificate imported successfully" : "成功匯出憑證", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "無法匯入憑證。請確保私鑰與憑證相符,且不受密語保護。", "Failed to import the certificate" : "匯入憑證失敗", + "Import S/MIME certificate" : "匯入 S/MIME 憑證", "S/MIME certificates" : "S/MIME 憑證", "Certificate name" : "憑證名稱", "E-mail address" : "電子郵件地址", @@ -827,7 +870,6 @@ OC.L10N.register( "Delete certificate" : "刪除憑證", "No certificate imported yet" : "尚未匯入憑證", "Import certificate" : "匯入憑證", - "Import S/MIME certificate" : "匯入 S/MIME 憑證", "PKCS #12 Certificate" : "PKCS #12 憑證", "PEM Certificate" : "PEM 憑證", "Certificate" : "憑證", @@ -889,11 +931,10 @@ OC.L10N.register( "Could not load the desired message" : "無法載入所選的信件", "Could not load the message" : "無法載入信件", "Error loading message" : "載入信件錯誤", - "Determine importance using machine learning" : "使用機器學習判斷重要程度", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "郵件將會以您與其互動或標記為重要的郵件為基礎來自動標記重要郵件。ㄧ開始,您可以能必須手動教導系統哪些是重要郵件,然後它就會與時俱進。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您傳送的訊息若未在幾天內收到回覆,將在此處顯示。", - "Mark all messages of this folder as read" : "將此資料夾中所有的訊息都標記為已讀", - "Last 7 days" : "過去7天", - "From me" : "來自我" + "Add share link from Files" : "新增來自檔案的分享連結", + "Choose a file to add as attachment" : "選擇要作為附件的檔案", + "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Delegated access to {userId}" : "已向 {userId} 委派存取權", + "Revoked access for {userId}" : "已撤銷對 {userId} 的存取" }, "nplurals=1; plural=0;"); diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json index 7ff43d0e0a..905c55beef 100644 --- a/l10n/zh_TW.json +++ b/l10n/zh_TW.json @@ -12,6 +12,10 @@ "Mail" : "電子郵件", "You are reaching your mailbox quota limit for {account_email}" : "您即將達到 {account_email} 的信箱配額限制", "You are currently using {percentage} of your mailbox storage. Please make some space by deleting unneeded emails." : "您目前使用了信箱儲存空間的 {percentage}。請刪除不必要的電子郵件以釋出空間。", + "{account_email} has been delegated to you" : "{account_email} 已委託給您", + "{user} delegated {account} to you" : "{user} 已委託 {account} 給您", + "{account_email} is no longer delegated to you" : "{account_email} 不再委託給您", + "{user} revoked delegation for {account}" : "{user} 撤銷了 {account} 的委託", "Mail Application" : "郵件應用程式", "Mails" : "郵件", "Sender email: %1$s is not in the address book, but the sender name: %2$s is in the address book with the following email: %3$s" : "寄件者電子郵件:%1$s 不在通訊錄中,但寄件者名稱:%2$s 在通訊錄中,但其電子郵件為:%3$s", @@ -91,7 +95,8 @@ "SMTP Port" : "SMTP 連接埠", "SMTP User" : "SMTP 帳號", "SMTP Password" : "SMTP 密碼", - "For the Google account to work with this app you need to enable two-factor authentication for Google and generate an app password." : "要讓 Google 帳號與此應用程式搭配使用,您必須為 Google 帳號啟用雙重驗證並產生應用程式密碼。", + "Google requires OAuth authentication. If your Nextcloud admin has not configured Google OAuth, you can use a Google App Password instead." : "Google 需要 OAuth 驗證。若您的 Nextcloud 管理員尚未設定 Google OAuth,您可以改用 Google 應用程式密碼。", + "Microsoft requires OAuth authentication. Ask your Nextcloud admin to configure Microsoft OAuth in the admin settings." : "Microsoft 需要 OAuth 驗證。請聯絡您的 Nextcloud 管理員,在管理設定中設定 Microsoft OAuth。", "Account settings" : "帳號設定", "Aliases" : "別名", "Alias to S/MIME certificate mapping" : "別名至 S/MIME 憑證對映", @@ -115,13 +120,14 @@ "Mail server" : "郵件伺服器", "Sieve server" : "Sieve 伺服器", "Folder search" : "資料夾搜尋", + "Alias name" : "別名", + "Email address" : "電子郵件地址", "Update alias" : "更新别名", "Rename alias" : "重新命名別名", "Show update alias form" : "顯示更新別名表格", "Delete alias" : "删除别名", "Go back" : "返回", "Change name" : "更改名稱", - "Email address" : "電子郵件地址", "Add alias" : "新增別名", "Create alias" : "建立別名", "Cancel" : "取消", @@ -134,6 +140,7 @@ "Mail settings" : "電子郵件設定", "General" : "一般", "Set as default mail app" : "設定為預設的郵件應用程式", + "{email} (delegated)" : "{email}(已委派)", "Add mail account" : "新增郵件帳號", "Appearance" : "外觀", "Show all messages in thread" : "在討論串中顯示所有訊息", @@ -148,13 +155,16 @@ "Sorting" : "排序", "Newest first" : "新的在前", "Oldest first" : "舊的在前", + "New text block" : "新文字區塊", + "Title of the text block" : "文字區塊標題", + "Content of the text block" : "文字區塊內容", + "Ok" : "確定", "Avatars from Gravatar and favicons" : "來自 Gravatar 與 favicon 的大頭照", "Reply position" : "回覆位置", "Top" : "頂部", "Bottom" : "底部", "Text blocks" : "文字區塊", "Reusable pieces of text that can be inserted in messages" : "可重複使用的文字片段,可用於插入郵件中", - "New text block" : "新文字區塊", "Shared with me" : "與我分享", "Privacy" : "隱私", "Data collection" : "資料蒐集", @@ -182,12 +192,12 @@ "Search" : "搜尋", "Send" : "傳送", "Refresh" : "重新整理", + "Heading1" : "標題1", + "Heading2" : "標題2", + "Heading3" : "標題3", "About" : "關於", "Acknowledgements" : "致謝", "This application includes CKEditor, an open-source editor. Copyright © CKEditor contributors. Licensed under GPLv2." : "此應用程式包含 CKEditor,這是開放原始碼的編輯器。Copyright © CKEditor 貢獻者。以 GPLv2 授權。", - "Title of the text block" : "文字區塊標題", - "Content of the text block" : "文字區塊內容", - "Ok" : "確定", "Automatically create tentative appointments in calendar" : "自動在行事曆中建立暫定預約", "No certificate" : "無憑證", "Certificate updated" : "憑證已更新", @@ -231,7 +241,6 @@ "Disable formatting" : "停用格式化", "Upload attachment" : "已上傳附件", "Add attachment from Files" : "從雲端檔案中加入附件", - "Add share link from Files" : "新增來自檔案的分享連結", "Smart picker" : "智慧型挑選器", "Request a read receipt" : "索取讀取回條", "Sign message with S/MIME" : "使用 S/MIME 簽署訊息", @@ -243,15 +252,29 @@ "Monday morning" : "週一早上", "Custom date and time" : "自訂日期與時間", "Enter a date" : "輸入日期", - "Choose" : "選擇", + "Remove attachment {fileName}" : "移除附件 {fileName}", "_The attachment exceed the allowed attachments size of {size}. Please share the file via link instead._::_The attachments exceed the allowed attachments size of {size}. Please share the files via link instead._" : ["附件超過了允許的附件大小 {size}。請透過連結分享檔案。"], - "Choose a file to add as attachment" : "選擇要作為附件的檔案", - "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Choose a file" : "選擇檔案", "_{count} attachment_::_{count} attachments_" : ["{count} 個附件"], "Untitled message" : "未命名訊息", "Expand composer" : "展開編輯器", "Close composer" : "關閉編輯器", "Confirm" : "確認", + "Delegate access" : "委派存取權", + "Revoke" : "撤銷", + "{userId} will no longer be able to act on your behalf" : "{userId} 將無法再代表您執行操作", + "Could not fetch delegates" : "無法擷取委派使用者", + "Delegated access to {displayName}" : "委派存取權限給 {displayName}", + "Could not delegate access" : "無法委派存取權", + "Revoked access for {displayName}" : "已撤銷 {displayName} 的存取權", + "Could not revoke delegation" : "無法撤銷委派", + "Delegation" : "委派", + "Allow users to send, receive, and delete mail on your behalf" : "允許使用者代表您傳送、接收與刪除郵件", + "Revoke access" : "撤銷存取權", + "Add delegate" : "新增委派", + "Select a user" : "選取使用者", + "They will be able to send, receive, and delete mail on your behalf" : "他們將能代表您傳送、接收與刪除郵件", + "Revoke access?" : "撤銷存取權", "Tag: {name} deleted" : "標籤:{name} 已刪除", "An error occurred, unable to delete the tag." : "遇到錯誤,無法刪除標籤。", "The tag will be deleted from all messages." : "該標籤將從所有訊息刪除。", @@ -259,6 +282,7 @@ "Rich text" : "RTF", "No messages in this folder" : "此收件匣中沒有信件", "No messages" : "沒有郵件", + "Choose" : "選擇", "Blind copy recipients only" : "僅密件副本收件者", "No subject" : "沒有主旨", "{markup-start}Draft:{markup-end} {subject}" : "{markup-start}草稿:{markup-end} {subject}", @@ -281,9 +305,12 @@ "Could not snooze thread" : "無法延後討論串", "Thread was unsnoozed" : "討論已取消延後", "Could not unsnooze thread" : "無法取消延後討論串", + "Message saved to Files" : "訊息已儲存至檔案", + "Message could not be saved" : "無法儲存訊息", "This summary was AI generated" : "此摘要為人工智慧產生", "Encrypted message" : "加密訊息", "This message is unread" : "此訊息未讀", + "Choose a folder to store the message in" : "選擇要存放訊息的資料夾", "Unfavorite" : "取消收藏", "Favorite" : "收藏", "Unread" : "未讀", @@ -298,8 +325,6 @@ "Move Message" : "移動訊息", "Archive thread" : "封存討論串", "Archive message" : "封存訊息", - "Delete thread" : "刪除討論串", - "Delete message" : "刪除訊息", "More actions" : "更多動作", "Back" : "返回", "Set custom snooze" : "設定自訂延後", @@ -307,6 +332,9 @@ "Reply with meeting" : "使用會議回覆", "Create task" : "建立工作項目", "Download message" : "下載訊息", + "Save message to Files" : "儲存訊息至檔案", + "Delete thread" : "刪除討論串", + "Delete message" : "刪除訊息", "Back to all actions" : "回到所有動作", "Manage quick actions" : "管理快速動作", "Load more" : "載入更多", @@ -327,9 +355,11 @@ "Mark as unimportant" : "標記為不重要", "Mark as important" : "標記為重要", "Report this bug" : "回報此臭蟲", + "This description was generated by AI." : "此描述由人工智慧產生。", "Event created" : "已建立事件", "Could not create event" : "無法建立活動", "Create event" : "建立事件", + "Title" : "標題", "All day" : "全天", "Attendees" : "參與者", "You can only invite attendees if your account has an email address set" : "您僅能在您的帳號設定了電子郵件地址的情況下邀請參與者", @@ -400,7 +430,12 @@ "Could not snooze message" : "無法延後郵件", "Message was unsnoozed" : "訊息已取消延後", "Could not unsnooze message" : "無法取消延後訊息", + "Could not generate direct link: Message ID is missing" : "無法產生直接連結:缺少訊息 ID", + "Direct link copied to clipboard" : "直接連結已複製到剪貼簿", + "Copy direct link" : "複製直接連結", "Forward" : "轉寄", + "Only for message recipients" : "僅限訊息收件者", + "Link copied" : "已複製連結", "Move message" : "移動訊息", "Translate" : "翻譯", "Forward message as attachment" : "將郵件作為附件轉發", @@ -442,14 +477,17 @@ "Moving message" : "正在移動訊息", "This account cannot connect" : "此帳號無法連結", "Connection failed. Please verify your information and try again" : "連線失敗。請檢查您的資訊並再試一次", + "Change password" : "變更密碼", "Used quota: {quota}% ({limit})" : "已使用的配額:{quota}% ({limit})", "Used quota: {quota}%" : "已使用的配額:{quota}%", "Unable to create mailbox. The name likely contains invalid characters. Please try another name." : "無法建立信箱。該名稱可能包含無效字元。請嘗試其他名稱。", "Remove account" : "移除帳號", "The account for {email} and cached email data will be removed from Nextcloud, but not from your email provider." : "{email} 帳號與已快取的電子郵件將會從 Nextcloud 移除,但不會從您的電子郵件提供商移除。", "Remove {email}" : "移除 {email}", + "could not delete account" : "無法刪除帳號", "Provisioned account is disabled" : "預先設定的帳號已停用", "Please login using a password to enable this account. The current session is using passwordless authentication, e.g. SSO or WebAuthn." : "請使用密碼登入以啟用此帳號。目前的工作階段正在使用無密碼身份驗證,例如 SSO 或 WebAuthn。", + "Delegate account" : "委派帳號", "Show only subscribed folders" : "僅顯示已訂閱的資料夾", "Add folder" : "新增資料夾", "Folder name" : "資料夾名稱", @@ -622,6 +660,10 @@ "Reply to sender only" : "僅回覆寄件者", "Mark as unfavorite" : "取消標記為我的最愛", "Mark as favorite" : "標記為我的最愛", + "From:" : "從:", + "To:" : "至:", + "Cc:" : "副本:", + "Bcc:" : "密件副本:", "Unsubscribe via link" : "透過連結取消訂閱", "Unsubscribing will stop all messages from the mailing list {sender}" : "取消訂閱將停止來自郵件清單 {sender} 的所有訊息", "Send unsubscribe email" : "傳送取消訂閱電子郵件", @@ -818,6 +860,7 @@ "Certificate imported successfully" : "成功匯出憑證", "Failed to import the certificate. Please make sure that the private key matches the certificate and is not protected by a passphrase." : "無法匯入憑證。請確保私鑰與憑證相符,且不受密語保護。", "Failed to import the certificate" : "匯入憑證失敗", + "Import S/MIME certificate" : "匯入 S/MIME 憑證", "S/MIME certificates" : "S/MIME 憑證", "Certificate name" : "憑證名稱", "E-mail address" : "電子郵件地址", @@ -825,7 +868,6 @@ "Delete certificate" : "刪除憑證", "No certificate imported yet" : "尚未匯入憑證", "Import certificate" : "匯入憑證", - "Import S/MIME certificate" : "匯入 S/MIME 憑證", "PKCS #12 Certificate" : "PKCS #12 憑證", "PEM Certificate" : "PEM 憑證", "Certificate" : "憑證", @@ -887,11 +929,10 @@ "Could not load the desired message" : "無法載入所選的信件", "Could not load the message" : "無法載入信件", "Error loading message" : "載入信件錯誤", - "Determine importance using machine learning" : "使用機器學習判斷重要程度", - "Messages will automatically be marked as important based on which messages you interacted with or marked as important. In the beginning you might have to manually change the importance to teach the system, but it will improve over time." : "郵件將會以您與其互動或標記為重要的郵件為基礎來自動標記重要郵件。ㄧ開始,您可以能必須手動教導系統哪些是重要郵件,然後它就會與時俱進。", - "Messages sent by you that require a reply but did not receive one after a couple of days will be shown here." : "您傳送的訊息若未在幾天內收到回覆,將在此處顯示。", - "Mark all messages of this folder as read" : "將此資料夾中所有的訊息都標記為已讀", - "Last 7 days" : "過去7天", - "From me" : "來自我" + "Add share link from Files" : "新增來自檔案的分享連結", + "Choose a file to add as attachment" : "選擇要作為附件的檔案", + "Choose a file to share as a link" : "選擇要作為連結分享的檔案", + "Delegated access to {userId}" : "已向 {userId} 委派存取權", + "Revoked access for {userId}" : "已撤銷對 {userId} 的存取" },"pluralForm" :"nplurals=1; plural=0;" } \ No newline at end of file diff --git a/lib/Account.php b/lib/Account.php index 1bd89c997f..c2b965f236 100644 --- a/lib/Account.php +++ b/lib/Account.php @@ -7,6 +7,7 @@ * SPDX-FileCopyrightText: 2015-2016 owncloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ + namespace OCA\Mail; use JsonSerializable; diff --git a/lib/Address.php b/lib/Address.php index 3dc44c0c17..b890631e58 100644 --- a/lib/Address.php +++ b/lib/Address.php @@ -22,11 +22,9 @@ class Address implements JsonSerializable { public const TYPE_CC = 2; public const TYPE_BCC = 3; - /** @var Horde_Mail_Rfc822_Address */ - private $wrapped; - - private function __construct(Horde_Mail_Rfc822_Address $wrapped) { - $this->wrapped = $wrapped; + private function __construct( + private Horde_Mail_Rfc822_Address $wrapped, + ) { } public static function fromHorde(Horde_Mail_Rfc822_Address $horde): self { diff --git a/lib/AddressList.php b/lib/AddressList.php index f40ff550bf..5d657e7078 100644 --- a/lib/AddressList.php +++ b/lib/AddressList.php @@ -19,14 +19,12 @@ * @psalm-immutable */ class AddressList implements Countable, JsonSerializable { - /** @var list
*/ - private array $addresses; - /** * @param list
$addresses */ - public function __construct(array $addresses = []) { - $this->addresses = $addresses; + public function __construct( + private array $addresses = [], + ) { } /** diff --git a/lib/Attachment.php b/lib/Attachment.php index 5c1d1bb0c8..e3d23337e1 100644 --- a/lib/Attachment.php +++ b/lib/Attachment.php @@ -11,26 +11,15 @@ use Horde_Mime_Part; class Attachment { - private ?string $id; - private ?string $name; - private string $type; - private string $content; - private int $size; - public function __construct( - ?string $id, - ?string $name, - string $type, - string $content, - int $size, + private ?string $id, + private ?string $name, + private string $type, + private string $content, + private int $size, public readonly ?string $contentId, public readonly ?string $disposition, ) { - $this->id = $id; - $this->name = $name; - $this->type = $type; - $this->content = $content; - $this->size = $size; } public static function fromMimePart(Horde_Mime_Part $mimePart): self { diff --git a/lib/BackgroundJob/CleanupJob.php b/lib/BackgroundJob/CleanupJob.php index 050733fb6d..f8fdd4b0b4 100644 --- a/lib/BackgroundJob/CleanupJob.php +++ b/lib/BackgroundJob/CleanupJob.php @@ -15,15 +15,12 @@ use Psr\Log\LoggerInterface; class CleanupJob extends TimedJob { - private CleanupService $cleanupService; - private LoggerInterface $logger; - - public function __construct(ITimeFactory $time, - CleanupService $cleanupService, - LoggerInterface $logger) { + public function __construct( + ITimeFactory $time, + private CleanupService $cleanupService, + private LoggerInterface $logger, + ) { parent::__construct($time); - $this->cleanupService = $cleanupService; - $this->logger = $logger; $this->setInterval(24 * 60 * 60); $this->setTimeSensitivity(self::TIME_INSENSITIVE); diff --git a/lib/BackgroundJob/ContextChat/SubmitContentJob.php b/lib/BackgroundJob/ContextChat/SubmitContentJob.php index 0f6ffabfe6..11619b92fe 100644 --- a/lib/BackgroundJob/ContextChat/SubmitContentJob.php +++ b/lib/BackgroundJob/ContextChat/SubmitContentJob.php @@ -108,7 +108,6 @@ protected function run($argument): void { return; } - $client = $this->clientFactory->getClient($account); $items = []; @@ -128,16 +127,13 @@ protected function run($argument): void { continue; } - // Skip encrypted messages if ($imapMessage->isEncrypted()) { continue; } - $fullMessage = $imapMessage->getFullMessage($imapMessage->getUid(), true); - $items[] = new ContentItem( "{$mailbox->getId()}:{$message->getId()}", $this->contextChatProvider->getId(), diff --git a/lib/BackgroundJob/DraftsJob.php b/lib/BackgroundJob/DraftsJob.php index 4ad8e887dc..6918acd901 100644 --- a/lib/BackgroundJob/DraftsJob.php +++ b/lib/BackgroundJob/DraftsJob.php @@ -14,16 +14,15 @@ use OCP\BackgroundJob\TimedJob; class DraftsJob extends TimedJob { - private DraftsService $draftsService; - - public function __construct(ITimeFactory $time, - DraftsService $draftsService) { + public function __construct( + ITimeFactory $time, + private DraftsService $draftsService, + ) { parent::__construct($time); // Run once per five minutes $this->setInterval(5 * 60); $this->setTimeSensitivity(self::TIME_SENSITIVE); - $this->draftsService = $draftsService; } #[\Override] diff --git a/lib/BackgroundJob/FollowUpClassifierJob.php b/lib/BackgroundJob/FollowUpClassifierJob.php index 4856aa7d5d..0169aaf8f9 100644 --- a/lib/BackgroundJob/FollowUpClassifierJob.php +++ b/lib/BackgroundJob/FollowUpClassifierJob.php @@ -13,6 +13,7 @@ use OCA\Mail\Db\Message; use OCA\Mail\Db\ThreadMapper; use OCA\Mail\Exception\ClientException; +use OCA\Mail\Exception\ServiceException; use OCA\Mail\Service\AccountService; use OCA\Mail\Service\AiIntegrations\AiIntegrationsService; use OCP\AppFramework\Utility\ITimeFactory; @@ -84,12 +85,19 @@ public function run($argument): void { return; } - $requiresFollowup = $this->aiService->requiresFollowUp( - $account, - $mailbox, - $message, - $userId, - ); + try { + $requiresFollowup = $this->aiService->requiresFollowUp( + $account, + $mailbox, + $message, + $userId, + ); + } catch (ServiceException $e) { + $this->logger->error('Failed to classify message for follow-up: ' . $e->getMessage(), [ + 'exception' => $e, + ]); + return; + } if (!$requiresFollowup) { return; } diff --git a/lib/BackgroundJob/IMipMessageJob.php b/lib/BackgroundJob/IMipMessageJob.php index 841cb65ce4..f7ab2e5560 100644 --- a/lib/BackgroundJob/IMipMessageJob.php +++ b/lib/BackgroundJob/IMipMessageJob.php @@ -14,14 +14,13 @@ use OCP\BackgroundJob\TimedJob; class IMipMessageJob extends TimedJob { - private IMipService $iMipService; - - public function __construct(ITimeFactory $time, - IMipService $iMipService) { + public function __construct( + ITimeFactory $time, + private IMipService $iMipService, + ) { parent::__construct($time); $this->setInterval(300); - $this->iMipService = $iMipService; } #[\Override] diff --git a/lib/BackgroundJob/MigrateImportantJob.php b/lib/BackgroundJob/MigrateImportantJob.php index 57a14827f5..c2cfaa2c71 100644 --- a/lib/BackgroundJob/MigrateImportantJob.php +++ b/lib/BackgroundJob/MigrateImportantJob.php @@ -12,7 +12,6 @@ use OCA\Mail\Account; use OCA\Mail\Db\MailAccountMapper; use OCA\Mail\Db\MailboxMapper; - use OCA\Mail\Exception\ServiceException; use OCA\Mail\IMAP\IMAPClientFactory; use OCA\Mail\Migration\MigrateImportantFromImapAndDb; @@ -23,28 +22,16 @@ use Psr\Log\LoggerInterface; class MigrateImportantJob extends QueuedJob { - private MailboxMapper $mailboxMapper; - private MailAccountMapper $mailAccountMapper; - private MailManager $mailManager; - private MigrateImportantFromImapAndDb $migration; - private LoggerInterface $logger; - private IMAPClientFactory $imapClientFactory; - - public function __construct(MailboxMapper $mailboxMapper, - MailAccountMapper $mailAccountMapper, - MailManager $mailManager, - MigrateImportantFromImapAndDb $migration, - LoggerInterface $logger, + public function __construct( + private MailboxMapper $mailboxMapper, + private MailAccountMapper $mailAccountMapper, + private MailManager $mailManager, + private MigrateImportantFromImapAndDb $migration, + private LoggerInterface $logger, ITimeFactory $timeFactory, - IMAPClientFactory $imapClientFactory, + private IMAPClientFactory $imapClientFactory, ) { parent::__construct($timeFactory); - $this->mailboxMapper = $mailboxMapper; - $this->mailAccountMapper = $mailAccountMapper; - $this->mailManager = $mailManager; - $this->migration = $migration; - $this->logger = $logger; - $this->imapClientFactory = $imapClientFactory; } /** diff --git a/lib/BackgroundJob/OutboxWorkerJob.php b/lib/BackgroundJob/OutboxWorkerJob.php index 104993057b..20173e6bc2 100644 --- a/lib/BackgroundJob/OutboxWorkerJob.php +++ b/lib/BackgroundJob/OutboxWorkerJob.php @@ -14,16 +14,15 @@ use OCP\BackgroundJob\TimedJob; class OutboxWorkerJob extends TimedJob { - private OutboxService $outboxService; - - public function __construct(ITimeFactory $time, - OutboxService $outboxService) { + public function __construct( + ITimeFactory $time, + private OutboxService $outboxService, + ) { parent::__construct($time); // Run once per five minutes $this->setInterval(5 * 60); $this->setTimeSensitivity(self::TIME_SENSITIVE); - $this->outboxService = $outboxService; } #[\Override] diff --git a/lib/BackgroundJob/PreviewEnhancementProcessingJob.php b/lib/BackgroundJob/PreviewEnhancementProcessingJob.php index d5a60d6b95..947c805667 100644 --- a/lib/BackgroundJob/PreviewEnhancementProcessingJob.php +++ b/lib/BackgroundJob/PreviewEnhancementProcessingJob.php @@ -20,24 +20,20 @@ class PreviewEnhancementProcessingJob extends TimedJob { private IUserManager $userManager; - private AccountService $accountService; - private LoggerInterface $logger; private IJobList $jobList; - private PreprocessingService $preprocessingService; - public function __construct(ITimeFactory $time, + public function __construct( + ITimeFactory $time, IUserManager $userManager, - AccountService $accountService, - PreprocessingService $preprocessingService, - LoggerInterface $logger, - IJobList $jobList) { + private AccountService $accountService, + private PreprocessingService $preprocessingService, + private LoggerInterface $logger, + IJobList $jobList, + ) { parent::__construct($time); $this->userManager = $userManager; - $this->accountService = $accountService; - $this->logger = $logger; $this->jobList = $jobList; - $this->preprocessingService = $preprocessingService; $this->setInterval(3600); $this->setTimeSensitivity(self::TIME_SENSITIVE); diff --git a/lib/BackgroundJob/QuotaJob.php b/lib/BackgroundJob/QuotaJob.php index a067f5057e..7b03ee91f9 100644 --- a/lib/BackgroundJob/QuotaJob.php +++ b/lib/BackgroundJob/QuotaJob.php @@ -21,26 +21,22 @@ class QuotaJob extends TimedJob { private IUserManager $userManager; - private AccountService $accountService; - private IMailManager $mailManager; - private LoggerInterface $logger; private IJobList $jobList; private IManager $notificationManager; - public function __construct(ITimeFactory $time, + public function __construct( + ITimeFactory $time, IUserManager $userManager, - AccountService $accountService, - IMailManager $mailManager, + private AccountService $accountService, + private IMailManager $mailManager, IManager $notificationManager, - LoggerInterface $logger, - IJobList $jobList) { + private LoggerInterface $logger, + IJobList $jobList, + ) { parent::__construct($time); $this->userManager = $userManager; - $this->accountService = $accountService; - $this->logger = $logger; $this->jobList = $jobList; - $this->mailManager = $mailManager; $this->setInterval(60 * 60 * 24 * 7); $this->setTimeSensitivity(self::TIME_INSENSITIVE); diff --git a/lib/BackgroundJob/SyncJob.php b/lib/BackgroundJob/SyncJob.php index a747ff2103..e3c1676271 100644 --- a/lib/BackgroundJob/SyncJob.php +++ b/lib/BackgroundJob/SyncJob.php @@ -30,30 +30,22 @@ class SyncJob extends TimedJob { private const DEFAULT_SYNC_INTERVAL = 3600; private IUserManager $userManager; - private AccountService $accountService; - private ImapToDbSynchronizer $syncService; - private MailboxSync $mailboxSync; - private LoggerInterface $logger; private IJobList $jobList; private readonly bool $forcedSyncInterval; public function __construct( ITimeFactory $time, IUserManager $userManager, - AccountService $accountService, - MailboxSync $mailboxSync, - ImapToDbSynchronizer $syncService, - LoggerInterface $logger, + private AccountService $accountService, + private MailboxSync $mailboxSync, + private ImapToDbSynchronizer $syncService, + private LoggerInterface $logger, IJobList $jobList, private readonly IConfig $config, ) { parent::__construct($time); $this->userManager = $userManager; - $this->accountService = $accountService; - $this->syncService = $syncService; - $this->mailboxSync = $mailboxSync; - $this->logger = $logger; $this->jobList = $jobList; $configuredSyncInterval = $config->getSystemValueInt('app.mail.background-sync-interval'); diff --git a/lib/BackgroundJob/TrainImportanceClassifierJob.php b/lib/BackgroundJob/TrainImportanceClassifierJob.php index 4e8242d60d..f246dd52f3 100644 --- a/lib/BackgroundJob/TrainImportanceClassifierJob.php +++ b/lib/BackgroundJob/TrainImportanceClassifierJob.php @@ -19,22 +19,17 @@ use Throwable; class TrainImportanceClassifierJob extends TimedJob { - private AccountService $accountService; - private ImportanceClassifier $classifier; private IJobList $jobList; - private LoggerInterface $logger; - public function __construct(ITimeFactory $time, - AccountService $accountService, - ImportanceClassifier $classifier, + public function __construct( + ITimeFactory $time, + private AccountService $accountService, + private ImportanceClassifier $classifier, IJobList $jobList, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { parent::__construct($time); - - $this->accountService = $accountService; - $this->classifier = $classifier; $this->jobList = $jobList; - $this->logger = $logger; $this->setInterval(24 * 60 * 60); $this->setTimeSensitivity(self::TIME_INSENSITIVE); diff --git a/lib/Command/AddMissingTags.php b/lib/Command/AddMissingTags.php index f6711496ee..45ee032284 100644 --- a/lib/Command/AddMissingTags.php +++ b/lib/Command/AddMissingTags.php @@ -22,18 +22,12 @@ final class AddMissingTags extends Command { public const ARGUMENT_ACCOUNT_ID = 'account-id'; - private LoggerInterface $logger; - private TagMapper $tagMapper; - private MailAccountMapper $mapper; - - public function __construct(MailAccountMapper $mapper, - TagMapper $tagMapper, - LoggerInterface $logger) { + public function __construct( + private MailAccountMapper $mapper, + private TagMapper $tagMapper, + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->mapper = $mapper; - $this->tagMapper = $tagMapper; - $this->logger = $logger; } /** diff --git a/lib/Command/CleanUp.php b/lib/Command/CleanUp.php index a03a0c0f7e..a10d688b75 100644 --- a/lib/Command/CleanUp.php +++ b/lib/Command/CleanUp.php @@ -17,15 +17,11 @@ use Symfony\Component\Console\Output\OutputInterface; final class CleanUp extends Command { - private CleanupService $cleanupService; - private LoggerInterface $logger; - - public function __construct(CleanupService $cleanupService, - LoggerInterface $logger) { + public function __construct( + private CleanupService $cleanupService, + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->cleanupService = $cleanupService; - $this->logger = $logger; } /** diff --git a/lib/Command/CreateAccount.php b/lib/Command/CreateAccount.php index 919fa21efe..aa515ca448 100644 --- a/lib/Command/CreateAccount.php +++ b/lib/Command/CreateAccount.php @@ -35,20 +35,16 @@ final class CreateAccount extends Command { public const ARGUMENT_SMTP_SSL_MODE = 'smtp-ssl-mode'; public const ARGUMENT_SMTP_USER = 'smtp-user'; public const ARGUMENT_SMTP_PASSWORD = 'smtp-password'; - - private AccountService $accountService; private ICrypto $crypto; private IUserManager $userManager; public function __construct( - AccountService $service, + private AccountService $accountService, ICrypto $crypto, IUserManager $userManager, private ClassificationSettingsService $classificationSettingsService, ) { parent::__construct(); - - $this->accountService = $service; $this->crypto = $crypto; $this->userManager = $userManager; } diff --git a/lib/Command/CreateTagMigrationJobEntry.php b/lib/Command/CreateTagMigrationJobEntry.php index aa75117996..8c9f8386d6 100644 --- a/lib/Command/CreateTagMigrationJobEntry.php +++ b/lib/Command/CreateTagMigrationJobEntry.php @@ -18,13 +18,13 @@ final class CreateTagMigrationJobEntry extends Command { private JobList $jobList; - private MailboxMapper $mailboxMapper; - public function __construct(JobList $jobList, - MailboxMapper $mailboxMapper) { + public function __construct( + JobList $jobList, + private MailboxMapper $mailboxMapper, + ) { parent::__construct(); $this->jobList = $jobList; - $this->mailboxMapper = $mailboxMapper; } protected function configure(): void { diff --git a/lib/Command/DeleteAccount.php b/lib/Command/DeleteAccount.php index 16b1099cee..3f1f8f3169 100644 --- a/lib/Command/DeleteAccount.php +++ b/lib/Command/DeleteAccount.php @@ -22,15 +22,11 @@ final class DeleteAccount extends Command { public const ARGUMENT_ACCOUNT_ID = 'account-id'; - private AccountService $accountService; - private LoggerInterface $logger; - - public function __construct(AccountService $service, - LoggerInterface $logger) { + public function __construct( + private AccountService $accountService, + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->accountService = $service; - $this->logger = $logger; } /** diff --git a/lib/Command/DiagnoseAccount.php b/lib/Command/DiagnoseAccount.php index ff6e7a354c..3e8570cac2 100644 --- a/lib/Command/DiagnoseAccount.php +++ b/lib/Command/DiagnoseAccount.php @@ -28,18 +28,12 @@ final class DiagnoseAccount extends Command { private const ARGUMENT_ACCOUNT_ID = 'account-id'; - private AccountService $accountService; - private IMAPClientFactory $clientFactory; - private LoggerInterface $logger; - - public function __construct(AccountService $service, - IMAPClientFactory $clientFactory, - LoggerInterface $logger) { + public function __construct( + private AccountService $accountService, + private IMAPClientFactory $clientFactory, + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->accountService = $service; - $this->clientFactory = $clientFactory; - $this->logger = $logger; } /** diff --git a/lib/Command/ExportAccount.php b/lib/Command/ExportAccount.php index ddeb865e3b..7d11cdbe77 100644 --- a/lib/Command/ExportAccount.php +++ b/lib/Command/ExportAccount.php @@ -18,14 +18,13 @@ final class ExportAccount extends Command { public const ARGUMENT_USER_ID = 'user-id'; public const ARGUMENT_OUTPUT_FORMAT = 'output'; - - private AccountService $accountService; private ICrypto $crypto; - public function __construct(AccountService $service, ICrypto $crypto) { + public function __construct( + private AccountService $accountService, + ICrypto $crypto, + ) { parent::__construct(); - - $this->accountService = $service; $this->crypto = $crypto; } diff --git a/lib/Command/ExportAccountThreads.php b/lib/Command/ExportAccountThreads.php index ba1c879bfd..a9f35b2f4e 100644 --- a/lib/Command/ExportAccountThreads.php +++ b/lib/Command/ExportAccountThreads.php @@ -25,22 +25,18 @@ final class ExportAccountThreads extends Command { private const ARGUMENT_ACCOUNT_ID = 'account-id'; private const OPTION_REDACT = 'redact'; - - private AccountService $accountService; private ISecureRandom $random; private IHasher $hasher; - private MessageMapper $messageMapper; - public function __construct(AccountService $service, + public function __construct( + private AccountService $accountService, ISecureRandom $random, IHasher $hasher, - MessageMapper $messageMapper) { + private MessageMapper $messageMapper, + ) { parent::__construct(); - - $this->accountService = $service; $this->random = $random; $this->hasher = $hasher; - $this->messageMapper = $messageMapper; } protected function configure(): void { diff --git a/lib/Command/PredictImportance.php b/lib/Command/PredictImportance.php index d53a45464f..34197b70a3 100644 --- a/lib/Command/PredictImportance.php +++ b/lib/Command/PredictImportance.php @@ -27,21 +27,15 @@ final class PredictImportance extends Command { public const ARGUMENT_ACCOUNT_ID = 'account-id'; public const ARGUMENT_SENDER = 'sender'; public const ARGUMENT_SUBJECT = 'subject'; - - private AccountService $accountService; - private ImportanceClassifier $classifier; private IConfig $config; - private LoggerInterface $logger; - public function __construct(AccountService $service, - ImportanceClassifier $classifier, + public function __construct( + private AccountService $accountService, + private ImportanceClassifier $classifier, IConfig $config, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->accountService = $service; - $this->classifier = $classifier; - $this->logger = $logger; $this->config = $config; } diff --git a/lib/Command/RunMetaEstimator.php b/lib/Command/RunMetaEstimator.php index 772412edc0..cb07953c29 100644 --- a/lib/Command/RunMetaEstimator.php +++ b/lib/Command/RunMetaEstimator.php @@ -31,23 +31,15 @@ final class RunMetaEstimator extends Command { public const ARGUMENT_ACCOUNT_ID = 'account-id'; public const ARGUMENT_SHUFFLE = 'shuffle'; - - private AccountService $accountService; - private LoggerInterface $logger; - private ImportanceClassifier $classifier; private IConfig $config; public function __construct( - AccountService $accountService, - LoggerInterface $logger, - ImportanceClassifier $classifier, + private AccountService $accountService, + private LoggerInterface $logger, + private ImportanceClassifier $classifier, IConfig $config, ) { parent::__construct(); - - $this->accountService = $accountService; - $this->logger = $logger; - $this->classifier = $classifier; $this->config = $config; } diff --git a/lib/Command/SyncAccount.php b/lib/Command/SyncAccount.php index 8d725ede7a..cb91217cb9 100644 --- a/lib/Command/SyncAccount.php +++ b/lib/Command/SyncAccount.php @@ -31,24 +31,14 @@ final class SyncAccount extends Command { public const ARGUMENT_ACCOUNT_ID = 'account-id'; public const OPTION_FORCE = 'force'; - private AccountService $accountService; - private MailboxSync $mailboxSync; - private ImapToDbSynchronizer $syncService; - private LoggerInterface $logger; - private IMAPClientFactory $clientFactory; - - public function __construct(AccountService $service, - MailboxSync $mailboxSync, - ImapToDbSynchronizer $messageSync, - LoggerInterface $logger, - IMAPClientFactory $clientFactory) { + public function __construct( + private AccountService $accountService, + private MailboxSync $mailboxSync, + private ImapToDbSynchronizer $syncService, + private LoggerInterface $logger, + private IMAPClientFactory $clientFactory, + ) { parent::__construct(); - - $this->accountService = $service; - $this->mailboxSync = $mailboxSync; - $this->syncService = $messageSync; - $this->logger = $logger; - $this->clientFactory = $clientFactory; } /** diff --git a/lib/Command/Thread.php b/lib/Command/Thread.php index 8531b613e6..2705d56930 100644 --- a/lib/Command/Thread.php +++ b/lib/Command/Thread.php @@ -26,14 +26,11 @@ final class Thread extends Command { public const ARGUMENT_INPUT_FILE = 'thread-file'; - private ThreadBuilder $builder; - private LoggerInterface $logger; - - public function __construct(ThreadBuilder $builder, - LoggerInterface $logger) { + public function __construct( + private ThreadBuilder $builder, + private LoggerInterface $logger, + ) { parent::__construct(); - $this->builder = $builder; - $this->logger = $logger; } /** diff --git a/lib/Command/TrainAccount.php b/lib/Command/TrainAccount.php index 3125fbad87..62a4e3f8c2 100644 --- a/lib/Command/TrainAccount.php +++ b/lib/Command/TrainAccount.php @@ -26,18 +26,12 @@ final class TrainAccount extends Command { public const ARGUMENT_DRY_RUN = 'dry-run'; public const ARGUMENT_FORCE = 'force'; - private AccountService $accountService; - private ImportanceClassifier $classifier; - private LoggerInterface $logger; - - public function __construct(AccountService $service, - ImportanceClassifier $classifier, - LoggerInterface $logger) { + public function __construct( + private AccountService $accountService, + private ImportanceClassifier $classifier, + private LoggerInterface $logger, + ) { parent::__construct(); - - $this->accountService = $service; - $this->classifier = $classifier; - $this->logger = $logger; } protected function configure(): void { diff --git a/lib/Command/UpdateAccount.php b/lib/Command/UpdateAccount.php index f21705d29c..b23605b010 100644 --- a/lib/Command/UpdateAccount.php +++ b/lib/Command/UpdateAccount.php @@ -32,7 +32,6 @@ final class UpdateAccount extends Command { public const ARGUMENT_SMTP_USER = 'smtp-user'; public const ARGUMENT_SMTP_PASSWORD = 'smtp-password'; - /** @var mapper */ private $mapper; diff --git a/lib/Controller/AccountApiController.php b/lib/Controller/AccountApiController.php index 1105d78329..ff1805bb3b 100644 --- a/lib/Controller/AccountApiController.php +++ b/lib/Controller/AccountApiController.php @@ -14,6 +14,7 @@ use OCA\Mail\ResponseDefinitions; use OCA\Mail\Service\AccountService; use OCA\Mail\Service\AliasesService; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\ApiRoute; use OCP\AppFramework\Http\Attribute\NoAdminRequired; @@ -32,6 +33,7 @@ public function __construct( private readonly ?string $userId, private readonly AccountService $accountService, private readonly AliasesService $aliasesService, + private readonly DelegationService $delegationService, ) { parent::__construct($appName, $request); } @@ -54,17 +56,26 @@ public function list(): DataResponse { } $accounts = $this->accountService->findByUserId($userId); - return new DataResponse(array_map(function (Account $account) use ($userId) { - $aliases = $this->aliasesService->findAll($account->getId(), $userId); - return [ - 'id' => $account->getId(), - 'email' => $account->getEmail(), - 'aliases' => array_map(static fn (Alias $alias) => [ - 'id' => $alias->getId(), - 'email' => $alias->getAlias(), - 'name' => $alias->getName(), - ], $aliases), - ]; - }, $accounts)); + $result = array_map(fn (Account $account) => $this->transformAccountList($account, false), $accounts); + + $delegatedAccounts = $this->accountService->findDelegatedAccounts($userId); + $delegatedList = array_map(fn (Account $account) => $this->transformAccountList($account, true), $delegatedAccounts); + array_push($result, ... $delegatedList); + + return new DataResponse($result); + } + + private function transformAccountList(Account $account, bool $isDelegated): array { + $aliases = $this->aliasesService->findAll($account->getId(), $account->getUserId()); + return [ + 'id' => $account->getId(), + 'email' => $account->getEmail(), + 'isDelegated' => $isDelegated, + 'aliases' => array_map(static fn (Alias $alias) => [ + 'id' => $alias->getId(), + 'email' => $alias->getAlias(), + 'name' => $alias->getName(), + ], $aliases), + ]; } } diff --git a/lib/Controller/AccountsController.php b/lib/Controller/AccountsController.php index 974b0d89df..81cb19067f 100644 --- a/lib/Controller/AccountsController.php +++ b/lib/Controller/AccountsController.php @@ -25,6 +25,7 @@ use OCA\Mail\Model\NewMessageData; use OCA\Mail\Service\AccountService; use OCA\Mail\Service\AliasesService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\SetupService; use OCA\Mail\Service\Sync\SyncService; use OCP\AppFramework\Controller; @@ -40,49 +41,32 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class AccountsController extends Controller { - private AccountService $accountService; - private string $currentUserId; - private LoggerInterface $logger; private IL10N $l10n; - private AliasesService $aliasesService; - private IMailTransmission $mailTransmission; - private SetupService $setup; - private IMailManager $mailManager; - private SyncService $syncService; private IConfig $config; private IRemoteHostValidator $hostValidator; - private MailboxSync $mailboxSync; public function __construct( string $appName, IRequest $request, - AccountService $accountService, - $userId, - LoggerInterface $logger, + private AccountService $accountService, + private string $userId, + private LoggerInterface $logger, IL10N $l10n, - AliasesService $aliasesService, - IMailTransmission $mailTransmission, - SetupService $setup, - IMailManager $mailManager, - SyncService $syncService, + private AliasesService $aliasesService, + private IMailTransmission $mailTransmission, + private SetupService $setup, + private IMailManager $mailManager, + private SyncService $syncService, IConfig $config, IRemoteHostValidator $hostValidator, - MailboxSync $mailboxSync, + private MailboxSync $mailboxSync, private ITimeFactory $timeFactory, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); - $this->accountService = $accountService; - $this->currentUserId = $userId; - $this->logger = $logger; $this->l10n = $l10n; - $this->aliasesService = $aliasesService; - $this->mailTransmission = $mailTransmission; - $this->setup = $setup; - $this->mailManager = $mailManager; - $this->syncService = $syncService; $this->config = $config; $this->hostValidator = $hostValidator; - $this->mailboxSync = $mailboxSync; } /** @@ -92,12 +76,21 @@ public function __construct( */ #[TrapError] public function index(): JSONResponse { - $mailAccounts = $this->accountService->findByUserId($this->currentUserId); + $mailAccounts = $this->accountService->findByUserId($this->userId); $json = []; foreach ($mailAccounts as $mailAccount) { $conf = $mailAccount->jsonSerialize(); - $conf['aliases'] = $this->aliasesService->findAll($conf['accountId'], $this->currentUserId); + $conf['aliases'] = $this->aliasesService->findAll($conf['accountId'], $this->userId); + $conf['isDelegated'] = false; + $json[] = $conf; + } + + $delegatedAccounts = $this->accountService->findDelegatedAccounts($this->userId); + foreach ($delegatedAccounts as $delegatedAccount) { + $conf = $delegatedAccount->jsonSerialize(); + $conf['isDelegated'] = true; + $conf['aliases'] = $this->aliasesService->findAll($conf['accountId'], $delegatedAccount->getUserId()); $json[] = $conf; } return new JSONResponse($json); @@ -113,7 +106,9 @@ public function index(): JSONResponse { */ #[TrapError] public function show(int $id): JSONResponse { - return new JSONResponse($this->accountService->find($this->currentUserId, $id)); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + + return new JSONResponse($this->accountService->find($effectiveUserId, $id)); } /** @@ -137,8 +132,9 @@ public function update(int $id, ?string $smtpPassword = null, string $authMethod = 'password'): JSONResponse { try { + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); // Make sure the account actually exists - $this->accountService->find($this->currentUserId, $id); + $this->accountService->find($this->userId, $id); } catch (ClientException $e) { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } @@ -164,9 +160,11 @@ public function update(int $id, } try { - return MailJsonResponse::success( - $this->setup->createNewAccount($accountName, $emailAddress, $imapHost, $imapPort, $imapSslMode, $imapUser, $imapPassword, $smtpHost, $smtpPort, $smtpSslMode, $smtpUser, $smtpPassword, $this->currentUserId, $authMethod, $id) + $result = MailJsonResponse::success( + $this->setup->createNewAccount($accountName, $emailAddress, $imapHost, $imapPort, $imapSslMode, $imapUser, $imapPassword, $smtpHost, $smtpPort, $smtpSslMode, $smtpUser, $smtpPassword, $this->userId, $authMethod, $id) ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated account <$id> on behalf of $effectiveUserId"); + return $result; } catch (CouldNotConnectException $e) { $data = [ 'error' => $e->getReason(), @@ -221,28 +219,29 @@ public function patchAccount(int $id, ?bool $classificationEnabled = null, ?bool $imipCreate = null, ): JSONResponse { - $account = $this->accountService->find($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $account = $this->accountService->find($effectiveUserId, $id); $dbAccount = $account->getMailAccount(); if ($draftsMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $draftsMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $draftsMailboxId); $dbAccount->setDraftsMailboxId($draftsMailboxId); } if ($sentMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $sentMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $sentMailboxId); $dbAccount->setSentMailboxId($sentMailboxId); } if ($trashMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $trashMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $trashMailboxId); $dbAccount->setTrashMailboxId($trashMailboxId); } if ($archiveMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $archiveMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $archiveMailboxId); $dbAccount->setarchiveMailboxId($archiveMailboxId); } if ($snoozeMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $snoozeMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $snoozeMailboxId); $dbAccount->setSnoozeMailboxId($snoozeMailboxId); } if ($editorMode !== null) { @@ -262,7 +261,7 @@ public function patchAccount(int $id, $dbAccount->setTrashRetentionDays($trashRetentionDays <= 0 ? null : $trashRetentionDays); } if ($junkMailboxId !== null) { - $this->mailManager->getMailbox($this->currentUserId, $junkMailboxId); + $this->mailManager->getMailbox($effectiveUserId, $junkMailboxId); $dbAccount->setJunkMailboxId($junkMailboxId); } if ($searchBody !== null) { @@ -274,9 +273,11 @@ public function patchAccount(int $id, if ($imipCreate !== null) { $dbAccount->setImipCreate($imipCreate); } - return new JSONResponse( + $result = new JSONResponse( new Account($this->accountService->save($dbAccount)) ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId patched account <$id> on behalf of $effectiveUserId"); + return $result; } /** @@ -292,7 +293,9 @@ public function patchAccount(int $id, */ #[TrapError] public function updateSignature(int $id, ?string $signature = null): JSONResponse { - $this->accountService->updateSignature($id, $this->currentUserId, $signature); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $this->accountService->updateSignature($id, $effectiveUserId, $signature); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated signature for account <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -307,7 +310,9 @@ public function updateSignature(int $id, ?string $signature = null): JSONRespons */ #[TrapError] public function destroy(int $id): JSONResponse { - $this->accountService->delete($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $this->accountService->delete($effectiveUserId, $id); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted account <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -360,7 +365,7 @@ public function create(string $accountName, ); } try { - $account = $this->setup->createNewAccount($accountName, $emailAddress, $imapHost, $imapPort, $imapSslMode, $imapUser, $imapPassword, $smtpHost, $smtpPort, $smtpSslMode, $smtpUser, $smtpPassword, $this->currentUserId, $authMethod, null, $classificationEnabled); + $account = $this->setup->createNewAccount($accountName, $emailAddress, $imapHost, $imapPort, $imapSslMode, $imapUser, $imapPassword, $smtpHost, $smtpPort, $smtpSslMode, $smtpUser, $smtpPassword, $this->userId, $authMethod, null, $classificationEnabled); // Set initial heartbeat $this->config->setUserValue( $account->getUserId(), @@ -420,11 +425,12 @@ public function draft(int $id, $this->logger->info("Updating draft <$draftId> in account <$id>"); } - $account = $this->accountService->find($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $account = $this->accountService->find($effectiveUserId, $id); $previousDraft = null; if ($draftId !== null) { try { - $previousDraft = $this->mailManager->getMessage($this->currentUserId, $draftId); + $previousDraft = $this->mailManager->getMessage($effectiveUserId, $draftId); } catch (ClientException $e) { $this->logger->info("Draft {$draftId} could not be loaded: {$e->getMessage()}"); } @@ -442,6 +448,7 @@ public function draft(int $id, null, [] ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId saved draft in account <$id> on behalf of $effectiveUserId"); return new JSONResponse([ 'id' => $this->mailManager->getMessageIdForUid($draftsMailbox, $newUID) ]); @@ -460,7 +467,8 @@ public function draft(int $id, * @throws ClientException */ public function getQuota(int $id): JSONResponse { - $account = $this->accountService->find($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $account = $this->accountService->find($effectiveUserId, $id); $quota = $this->mailManager->getQuota($account); if ($quota === null) { @@ -479,9 +487,11 @@ public function getQuota(int $id): JSONResponse { * @throws ClientException */ public function updateSmimeCertificate(int $id, ?int $smimeCertificateId = null) { - $account = $this->accountService->find($this->currentUserId, $id)->getMailAccount(); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $account = $this->accountService->find($effectiveUserId, $id)->getMailAccount(); $account->setSmimeCertificateId($smimeCertificateId); $this->accountService->update($account); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated S/MIME certificate for account <$id> on behalf of $effectiveUserId"); return MailJsonResponse::success(); } @@ -494,8 +504,9 @@ public function updateSmimeCertificate(int $id, ?int $smimeCertificateId = null) * @throws ClientException */ public function testAccountConnection(int $id) { + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); return new JSONResponse([ - 'data' => $this->accountService->testAccountConnection($this->currentUserId, $id), + 'data' => $this->accountService->testAccountConnection($effectiveUserId, $id), ]); } diff --git a/lib/Controller/ActionStepController.php b/lib/Controller/ActionStepController.php index 3ae6b4851d..78fb8106d9 100644 --- a/lib/Controller/ActionStepController.php +++ b/lib/Controller/ActionStepController.php @@ -21,16 +21,13 @@ use OCP\IRequest; class ActionStepController extends Controller { - private ?string $uid; - public function __construct( IRequest $request, - ?string $userId, + private ?string $userId, private QuickActionsService $quickActionsService, private AccountService $accountService, ) { parent::__construct(Application::APP_ID, $request); - $this->uid = $userId; } /** @@ -41,11 +38,11 @@ public function __construct( */ #[TrapError] public function create(string $name, int $order, int $actionId, ?int $tagId = null, ?int $mailboxId = null): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $action = $this->quickActionsService->find($actionId, $this->uid); + $action = $this->quickActionsService->find($actionId, $this->userId); if ($action === null) { return JsonResponse::fail('Action not found', Http::STATUS_BAD_REQUEST); } @@ -54,7 +51,7 @@ public function create(string $name, int $order, int $actionId, ?int $tagId = nu } catch (DoesNotExistException $e) { return JsonResponse::fail('Account not found', Http::STATUS_BAD_REQUEST); } - if ($account->getUserId() !== $this->uid) { + if ($account->getUserId() !== $this->userId) { return JsonResponse::fail('Account not found', Http::STATUS_BAD_REQUEST); } $actionStep = $this->quickActionsService->createActionStep($name, $order, $actionId, $tagId, $mailboxId); @@ -72,11 +69,11 @@ public function create(string $name, int $order, int $actionId, ?int $tagId = nu #[TrapError] public function update(int $id, string $name, int $order, ?int $tagId, ?int $mailboxId): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $actionStep = $this->quickActionsService->findActionStep($id, $this->uid); + $actionStep = $this->quickActionsService->findActionStep($id, $this->userId); $actionStep = $this->quickActionsService->updateActionStep($actionStep, $name, $order, $tagId, $mailboxId); @@ -89,11 +86,11 @@ public function update(int $id, string $name, int $order, ?int $tagId, ?int $mai * @return JsonResponse */ public function destroy(int $id): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->quickActionsService->deleteActionStep($id, $this->uid); + $this->quickActionsService->deleteActionStep($id, $this->userId); return JsonResponse::success(); } catch (DoesNotExistException $e) { return JsonResponse::fail('Action step not found', Http::STATUS_NOT_FOUND); diff --git a/lib/Controller/AliasesController.php b/lib/Controller/AliasesController.php index ccdf08d47a..4841de9e66 100644 --- a/lib/Controller/AliasesController.php +++ b/lib/Controller/AliasesController.php @@ -9,9 +9,11 @@ namespace OCA\Mail\Controller; +use OCA\Mail\Exception\ClientException; use OCA\Mail\Exception\NotImplemented; use OCA\Mail\Http\TrapError; use OCA\Mail\Service\AliasesService; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; @@ -21,16 +23,14 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class AliasesController extends Controller { - private AliasesService $aliasService; - private string $currentUserId; - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - AliasesService $aliasesService, - string $userId) { + private AliasesService $aliasService, + private string $userId, + private DelegationService $delegationService, + ) { parent::__construct($appName, $request); - $this->aliasService = $aliasesService; - $this->currentUserId = $userId; } /** @@ -42,7 +42,8 @@ public function __construct(string $appName, */ #[TrapError] public function index(int $accountId): JSONResponse { - return new JSONResponse($this->aliasService->findAll($accountId, $this->currentUserId)); + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + return new JSONResponse($this->aliasService->findAll($accountId, $effectiveUserId)); } /** @@ -64,15 +65,16 @@ public function update(int $id, string $alias, string $aliasName, ?int $smimeCertificateId = null): JSONResponse { - return new JSONResponse( - $this->aliasService->update( - $this->currentUserId, - $id, - $alias, - $aliasName, - $smimeCertificateId, - ) + $effectiveUserId = $this->delegationService->resolveAliasUserId($id, $this->userId); + $alias = $this->aliasService->update( + $effectiveUserId, + $id, + $alias, + $aliasName, + $smimeCertificateId, ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated alias: $id on behalf of $effectiveUserId"); + return new JSONResponse($alias); } /** @@ -83,7 +85,10 @@ public function update(int $id, */ #[TrapError] public function destroy(int $id): JSONResponse { - return new JSONResponse($this->aliasService->delete($this->currentUserId, $id)); + $effectiveUserId = $this->delegationService->resolveAliasUserId($id, $this->userId); + $alias = $this->aliasService->delete($effectiveUserId, $id); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted alias: $id on behalf of $effectiveUserId"); + return new JSONResponse($alias); } /** @@ -95,11 +100,16 @@ public function destroy(int $id): JSONResponse { * * @return JSONResponse * @throws DoesNotExistException + * @throws ClientException */ #[TrapError] public function create(int $accountId, string $alias, string $aliasName): JSONResponse { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + $alias = $this->aliasService->create($effectiveUserId, $accountId, $alias, $aliasName); + $id = $alias->getId(); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId created alias: $id on behalf of $effectiveUserId"); return new JSONResponse( - $this->aliasService->create($this->currentUserId, $accountId, $alias, $aliasName), + $alias, Http::STATUS_CREATED ); } @@ -112,9 +122,13 @@ public function create(int $accountId, string $alias, string $aliasName): JSONRe * * @return JSONResponse * @throws DoesNotExistException + * @throws ClientException */ #[TrapError] public function updateSignature(int $id, ?string $signature = null): JSONResponse { - return new JSONResponse($this->aliasService->updateSignature($this->currentUserId, $id, $signature)); + $effectiveUserId = $this->delegationService->resolveAliasUserId($id, $this->userId); + $alias = $this->aliasService->updateSignature($effectiveUserId, $id, $signature); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated alias: $id 's signature on behalf of $effectiveUserId"); + return new JSONResponse($alias); } } diff --git a/lib/Controller/AutoCompleteController.php b/lib/Controller/AutoCompleteController.php index 1f367b1856..abe30aecea 100644 --- a/lib/Controller/AutoCompleteController.php +++ b/lib/Controller/AutoCompleteController.php @@ -19,17 +19,13 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class AutoCompleteController extends Controller { - private AutoCompleteService $service; - private ?string $userId; - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - AutoCompleteService $service, - ?string $userId) { + private AutoCompleteService $service, + private ?string $userId, + ) { parent::__construct($appName, $request); - - $this->service = $service; - $this->userId = $userId; } /** diff --git a/lib/Controller/AutoConfigController.php b/lib/Controller/AutoConfigController.php index dbcaee5f65..e9ea26fb82 100644 --- a/lib/Controller/AutoConfigController.php +++ b/lib/Controller/AutoConfigController.php @@ -26,20 +26,16 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class AutoConfigController extends Controller { - private IspDb $ispDb; - private MxRecord $mxRecord; - private ConnectivityTester $connectivityTester; private IRemoteHostValidator $hostValidator; - public function __construct(IRequest $request, - IspDb $ispDb, - MxRecord $mxRecord, - ConnectivityTester $connectivityTester, - IRemoteHostValidator $hostValidator) { + public function __construct( + IRequest $request, + private IspDb $ispDb, + private MxRecord $mxRecord, + private ConnectivityTester $connectivityTester, + IRemoteHostValidator $hostValidator, + ) { parent::__construct(Application::APP_ID, $request); - $this->ispDb = $ispDb; - $this->mxRecord = $mxRecord; - $this->connectivityTester = $connectivityTester; $this->hostValidator = $hostValidator; } diff --git a/lib/Controller/AvatarsController.php b/lib/Controller/AvatarsController.php index 6acba4ce0b..ca12671254 100644 --- a/lib/Controller/AvatarsController.php +++ b/lib/Controller/AvatarsController.php @@ -21,17 +21,13 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class AvatarsController extends Controller { - private IAvatarService $avatarService; - private string $uid; - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - IAvatarService $avatarService, - string $userId) { + private IAvatarService $avatarService, + private string $userId, + ) { parent::__construct($appName, $request); - - $this->avatarService = $avatarService; - $this->uid = $userId; } /** @@ -51,7 +47,7 @@ public function url(string $email): JSONResponse { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } - $avatar = $this->avatarService->getAvatar($email, $this->uid); + $avatar = $this->avatarService->getAvatar($email, $this->userId); if (is_null($avatar)) { // No avatar found $response = new JSONResponse([], Http::STATUS_NO_CONTENT); @@ -84,7 +80,7 @@ public function image(string $email): Response { return new JSONResponse([], Http::STATUS_BAD_REQUEST); } - $imageData = $this->avatarService->getAvatarImage($email, $this->uid); + $imageData = $this->avatarService->getAvatarImage($email, $this->userId); if ($imageData === null) { return $this->noAvatarFoundResponse(); @@ -108,8 +104,7 @@ public function image(string $email): Response { private function noAvatarFoundResponse(): Response { $response = new Response(); $response->setStatus(Http::STATUS_NOT_FOUND); - // Clear cache - $response->cacheFor(0); + $response->cacheFor(60 * 60, false, true); return $response; } } diff --git a/lib/Controller/ContactIntegrationController.php b/lib/Controller/ContactIntegrationController.php index 67088fe202..cb12aacd39 100644 --- a/lib/Controller/ContactIntegrationController.php +++ b/lib/Controller/ContactIntegrationController.php @@ -21,21 +21,17 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class ContactIntegrationController extends Controller { - private ContactIntegrationService $service; private ICache $cache; - private string $uid; - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - ContactIntegrationService $service, + private ContactIntegrationService $service, ICacheFactory $cacheFactory, - string $userId) { + private string $userId, + ) { parent::__construct($appName, $request); - - $this->service = $service; $this->cache = $cacheFactory->createLocal('mail.contacts'); - $this->uid = $userId; } /** @@ -46,7 +42,7 @@ public function __construct(string $appName, */ #[TrapError] public function match(string $mail): JSONResponse { - return (new JSONResponse($this->service->findMatches($this->uid, $mail)))->cacheFor(60 * 60, false, true); + return (new JSONResponse($this->service->findMatches($this->userId, $mail)))->cacheFor(60 * 60, false, true); } /** @@ -85,15 +81,15 @@ public function newContact(string $contactName, string $mail): JSONResponse { */ #[TrapError] public function autoComplete(string $term): JSONResponse { - $cached = $this->cache->get("{$this->uid}:$term"); + $cached = $this->cache->get("{$this->userId}:$term"); if ($cached !== null) { $decoded = json_decode($cached, true); if ($decoded !== null) { return new JSONResponse($decoded); } } - $res = $this->service->autoComplete($this->uid, $term); - $this->cache->set("{$this->uid}:$term", json_encode($res), 24 * 3600); + $res = $this->service->autoComplete($this->userId, $term); + $this->cache->set("{$this->userId}:$term", json_encode($res), 24 * 3600); return new JSONResponse($res); } } diff --git a/lib/Controller/DeepLinkController.php b/lib/Controller/DeepLinkController.php index c28385773d..c076202f85 100644 --- a/lib/Controller/DeepLinkController.php +++ b/lib/Controller/DeepLinkController.php @@ -14,6 +14,7 @@ use OCA\Mail\Db\MessageMapper; use OCA\Mail\Service\AccountService; use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\Attribute\NoCSRFRequired; use OCP\AppFramework\Http\RedirectResponse; use OCP\IRequest; use OCP\IURLGenerator; @@ -40,6 +41,7 @@ public function __construct( * @param string $messageId * @return RedirectResponse */ + #[NoCSRFRequired] public function open(string $messageId): RedirectResponse { $user = $this->userSession->getUser(); if ($user === null) { diff --git a/lib/Controller/DelegationController.php b/lib/Controller/DelegationController.php new file mode 100644 index 0000000000..9dbe1b56d5 --- /dev/null +++ b/lib/Controller/DelegationController.php @@ -0,0 +1,114 @@ +accountService->findById($accountId); + } catch (DoesNotExistException) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + if ($account->getUserId() !== $this->userId) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + + return new JSONResponse( + $this->delegationService->findDelegatedToUsersForAccount($accountId) + ); + } + + #[NoAdminRequired] + #[TrapError] + public function delegate(int $accountId, string $userId): JSONResponse { + if ($this->userId === null) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + + if ($userId === $this->userId) { + return new JSONResponse(['message' => 'Cannot delegate to yourself'], Http::STATUS_BAD_REQUEST); + } + + try { + $account = $this->accountService->findById($accountId); + } catch (DoesNotExistException) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + if ($account->getUserId() !== $this->userId) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + + if ($account->getMailAccount()->getProvisioningId() !== null) { + return new JSONResponse(['message' => 'Cannot delegate provisioned accounts'], Http::STATUS_FORBIDDEN); + } + + if (!$this->userManager->userExists($userId)) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + try { + $delegation = $this->delegationService->delegate($account, $userId, $this->userId); + } catch (DelegationExistsException) { + return new JSONResponse(['message' => 'Delegation already exists'], Http::STATUS_CONFLICT); + } + + return new JSONResponse($delegation, Http::STATUS_CREATED); + } + + #[NoAdminRequired] + #[TrapError] + public function unDelegate(int $accountId, string $userId): JSONResponse { + if ($this->userId === null) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + + try { + $account = $this->accountService->findById($accountId); + } catch (DoesNotExistException) { + return new JSONResponse([], Http::STATUS_NOT_FOUND); + } + + if ($account->getUserId() !== $this->userId) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + + $this->delegationService->unDelegate($account, $userId, $this->userId); + return new JSONResponse([], Http::STATUS_OK); + } +} diff --git a/lib/Controller/DraftsController.php b/lib/Controller/DraftsController.php index f1a98cee76..89385b37e0 100644 --- a/lib/Controller/DraftsController.php +++ b/lib/Controller/DraftsController.php @@ -14,6 +14,7 @@ use OCA\Mail\Http\JsonResponse; use OCA\Mail\Http\TrapError; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\DraftsService; use OCA\Mail\Service\SmimeService; use OCP\AppFramework\Controller; @@ -25,26 +26,20 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class DraftsController extends Controller { - private DraftsService $service; - private string $userId; - private AccountService $accountService; private ITimeFactory $timeFactory; - private SmimeService $smimeService; - - public function __construct(string $appName, - $userId, + public function __construct( + string $appName, + private string $userId, IRequest $request, - DraftsService $service, - AccountService $accountService, + private DraftsService $service, + private AccountService $accountService, ITimeFactory $timeFactory, - SmimeService $smimeService) { + private SmimeService $smimeService, + private DelegationService $delegationService, + ) { parent::__construct($appName, $request); - $this->userId = $userId; - $this->service = $service; - $this->accountService = $accountService; $this->timeFactory = $timeFactory; - $this->smimeService = $smimeService; } /** @@ -93,7 +88,8 @@ public function create( ?int $draftId = null, bool $requestMdn = false, bool $isPgpMime = false) : JsonResponse { - $account = $this->accountService->find($this->userId, $accountId); + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + $account = $this->accountService->find($effectiveUserId, $accountId); if ($draftId !== null) { $this->service->handleDraft($account, $draftId); } @@ -115,12 +111,13 @@ public function create( $message->setPgpMime($isPgpMime); if (!empty($smimeCertificateId)) { - $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $this->userId); + $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $effectiveUserId); $message->setSmimeCertificateId($smimeCertificate->getId()); } $this->service->saveMessage($account, $message, $to, $cc, $bcc, $attachments); - + $id = $message->getId(); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId created draft: $id on behalf of $effectiveUserId"); return JsonResponse::success($message, Http::STATUS_CREATED); } @@ -165,8 +162,9 @@ public function update(int $id, ?int $sendAt = null, bool $requestMdn = false, bool $isPgpMime = false): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); - $account = $this->accountService->find($this->userId, $accountId); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); + $account = $this->accountService->find($effectiveUserId, $accountId); $message->setType(LocalMessage::TYPE_DRAFT); $message->setAccountId($accountId); @@ -186,7 +184,7 @@ public function update(int $id, $message->setPgpMime($isPgpMime); if (!empty($smimeCertificateId)) { - $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $this->userId); + $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $effectiveUserId); $message->setSmimeCertificateId($smimeCertificate->getId()); } @@ -202,10 +200,12 @@ public function update(int $id, */ #[TrapError] public function destroy(int $id): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); - $this->accountService->find($this->userId, $message->getAccountId()); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); + $this->accountService->find($effectiveUserId, $message->getAccountId()); - $this->service->deleteMessage($this->userId, $message); + $this->service->deleteMessage($effectiveUserId, $message); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted draft: $id on behalf of $effectiveUserId"); return JsonResponse::success('Message deleted', Http::STATUS_ACCEPTED); } @@ -217,10 +217,12 @@ public function destroy(int $id): JsonResponse { */ #[TrapError] public function move(int $id): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); - $account = $this->accountService->find($this->userId, $message->getAccountId()); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); + $account = $this->accountService->find($effectiveUserId, $message->getAccountId()); $this->service->sendMessage($message, $account); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId moved draft: $id to the IMAP server on behalf of $effectiveUserId"); return JsonResponse::success( 'Message moved to IMAP', Http::STATUS_ACCEPTED ); diff --git a/lib/Controller/FilterController.php b/lib/Controller/FilterController.php index f8a9da64d3..1429fd1a72 100644 --- a/lib/Controller/FilterController.php +++ b/lib/Controller/FilterController.php @@ -11,6 +11,7 @@ use OCA\Mail\AppInfo\Application; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\FilterService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; @@ -20,31 +21,28 @@ use OCP\IRequest; class FilterController extends Controller { - private string $currentUserId; - public function __construct( IRequest $request, - string $userId, + private string $userId, private FilterService $mailFilterService, private AccountService $accountService, + private DelegationService $delegationService, ) { parent::__construct(Application::APP_ID, $request); - $this->currentUserId = $userId; } - /** * @psalm-return JSONResponse<200|404, array, array> */ #[Route(Route::TYPE_FRONTPAGE, verb: 'GET', url: '/api/filter/{accountId}', requirements: ['accountId' => '[\d]+'])] #[NoAdminRequired] public function getFilters(int $accountId): JSONResponse { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); $account = $this->accountService->findById($accountId); - if ($account->getUserId() !== $this->currentUserId) { + if ($account->getUserId() !== $effectiveUserId) { return new JSONResponse([], Http::STATUS_NOT_FOUND); } - $result = $this->mailFilterService->parse($account->getMailAccount()); return new JSONResponse($result->getFilters()); @@ -56,13 +54,15 @@ public function getFilters(int $accountId): JSONResponse { #[Route(Route::TYPE_FRONTPAGE, verb: 'PUT', url: '/api/filter/{accountId}', requirements: ['accountId' => '[\d]+'])] #[NoAdminRequired] public function updateFilters(int $accountId, array $filters): JSONResponse { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); $account = $this->accountService->findById($accountId); - if ($account->getUserId() !== $this->currentUserId) { + if ($account->getUserId() !== $effectiveUserId) { return new JSONResponse([], Http::STATUS_NOT_FOUND); } $this->mailFilterService->update($account->getMailAccount(), $filters); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated account: $accountId 's filters on behalf of $effectiveUserId"); return new JSONResponse([]); } diff --git a/lib/Controller/FollowUpController.php b/lib/Controller/FollowUpController.php index 031280e784..6f61f8f61c 100644 --- a/lib/Controller/FollowUpController.php +++ b/lib/Controller/FollowUpController.php @@ -14,6 +14,7 @@ use OCA\Mail\Db\ThreadMapper; use OCA\Mail\Http\JsonResponse; use OCA\Mail\Http\TrapError; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; @@ -31,6 +32,7 @@ public function __construct( private ThreadMapper $threadMapper, private MessageMapper $messageMapper, private MailboxMapper $mailboxMapper, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); } @@ -54,7 +56,8 @@ public function checkMessageIds(array $messageIds): JsonResponse { $mailboxId = $message->getMailboxId(); if (!isset($mailboxes[$mailboxId])) { try { - $mailboxes[$mailboxId] = $this->mailboxMapper->findByUid($mailboxId, $userId); + $effectiveUserId = $this->delegationService->resolveMailboxUserId($mailboxId, $userId); + $mailboxes[$mailboxId] = $this->mailboxMapper->findByUid($mailboxId, $effectiveUserId); } catch (DoesNotExistException $e) { continue; } diff --git a/lib/Controller/GoogleIntegrationController.php b/lib/Controller/GoogleIntegrationController.php index fca3cd1394..05b52a6ee6 100644 --- a/lib/Controller/GoogleIntegrationController.php +++ b/lib/Controller/GoogleIntegrationController.php @@ -11,11 +11,13 @@ use OCA\Mail\AppInfo\Application; use OCA\Mail\Exception\ClientException; +use OCA\Mail\Exception\InvalidOauthStateException; use OCA\Mail\Exception\ServiceException; use OCA\Mail\Http\JsonResponse; use OCA\Mail\IMAP\MailboxSync; use OCA\Mail\Integration\GoogleIntegration; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\OauthStateService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\OpenAPI; @@ -24,31 +26,18 @@ use OCP\IRequest; use Psr\Log\LoggerInterface; - - -use function filter_var; - #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class GoogleIntegrationController extends Controller { - private ?string $userId; - private GoogleIntegration $googleIntegration; - private AccountService $accountService; - private LoggerInterface $logger; - private MailboxSync $mailboxSync; - - - public function __construct(IRequest $request, - ?string $userId, - GoogleIntegration $googleIntegration, - AccountService $accountService, - LoggerInterface $logger, - MailboxSync $mailboxSync) { + public function __construct( + IRequest $request, + private ?string $userId, + private GoogleIntegration $googleIntegration, + private AccountService $accountService, + private LoggerInterface $logger, + private MailboxSync $mailboxSync, + private OauthStateService $oauthStateService, + ) { parent::__construct(Application::APP_ID, $request); - $this->userId = $userId; - $this->googleIntegration = $googleIntegration; - $this->accountService = $accountService; - $this->logger = $logger; - $this->mailboxSync = $mailboxSync; } /** @@ -107,26 +96,11 @@ public function oauthRedirect(?string $code, ?string $state, ?string $scope, ?st 'guest', ); } - if (!filter_var($state, FILTER_VALIDATE_INT)) { - $this->logger->warning('Can not link Google account due to invalid state/account id {state}', [ - 'state' => $state, - ]); - // TODO: redirect to main nextcloud page - return new StandaloneTemplateResponse( - Application::APP_ID, - 'oauth_done', - [], - 'guest', - ); - } - try { - $account = $this->accountService->find( - $this->userId, - (int)$state, - ); - } catch (ClientException $e) { - $this->logger->warning('Attempted Google authentication redirect for account: ' . $e->getMessage(), [ + $accountId = $this->oauthStateService->validateAndConsume($state, $this->userId); + $account = $this->accountService->find($this->userId, $accountId); + } catch (InvalidOauthStateException|ClientException $e) { + $this->logger->warning('Cannot link Google account: invalid OAuth state', [ 'exception' => $e, ]); // TODO: redirect to main nextcloud page diff --git a/lib/Controller/InternalAddressController.php b/lib/Controller/InternalAddressController.php index 6f0172b3ce..e831664a95 100644 --- a/lib/Controller/InternalAddressController.php +++ b/lib/Controller/InternalAddressController.php @@ -19,17 +19,12 @@ use OCP\IRequest; class InternalAddressController extends Controller { - private ?string $uid; - public function __construct( IRequest $request, - ?string $userId, + private ?string $userId, private InternalAddressService $internalAddressService, ) { parent::__construct(Application::APP_ID, $request); - - $this->internalAddressService = $internalAddressService; - $this->uid = $userId; } /** @@ -41,12 +36,12 @@ public function __construct( */ #[TrapError] public function setAddress(string $address, string $type): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } $internalAddress = $this->internalAddressService->add( - $this->uid, + $this->userId, $address, $type ); @@ -66,12 +61,12 @@ public function setAddress(string $address, string $type): JsonResponse { */ #[TrapError] public function removeAddress(string $address, string $type): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } $this->internalAddressService->add( - $this->uid, + $this->userId, $address, $type, false @@ -87,11 +82,11 @@ public function removeAddress(string $address, string $type): JsonResponse { */ #[TrapError] public function list(): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } $list = $this->internalAddressService->getInternalAddresses( - $this->uid + $this->userId ); return JsonResponse::success($list); diff --git a/lib/Controller/ListController.php b/lib/Controller/ListController.php index f91263b827..5d8f78ba31 100644 --- a/lib/Controller/ListController.php +++ b/lib/Controller/ListController.php @@ -15,6 +15,7 @@ use OCA\Mail\Http\JsonResponse; use OCA\Mail\IMAP\IMAPClientFactory; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; @@ -25,28 +26,21 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class ListController extends Controller { - private IMailManager $mailManager; - private AccountService $accountService; - private IMAPClientFactory $clientFactory; private IClientService $httpClientService; - private LoggerInterface $logger; - private ?string $currentUserId; - public function __construct(IRequest $request, - IMailManager $mailManager, - AccountService $accountService, - IMAPClientFactory $clientFactory, + public function __construct( + IRequest $request, + private IMailManager $mailManager, + private AccountService $accountService, + private IMAPClientFactory $clientFactory, IClientService $httpClientService, - LoggerInterface $logger, - ?string $userId) { + private LoggerInterface $logger, + private ?string $userId, + private DelegationService $delegationService, + ) { parent::__construct(Application::APP_ID, $request); - $this->mailManager = $mailManager; - $this->accountService = $accountService; - $this->clientFactory = $clientFactory; $this->request = $request; $this->httpClientService = $httpClientService; - $this->logger = $logger; - $this->currentUserId = $userId; } /** @@ -54,14 +48,15 @@ public function __construct(IRequest $request, * @UserRateThrottle(limit=10, period=3600) */ public function unsubscribe(int $id): JsonResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return JsonResponse::fail([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return JsonResponse::fail(null, Http::STATUS_NOT_FOUND); } @@ -94,6 +89,7 @@ public function unsubscribe(int $id): JsonResponse { } finally { $client->logout(); } + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId unsubscribed from mailing list: $id on behalf of $effectiveUserId"); return JsonResponse::success(); } diff --git a/lib/Controller/LocalAttachmentsController.php b/lib/Controller/LocalAttachmentsController.php index f2ec33607d..8c8b1708ca 100644 --- a/lib/Controller/LocalAttachmentsController.php +++ b/lib/Controller/LocalAttachmentsController.php @@ -13,6 +13,7 @@ use OCA\Mail\Exception\ClientException; use OCA\Mail\Http\TrapError; use OCA\Mail\Service\Attachment\UploadedFile; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\OpenAPI; @@ -21,20 +22,21 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class LocalAttachmentsController extends Controller { - private IAttachmentService $attachmentService; - private string $userId; - /** * @param string $appName * @param IRequest $request * @param IAttachmentService $attachmentService + * @param DelegationService $delegationService * @param string $UserId */ - public function __construct(string $appName, IRequest $request, - IAttachmentService $attachmentService, $userId) { + public function __construct( + string $appName, + IRequest $request, + private IAttachmentService $attachmentService, + private DelegationService $delegationService, + private string $userId, + ) { parent::__construct($appName, $request); - $this->attachmentService = $attachmentService; - $this->userId = $userId; } /** @@ -43,15 +45,21 @@ public function __construct(string $appName, IRequest $request, * @return JSONResponse */ #[TrapError] - public function create(): JSONResponse { + public function create(?int $accountId = null): JSONResponse { $file = $this->request->getUploadedFile('attachment'); if (is_null($file)) { throw new ClientException('no file attached'); } + // Store the attachment under the account owner so it can be linked and + // sent when composing on behalf of a delegated account. + $userId = $accountId !== null + ? $this->delegationService->resolveAccountUserId($accountId, $this->userId) + : $this->userId; + $uploadedFile = new UploadedFile($file); - $attachment = $this->attachmentService->addFile($this->userId, $uploadedFile); + $attachment = $this->attachmentService->addFile($userId, $uploadedFile); return new JSONResponse($attachment, Http::STATUS_CREATED); } diff --git a/lib/Controller/MailboxesApiController.php b/lib/Controller/MailboxesApiController.php index 106a8892e2..bf5d65de62 100644 --- a/lib/Controller/MailboxesApiController.php +++ b/lib/Controller/MailboxesApiController.php @@ -11,8 +11,10 @@ use OCA\Mail\Contracts\IMailManager; use OCA\Mail\Contracts\IMailSearch; +use OCA\Mail\Exception\ClientException; use OCA\Mail\ResponseDefinitions; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\ApiRoute; @@ -33,6 +35,7 @@ public function __construct( private IMailManager $mailManager, private readonly AccountService $accountService, private IMailSearch $mailSearch, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); } @@ -56,8 +59,9 @@ public function list(int $accountId): DataResponse { } try { - $account = $this->accountService->find($userId, $accountId); - } catch (DoesNotExistException $e) { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $userId); + $account = $this->accountService->find($effectiveUserId, $accountId); + } catch (ClientException $e) { return new DataResponse([], Http::STATUS_NOT_FOUND); } @@ -65,8 +69,6 @@ public function list(int $accountId): DataResponse { return new DataResponse($mailboxes, Http::STATUS_OK); } - - /** * List the newest messages in a mailbox of the user which is currently logged-in * @@ -97,8 +99,9 @@ public function listMessages(int $mailboxId, return new DataResponse([], Http::STATUS_NOT_FOUND); } try { - $mailbox = $this->mailManager->getMailbox($userId, $mailboxId); - $account = $this->accountService->find($userId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMailboxUserId($mailboxId, $userId); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $mailboxId); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new DataResponse([], Http::STATUS_FORBIDDEN); } diff --git a/lib/Controller/MailboxesController.php b/lib/Controller/MailboxesController.php index d391f2dee6..b7dad5a191 100644 --- a/lib/Controller/MailboxesController.php +++ b/lib/Controller/MailboxesController.php @@ -21,8 +21,10 @@ use OCA\Mail\Exception\ServiceException; use OCA\Mail\Http\TrapError; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\Sync\SyncService; use OCP\AppFramework\Controller; +use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\Attribute\OpenAPI; @@ -34,27 +36,18 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class MailboxesController extends Controller { - private AccountService $accountService; - private IMailManager $mailManager; - private SyncService $syncService; - private ?string $currentUserId; - public function __construct( string $appName, IRequest $request, - AccountService $accountService, - ?string $userId, - IMailManager $mailManager, - SyncService $syncService, + private AccountService $accountService, + private ?string $userId, + private IMailManager $mailManager, + private SyncService $syncService, private readonly IConfig $config, private readonly ITimeFactory $timeFactory, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); - - $this->accountService = $accountService; - $this->currentUserId = $userId; - $this->mailManager = $mailManager; - $this->syncService = $syncService; } /** @@ -70,11 +63,16 @@ public function __construct( */ #[TrapError] public function index(int $accountId, bool $forceSync = false): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $account = $this->accountService->find($this->currentUserId, $accountId); + try { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $account = $this->accountService->find($effectiveUserId, $accountId); $mailboxes = $this->mailManager->getMailboxes($account, $forceSync); return new JSONResponse([ @@ -98,12 +96,17 @@ public function patch(int $id, ?string $name = null, ?bool $subscribed = null, ?bool $syncInBackground = null): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); if ($name !== null) { $mailbox = $this->mailManager->renameMailbox( @@ -111,6 +114,7 @@ public function patch(int $id, $mailbox, $name ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId changed mailbox: $id's name to $name on behalf of $effectiveUserId"); } if ($subscribed !== null) { $mailbox = $this->mailManager->updateSubscription( @@ -118,14 +122,18 @@ public function patch(int $id, $mailbox, $subscribed ); + $subscribedVerb = $subscribed ? 'subscribed' : 'unsubscribed'; + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId $subscribedVerb to mailbox: $id on behalf of $effectiveUserId"); + } if ($syncInBackground !== null) { $mailbox = $this->mailManager->enableMailboxBackgroundSync( $mailbox, $syncInBackground ); + $syncVerb = $syncInBackground ? 'enabled' : 'disabled'; + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId $syncVerb background sync for mailbox: $id on behalf of $effectiveUserId"); } - return new JSONResponse($mailbox); } @@ -144,16 +152,21 @@ public function patch(int $id, */ #[TrapError] public function sync(int $id, array $ids = [], ?int $lastMessageTimestamp = null, bool $init = false, string $sortOrder = 'newest', ?string $query = null): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $order = $sortOrder === 'newest' ? IMailSearch::ORDER_NEWEST_FIRST: IMailSearch::ORDER_OLDEST_FIRST; $this->config->setUserValue( - $this->currentUserId, + $this->userId, Application::APP_ID, 'ui-heartbeat', (string)$this->timeFactory->getTime(), @@ -190,12 +203,17 @@ public function sync(int $id, array $ids = [], ?int $lastMessageTimestamp = null */ #[TrapError] public function clearCache(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $this->syncService->clearCache($account, $mailbox); return new JSONResponse([]); @@ -212,15 +230,22 @@ public function clearCache(int $id): JSONResponse { */ #[TrapError] public function markAllAsRead(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $this->mailManager->markFolderAsRead($account, $mailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId marked all messages as read in mailbox: $id on behalf of $effectiveUserId"); + return new JSONResponse([]); } @@ -236,11 +261,16 @@ public function markAllAsRead(int $id): JSONResponse { */ #[TrapError] public function stats(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); return new JSONResponse($mailbox->getStats()); } @@ -276,13 +306,21 @@ public function update() { */ #[TrapError] public function create(int $accountId, string $name): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $account = $this->accountService->find($this->currentUserId, $accountId); + try { + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $account = $this->accountService->find($effectiveUserId, $accountId); + $mailbox = $this->mailManager->createMailbox($account, $name); + $id = $mailbox->getId(); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId created mailbox: $id on behalf of $effectiveUserId"); - return new JSONResponse($this->mailManager->createMailbox($account, $name)); + return new JSONResponse($mailbox); } /** @@ -296,14 +334,21 @@ public function create(int $accountId, string $name): JSONResponse { */ #[TrapError] public function destroy(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $this->mailManager->deleteMailbox($account, $mailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted mailbox: $id on behalf of $effectiveUserId"); + return new JSONResponse(); } @@ -319,14 +364,20 @@ public function destroy(int $id): JSONResponse { */ #[TrapError] public function clearMailbox(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $this->mailManager->clearMailbox($account, $mailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId cleared mailbox: $id on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -337,14 +388,21 @@ public function clearMailbox(int $id): JSONResponse { #[NoAdminRequired] #[UserRateLimit(limit: 10, period: 600)] public function repair(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $id); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + try { + $effectiveUserId = $this->delegationService->resolveMailboxUserId($id, $this->userId); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $id); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); $this->syncService->repairSync($account, $mailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId repaired mailbox: $id on behalf of $effectiveUserId"); + return new JsonResponse(); } } diff --git a/lib/Controller/MessageApiController.php b/lib/Controller/MessageApiController.php index e0f96c0aec..b628c8a9dc 100644 --- a/lib/Controller/MessageApiController.php +++ b/lib/Controller/MessageApiController.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Controller; use OCA\Mail\Contracts\IDkimService; @@ -21,6 +22,7 @@ use OCA\Mail\Service\AliasesService; use OCA\Mail\Service\Attachment\AttachmentService; use OCA\Mail\Service\Attachment\UploadedFile; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\ItineraryService; use OCA\Mail\Service\MailManager; use OCA\Mail\Service\OutboxService; @@ -48,11 +50,9 @@ */ class MessageApiController extends OCSController { - private ?string $userId; - public function __construct( string $appName, - ?string $userId, + private ?string $userId, IRequest $request, private AccountService $accountService, private AliasesService $aliasesService, @@ -66,9 +66,9 @@ public function __construct( private IDkimService $dkimService, private ItineraryService $itineraryService, private TrustedSenderService $trustedSenderService, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); - $this->userId = $userId; } /** @@ -120,7 +120,8 @@ public function send( } try { - $mailAccount = $this->accountService->find($this->userId, $accountId); + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + $mailAccount = $this->accountService->find($effectiveUserId, $accountId); } catch (ClientException $e) { $this->logger->error("Mail account #$accountId not found", ['exception' => $e]); return new DataResponse('Account not found.', Http::STATUS_NOT_FOUND); @@ -128,7 +129,7 @@ public function send( if ($fromEmail !== $mailAccount->getEmail()) { try { - $alias = $this->aliasesService->findByAliasAndUserId($fromEmail, $this->userId); + $alias = $this->aliasesService->findByAliasAndUserId($fromEmail, $effectiveUserId); } catch (DoesNotExistException $e) { $this->logger->error("Alias $fromEmail for mail account $accountId not found", ['exception' => $e]); // Cannot send from this email as it is not configured as an alias @@ -140,7 +141,6 @@ public function send( return new DataResponse('Recipients cannot be empty.', Http::STATUS_BAD_REQUEST); } - try { $messageAttachments = $this->handleAttachments(); } catch (UploadException $e) { @@ -203,8 +203,16 @@ public function send( $this->logger->error('SMTP error: could not send message', ['exception' => $e]); return new DataResponse('Fatal SMTP error: could not send message, and no resending is possible. Please check the mail server logs.', Http::STATUS_INTERNAL_SERVER_ERROR); } - - return match ($localMessage->getStatus()) { + $status = $localMessage->getStatus(); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, match ($status) { + LocalMessage::STATUS_PROCESSED => "$this->userId sent a message on behalf of $effectiveUserId", + LocalMessage::STATUS_NO_SENT_MAILBOX => "$this->userId attempted sending a message on behalf of $effectiveUserId but no sent mailbox is configured", + LocalMessage::STATUS_SMPT_SEND_FAIL => "$this->userId attempted sending a message on behalf of $effectiveUserId but SMTP sending failed", + LocalMessage::STATUS_IMAP_SENT_MAILBOX_FAIL => "$this->userId sent a message on behalf of $effectiveUserId but copying to sent mailbox failed", + default => "$this->userId attempted sending a message on behalf of $effectiveUserId but an unknown error occurred", + }); + + return match ($status) { LocalMessage::STATUS_PROCESSED => new DataResponse('', Http::STATUS_OK), LocalMessage::STATUS_NO_SENT_MAILBOX => new DataResponse('Configuration error: Cannot send message without sent mailbox.', Http::STATUS_FORBIDDEN), LocalMessage::STATUS_SMPT_SEND_FAIL => new DataResponse('SMTP error: could not send message. Message sending will be retried. Please check the logs.', Http::STATUS_INTERNAL_SERVER_ERROR), @@ -234,9 +242,10 @@ public function get(int $id): DataResponse { } try { - $message = $this->mailManager->getMessage($this->userId, $id); - $mailbox = $this->mailManager->getMailbox($this->userId, $message->getMailboxId()); - $account = $this->accountService->find($this->userId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (ClientException|DoesNotExistException $e) { $this->logger->error('Message, Account or Mailbox not found', ['exception' => $e->getMessage()]); return new DataResponse('Account not found.', Http::STATUS_NOT_FOUND); @@ -326,9 +335,10 @@ public function getRaw(int $id): DataResponse { } try { - $message = $this->mailManager->getMessage($this->userId, $id); - $mailbox = $this->mailManager->getMailbox($this->userId, $message->getMailboxId()); - $account = $this->accountService->find($this->userId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (ClientException|DoesNotExistException $e) { $this->logger->error('Message, Account or Mailbox not found', ['exception' => $e->getMessage()]); return new DataResponse('Message, Account or Mailbox not found', Http::STATUS_NOT_FOUND); @@ -391,9 +401,10 @@ public function getAttachment(int $id, string $attachmentId): DataResponse { } try { - $message = $this->mailManager->getMessage($this->userId, $id); - $mailbox = $this->mailManager->getMailbox($this->userId, $message->getMailboxId()); - $account = $this->accountService->find($this->userId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException|ClientException $e) { return new DataResponse('Message, Account or Mailbox not found', Http::STATUS_NOT_FOUND); } @@ -441,8 +452,7 @@ public function getAttachment(int $id, string $attachmentId): DataResponse { */ private function handleAttachments(): array { $fileAttachments = $this->request->getUploadedFile('attachments'); - $hasAttachments = isset($fileAttachments['name']); - if (!$hasAttachments) { + if (!isset($fileAttachments['name'])) { return []; } diff --git a/lib/Controller/MessagesController.php b/lib/Controller/MessagesController.php index 979d8c38d9..022964f703 100755 --- a/lib/Controller/MessagesController.php +++ b/lib/Controller/MessagesController.php @@ -29,6 +29,7 @@ use OCA\Mail\Model\SmimeData; use OCA\Mail\Service\AccountService; use OCA\Mail\Service\AiIntegrations\AiIntegrationsService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\ItineraryService; use OCA\Mail\Service\SmimeService; use OCA\Mail\Service\SnoozeService; @@ -43,6 +44,7 @@ use OCP\AppFramework\Http\ZipResponse; use OCP\Files\Folder; use OCP\Files\GenericFileException; +use OCP\Files\IFilenameValidator; use OCP\Files\IMimeTypeDetector; use OCP\Files\NotPermittedException; use OCP\ICache; @@ -56,70 +58,42 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class MessagesController extends Controller { - private AccountService $accountService; - private IMailManager $mailManager; - private IMailSearch $mailSearch; - private ItineraryService $itineraryService; - private ?string $currentUserId; - private LoggerInterface $logger; - private ?Folder $userFolder; private IMimeTypeDetector $mimeTypeDetector; private IL10N $l10n; private IURLGenerator $urlGenerator; private ContentSecurityPolicyNonceManager $nonceManager; - private ITrustedSenderService $trustedSenderService; - private IMailTransmission $mailTransmission; - private SmimeService $smimeService; - private IMAPClientFactory $clientFactory; - private IDkimService $dkimService; - private IUserPreferences $preferences; - private SnoozeService $snoozeService; - private AiIntegrationsService $aiIntegrationService; public function __construct( string $appName, IRequest $request, - AccountService $accountService, - IMailManager $mailManager, - IMailSearch $mailSearch, - ItineraryService $itineraryService, - ?string $userId, - $userFolder, - LoggerInterface $logger, + private AccountService $accountService, + private IMailManager $mailManager, + private IMailSearch $mailSearch, + private ItineraryService $itineraryService, + private ?string $userId, + private ?Folder $userFolder, + private IFilenameValidator $filenameValidator, + private LoggerInterface $logger, IL10N $l10n, IMimeTypeDetector $mimeTypeDetector, IURLGenerator $urlGenerator, ContentSecurityPolicyNonceManager $nonceManager, - ITrustedSenderService $trustedSenderService, - IMailTransmission $mailTransmission, - SmimeService $smimeService, - IMAPClientFactory $clientFactory, - IDkimService $dkimService, - IUserPreferences $preferences, - SnoozeService $snoozeService, - AiIntegrationsService $aiIntegrationService, + private ITrustedSenderService $trustedSenderService, + private IMailTransmission $mailTransmission, + private SmimeService $smimeService, + private IMAPClientFactory $clientFactory, + private IDkimService $dkimService, + private IUserPreferences $preferences, + private SnoozeService $snoozeService, + private AiIntegrationsService $aiIntegrationService, private ICacheFactory $cacheFactory, + private DelegationService $delegationService, ) { parent::__construct($appName, $request); - $this->accountService = $accountService; - $this->mailManager = $mailManager; - $this->mailSearch = $mailSearch; - $this->itineraryService = $itineraryService; - $this->currentUserId = $userId; - $this->userFolder = $userFolder; - $this->logger = $logger; $this->l10n = $l10n; $this->mimeTypeDetector = $mimeTypeDetector; $this->urlGenerator = $urlGenerator; $this->nonceManager = $nonceManager; - $this->trustedSenderService = $trustedSenderService; - $this->mailTransmission = $mailTransmission; - $this->smimeService = $smimeService; - $this->clientFactory = $clientFactory; - $this->dkimService = $dkimService; - $this->preferences = $preferences; - $this->snoozeService = $snoozeService; - $this->aiIntegrationService = $aiIntegrationService; } /** @@ -144,20 +118,21 @@ public function index(int $mailboxId, ?int $limit = null, ?string $view = null, ?string $v = null): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } $limit = min(100, max(1, $limit)); try { - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $mailboxId); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMailboxUserId($mailboxId, $this->userId); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $mailboxId); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } $this->logger->debug("loading messages of mailbox <$mailboxId>"); - $sort = $this->preferences->getPreference($this->currentUserId, 'sort-order', 'newest') === 'newest' ? IMailSearch::ORDER_NEWEST_FIRST : IMailSearch::ORDER_OLDEST_FIRST; + $sort = $this->preferences->getPreference($this->userId, 'sort-order', 'newest') === 'newest' ? IMailSearch::ORDER_NEWEST_FIRST : IMailSearch::ORDER_OLDEST_FIRST; $view = $view === 'singleton' ? IMailSearch::VIEW_SINGLETON : IMailSearch::VIEW_THREADED; @@ -168,7 +143,7 @@ public function index(int $mailboxId, $filter === '' ? null : $filter, $cursor, $limit, - $this->currentUserId, + $effectiveUserId, $view ); @@ -189,13 +164,14 @@ public function index(int $mailboxId, */ #[TrapError] public function show(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -223,13 +199,14 @@ public function show(int $id): JSONResponse { */ #[TrapError] public function getBody(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -298,13 +275,14 @@ public function getBody(int $id): JSONResponse { */ #[TrapError] public function getItineraries(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -320,13 +298,14 @@ public function getItineraries(int $id): JSONResponse { * @return JSONResponse */ public function getDkim(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -337,7 +316,7 @@ public function getDkim(int $id): JSONResponse { } private function isSenderTrusted(Message $message): bool { - if ($this->currentUserId === null) { + if ($this->userId === null) { return false; } $from = $message->getFrom(); @@ -350,7 +329,7 @@ private function isSenderTrusted(Message $message): bool { return false; } return $this->trustedSenderService->isTrusted( - $this->currentUserId, + $this->userId, $email ); } @@ -366,13 +345,14 @@ private function isSenderTrusted(Message $message): bool { */ #[TrapError] public function getThread(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -397,15 +377,16 @@ public function getThread(int $id): JSONResponse { */ #[TrapError] public function move(int $id, int $destFolderId): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $srcMailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $dstMailbox = $this->mailManager->getMailbox($this->currentUserId, $destFolderId); - $srcAccount = $this->accountService->find($this->currentUserId, $srcMailbox->getAccountId()); - $dstAccount = $this->accountService->find($this->currentUserId, $dstMailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $srcMailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $dstMailbox = $this->mailManager->getMailbox($effectiveUserId, $destFolderId); + $srcAccount = $this->accountService->find($effectiveUserId, $srcMailbox->getAccountId()); + $dstAccount = $this->accountService->find($effectiveUserId, $dstMailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -417,6 +398,9 @@ public function move(int $id, int $destFolderId): JSONResponse { $dstAccount, $dstMailbox->getName() ); + + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId moved message <$id> to mailbox <$destFolderId> on behalf of $effectiveUserId"); + return new JSONResponse(); } @@ -433,20 +417,22 @@ public function move(int $id, int $destFolderId): JSONResponse { */ #[TrapError] public function snooze(int $id, int $unixTimestamp, int $destMailboxId): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $srcMailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $dstMailbox = $this->mailManager->getMailbox($this->currentUserId, $destMailboxId); - $srcAccount = $this->accountService->find($this->currentUserId, $srcMailbox->getAccountId()); - $dstAccount = $this->accountService->find($this->currentUserId, $dstMailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $srcMailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $dstMailbox = $this->mailManager->getMailbox($effectiveUserId, $destMailboxId); + $srcAccount = $this->accountService->find($effectiveUserId, $srcMailbox->getAccountId()); + $dstAccount = $this->accountService->find($effectiveUserId, $dstMailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } $this->snoozeService->snoozeMessage($message, $unixTimestamp, $srcAccount, $srcMailbox, $dstAccount, $dstMailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId snoozed message <$id> to <$unixTimestamp> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -462,16 +448,18 @@ public function snooze(int $id, int $unixTimestamp, int $destMailboxId): JSONRes */ #[TrapError] public function unSnooze(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } - $this->snoozeService->unSnoozeMessage($message, $this->currentUserId); + $this->snoozeService->unSnoozeMessage($message, $effectiveUserId); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId unsnoozed message <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -488,13 +476,14 @@ public function unSnooze(int $id): JSONResponse { */ #[TrapError] public function mdn(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -522,13 +511,14 @@ public function mdn(int $id): JSONResponse { */ #[TrapError] public function getSource(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -566,13 +556,14 @@ public function getSource(int $id): JSONResponse { */ #[TrapError] public function export(int $id): Response { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -596,6 +587,76 @@ public function export(int $id): Response { ); } + /** + * Save a whole message as an .eml file in the local storage + * + * @NoAdminRequired + * + * @param int $id + * @param string $targetPath + * + * @return Response + * + * @throws ClientException + * @throws GenericFileException + * @throws NotPermittedException + * @throws LockedException + * @throws ServiceException + */ + #[TrapError] + public function saveFile(int $id, string $targetPath): Response { + if ($this->userId === null) { + return new JSONResponse([], Http::STATUS_UNAUTHORIZED); + } + if ($this->userFolder === null) { + return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); + } + if (!$this->userFolder->nodeExists($targetPath)) { + return new JSONResponse([], Http::STATUS_BAD_REQUEST); + } + if (!($this->userFolder->get($targetPath) instanceof Folder)) { + return new JSONResponse([], Http::STATUS_BAD_REQUEST); + } + try { + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); + } catch (DoesNotExistException $e) { + return new JSONResponse([], Http::STATUS_FORBIDDEN); + } + + $client = $this->clientFactory->getClient($account); + try { + $source = $this->mailManager->getSource( + $client, + $account, + $mailbox->getName(), + $message->getUid() + ); + } finally { + $client->logout(); + } + + if ($source === null) { + return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $fileName = $this->filenameValidator->sanitizeFilename($message->getSubject()); + $fileExtension = 'eml'; + $fullPath = "$targetPath/$fileName.$fileExtension"; + $counter = 2; + while ($this->userFolder->nodeExists($fullPath)) { + $fullPath = "$targetPath/$fileName ($counter).$fileExtension"; + $counter++; + } + + $newFile = $this->userFolder->newFile($fullPath); + $newFile->putContent($source); + + return new JSONResponse(); + } + /** * @NoAdminRequired * @NoCSRFRequired @@ -609,7 +670,7 @@ public function export(int $id): Response { */ #[TrapError] public function getHtmlBody(int $id, bool $plain = false): Response { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new TemplateResponse( $this->appName, 'error', @@ -620,9 +681,10 @@ public function getHtmlBody(int $id, bool $plain = false): Response { } try { try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException) { return new TemplateResponse( $this->appName, @@ -652,7 +714,6 @@ public function getHtmlBody(int $id, bool $plain = false): Response { } } - $htmlResponse = $plain ? HtmlResponse::plain($html) : HtmlResponse::withResizer( @@ -700,13 +761,14 @@ public function getHtmlBody(int $id, bool $plain = false): Response { #[TrapError] public function downloadAttachment(int $id, string $attachmentId): Response { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -750,13 +812,14 @@ public function downloadAttachment(int $id, */ #[TrapError] public function downloadAttachments(int $id): Response { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -796,16 +859,23 @@ public function downloadAttachments(int $id): Response { public function saveAttachment(int $id, string $attachmentId, string $targetPath) { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } if ($this->userFolder === null) { return new JSONResponse([], Http::STATUS_INTERNAL_SERVER_ERROR); } + if (!$this->userFolder->nodeExists($targetPath)) { + return new JSONResponse([], Http::STATUS_BAD_REQUEST); + } + if (!($this->userFolder->get($targetPath) instanceof Folder)) { + return new JSONResponse([], Http::STATUS_BAD_REQUEST); + } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -860,21 +930,26 @@ public function saveAttachment(int $id, */ #[TrapError] public function setFlags(int $id, array $flags): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } + $flagChanges = []; foreach ($flags as $flag => $value) { $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); $this->mailManager->flagMessage($account, $mailbox->getName(), $message->getUid(), $flag, $value); + $flagChanges[] = "$flag=" . ($value ? 'true' : 'false'); } + $flagsSummary = implode(', ', $flagChanges); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated flags on message <$id> with [$flagsSummary] on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -891,24 +966,26 @@ public function setFlags(int $id, array $flags): JSONResponse { */ #[TrapError] public function setTag(int $id, string $imapLabel): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } try { - $tag = $this->mailManager->getTagByImapLabel($imapLabel, $this->currentUserId); + $tag = $this->mailManager->getTagByImapLabel($imapLabel, $this->userId); } catch (ClientException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } $this->mailManager->tagMessage($account, $mailbox->getName(), $message, $tag, true); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId added tag <$imapLabel> on message <$id> on behalf of $effectiveUserId"); return new JSONResponse($tag); } @@ -925,24 +1002,26 @@ public function setTag(int $id, string $imapLabel): JSONResponse { */ #[TrapError] public function removeTag(int $id, string $imapLabel): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } try { - $tag = $this->mailManager->getTagByImapLabel($imapLabel, $this->currentUserId); + $tag = $this->mailManager->getTagByImapLabel($imapLabel, $this->userId); } catch (ClientException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } $this->mailManager->tagMessage($account, $mailbox->getName(), $message, $tag, false); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId removed tag <$imapLabel> on message <$id> on behalf of $effectiveUserId"); return new JSONResponse($tag); } @@ -956,13 +1035,14 @@ public function removeTag(int $id, string $imapLabel): JSONResponse { */ #[TrapError] public function destroy(int $id): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -974,6 +1054,7 @@ public function destroy(int $id): JSONResponse { $mailbox->getName(), $message->getUid() ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted message <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -986,18 +1067,19 @@ public function destroy(int $id): JSONResponse { */ #[TrapError] public function smartReply(int $messageId):JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_UNAUTHORIZED); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $messageId); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($messageId, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $messageId); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } try { - $replies = array_values($this->aiIntegrationService->getSmartReply($account, $mailbox, $message, $this->currentUserId) ?? []); + $replies = array_values($this->aiIntegrationService->getSmartReply($account, $mailbox, $message, $effectiveUserId) ?? []); } catch (ServiceException $e) { $this->logger->error('Smart reply failed: ' . $e->getMessage(), [ 'exception' => $e, @@ -1005,7 +1087,6 @@ public function smartReply(int $messageId):JSONResponse { return new JSONResponse([], Http::STATUS_NO_CONTENT); } return new JSONResponse($replies); - } /** @@ -1017,13 +1098,14 @@ public function smartReply(int $messageId):JSONResponse { */ #[TrapError] public function needsTranslation(int $messageId): JSONResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } try { - $message = $this->mailManager->getMessage($this->currentUserId, $messageId); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($messageId, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $messageId); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -1039,7 +1121,7 @@ public function needsTranslation(int $messageId): JSONResponse { $account, $mailbox, $message, - $this->currentUserId + $effectiveUserId ); $response = new JSONResponse(['requiresTranslation' => $requiresTranslation === true]); $response->cacheFor(60 * 60 * 24, false, true); diff --git a/lib/Controller/MicrosoftIntegrationController.php b/lib/Controller/MicrosoftIntegrationController.php index 526b1bb523..b8d1e8048a 100644 --- a/lib/Controller/MicrosoftIntegrationController.php +++ b/lib/Controller/MicrosoftIntegrationController.php @@ -11,9 +11,11 @@ use OCA\Mail\AppInfo\Application; use OCA\Mail\Exception\ClientException; +use OCA\Mail\Exception\InvalidOauthStateException; use OCA\Mail\Http\JsonResponse; use OCA\Mail\Integration\MicrosoftIntegration; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\OauthStateService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\Attribute\OpenAPI; @@ -21,25 +23,18 @@ use OCP\AppFramework\Http\StandaloneTemplateResponse; use OCP\IRequest; use Psr\Log\LoggerInterface; -use function filter_var; #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class MicrosoftIntegrationController extends Controller { - private ?string $userId; - private AccountService $accountService; - private MicrosoftIntegration $microsoftIntegration; - private LoggerInterface $logger; - - public function __construct(IRequest $request, - ?string $userId, - AccountService $accountService, - MicrosoftIntegration $microsoftIntegration, - LoggerInterface $logger) { + public function __construct( + IRequest $request, + private ?string $userId, + private AccountService $accountService, + private MicrosoftIntegration $microsoftIntegration, + private LoggerInterface $logger, + private OauthStateService $oauthStateService, + ) { parent::__construct(Application::APP_ID, $request); - $this->userId = $userId; - $this->accountService = $accountService; - $this->microsoftIntegration = $microsoftIntegration; - $this->logger = $logger; } /** @@ -105,26 +100,11 @@ public function oauthRedirect(?string $code, ?string $state, ?string $session_st 'guest', ); } - if (!filter_var($state, FILTER_VALIDATE_INT)) { - $this->logger->warning('Can not link Microsoft account due to invalid state/account id {state}', [ - 'state' => $state, - ]); - // TODO: redirect to main nextcloud page - return new StandaloneTemplateResponse( - Application::APP_ID, - 'oauth_done', - [], - 'guest', - ); - } - try { - $account = $this->accountService->find( - $this->userId, - (int)$state, - ); - } catch (ClientException $e) { - $this->logger->warning('Attempted Microsoft authentication redirect for account: ' . $e->getMessage(), [ + $accountId = $this->oauthStateService->validateAndConsume($state, $this->userId); + $account = $this->accountService->find($this->userId, $accountId); + } catch (InvalidOauthStateException|ClientException $e) { + $this->logger->warning('Cannot link Microsoft account: invalid OAuth state', [ 'exception' => $e, ]); // TODO: redirect to main nextcloud page diff --git a/lib/Controller/OauthController.php b/lib/Controller/OauthController.php new file mode 100644 index 0000000000..ed83c553fd --- /dev/null +++ b/lib/Controller/OauthController.php @@ -0,0 +1,49 @@ +userId === null) { + return JsonResponse::fail(null, Http::STATUS_UNAUTHORIZED); + } + + try { + $this->accountService->find($this->userId, $accountId); + } catch (ClientException) { + return JsonResponse::fail(null, Http::STATUS_NOT_FOUND); + } + + $state = $this->oauthStateService->createState($accountId, $this->userId); + return JsonResponse::success(['state' => $state]); + } +} diff --git a/lib/Controller/OutboxController.php b/lib/Controller/OutboxController.php index f73c2551f6..c5a98780b2 100644 --- a/lib/Controller/OutboxController.php +++ b/lib/Controller/OutboxController.php @@ -14,6 +14,7 @@ use OCA\Mail\Http\JsonResponse; use OCA\Mail\Http\TrapError; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\DraftsService; use OCA\Mail\Service\OutboxService; use OCA\Mail\Service\SmimeService; @@ -25,22 +26,16 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class OutboxController extends Controller { - private OutboxService $service; - private string $userId; - private AccountService $accountService; - private SmimeService $smimeService; - - public function __construct(string $appName, - $userId, + public function __construct( + string $appName, + private string $userId, IRequest $request, - OutboxService $service, - AccountService $accountService, - SmimeService $smimeService) { + private OutboxService $service, + private AccountService $accountService, + private SmimeService $smimeService, + private DelegationService $delegationService, + ) { parent::__construct($appName, $request); - $this->userId = $userId; - $this->service = $service; - $this->accountService = $accountService; - $this->smimeService = $smimeService; } /** @@ -61,7 +56,8 @@ public function index(): JsonResponse { */ #[TrapError] public function show(int $id): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); return JsonResponse::success($message); } @@ -108,7 +104,8 @@ public function create( bool $requestMdn = false, bool $isPgpMime = false, ): JsonResponse { - $account = $this->accountService->find($this->userId, $accountId); + $effectiveUserId = $this->delegationService->resolveAccountUserId($accountId, $this->userId); + $account = $this->accountService->find($effectiveUserId, $accountId); if ($draftId !== null) { $this->service->handleDraft($account, $draftId); @@ -131,11 +128,12 @@ public function create( $message->setRequestMdn($requestMdn); if (!empty($smimeCertificateId)) { - $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $this->userId); + $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $effectiveUserId); $message->setSmimeCertificateId($smimeCertificate->getId()); } $this->service->saveMessage($account, $message, $to, $cc, $bcc, $attachments); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId created an outbox message for account <$accountId> on behalf of $effectiveUserId"); return JsonResponse::success($message, Http::STATUS_CREATED); } @@ -147,11 +145,13 @@ public function create( */ #[TrapError] public function createFromDraft(DraftsService $draftsService, int $id, int $sendAt): JsonResponse { - $draftMessage = $draftsService->getMessage($id, $this->userId); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $draftMessage = $draftsService->getMessage($id, $effectiveUserId); // Locate the account to check authorization - $this->accountService->find($this->userId, $draftMessage->getAccountId()); + $this->accountService->find($effectiveUserId, $draftMessage->getAccountId()); $outboxMessage = $this->service->convertDraft($draftMessage, $sendAt); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId created an outbox message from draft <$id> on behalf of $effectiveUserId"); return JsonResponse::success( $outboxMessage, @@ -168,7 +168,6 @@ public function createFromDraft(DraftsService $draftsService, int $id, int $send * @param string $body * @param string $editorBody * @param bool $isHtml - * @param bool $failed * @param array $to i. e. [['label' => 'Linus', 'email' => 'tent@stardewvalley.com'], ['label' => 'Pierre', 'email' => 'generalstore@stardewvalley.com']] * @param array $cc * @param array $bcc @@ -189,7 +188,6 @@ public function update( bool $isHtml, bool $smimeSign, bool $smimeEncrypt, - bool $failed = false, array $to = [], array $cc = [], array $bcc = [], @@ -201,11 +199,12 @@ public function update( bool $requestMdn = false, bool $isPgpMime = false, ): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); if ($message->getStatus() === LocalMessage::STATUS_PROCESSED) { return JsonResponse::error('Cannot modify already sent message', Http::STATUS_FORBIDDEN, [$message]); } - $account = $this->accountService->find($this->userId, $accountId); + $account = $this->accountService->find($effectiveUserId, $accountId); $message->setAccountId($accountId); $message->setAliasId($aliasId); @@ -221,12 +220,17 @@ public function update( $message->setSmimeEncrypt($smimeEncrypt); $message->setRequestMdn($requestMdn); + // Reset the status to make it retryable. + $message->setFailed(false); + $message->setStatus(LocalMessage::STATUS_RAW); + if (!empty($smimeCertificateId)) { - $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $this->userId); + $smimeCertificate = $this->smimeService->findCertificate($smimeCertificateId, $effectiveUserId); $message->setSmimeCertificateId($smimeCertificate->getId()); } $message = $this->service->updateMessage($account, $message, $to, $cc, $bcc, $attachments); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated outbox message <$id> for account <$accountId> on behalf of $effectiveUserId"); return JsonResponse::success($message, Http::STATUS_ACCEPTED); } @@ -239,12 +243,18 @@ public function update( */ #[TrapError] public function send(int $id): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); - $account = $this->accountService->find($this->userId, $message->getAccountId()); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); + $account = $this->accountService->find($effectiveUserId, $message->getAccountId()); $message = $this->service->sendMessage($message, $account); + $status = $message->getStatus(); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, match ($status) { + LocalMessage::STATUS_PROCESSED => "$this->userId sent outbox message <$id> on behalf of $effectiveUserId", + default => "$this->userId attempted sending outbox message <$id> on behalf of $effectiveUserId but sending failed", + }); - if ($message->getStatus() !== LocalMessage::STATUS_PROCESSED) { + if ($status !== LocalMessage::STATUS_PROCESSED) { return JsonResponse::error('Could not send message', Http::STATUS_INTERNAL_SERVER_ERROR, [$message]); } return JsonResponse::success( @@ -260,8 +270,10 @@ public function send(int $id): JsonResponse { */ #[TrapError] public function destroy(int $id): JsonResponse { - $message = $this->service->getMessage($id, $this->userId); - $this->service->deleteMessage($this->userId, $message); + $effectiveUserId = $this->delegationService->resolveLocalMessageUserId($id, $this->userId); + $message = $this->service->getMessage($id, $effectiveUserId); + $this->service->deleteMessage($effectiveUserId, $message); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted outbox message <$id> on behalf of $effectiveUserId"); return JsonResponse::success('Message deleted', Http::STATUS_ACCEPTED); } } diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index cb84aae360..1054d94339 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -43,8 +43,8 @@ use OCP\IURLGenerator; use OCP\IUserManager; use OCP\IUserSession; -use OCP\TextProcessing\FreePromptTaskType; -use OCP\TextProcessing\SummaryTaskType; +use OCP\TaskProcessing\TaskTypes\TextToText; +use OCP\TaskProcessing\TaskTypes\TextToTextSummary; use OCP\User\IAvailabilityCoordinator; use Psr\Log\LoggerInterface; use Throwable; @@ -56,76 +56,50 @@ class PageController extends Controller { private IURLGenerator $urlGenerator; private IConfig $config; - private AccountService $accountService; - private AliasesService $aliasesService; - private ?string $currentUserId; private IUserSession $userSession; - private IUserPreferences $preferences; - private IMailManager $mailManager; - private TagMapper $tagMapper; private IInitialState $initialStateService; - private LoggerInterface $logger; - private OutboxService $outboxService; private IEventDispatcher $dispatcher; private ICredentialstore $credentialStore; - private SmimeService $smimeService; - private AiIntegrationsService $aiIntegrationsService; private IUserManager $userManager; private IAvailabilityCoordinator $availabilityCoordinator; - private InternalAddressService $internalAddressService; - private QuickActionsService $quickActionsService; - private ContextChatSettingsService $contextChatSettingsService; public function __construct( string $appName, IRequest $request, IURLGenerator $urlGenerator, IConfig $config, - AccountService $accountService, - AliasesService $aliasesService, - ?string $userId, + private AccountService $accountService, + private AliasesService $aliasesService, + private ?string $userId, IUserSession $userSession, - IUserPreferences $preferences, - IMailManager $mailManager, - TagMapper $tagMapper, + private IUserPreferences $preferences, + private IMailManager $mailManager, + private TagMapper $tagMapper, IInitialState $initialStateService, - LoggerInterface $logger, - OutboxService $outboxService, + private LoggerInterface $logger, + private OutboxService $outboxService, IEventDispatcher $dispatcher, ICredentialStore $credentialStore, - SmimeService $smimeService, - AiIntegrationsService $aiIntegrationsService, + private SmimeService $smimeService, + private AiIntegrationsService $aiIntegrationsService, IUserManager $userManager, - InternalAddressService $internalAddressService, + private InternalAddressService $internalAddressService, IAvailabilityCoordinator $availabilityCoordinator, - QuickActionsService $quickActionsService, + private QuickActionsService $quickActionsService, private IAppManager $appManager, - ContextChatSettingsService $contextChatSettingsService, + private ContextChatSettingsService $contextChatSettingsService, private ClassificationSettingsService $classificationSettingsService, ) { parent::__construct($appName, $request); $this->urlGenerator = $urlGenerator; $this->config = $config; - $this->accountService = $accountService; - $this->aliasesService = $aliasesService; - $this->currentUserId = $userId; $this->userSession = $userSession; - $this->preferences = $preferences; - $this->mailManager = $mailManager; - $this->tagMapper = $tagMapper; $this->initialStateService = $initialStateService; - $this->logger = $logger; - $this->outboxService = $outboxService; $this->dispatcher = $dispatcher; $this->credentialStore = $credentialStore; - $this->smimeService = $smimeService; - $this->aiIntegrationsService = $aiIntegrationsService; $this->userManager = $userManager; - $this->internalAddressService = $internalAddressService; $this->availabilityCoordinator = $availabilityCoordinator; - $this->quickActionsService = $quickActionsService; - $this->contextChatSettingsService = $contextChatSettingsService; } /** @@ -135,7 +109,7 @@ public function __construct( * @return TemplateResponse renders the index page */ public function index(): TemplateResponse { - if ($this->currentUserId === null) { + if ($this->userId === null) { // This should not happen as the route requires authentication, // but handle it defensively. return new TemplateResponse($this->appName, 'index'); @@ -165,12 +139,13 @@ public function index(): TemplateResponse { $this->appManager->getAppVersion('mail'), ); - $mailAccounts = $this->accountService->findByUserId($this->currentUserId); + $mailAccounts = $this->accountService->findByUserId($this->userId); $accountsJson = []; foreach ($mailAccounts as $mailAccount) { $json = $mailAccount->jsonSerialize(); + $json['isDelegated'] = false; $json['aliases'] = $this->aliasesService->findAll($mailAccount->getId(), - $this->currentUserId); + $this->userId); try { $mailboxes = $this->mailManager->getMailboxes($mailAccount); $json['mailboxes'] = $mailboxes; @@ -183,37 +158,57 @@ public function index(): TemplateResponse { } $accountsJson[] = $json; } + + $delegatedAccounts = $this->accountService->findDelegatedAccounts($this->userId); + foreach ($delegatedAccounts as $delegatedAccount) { + $json = $delegatedAccount->jsonSerialize(); + $json['isDelegated'] = true; + $json['aliases'] = $this->aliasesService->findAll($delegatedAccount->getId(), + $delegatedAccount->getUserId()); + try { + $mailboxes = $this->mailManager->getMailboxes($delegatedAccount); + $json['mailboxes'] = $mailboxes; + } catch (Throwable $ex) { + $this->logger->critical('Could not load delegated account mailboxes: ' . $ex->getMessage(), [ + 'exception' => $ex, + ]); + $json['mailboxes'] = []; + $json['error'] = true; + } + $accountsJson[] = $json; + } + $this->initialStateService->provideInitialState( 'accounts', $accountsJson ); $this->initialStateService->provideInitialState( 'account-settings', - json_decode($this->preferences->getPreference($this->currentUserId, 'account-settings', '[]'), true, 512, JSON_THROW_ON_ERROR) ?? [] + json_decode($this->preferences->getPreference($this->userId, 'account-settings', '[]'), true, 512, JSON_THROW_ON_ERROR) ?? [] ); $this->initialStateService->provideInitialState( 'tags', - $this->tagMapper->getAllTagsForUser($this->currentUserId) + $this->tagMapper->getAllTagsForUser($this->userId) ); $this->initialStateService->provideInitialState( 'internal-addresses-list', - $this->internalAddressService->getInternalAddresses($this->currentUserId) + $this->internalAddressService->getInternalAddresses($this->userId) ); $this->initialStateService->provideInitialState( 'internal-addresses', - $this->preferences->getPreference($this->currentUserId, 'internal-addresses', false) + $this->preferences->getPreference($this->userId, 'internal-addresses', false) ); $this->initialStateService->provideInitialState( 'smime-sign-aliases', - json_decode($this->preferences->getPreference($this->currentUserId, 'smime-sign-aliases', '[]'), true, 512, JSON_THROW_ON_ERROR) ?? [] + json_decode($this->preferences->getPreference($this->userId, 'smime-sign-aliases', '[]'), true, 512, JSON_THROW_ON_ERROR) ?? [] ); $this->initialStateService->provideInitialState( 'sort-order', - $this->preferences->getPreference($this->currentUserId, 'sort-order', 'newest') + $this->preferences->getPreference($this->userId, 'sort-order', 'newest') ); try { @@ -231,21 +226,21 @@ public function index(): TemplateResponse { $this->initialStateService->provideInitialState('preferences', [ 'attachment-size-limit' => $this->config->getSystemValue('app.mail.attachment-size-limit', 0), 'app-version' => $this->config->getAppValue('mail', 'installed_version'), - 'external-avatars' => $this->preferences->getPreference($this->currentUserId, 'external-avatars', 'true'), - 'layout-mode' => $this->preferences->getPreference($this->currentUserId, 'layout-mode', 'vertical-split'), - 'layout-message-view' => $this->preferences->getPreference($this->currentUserId, 'layout-message-view', $this->config->getAppValue('mail', 'layout_message_view', 'threaded')), - 'reply-mode' => $this->preferences->getPreference($this->currentUserId, 'reply-mode', 'top'), - 'collect-data' => $this->preferences->getPreference($this->currentUserId, 'collect-data', 'true'), - 'search-priority-body' => $this->preferences->getPreference($this->currentUserId, 'search-priority-body', 'false'), - 'start-mailbox-id' => $this->preferences->getPreference($this->currentUserId, 'start-mailbox-id'), - 'follow-up-reminders' => $this->preferences->getPreference($this->currentUserId, 'follow-up-reminders', 'true'), - 'sort-favorites' => $this->preferences->getPreference($this->currentUserId, 'sort-favorites', 'false'), - 'index-context-chat' => $this->contextChatSettingsService->isIndexingEnabled($this->currentUserId) ? 'true' : 'false', - 'compact-mode' => $this->preferences->getPreference($this->currentUserId, 'compact-mode', 'false'), + 'external-avatars' => $this->preferences->getPreference($this->userId, 'external-avatars', 'true'), + 'layout-mode' => $this->preferences->getPreference($this->userId, 'layout-mode', 'vertical-split'), + 'layout-message-view' => $this->preferences->getPreference($this->userId, 'layout-message-view', $this->config->getAppValue('mail', 'layout_message_view', 'threaded')), + 'reply-mode' => $this->preferences->getPreference($this->userId, 'reply-mode', 'top'), + 'collect-data' => $this->preferences->getPreference($this->userId, 'collect-data', 'true'), + 'search-priority-body' => $this->preferences->getPreference($this->userId, 'search-priority-body', 'false'), + 'start-mailbox-id' => $this->preferences->getPreference($this->userId, 'start-mailbox-id'), + 'follow-up-reminders' => $this->preferences->getPreference($this->userId, 'follow-up-reminders', 'true'), + 'sort-favorites' => $this->preferences->getPreference($this->userId, 'sort-favorites', 'false'), + 'index-context-chat' => $this->contextChatSettingsService->isIndexingEnabled($this->userId) ? 'true' : 'false', + 'compact-mode' => $this->preferences->getPreference($this->userId, 'compact-mode', 'false'), ]); $this->initialStateService->provideInitialState( 'prefill_displayName', - $this->userManager->getDisplayName($this->currentUserId) ?? '', + $this->userManager->getDisplayName($this->userId) ?? '', ); $this->initialStateService->provideInitialState( 'importance_classification_default', @@ -262,7 +257,7 @@ public function index(): TemplateResponse { ); $this->initialStateService->provideInitialState( 'quick-actions', - $this->quickActionsService->findAll($this->currentUserId), + $this->quickActionsService->findAll($this->userId), ); $googleOauthclientId = $this->config->getAppValue(Application::APP_ID, 'google_oauth_client_id'); if (!empty($googleOauthclientId)) { @@ -273,7 +268,7 @@ public function index(): TemplateResponse { 'redirect_uri' => $this->urlGenerator->linkToRouteAbsolute('mail.googleIntegration.oauthRedirect'), 'response_type' => 'code', 'prompt' => 'consent', - 'state' => '_accountId_', // Replaced by frontend + 'state' => '_state_', // Replaced by frontend 'scope' => 'https://mail.google.com/', 'access_type' => 'offline', 'login_hint' => '_email_', // Replaced by frontend @@ -290,7 +285,7 @@ public function index(): TemplateResponse { 'redirect_uri' => $this->urlGenerator->linkToRouteAbsolute('mail.microsoftIntegration.oauthRedirect'), 'response_type' => 'code', 'response_mode' => 'query', - 'state' => '_accountId_', // Replaced by frontend + 'state' => '_state_', // Replaced by frontend 'scope' => 'offline_access https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send', 'access_type' => 'offline', 'login_hint' => '_email_', // Replaced by frontend @@ -316,7 +311,7 @@ public function index(): TemplateResponse { $this->initialStateService->provideInitialState( 'llm_summaries_available', - $this->aiIntegrationsService->isLlmProcessingEnabled() && $this->aiIntegrationsService->isLlmAvailable(SummaryTaskType::class) + $this->aiIntegrationsService->isLlmProcessingEnabled() && $this->aiIntegrationsService->isLlmAvailable(TextToTextSummary::ID) ); $this->initialStateService->provideInitialState( @@ -326,13 +321,13 @@ public function index(): TemplateResponse { $this->initialStateService->provideInitialState( 'llm_freeprompt_available', - $this->aiIntegrationsService->isLlmProcessingEnabled() && $this->aiIntegrationsService->isLlmAvailable(FreePromptTaskType::class) + $this->aiIntegrationsService->isLlmProcessingEnabled() && $this->aiIntegrationsService->isLlmAvailable(TextToText::ID) ); $this->initialStateService->provideInitialState( 'llm_followup_available', $this->aiIntegrationsService->isLlmProcessingEnabled() - && $this->aiIntegrationsService->isLlmAvailable(FreePromptTaskType::class) + && $this->aiIntegrationsService->isLlmAvailable(TextToText::ID) ); $this->initialStateService->provideInitialState( diff --git a/lib/Controller/PreferencesController.php b/lib/Controller/PreferencesController.php index b2a3328322..620de4641a 100644 --- a/lib/Controller/PreferencesController.php +++ b/lib/Controller/PreferencesController.php @@ -19,19 +19,17 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class PreferencesController extends Controller { - private IUserPreferences $userPreference; - private string $userId; - /** * @param IRequest $request * @param IUserPreferences $userPreference * @param string $UserId */ - public function __construct(IRequest $request, IUserPreferences $userPreference, string $userId) { + public function __construct( + IRequest $request, + private IUserPreferences $userPreference, + private string $userId, + ) { parent::__construct('mail', $request); - - $this->userPreference = $userPreference; - $this->userId = $userId; } /** @@ -61,7 +59,6 @@ public function update($key, $value): JSONResponse { throw new ClientException('key or value missing'); } - $newValue = $this->userPreference->setPreference($this->userId, $key, $value); return new JSONResponse([ diff --git a/lib/Controller/ProxyController.php b/lib/Controller/ProxyController.php index 3b44a15254..3aa9a35f0f 100644 --- a/lib/Controller/ProxyController.php +++ b/lib/Controller/ProxyController.php @@ -34,29 +34,23 @@ class ProxyController extends Controller { private IURLGenerator $urlGenerator; private ISession $session; private IClientService $clientService; - private LoggerInterface $logger; - private ProxyHmacGenerator $hmacGenerator; - private MailManager $mailManager; - private ?string $userId; - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, IURLGenerator $urlGenerator, ISession $session, IClientService $clientService, - ProxyHmacGenerator $hmacGenerator, - LoggerInterface $logger, - MailManager $mailManager, - ?string $userId) { + private ProxyHmacGenerator $hmacGenerator, + private LoggerInterface $logger, + private MailManager $mailManager, + private ?string $userId, + ) { parent::__construct($appName, $request); $this->request = $request; $this->urlGenerator = $urlGenerator; $this->session = $session; $this->clientService = $clientService; - $this->logger = $logger; - $this->hmacGenerator = $hmacGenerator; - $this->mailManager = $mailManager; - $this->userId = $userId; } /** diff --git a/lib/Controller/QuickActionsController.php b/lib/Controller/QuickActionsController.php index 5679b3a1fa..33ca3dc32b 100644 --- a/lib/Controller/QuickActionsController.php +++ b/lib/Controller/QuickActionsController.php @@ -22,16 +22,13 @@ use OCP\IRequest; class QuickActionsController extends Controller { - private ?string $uid; - public function __construct( IRequest $request, - ?string $userId, + private ?string $userId, private QuickActionsService $quickActionsService, private AccountService $accountService, ) { parent::__construct(Application::APP_ID, $request); - $this->uid = $userId; } /** @@ -41,10 +38,10 @@ public function __construct( */ #[TrapError] public function index(): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $actions = $this->quickActionsService->findAll($this->uid); + $actions = $this->quickActionsService->findAll($this->userId); return JsonResponse::success($actions); } @@ -57,7 +54,7 @@ public function index(): JsonResponse { */ #[TrapError] public function create(string $name, int $accountId): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { @@ -65,7 +62,7 @@ public function create(string $name, int $accountId): JsonResponse { } catch (DoesNotExistException $e) { return JsonResponse::fail('Account not found', Http::STATUS_BAD_REQUEST); } - if ($account->getUserId() !== $this->uid) { + if ($account->getUserId() !== $this->userId) { return JsonResponse::fail('Account not found', Http::STATUS_BAD_REQUEST); } try { @@ -87,11 +84,11 @@ public function create(string $name, int $accountId): JsonResponse { #[TrapError] public function update(int $id, string $name): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $quickAction = $this->quickActionsService->find($id, $this->uid); + $quickAction = $this->quickActionsService->find($id, $this->userId); if ($quickAction === null) { return JsonResponse::error('Quick action not found', Http::STATUS_NOT_FOUND); @@ -108,11 +105,11 @@ public function update(int $id, string $name): JsonResponse { * @return JsonResponse */ public function destroy(int $id): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->quickActionsService->delete($id, $this->uid); + $this->quickActionsService->delete($id, $this->userId); return JsonResponse::success(); } catch (DoesNotExistException $e) { return JsonResponse::fail('Quick action not found', Http::STATUS_NOT_FOUND); diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 2c27a891d2..82db5b05cd 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -21,29 +21,22 @@ use OCP\IConfig; use OCP\IRequest; use Psr\Container\ContainerInterface; - use function array_merge; #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class SettingsController extends Controller { - private ProvisioningManager $provisioningManager; - private AntiSpamService $antiSpamService; - private ContainerInterface $container; private IConfig $config; public function __construct( IRequest $request, - ProvisioningManager $provisioningManager, - AntiSpamService $antiSpamService, + private ProvisioningManager $provisioningManager, + private AntiSpamService $antiSpamService, IConfig $config, - ContainerInterface $container, + private ContainerInterface $container, private ClassificationSettingsService $classificationSettingsService, ) { parent::__construct(Application::APP_ID, $request); - $this->provisioningManager = $provisioningManager; - $this->antiSpamService = $antiSpamService; $this->config = $config; - $this->container = $container; } public function index(): JSONResponse { diff --git a/lib/Controller/SieveController.php b/lib/Controller/SieveController.php index e38988cccc..063f39e624 100644 --- a/lib/Controller/SieveController.php +++ b/lib/Controller/SieveController.php @@ -16,6 +16,7 @@ use OCA\Mail\Exception\CouldNotConnectException; use OCA\Mail\Http\JsonResponse as MailJsonResponse; use OCA\Mail\Http\TrapError; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\SieveService; use OCA\Mail\Sieve\SieveClientFactory; use OCP\AppFramework\Controller; @@ -30,30 +31,23 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class SieveController extends Controller { - private MailAccountMapper $mailAccountMapper; - private SieveClientFactory $sieveClientFactory; - private string $currentUserId; private ICrypto $crypto; private IRemoteHostValidator $hostValidator; - private LoggerInterface $logger; public function __construct( IRequest $request, - string $userId, - MailAccountMapper $mailAccountMapper, - SieveClientFactory $sieveClientFactory, + private string $userId, + private MailAccountMapper $mailAccountMapper, + private SieveClientFactory $sieveClientFactory, ICrypto $crypto, IRemoteHostValidator $hostValidator, - LoggerInterface $logger, + private LoggerInterface $logger, private SieveService $sieveService, + private DelegationService $delegationService, ) { parent::__construct(Application::APP_ID, $request); - $this->currentUserId = $userId; - $this->mailAccountMapper = $mailAccountMapper; - $this->sieveClientFactory = $sieveClientFactory; $this->crypto = $crypto; $this->hostValidator = $hostValidator; - $this->logger = $logger; } /** @@ -69,7 +63,8 @@ public function __construct( */ #[TrapError] public function getActiveScript(int $id): JSONResponse { - $activeScript = $this->sieveService->getActiveScript($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $activeScript = $this->sieveService->getActiveScript($effectiveUserId, $id); return new JSONResponse([ 'scriptName' => $activeScript->getName(), 'script' => $activeScript->getScript(), @@ -89,12 +84,14 @@ public function getActiveScript(int $id): JSONResponse { */ #[TrapError] public function updateActiveScript(int $id, string $script): JSONResponse { + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); try { - $this->sieveService->updateActiveScript($this->currentUserId, $id, $script); + $this->sieveService->updateActiveScript($effectiveUserId, $id, $script); } catch (ManagesieveException $e) { $this->logger->error('Installing sieve script failed: ' . $e->getMessage(), ['app' => 'mail', 'exception' => $e]); return new JSONResponse(data: ['message' => $e->getMessage()], statusCode: Http::STATUS_UNPROCESSABLE_ENTITY); } + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated the active sieve script for account <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -114,6 +111,7 @@ public function updateActiveScript(int $id, string $script): JSONResponse { * * @throws CouldNotConnectException * @throws DoesNotExistException + * @throws ClientException */ #[TrapError] public function updateAccount(int $id, @@ -135,7 +133,8 @@ public function updateAccount(int $id, Http::STATUS_UNPROCESSABLE_ENTITY ); } - $mailAccount = $this->mailAccountMapper->find($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveAccountUserId($id, $this->userId); + $mailAccount = $this->mailAccountMapper->find($effectiveUserId, $id); if ($sieveEnabled === false) { $mailAccount->setSieveEnabled(false); @@ -146,6 +145,7 @@ public function updateAccount(int $id, $mailAccount->setSievePassword(null); $this->mailAccountMapper->save($mailAccount); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated sieve settings for account <$id> on behalf of $effectiveUserId"); return new JSONResponse(['sieveEnabled' => $mailAccount->isSieveEnabled()]); } @@ -177,6 +177,7 @@ public function updateAccount(int $id, } $this->mailAccountMapper->save($mailAccount); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId updated sieve settings for account <$id> on behalf of $effectiveUserId"); return new JSONResponse(['sieveEnabled' => $mailAccount->isSieveEnabled()]); } } diff --git a/lib/Controller/SmimeCertificatesController.php b/lib/Controller/SmimeCertificatesController.php index e26fbe221a..e2ea4aa20c 100644 --- a/lib/Controller/SmimeCertificatesController.php +++ b/lib/Controller/SmimeCertificatesController.php @@ -24,16 +24,13 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class SmimeCertificatesController extends Controller { - private ?string $userId; - private SmimeService $certificateService; - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - ?string $userId, - SmimeService $certificateService) { + private ?string $userId, + private SmimeService $certificateService, + ) { parent::__construct($appName, $request); - $this->userId = $userId; - $this->certificateService = $certificateService; } /** diff --git a/lib/Controller/TagsController.php b/lib/Controller/TagsController.php index 78485d82c1..52774eb054 100644 --- a/lib/Controller/TagsController.php +++ b/lib/Controller/TagsController.php @@ -23,21 +23,13 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class TagsController extends Controller { - private string $currentUserId; - private IMailManager $mailManager; - - private AccountService $accountService; - - - public function __construct(IRequest $request, - string $userId, - IMailManager $mailManager, - AccountService $accountService, + public function __construct( + IRequest $request, + private string $userId, + private IMailManager $mailManager, + private AccountService $accountService, ) { parent::__construct(Application::APP_ID, $request); - $this->currentUserId = $userId; - $this->mailManager = $mailManager; - $this->accountService = $accountService; } /** @@ -54,7 +46,7 @@ public function create(string $displayName, string $color): JSONResponse { $this->validateDisplayName($displayName); $this->validateColor($color); - $tag = $this->mailManager->createTag($displayName, $color, $this->currentUserId); + $tag = $this->mailManager->createTag($displayName, $color, $this->userId); return new JSONResponse($tag); } @@ -73,7 +65,7 @@ public function update(int $id, string $displayName, string $color): JSONRespons $this->validateDisplayName($displayName); $this->validateColor($color); - $tag = $this->mailManager->updateTag($id, $displayName, $color, $this->currentUserId); + $tag = $this->mailManager->updateTag($id, $displayName, $color, $this->userId); return new JSONResponse($tag); } /** @@ -84,11 +76,11 @@ public function update(int $id, string $displayName, string $color): JSONRespons #[TrapError] public function delete(int $id, int $accountId): JSONResponse { try { - $accounts = $this->accountService->findByUserId($this->currentUserId); + $accounts = $this->accountService->findByUserId($this->userId); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } - $this->mailManager->deleteTag($id, $this->currentUserId, $accounts); + $this->mailManager->deleteTag($id, $this->userId, $accounts); return new JSONResponse([$id]); } diff --git a/lib/Controller/TextBlockController.php b/lib/Controller/TextBlockController.php index 4037f690b2..c5baab8aec 100644 --- a/lib/Controller/TextBlockController.php +++ b/lib/Controller/TextBlockController.php @@ -20,15 +20,12 @@ use OCP\IRequest; class TextBlockController extends Controller { - private ?string $uid; - public function __construct( IRequest $request, - ?string $userId, + private ?string $userId, private TextBlockService $textBlockService, ) { parent::__construct(Application::APP_ID, $request); - $this->uid = $userId; } /** @@ -38,10 +35,10 @@ public function __construct( */ #[TrapError] public function index(): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $textBlocks = $this->textBlockService->findAll($this->uid); + $textBlocks = $this->textBlockService->findAll($this->userId); return JsonResponse::success($textBlocks); } @@ -55,10 +52,10 @@ public function index(): JsonResponse { */ #[TrapError] public function create(string $title, string $content): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $textBlock = $this->textBlockService->create($this->uid, $title, $content); + $textBlock = $this->textBlockService->create($this->userId, $title, $content); return JsonResponse::success($textBlock, Http::STATUS_CREATED); } @@ -74,17 +71,17 @@ public function create(string $title, string $content): JsonResponse { #[TrapError] public function update(int $id, string $title, string $content): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } - $textBlock = $this->textBlockService->find($id, $this->uid); + $textBlock = $this->textBlockService->find($id, $this->userId); if ($textBlock === null) { return JsonResponse::error('Text block not found', Http::STATUS_NOT_FOUND); } - $textBlock = $this->textBlockService->update($textBlock, $this->uid, $title, $content); + $textBlock = $this->textBlockService->update($textBlock, $this->userId, $title, $content); return JsonResponse::success($textBlock, Http::STATUS_OK); } @@ -95,11 +92,11 @@ public function update(int $id, string $title, string $content): JsonResponse { * @return JsonResponse */ public function destroy(int $id): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->textBlockService->delete($id, $this->uid); + $this->textBlockService->delete($id, $this->userId); return JsonResponse::success(); } catch (DoesNotExistException $e) { return JsonResponse::fail('Text block not found', Http::STATUS_NOT_FOUND); diff --git a/lib/Controller/TextBlockSharesController.php b/lib/Controller/TextBlockSharesController.php index e4ed018d57..71975cfcc7 100644 --- a/lib/Controller/TextBlockSharesController.php +++ b/lib/Controller/TextBlockSharesController.php @@ -22,15 +22,12 @@ use OCP\IRequest; class TextBlockSharesController extends Controller { - private ?string $uid; - public function __construct( IRequest $request, - ?string $userId, + private ?string $userId, private TextBlockService $textBlockService, ) { parent::__construct(Application::APP_ID, $request); - $this->uid = $userId; } /** @@ -40,11 +37,11 @@ public function __construct( */ #[TrapError] public function index(): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $textBlocks = $this->textBlockService->findAllSharedWithMe($this->uid); + $textBlocks = $this->textBlockService->findAllSharedWithMe($this->userId); } catch (UserNotFoundException $e) { return JsonResponse::error('Sharee not found', Http::STATUS_UNAUTHORIZED); } @@ -59,11 +56,11 @@ public function index(): JsonResponse { */ #[TrapError] public function create(int $textBlockId, string $shareWith, string $type): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->textBlockService->find($textBlockId, $this->uid); + $this->textBlockService->find($textBlockId, $this->userId); } catch (DoesNotExistException $e) { return JsonResponse::error('Text block not found', Http::STATUS_NOT_FOUND); } @@ -88,11 +85,11 @@ public function create(int $textBlockId, string $shareWith, string $type): JsonR */ #[TrapError] public function destroy(int $id, string $shareWith): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->textBlockService->find($id, $this->uid); + $this->textBlockService->find($id, $this->userId); } catch (DoesNotExistException $e) { return JsonResponse::error('Text block not found', Http::STATUS_NOT_FOUND); } @@ -108,12 +105,12 @@ public function destroy(int $id, string $shareWith): JsonResponse { * @return JsonResponse */ public function getTextBlockShares(int $id): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::error('User not found', Http::STATUS_UNAUTHORIZED); } try { - $this->textBlockService->find($id, $this->uid); + $this->textBlockService->find($id, $this->userId); } catch (DoesNotExistException $e) { return JsonResponse::error('Text block not found', Http::STATUS_NOT_FOUND); } diff --git a/lib/Controller/ThreadController.php b/lib/Controller/ThreadController.php index 89c90127c1..ff79645e2e 100755 --- a/lib/Controller/ThreadController.php +++ b/lib/Controller/ThreadController.php @@ -15,6 +15,7 @@ use OCA\Mail\Http\TrapError; use OCA\Mail\Service\AccountService; use OCA\Mail\Service\AiIntegrations\AiIntegrationsService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\SnoozeService; use OCP\AppFramework\Controller; use OCP\AppFramework\Db\DoesNotExistException; @@ -26,29 +27,18 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class ThreadController extends Controller { - private string $currentUserId; - private AccountService $accountService; - private IMailManager $mailManager; - private SnoozeService $snoozeService; - private AiIntegrationsService $aiIntergrationsService; - private LoggerInterface $logger; - - - public function __construct(string $appName, + public function __construct( + string $appName, IRequest $request, - string $userId, - AccountService $accountService, - IMailManager $mailManager, - SnoozeService $snoozeService, - AiIntegrationsService $aiIntergrationsService, - LoggerInterface $logger) { + private string $userId, + private AccountService $accountService, + private IMailManager $mailManager, + private SnoozeService $snoozeService, + private AiIntegrationsService $aiIntergrationsService, + private LoggerInterface $logger, + private DelegationService $delegationService, + ) { parent::__construct($appName, $request); - $this->currentUserId = $userId; - $this->accountService = $accountService; - $this->mailManager = $mailManager; - $this->snoozeService = $snoozeService; - $this->aiIntergrationsService = $aiIntergrationsService; - $this->logger = $logger; } /** @@ -64,11 +54,12 @@ public function __construct(string $appName, #[TrapError] public function move(int $id, int $destMailboxId): JSONResponse { try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $srcMailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $srcAccount = $this->accountService->find($this->currentUserId, $srcMailbox->getAccountId()); - $dstMailbox = $this->mailManager->getMailbox($this->currentUserId, $destMailboxId); - $dstAccount = $this->accountService->find($this->currentUserId, $dstMailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $srcMailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $srcAccount = $this->accountService->find($effectiveUserId, $srcMailbox->getAccountId()); + $dstMailbox = $this->mailManager->getMailbox($effectiveUserId, $destMailboxId); + $dstAccount = $this->accountService->find($effectiveUserId, $dstMailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -84,6 +75,7 @@ public function move(int $id, int $destMailboxId): JSONResponse { $dstMailbox, $threadRootId ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId moved thread <$id> to mailbox <$destMailboxId> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -102,16 +94,18 @@ public function move(int $id, int $destMailboxId): JSONResponse { #[TrapError] public function snooze(int $id, int $unixTimestamp, int $destMailboxId): JSONResponse { try { - $selectedMessage = $this->mailManager->getMessage($this->currentUserId, $id); - $srcMailbox = $this->mailManager->getMailbox($this->currentUserId, $selectedMessage->getMailboxId()); - $srcAccount = $this->accountService->find($this->currentUserId, $srcMailbox->getAccountId()); - $dstMailbox = $this->mailManager->getMailbox($this->currentUserId, $destMailboxId); - $dstAccount = $this->accountService->find($this->currentUserId, $dstMailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $selectedMessage = $this->mailManager->getMessage($effectiveUserId, $id); + $srcMailbox = $this->mailManager->getMailbox($effectiveUserId, $selectedMessage->getMailboxId()); + $srcAccount = $this->accountService->find($effectiveUserId, $srcMailbox->getAccountId()); + $dstMailbox = $this->mailManager->getMailbox($effectiveUserId, $destMailboxId); + $dstAccount = $this->accountService->find($effectiveUserId, $dstMailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } $this->snoozeService->snoozeThread($selectedMessage, $unixTimestamp, $srcAccount, $srcMailbox, $dstAccount, $dstMailbox); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId snoozed thread <$id> until <$unixTimestamp> in mailbox <$destMailboxId> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -128,12 +122,14 @@ public function snooze(int $id, int $unixTimestamp, int $destMailboxId): JSONRes #[TrapError] public function unSnooze(int $id): JSONResponse { try { - $selectedMessage = $this->mailManager->getMessage($this->currentUserId, $id); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $selectedMessage = $this->mailManager->getMessage($effectiveUserId, $id); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } - $this->snoozeService->unSnoozeThread($selectedMessage, $this->currentUserId); + $this->snoozeService->unSnoozeThread($selectedMessage, $effectiveUserId); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId unsnoozed thread <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } @@ -147,9 +143,10 @@ public function unSnooze(int $id): JSONResponse { */ public function summarize(int $id): JSONResponse { try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -163,7 +160,7 @@ public function summarize(int $id): JSONResponse { $account, $threadRootId, $thread, - $this->currentUserId, + $this->userId, ); } catch (\Throwable $e) { $this->logger->error('Summarizing thread failed: ' . $e->getMessage(), [ @@ -180,9 +177,10 @@ public function summarize(int $id): JSONResponse { */ public function generateEventData(int $id): JSONResponse { try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -191,12 +189,19 @@ public function generateEventData(int $id): JSONResponse { return new JSONResponse([], Http::STATUS_NOT_FOUND); } $thread = $this->mailManager->getThread($account, $threadRootId); - $data = $this->aiIntergrationsService->generateEventData( - $account, - $threadRootId, - $thread, - $this->currentUserId, - ); + try { + $data = $this->aiIntergrationsService->generateEventData( + $account, + $threadRootId, + $thread, + $this->userId, + ); + } catch (ServiceException $e) { + $this->logger->error('Generating event data failed: ' . $e->getMessage(), [ + 'exception' => $e, + ]); + return new JSONResponse([], Http::STATUS_NO_CONTENT); + } return new JSONResponse(['data' => $data]); } @@ -213,9 +218,10 @@ public function generateEventData(int $id): JSONResponse { #[TrapError] public function delete(int $id): JSONResponse { try { - $message = $this->mailManager->getMessage($this->currentUserId, $id); - $mailbox = $this->mailManager->getMailbox($this->currentUserId, $message->getMailboxId()); - $account = $this->accountService->find($this->currentUserId, $mailbox->getAccountId()); + $effectiveUserId = $this->delegationService->resolveMessageUserId($id, $this->userId); + $message = $this->mailManager->getMessage($effectiveUserId, $id); + $mailbox = $this->mailManager->getMailbox($effectiveUserId, $message->getMailboxId()); + $account = $this->accountService->find($effectiveUserId, $mailbox->getAccountId()); } catch (DoesNotExistException $e) { return new JSONResponse([], Http::STATUS_FORBIDDEN); } @@ -229,6 +235,7 @@ public function delete(int $id): JSONResponse { $mailbox, $threadRootId ); + $this->delegationService->logDelegatedAction($this->userId, $effectiveUserId, "$this->userId deleted thread <$id> on behalf of $effectiveUserId"); return new JSONResponse(); } diff --git a/lib/Controller/TrustedSendersController.php b/lib/Controller/TrustedSendersController.php index 9fa30fdeec..1b5f0ed2bf 100644 --- a/lib/Controller/TrustedSendersController.php +++ b/lib/Controller/TrustedSendersController.php @@ -20,16 +20,12 @@ #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] class TrustedSendersController extends Controller { - private ?string $uid; - private ITrustedSenderService $trustedSenderService; - - public function __construct(IRequest $request, - ?string $userId, - ITrustedSenderService $trustedSenderService) { + public function __construct( + IRequest $request, + private ?string $userId, + private ITrustedSenderService $trustedSenderService, + ) { parent::__construct(Application::APP_ID, $request); - - $this->uid = $userId; - $this->trustedSenderService = $trustedSenderService; } /** @@ -41,12 +37,12 @@ public function __construct(IRequest $request, */ #[TrapError] public function setTrusted(string $email, string $type): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::fail([], Http::STATUS_UNAUTHORIZED); } $this->trustedSenderService->trust( - $this->uid, + $this->userId, $email, $type ); @@ -63,12 +59,12 @@ public function setTrusted(string $email, string $type): JsonResponse { */ #[TrapError] public function removeTrust(string $email, string $type): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::fail([], Http::STATUS_UNAUTHORIZED); } $this->trustedSenderService->trust( - $this->uid, + $this->userId, $email, $type, false @@ -83,12 +79,12 @@ public function removeTrust(string $email, string $type): JsonResponse { */ #[TrapError] public function list(): JsonResponse { - if ($this->uid === null) { + if ($this->userId === null) { return JsonResponse::fail([], Http::STATUS_UNAUTHORIZED); } $list = $this->trustedSenderService->getTrusted( - $this->uid + $this->userId ); return JsonResponse::success($list); diff --git a/lib/Dashboard/MailWidget.php b/lib/Dashboard/MailWidget.php index 526cd9bab9..3d3be48311 100644 --- a/lib/Dashboard/MailWidget.php +++ b/lib/Dashboard/MailWidget.php @@ -33,25 +33,21 @@ abstract class MailWidget implements IAPIWidget, IAPIWidgetV2, IIconWidget, IOptionWidget, IButtonWidget { protected IURLGenerator $urlGenerator; protected IUserManager $userManager; - protected AccountService $accountService; - protected IMailSearch $mailSearch; protected IInitialState $initialState; - protected ?string $userId; protected IL10N $l10n; - public function __construct(IL10N $l10n, + public function __construct( + IL10N $l10n, IURLGenerator $urlGenerator, IUserManager $userManager, - AccountService $accountService, - IMailSearch $mailSearch, + protected AccountService $accountService, + protected IMailSearch $mailSearch, IInitialState $initialState, - ?string $userId) { + protected ?string $userId, + ) { $this->urlGenerator = $urlGenerator; $this->userManager = $userManager; - $this->accountService = $accountService; - $this->mailSearch = $mailSearch; $this->initialState = $initialState; - $this->userId = $userId; $this->l10n = $l10n; } diff --git a/lib/Db/Actions.php b/lib/Db/Actions.php index 5b4b64793e..da4afc7ee5 100644 --- a/lib/Db/Actions.php +++ b/lib/Db/Actions.php @@ -47,7 +47,6 @@ public function jsonSerialize() { 'accountId' => $this->getAccountId(), 'actionSteps' => $this->actionSteps, 'icon' => $this->icon, - ]; } } diff --git a/lib/Db/ActionsMapper.php b/lib/Db/ActionsMapper.php index f04319fbe1..6970a50c8e 100644 --- a/lib/Db/ActionsMapper.php +++ b/lib/Db/ActionsMapper.php @@ -53,5 +53,4 @@ public function findAll(string $owner) { return $this->findEntities($qb); } - } diff --git a/lib/Db/AliasMapper.php b/lib/Db/AliasMapper.php index bae9b6d98a..2a3f2791b3 100644 --- a/lib/Db/AliasMapper.php +++ b/lib/Db/AliasMapper.php @@ -141,6 +141,18 @@ public function deleteProvisionedAliasesByUid(string $uid): void { } } + /** + * @throws DoesNotExistException + */ + public function findAccountIdForAlias(int $aliasId): int { + $qb = $this->db->getQueryBuilder(); + $qb->select('account_id') + ->from($this->getTableName()) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($aliasId))); + $row = $this->findOneQuery($qb); + return (int)$row['account_id']; + } + public function deleteOrphans(): void { $qb1 = $this->db->getQueryBuilder(); $idsQuery = $qb1->select('a.id') diff --git a/lib/Db/Delegation.php b/lib/Db/Delegation.php new file mode 100644 index 0000000000..8e677a6187 --- /dev/null +++ b/lib/Db/Delegation.php @@ -0,0 +1,50 @@ +addType('userId', 'string'); + $this->addType('accountId', 'integer'); + } + + public function getDisplayName(): ?string { + return $this->displayName; + } + + public function setDisplayName(?string $displayName): void { + $this->displayName = $displayName; + } + + #[ReturnTypeWillChange] + public function jsonSerialize() { + return [ + 'id' => $this->getId(), + 'accountId' => $this->getAccountId(), + 'userId' => $this->getUserId(), + 'displayName' => $this->displayName ?? $this->getUserId(), + ]; + } +} diff --git a/lib/Db/DelegationMapper.php b/lib/Db/DelegationMapper.php new file mode 100644 index 0000000000..5790220be3 --- /dev/null +++ b/lib/Db/DelegationMapper.php @@ -0,0 +1,78 @@ + + */ +class DelegationMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'mail_delegations'); + } + + public function findDelegatedToUsers(int $accountId): array { + $qb = $this->db->getQueryBuilder(); + + $select = $qb->select('*') + ->from($this->getTableName()) + ->where( + $qb->expr()->eq('account_id', $qb->createNamedParameter($accountId)) + ); + + return $this->findEntities($select); + } + + /** + * @throws DoesNotExistException + */ + public function find(int $accountId, string $uid): Delegation { + $qb = $this->db->getQueryBuilder(); + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($uid))) + ->andWhere($qb->expr()->eq('account_id', $qb->createNamedParameter($accountId))); + return $this->findEntity($qb); + } + + public function deleteByUserId(string $userId): void { + $qb = $this->db->getQueryBuilder(); + $qb->delete($this->getTableName()) + ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($userId))); + $qb->executeStatement(); + } + + /** + * @throws DoesNotExistException + */ + public function findAccountOwnerForDelegatedUser(int $accountId, string $delegatedUserId): string { + $qb = $this->db->getQueryBuilder(); + $qb->select('a.user_id') + ->from($this->getTableName(), 'd') + ->join('d', 'mail_accounts', 'a', + $qb->expr()->eq('d.account_id', 'a.id', IQueryBuilder::PARAM_INT)) + ->where($qb->expr()->eq('d.account_id', $qb->createNamedParameter($accountId, IQueryBuilder::PARAM_INT))) + ->andWhere($qb->expr()->eq('d.user_id', $qb->createNamedParameter($delegatedUserId))); + + $result = $qb->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new DoesNotExistException("No delegation found for account $accountId and user $delegatedUserId"); + } + + return (string)$row['user_id']; + } +} diff --git a/lib/Db/LocalMessageMapper.php b/lib/Db/LocalMessageMapper.php index 06ef03d023..2207517c0f 100644 --- a/lib/Db/LocalMessageMapper.php +++ b/lib/Db/LocalMessageMapper.php @@ -22,18 +22,12 @@ * @template-extends QBMapper */ class LocalMessageMapper extends QBMapper { - /** @var LocalAttachmentMapper */ - private $attachmentMapper; - - /** @var RecipientMapper */ - private $recipientMapper; - - public function __construct(IDBConnection $db, - LocalAttachmentMapper $attachmentMapper, - RecipientMapper $recipientMapper) { + public function __construct( + IDBConnection $db, + private LocalAttachmentMapper $attachmentMapper, + private RecipientMapper $recipientMapper, + ) { parent::__construct($db, 'mail_local_messages'); - $this->recipientMapper = $recipientMapper; - $this->attachmentMapper = $attachmentMapper; } /** @@ -70,11 +64,19 @@ public function getAllForUser(string $userId, int $type = LocalMessage::TYPE_OUT $recipientMap = []; foreach ($recipients as $r) { - $recipientMap[$r->getLocalMessageId()][] = $r; + $localMessageId = $r->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $recipientMap[$localMessageId][] = $r; } $attachmentMap = []; foreach ($attachments as $a) { - $attachmentMap[$a->getLocalMessageId()][] = $a; + $localMessageId = $a->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $attachmentMap[$localMessageId][] = $a; } return array_map(static function ($localMessage) use ($attachmentMap, $recipientMap) { @@ -104,6 +106,19 @@ public function findById(int $id, string $userId, int $type): LocalMessage { return $entity; } + /** + * @throws DoesNotExistException + */ + public function findAccountIdForLocalMessage(int $localMessageId): int { + $qb = $this->db->getQueryBuilder(); + $qb->select('account_id') + ->from($this->getTableName()) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($localMessageId, IQueryBuilder::PARAM_INT))); + + $row = $this->findOneQuery($qb); + return (int)$row['account_id']; + } + /** * Find all messages that should be sent * @@ -134,11 +149,19 @@ public function findDue(int $time, int $type = LocalMessage::TYPE_OUTGOING): arr $recipientMap = []; foreach ($recipients as $r) { - $recipientMap[$r->getLocalMessageId()][] = $r; + $localMessageId = $r->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $recipientMap[$localMessageId][] = $r; } $attachmentMap = []; foreach ($attachments as $a) { - $attachmentMap[$a->getLocalMessageId()][] = $a; + $localMessageId = $a->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $attachmentMap[$localMessageId][] = $a; } return array_map(static function ($localMessage) use ($attachmentMap, $recipientMap) { @@ -183,11 +206,19 @@ public function findDueDrafts(int $time): array { $recipientMap = []; foreach ($recipients as $r) { - $recipientMap[$r->getLocalMessageId()][] = $r; + $localMessageId = $r->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $recipientMap[$localMessageId][] = $r; } $attachmentMap = []; foreach ($attachments as $a) { - $attachmentMap[$a->getLocalMessageId()][] = $a; + $localMessageId = $a->getLocalMessageId(); + if ($localMessageId === null) { + continue; + } + $attachmentMap[$localMessageId][] = $a; } return array_map(static function ($localMessage) use ($attachmentMap, $recipientMap) { @@ -232,7 +263,7 @@ public function updateWithRecipients(LocalMessage $message, array $to, array $cc try { $message = $this->update($message); - $this->recipientMapper->updateRecipients($message->getId(), $message->getRecipients(), $to, $cc, $bcc); + $this->recipientMapper->updateRecipients($message->getId(), $message->getRecipients() ?? [], $to, $cc, $bcc); $recipients = $this->recipientMapper->findByLocalMessageId($message->getId()); $message->setRecipients($recipients); $this->db->commit(); diff --git a/lib/Db/MailAccountMapper.php b/lib/Db/MailAccountMapper.php index 3de06401a6..e21cb3f104 100644 --- a/lib/Db/MailAccountMapper.php +++ b/lib/Db/MailAccountMapper.php @@ -66,6 +66,29 @@ public function findById(int $id): MailAccount { return $this->findEntity($query); } + /** + * Finds all Mail Accounts delegated to the given user + * + * @param string $userId the id of the user that has been delegated access + * + * @return list + */ + public function findDelegatedByUserId(string $userId): array { + $qb = $this->db->getQueryBuilder(); + $query = $qb + ->select('a.*') + ->from($this->getTableName(), 'a') + ->innerJoin( + 'a', + 'mail_delegations', + 'd', + $qb->expr()->eq('a.id', 'd.account_id') + ) + ->where($qb->expr()->eq('d.user_id', $qb->createNamedParameter($userId))); + + return $this->findEntities($query); + } + /** * Finds all Mail Accounts by user id existing for this user * diff --git a/lib/Db/MailboxMapper.php b/lib/Db/MailboxMapper.php index 36ebdfbbe3..7ece9a8a1f 100644 --- a/lib/Db/MailboxMapper.php +++ b/lib/Db/MailboxMapper.php @@ -128,7 +128,6 @@ public function findByIds(array $ids): array { return $this->findEntities($select); } - /** * @param int $id * @param string $uid @@ -157,6 +156,19 @@ public function findByUid(int $id, string $uid): Mailbox { } } + /** + * @throws DoesNotExistException + */ + public function findAccountIdForMailbox(int $mailboxId): int { + $qb = $this->db->getQueryBuilder(); + $qb->select('account_id') + ->from($this->getTableName()) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($mailboxId, IQueryBuilder::PARAM_INT))); + + $row = $this->findOneQuery($qb); + return (int)$row['account_id']; + } + /** * @throws MailboxLockedException */ diff --git a/lib/Db/MessageMapper.php b/lib/Db/MessageMapper.php index ce29c480ed..1d80e55049 100644 --- a/lib/Db/MessageMapper.php +++ b/lib/Db/MessageMapper.php @@ -53,20 +53,14 @@ class MessageMapper extends QBMapper { /** @var ITimeFactory */ private $timeFactory; - /** @var TagMapper */ - private $tagMapper; - - /** @var PerformanceLogger */ - private $performanceLogger; - - public function __construct(IDBConnection $db, + public function __construct( + IDBConnection $db, ITimeFactory $timeFactory, - TagMapper $tagMapper, - PerformanceLogger $performanceLogger) { + private TagMapper $tagMapper, + private PerformanceLogger $performanceLogger, + ) { parent::__construct($db, 'mail_messages'); $this->timeFactory = $timeFactory; - $this->tagMapper = $tagMapper; - $this->performanceLogger = $performanceLogger; } /** @@ -131,6 +125,20 @@ public function findByUserId(string $userId, int $id): Message { return $results[0]; } + /** + * @throws DoesNotExistException + */ + public function findAccountIdForMessage(int $messageId): int { + $qb = $this->db->getQueryBuilder(); + $qb->select('mb.account_id') + ->from($this->getTableName(), 'm') + ->join('m', 'mail_mailboxes', 'mb', $qb->expr()->eq('m.mailbox_id', 'mb.id', IQueryBuilder::PARAM_INT)) + ->where($qb->expr()->eq('m.id', $qb->createNamedParameter($messageId, IQueryBuilder::PARAM_INT))); + + $row = $this->findOneQuery($qb); + return (int)$row['account_id']; + } + public function findAllUids(Mailbox $mailbox): array { $query = $this->db->getQueryBuilder(); @@ -460,7 +468,6 @@ public function updateBulk(Account $account, bool $permflagsEnabled, Message ... } } - try { // UPDATE messages SET flag true/false WHERE uid in (uids) -> for each flag // => total of 20 queries @@ -531,7 +538,8 @@ public function updateBulk(Account $account, bool $permflagsEnabled, Message ... */ private function updateTags(Account $account, Message $message, array $tags, PerformanceLoggerTask $perf): void { $imapTags = $message->getTags(); - $dbTags = $tags[$message->getMessageId()] ?? []; + $messageId = $message->getMessageId(); + $dbTags = $messageId !== null ? ($tags[$messageId] ?? []) : []; if ($imapTags === [] && $dbTags === []) { // neither old nor new tags @@ -940,7 +948,6 @@ public function findIdsByQuery(Mailbox $mailbox, SearchQuery $query, string $sor ); } - if ($query->getHasAttachments()) { $select->andWhere( $qb->expr()->eq('m.flag_attachments', $qb->createNamedParameter($query->getHasAttachments(), IQueryBuilder::PARAM_INT)) @@ -1178,16 +1185,12 @@ private function flagExpressionToQuery(FlagExpression $expr, IQueryBuilder $qb, throw new RuntimeException('Invalid operand type ' . get_class($operand)); }, $expr->getOperands()); - switch ($expr->getOperator()) { - case 'and': - /** @psalm-suppress InvalidCast */ - return (string)$qb->expr()->andX(...$operands); - case 'or': - /** @psalm-suppress InvalidCast */ - return (string)$qb->expr()->orX(...$operands); - default: - throw new RuntimeException('Unknown operator ' . $expr->getOperator()); - } + /** @psalm-suppress InvalidCast */ + return match ($expr->getOperator()) { + 'and' => (string)$qb->expr()->andX(...$operands), + 'or' => (string)$qb->expr()->orX(...$operands), + default => throw new RuntimeException('Unknown operator ' . $expr->getOperator()), + }; } private function flagToColumnName(Flag $flag): string { @@ -1340,7 +1343,8 @@ public function findRelatedData(array $messages, string $userId): array { $tags = $this->tagMapper->getAllTagsForMessages($messages, $userId); /** @var Message $message */ $messages = array_map(static function ($message) use ($tags) { - $message->setTags($tags[$message->getMessageId()] ?? []); + $messageId = $message->getMessageId(); + $message->setTags($messageId !== null ? ($tags[$messageId] ?? []) : []); return $message; }, $messages); return $messages; diff --git a/lib/Db/MessageTagsMapper.php b/lib/Db/MessageTagsMapper.php index 9847bd78a9..3fdc8d7dad 100644 --- a/lib/Db/MessageTagsMapper.php +++ b/lib/Db/MessageTagsMapper.php @@ -28,7 +28,6 @@ public function getMessagesByTag(int $id): array { ->from($this->getTableName()) ->where( $qb->expr()->eq('tag_id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)), - ); return $this->findEntities($qb); } diff --git a/lib/Db/Provisioning.php b/lib/Db/Provisioning.php index 8d85c6d153..31e0a22081 100644 --- a/lib/Db/Provisioning.php +++ b/lib/Db/Provisioning.php @@ -145,9 +145,7 @@ public function buildEmail(IUser $user) { * @return string */ private function buildUserEmail(string $original, IUser $user) { - if ($user->getUID() !== null) { - $original = str_replace('%USERID%', $user->getUID(), $original); - } + $original = str_replace('%USERID%', $user->getUID(), $original); if ($user->getEMailAddress() !== null) { $original = str_replace('%EMAIL%', $user->getEMailAddress(), $original); } diff --git a/lib/Db/ProvisioningMapper.php b/lib/Db/ProvisioningMapper.php index dac9b0520c..deb46d7263 100644 --- a/lib/Db/ProvisioningMapper.php +++ b/lib/Db/ProvisioningMapper.php @@ -20,12 +20,11 @@ * @template-extends QBMapper */ class ProvisioningMapper extends QBMapper { - /** @var LoggerInterface */ - private $logger; - - public function __construct(IDBConnection $db, LoggerInterface $logger) { + public function __construct( + IDBConnection $db, + private LoggerInterface $logger, + ) { parent::__construct($db, 'mail_provisionings'); - $this->logger = $logger; } /** diff --git a/lib/Db/TextBlockShareMapper.php b/lib/Db/TextBlockShareMapper.php index 354e568cab..42567a4ef9 100644 --- a/lib/Db/TextBlockShareMapper.php +++ b/lib/Db/TextBlockShareMapper.php @@ -96,5 +96,4 @@ public function deleteByTextBlockId(int $textBlockId): void { ); } - } diff --git a/lib/Events/BeforeImapClientCreated.php b/lib/Events/BeforeImapClientCreated.php index 436468e696..28ab55e2dd 100644 --- a/lib/Events/BeforeImapClientCreated.php +++ b/lib/Events/BeforeImapClientCreated.php @@ -13,12 +13,10 @@ use OCP\EventDispatcher\Event; class BeforeImapClientCreated extends Event { - /** @var Account */ - private $account; - - public function __construct(Account $account) { + public function __construct( + private Account $account, + ) { parent::__construct(); - $this->account = $account; } /** diff --git a/lib/Events/BeforeMessageDeletedEvent.php b/lib/Events/BeforeMessageDeletedEvent.php index 41d33c303b..3815d0a094 100644 --- a/lib/Events/BeforeMessageDeletedEvent.php +++ b/lib/Events/BeforeMessageDeletedEvent.php @@ -13,20 +13,15 @@ use OCP\EventDispatcher\Event; class BeforeMessageDeletedEvent extends Event { - /** @var Account */ - private $account; + private string $folderId; - /** @var string */ - private $folderId; - - /** @var int */ - private $messageId; - - public function __construct(Account $account, string $mailbox, int $messageId) { + public function __construct( + private Account $account, + string $mailbox, + private int $messageId, + ) { parent::__construct(); - $this->account = $account; $this->folderId = $mailbox; - $this->messageId = $messageId; } public function getAccount(): Account { diff --git a/lib/Events/DraftMessageCreatedEvent.php b/lib/Events/DraftMessageCreatedEvent.php index c96deedf93..3022b3915d 100644 --- a/lib/Events/DraftMessageCreatedEvent.php +++ b/lib/Events/DraftMessageCreatedEvent.php @@ -17,17 +17,11 @@ * @psalm-immutable */ class DraftMessageCreatedEvent extends Event { - /** @var Account */ - private $account; - - /** @var Message */ - private $draft; - - public function __construct(Account $account, - Message $draft) { + public function __construct( + private Account $account, + private Message $draft, + ) { parent::__construct(); - $this->account = $account; - $this->draft = $draft; } public function getAccount(): Account { diff --git a/lib/Events/DraftSavedEvent.php b/lib/Events/DraftSavedEvent.php index 747ae00f6b..695e25aa3e 100644 --- a/lib/Events/DraftSavedEvent.php +++ b/lib/Events/DraftSavedEvent.php @@ -15,22 +15,12 @@ use OCP\EventDispatcher\Event; class DraftSavedEvent extends Event { - /** @var Account */ - private $account; - - /** @var NewMessageData|null */ - private $newMessageData; - - /** @var Message|null */ - private $draft; - - public function __construct(Account $account, - ?NewMessageData $newMessageData = null, - ?Message $draft = null) { + public function __construct( + private Account $account, + private ?NewMessageData $newMessageData = null, + private ?Message $draft = null, + ) { parent::__construct(); - $this->account = $account; - $this->newMessageData = $newMessageData; - $this->draft = $draft; } public function getAccount(): Account { diff --git a/lib/Events/MailboxesSynchronizedEvent.php b/lib/Events/MailboxesSynchronizedEvent.php index 5ffa94c3b4..2e8cf20347 100644 --- a/lib/Events/MailboxesSynchronizedEvent.php +++ b/lib/Events/MailboxesSynchronizedEvent.php @@ -16,12 +16,10 @@ * @psalm-immutable */ class MailboxesSynchronizedEvent extends Event { - /** @var Account */ - private $account; - - public function __construct(Account $account) { + public function __construct( + private Account $account, + ) { parent::__construct(); - $this->account = $account; } public function getAccount(): Account { diff --git a/lib/Events/MessageDeletedEvent.php b/lib/Events/MessageDeletedEvent.php index 311966d9b8..de3af4c575 100644 --- a/lib/Events/MessageDeletedEvent.php +++ b/lib/Events/MessageDeletedEvent.php @@ -14,22 +14,12 @@ use OCP\EventDispatcher\Event; class MessageDeletedEvent extends Event { - /** @var Account */ - private $account; - - /** @var Mailbox */ - private $mailbox; - - /** @var int */ - private $messageId; - - public function __construct(Account $account, - Mailbox $mailbox, - int $messageId) { + public function __construct( + private Account $account, + private Mailbox $mailbox, + private int $messageId, + ) { parent::__construct(); - $this->account = $account; - $this->mailbox = $mailbox; - $this->messageId = $messageId; } public function getAccount(): Account { diff --git a/lib/Events/MessageFlaggedEvent.php b/lib/Events/MessageFlaggedEvent.php index 3fbafddd1f..2707d812c4 100644 --- a/lib/Events/MessageFlaggedEvent.php +++ b/lib/Events/MessageFlaggedEvent.php @@ -14,32 +14,14 @@ use OCP\EventDispatcher\Event; class MessageFlaggedEvent extends Event { - /** @var Account */ - private $account; - - /** @var Mailbox */ - private $mailbox; - - /** @var int */ - private $uid; - - /** @var string */ - private $flag; - - /** @var bool */ - private $set; - - public function __construct(Account $account, - Mailbox $mailbox, - int $uid, - string $flag, - bool $set) { + public function __construct( + private Account $account, + private Mailbox $mailbox, + private int $uid, + private string $flag, + private bool $set, + ) { parent::__construct(); - $this->account = $account; - $this->mailbox = $mailbox; - $this->uid = $uid; - $this->flag = $flag; - $this->set = $set; } public function getAccount(): Account { diff --git a/lib/Events/MessageSentEvent.php b/lib/Events/MessageSentEvent.php index b51ff7cfc8..735ea67fbe 100644 --- a/lib/Events/MessageSentEvent.php +++ b/lib/Events/MessageSentEvent.php @@ -17,15 +17,11 @@ * @psalm-immutable */ class MessageSentEvent extends Event { - /** @var Account */ - private $account; - public function __construct( - Account $account, + private Account $account, private LocalMessage $localMessage, ) { parent::__construct(); - $this->account = $account; } public function getAccount(): Account { diff --git a/lib/Events/NewMessagesSynchronized.php b/lib/Events/NewMessagesSynchronized.php index aa77cac3b1..eed9bb9edd 100644 --- a/lib/Events/NewMessagesSynchronized.php +++ b/lib/Events/NewMessagesSynchronized.php @@ -15,27 +15,17 @@ use OCP\EventDispatcher\Event; class NewMessagesSynchronized extends Event { - /** @var Account */ - private $account; - - /** @var Mailbox */ - private $mailbox; - - /** @var array|Message[] */ - private $messages; - /** * @param Account $account * @param Mailbox $mailbox * @param Message[] $messages */ - public function __construct(Account $account, - Mailbox $mailbox, - array $messages) { + public function __construct( + private Account $account, + private Mailbox $mailbox, + private array $messages, + ) { parent::__construct(); - $this->account = $account; - $this->mailbox = $mailbox; - $this->messages = $messages; } public function getAccount(): Account { diff --git a/lib/Events/OutboxMessageCreatedEvent.php b/lib/Events/OutboxMessageCreatedEvent.php index 098b76843d..8bf1d9798b 100644 --- a/lib/Events/OutboxMessageCreatedEvent.php +++ b/lib/Events/OutboxMessageCreatedEvent.php @@ -17,17 +17,11 @@ * @psalm-immutable */ class OutboxMessageCreatedEvent extends Event { - /** @var Account */ - private $account; - - /** @var Message */ - private $draft; - - public function __construct(Account $account, - Message $draft) { + public function __construct( + private Account $account, + private Message $draft, + ) { parent::__construct(); - $this->account = $account; - $this->draft = $draft; } public function getAccount(): Account { diff --git a/lib/Events/SaveDraftEvent.php b/lib/Events/SaveDraftEvent.php index 634332d84c..ce9f1f7eca 100644 --- a/lib/Events/SaveDraftEvent.php +++ b/lib/Events/SaveDraftEvent.php @@ -15,22 +15,12 @@ use OCP\EventDispatcher\Event; class SaveDraftEvent extends Event { - /** @var Account */ - private $account; - - /** @var NewMessageData */ - private $newMessageData; - - /** @var Message|null */ - private $draft; - - public function __construct(Account $account, - NewMessageData $newMessageData, - ?Message $draft) { + public function __construct( + private Account $account, + private NewMessageData $newMessageData, + private ?Message $draft, + ) { parent::__construct(); - $this->account = $account; - $this->newMessageData = $newMessageData; - $this->draft = $draft; } public function getAccount(): Account { diff --git a/lib/Events/SynchronizationEvent.php b/lib/Events/SynchronizationEvent.php index 26392dd7a6..55e96f6358 100644 --- a/lib/Events/SynchronizationEvent.php +++ b/lib/Events/SynchronizationEvent.php @@ -14,23 +14,12 @@ use Psr\Log\LoggerInterface; class SynchronizationEvent extends Event { - /** @var Account */ - private $account; - - /** @var LoggerInterface */ - private $logger; - - /** @var bool */ - private $rebuildThreads; - - public function __construct(Account $account, - LoggerInterface $logger, - bool $rebuildThreads) { + public function __construct( + private Account $account, + private LoggerInterface $logger, + private bool $rebuildThreads, + ) { parent::__construct(); - - $this->account = $account; - $this->logger = $logger; - $this->rebuildThreads = $rebuildThreads; } public function getAccount(): Account { diff --git a/lib/Exception/CouldNotConnectException.php b/lib/Exception/CouldNotConnectException.php index 410135a218..8791faa544 100644 --- a/lib/Exception/CouldNotConnectException.php +++ b/lib/Exception/CouldNotConnectException.php @@ -63,18 +63,15 @@ public function getReason(): string { return 'OTHER'; } - switch ($this->previous->getCode()) { - case Horde_Imap_Client_Exception::LOGIN_AUTHENTICATIONFAILED: - return match ($this->previous->getMessage()) { - 'Authentication failed.' => 'AUTHENTICATION_WRONG_PASSWORD', - 'Mail server denied authentication.' => 'AUTHENTICATION_DENIED', - default => 'AUTHENTICATION', - }; - case Horde_Imap_Client_Exception::SERVER_CONNECT: - case Horde_Imap_Client_Exception::SERVER_READERROR: - return 'CONNECTION_ERROR'; - default: - return 'OTHER'; - } + return match ($this->previous->getCode()) { + Horde_Imap_Client_Exception::LOGIN_AUTHENTICATIONFAILED => match ($this->previous->getMessage()) { + 'Authentication failed.' => 'AUTHENTICATION_WRONG_PASSWORD', + 'Mail server denied authentication.' => 'AUTHENTICATION_DENIED', + default => 'AUTHENTICATION', + }, + Horde_Imap_Client_Exception::SERVER_CONNECT, + Horde_Imap_Client_Exception::SERVER_READERROR => 'CONNECTION_ERROR', + default => 'OTHER', + }; } } diff --git a/lib/Exception/DelegationExistsException.php b/lib/Exception/DelegationExistsException.php new file mode 100644 index 0000000000..de14e81a4a --- /dev/null +++ b/lib/Exception/DelegationExistsException.php @@ -0,0 +1,18 @@ +mailbox = $mailbox; - $this->attributes = $attributes; - $this->delimiter = $delimiter; - $this->status = $status; + public function __construct( + private Horde_Imap_Client_Mailbox $mailbox, + private array $attributes, + /** @var string */ + private ?string $delimiter, + private ?array $status, + ) { $this->specialUse = []; $this->myAcls = null; } diff --git a/lib/HordeTranslationHandler.php b/lib/HordeTranslationHandler.php index 8eeaba8cdb..4022ddd4be 100644 --- a/lib/HordeTranslationHandler.php +++ b/lib/HordeTranslationHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2014-2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ + namespace OCA\Mail; use Horde_Translation_Handler; diff --git a/lib/Http/AttachmentDownloadResponse.php b/lib/Http/AttachmentDownloadResponse.php index 2788903604..15998d5211 100644 --- a/lib/Http/AttachmentDownloadResponse.php +++ b/lib/Http/AttachmentDownloadResponse.php @@ -17,9 +17,6 @@ * @todo spec template with 28+ */ class AttachmentDownloadResponse extends DownloadResponse { - /** @var string */ - private $content; - /** * Creates a response that prompts the user to download a file which * contains the passed string @@ -28,10 +25,12 @@ class AttachmentDownloadResponse extends DownloadResponse { * @param string $filename the name that the downloaded file should have * @param string $contentType the mimetype that the downloaded file should have */ - public function __construct(string $content, string $filename, string $contentType) { + public function __construct( + private string $content, + string $filename, + string $contentType, + ) { parent::__construct($filename, $contentType); - - $this->content = $content; } /** diff --git a/lib/Http/AvatarDownloadResponse.php b/lib/Http/AvatarDownloadResponse.php index f13830415f..06db5e7ecc 100644 --- a/lib/Http/AvatarDownloadResponse.php +++ b/lib/Http/AvatarDownloadResponse.php @@ -16,13 +16,10 @@ * @todo spec template with 28+ */ class AvatarDownloadResponse extends DownloadResponse { - /** @var string */ - private $content; - - public function __construct(string $content) { + public function __construct( + private string $content, + ) { parent::__construct('avatar', 'application/octet-stream'); - - $this->content = $content; } /** diff --git a/lib/Http/HtmlResponse.php b/lib/Http/HtmlResponse.php index 9be974edd2..faa111a020 100644 --- a/lib/Http/HtmlResponse.php +++ b/lib/Http/HtmlResponse.php @@ -17,33 +17,19 @@ * @todo spec template with 28+ */ class HtmlResponse extends Response { - /** @var string */ - private $content; - - /** @var bool */ - private $plain; - - /** @var string|null */ - private $nonce; - - /** @var string|null */ - private $scriptUrl; - /** * @param string $content message html content * @param bool $plain do not inject scripts if true (default=false) * @param string|null $nonce * @param string|null $scriptUrl */ - private function __construct(string $content, - bool $plain = false, - ?string $nonce = null, - ?string $scriptUrl = null) { + private function __construct( + private string $content, + private bool $plain = false, + private ?string $nonce = null, + private ?string $scriptUrl = null, + ) { parent::__construct(); - $this->content = $content; - $this->plain = $plain; - $this->nonce = $nonce; - $this->scriptUrl = $scriptUrl; } public static function plain(string $content): self { diff --git a/lib/Http/JsonResponse.php b/lib/Http/JsonResponse.php index e1a0300a6b..6d3b8143de 100644 --- a/lib/Http/JsonResponse.php +++ b/lib/Http/JsonResponse.php @@ -107,7 +107,7 @@ public static function error(string $message, * @param Http::STATUS_* $status * @param array|JsonSerializable|bool|string $data * - * @return static + * @return self */ public static function errorFromThrowable(Throwable $error, int $status = Http::STATUS_INTERNAL_SERVER_ERROR, diff --git a/lib/Http/Middleware/ErrorMiddleware.php b/lib/Http/Middleware/ErrorMiddleware.php index 9c96729c5f..8e0999759d 100644 --- a/lib/Http/Middleware/ErrorMiddleware.php +++ b/lib/Http/Middleware/ErrorMiddleware.php @@ -27,9 +27,6 @@ use Throwable; class ErrorMiddleware extends Middleware { - /** @var LoggerInterface */ - private $logger; - /** @var IConfig */ private $config; @@ -37,10 +34,11 @@ class ErrorMiddleware extends Middleware { * @param IConfig $config * @param LoggerInterface $logger */ - public function __construct(IConfig $config, - LoggerInterface $logger) { + public function __construct( + IConfig $config, + private LoggerInterface $logger, + ) { $this->config = $config; - $this->logger = $logger; } /** diff --git a/lib/Http/Middleware/ProvisioningMiddleware.php b/lib/Http/Middleware/ProvisioningMiddleware.php index 2b7bff8cb4..7e5591a049 100644 --- a/lib/Http/Middleware/ProvisioningMiddleware.php +++ b/lib/Http/Middleware/ProvisioningMiddleware.php @@ -23,15 +23,13 @@ class ProvisioningMiddleware extends Middleware { /** @var ICredentialStore */ private $credentialStore; - /** @var ProvisioningManager */ - private $provisioningManager; - - public function __construct(IUserSession $userSession, + public function __construct( + IUserSession $userSession, ICredentialStore $credentialStore, - ProvisioningManager $provisioningManager) { + private ProvisioningManager $provisioningManager, + ) { $this->userSession = $userSession; $this->credentialStore = $credentialStore; - $this->provisioningManager = $provisioningManager; } #[\Override] diff --git a/lib/Http/ProxyDownloadResponse.php b/lib/Http/ProxyDownloadResponse.php index b4961a7522..52d12101b2 100644 --- a/lib/Http/ProxyDownloadResponse.php +++ b/lib/Http/ProxyDownloadResponse.php @@ -18,9 +18,6 @@ * @todo spec template with 28+ */ class ProxyDownloadResponse extends DownloadResponse { - /** @var string */ - private $content; - /** * Creates a response that prompts the user to download a file which * contains the passed string @@ -31,11 +28,13 @@ class ProxyDownloadResponse extends DownloadResponse { * @param string $filename the name that the downloaded file should have * @param string $contentType the mimetype that the downloaded file should have */ - public function __construct(string $content, string $filename, string $contentType) { + public function __construct( + private string $content, + string $filename, + string $contentType, + ) { parent::__construct($filename, $contentType); - $this->content = $content; - $now = (new DateTime('now'))->getTimestamp(); $expires = (new DateTime('now + 11 months'))->getTimestamp(); $this->cacheFor($expires - $now, false, true); diff --git a/lib/IMAP/FolderMapper.php b/lib/IMAP/FolderMapper.php index e065368d25..e8b5d1857b 100644 --- a/lib/IMAP/FolderMapper.php +++ b/lib/IMAP/FolderMapper.php @@ -23,11 +23,9 @@ class FolderMapper { - /** @var LoggerInterface */ - private $logger; - - public function __construct(LoggerInterface $logger) { - $this->logger = $logger; + public function __construct( + private LoggerInterface $logger, + ) { } /** * This is a temporary workaround for when the sieve folder is a subfolder of diff --git a/lib/IMAP/HordeImapClient.php b/lib/IMAP/HordeImapClient.php index a962fed53b..b9701becce 100644 --- a/lib/IMAP/HordeImapClient.php +++ b/lib/IMAP/HordeImapClient.php @@ -28,11 +28,12 @@ class HordeImapClient extends Horde_Imap_Client_Socket { private ?IMemcache $rateLimiterCache = null; private ?ITimeFactory $timeFactory = null; private ?string $hash = null; - private IMAPClientFactory $factory; - public function __construct(array $params, IMAPClientFactory $factory) { + public function __construct( + array $params, + private IMAPClientFactory $factory, + ) { parent::__construct($params); - $this->factory = $factory; } public function enableRateLimiter( @@ -47,9 +48,10 @@ public function enableRateLimiter( #[\Override] public function login() { + $initiallyAutheticated = $this->_isAuthenticated; parent::login(); - if ($this->capability->query('ID')) { + if ($initiallyAutheticated === false && $this->capability->query('ID')) { try { $this->sendID(); /* ID is queued - force sending the queued command. */ @@ -91,7 +93,7 @@ protected function _login() { return $this->imapLogin(); } catch (Horde_Imap_Client_Exception $e) { if ($e->getCode() === Horde_Imap_Client_Exception::LOGIN_AUTHENTICATIONFAILED - && $e->getMessage() === 'Authentication failed.') { + && in_array($e->getMessage(), ['Authentication failed.', 'Mail server denied authentication.'], true)) { $this->rateLimiterCache->inc($cacheKey); if ($this->rateLimiterCache instanceof IMemcacheTTL) { $this->rateLimiterCache->setTTL($cacheKey, self::RATE_LIMIT_WINDOW); diff --git a/lib/IMAP/IMAPClientFactory.php b/lib/IMAP/IMAPClientFactory.php index 2829bd54d6..40b86bfcca 100644 --- a/lib/IMAP/IMAPClientFactory.php +++ b/lib/IMAP/IMAPClientFactory.php @@ -43,20 +43,20 @@ class IMAPClientFactory { private $eventDispatcher; private ITimeFactory $timeFactory; - private HordeCacheFactory $hordeCacheFactory; - public function __construct(ICrypto $crypto, + public function __construct( + ICrypto $crypto, IConfig $config, ICacheFactory $cacheFactory, IEventDispatcher $eventDispatcher, ITimeFactory $timeFactory, - HordeCacheFactory $hordeCacheFactory) { + private HordeCacheFactory $hordeCacheFactory, + ) { $this->crypto = $crypto; $this->config = $config; $this->cacheFactory = $cacheFactory; $this->eventDispatcher = $eventDispatcher; $this->timeFactory = $timeFactory; - $this->hordeCacheFactory = $hordeCacheFactory; } /** diff --git a/lib/IMAP/ImapMessageFetcher.php b/lib/IMAP/ImapMessageFetcher.php index 2407d82fe3..71ff349e50 100644 --- a/lib/IMAP/ImapMessageFetcher.php +++ b/lib/IMAP/ImapMessageFetcher.php @@ -40,17 +40,9 @@ class ImapMessageFetcher { /** @var string[] */ private array $attachmentsToIgnore = ['signature.asc', 'smime.p7s']; - private Html $htmlService; - private SmimeService $smimeService; - private PhishingDetectionService $phishingDetectionService; - private string $userId; - private bool $runPhishingCheck = false; // Conditional fetching/parsing private bool $loadBody = false; - - private int $uid; - private Horde_Imap_Client_Base $client; private string $htmlMessage = ''; private string $plainMessage = ''; /** @var list */ @@ -60,7 +52,6 @@ class ImapMessageFetcher { private bool $hasAnyAttachment = false; private array $scheduling = []; private bool $hasHtmlMessage = false; - private string $mailbox; private string $rawReferences = ''; private string $dispositionNotificationTo = ''; private bool $hasDkimSignature = false; @@ -71,25 +62,17 @@ class ImapMessageFetcher { private bool $isPgpMimeEncrypted = false; public function __construct( - int $uid, - string $mailbox, - Horde_Imap_Client_Base $client, - string $userId, - Html $htmlService, - SmimeService $smimeService, + private int $uid, + private string $mailbox, + private Horde_Imap_Client_Base $client, + private string $userId, + private Html $htmlService, + private SmimeService $smimeService, private Converter $converter, - PhishingDetectionService $phishingDetectionService, + private PhishingDetectionService $phishingDetectionService, ) { - $this->uid = $uid; - $this->mailbox = $mailbox; - $this->client = $client; - $this->userId = $userId; - $this->htmlService = $htmlService; - $this->smimeService = $smimeService; - $this->phishingDetectionService = $phishingDetectionService; } - /** * Configure the fetcher to fetch the body of the message. * @@ -186,7 +169,6 @@ public function fetchMessage(?Horde_Imap_Client_Data_Fetch $fetch = null): IMAPM throw new DoesNotExistException("This email ($this->uid) can't be found. Probably it was deleted from the server recently. Please reload."); } - $decryptionResult = $this->smimeService->decryptDataFetch($fullTextFetch, $this->userId); $isSigned = $decryptionResult->isSigned(); $signatureIsValid = $decryptionResult->isSignatureValid(); @@ -360,11 +342,20 @@ private function getPart(Horde_Mime_Part $p, string $partNo, bool $isFetched): v } // Inline attachments - // Horde doesn't consider parts with content-disposition set to inline as - // attachment so we need to use another way to get them. - // We use these inline attachments to render a message's html body in $this->getHtmlBody() + // Horde doesn't consider parts with content-disposition set to inline as attachments, + // so we detect them ourselves to render the message's html body in $this->getHtmlBody(). + // A part qualifies when it has a filename, is an embedded message, or carries a Content-ID. + // The Content-ID case covers clients (e.g. IBM Notes/HCL Domino) that reference inline + // images solely by Content-ID, without a filename or content-disposition. text/* and + // multipart parts are excluded from it so the body parts still reach the handlers below. $filename = $p->getName(); - if ($p->getType() === 'message/rfc822' || isset($filename)) { + $primaryType = $p->getPrimaryType(); + + $hasContentId = $p->getContentId() !== null && !in_array($primaryType, ['text', 'multipart'], true); + $hasFilename = isset($filename); + $isEmbeddedMessage = $p->getType() === 'message/rfc822'; + + if ($hasContentId || $hasFilename || $isEmbeddedMessage) { if (in_array($filename, $this->attachmentsToIgnore)) { return; } @@ -380,7 +371,7 @@ private function getPart(Horde_Mime_Part $p, string $partNo, bool $isFetched): v return; } - if ($p->getPrimaryType() === 'multipart') { + if ($primaryType === 'multipart') { $this->handleMultiPartMessage($p, $partNo, $isFetched); return; } diff --git a/lib/IMAP/ImapMessageFetcherFactory.php b/lib/IMAP/ImapMessageFetcherFactory.php index 4ef56b103e..1cb254d9c1 100644 --- a/lib/IMAP/ImapMessageFetcherFactory.php +++ b/lib/IMAP/ImapMessageFetcherFactory.php @@ -16,19 +16,12 @@ use OCA\Mail\Service\SmimeService; class ImapMessageFetcherFactory { - private Html $htmlService; - private SmimeService $smimeService; - private Converter $charsetConverter; - private PhishingDetectionService $phishingDetectionService; - - public function __construct(Html $htmlService, - SmimeService $smimeService, - Converter $charsetConverter, - PhishingDetectionService $phishingDetectionService) { - $this->htmlService = $htmlService; - $this->smimeService = $smimeService; - $this->charsetConverter = $charsetConverter; - $this->phishingDetectionService = $phishingDetectionService; + public function __construct( + private Html $htmlService, + private SmimeService $smimeService, + private Converter $charsetConverter, + private PhishingDetectionService $phishingDetectionService, + ) { } public function build(int $uid, diff --git a/lib/IMAP/MailboxStats.php b/lib/IMAP/MailboxStats.php index eb5d08ad14..829d6aace1 100644 --- a/lib/IMAP/MailboxStats.php +++ b/lib/IMAP/MailboxStats.php @@ -13,12 +13,10 @@ use ReturnTypeWillChange; final class MailboxStats implements JsonSerializable { - private int $total; - private int $unread; - - public function __construct(int $total, int $unread) { - $this->total = $total; - $this->unread = $unread; + public function __construct( + private int $total, + private int $unread, + ) { } public function getTotal(): int { diff --git a/lib/IMAP/MailboxSync.php b/lib/IMAP/MailboxSync.php index d346b26304..cd419eea65 100644 --- a/lib/IMAP/MailboxSync.php +++ b/lib/IMAP/MailboxSync.php @@ -39,18 +39,6 @@ class MailboxSync { use TTransactional; - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var FolderMapper */ - private $folderMapper; - - /** @var MailAccountMapper */ - private $mailAccountMapper; - - /** @var IMAPClientFactory */ - private $imapClientFactory; - /** @var ITimeFactory */ private $timeFactory; @@ -58,17 +46,15 @@ class MailboxSync { private $dispatcher; private IDBConnection $dbConnection; - public function __construct(MailboxMapper $mailboxMapper, - FolderMapper $folderMapper, - MailAccountMapper $mailAccountMapper, - IMAPClientFactory $imapClientFactory, + public function __construct( + private MailboxMapper $mailboxMapper, + private FolderMapper $folderMapper, + private MailAccountMapper $mailAccountMapper, + private IMAPClientFactory $imapClientFactory, ITimeFactory $timeFactory, IEventDispatcher $dispatcher, - IDBConnection $dbConnection) { - $this->mailboxMapper = $mailboxMapper; - $this->folderMapper = $folderMapper; - $this->mailAccountMapper = $mailAccountMapper; - $this->imapClientFactory = $imapClientFactory; + IDBConnection $dbConnection, + ) { $this->timeFactory = $timeFactory; $this->dispatcher = $dispatcher; $this->dbConnection = $dbConnection; diff --git a/lib/IMAP/MessageMapper.php b/lib/IMAP/MessageMapper.php index f63c28f9b6..ac657cb2c5 100644 --- a/lib/IMAP/MessageMapper.php +++ b/lib/IMAP/MessageMapper.php @@ -50,21 +50,12 @@ use function sprintf; class MessageMapper { - /** @var LoggerInterface */ - private $logger; - - private SMimeService $smimeService; - private ImapMessageFetcherFactory $imapMessageFactory; - public function __construct( - LoggerInterface $logger, - SmimeService $smimeService, - ImapMessageFetcherFactory $imapMessageFactory, + private LoggerInterface $logger, + private SMimeService $smimeService, + private ImapMessageFetcherFactory $imapMessageFactory, private Converter $converter, ) { - $this->logger = $logger; - $this->smimeService = $smimeService; - $this->imapMessageFactory = $imapMessageFactory; } /** @@ -986,7 +977,6 @@ public function getBodyStructureData(Horde_Imap_Client_Socket $client, return $this->converter->convert($structure); }; - $htmlBody = ($htmlBodyId !== null) ? $part->getBodyPart($htmlBodyId) : null; if (!empty($htmlBody)) { $htmlBody = $convertBody($htmlBodyId, $htmlBody); diff --git a/lib/IMAP/MessageStructureData.php b/lib/IMAP/MessageStructureData.php index ccb9a0bcb5..e2710b3b78 100644 --- a/lib/IMAP/MessageStructureData.php +++ b/lib/IMAP/MessageStructureData.php @@ -10,28 +10,13 @@ namespace OCA\Mail\IMAP; final class MessageStructureData { - /** @var bool */ - private $hasAttachments; - - /** @var string */ - private $previewText; - - /** @var bool */ - private $isImipMessage; - - private bool $isEncrypted; - private bool $mentionsMe; - - public function __construct(bool $hasAttachments, - string $previewText, - bool $isImipMessage, - bool $isEncrypted, - bool $mentionsMe) { - $this->hasAttachments = $hasAttachments; - $this->previewText = $previewText; - $this->isImipMessage = $isImipMessage; - $this->isEncrypted = $isEncrypted; - $this->mentionsMe = $mentionsMe; + public function __construct( + private bool $hasAttachments, + private string $previewText, + private bool $isImipMessage, + private bool $isEncrypted, + private bool $mentionsMe, + ) { } public function hasAttachments(): bool { diff --git a/lib/IMAP/PreviewEnhancer.php b/lib/IMAP/PreviewEnhancer.php index 36a1cc2d80..3f67545379 100644 --- a/lib/IMAP/PreviewEnhancer.php +++ b/lib/IMAP/PreviewEnhancer.php @@ -25,34 +25,14 @@ use function array_reduce; class PreviewEnhancer { - /** @var IMAPClientFactory */ - private $clientFactory; - - /** @var ImapMapper */ - private $imapMapper; - - /** @var DbMapper */ - private $mapper; - - /** @var LoggerInterface */ - private $logger; - - /** @var AvatarService */ - private $avatarService; - public function __construct( - IMAPClientFactory $clientFactory, - ImapMapper $imapMapper, - DbMapper $dbMapper, - LoggerInterface $logger, - AvatarService $avatarService, + private IMAPClientFactory $clientFactory, + private ImapMapper $imapMapper, + private DbMapper $mapper, + private LoggerInterface $logger, + private AvatarService $avatarService, private AttachmentService $attachmentService, ) { - $this->clientFactory = $clientFactory; - $this->imapMapper = $imapMapper; - $this->mapper = $dbMapper; - $this->logger = $logger; - $this->avatarService = $avatarService; } /** @@ -97,7 +77,6 @@ public function process(Account $account, Mailbox $mailbox, array $messages, boo return $messages; } - try { $data = $this->imapMapper->getBodyStructureData( $client, diff --git a/lib/IMAP/Search/Provider.php b/lib/IMAP/Search/Provider.php index 35133f14d2..aecfa50d2e 100644 --- a/lib/IMAP/Search/Provider.php +++ b/lib/IMAP/Search/Provider.php @@ -19,11 +19,9 @@ use function array_reduce; class Provider { - /** @var IMAPClientFactory */ - private $clientFactory; - - public function __construct(IMAPClientFactory $clientFactory) { - $this->clientFactory = $clientFactory; + public function __construct( + private IMAPClientFactory $clientFactory, + ) { } /** diff --git a/lib/IMAP/Sync/Request.php b/lib/IMAP/Sync/Request.php index cfd3c150fc..1dbbf7806f 100644 --- a/lib/IMAP/Sync/Request.php +++ b/lib/IMAP/Sync/Request.php @@ -10,27 +10,17 @@ namespace OCA\Mail\IMAP\Sync; final class Request { - private string $id; - - /** @var string */ - private $mailbox; - - /** @var string */ - private $syncToken; - - /** @var array */ - private $uids; - /** * @param string $mailbox * @param string $syncToken * @param int[] $uids */ - public function __construct(string $id, string $mailbox, string $syncToken, array $uids) { - $this->id = $id; - $this->mailbox = $mailbox; - $this->syncToken = $syncToken; - $this->uids = $uids; + public function __construct( + private string $id, + private string $mailbox, + private string $syncToken, + private array $uids, + ) { } /** diff --git a/lib/IMAP/Sync/Response.php b/lib/IMAP/Sync/Response.php index c69148683d..3a5a0d4b18 100644 --- a/lib/IMAP/Sync/Response.php +++ b/lib/IMAP/Sync/Response.php @@ -17,32 +17,18 @@ * @psalm-template T */ final class Response implements JsonSerializable { - /** @var T[] */ - private $newMessages; - - /** @var T[] */ - private $changedMessages; - - /** @var int[] */ - private $vanishedMessageUids; - - /** @var MailboxStats */ - private $stats; - /** * @param T[] $newMessages * @param T[] $changedMessages * @param int[] $vanishedMessageUids * @param MailboxStats|null $stats */ - public function __construct(array $newMessages, - array $changedMessages, - array $vanishedMessageUids, - ?MailboxStats $stats = null) { - $this->newMessages = $newMessages; - $this->changedMessages = $changedMessages; - $this->vanishedMessageUids = $vanishedMessageUids; - $this->stats = $stats; + public function __construct( + private array $newMessages, + private array $changedMessages, + private array $vanishedMessageUids, + private ?MailboxStats $stats = null, + ) { } /** @@ -66,10 +52,7 @@ public function getVanishedMessageUids(): array { return $this->vanishedMessageUids; } - /** - * @return MailboxStats - */ - public function getStats(): MailboxStats { + public function getStats(): ?MailboxStats { return $this->stats; } diff --git a/lib/IMAP/Sync/Synchronizer.php b/lib/IMAP/Sync/Synchronizer.php index aa87328586..a88859d2d5 100644 --- a/lib/IMAP/Sync/Synchronizer.php +++ b/lib/IMAP/Sync/Synchronizer.php @@ -32,14 +32,12 @@ class Synchronizer { */ private const UID_CHUNK_MAX_BYTES = 10000; - /** @var MessageMapper */ - private $messageMapper; - private ?string $requestId = null; private ?Response $response = null; - public function __construct(MessageMapper $messageMapper) { - $this->messageMapper = $messageMapper; + public function __construct( + private MessageMapper $messageMapper, + ) { } /** diff --git a/lib/IMAP/Threading/Container.php b/lib/IMAP/Threading/Container.php index 53e7c4e02b..b7cbf112f0 100644 --- a/lib/IMAP/Threading/Container.php +++ b/lib/IMAP/Threading/Container.php @@ -16,27 +16,17 @@ use function spl_object_id; final class Container implements JsonSerializable { - /** @var Message|null */ - private $message; - - /** @var string|null */ - private $id; - - /** @var bool */ - private $root; - /** @var Container|null */ private $parent; /** @var Container[] */ private $children = []; - private function __construct(?Message $message, - ?string $id = null, - bool $root = false) { - $this->message = $message; - $this->id = $id; - $this->root = $root; + private function __construct( + private ?Message $message, + private ?string $id = null, + private bool $root = false, + ) { } public static function root(): self { diff --git a/lib/IMAP/Threading/DatabaseMessage.php b/lib/IMAP/Threading/DatabaseMessage.php index f6910f8f6e..e09ac46343 100644 --- a/lib/IMAP/Threading/DatabaseMessage.php +++ b/lib/IMAP/Threading/DatabaseMessage.php @@ -16,24 +16,17 @@ use function json_decode; final class DatabaseMessage extends Message implements JsonSerializable { - /** @var int */ - private $databaseId; - - /** @var string|null */ - private $threadRootId; - /** @var bool */ private $dirty = false; - public function __construct(int $databaseId, + public function __construct( + private int $databaseId, string $subject, string $id, array $references, - ?string $threadRootId) { + private ?string $threadRootId, + ) { parent::__construct($subject, $id, $references); - - $this->databaseId = $databaseId; - $this->threadRootId = $threadRootId; } public static function fromRowData(int $id, diff --git a/lib/IMAP/Threading/Message.php b/lib/IMAP/Threading/Message.php index cb443b51fd..df961cf5e0 100644 --- a/lib/IMAP/Threading/Message.php +++ b/lib/IMAP/Threading/Message.php @@ -14,24 +14,14 @@ use function str_replace; class Message implements JsonSerializable { - /** @var string */ - private $subject; - - /** @var string */ - private $id; - - /** @var string[] */ - private $references; - /** * @param string[] $references */ - public function __construct(string $subject, - string $id, - array $references) { - $this->subject = $subject; - $this->id = $id; - $this->references = $references; + public function __construct( + private string $subject, + private string $id, + private array $references, + ) { } public function hasReSubject(): bool { diff --git a/lib/IMAP/Threading/ThreadBuilder.php b/lib/IMAP/Threading/ThreadBuilder.php index 1c649a8806..09ce311da4 100644 --- a/lib/IMAP/Threading/ThreadBuilder.php +++ b/lib/IMAP/Threading/ThreadBuilder.php @@ -15,11 +15,9 @@ use function count; class ThreadBuilder { - /** @var PerformanceLogger */ - private $performanceLogger; - - public function __construct(PerformanceLogger $performanceLogger) { - $this->performanceLogger = $performanceLogger; + public function __construct( + private PerformanceLogger $performanceLogger, + ) { } /** diff --git a/lib/Integration/GoogleIntegration.php b/lib/Integration/GoogleIntegration.php index fd9f39999a..daa28ea682 100644 --- a/lib/Integration/GoogleIntegration.php +++ b/lib/Integration/GoogleIntegration.php @@ -27,20 +27,20 @@ class GoogleIntegration { private ICrypto $crypto; private IClientService $clientService; private IURLGenerator $urlGenerator; - private LoggerInterface $logger; - public function __construct(ITimeFactory $timeFactory, + public function __construct( + ITimeFactory $timeFactory, IConfig $config, ICrypto $crypto, IClientService $clientService, IURLGenerator $urlGenerator, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { $this->timeFactory = $timeFactory; $this->clientService = $clientService; $this->crypto = $crypto; $this->config = $config; $this->urlGenerator = $urlGenerator; - $this->logger = $logger; } public function configure(string $clientId, string $clientSecret): void { diff --git a/lib/Integration/KItinerary/ItineraryExtractor.php b/lib/Integration/KItinerary/ItineraryExtractor.php index 869cd71b63..90c470e546 100644 --- a/lib/Integration/KItinerary/ItineraryExtractor.php +++ b/lib/Integration/KItinerary/ItineraryExtractor.php @@ -19,29 +19,15 @@ use Psr\Log\LoggerInterface; class ItineraryExtractor { - /** @var BinaryAdapter */ - private $binAdapter; - - /** @var FlatpakAdapter */ - private $flatpakAdapter; - - /** @var LoggerInterface */ - private $logger; - - /** @var SysAdapter */ - private $sysAdapter; - /** @var Adapter */ private $adapter; - public function __construct(BinaryAdapter $binAdapter, - FlatpakAdapter $flatpakAdapter, - SysAdapter $sysAdapter, - LoggerInterface $logger) { - $this->binAdapter = $binAdapter; - $this->flatpakAdapter = $flatpakAdapter; - $this->sysAdapter = $sysAdapter; - $this->logger = $logger; + public function __construct( + private BinaryAdapter $binAdapter, + private FlatpakAdapter $flatpakAdapter, + private SysAdapter $sysAdapter, + private LoggerInterface $logger, + ) { } private function findAvailableAdapter(): ?Adapter { diff --git a/lib/Integration/MicrosoftIntegration.php b/lib/Integration/MicrosoftIntegration.php index 09d1d56902..ef03440a53 100644 --- a/lib/Integration/MicrosoftIntegration.php +++ b/lib/Integration/MicrosoftIntegration.php @@ -26,20 +26,20 @@ class MicrosoftIntegration { private ICrypto $crypto; private IClientService $clientService; private IURLGenerator $urlGenerator; - private LoggerInterface $logger; - public function __construct(ITimeFactory $timeFactory, + public function __construct( + ITimeFactory $timeFactory, IConfig $config, ICrypto $crypto, IClientService $clientService, IURLGenerator $urlGenerator, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { $this->timeFactory = $timeFactory; $this->clientService = $clientService; $this->crypto = $crypto; $this->config = $config; $this->urlGenerator = $urlGenerator; - $this->logger = $logger; } public function configure(?string $tenantId, string $clientId, string $clientSecret): void { diff --git a/lib/Listener/AccountSynchronizedThreadUpdaterListener.php b/lib/Listener/AccountSynchronizedThreadUpdaterListener.php index a74277a702..1e21cb4c87 100644 --- a/lib/Listener/AccountSynchronizedThreadUpdaterListener.php +++ b/lib/Listener/AccountSynchronizedThreadUpdaterListener.php @@ -18,7 +18,6 @@ use OCA\Mail\IMAP\Threading\ThreadBuilder; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; - use function array_chunk; use function gc_collect_cycles; use function iterator_to_array; diff --git a/lib/Listener/AddressCollectionListener.php b/lib/Listener/AddressCollectionListener.php index 5e65bd288c..42d7c853ce 100644 --- a/lib/Listener/AddressCollectionListener.php +++ b/lib/Listener/AddressCollectionListener.php @@ -23,24 +23,12 @@ * @template-implements IEventListener */ class AddressCollectionListener implements IEventListener { - /** @var IUserPreferences */ - private $preferences; - - /** @var AddressCollector */ - private $collector; - - /** @var LoggerInterface */ - private $logger; - public function __construct( - IUserPreferences $preferences, - AddressCollector $collector, - LoggerInterface $logger, + private IUserPreferences $preferences, + private AddressCollector $collector, + private LoggerInterface $logger, private TransmissionService $transmissionService, ) { - $this->collector = $collector; - $this->logger = $logger; - $this->preferences = $preferences; } #[\Override] diff --git a/lib/Listener/DeleteDraftListener.php b/lib/Listener/DeleteDraftListener.php index 0c41a21c44..c858495c9a 100644 --- a/lib/Listener/DeleteDraftListener.php +++ b/lib/Listener/DeleteDraftListener.php @@ -31,30 +31,16 @@ * @template-implements IEventListener */ class DeleteDraftListener implements IEventListener { - /** @var IMAPClientFactory */ - private $imapClientFactory; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var LoggerInterface */ - private $logger; - /** @var IEventDispatcher */ private $eventDispatcher; - public function __construct(IMAPClientFactory $imapClientFactory, - MailboxMapper $mailboxMapper, - MessageMapper $messageMapper, - LoggerInterface $logger, - IEventDispatcher $eventDispatcher) { - $this->imapClientFactory = $imapClientFactory; - $this->mailboxMapper = $mailboxMapper; - $this->messageMapper = $messageMapper; - $this->logger = $logger; + public function __construct( + private IMAPClientFactory $imapClientFactory, + private MailboxMapper $mailboxMapper, + private MessageMapper $messageMapper, + private LoggerInterface $logger, + IEventDispatcher $eventDispatcher, + ) { $this->eventDispatcher = $eventDispatcher; } diff --git a/lib/Listener/FollowUpClassifierListener.php b/lib/Listener/FollowUpClassifierListener.php index 4681fec611..9a8cf0e64b 100644 --- a/lib/Listener/FollowUpClassifierListener.php +++ b/lib/Listener/FollowUpClassifierListener.php @@ -17,7 +17,7 @@ use OCP\BackgroundJob\IJobList; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; -use OCP\TextProcessing\FreePromptTaskType; +use OCP\TaskProcessing\TaskTypes\TextToText; /** * @template-implements IEventListener @@ -46,7 +46,7 @@ public function handle(Event $event): void { return; } - if (!$this->aiService->isLlmAvailable(FreePromptTaskType::class)) { + if (!$this->aiService->isLlmAvailable(TextToText::ID)) { return; } diff --git a/lib/Listener/HamReportListener.php b/lib/Listener/HamReportListener.php index 7b4dbd8a00..bda11750d4 100644 --- a/lib/Listener/HamReportListener.php +++ b/lib/Listener/HamReportListener.php @@ -19,16 +19,10 @@ * @template-implements IEventListener */ class HamReportListener implements IEventListener { - /** @var LoggerInterface */ - private $logger; - - /** @var AntiSpamService */ - private $antiSpamService; - - public function __construct(LoggerInterface $logger, - AntiSpamService $antiSpamService) { - $this->logger = $logger; - $this->antiSpamService = $antiSpamService; + public function __construct( + private LoggerInterface $logger, + private AntiSpamService $antiSpamService, + ) { } #[\Override] diff --git a/lib/Listener/InteractionListener.php b/lib/Listener/InteractionListener.php index 59f4e045be..9461d406b0 100644 --- a/lib/Listener/InteractionListener.php +++ b/lib/Listener/InteractionListener.php @@ -28,15 +28,13 @@ class InteractionListener implements IEventListener { /** @var IUserSession */ private $userSession; - /** @var LoggerInterface */ - private $logger; - - public function __construct(IEventDispatcher $dispatcher, + public function __construct( + IEventDispatcher $dispatcher, IUserSession $userSession, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { $this->dispatcher = $dispatcher; $this->userSession = $userSession; - $this->logger = $logger; } /** diff --git a/lib/Listener/MailboxesSynchronizedSpecialMailboxesUpdater.php b/lib/Listener/MailboxesSynchronizedSpecialMailboxesUpdater.php index 8237a5f889..7fc0bcf959 100644 --- a/lib/Listener/MailboxesSynchronizedSpecialMailboxesUpdater.php +++ b/lib/Listener/MailboxesSynchronizedSpecialMailboxesUpdater.php @@ -28,21 +28,11 @@ * @template-implements IEventListener */ class MailboxesSynchronizedSpecialMailboxesUpdater implements IEventListener { - /** @var MailAccountMapper */ - private $mailAccountMapper; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(MailAccountMapper $mailAccountMapper, - MailboxMapper $mailboxMapper, - LoggerInterface $logger) { - $this->mailAccountMapper = $mailAccountMapper; - $this->mailboxMapper = $mailboxMapper; - $this->logger = $logger; + public function __construct( + private MailAccountMapper $mailAccountMapper, + private MailboxMapper $mailboxMapper, + private LoggerInterface $logger, + ) { } /** @@ -56,10 +46,13 @@ public function handle(Event $event): void { $mailboxes = $this->indexMailboxes( $this->mailboxMapper->findAll($account) ); + // Never auto-pick a shared mailbox; a shared "Sent" or "Drafts" folder + // belongs to someone else's account, not this one. + $personalMailboxes = array_filter($mailboxes, static fn (Mailbox $mb): bool => !$mb->isShared()); if ($mailAccount->getDraftsMailboxId() === null || !array_key_exists($mailAccount->getDraftsMailboxId(), $mailboxes)) { try { - $draftsMailbox = $this->findSpecial($mailboxes, 'drafts'); + $draftsMailbox = $this->findSpecial($personalMailboxes, 'drafts'); $mailAccount->setDraftsMailboxId($draftsMailbox->getId()); } catch (DoesNotExistException $e) { $this->logger->info("Account {$account->getId()} does not have a drafts mailbox"); @@ -69,7 +62,7 @@ public function handle(Event $event): void { } if ($mailAccount->getSentMailboxId() === null || !array_key_exists($mailAccount->getSentMailboxId(), $mailboxes)) { try { - $sentMailbox = $this->findSpecial($mailboxes, 'sent'); + $sentMailbox = $this->findSpecial($personalMailboxes, 'sent'); $mailAccount->setSentMailboxId($sentMailbox->getId()); } catch (DoesNotExistException $e) { $this->logger->info("Account {$account->getId()} does not have a sent mailbox"); @@ -79,7 +72,7 @@ public function handle(Event $event): void { } if ($mailAccount->getTrashMailboxId() === null || !array_key_exists($mailAccount->getTrashMailboxId(), $mailboxes)) { try { - $trashMailbox = $this->findSpecial($mailboxes, 'trash'); + $trashMailbox = $this->findSpecial($personalMailboxes, 'trash'); $mailAccount->setTrashMailboxId($trashMailbox->getId()); } catch (DoesNotExistException $e) { $this->logger->info("Account {$account->getId()} does not have a trash mailbox"); @@ -89,7 +82,7 @@ public function handle(Event $event): void { } if ($mailAccount->getArchiveMailboxId() === null || !array_key_exists($mailAccount->getArchiveMailboxId(), $mailboxes)) { try { - $archiveMailbox = $this->findSpecial($mailboxes, 'archive'); + $archiveMailbox = $this->findSpecial($personalMailboxes, 'archive'); $mailAccount->setArchiveMailboxId($archiveMailbox->getId()); } catch (DoesNotExistException $e) { $this->logger->info("Account {$account->getId()} does not have an archive mailbox"); @@ -99,7 +92,7 @@ public function handle(Event $event): void { } if ($mailAccount->getJunkMailboxId() === null || !array_key_exists($mailAccount->getJunkMailboxId(), $mailboxes)) { try { - $junkMailbox = $this->findSpecial($mailboxes, 'junk'); + $junkMailbox = $this->findSpecial($personalMailboxes, 'junk'); $mailAccount->setJunkMailboxId($junkMailbox->getId()); } catch (DoesNotExistException) { $this->logger->info("Account {$account->getId()} does not have an junk mailbox"); @@ -108,7 +101,7 @@ public function handle(Event $event): void { } if ($mailAccount->getSnoozeMailboxId() === null || !array_key_exists($mailAccount->getSnoozeMailboxId(), $mailboxes)) { try { - $snoozeMailbox = $this->findSpecial($mailboxes, 'snooze'); + $snoozeMailbox = $this->findSpecial($personalMailboxes, 'snooze'); $mailAccount->setSnoozeMailboxId($snoozeMailbox->getId()); } catch (DoesNotExistException $e) { $this->logger->info("Account {$account->getId()} does not have an snooze mailbox"); diff --git a/lib/Listener/MessageCacheUpdaterListener.php b/lib/Listener/MessageCacheUpdaterListener.php index bc66a6c233..c21bf9f5d1 100644 --- a/lib/Listener/MessageCacheUpdaterListener.php +++ b/lib/Listener/MessageCacheUpdaterListener.php @@ -20,16 +20,10 @@ * @template-implements IEventListener */ class MessageCacheUpdaterListener implements IEventListener { - /** @var MessageMapper */ - private $mapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(MessageMapper $mapper, - LoggerInterface $logger) { - $this->mapper = $mapper; - $this->logger = $logger; + public function __construct( + private MessageMapper $mapper, + private LoggerInterface $logger, + ) { } #[\Override] diff --git a/lib/Listener/OauthTokenRefreshListener.php b/lib/Listener/OauthTokenRefreshListener.php index 348d2aaf18..7e705e9472 100644 --- a/lib/Listener/OauthTokenRefreshListener.php +++ b/lib/Listener/OauthTokenRefreshListener.php @@ -20,15 +20,11 @@ * @template-implements IEventListener */ class OauthTokenRefreshListener implements IEventListener { - private GoogleIntegration $googleIntegration; - private MicrosoftIntegration $microsoftIntegration; - private AccountService $accountService; - public function __construct(GoogleIntegration $googleIntegration, - MicrosoftIntegration $microsoftIntegration, - AccountService $accountService) { - $this->googleIntegration = $googleIntegration; - $this->accountService = $accountService; - $this->microsoftIntegration = $microsoftIntegration; + public function __construct( + private GoogleIntegration $googleIntegration, + private MicrosoftIntegration $microsoftIntegration, + private AccountService $accountService, + ) { } #[\Override] diff --git a/lib/Listener/SpamReportListener.php b/lib/Listener/SpamReportListener.php index fe6276aabf..be50ef4777 100644 --- a/lib/Listener/SpamReportListener.php +++ b/lib/Listener/SpamReportListener.php @@ -19,16 +19,10 @@ * @template-implements IEventListener */ class SpamReportListener implements IEventListener { - /** @var LoggerInterface */ - private $logger; - - /** @var AntiSpamService */ - private $antiSpamService; - - public function __construct(LoggerInterface $logger, - AntiSpamService $antiSpamService) { - $this->logger = $logger; - $this->antiSpamService = $antiSpamService; + public function __construct( + private LoggerInterface $logger, + private AntiSpamService $antiSpamService, + ) { } #[\Override] diff --git a/lib/Listener/TaskProcessingListener.php b/lib/Listener/TaskProcessingListener.php index 42379789af..a2aab70024 100644 --- a/lib/Listener/TaskProcessingListener.php +++ b/lib/Listener/TaskProcessingListener.php @@ -16,6 +16,7 @@ use OCP\TaskProcessing\Events\TaskSuccessfulEvent; use OCP\TaskProcessing\TaskTypes\TextToText; use Psr\Log\LoggerInterface; +use function strlen; /** * @template-implements IEventListener @@ -45,16 +46,15 @@ public function handle(Event $event): void { return; } - if ($task->getCustomId() && str_contains($task->getCustomId(), ':')) { - [$type, $id] = explode(':', $task->getCustomId()); - } else { - $this->logger->info('Error handling task processing event custom id missing', ['taskCustomId' => $task->getCustomId()]); + $customId = $task->getCustomId(); + if ($customId === null) { return; } - if ($type === null || $id === null) { - $this->logger->info('Error handling task processing event custom id is invalid', ['taskCustomId' => $task->getCustomId()]); + if (!str_starts_with($customId, 'message:')) { return; } + $id = substr($customId, strlen('message:')); + if ($task->getUserId() !== null) { $userId = $task->getUserId(); } else { @@ -74,10 +74,7 @@ public function handle(Event $event): void { return; } - if ($type === 'message') { - $this->handleMessageSummary($userId, (int)$id, $summary); - } - + $this->handleMessageSummary($userId, (int)$id, $summary); } private function handleMessageSummary(string $userId, int $id, string $summary): void { diff --git a/lib/Listener/UserDeletedListener.php b/lib/Listener/UserDeletedListener.php index 5e7ed8222d..e755b9af15 100644 --- a/lib/Listener/UserDeletedListener.php +++ b/lib/Listener/UserDeletedListener.php @@ -11,6 +11,7 @@ use OCA\Mail\Exception\ClientException; use OCA\Mail\Service\AccountService; +use OCA\Mail\Service\DelegationService; use OCA\Mail\Service\TextBlockService; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; @@ -21,19 +22,12 @@ * @template-implements IEventListener */ class UserDeletedListener implements IEventListener { - /** @var AccountService */ - private $accountService; - - /** @var LoggerInterface */ - private $logger; - public function __construct( - AccountService $accountService, + private AccountService $accountService, private TextBlockService $textBlockService, - LoggerInterface $logger, + private DelegationService $delegationService, + private LoggerInterface $logger, ) { - $this->accountService = $accountService; - $this->logger = $logger; } #[\Override] @@ -59,5 +53,8 @@ public function handle(Event $event): void { $this->textBlockService->deleteByUserId( $user->getUID() ); + $this->delegationService->deleteByUserId( + $user->getUID() + ); } } diff --git a/lib/Migration/AddMissingDefaultTags.php b/lib/Migration/AddMissingDefaultTags.php index 786e470149..6429f5bcb8 100644 --- a/lib/Migration/AddMissingDefaultTags.php +++ b/lib/Migration/AddMissingDefaultTags.php @@ -19,17 +19,10 @@ * @psalm-api */ class AddMissingDefaultTags implements IRepairStep { - /** @var TagMapper */ - private $tagMapper; - - /** @var MailAccountMapper */ - private $accountMapper; - - - public function __construct(MailAccountMapper $accountMapper, - TagMapper $tagMapper) { - $this->accountMapper = $accountMapper; - $this->tagMapper = $tagMapper; + public function __construct( + private MailAccountMapper $accountMapper, + private TagMapper $tagMapper, + ) { } #[\Override] diff --git a/lib/Migration/AddMissingMessageIds.php b/lib/Migration/AddMissingMessageIds.php index a27a6bf2eb..3a8dc2279d 100644 --- a/lib/Migration/AddMissingMessageIds.php +++ b/lib/Migration/AddMissingMessageIds.php @@ -21,16 +21,10 @@ * @psalm-api */ class AddMissingMessageIds implements IRepairStep { - /** @var MessageMapper */ - private $mapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(MessageMapper $mapper, - LoggerInterface $logger) { - $this->mapper = $mapper; - $this->logger = $logger; + public function __construct( + private MessageMapper $mapper, + private LoggerInterface $logger, + ) { } #[\Override] diff --git a/lib/Migration/FixCollectedAddresses.php b/lib/Migration/FixCollectedAddresses.php index 518a2fac14..bdc06c472d 100644 --- a/lib/Migration/FixCollectedAddresses.php +++ b/lib/Migration/FixCollectedAddresses.php @@ -20,11 +20,9 @@ * @psalm-api */ class FixCollectedAddresses implements IRepairStep { - /** @var CollectedAddressMapper */ - private $mapper; - - public function __construct(CollectedAddressMapper $mapper) { - $this->mapper = $mapper; + public function __construct( + private CollectedAddressMapper $mapper, + ) { } #[\Override] diff --git a/lib/Migration/MakeItineraryExtractorExecutable.php b/lib/Migration/MakeItineraryExtractorExecutable.php index f5f22f04ed..45b017854b 100644 --- a/lib/Migration/MakeItineraryExtractorExecutable.php +++ b/lib/Migration/MakeItineraryExtractorExecutable.php @@ -22,16 +22,14 @@ * @psalm-api */ class MakeItineraryExtractorExecutable implements IRepairStep { - /** @var LoggerInterface */ - private $logger; - /** @var string */ private $file; - public function __construct(LoggerInterface $logger, - ?string $file = null) { + public function __construct( + private LoggerInterface $logger, + ?string $file = null, + ) { $this->file = $file ?? (__DIR__ . '/../../vendor/nextcloud/kitinerary-bin/bin/kitinerary-extractor'); - $this->logger = $logger; } #[\Override] diff --git a/lib/Migration/MigrateImportantFromImapAndDb.php b/lib/Migration/MigrateImportantFromImapAndDb.php index ce5d3ad3c1..46357fc198 100644 --- a/lib/Migration/MigrateImportantFromImapAndDb.php +++ b/lib/Migration/MigrateImportantFromImapAndDb.php @@ -24,23 +24,11 @@ */ class MigrateImportantFromImapAndDb { - - /** @var MessageMapper */ - private $messageMapper; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(MessageMapper $messageMapper, - MailboxMapper $mailboxMapper, - LoggerInterface $logger, + public function __construct( + private MessageMapper $messageMapper, + private MailboxMapper $mailboxMapper, + private LoggerInterface $logger, ) { - $this->messageMapper = $messageMapper; - $this->mailboxMapper = $mailboxMapper; - $this->logger = $logger; } public function migrateImportantOnImap(Horde_Imap_Client_Socket $client, Account $account, Mailbox $mailbox): void { diff --git a/lib/Migration/ProvisionAccounts.php b/lib/Migration/ProvisionAccounts.php index dd40acb8f3..6733ba7e08 100644 --- a/lib/Migration/ProvisionAccounts.php +++ b/lib/Migration/ProvisionAccounts.php @@ -18,11 +18,9 @@ * @psalm-api */ class ProvisionAccounts implements IRepairStep { - /** @var ProvisioningManager */ - private $provisioningManager; - - public function __construct(ProvisioningManager $provisioningManager) { - $this->provisioningManager = $provisioningManager; + public function __construct( + private ProvisioningManager $provisioningManager, + ) { } #[\Override] diff --git a/lib/Migration/RepairMailTheads.php b/lib/Migration/RepairMailTheads.php index d582aac867..0ec21c310a 100644 --- a/lib/Migration/RepairMailTheads.php +++ b/lib/Migration/RepairMailTheads.php @@ -19,16 +19,10 @@ * @psalm-api */ class RepairMailTheads implements IRepairStep { - /** @var MessageMapper */ - private $mapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(MessageMapper $mapper, - LoggerInterface $logger) { - $this->mapper = $mapper; - $this->logger = $logger; + public function __construct( + private MessageMapper $mapper, + private LoggerInterface $logger, + ) { } #[\Override] diff --git a/lib/Migration/Version1100Date20210512142306.php b/lib/Migration/Version1100Date20210512142306.php index 397f1bcf15..c1b5a97194 100644 --- a/lib/Migration/Version1100Date20210512142306.php +++ b/lib/Migration/Version1100Date20210512142306.php @@ -20,14 +20,13 @@ * @psalm-api */ class Version1100Date20210512142306 extends SimpleMigrationStep { - /** @var MailboxMapper */ - private $mailboxMapper; - /** @var IJobList */ private $jobList; - public function __construct(MailboxMapper $mailboxMapper, IJobList $jobList) { - $this->mailboxMapper = $mailboxMapper; + public function __construct( + private MailboxMapper $mailboxMapper, + IJobList $jobList, + ) { $this->jobList = $jobList; } diff --git a/lib/Migration/Version1105Date20210922104324.php b/lib/Migration/Version1105Date20210922104324.php index 381ff447f1..3e8c987926 100644 --- a/lib/Migration/Version1105Date20210922104324.php +++ b/lib/Migration/Version1105Date20210922104324.php @@ -22,11 +22,12 @@ */ class Version1105Date20210922104324 extends SimpleMigrationStep { private $connection; - private $logger; - public function __construct(IDBConnection $connection, LoggerInterface $logger) { + public function __construct( + IDBConnection $connection, + private LoggerInterface $logger, + ) { $this->connection = $connection; - $this->logger = $logger; } #[\Override] diff --git a/lib/Migration/Version1130Date20220412111833.php b/lib/Migration/Version1130Date20220412111833.php index e1fd15a9b7..5e5322e7c1 100644 --- a/lib/Migration/Version1130Date20220412111833.php +++ b/lib/Migration/Version1130Date20220412111833.php @@ -27,13 +27,15 @@ */ class Version1130Date20220412111833 extends SimpleMigrationStep { private IDBConnection $connection; - private LoggerInterface $logger; private array $recipients = []; private string $backupPath; - public function __construct(IDBConnection $connection, LoggerInterface $logger, ITempManager $tempManager) { + public function __construct( + IDBConnection $connection, + private LoggerInterface $logger, + ITempManager $tempManager, + ) { $this->connection = $connection; - $this->logger = $logger; $tempBaseDir = $tempManager->getTempBaseDir(); $this->backupPath = tempnam($tempBaseDir, 'mail_recipients_backup'); diff --git a/lib/Migration/Version1140Date20220808203258.php b/lib/Migration/Version1140Date20220808203258.php index f2f30bff08..35bf67463f 100644 --- a/lib/Migration/Version1140Date20220808203258.php +++ b/lib/Migration/Version1140Date20220808203258.php @@ -20,13 +20,10 @@ * @psalm-api */ class Version1140Date20220808203258 extends SimpleMigrationStep { - private LoggerInterface $logger; - private MessageMapper $messageMapper; - - public function __construct(MessageMapper $messageMapper, - LoggerInterface $logger) { - $this->logger = $logger; - $this->messageMapper = $messageMapper; + public function __construct( + private MessageMapper $messageMapper, + private LoggerInterface $logger, + ) { } /** diff --git a/lib/Migration/Version1140Date20221027171138.php b/lib/Migration/Version1140Date20221027171138.php index f59599019b..6db2a1ea0e 100644 --- a/lib/Migration/Version1140Date20221027171138.php +++ b/lib/Migration/Version1140Date20221027171138.php @@ -19,13 +19,10 @@ * @psalm-api */ class Version1140Date20221027171138 extends SimpleMigrationStep { - private LoggerInterface $logger; - private MessageMapper $messageMapper; - - public function __construct(MessageMapper $messageMapper, - LoggerInterface $logger) { - $this->logger = $logger; - $this->messageMapper = $messageMapper; + public function __construct( + private MessageMapper $messageMapper, + private LoggerInterface $logger, + ) { } /** diff --git a/lib/Migration/Version1140Date20221113205737.php b/lib/Migration/Version1140Date20221113205737.php index 686239837a..6934310d0b 100644 --- a/lib/Migration/Version1140Date20221113205737.php +++ b/lib/Migration/Version1140Date20221113205737.php @@ -19,15 +19,10 @@ * @psalm-api */ class Version1140Date20221113205737 extends SimpleMigrationStep { - private LoggerInterface $logger; - private MessageMapper $messageMapper; - public function __construct( - MessageMapper $messageMapper, - LoggerInterface $logger, + private MessageMapper $messageMapper, + private LoggerInterface $logger, ) { - $this->logger = $logger; - $this->messageMapper = $messageMapper; } /** diff --git a/lib/Migration/Version1140Date20221206162029.php b/lib/Migration/Version1140Date20221206162029.php index 1b2884d4b0..b8eaa867ba 100644 --- a/lib/Migration/Version1140Date20221206162029.php +++ b/lib/Migration/Version1140Date20221206162029.php @@ -19,15 +19,10 @@ * @psalm-api */ class Version1140Date20221206162029 extends SimpleMigrationStep { - private LoggerInterface $logger; - private MessageMapper $messageMapper; - public function __construct( - MessageMapper $messageMapper, - LoggerInterface $logger, + private MessageMapper $messageMapper, + private LoggerInterface $logger, ) { - $this->logger = $logger; - $this->messageMapper = $messageMapper; } /** diff --git a/lib/Migration/Version4000Date20240716172702.php b/lib/Migration/Version4000Date20240716172702.php index a568cdd94c..aa63f04ff1 100644 --- a/lib/Migration/Version4000Date20240716172702.php +++ b/lib/Migration/Version4000Date20240716172702.php @@ -54,5 +54,4 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt return $schema; } - } diff --git a/lib/Migration/Version4001Date20241009140707.php b/lib/Migration/Version4001Date20241009140707.php index bbc61840cc..b25e3ab693 100644 --- a/lib/Migration/Version4001Date20241009140707.php +++ b/lib/Migration/Version4001Date20241009140707.php @@ -20,7 +20,6 @@ */ class Version4001Date20241009140707 extends SimpleMigrationStep { - /** * @param IOutput $output * @param Closure(): ISchemaWrapper $schemaClosure diff --git a/lib/Migration/Version5009Date20260312152753.php b/lib/Migration/Version5009Date20260312152753.php new file mode 100644 index 0000000000..ead76d8ffa --- /dev/null +++ b/lib/Migration/Version5009Date20260312152753.php @@ -0,0 +1,63 @@ +hasTable('mail_delegations')) { + $table = $schema->createTable('mail_delegations'); + $table->addColumn('id', Types::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('account_id', Types::INTEGER, [ + 'notnull' => true, + ]); + $table->addColumn('user_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['account_id', 'user_id'], 'mail_deleg_acc_user_uniq'); + $table->addIndex(['user_id', 'account_id'], 'mail_deleg_user_acc_idx'); + + if ($schema->hasTable('mail_accounts')) { + $table->addForeignKeyConstraint( + $schema->getTable('mail_accounts'), + ['account_id'], + ['id'], + [ + 'onDelete' => 'CASCADE', + ] + ); + } + } + + return $schema; + } + +} diff --git a/lib/Migration/Version5200Date20250728000000.php b/lib/Migration/Version5200Date20250728000000.php index b7f3e18a75..6563e7eb9f 100644 --- a/lib/Migration/Version5200Date20250728000000.php +++ b/lib/Migration/Version5200Date20250728000000.php @@ -60,5 +60,4 @@ public function changeSchema(IOutput $output, Closure $schemaClosure, array $opt return $schema; } - } diff --git a/lib/Model/EnrichedSmimeCertificate.php b/lib/Model/EnrichedSmimeCertificate.php index 9f6425ab57..6d64fbe196 100644 --- a/lib/Model/EnrichedSmimeCertificate.php +++ b/lib/Model/EnrichedSmimeCertificate.php @@ -14,16 +14,14 @@ use ReturnTypeWillChange; class EnrichedSmimeCertificate implements JsonSerializable { - private SmimeCertificate $certificate; - private SmimeCertificateInfo $info; - /** * @param SmimeCertificate $certificate * @param SmimeCertificateInfo $info */ - public function __construct(SmimeCertificate $certificate, SmimeCertificateInfo $info) { - $this->certificate = $certificate; - $this->info = $info; + public function __construct( + private SmimeCertificate $certificate, + private SmimeCertificateInfo $info, + ) { } /** diff --git a/lib/Model/IMAPMessage.php b/lib/Model/IMAPMessage.php index 3f1cd56456..ed9d95a144 100644 --- a/lib/Model/IMAPMessage.php +++ b/lib/Model/IMAPMessage.php @@ -47,104 +47,42 @@ class IMAPMessage implements IMessage, JsonSerializable { use ConvertAddresses; - private Html $htmlService; - - /** @var string[] */ - private array $flags; - - private int $messageId; - private string $realMessageId; - private AddressList $from; - private AddressList $to; - private AddressList $cc; - private AddressList $bcc; - private AddressList $replyTo; - private string $subject; - public string $plainMessage; - public string $htmlMessage; - public array $attachments; - /** @var list */ - public array $inlineAttachments; - private bool $hasAttachments; - public array $scheduling; - private bool $hasHtmlMessage; - private Horde_Imap_Client_DateTime $imapDate; - private string $rawReferences; - private string $dispositionNotificationTo; - private bool $hasDkimSignature; - private array $phishingDetails; - private ?string $unsubscribeUrl; - private bool $isOneClickUnsubscribe; - private ?string $unsubscribeMailto; - private string $rawInReplyTo; - private bool $isEncrypted; - private bool $isSigned; - private bool $signatureIsValid; - private bool $isPgpMimeEncrypted; - /** * @param list $inlineAttachments */ - public function __construct(int $uid, - string $messageId, - array $flags, - AddressList $from, - AddressList $to, - AddressList $cc, - AddressList $bcc, - AddressList $replyTo, - string $subject, - string $plainMessage, - string $htmlMessage, - bool $hasHtmlMessage, - array $attachments, - array $inlineAttachments, - bool $hasAttachments, - array $scheduling, - Horde_Imap_Client_DateTime $imapDate, - string $rawReferences, - string $dispositionNotificationTo, - bool $hasDkimSignature, - array $phishingDetails, - ?string $unsubscribeUrl, - bool $isOneClickUnsubscribe, - ?string $unsubscribeMailto, - string $rawInReplyTo, - bool $isEncrypted, - bool $isSigned, - bool $signatureIsValid, - Html $htmlService, - bool $isPgpMimeEncrypted) { - $this->messageId = $uid; - $this->realMessageId = $messageId; - $this->flags = $flags; - $this->from = $from; - $this->to = $to; - $this->cc = $cc; - $this->bcc = $bcc; - $this->replyTo = $replyTo; - $this->subject = $subject; - $this->plainMessage = $plainMessage; - $this->htmlMessage = $htmlMessage; - $this->hasHtmlMessage = $hasHtmlMessage; - $this->attachments = $attachments; - $this->inlineAttachments = $inlineAttachments; - $this->hasAttachments = $hasAttachments; - $this->scheduling = $scheduling; - $this->imapDate = $imapDate; - $this->rawReferences = $rawReferences; - $this->dispositionNotificationTo = $dispositionNotificationTo; - $this->hasDkimSignature = $hasDkimSignature; - $this->phishingDetails = $phishingDetails; - $this->unsubscribeUrl = $unsubscribeUrl; - $this->isOneClickUnsubscribe = $isOneClickUnsubscribe; - $this->unsubscribeMailto = $unsubscribeMailto; - $this->rawInReplyTo = $rawInReplyTo; - $this->isEncrypted = $isEncrypted; - $this->isSigned = $isSigned; - $this->signatureIsValid = $signatureIsValid; - $this->htmlService = $htmlService; - $this->isPgpMimeEncrypted = $isPgpMimeEncrypted; + public function __construct( + private int $messageId, + private string $realMessageId, + /** @var string[] */ + private array $flags, + private AddressList $from, + private AddressList $to, + private AddressList $cc, + private AddressList $bcc, + private AddressList $replyTo, + private string $subject, + public string $plainMessage, + public string $htmlMessage, + private bool $hasHtmlMessage, + public array $attachments, + public array $inlineAttachments, + private bool $hasAttachments, + public array $scheduling, + private Horde_Imap_Client_DateTime $imapDate, + private string $rawReferences, + private string $dispositionNotificationTo, + private bool $hasDkimSignature, + private array $phishingDetails, + private ?string $unsubscribeUrl, + private bool $isOneClickUnsubscribe, + private ?string $unsubscribeMailto, + private string $rawInReplyTo, + private bool $isEncrypted, + private bool $isSigned, + private bool $signatureIsValid, + private Html $htmlService, + private bool $isPgpMimeEncrypted, + ) { } public static function generateMessageId(): string { @@ -301,7 +239,6 @@ public function getSentDate(): Horde_Imap_Client_DateTime { return $this->imapDate; } - /** * @param int $id * diff --git a/lib/Model/NewMessageData.php b/lib/Model/NewMessageData.php index f4ea8a044a..e13876a908 100644 --- a/lib/Model/NewMessageData.php +++ b/lib/Model/NewMessageData.php @@ -18,37 +18,6 @@ * @psalm-immutable */ class NewMessageData { - private ?int $smimeCertificateId; - private bool $smimeSign; - private bool $smimeEncrypt; - - /** @var Account */ - private $account; - - /** @var AddressList */ - private $to; - - /** @var AddressList */ - private $cc; - - /** @var AddressList */ - private $bcc; - - /** @var string */ - private $subject; - - /** @var string */ - private $body; - - /** @var array */ - private $attachments; - - /** @var bool */ - private $isHtml; - - /** @var bool */ - private $isMdnRequested; - /** * @param Account $account * @param AddressList $to @@ -62,30 +31,20 @@ class NewMessageData { * @param bool $smimeSign * @param bool $isMdnRequested */ - public function __construct(Account $account, - AddressList $to, - AddressList $cc, - AddressList $bcc, - string $subject, - string $body, - array $attachments = [], - bool $isHtml = true, - bool $isMdnRequested = false, - ?int $smimeCertificateId = null, - bool $smimeSign = false, - bool $smimeEncrypt = false) { - $this->account = $account; - $this->to = $to; - $this->cc = $cc; - $this->bcc = $bcc; - $this->subject = $subject; - $this->body = $body; - $this->attachments = $attachments; - $this->isHtml = $isHtml; - $this->isMdnRequested = $isMdnRequested; - $this->smimeCertificateId = $smimeCertificateId; - $this->smimeSign = $smimeSign; - $this->smimeEncrypt = $smimeEncrypt; + public function __construct( + private Account $account, + private AddressList $to, + private AddressList $cc, + private AddressList $bcc, + private string $subject, + private string $body, + private array $attachments = [], + private bool $isHtml = true, + private bool $isMdnRequested = false, + private ?int $smimeCertificateId = null, + private bool $smimeSign = false, + private bool $smimeEncrypt = false, + ) { } /** diff --git a/lib/Model/RepliedMessageData.php b/lib/Model/RepliedMessageData.php index 0b87b0e6ac..ce7d4fd90b 100644 --- a/lib/Model/RepliedMessageData.php +++ b/lib/Model/RepliedMessageData.php @@ -18,15 +18,10 @@ * @psalm-immutable */ final class RepliedMessageData { - /** @var Account */ - private $account; - - /** @var Message */ - private $message; - - public function __construct(Account $account, Message $message) { - $this->account = $account; - $this->message = $message; + public function __construct( + private Account $account, + private Message $message, + ) { } public function getAccount(): Account { diff --git a/lib/Model/SmimeCertificateInfo.php b/lib/Model/SmimeCertificateInfo.php index 984646ae3c..aa1fe45a91 100644 --- a/lib/Model/SmimeCertificateInfo.php +++ b/lib/Model/SmimeCertificateInfo.php @@ -13,22 +13,13 @@ use ReturnTypeWillChange; final class SmimeCertificateInfo implements JsonSerializable { - private ?string $commonName; - private ?string $emailAddress; - private int $notAfter; - private SmimeCertificatePurposes $purposes; - private bool $isChainVerified; - - public function __construct(?string $commonName, - ?string $emailAddress, - int $notAfter, - SmimeCertificatePurposes $purposes, - bool $isChainVerified) { - $this->commonName = $commonName; - $this->emailAddress = $emailAddress; - $this->notAfter = $notAfter; - $this->purposes = $purposes; - $this->isChainVerified = $isChainVerified; + public function __construct( + private ?string $commonName, + private ?string $emailAddress, + private int $notAfter, + private SmimeCertificatePurposes $purposes, + private bool $isChainVerified, + ) { } /** diff --git a/lib/Model/SmimeCertificatePurposes.php b/lib/Model/SmimeCertificatePurposes.php index a3dcafaa8c..4c638ac621 100644 --- a/lib/Model/SmimeCertificatePurposes.php +++ b/lib/Model/SmimeCertificatePurposes.php @@ -13,12 +13,10 @@ use ReturnTypeWillChange; final class SmimeCertificatePurposes implements JsonSerializable { - private bool $sign; - private bool $encrypt; - - public function __construct(bool $sign, bool $encrypt) { - $this->sign = $sign; - $this->encrypt = $encrypt; + public function __construct( + private bool $sign, + private bool $encrypt, + ) { } /** diff --git a/lib/Model/SmimeDecryptionResult.php b/lib/Model/SmimeDecryptionResult.php index 9615ebd232..395f8c6b15 100644 --- a/lib/Model/SmimeDecryptionResult.php +++ b/lib/Model/SmimeDecryptionResult.php @@ -10,19 +10,12 @@ namespace OCA\Mail\Model; final class SmimeDecryptionResult { - private string $decryptedMessage; - private bool $isEncrypted; - private bool $isSigned; - private bool $isSignatureValid; - - public function __construct(string $decryptedMessage, - bool $isEncrypted, - bool $isSigned, - bool $isSignatureValid) { - $this->isEncrypted = $isEncrypted; - $this->isSigned = $isSigned; - $this->isSignatureValid = $isSignatureValid; - $this->decryptedMessage = $decryptedMessage; + public function __construct( + private string $decryptedMessage, + private bool $isEncrypted, + private bool $isSigned, + private bool $isSignatureValid, + ) { } public static function fromPlain(string $plainMessage): self { diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php index dedd2e7ebd..ba00b2c690 100644 --- a/lib/Notification/Notifier.php +++ b/lib/Notification/Notifier.php @@ -40,7 +40,6 @@ public function getName(): string { return $this->factory->get(Application::APP_ID)->t('Mail'); } - #[\Override] public function prepare(INotification $notification, string $languageCode): INotification { if ($notification->getApp() !== Application::APP_ID) { @@ -72,8 +71,60 @@ public function prepare(INotification $notification, string $languageCode): INot ] ]); break; + case 'account_delegation': + $notification->setIcon($this->url->getAbsoluteURL( + $this->url->linkTo('mail', 'img/delegation.svg') + )); + $parameters = $notification->getSubjectParameters(); + $messageParameters = $notification->getMessageParameters(); + $delegated = $messageParameters['delegated']; + if ($delegated) { + $notification->setRichSubject($l->t('{account_email} has been delegated to you'), [ + 'account_email' => [ + 'type' => 'highlight', + 'id' => (string)$parameters['id'], + 'name' => $parameters['account_email'] + ] + ]); + $notification->setRichMessage($l->t('{user} delegated {account} to you'), + [ + 'user' => [ + 'type' => 'user', + 'id' => $messageParameters['current_user_id'], + 'name' => $messageParameters['current_user_display_name'], + ], + 'account' => [ + 'type' => 'highlight', + 'id' => (string)$messageParameters['id'], + 'name' => $messageParameters['account_email'] + ] + ]); + } else { + $notification->setRichSubject($l->t('{account_email} is no longer delegated to you'), [ + 'account_email' => [ + 'type' => 'highlight', + 'id' => (string)$parameters['id'], + 'name' => $parameters['account_email'] + ] + ]); + $notification->setRichMessage($l->t('{user} revoked delegation for {account}'), + [ + 'user' => [ + 'type' => 'user', + 'id' => $messageParameters['current_user_id'], + 'name' => $messageParameters['current_user_display_name'], + ], + 'account' => [ + 'type' => 'highlight', + 'id' => (string)$messageParameters['id'], + 'name' => $messageParameters['account_email'] + ] + ]); + } + + break; default: - throw new UnknownNotificationException(); + throw new UnknownNotificationException(); } return $notification; diff --git a/lib/PhishingDetectionList.php b/lib/PhishingDetectionList.php index f3b8d8777f..cd75886153 100755 --- a/lib/PhishingDetectionList.php +++ b/lib/PhishingDetectionList.php @@ -14,14 +14,12 @@ class PhishingDetectionList implements JsonSerializable { - /** @var PhishingDetectionResult[] */ - private array $checks; - /** * @param PhishingDetectionResult[] $checks */ - public function __construct(array $checks = []) { - $this->checks = $checks; + public function __construct( + private array $checks = [], + ) { } public function addCheck(PhishingDetectionResult $check): void { diff --git a/lib/PhishingDetectionResult.php b/lib/PhishingDetectionResult.php index 0df52a14f2..3081f19c85 100644 --- a/lib/PhishingDetectionResult.php +++ b/lib/PhishingDetectionResult.php @@ -6,6 +6,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail; use JsonSerializable; @@ -24,17 +25,12 @@ final class PhishingDetectionResult implements JsonSerializable { public const IMAP_FLAG_CHECK = 'IMAP Flag'; public const TRUSTED_CHECK = 'Trusted'; - private string $message = ''; - private bool $isPhishing; - private array $additionalData = []; - private string $type; - - public function __construct(string $type, bool $isPhishing, string $message = '', array $additionalData = []) { - $this->type = $type; - $this->message = $message; - $this->isPhishing = $isPhishing; - $this->additionalData = $additionalData; - + public function __construct( + private string $type, + private bool $isPhishing, + private string $message = '', + private array $additionalData = [], + ) { } public function getType(): string { diff --git a/lib/Provider/Command/MessageSend.php b/lib/Provider/Command/MessageSend.php index bad5ea7dd4..494e4791e2 100644 --- a/lib/Provider/Command/MessageSend.php +++ b/lib/Provider/Command/MessageSend.php @@ -6,6 +6,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Provider\Command; use OCA\Mail\Db\LocalAttachment; diff --git a/lib/Provider/MailProvider.php b/lib/Provider/MailProvider.php index e24497faa0..a806faa717 100644 --- a/lib/Provider/MailProvider.php +++ b/lib/Provider/MailProvider.php @@ -6,6 +6,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Provider; use OCA\Mail\Account; diff --git a/lib/Provider/MailService.php b/lib/Provider/MailService.php index c140adfc9a..c4830caceb 100644 --- a/lib/Provider/MailService.php +++ b/lib/Provider/MailService.php @@ -6,6 +6,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Provider; use OCA\Mail\Provider\Command\MessageSend; @@ -16,7 +17,6 @@ use OCP\Mail\Provider\IMessageSend; use OCP\Mail\Provider\IService; use OCP\Mail\Provider\Message; - use Psr\Container\ContainerInterface; class MailService implements IService, IMessageSend { diff --git a/lib/ResponseDefinitions.php b/lib/ResponseDefinitions.php index 81e07a67ed..52ef054530 100644 --- a/lib/ResponseDefinitions.php +++ b/lib/ResponseDefinitions.php @@ -49,6 +49,7 @@ * @psalm-type MailAccountListResponse = array{ * id: int, * email: string, + * isDelegated: bool, * aliases: listconfig = $config; $this->crypto = $crypto; - $this->hostNameFactory = $hostNameFactory; } /** diff --git a/lib/Search/Provider.php b/lib/Search/Provider.php index 3db8e3adee..92a5cfc62e 100644 --- a/lib/Search/Provider.php +++ b/lib/Search/Provider.php @@ -24,9 +24,6 @@ use function array_map; class Provider implements IProvider { - /** @var IMailSearch */ - private $mailSearch; - /** @var IL10N */ private $l10n; @@ -37,13 +34,12 @@ class Provider implements IProvider { private $urlGenerator; public function __construct( - IMailSearch $mailSearch, + private IMailSearch $mailSearch, IL10N $l10n, IDateTimeFormatter $dateTimeFormatter, IURLGenerator $urlGenerator, private FilterStringParser $filterStringParser, ) { - $this->mailSearch = $mailSearch; $this->l10n = $l10n; $this->dateTimeFormatter = $dateTimeFormatter; $this->urlGenerator = $urlGenerator; @@ -120,10 +116,9 @@ protected function searchByFilter(IUser $user, ISearchQuery $query, string $filt ]), $message->getSubject(), $subline, - $this->urlGenerator->linkToRouteAbsolute('mail.page.thread', [ - 'mailboxId' => $message->getMailboxId(), - 'id' => $message->getId(), - ]), // TODO: deep URL + $this->urlGenerator->linkToRouteAbsolute('mail.deep_link.open', [ + 'messageId' => $message->getMessageId(), + ]), 'icon-mail', !is_null($from) ); diff --git a/lib/Send/AHandler.php b/lib/Send/AHandler.php index b1aa900cc7..85e283dce4 100644 --- a/lib/Send/AHandler.php +++ b/lib/Send/AHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client_Socket; diff --git a/lib/Send/AntiAbuseHandler.php b/lib/Send/AntiAbuseHandler.php index 17d84aaf8d..d6a19cf9f6 100644 --- a/lib/Send/AntiAbuseHandler.php +++ b/lib/Send/AntiAbuseHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client_Socket; diff --git a/lib/Send/Chain.php b/lib/Send/Chain.php index a55aeebbee..5e7d60c204 100644 --- a/lib/Send/Chain.php +++ b/lib/Send/Chain.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use OCA\Mail\Account; diff --git a/lib/Send/CopySentMessageHandler.php b/lib/Send/CopySentMessageHandler.php index dffe3b08b9..068e6254ff 100644 --- a/lib/Send/CopySentMessageHandler.php +++ b/lib/Send/CopySentMessageHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client_Exception; diff --git a/lib/Send/FlagRepliedMessageHandler.php b/lib/Send/FlagRepliedMessageHandler.php index d0982579ce..7aa46ebe51 100644 --- a/lib/Send/FlagRepliedMessageHandler.php +++ b/lib/Send/FlagRepliedMessageHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client; diff --git a/lib/Send/SendHandler.php b/lib/Send/SendHandler.php index c3df8f6aa9..38e1d47690 100644 --- a/lib/Send/SendHandler.php +++ b/lib/Send/SendHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client_Socket; diff --git a/lib/Send/SentMailboxHandler.php b/lib/Send/SentMailboxHandler.php index c86b4fcb61..298fffd0b5 100644 --- a/lib/Send/SentMailboxHandler.php +++ b/lib/Send/SentMailboxHandler.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Send; use Horde_Imap_Client_Socket; diff --git a/lib/Service/AccountService.php b/lib/Service/AccountService.php index e54b99214f..256b546e98 100644 --- a/lib/Service/AccountService.php +++ b/lib/Service/AccountService.php @@ -17,6 +17,7 @@ use OCA\Mail\BackgroundJob\RepairSyncJob; use OCA\Mail\BackgroundJob\SyncJob; use OCA\Mail\BackgroundJob\TrainImportanceClassifierJob; +use OCA\Mail\Db\DelegationMapper; use OCA\Mail\Db\MailAccount; use OCA\Mail\Db\MailAccountMapper; use OCA\Mail\Exception\ClientException; @@ -30,9 +31,6 @@ use function array_map; class AccountService { - /** @var MailAccountMapper */ - private $mapper; - /** * Cache accounts for multiple calls to 'findByUserId' * @@ -40,27 +38,19 @@ class AccountService { */ private array $accounts = []; - /** @var AliasesService */ - private $aliasesService; - /** @var IJobList */ private $jobList; - /** @var IMAPClientFactory */ - private $imapClientFactory; - public function __construct( - MailAccountMapper $mapper, - AliasesService $aliasesService, + private MailAccountMapper $mapper, + private AliasesService $aliasesService, IJobList $jobList, - IMAPClientFactory $imapClientFactory, + private IMAPClientFactory $imapClientFactory, private readonly IConfig $config, private readonly ITimeFactory $timeFactory, + private DelegationMapper $delegationMapper, ) { - $this->mapper = $mapper; - $this->aliasesService = $aliasesService; $this->jobList = $jobList; - $this->imapClientFactory = $imapClientFactory; } /** @@ -75,6 +65,14 @@ public function findByUserId(string $currentUserId): array { return $this->accounts[$currentUserId]; } + /** + * @param string $userId + * @return list + */ + public function findDelegatedAccounts(string $userId): array { + return array_map(static fn ($a) => new Account($a), $this->mapper->findDelegatedByUserId($userId)); + } + /** * @param int $id * @@ -227,7 +225,6 @@ public function getAllAcounts(): array { return $this->mapper->getAllAccounts(); } - /** * @param string $currentUserId * @param int $accountId diff --git a/lib/Service/AiIntegrations/AiIntegrationsService.php b/lib/Service/AiIntegrations/AiIntegrationsService.php index 49243344cc..6fb929efda 100644 --- a/lib/Service/AiIntegrations/AiIntegrationsService.php +++ b/lib/Service/AiIntegrations/AiIntegrationsService.php @@ -23,36 +23,27 @@ use OCP\IL10N; use OCP\IUserManager; use OCP\L10N\IFactory; +use OCP\TaskProcessing\Exception\Exception as TaskProcessingException; use OCP\TaskProcessing\IManager as TaskProcessingManager; use OCP\TaskProcessing\Task as TaskProcessingTask; use OCP\TaskProcessing\TaskTypes\TextToText; -use OCP\TextProcessing\FreePromptTaskType; -use OCP\TextProcessing\IManager as TextProcessingManager; -use OCP\TextProcessing\SummaryTaskType; -use OCP\TextProcessing\Task as TextProcessingTask; +use OCP\TaskProcessing\TaskTypes\TextToTextSummary; use Psr\Log\LoggerInterface; - use function array_map; use function implode; -use function in_array; +use function is_array; +use function is_string; use function json_decode; +use function sprintf; class AiIntegrationsService { - private const EVENT_DATA_PROMPT_PREAMBLE = <<getPlainBody(); - $prompt = "You are tasked with formulating a helpful summary of a email message. \r\n" - . 'The summary should be in the language of this language code ' . $language . ". \r\n" - . "The summary should be less than 160 characters. \r\n" - . "Output *ONLY* the summary itself, leave out any introduction. \r\n" - . "Here is the ***E-MAIL*** for which you must generate a helpful summary: \r\n" - . "***START_OF_E-MAIL***\r\n$messageBody\r\n***END_OF_E-MAIL***\r\n"; + $prompt = sprintf(DefaultPrompts::SUMMARIZE_MESSAGE, $language, $messageBody); $task = new TaskProcessingTask( TextToText::ID, [ @@ -135,7 +121,7 @@ public function summarizeMessages(Account $account, array $messages): void { * @throws ServiceException */ public function summarizeThread(Account $account, string $threadId, array $messages, string $currentUserId): ?string { - if (in_array(SummaryTaskType::class, $this->textProcessingManager->getAvailableTaskTypes(), true)) { + if (isset($this->taskProcessingManager->getAvailableTaskTypes()[TextToTextSummary::ID])) { $messageIds = array_map(fn ($message) => $message->getMessageId(), $messages); $cachedSummary = $this->cache->getValue($this->cache->buildUrlKey($messageIds)); if ($cachedSummary) { @@ -159,9 +145,18 @@ public function summarizeThread(Account $account, string $threadId, array $messa } $taskPrompt = implode("\n", $messagesBodies); - $summaryTask = new TextProcessingTask(SummaryTaskType::class, $taskPrompt, 'mail', $currentUserId, $threadId); - $this->textProcessingManager->runTask($summaryTask); - $summary = $summaryTask->getOutput(); + $summaryTask = new TaskProcessingTask( + TextToTextSummary::ID, + ['input' => $taskPrompt], + Application::APP_ID, + $currentUserId, + $threadId, + ); + $summaryTask = $this->runTask($summaryTask); + $output = $summaryTask->getOutput()['output'] ?? null; + // output could be array|numeric|string>|null depending on task type + // We expect Text in TextToTextSummary so should always resolve to (string)$output + $summary = $output !== null && !is_array($output) ? (string)$output : null; $this->cache->addValue($this->cache->buildUrlKey($messageIds), $summary); @@ -173,9 +168,10 @@ public function summarizeThread(Account $account, string $threadId, array $messa /** * @param Message[] $messages + * @throws ServiceException */ public function generateEventData(Account $account, string $threadId, array $messages, string $currentUserId): ?EventData { - if (!in_array(FreePromptTaskType::class, $this->textProcessingManager->getAvailableTaskTypes(), true)) { + if (!isset($this->taskProcessingManager->getAvailableTaskTypes()[TextToText::ID])) { return null; } $client = $this->clientFactory->getClient($account); @@ -194,16 +190,26 @@ public function generateEventData(Account $account, string $threadId, array $mes $client->logout(); } - $task = new TextProcessingTask( - FreePromptTaskType::class, - self::EVENT_DATA_PROMPT_PREAMBLE . implode("\n\n---\n\n", $messageBodies), - 'mail', + $task = new TaskProcessingTask( + TextToText::ID, + ['input' => DefaultPrompts::EVENT_DATA_PREAMBLE . implode("\n\n---\n\n", $messageBodies)], + Application::APP_ID, $currentUserId, "event_data_$threadId", ); - $result = $this->textProcessingManager->runTask($task); + $task = $this->runTask($task); + $result = $task->getOutput()['output'] ?? null; + if (!is_string($result)) { + return null; + } try { $decoded = json_decode($result, true, 512, JSON_THROW_ON_ERROR); + if (!is_array($decoded) + || !isset($decoded['title'], $decoded['agenda']) + || !is_string($decoded['title']) + || !is_string($decoded['agenda'])) { + return null; + } return new EventData($decoded['title'], $decoded['agenda']); } catch (JsonException $e) { return null; @@ -215,7 +221,7 @@ public function generateEventData(Account $account, string $threadId, array $mes * @throws ServiceException */ public function getSmartReply(Account $account, Mailbox $mailbox, Message $message, string $currentUserId): ?array { - if (in_array(FreePromptTaskType::class, $this->textProcessingManager->getAvailableTaskTypes(), true)) { + if (isset($this->taskProcessingManager->getAvailableTaskTypes()[TextToText::ID])) { $cachedReplies = $this->cache->getValue("smartReplies_{$message->getId()}"); if ($cachedReplies) { try { @@ -241,27 +247,20 @@ public function getSmartReply(Account $account, Mailbox $mailbox, Message $messa } finally { $client->logout(); } - $prompt = "You are tasked with formulating helpful replies or reply templates to e-mails provided that have been sent to me. If you don't know some relevant information for answering the e-mails (like my schedule) leave blanks in the text that can later be filled by me. You must write the replies from my point of view as replies to the original sender of the provided e-mail! - - Formulate two extremely succinct reply suggestions to the provided ***E-MAIL***. Please, do not invent any context for the replies but, rather, leave blanks for me to fill in with relevant information where necessary. Provide the output formatted as valid JSON with the keys 'reply1' and 'reply2' for the reply suggestions. - - Each suggestion must be of 25 characters or less. - - Here is the ***E-MAIL*** for which you must suggest the replies to: - - ***START_OF_E-MAIL***" . $messageBody . " - - ***END_OF_E-MAIL*** - - Please, output *ONLY* a valid JSON string with the keys 'reply1' and 'reply2' for the reply suggestions. Leave out any other text besides the JSON! Be extremely succinct and write the replies from my point of view. - "; - $task = new TextProcessingTask(FreePromptTaskType::class, $prompt, 'mail,', $currentUserId); - $this->textProcessingManager->runTask($task); - $replies = $task->getOutput(); + $prompt = sprintf(DefaultPrompts::SMART_REPLY, $messageBody); + $task = new TaskProcessingTask(TextToText::ID, ['input' => $prompt], Application::APP_ID, $currentUserId); + $task = $this->runTask($task); + $output = $task->getOutput()['output'] ?? null; + $replies = is_string($output) ? trim($output) : ''; + if ($replies === '') { + // The task can fail or return nothing (e.g. provider timeout); treat as no replies + $this->logger->warning('Smart reply task returned no output', ['status' => $task->getStatus(), 'errorMessage' => $task->getErrorMessage()]); + return []; + } try { - $cleaned = preg_replace('/^```json\s*|\s*```$/', '', trim($replies)); + $cleaned = preg_replace('/^```json\s*|\s*```$/', '', $replies); $decoded = json_decode($cleaned, true, 512, JSON_THROW_ON_ERROR); - $this->cache->addValue("smartReplies_{$message->getId()}", $replies); + $this->cache->addValue("smartReplies_{$message->getId()}", $cleaned); return $decoded; } catch (JsonException $e) { throw new ServiceException('Failed to decode smart replies JSON output', previous: $e); @@ -282,7 +281,7 @@ public function requiresFollowUp( Message $message, string $currentUserId, ): bool { - if (!in_array(FreePromptTaskType::class, $this->textProcessingManager->getAvailableTaskTypes(), true)) { + if (!isset($this->taskProcessingManager->getAvailableTaskTypes()[TextToText::ID])) { throw new ServiceException('No language model available for smart replies'); } @@ -306,27 +305,18 @@ public function requiresFollowUp( $messageBody = $imapMessage->getPlainBody(); $messageBody = str_replace('"', '\"', $messageBody); - $prompt = "Consider the following TypeScript function prototype: ---- -/** - * This function takes in an email text and returns a boolean indicating whether the email author expects a response. - * - * @param emailText - string with the email text - * @returns boolean true if the email expects a reply, false if not - */ -declare function doesEmailExpectReply(emailText: string): Promise; ---- -Tell me what the function outputs for the following parameters. + $prompt = sprintf(DefaultPrompts::REQUIRES_FOLLOW_UP, $messageBody); + $task = new TaskProcessingTask(TextToText::ID, ['input' => $prompt], Application::APP_ID, $currentUserId); -emailText: \"$messageBody\" -The JSON output should be in the form: {\"expectsReply\": true} -Never return null or undefined."; - $task = new TextProcessingTask(FreePromptTaskType::class, $prompt, Application::APP_ID, $currentUserId); - - $this->textProcessingManager->runTask($task); + $task = $this->runTask($task); + $output = $task->getOutput()['output'] ?? null; + if ($task->getStatus() === TaskProcessingTask::STATUS_FAILED || !is_string($output) || trim($output) === '') { + $this->logger->warning('Follow-up classification task returned no usable output', ['status' => $task->getStatus(), 'errorMessage' => $task->getErrorMessage()]); + throw new ServiceException('Follow-up classification task returned no usable output'); + } // Can't use json_decode() here because the output contains additional garbage - return preg_match('/{\s*"expectsReply"\s*:\s*true\s*}/i', $task->getOutput()) === 1; + return preg_match('/{\s*"expectsReply"\s*:\s*true\s*}/i', $output) === 1; } /** @@ -340,7 +330,7 @@ public function requiresTranslation( Message $message, string $currentUserId, ): ?bool { - if (!in_array(FreePromptTaskType::class, $this->textProcessingManager->getAvailableTaskTypes(), true)) { + if (!isset($this->taskProcessingManager->getAvailableTaskTypes()[TextToText::ID])) { $this->logger->info('No language model available for checking translation needs'); return null; } @@ -372,34 +362,14 @@ public function requiresTranslation( $messageBody = $imapMessage->getPlainBody(); $messageBody = str_replace('"', '\"', $messageBody); - $prompt = "Consider the following TypeScript function prototype: ---- -/** - * This function takes in an email text and returns a boolean indicating whether the email needs translation from a specific language. - * - * @param emailText - string with the email text - * @param language - the language code to check against (e.g., 'en', 'de', etc.) - * @returns boolean true if the email is written in a different language than the one specified and needs translation, false if it is written in the specified language. - * only return true if whole sentences are written in a different language, not just a word or two. - */ -declare function isEmailWrittenInLanguage(emailText: string, language: string): Promise; ---- -Tell me what the function outputs for the following parameters. - -emailText: \"$messageBody\" -language: \"$language\" -The JSON output should be in the form: {\"needsTranslation\": true} -Never return null or undefined."; - $task = new TextProcessingTask(FreePromptTaskType::class, $prompt, Application::APP_ID, $currentUserId); - - $this->textProcessingManager->runTask($task); - $output = $task->getOutput(); - if ($output === null) { - throw new ServiceException('Task output is null, possibly due to an error in the task processing', [ - 'messageId' => $message->getId(), - 'language' => $language, - 'output' => $output, - ]); + $prompt = sprintf(DefaultPrompts::REQUIRES_TRANSLATION, $messageBody, $language); + $task = new TaskProcessingTask(TextToText::ID, ['input' => $prompt], Application::APP_ID, $currentUserId); + + $task = $this->runTask($task); + $output = $task->getOutput()['output'] ?? null; + if ($task->getStatus() === TaskProcessingTask::STATUS_FAILED || !is_string($output) || trim($output) === '') { + $this->logger->warning('Translation check task returned no usable output', ['status' => $task->getStatus(), 'errorMessage' => $task->getErrorMessage()]); + throw new ServiceException('Translation check task returned no usable output'); } // Can't use json_decode() here because the output contains additional garbage $result = preg_match('/{\s*"needsTranslation"\s*:\s*true\s*}/i', $output) === 1; @@ -408,7 +378,7 @@ public function requiresTranslation( } public function isLlmAvailable(string $taskType): bool { - return in_array($taskType, $this->textProcessingManager->getAvailableTaskTypes(), true); + return array_key_exists($taskType, $this->taskProcessingManager->getAvailableTaskTypes()); } public function isTaskAvailable(string $taskName): bool { @@ -423,6 +393,17 @@ public function isLlmProcessingEnabled(): bool { return $this->appConfig->getValueString(Application::APP_ID, 'llm_processing', 'no') === 'yes'; } + /** + * @throws ServiceException + */ + private function runTask(TaskProcessingTask $task): TaskProcessingTask { + try { + return $this->taskProcessingManager->runTask($task); + } catch (TaskProcessingException $e) { + throw new ServiceException('AI task processing failed', previous: $e); + } + } + private function isPersonalEmail(IMAPMessage $imapMessage): bool { if ($imapMessage->isOneClickUnsubscribe() || $imapMessage->getUnsubscribeUrl() !== null) { @@ -447,5 +428,4 @@ private function isPersonalEmail(IMAPMessage $imapMessage): bool { return true; } - } diff --git a/lib/Service/AiIntegrations/Cache.php b/lib/Service/AiIntegrations/Cache.php index 42e5312168..185fe8b50e 100644 --- a/lib/Service/AiIntegrations/Cache.php +++ b/lib/Service/AiIntegrations/Cache.php @@ -19,7 +19,6 @@ class Cache { /** @var ICache */ private $cache; - public function __construct(ICacheFactory $cacheFactory) { $this->cache = $cacheFactory->createLocal('mail.ai'); } @@ -32,7 +31,6 @@ public function buildUrlKey(array $ids): string { return base64_encode(json_encode($ids, JSON_THROW_ON_ERROR)); } - /** * @param array $ids * diff --git a/lib/Service/AiIntegrations/DefaultPrompts.php b/lib/Service/AiIntegrations/DefaultPrompts.php new file mode 100644 index 0000000000..1c25928fa4 --- /dev/null +++ b/lib/Service/AiIntegrations/DefaultPrompts.php @@ -0,0 +1,98 @@ +; + --- + Tell me what the function outputs for the following parameters. + + emailText: "%s" + The JSON output should be in the form: {"expectsReply": true} + Never return null or undefined. + PROMPT; + + /** + * Arguments (in order): message body, language code. + */ + public const REQUIRES_TRANSLATION = <<; + --- + Tell me what the function outputs for the following parameters. + + emailText: "%s" + language: "%s" + The JSON output should be in the form: {"needsTranslation": true} + Never return null or undefined. + PROMPT; +} diff --git a/lib/Service/AliasesService.php b/lib/Service/AliasesService.php index 62f4538fd6..57392e8c64 100644 --- a/lib/Service/AliasesService.php +++ b/lib/Service/AliasesService.php @@ -17,15 +17,10 @@ use OCP\AppFramework\Db\DoesNotExistException; class AliasesService { - /** @var AliasMapper */ - private $aliasMapper; - - /** @var MailAccountMapper */ - private $mailAccountMapper; - - public function __construct(AliasMapper $aliasMapper, MailAccountMapper $mailAccountMapper) { - $this->aliasMapper = $aliasMapper; - $this->mailAccountMapper = $mailAccountMapper; + public function __construct( + private AliasMapper $aliasMapper, + private MailAccountMapper $mailAccountMapper, + ) { } /** diff --git a/lib/Service/AntiAbuseService.php b/lib/Service/AntiAbuseService.php index 7d04aeb256..035f0b3de2 100644 --- a/lib/Service/AntiAbuseService.php +++ b/lib/Service/AntiAbuseService.php @@ -29,17 +29,15 @@ class AntiAbuseService { /** @var ITimeFactory */ private $timeFactory; - /** @var LoggerInterface */ - private $logger; - - public function __construct(IConfig $config, + public function __construct( + IConfig $config, ICacheFactory $cacheFactory, ITimeFactory $timeFactory, - LoggerInterface $logger) { + private LoggerInterface $logger, + ) { $this->config = $config; $this->cacheFactory = $cacheFactory; $this->timeFactory = $timeFactory; - $this->logger = $logger; } public function onBeforeMessageSent(IUser $user, LocalMessage $localMessage): void { diff --git a/lib/Service/Attachment/AttachmentService.php b/lib/Service/Attachment/AttachmentService.php index 779da3c6b9..8f718d007c 100644 --- a/lib/Service/Attachment/AttachmentService.php +++ b/lib/Service/Attachment/AttachmentService.php @@ -38,50 +38,27 @@ use Psr\Log\LoggerInterface; class AttachmentService implements IAttachmentService { - /** @var LocalAttachmentMapper */ - private $mapper; - - /** @var AttachmentStorage */ - private $storage; - /** - * @var IMailManager - */ - private $mailManager; - /** - * @var MessageMapper - */ - private $messageMapper; - /** * @var Folder */ private $userFolder; - /** - * @var LoggerInterface - */ - private $logger; /** * @param Folder $userFolder */ public function __construct( $userFolder, - LocalAttachmentMapper $mapper, - AttachmentStorage $storage, - IMailManager $mailManager, - MessageMapper $imapMessageMapper, + private LocalAttachmentMapper $mapper, + private AttachmentStorage $storage, + private IMailManager $mailManager, + private MessageMapper $messageMapper, private ICacheFactory $cacheFactory, private IURLGenerator $urlGenerator, private IMimeTypeDetector $mimeTypeDetector, - LoggerInterface $logger, + private LoggerInterface $logger, private ITimeFactory $timeFactory, ) { - $this->mapper = $mapper; - $this->storage = $storage; - $this->mailManager = $mailManager; - $this->messageMapper = $imapMessageMapper; $this->userFolder = $userFolder; - $this->logger = $logger; } /** @@ -118,7 +95,6 @@ public function addFileFromString( string $fileContents, ?string $contentId, ?string $disposition, - ): LocalAttachment { $attachment = new LocalAttachment(); $attachment->setUserId($userId); @@ -236,7 +212,6 @@ public function updateLocalMessageAttachments(string $userId, LocalMessage $mess return $this->mapper->findByLocalMessageId($userId, $message->getId()); } - /** * @param array $attachments * @return int[] @@ -411,7 +386,6 @@ private function hasDownloadPermissions(File $file, string $fileName): bool { if ($attributes->getAttribute('permissions', 'download') === false) { $this->logger->warning('Could not create attachment, no download permission for file: ' . $fileName); return false; - } } return true; diff --git a/lib/Service/Attachment/AttachmentStorage.php b/lib/Service/Attachment/AttachmentStorage.php index 94853dd1cf..1b3f87836b 100644 --- a/lib/Service/Attachment/AttachmentStorage.php +++ b/lib/Service/Attachment/AttachmentStorage.php @@ -91,9 +91,6 @@ public function saveContent(string $userId, int $attachmentId, string $fileConte $file->putContent($fileContent); } - - - /** * @param string $userId * @param int $attachmentId diff --git a/lib/Service/Attachment/UploadedFile.php b/lib/Service/Attachment/UploadedFile.php index f31bb6334b..4980221bba 100644 --- a/lib/Service/Attachment/UploadedFile.php +++ b/lib/Service/Attachment/UploadedFile.php @@ -10,14 +10,12 @@ namespace OCA\Mail\Service\Attachment; class UploadedFile { - /** @var array */ - private $fileData; - /** * @param array $fileData */ - public function __construct(array $fileData) { - $this->fileData = $fileData; + public function __construct( + private array $fileData, + ) { } /** diff --git a/lib/Service/AutoCompletion/AddressCollector.php b/lib/Service/AutoCompletion/AddressCollector.php index e1aad45585..54acbd0d08 100644 --- a/lib/Service/AutoCompletion/AddressCollector.php +++ b/lib/Service/AutoCompletion/AddressCollector.php @@ -21,16 +21,10 @@ class AddressCollector { use TTransactional; - /** @var CollectedAddressMapper */ - private $mapper; - - /** @var LoggerInterface */ - private $logger; - - public function __construct(CollectedAddressMapper $mapper, - LoggerInterface $logger) { - $this->mapper = $mapper; - $this->logger = $logger; + public function __construct( + private CollectedAddressMapper $mapper, + private LoggerInterface $logger, + ) { } /** diff --git a/lib/Service/AutoCompletion/AutoCompleteService.php b/lib/Service/AutoCompletion/AutoCompleteService.php index 21c986f50e..5be8679e17 100644 --- a/lib/Service/AutoCompletion/AutoCompleteService.php +++ b/lib/Service/AutoCompletion/AutoCompleteService.php @@ -15,19 +15,11 @@ use OCA\Mail\Service\GroupsIntegration; class AutoCompleteService { - /** @var ContactsIntegration */ - private $contactsIntegration; - - /** @var GroupsIntegration */ - private $groupsIntegration; - - /** @var AddressCollector */ - private $addressCollector; - - public function __construct(ContactsIntegration $ci, GroupsIntegration $gi, AddressCollector $ac) { - $this->contactsIntegration = $ci; - $this->groupsIntegration = $gi; - $this->addressCollector = $ac; + public function __construct( + private ContactsIntegration $contactsIntegration, + private GroupsIntegration $groupsIntegration, + private AddressCollector $addressCollector, + ) { } public function findMatches(string $userId, string $term): array { diff --git a/lib/Service/AutoConfig/Configuration.php b/lib/Service/AutoConfig/Configuration.php index 519e6d0ba5..9f7fd9f2ef 100644 --- a/lib/Service/AutoConfig/Configuration.php +++ b/lib/Service/AutoConfig/Configuration.php @@ -16,13 +16,10 @@ * @psalm-immutable */ final class Configuration implements JsonSerializable { - private ?ServerConfiguration $imapConfig; - private ?ServerConfiguration $smtpConfig; - - public function __construct(?ServerConfiguration $imapConfig, - ?ServerConfiguration $smtpConfig) { - $this->imapConfig = $imapConfig; - $this->smtpConfig = $smtpConfig; + public function __construct( + private ?ServerConfiguration $imapConfig, + private ?ServerConfiguration $smtpConfig, + ) { } #[\Override] diff --git a/lib/Service/AutoConfig/IspDb.php b/lib/Service/AutoConfig/IspDb.php index 0e6e97419a..423aaaa8ee 100644 --- a/lib/Service/AutoConfig/IspDb.php +++ b/lib/Service/AutoConfig/IspDb.php @@ -25,10 +25,6 @@ class IspDb { /** @var IClient */ private $client; - /** @var LoggerInterface */ - private $logger; - private Resolver $dnsResolver; - /** @returns string[] */ public function getUrls(): array { return [ @@ -40,12 +36,12 @@ public function getUrls(): array { ]; } - public function __construct(IClientService $clientService, - Resolver $dnsResolver, - LoggerInterface $logger) { + public function __construct( + IClientService $clientService, + private Resolver $dnsResolver, + private LoggerInterface $logger, + ) { $this->client = $clientService->newClient(); - $this->dnsResolver = $dnsResolver; - $this->logger = $logger; } /** diff --git a/lib/Service/AutoConfig/MxRecord.php b/lib/Service/AutoConfig/MxRecord.php index 9905e0212a..241a6d4256 100644 --- a/lib/Service/AutoConfig/MxRecord.php +++ b/lib/Service/AutoConfig/MxRecord.php @@ -15,11 +15,9 @@ use function asort; final class MxRecord { - /** @var LoggerInterface */ - private $logger; - - public function __construct(LoggerInterface $logger) { - $this->logger = $logger; + public function __construct( + private LoggerInterface $logger, + ) { } /** diff --git a/lib/Service/AutoConfig/ServerConfiguration.php b/lib/Service/AutoConfig/ServerConfiguration.php index ee8fca06b6..f142bc254e 100644 --- a/lib/Service/AutoConfig/ServerConfiguration.php +++ b/lib/Service/AutoConfig/ServerConfiguration.php @@ -16,19 +16,12 @@ * @psalm-immutable */ final class ServerConfiguration implements JsonSerializable { - private string $username; - private string $host; - private int $port; - private string $security; - - public function __construct(string $username, - string $host, - int $port, - string $security) { - $this->username = $username; - $this->host = $host; - $this->port = $port; - $this->security = $security; + public function __construct( + private string $username, + private string $host, + private int $port, + private string $security, + ) { } #[\Override] diff --git a/lib/Service/Avatar/AddressbookSource.php b/lib/Service/Avatar/AddressbookSource.php index 3276eac502..5fa5afe5a2 100644 --- a/lib/Service/Avatar/AddressbookSource.php +++ b/lib/Service/Avatar/AddressbookSource.php @@ -16,11 +16,9 @@ * as avatar source */ class AddressbookSource implements IAvatarSource { - /** @var ContactsIntegration */ - private $contactsIntegration; - - public function __construct(ContactsIntegration $contactsIntegration) { - $this->contactsIntegration = $contactsIntegration; + public function __construct( + private ContactsIntegration $contactsIntegration, + ) { } /** diff --git a/lib/Service/Avatar/Avatar.php b/lib/Service/Avatar/Avatar.php index a67b208793..ad22c13242 100644 --- a/lib/Service/Avatar/Avatar.php +++ b/lib/Service/Avatar/Avatar.php @@ -16,24 +16,16 @@ * @psalm-immutable */ final class Avatar implements JsonSerializable { - /** @var string */ - private $url; - - /** @var string|null */ - private $mime; - - /** @var bool */ - private $isExternal; - /** * @param string $url * @param string|null $mime * @param bool $isExternal */ - public function __construct(string $url, ?string $mime = null, bool $isExternal = true) { - $this->url = $url; - $this->mime = $mime; - $this->isExternal = $isExternal; + public function __construct( + private string $url, + private ?string $mime = null, + private bool $isExternal = true, + ) { } /** diff --git a/lib/Service/Avatar/Cache.php b/lib/Service/Avatar/Cache.php index 9b11a19ce6..b4b3872bcd 100644 --- a/lib/Service/Avatar/Cache.php +++ b/lib/Service/Avatar/Cache.php @@ -19,12 +19,11 @@ class Cache { /** @var ICache */ private $cache; - /** @var AvatarFactory */ - private $avatarFactory; - - public function __construct(ICacheFactory $cacheFactory, AvatarFactory $avatarFactory) { + public function __construct( + ICacheFactory $cacheFactory, + private AvatarFactory $avatarFactory, + ) { $this->cache = $cacheFactory->createLocal('mail.avatars'); - $this->avatarFactory = $avatarFactory; } /** diff --git a/lib/Service/Avatar/FaviconSource.php b/lib/Service/Avatar/FaviconSource.php index 0167fd2ee3..cd7720735f 100644 --- a/lib/Service/Avatar/FaviconSource.php +++ b/lib/Service/Avatar/FaviconSource.php @@ -20,19 +20,17 @@ class FaviconSource implements IAvatarSource { /** @var IClientService */ private $clientService; - /** @var Favicon */ - private $favicon; - /** @var IMimeTypeDetector */ private $mimeDetector; private IRemoteHostValidator $remoteHostValidator; - public function __construct(IClientService $clientService, - Favicon $favicon, + public function __construct( + IClientService $clientService, + private Favicon $favicon, IMimeTypeDetector $mimeDetector, - IRemoteHostValidator $remoteHostValidator) { + IRemoteHostValidator $remoteHostValidator, + ) { $this->clientService = $clientService; - $this->favicon = $favicon; $this->favicon->setCacheTimeout(0); $this->mimeDetector = $mimeDetector; $this->remoteHostValidator = $remoteHostValidator; diff --git a/lib/Service/AvatarService.php b/lib/Service/AvatarService.php index 3b1866a56d..29d0855806 100644 --- a/lib/Service/AvatarService.php +++ b/lib/Service/AvatarService.php @@ -18,21 +18,6 @@ use OCA\Mail\Service\Avatar\Downloader; class AvatarService implements IAvatarService { - /** @var AvatarCache */ - private $cache; - - /** @var Downloader */ - private $downloader; - - /** @var CompositeAvatarSource */ - private $source; - - /** @var AvatarFactory */ - private $avatarFactory; - - /** @var IUserPreferences */ - private $preferences; - /** * @param CompositeAvatarSource $source * @param Downloader $downloader @@ -40,16 +25,13 @@ class AvatarService implements IAvatarService { * @param AvatarFactory $avatarFactory * @param IUserPreferences $preferences */ - public function __construct(CompositeAvatarSource $source, - Downloader $downloader, - AvatarCache $cache, - AvatarFactory $avatarFactory, - IUserPreferences $preferences) { - $this->source = $source; - $this->cache = $cache; - $this->downloader = $downloader; - $this->avatarFactory = $avatarFactory; - $this->preferences = $preferences; + public function __construct( + private CompositeAvatarSource $source, + private Downloader $downloader, + private AvatarCache $cache, + private AvatarFactory $avatarFactory, + private IUserPreferences $preferences, + ) { } /** diff --git a/lib/Service/Classification/FeatureExtraction/CompositeExtractor.php b/lib/Service/Classification/FeatureExtraction/CompositeExtractor.php index 40fe493ad7..237057eeda 100644 --- a/lib/Service/Classification/FeatureExtraction/CompositeExtractor.php +++ b/lib/Service/Classification/FeatureExtraction/CompositeExtractor.php @@ -17,8 +17,6 @@ * Combines a set of DI'ed extractors so they can be used as one class */ class CompositeExtractor implements IExtractor { - private readonly SubjectExtractor $subjectExtractor; - /** @var IExtractor[] */ private readonly array $extractors; @@ -27,15 +25,14 @@ public function __construct( ReadMessagesExtractor $ex2, RepliedMessagesExtractor $ex3, SentMessagesExtractor $ex4, - SubjectExtractor $ex5, + private readonly SubjectExtractor $subjectExtractor, ) { - $this->subjectExtractor = $ex5; $this->extractors = [ $ex1, $ex2, $ex3, $ex4, - $ex5, + $this->subjectExtractor, ]; } diff --git a/lib/Service/Classification/FeatureExtraction/ImportantMessagesExtractor.php b/lib/Service/Classification/FeatureExtraction/ImportantMessagesExtractor.php index ba4376885d..ecab9fe0b9 100644 --- a/lib/Service/Classification/FeatureExtraction/ImportantMessagesExtractor.php +++ b/lib/Service/Classification/FeatureExtraction/ImportantMessagesExtractor.php @@ -23,11 +23,9 @@ class ImportantMessagesExtractor implements IExtractor { /** @var int[] */ private $flaggedMessages = []; - /** @var StatisticsDao */ - private $statisticsDao; - - public function __construct(StatisticsDao $statisticsDao) { - $this->statisticsDao = $statisticsDao; + public function __construct( + private StatisticsDao $statisticsDao, + ) { } #[\Override] diff --git a/lib/Service/Classification/FeatureExtraction/ReadMessagesExtractor.php b/lib/Service/Classification/FeatureExtraction/ReadMessagesExtractor.php index 8a5914ce5a..23409d51c3 100644 --- a/lib/Service/Classification/FeatureExtraction/ReadMessagesExtractor.php +++ b/lib/Service/Classification/FeatureExtraction/ReadMessagesExtractor.php @@ -17,17 +17,15 @@ use function array_unique; class ReadMessagesExtractor implements IExtractor { - /** @var StatisticsDao */ - private $statisticsDao; - /** @var int[] */ private $totalMessages; /** @var int[] */ private $readMessages; - public function __construct(StatisticsDao $statisticsDao) { - $this->statisticsDao = $statisticsDao; + public function __construct( + private StatisticsDao $statisticsDao, + ) { } #[\Override] diff --git a/lib/Service/Classification/FeatureExtraction/RepliedMessagesExtractor.php b/lib/Service/Classification/FeatureExtraction/RepliedMessagesExtractor.php index e47b136851..9bbdd1110b 100644 --- a/lib/Service/Classification/FeatureExtraction/RepliedMessagesExtractor.php +++ b/lib/Service/Classification/FeatureExtraction/RepliedMessagesExtractor.php @@ -17,17 +17,15 @@ use function array_unique; class RepliedMessagesExtractor implements IExtractor { - /** @var StatisticsDao */ - private $statisticsDao; - /** @var int[] */ private $totalMessages; /** @var int[] */ private $repliedMessages; - public function __construct(StatisticsDao $statisticsDao) { - $this->statisticsDao = $statisticsDao; + public function __construct( + private StatisticsDao $statisticsDao, + ) { } #[\Override] diff --git a/lib/Service/Classification/FeatureExtraction/SentMessagesExtractor.php b/lib/Service/Classification/FeatureExtraction/SentMessagesExtractor.php index 2b568d29b8..229bb09656 100644 --- a/lib/Service/Classification/FeatureExtraction/SentMessagesExtractor.php +++ b/lib/Service/Classification/FeatureExtraction/SentMessagesExtractor.php @@ -17,17 +17,15 @@ use function array_unique; class SentMessagesExtractor implements IExtractor { - /** @var StatisticsDao */ - private $statisticsDao; - /** @var int */ private $messagesSentTotal = 0; /** @var int[] */ private $messagesSent; - public function __construct(StatisticsDao $statisticsDao) { - $this->statisticsDao = $statisticsDao; + public function __construct( + private StatisticsDao $statisticsDao, + ) { } #[\Override] diff --git a/lib/Service/Classification/ImportanceClassifier.php b/lib/Service/Classification/ImportanceClassifier.php index bf8ee00b9e..0d9bb1193e 100644 --- a/lib/Service/Classification/ImportanceClassifier.php +++ b/lib/Service/Classification/ImportanceClassifier.php @@ -92,35 +92,14 @@ class ImportanceClassifier { */ private const MAX_TRAINING_SET_SIZE = 300; - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var PersistenceService */ - private $persistenceService; - - /** @var PerformanceLogger */ - private $performanceLogger; - - /** @var ImportanceRulesClassifier */ - private $rulesClassifier; - - private ContainerInterface $container; - - public function __construct(MailboxMapper $mailboxMapper, - MessageMapper $messageMapper, - PersistenceService $persistenceService, - PerformanceLogger $performanceLogger, - ImportanceRulesClassifier $rulesClassifier, - ContainerInterface $container) { - $this->mailboxMapper = $mailboxMapper; - $this->messageMapper = $messageMapper; - $this->persistenceService = $persistenceService; - $this->performanceLogger = $performanceLogger; - $this->rulesClassifier = $rulesClassifier; - $this->container = $container; + public function __construct( + private MailboxMapper $mailboxMapper, + private MessageMapper $messageMapper, + private PersistenceService $persistenceService, + private PerformanceLogger $performanceLogger, + private ImportanceRulesClassifier $rulesClassifier, + private ContainerInterface $container, + ) { } private static function createDefaultEstimator(): KNearestNeighbors { @@ -348,7 +327,6 @@ private function trainWithCustomDataSet( return new ClassifierPipeline($persistedEstimator, $extractor); } - /** * @param Account $account * diff --git a/lib/Service/Classification/ImportanceRulesClassifier.php b/lib/Service/Classification/ImportanceRulesClassifier.php index aa9f2fa8d5..bc525f4484 100644 --- a/lib/Service/Classification/ImportanceRulesClassifier.php +++ b/lib/Service/Classification/ImportanceRulesClassifier.php @@ -20,26 +20,12 @@ use function array_map; class ImportanceRulesClassifier { - /** @var ImportantMessagesExtractor */ - private $importantMessagesExtractor; - - /** @var ReadMessagesExtractor */ - private $readMessagesExtractor; - - /** @var RepliedMessagesExtractor */ - private $repliedMessagesExtractor; - - /** @var SentMessagesExtractor */ - private $sentMessagesExtractor; - - public function __construct(ImportantMessagesExtractor $importantMessagesExtractor, - ReadMessagesExtractor $readMessagesExtractor, - RepliedMessagesExtractor $repliedMessagesExtractor, - SentMessagesExtractor $sentMessagesExtractor) { - $this->importantMessagesExtractor = $importantMessagesExtractor; - $this->readMessagesExtractor = $readMessagesExtractor; - $this->repliedMessagesExtractor = $repliedMessagesExtractor; - $this->sentMessagesExtractor = $sentMessagesExtractor; + public function __construct( + private ImportantMessagesExtractor $importantMessagesExtractor, + private ReadMessagesExtractor $readMessagesExtractor, + private RepliedMessagesExtractor $repliedMessagesExtractor, + private SentMessagesExtractor $sentMessagesExtractor, + ) { } /** diff --git a/lib/Service/CleanupService.php b/lib/Service/CleanupService.php index 74f5c0070a..b0cf62fed4 100644 --- a/lib/Service/CleanupService.php +++ b/lib/Service/CleanupService.php @@ -22,46 +22,19 @@ use Psr\Log\LoggerInterface; class CleanupService { - private MailAccountMapper $mailAccountMapper; - - /** @var AliasMapper */ - private $aliasMapper; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var CollectedAddressMapper */ - private $collectedAddressMapper; - - /** @var TagMapper */ - private $tagMapper; - - private MessageRetentionMapper $messageRetentionMapper; - - private MessageSnoozeMapper $messageSnoozeMapper; - private ITimeFactory $timeFactory; - public function __construct(MailAccountMapper $mailAccountMapper, - AliasMapper $aliasMapper, - MailboxMapper $mailboxMapper, - MessageMapper $messageMapper, - CollectedAddressMapper $collectedAddressMapper, - TagMapper $tagMapper, - MessageRetentionMapper $messageRetentionMapper, - MessageSnoozeMapper $messageSnoozeMapper, - ITimeFactory $timeFactory) { - $this->aliasMapper = $aliasMapper; - $this->mailboxMapper = $mailboxMapper; - $this->messageMapper = $messageMapper; - $this->collectedAddressMapper = $collectedAddressMapper; - $this->tagMapper = $tagMapper; - $this->messageRetentionMapper = $messageRetentionMapper; - $this->messageSnoozeMapper = $messageSnoozeMapper; - $this->mailAccountMapper = $mailAccountMapper; + public function __construct( + private MailAccountMapper $mailAccountMapper, + private AliasMapper $aliasMapper, + private MailboxMapper $mailboxMapper, + private MessageMapper $messageMapper, + private CollectedAddressMapper $collectedAddressMapper, + private TagMapper $tagMapper, + private MessageRetentionMapper $messageRetentionMapper, + private MessageSnoozeMapper $messageSnoozeMapper, + ITimeFactory $timeFactory, + ) { $this->timeFactory = $timeFactory; } diff --git a/lib/Service/ContactIntegration/ContactIntegrationService.php b/lib/Service/ContactIntegration/ContactIntegrationService.php index 20ecc74b97..5775d2c997 100644 --- a/lib/Service/ContactIntegration/ContactIntegrationService.php +++ b/lib/Service/ContactIntegration/ContactIntegrationService.php @@ -12,11 +12,9 @@ use OCA\Mail\Service\ContactsIntegration; class ContactIntegrationService { - /** @var ContactsIntegration */ - private $contactsIntegration; - - public function __construct(ContactsIntegration $ci) { - $this->contactsIntegration = $ci; + public function __construct( + private ContactsIntegration $contactsIntegration, + ) { } public function findMatches(string $uid, string $mail): array { diff --git a/lib/Service/ContactsIntegration.php b/lib/Service/ContactsIntegration.php index 47b749aa7a..908ad2ca13 100644 --- a/lib/Service/ContactsIntegration.php +++ b/lib/Service/ContactsIntegration.php @@ -66,6 +66,12 @@ public function getMatchingRecipient(string $userId, string $term): array { if ($e === '') { continue; } + + $mightBeValidEmail = filter_var($e, FILTER_VALIDATE_EMAIL); + if ($mightBeValidEmail === false) { + continue; + } + $receivers[] = [ 'id' => $id, // Show full name if possible or fall back to email diff --git a/lib/Service/DelegationService.php b/lib/Service/DelegationService.php new file mode 100644 index 0000000000..f553940ae4 --- /dev/null +++ b/lib/Service/DelegationService.php @@ -0,0 +1,185 @@ +getId(); + try { + $this->delegationMapper->find($accountId, $userId); + throw new DelegationExistsException("Delegation already exists for account $accountId and user $userId"); + } catch (DoesNotExistException) { + // delegation doesn't exist, continue + } + + $delegation = new Delegation(); + $delegation->setAccountId($accountId); + $delegation->setUserId($userId); + $result = $this->delegationMapper->insert($delegation); + $this->notify($userId, $currentUserId, $account, true); + return $result; + } + + public function deleteByUserId(string $userId): void { + $this->delegationMapper->deleteByUserId($userId); + } + + public function findDelegatedToUsersForAccount(int $accountId): array { + return array_map(function (Delegation $delegation) { + $displayName = $this->userManager->get($delegation->getUserId())?->getDisplayName(); + $delegation->setDisplayName($displayName); + return $delegation; + }, $this->delegationMapper->findDelegatedToUsers($accountId)); + } + + public function unDelegate(Account $account, string $userId, string $currentUserId): void { + try { + $accountId = $account->getId(); + $delegation = $this->delegationMapper->find($accountId, $userId); + $this->delegationMapper->delete($delegation); + $this->notify($userId, $currentUserId, $account, false); + } catch (DoesNotExistException $e) { + // shouldn't end up here + // delegation not found nothing to undelegate + } + } + + /** + * @throws ClientException + */ + public function resolveAccountUserId(int $accountId, string $currentUserId): string { + // Check if the current user owns the account + try { + $this->accountService->find($currentUserId, $accountId); + return $currentUserId; + } catch (ClientException) { + // Not the owner — check delegation + } + try { + return $this->delegationMapper->findAccountOwnerForDelegatedUser($accountId, $currentUserId); + } catch (DoesNotExistException) { + throw new ClientException("no Delegated account with id: <{$accountId}> exists for user <{$currentUserId}>"); + } + } + + /** + * @throws DoesNotExistException + * @throws ClientException + */ + public function resolveMailboxUserId(int $mailboxId, string $currentUserId): string { + $accountId = $this->mailboxMapper->findAccountIdForMailbox($mailboxId); + return $this->resolveAccountUserId($accountId, $currentUserId); + } + + /** + * @throws DoesNotExistException + * @throws ClientException + */ + public function resolveMessageUserId(int $messageId, string $currentUserId): string { + $accountId = $this->messageMapper->findAccountIdForMessage($messageId); + return $this->resolveAccountUserId($accountId, $currentUserId); + } + + /** + * @throws DoesNotExistException + * @throws ClientException + */ + public function resolveAliasUserId(int $aliasId, string $currentUserId): string { + $accountId = $this->aliasMapper->findAccountIdForAlias($aliasId); + return $this->resolveAccountUserId($accountId, $currentUserId); + } + + /** + * @throws DoesNotExistException + * @throws ClientException + */ + public function resolveLocalMessageUserId(int $localMessageId, string $currentUserId): string { + $accountId = $this->localMessageMapper->findAccountIdForLocalMessage($localMessageId); + return $this->resolveAccountUserId($accountId, $currentUserId); + } + + public function logDelegatedAction(string $currentUserId, string $effectiveUserId, string $logMessage): void { + if ($currentUserId === $effectiveUserId) { + return; + } + $this->eventDispatcher->dispatchTyped(new CriticalActionPerformedEvent($logMessage)); + } + + /** + * Send a notification on delegation + * @param string $userId The user the account is being delegated to + * @param string $currentUserId Current user + * @param Account $account The delegated account + * @param bool $delegated true for delegate|false for undelegate + * @return void + */ + private function notify(string $userId, string $currentUserId, Account $account, bool $delegated) { + $notification = $this->notificationManager->createNotification(); + $displayName = $this->userManager->get($currentUserId)?->getDisplayName() ?? $currentUserId; + $time = $this->time->getDateTime('now'); + $notification + ->setApp('mail') + ->setUser($userId) + ->setObject('delegation', (string)$account->getId()) + ->setSubject('account_delegation', [ + 'id' => $account->getId(), + 'account_email' => $account->getEmail(), + ]) + ->setDateTime($time) + ->setMessage('account_delegation_changed', [ + 'id' => $account->getId(), + 'delegated' => $delegated, + 'current_user_id' => $currentUserId, + 'current_user_display_name' => $displayName, + 'account_email' => $account->getEmail(), + ] + ); + + try { + $this->notificationManager->notify($notification); + } catch (IncompleteNotificationException $e) { + $this->logger->warning('Failed to send delegation notification to {userId}', ['userId' => $userId,'exception' => $e]); + } + } +} diff --git a/lib/Service/DkimService.php b/lib/Service/DkimService.php index 9dd7c04441..a498004774 100644 --- a/lib/Service/DkimService.php +++ b/lib/Service/DkimService.php @@ -23,27 +23,16 @@ class DkimService implements IDkimService { private const CACHE_PREFIX = 'mail_dkim'; private const CACHE_TTL = 7 * 24 * 3600; - /** @var IMAPClientFactory */ - private $clientFactory; - - /** @var MessageMapper */ - private $messageMapper; - /** @var ICache */ private $cache; - private IDkimValidator $dkimValidator; - public function __construct( - IMAPClientFactory $clientFactory, - MessageMapper $messageMapper, + private IMAPClientFactory $clientFactory, + private MessageMapper $messageMapper, ICacheFactory $cacheFactory, - IDkimValidator $dkimValidator, + private IDkimValidator $dkimValidator, ) { - $this->clientFactory = $clientFactory; - $this->messageMapper = $messageMapper; $this->cache = $cacheFactory->createLocal(self::CACHE_PREFIX); - $this->dkimValidator = $dkimValidator; } #[\Override] diff --git a/lib/Service/DraftsService.php b/lib/Service/DraftsService.php index 284c741160..1224cb8499 100644 --- a/lib/Service/DraftsService.php +++ b/lib/Service/DraftsService.php @@ -27,33 +27,21 @@ use Throwable; class DraftsService { - private IMailTransmission $transmission; - private LocalMessageMapper $mapper; - private AttachmentService $attachmentService; private IEventDispatcher $eventDispatcher; - private IMAPClientFactory $clientFactory; - private IMailManager $mailManager; - private LoggerInterface $logger; - private AccountService $accountService; private ITimeFactory $time; - public function __construct(IMailTransmission $transmission, - LocalMessageMapper $mapper, - AttachmentService $attachmentService, + public function __construct( + private IMailTransmission $transmission, + private LocalMessageMapper $mapper, + private AttachmentService $attachmentService, IEventDispatcher $eventDispatcher, - IMAPClientFactory $clientFactory, - IMailManager $mailManager, - LoggerInterface $logger, - AccountService $accountService, - ITimeFactory $time) { - $this->transmission = $transmission; - $this->mapper = $mapper; - $this->attachmentService = $attachmentService; + private IMAPClientFactory $clientFactory, + private IMailManager $mailManager, + private LoggerInterface $logger, + private AccountService $accountService, + ITimeFactory $time, + ) { $this->eventDispatcher = $eventDispatcher; - $this->clientFactory = $clientFactory; - $this->mailManager = $mailManager; - $this->logger = $logger; - $this->accountService = $accountService; $this->time = $time; } @@ -138,7 +126,6 @@ public function updateMessage(Account $account, LocalMessage $message, array $to $ccRecipients = self::convertToRecipient($cc, Recipient::TYPE_CC); $bccRecipients = self::convertToRecipient($bcc, Recipient::TYPE_BCC); - $message = $this->mapper->updateWithRecipients($message, $toRecipients, $ccRecipients, $bccRecipients); if ($attachments === []) { diff --git a/lib/Service/GroupsIntegration.php b/lib/Service/GroupsIntegration.php index 5f7f1e579a..3e4bb64e27 100644 --- a/lib/Service/GroupsIntegration.php +++ b/lib/Service/GroupsIntegration.php @@ -16,7 +16,6 @@ use OCA\Mail\Service\Group\NextcloudGroupService; use function array_map; use function mb_strlen; -use function mb_strpos; use function mb_substr; use function OCA\Mail\array_flat_map; @@ -82,7 +81,7 @@ public function servicePrefix(IGroupService $gs): string { public function expand(array $recipients): array { return array_flat_map(function (Recipient $recipient) { foreach ($this->groupServices as $service) { - if (mb_strpos($recipient->getEmail(), $this->servicePrefix($service)) !== false) { + if (str_contains($recipient->getEmail(), $this->servicePrefix($service))) { $groupId = mb_substr( $recipient->getEmail(), mb_strlen($this->servicePrefix($service)) diff --git a/lib/Service/Html.php b/lib/Service/Html.php index d56e8f1448..2cccc0ba42 100755 --- a/lib/Service/Html.php +++ b/lib/Service/Html.php @@ -44,14 +44,14 @@ class Html { /** @var IRequest */ private $request; - private ProxyHmacGenerator $hmacGenerator; - public function __construct(IURLGenerator $urlGenerator, + public function __construct( + IURLGenerator $urlGenerator, IRequest $request, - ProxyHmacGenerator $hmacGenerator) { + private ProxyHmacGenerator $hmacGenerator, + ) { $this->urlGenerator = $urlGenerator; $this->request = $request; - $this->hmacGenerator = $hmacGenerator; } /** diff --git a/lib/Service/HtmlPurify/TransformURLScheme.php b/lib/Service/HtmlPurify/TransformURLScheme.php index 85c6a54a6c..83f68bf597 100644 --- a/lib/Service/HtmlPurify/TransformURLScheme.php +++ b/lib/Service/HtmlPurify/TransformURLScheme.php @@ -104,9 +104,7 @@ private function filterHttpFtp(HTMLPurifier_URI $uri, HTMLPurifier_Context $cont } private function replaceCidWithUrl(HTMLPurifier_URI $uri): HTMLPurifier_URI { - $inlineAttachment = array_find($this->inlineAttachments, static function ($attachment) use ($uri) { - return $attachment['cid'] === $uri->path; - }); + $inlineAttachment = array_find($this->inlineAttachments, static fn ($attachment) => $attachment['cid'] === $uri->path); if ($inlineAttachment === null) { return $uri; diff --git a/lib/Service/IMipService.php b/lib/Service/IMipService.php index 028a2b8a54..328ed0a0fb 100644 --- a/lib/Service/IMipService.php +++ b/lib/Service/IMipService.php @@ -21,34 +21,21 @@ use OCP\Calendar\IManager; use Psr\Log\LoggerInterface; use Throwable; - use function array_filter; class IMipService { - private AccountService $accountService; private IManager $calendarManager; - private LoggerInterface $logger; - private MailboxMapper $mailboxMapper; - private MailManager $mailManager; - private MessageMapper $messageMapper; - private ServerVersion $serverVersion; public function __construct( - AccountService $accountService, + private AccountService $accountService, IManager $manager, - LoggerInterface $logger, - MailboxMapper $mailboxMapper, - MailManager $mailManager, - MessageMapper $messageMapper, - ServerVersion $serverVersion, + private LoggerInterface $logger, + private MailboxMapper $mailboxMapper, + private MailManager $mailManager, + private MessageMapper $messageMapper, + private ServerVersion $serverVersion, ) { - $this->accountService = $accountService; $this->calendarManager = $manager; - $this->logger = $logger; - $this->mailboxMapper = $mailboxMapper; - $this->mailManager = $mailManager; - $this->messageMapper = $messageMapper; - $this->serverVersion = $serverVersion; } public function process(): void { diff --git a/lib/Service/InternalAddressService.php b/lib/Service/InternalAddressService.php index 34ace7a608..bb06b27526 100644 --- a/lib/Service/InternalAddressService.php +++ b/lib/Service/InternalAddressService.php @@ -14,10 +14,9 @@ use OCA\Mail\Db\InternalAddressMapper; class InternalAddressService implements IInternalAddressService { - private InternalAddressMapper $mapper; - - public function __construct(InternalAddressMapper $mapper) { - $this->mapper = $mapper; + public function __construct( + private InternalAddressMapper $mapper, + ) { } #[\Override] diff --git a/lib/Service/ItineraryService.php b/lib/Service/ItineraryService.php index b19492d112..ef285b7f71 100644 --- a/lib/Service/ItineraryService.php +++ b/lib/Service/ItineraryService.php @@ -26,31 +26,17 @@ class ItineraryService { private const CACHE_PREFIX = 'mail_itinerary'; private const CACHE_TTL = 7 * 24 * 3600; - /** @var IMAPClientFactory */ - private $clientFactory; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var ItineraryExtractor */ - private $extractor; - /** @var ICache */ private $cache; - /** @var LoggerInterface */ - private $logger; - - public function __construct(IMAPClientFactory $clientFactory, - MessageMapper $messageMapper, - ItineraryExtractor $extractor, + public function __construct( + private IMAPClientFactory $clientFactory, + private MessageMapper $messageMapper, + private ItineraryExtractor $extractor, ICacheFactory $cacheFactory, - LoggerInterface $logger) { - $this->clientFactory = $clientFactory; - $this->messageMapper = $messageMapper; - $this->extractor = $extractor; + private LoggerInterface $logger, + ) { $this->cache = $cacheFactory->createLocal(self::CACHE_PREFIX); - $this->logger = $logger; } private function buildCacheKey(Account $account, Mailbox $mailbox, int $id): string { diff --git a/lib/Service/MailFilter/FilterBuilder.php b/lib/Service/MailFilter/FilterBuilder.php index 870572c91c..a2bbc91f01 100644 --- a/lib/Service/MailFilter/FilterBuilder.php +++ b/lib/Service/MailFilter/FilterBuilder.php @@ -23,7 +23,6 @@ public function __construct( ) { } - public function buildSieveScript(array $filters, string $untouchedScript): string { $commands = []; $extensions = []; diff --git a/lib/Service/MailManager.php b/lib/Service/MailManager.php index 1b94bf8cf0..1fb1ce58fa 100644 --- a/lib/Service/MailManager.php +++ b/lib/Service/MailManager.php @@ -58,64 +58,24 @@ class MailManager implements IMailManager { 'recent' => [Horde_Imap_Client::FLAG_RECENT], ]; - /** @var IMAPClientFactory */ - private $imapClientFactory; - - /** @var MailboxSync */ - private $mailboxSync; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var FolderMapper */ - private $folderMapper; - - /** @var ImapMessageMapper */ - private $imapMessageMapper; - - /** @var DbMessageMapper */ - private $dbMessageMapper; - /** @var IEventDispatcher */ private $eventDispatcher; - /** @var LoggerInterface */ - private $logger; - - /** @var TagMapper */ - private $tagMapper; - - /** @var MessageTagsMapper */ - private $messageTagsMapper; - - /** @var ThreadMapper */ - private $threadMapper; - public function __construct( - IMAPClientFactory $imapClientFactory, - MailboxMapper $mailboxMapper, - MailboxSync $mailboxSync, - FolderMapper $folderMapper, - ImapMessageMapper $messageMapper, - DbMessageMapper $dbMessageMapper, + private IMAPClientFactory $imapClientFactory, + private MailboxMapper $mailboxMapper, + private MailboxSync $mailboxSync, + private FolderMapper $folderMapper, + private ImapMessageMapper $imapMessageMapper, + private DbMessageMapper $dbMessageMapper, IEventDispatcher $eventDispatcher, - LoggerInterface $logger, - TagMapper $tagMapper, - MessageTagsMapper $messageTagsMapper, - ThreadMapper $threadMapper, + private LoggerInterface $logger, + private TagMapper $tagMapper, + private MessageTagsMapper $messageTagsMapper, + private ThreadMapper $threadMapper, private ImapFlag $imapFlag, ) { - $this->imapClientFactory = $imapClientFactory; - $this->mailboxMapper = $mailboxMapper; - $this->mailboxSync = $mailboxSync; - $this->folderMapper = $folderMapper; - $this->imapMessageMapper = $messageMapper; - $this->dbMessageMapper = $dbMessageMapper; $this->eventDispatcher = $eventDispatcher; - $this->logger = $logger; - $this->tagMapper = $tagMapper; - $this->messageTagsMapper = $messageTagsMapper; - $this->threadMapper = $threadMapper; } #[\Override] diff --git a/lib/Service/MailTransmission.php b/lib/Service/MailTransmission.php index ad5a4d2a1b..493e4d0c11 100644 --- a/lib/Service/MailTransmission.php +++ b/lib/Service/MailTransmission.php @@ -14,7 +14,6 @@ use Horde_Imap_Client_Data_Fetch; use Horde_Imap_Client_Fetch_Query; use Horde_Imap_Client_Ids; -use Horde_Mail_Rfc822_Address; use Horde_Mail_Rfc822_List; use Horde_Mail_Transport_Null; use Horde_Mail_Transport_Smtphorde; @@ -26,6 +25,7 @@ use Horde_Mime_Headers_Subject; use Horde_Mime_Mail; use Horde_Mime_Mdn; +use Horde_Mime_Part; use Horde_Smtp_Exception; use OCA\Mail\Account; use OCA\Mail\Address; @@ -108,29 +108,46 @@ public function sendMessage(Account $account, LocalMessage $localMessage): void } $transport = $this->smtpClientFactory->create($account); - // build mime body - $headers = $this->buildHeaders( - $from, - $to, - $cc, - $bcc, - $localMessage->getSubject() - ); + // Build full headers for the Sent-folder copy (FCC), including Bcc so the + // sender can see who was blind-copied when reviewing sent mail — the same + // approach used by Horde IMP and other clients (Evolution, Thunderbird). + $fccHeaders = new Horde_Mime_Headers(); + $fccHeaders->addHeaderOb(Horde_Mime_Headers_Date::create()); + $fccHeaders->addHeaderOb(Horde_Mime_Headers_MessageId::create()); + $fccHeaders->addHeaderOb(new Horde_Mime_Headers_Addresses('From', $from->toHorde())); + $fccHeaders->addHeaderOb(new Horde_Mime_Headers_Addresses('To', $to->toHorde())); + if (count($cc) > 0) { + $fccHeaders->addHeaderOb(new Horde_Mime_Headers_Addresses('Cc', $cc->toHorde())); + } + if (count($bcc) > 0) { + $fccHeaders->addHeaderOb(new Horde_Mime_Headers_Addresses('Bcc', $bcc->toHorde())); + } + if ($localMessage->getSubject() !== null) { + $fccHeaders->addHeader('Subject', $localMessage->getSubject()); + } // The table (oc_local_messages) currently only allows for a single reply to message id // but we already set the 'references' header for an email so we could support multiple references // Get the previous message and then concatenate all its "References" message ids with this one if (($inReplyTo = $localMessage->getInReplyToMessageId()) !== null) { - $headers['References'] = $inReplyTo; - $headers['In-Reply-To'] = $inReplyTo; + $fccHeaders->addHeader('References', $inReplyTo); + $fccHeaders->addHeader('In-Reply-To', $inReplyTo); } - if ($localMessage->getRequestMdn()) { - $headers[Horde_Mime_Mdn::MDN_HEADER] = $from->toHorde(); + $fccHeaders->addHeaderOb(new Horde_Mime_Headers_Addresses(Horde_Mime_Mdn::MDN_HEADER, $from->toHorde())); } - $mail = new Horde_Mime_Mail(); - $mail->addHeaders($headers); + // For SMTP delivery: strip Bcc so it never appears in the transmitted + // message (RFC 5321). All three recipient lists are passed as SMTP + // envelope recipients so every addressee still receives the mail. + $sendHeaders = clone $fccHeaders; + $sendHeaders->removeHeader('Bcc'); + + $smtpRecipients = new Horde_Mail_Rfc822_List(); + $smtpRecipients->add($to->toHorde()); + $smtpRecipients->add($cc->toHorde()); + $smtpRecipients->add($bcc->toHorde()); + $smtpRecipients->unique(); $mimeMessage = new MimeMessage( new DataUriParser() @@ -151,12 +168,14 @@ public function sendMessage(Account $account, LocalMessage $localMessage): void return; } - $mail->setBasePart($mimePart); - // Send the message try { - $mail->send($transport, false, false); - $localMessage->setRaw($mail->getRaw(false)); + $mimePart->send($smtpRecipients->writeAddress(), $sendHeaders, $transport); + $localMessage->setRaw($mimePart->toString([ + 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY, + 'headers' => $fccHeaders, + 'stream' => false, + ])); $localMessage->setStatus(LocalMessage::STATUS_RAW); } catch (Horde_Mime_Exception $e) { if ($e->getPrevious() instanceof Horde_Smtp_Exception) { @@ -175,7 +194,11 @@ public function sendMessage(Account $account, LocalMessage $localMessage): void } try { - $localMessage->setRaw($mail->getRaw(false)); + $localMessage->setRaw($mimePart->toString([ + 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY, + 'headers' => $fccHeaders, + 'stream' => false, + ])); } catch (Throwable) { // Having the raw message is nice for troubleshooting, but should not fail hard. } @@ -211,36 +234,30 @@ public function saveLocalDraft(Account $account, LocalMessage $message): void { $this->transmissionService->handleAttachment($account, $attachment); } - // build mime body - $headers = $this->buildHeaders( - $from, - $to, - $cc, - $bcc, - $message->getSubject() - ); + $draftHeaders = $this->buildMimeHeaders($from, $to, $cc, $bcc, $message->getSubject()); $mail = new Horde_Mime_Mail(); - $mail->addHeaders($headers); if ($message->isHtml()) { $mail->setHtmlBody($message->getBodyHtml()); } else { $mail->setBody($message->getBodyPlain()); } - $mail->addHeaderOb(Horde_Mime_Headers_MessageId::create()); $perfLogger->step('build local draft message'); - // 'Send' the message + // Use a null transport to trigger MIME body encoding without sending $client = $this->imapClientFactory->getClient($account); try { - $transport = new Horde_Mail_Transport_Null(); - $mail->send($transport, false, false); + $mail->send(new Horde_Mail_Transport_Null(), false, false); $perfLogger->step('create IMAP draft message'); $draftsMailbox = $this->findOrCreateDraftsMailbox($account); $this->messageMapper->save( $client, $draftsMailbox, - $mail->getRaw(false), + $mail->getBasePart()->toString([ + 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY, + 'headers' => $draftHeaders, + 'stream' => false, + ]), [Horde_Imap_Client::FLAG_DRAFT] ); $perfLogger->step('save local draft message on IMAP'); @@ -293,7 +310,7 @@ public function saveDraft(NewMessageData $message, ?Message $previousDraft = nul $account = $message->getAccount(); $from = Address::fromRaw($account->getName(), $account->getEMailAddress()); - $headers = $this->buildHeaders( + $draftHeaders = $this->buildMimeHeaders( $from, $message->getTo(), $message->getCc(), @@ -302,22 +319,19 @@ public function saveDraft(NewMessageData $message, ?Message $previousDraft = nul ); $mail = new Horde_Mime_Mail(); - $mail->addHeaders($headers); if ($message->isHtml()) { $mail->setHtmlBody($message->getBody()); } else { $mail->setBody($message->getBody()); } - $mail->addHeaderOb(Horde_Mime_Headers_MessageId::create()); $perfLogger->step('build draft message'); - // 'Send' the message + // Use a null transport to trigger MIME body encoding without sending $client = $this->imapClientFactory->getClient($account); try { - $transport = new Horde_Mail_Transport_Null(); - $mail->send($transport, false, false); + $mail->send(new Horde_Mail_Transport_Null(), false, false); $perfLogger->step('create IMAP message'); - // save the message in the drafts folder + // save the message in the drafts mailbox $draftsMailboxId = $account->getMailAccount()->getDraftsMailboxId(); if ($draftsMailboxId === null) { throw new ClientException('No drafts mailbox configured'); @@ -326,7 +340,11 @@ public function saveDraft(NewMessageData $message, ?Message $previousDraft = nul $newUid = $this->messageMapper->save( $client, $draftsMailbox, - $mail->getRaw(false), + $mail->getBasePart()->toString([ + 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY, + 'headers' => $draftHeaders, + 'stream' => false, + ]), [Horde_Imap_Client::FLAG_DRAFT] ); $perfLogger->step('save message on IMAP'); @@ -348,29 +366,21 @@ public function saveDraft(NewMessageData $message, ?Message $previousDraft = nul return [$account, $draftsMailbox, $newUid]; } - /** - * @return array{ - * From: Horde_Mail_Rfc822_Address, - * To: Horde_Mail_Rfc822_List, - * Subject: string|null, - * Cc?: Horde_Mail_Rfc822_List, - * Bcc?: Horde_Mail_Rfc822_List, - * } - */ - private function buildHeaders(Address $from, AddressList $to, AddressList $cc, AddressList $bcc, ?string $subject): array { - $headers = [ - 'From' => $from->toHorde(), - 'To' => $to->toHorde(), - 'Subject' => $subject, - ]; - + private function buildMimeHeaders(Address $from, AddressList $to, AddressList $cc, AddressList $bcc, ?string $subject): Horde_Mime_Headers { + $headers = new Horde_Mime_Headers(); + $headers->addHeaderOb(Horde_Mime_Headers_Date::create()); + $headers->addHeaderOb(Horde_Mime_Headers_MessageId::create()); + $headers->addHeaderOb(new Horde_Mime_Headers_Addresses('From', $from->toHorde())); + $headers->addHeaderOb(new Horde_Mime_Headers_Addresses('To', $to->toHorde())); if (count($cc) > 0) { - $headers['Cc'] = $cc->toHorde(); + $headers->addHeaderOb(new Horde_Mime_Headers_Addresses('Cc', $cc->toHorde())); } if (count($bcc) > 0) { - $headers['Bcc'] = $bcc->toHorde(); + $headers->addHeaderOb(new Horde_Mime_Headers_Addresses('Bcc', $bcc->toHorde())); + } + if ($subject !== null) { + $headers->addHeader('Subject', $subject); } - return $headers; } diff --git a/lib/Service/MimeMessage.php b/lib/Service/MimeMessage.php index 1188d18500..ccc29d315a 100644 --- a/lib/Service/MimeMessage.php +++ b/lib/Service/MimeMessage.php @@ -19,10 +19,9 @@ use OCA\Mail\Service\DataUri\DataUriParser; class MimeMessage { - private DataUriParser $uriParser; - - public function __construct(DataUriParser $uriParser) { - $this->uriParser = $uriParser; + public function __construct( + private DataUriParser $uriParser, + ) { } /** @@ -237,7 +236,6 @@ private function buildPgpPart(string $content): Horde_Mime_Part { $basePart[] = $contentPart; return $basePart; - } /** diff --git a/lib/Service/OauthStateService.php b/lib/Service/OauthStateService.php new file mode 100644 index 0000000000..beb9210bb2 --- /dev/null +++ b/lib/Service/OauthStateService.php @@ -0,0 +1,52 @@ +time->getTime(); + $hmac = bin2hex($this->crypto->calculateHMAC("$accountId.$userId.$timestamp")); + return "$accountId.$timestamp.$hmac"; + } + + /** + * @throws InvalidOauthStateException + */ + public function validateAndConsume(string $state, string $userId): int { + $parts = explode('.', $state, 3); + if (count($parts) !== 3) { + throw new InvalidOauthStateException('Malformed OAuth state'); + } + [$accountId, $timestamp, $hmac] = $parts; + + $expected = bin2hex($this->crypto->calculateHMAC("$accountId.$userId.$timestamp")); + if (!hash_equals($expected, $hmac)) { + throw new InvalidOauthStateException('OAuth state HMAC mismatch'); + } + + if (($this->time->getTime() - (int)$timestamp) > self::TTL) { + throw new InvalidOauthStateException('OAuth state expired'); + } + + return (int)$accountId; + } +} diff --git a/lib/Service/OutboxService.php b/lib/Service/OutboxService.php index 0e81ae325a..f4aee70355 100644 --- a/lib/Service/OutboxService.php +++ b/lib/Service/OutboxService.php @@ -29,50 +29,25 @@ class OutboxService { - - /** @var LocalMessageMapper */ - private $mapper; - - /** @var AttachmentService */ - private $attachmentService; - /** @var IEventDispatcher */ private $eventDispatcher; - /** @var IMAPClientFactory */ - private $clientFactory; - - /** @var IMailManager */ - private $mailManager; - - /** @var AccountService */ - private $accountService; - /** @var ITimeFactory */ private $timeFactory; - /** @var LoggerInterface */ - private $logger; - public function __construct( - LocalMessageMapper $mapper, - AttachmentService $attachmentService, + private LocalMessageMapper $mapper, + private AttachmentService $attachmentService, IEventDispatcher $eventDispatcher, - IMAPClientFactory $clientFactory, - IMailManager $mailManager, - AccountService $accountService, + private IMAPClientFactory $clientFactory, + private IMailManager $mailManager, + private AccountService $accountService, ITimeFactory $timeFactory, - LoggerInterface $logger, + private LoggerInterface $logger, private Chain $sendChain, ) { - $this->mapper = $mapper; - $this->attachmentService = $attachmentService; $this->eventDispatcher = $eventDispatcher; - $this->clientFactory = $clientFactory; - $this->mailManager = $mailManager; $this->timeFactory = $timeFactory; - $this->logger = $logger; - $this->accountService = $accountService; } /** diff --git a/lib/Service/PhishingDetection/LinkCheck.php b/lib/Service/PhishingDetection/LinkCheck.php index 8b77465317..882f618f3e 100644 --- a/lib/Service/PhishingDetection/LinkCheck.php +++ b/lib/Service/PhishingDetection/LinkCheck.php @@ -17,7 +17,6 @@ class LinkCheck { protected IL10N $l10n; - public function __construct(IL10N $l10n) { $this->l10n = $l10n; } diff --git a/lib/Service/PhishingDetection/ReplyToCheck.php b/lib/Service/PhishingDetection/ReplyToCheck.php index aadaa73180..fc3eac995e 100644 --- a/lib/Service/PhishingDetection/ReplyToCheck.php +++ b/lib/Service/PhishingDetection/ReplyToCheck.php @@ -28,7 +28,6 @@ public function run(string $fromEmail, ?string $replyToEmail) :PhishingDetection } return new PhishingDetectionResult(PhishingDetectionResult::REPLYTO_CHECK, true, $this->l10n->t('Reply-To email: %1$s is different from sender email: %2$s', [$replyToEmail, $fromEmail])); - } } diff --git a/lib/Service/PreprocessingService.php b/lib/Service/PreprocessingService.php index 976b174891..2c9390e09c 100644 --- a/lib/Service/PreprocessingService.php +++ b/lib/Service/PreprocessingService.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Service; use OCA\Mail\Account; @@ -15,21 +16,12 @@ use Psr\Log\LoggerInterface; class PreprocessingService { - private MailboxMapper $mailboxMapper; - private MessageMapper $messageMapper; - private LoggerInterface $logger; - private PreviewEnhancer $previewEnhancer; - public function __construct( - MessageMapper $messageMapper, - LoggerInterface $logger, - MailboxMapper $mailboxMapper, - PreviewEnhancer $previewEnhancer, + private MessageMapper $messageMapper, + private LoggerInterface $logger, + private MailboxMapper $mailboxMapper, + private PreviewEnhancer $previewEnhancer, ) { - $this->messageMapper = $messageMapper; - $this->logger = $logger; - $this->mailboxMapper = $mailboxMapper; - $this->previewEnhancer = $previewEnhancer; } public function process(int $limitTimestamp, Account $account): void { diff --git a/lib/Service/Provisioning/Manager.php b/lib/Service/Provisioning/Manager.php index 670da69351..e3ff4d5fe6 100644 --- a/lib/Service/Provisioning/Manager.php +++ b/lib/Service/Provisioning/Manager.php @@ -40,53 +40,33 @@ class Manager { /** @var IUserManager */ private $userManager; - /** @var ProvisioningMapper */ - private $provisioningMapper; - - /** @var MailAccountMapper */ - private $mailAccountMapper; - /** @var ICrypto */ private $crypto; /** @var ILDAPProviderFactory */ private $ldapProviderFactory; - /** @var AliasMapper */ - private $aliasMapper; - - /** @var LoggerInterface */ - private $logger; - - /** @var TagMapper */ - private $tagMapper; - /** @var ICacheFactory */ private $cacheFactory; public function __construct( IAppManager $appManager, IUserManager $userManager, - ProvisioningMapper $provisioningMapper, - MailAccountMapper $mailAccountMapper, + private ProvisioningMapper $provisioningMapper, + private MailAccountMapper $mailAccountMapper, ICrypto $crypto, ILDAPProviderFactory $ldapProviderFactory, - AliasMapper $aliasMapper, - LoggerInterface $logger, - TagMapper $tagMapper, + private AliasMapper $aliasMapper, + private LoggerInterface $logger, + private TagMapper $tagMapper, ICacheFactory $cacheFactory, private AccountService $accountService, private ClassificationSettingsService $classificationSettingsService, ) { $this->appManager = $appManager; $this->userManager = $userManager; - $this->provisioningMapper = $provisioningMapper; - $this->mailAccountMapper = $mailAccountMapper; $this->crypto = $crypto; $this->ldapProviderFactory = $ldapProviderFactory; - $this->aliasMapper = $aliasMapper; - $this->logger = $logger; - $this->tagMapper = $tagMapper; $this->cacheFactory = $cacheFactory; } diff --git a/lib/Service/Quota.php b/lib/Service/Quota.php index 4bb451a5c7..fae9f36931 100644 --- a/lib/Service/Quota.php +++ b/lib/Service/Quota.php @@ -13,16 +13,10 @@ use ReturnTypeWillChange; final class Quota implements JsonSerializable { - /** @var int */ - private $usage; - - /** @var int */ - private $limit; - - public function __construct(int $usage, - int $limit) { - $this->usage = $usage; - $this->limit = $limit; + public function __construct( + private int $usage, + private int $limit, + ) { } public function getUsage(): int { diff --git a/lib/Service/Search/FilterStringParser.php b/lib/Service/Search/FilterStringParser.php index 0713f0d33d..7cc8d192d4 100644 --- a/lib/Service/Search/FilterStringParser.php +++ b/lib/Service/Search/FilterStringParser.php @@ -127,7 +127,6 @@ private function parseFilterToken(SearchQuery $query, string $token): bool { } } - return true; } diff --git a/lib/Service/Search/Flag.php b/lib/Service/Search/Flag.php index fac13607e2..2b78b0d382 100644 --- a/lib/Service/Search/Flag.php +++ b/lib/Service/Search/Flag.php @@ -23,18 +23,13 @@ final class Flag { public const IMPORTANT = Tag::LABEL_IMPORTANT; public const DELETED = Horde_Imap_Client::FLAG_DELETED; - /** @var string */ - private $flag; - - /** @var bool */ - private $isSet; - /** * @psalm-param Flag::* $flag */ - private function __construct(string $flag, bool $isSet) { - $this->flag = $flag; - $this->isSet = $isSet; + private function __construct( + private string $flag, + private bool $isSet, + ) { } /** diff --git a/lib/Service/Search/FlagExpression.php b/lib/Service/Search/FlagExpression.php index 4c8cb82522..24a66f0e82 100644 --- a/lib/Service/Search/FlagExpression.php +++ b/lib/Service/Search/FlagExpression.php @@ -10,25 +10,16 @@ namespace OCA\Mail\Service\Search; class FlagExpression { - /** - * @var string - * @psalm-var "and"|"or" - */ - private $operator; - - /** - * @var array - * @psalm-var (Flag|FlagExpression)[] - */ - private $operands; - - /** - * @psalm-param "and"|"or" $operator - * @param array $operands - */ - private function __construct(string $operator, array $operands) { - $this->operator = $operator; - $this->operands = $operands; + private function __construct( + /** + * @psalm-var "and"|"or" + */ + private string $operator, + /** + * @psalm-var (Flag|FlagExpression)[] + */ + private array $operands, + ) { } /** diff --git a/lib/Service/Search/MailSearch.php b/lib/Service/Search/MailSearch.php index 16f8ada442..6212fa5214 100644 --- a/lib/Service/Search/MailSearch.php +++ b/lib/Service/Search/MailSearch.php @@ -26,30 +26,16 @@ use OCP\IUser; class MailSearch implements IMailSearch { - /** @var FilterStringParser */ - private $filterStringParser; - - /** @var ImapSearchProvider */ - private $imapSearchProvider; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var PreviewEnhancer */ - private $previewEnhancer; - /** @var ITimeFactory */ private $timeFactory; - public function __construct(FilterStringParser $filterStringParser, - ImapSearchProvider $imapSearchProvider, - MessageMapper $messageMapper, - PreviewEnhancer $previewEnhancer, - ITimeFactory $timeFactory) { - $this->filterStringParser = $filterStringParser; - $this->imapSearchProvider = $imapSearchProvider; - $this->messageMapper = $messageMapper; - $this->previewEnhancer = $previewEnhancer; + public function __construct( + private FilterStringParser $filterStringParser, + private ImapSearchProvider $imapSearchProvider, + private MessageMapper $messageMapper, + private PreviewEnhancer $previewEnhancer, + ITimeFactory $timeFactory, + ) { $this->timeFactory = $timeFactory; } diff --git a/lib/Service/SetupService.php b/lib/Service/SetupService.php index 20775b51ec..beb857e560 100644 --- a/lib/Service/SetupService.php +++ b/lib/Service/SetupService.php @@ -25,36 +25,18 @@ use function in_array; class SetupService { - /** @var AccountService */ - private $accountService; - /** @var ICrypto */ private $crypto; - /** @var SmtpClientFactory */ - private $smtpClientFactory; - - /** @var IMAPClientFactory */ - private $imapClientFactory; - - /** @var LoggerInterface */ - private $logger; - - /** @var TagMapper */ - private $tagMapper; - - public function __construct(AccountService $accountService, + public function __construct( + private AccountService $accountService, ICrypto $crypto, - SmtpClientFactory $smtpClientFactory, - IMAPClientFactory $imapClientFactory, - LoggerInterface $logger, - TagMapper $tagMapper) { - $this->accountService = $accountService; + private SmtpClientFactory $smtpClientFactory, + private IMAPClientFactory $imapClientFactory, + private LoggerInterface $logger, + private TagMapper $tagMapper, + ) { $this->crypto = $crypto; - $this->smtpClientFactory = $smtpClientFactory; - $this->imapClientFactory = $imapClientFactory; - $this->logger = $logger; - $this->tagMapper = $tagMapper; } /** diff --git a/lib/Service/SmimeService.php b/lib/Service/SmimeService.php index 3c9f99b079..1e3c0cf3d8 100644 --- a/lib/Service/SmimeService.php +++ b/lib/Service/SmimeService.php @@ -39,17 +39,16 @@ class SmimeService { private ITempManager $tempManager; private ICertificateManager $certificateManager; private ICrypto $crypto; - private SmimeCertificateMapper $certificateMapper; - - public function __construct(ITempManager $tempManager, + public function __construct( + ITempManager $tempManager, ICertificateManager $certificateManager, ICrypto $crypto, - SmimeCertificateMapper $certificateMapper) { + private SmimeCertificateMapper $certificateMapper, + ) { $this->tempManager = $tempManager; $this->certificateManager = $certificateManager; $this->crypto = $crypto; - $this->certificateMapper = $certificateMapper; } /** diff --git a/lib/Service/SnoozeService.php b/lib/Service/SnoozeService.php index ae45e8bcd8..56426923fa 100644 --- a/lib/Service/SnoozeService.php +++ b/lib/Service/SnoozeService.php @@ -231,7 +231,6 @@ public function unSnoozeThread( } } - /** * Adds a DB entry for the message with a wake timestamp * diff --git a/lib/Service/Sync/ImapToDbSynchronizer.php b/lib/Service/Sync/ImapToDbSynchronizer.php index a48805dd41..2cf929bc43 100644 --- a/lib/Service/Sync/ImapToDbSynchronizer.php +++ b/lib/Service/Sync/ImapToDbSynchronizer.php @@ -50,59 +50,24 @@ class ImapToDbSynchronizer { /** @var int */ public const MAX_NEW_MESSAGES = 5000; - /** @var DatabaseMessageMapper */ - private $dbMapper; - - /** @var IMAPClientFactory */ - private $clientFactory; - - /** @var ImapMessageMapper */ - private $imapMapper; - - /** @var MailboxMapper */ - private $mailboxMapper; - - /** @var Synchronizer */ - private $synchronizer; - /** @var IEventDispatcher */ private $dispatcher; - /** @var PerformanceLogger */ - private $performanceLogger; - - /** @var LoggerInterface */ - private $logger; - - /** @var IMailManager */ - private $mailManager; - - private TagMapper $tagMapper; - private NewMessagesClassifier $newMessagesClassifier; - - public function __construct(DatabaseMessageMapper $dbMapper, - IMAPClientFactory $clientFactory, - ImapMessageMapper $imapMapper, - MailboxMapper $mailboxMapper, + public function __construct( + private DatabaseMessageMapper $dbMapper, + private IMAPClientFactory $clientFactory, + private ImapMessageMapper $imapMapper, + private MailboxMapper $mailboxMapper, DatabaseMessageMapper $messageMapper, - Synchronizer $synchronizer, + private Synchronizer $synchronizer, IEventDispatcher $dispatcher, - PerformanceLogger $performanceLogger, - LoggerInterface $logger, - IMailManager $mailManager, - TagMapper $tagMapper, - NewMessagesClassifier $newMessagesClassifier) { - $this->dbMapper = $dbMapper; - $this->clientFactory = $clientFactory; - $this->imapMapper = $imapMapper; - $this->mailboxMapper = $mailboxMapper; - $this->synchronizer = $synchronizer; + private PerformanceLogger $performanceLogger, + private LoggerInterface $logger, + private IMailManager $mailManager, + private TagMapper $tagMapper, + private NewMessagesClassifier $newMessagesClassifier, + ) { $this->dispatcher = $dispatcher; - $this->performanceLogger = $performanceLogger; - $this->logger = $logger; - $this->mailManager = $mailManager; - $this->tagMapper = $tagMapper; - $this->newMessagesClassifier = $newMessagesClassifier; } /** @@ -335,57 +300,56 @@ private function runInitialSync( $logger ); - // Need a client without a cache - $client->logout(); - $client = $this->clientFactory->getClient($account, false); - - $highestKnownUid = $this->dbMapper->findHighestUid($mailbox); + // Use a no-cache client for findAll. Horde accumulates cache state on + // every iteration of the findAll loop, causing a memory leak on large + // mailboxes (commit e50c214ff). Do NOT logout $client — the caller owns + // it and we need it below for getSyncToken. + $noCacheClient = $this->clientFactory->getClient($account, false); try { - $imapMessages = $this->imapMapper->findAll( - $client, - $mailbox->getName(), - self::MAX_NEW_MESSAGES, - $highestKnownUid ?? 0, - $logger, - $perf, - $account->getUserId(), - ); - $perf->step(sprintf('fetch %d messages from IMAP', count($imapMessages))); - } catch (Horde_Imap_Client_Exception $e) { - throw new ServiceException('Can not get messages from mailbox ' . $mailbox->getName() . ': ' . $e->getMessage(), 0, $e); - } - - foreach (array_chunk($imapMessages['messages'], 500) as $chunk) { - $messages = array_map(static fn (IMAPMessage $imapMessage) => $imapMessage->toDbMessage($mailbox->getId(), $account->getMailAccount()), $chunk); - $this->dbMapper->insertBulk($account, ...$messages); - $perf->step(sprintf('persist %d messages in database', count($chunk))); - // Free the memory - unset($messages); - } + $highestKnownUid = $this->dbMapper->findHighestUid($mailbox); + try { + $imapMessages = $this->imapMapper->findAll( + $noCacheClient, + $mailbox->getName(), + self::MAX_NEW_MESSAGES, + $highestKnownUid ?? 0, + $logger, + $perf, + $account->getUserId(), + ); + $perf->step(sprintf('fetch %d messages from IMAP', count($imapMessages))); + } catch (Horde_Imap_Client_Exception $e) { + throw new ServiceException('Can not get messages from mailbox ' . $mailbox->getName() . ': ' . $e->getMessage(), 0, $e); + } - if (!$imapMessages['all']) { - // We might need more attempts to fill the cache - $loggingMailboxId = $account->getId() . ':' . $mailbox->getName(); - $total = $imapMessages['total']; - $cached = count($this->dbMapper->findAllUids($mailbox)); - $perf->step('find number of cached UIDs'); + foreach (array_chunk($imapMessages['messages'], 500) as $chunk) { + $messages = array_map(static fn (IMAPMessage $imapMessage) => $imapMessage->toDbMessage($mailbox->getId(), $account->getMailAccount()), $chunk); + $this->dbMapper->insertBulk($account, ...$messages); + $perf->step(sprintf('persist %d messages in database', count($chunk))); + // Free the memory + unset($messages); + } - $perf->end(); - throw new IncompleteSyncException("Initial sync is not complete for $loggingMailboxId ($cached of $total messages cached)."); - } + if (!$imapMessages['all']) { + // We might need more attempts to fill the cache + $loggingMailboxId = $account->getId() . ':' . $mailbox->getName(); + $total = $imapMessages['total']; + $cached = count($this->dbMapper->findAllUids($mailbox)); + $perf->step('find number of cached UIDs'); - // Get the sync token from a cache-enabled client. The non-cache client - // used above does not activate CONDSTORE/QRESYNC, so its sync token - // lacks HIGHESTMODSEQ. Without it, the first partial sync falls into - // Horde's "no MODSEQ" fallback that resolves ALL UIDs, causing OOM on - // large mailboxes. - $client->logout(); - $cacheClient = $this->clientFactory->getClient($account); - try { - $syncToken = $cacheClient->getSyncToken($mailbox->getName()); + $perf->end(); + throw new IncompleteSyncException("Initial sync is not complete for $loggingMailboxId ($cached of $total messages cached)."); + } } finally { - $cacheClient->logout(); + $noCacheClient->logout(); } + + // Use the cache-enabled $client passed in for the sync token. The no-cache + // client does not activate CONDSTORE/QRESYNC (commit 7980d9e40), so its + // token lacks HIGHESTMODSEQ — causing the first partial sync to resolve ALL + // UIDs and run OOM on large mailboxes. Do NOT logout $client here; the + // caller (syncAccount) owns and closes it. + $syncToken = $client->getSyncToken($mailbox->getName()); $mailbox->setSyncNewToken($syncToken); $mailbox->setSyncChangedToken($syncToken); $mailbox->setSyncVanishedToken($syncToken); diff --git a/lib/Service/Sync/SyncService.php b/lib/Service/Sync/SyncService.php index 0cff18572e..2dd31103f3 100644 --- a/lib/Service/Sync/SyncService.php +++ b/lib/Service/Sync/SyncService.php @@ -30,41 +30,15 @@ class SyncService { - private IMAPClientFactory $clientFactory; - - /** @var ImapToDbSynchronizer */ - private $synchronizer; - - /** @var FilterStringParser */ - private $filterStringParser; - - /** @var MessageMapper */ - private $messageMapper; - - /** @var PreviewEnhancer */ - private $previewEnhancer; - - /** @var LoggerInterface */ - private $logger; - - /** @var MailboxSync */ - private $mailboxSync; - public function __construct( - IMAPClientFactory $clientFactory, - ImapToDbSynchronizer $synchronizer, - FilterStringParser $filterStringParser, - MessageMapper $messageMapper, - PreviewEnhancer $previewEnhancer, - LoggerInterface $logger, - MailboxSync $mailboxSync) { - $this->clientFactory = $clientFactory; - $this->synchronizer = $synchronizer; - $this->filterStringParser = $filterStringParser; - $this->messageMapper = $messageMapper; - $this->previewEnhancer = $previewEnhancer; - $this->logger = $logger; - $this->mailboxSync = $mailboxSync; + private IMAPClientFactory $clientFactory, + private ImapToDbSynchronizer $synchronizer, + private FilterStringParser $filterStringParser, + private MessageMapper $messageMapper, + private PreviewEnhancer $previewEnhancer, + private LoggerInterface $logger, + private MailboxSync $mailboxSync, + ) { } /** diff --git a/lib/Service/TextBlockService.php b/lib/Service/TextBlockService.php index 33c8b018c6..ec245edfe8 100644 --- a/lib/Service/TextBlockService.php +++ b/lib/Service/TextBlockService.php @@ -88,7 +88,6 @@ public function delete(int $textBlockId, string $userId): void { $this->textBlockShareMapper->deleteByTextBlockId($textBlockId); } - /** * @throws UserNotFoundException * @throws ShareeAlreadyExistsException diff --git a/lib/Service/TransmissionService.php b/lib/Service/TransmissionService.php index af3ac3c4a4..6832e920d3 100644 --- a/lib/Service/TransmissionService.php +++ b/lib/Service/TransmissionService.php @@ -5,6 +5,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + namespace OCA\Mail\Service; use Horde_Mime_Part; diff --git a/lib/Service/TrustedSenderService.php b/lib/Service/TrustedSenderService.php index d9b355316e..cc14101f0c 100644 --- a/lib/Service/TrustedSenderService.php +++ b/lib/Service/TrustedSenderService.php @@ -14,11 +14,9 @@ use OCA\Mail\Db\TrustedSenderMapper; class TrustedSenderService implements ITrustedSenderService { - /** @var TrustedSenderMapper */ - private $mapper; - - public function __construct(TrustedSenderMapper $mapper) { - $this->mapper = $mapper; + public function __construct( + private TrustedSenderMapper $mapper, + ) { } #[\Override] diff --git a/lib/Settings/AdminSettings.php b/lib/Settings/AdminSettings.php index 32e8c004a7..d7658b1b1b 100644 --- a/lib/Settings/AdminSettings.php +++ b/lib/Settings/AdminSettings.php @@ -17,58 +17,35 @@ use OCA\Mail\Service\Classification\ClassificationSettingsService; use OCA\Mail\Service\Provisioning\Manager as ProvisioningManager; use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Services\IInitialState; use OCP\Defaults; use OCP\IConfig; -use OCP\IInitialStateService; use OCP\Settings\ISettings; -use OCP\TextProcessing\FreePromptTaskType; -use OCP\TextProcessing\SummaryTaskType; +use OCP\TaskProcessing\TaskTypes\TextToText; +use OCP\TaskProcessing\TaskTypes\TextToTextSummary; class AdminSettings implements ISettings { - /** @var IInitialStateService */ - private $initialStateService; - - /** @var ProvisioningManager */ - private $provisioningManager; - - /** @var AntiSpamService */ - private $antiSpamService; - - private GoogleIntegration $googleIntegration; - private MicrosoftIntegration $microsoftIntegration; - private IConfig $config; - private AiIntegrationsService $aiIntegrationsService; - public function __construct( - IInitialStateService $initialStateService, - ProvisioningManager $provisioningManager, - AntiSpamService $antiSpamService, - GoogleIntegration $googleIntegration, - MicrosoftIntegration $microsoftIntegration, - IConfig $config, - AiIntegrationsService $aiIntegrationsService, + private IInitialState $initialStateService, + private ProvisioningManager $provisioningManager, + private AntiSpamService $antiSpamService, + private GoogleIntegration $googleIntegration, + private MicrosoftIntegration $microsoftIntegration, + private IConfig $config, + private AiIntegrationsService $aiIntegrationsService, private Defaults $themingDefaults, private ClassificationSettingsService $classificationSettingsService, ) { - $this->initialStateService = $initialStateService; - $this->provisioningManager = $provisioningManager; - $this->antiSpamService = $antiSpamService; - $this->googleIntegration = $googleIntegration; - $this->microsoftIntegration = $microsoftIntegration; - $this->config = $config; - $this->aiIntegrationsService = $aiIntegrationsService; } #[\Override] public function getForm() { $this->initialStateService->provideInitialState( - Application::APP_ID, 'provisioning_settings', $this->provisioningManager->getConfigs() ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'antispam_setting', [ 'spam' => $this->antiSpamService->getSpamEmail(), @@ -77,67 +54,55 @@ public function getForm() { ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'allow_new_mail_accounts', $this->config->getAppValue('mail', 'allow_new_mail_accounts', 'yes') === 'yes' ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'layout_message_view', $this->config->getAppValue('mail', 'layout_message_view', 'threaded') ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'llm_processing', $this->aiIntegrationsService->isLlmProcessingEnabled(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'enabled_llm_free_prompt_backend', - $this->aiIntegrationsService->isLlmAvailable(FreePromptTaskType::class) + $this->aiIntegrationsService->isLlmAvailable(TextToText::ID) ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'enabled_llm_summary_backend', - $this->aiIntegrationsService->isLlmAvailable(SummaryTaskType::class) + $this->aiIntegrationsService->isLlmAvailable(TextToTextSummary::ID) ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'google_oauth_client_id', $this->googleIntegration->getClientId(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'google_oauth_redirect_url', $this->googleIntegration->getRedirectUrl(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'importance_classification_default', $this->classificationSettingsService->isClassificationEnabledByDefault(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'microsoft_oauth_tenant_id', $this->microsoftIntegration->getTenantId(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'microsoft_oauth_client_id', $this->microsoftIntegration->getClientId(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'microsoft_oauth_redirect_url', $this->microsoftIntegration->getRedirectUrl(), ); $this->initialStateService->provideInitialState( - Application::APP_ID, 'microsoft_oauth_docs', $this->themingDefaults->buildDocLinkToKey('admin-groupware-oauth-microsoft'), ); diff --git a/lib/Sieve/SieveClientFactory.php b/lib/Sieve/SieveClientFactory.php index fbe6d340d1..f39867271b 100644 --- a/lib/Sieve/SieveClientFactory.php +++ b/lib/Sieve/SieveClientFactory.php @@ -80,7 +80,6 @@ public function createClient(string $host, int $port, string $user, string $pass 'ssl' => [ 'verify_peer' => $this->config->getSystemValueBool('app.mail.verify-tls-peer', true), 'verify_peer_name' => $this->config->getSystemValueBool('app.mail.verify-tls-peer', true), - ] ], ]; diff --git a/lib/Support/ConsoleLoggerDecorator.php b/lib/Support/ConsoleLoggerDecorator.php index 4166e75f75..37191bbf4a 100644 --- a/lib/Support/ConsoleLoggerDecorator.php +++ b/lib/Support/ConsoleLoggerDecorator.php @@ -13,15 +13,13 @@ use Symfony\Component\Console\Output\OutputInterface; class ConsoleLoggerDecorator implements LoggerInterface { - /** @var LoggerInterface */ - private $inner; - /** @var OutputInterface */ private $consoleOutput; - public function __construct(LoggerInterface $inner, - OutputInterface $consoleOutput) { - $this->inner = $inner; + public function __construct( + private LoggerInterface $inner, + OutputInterface $consoleOutput, + ) { $this->consoleOutput = $consoleOutput; } diff --git a/lib/Support/PerformanceLogger.php b/lib/Support/PerformanceLogger.php index 1069863e06..ca7328e5b0 100644 --- a/lib/Support/PerformanceLogger.php +++ b/lib/Support/PerformanceLogger.php @@ -16,13 +16,11 @@ class PerformanceLogger { /** @var ITimeFactory */ private $timeFactory; - /** @var LoggerInterface */ - private $logger; - - public function __construct(ITimeFactory $timeFactory, - LoggerInterface $logger) { + public function __construct( + ITimeFactory $timeFactory, + private LoggerInterface $logger, + ) { $this->timeFactory = $timeFactory; - $this->logger = $logger; } public function start(string $task): PerformanceLoggerTask { diff --git a/lib/Support/PerformanceLoggerTask.php b/lib/Support/PerformanceLoggerTask.php index db676a91b4..9fb0441bee 100644 --- a/lib/Support/PerformanceLoggerTask.php +++ b/lib/Support/PerformanceLoggerTask.php @@ -18,27 +18,21 @@ use function sprintf; class PerformanceLoggerTask { - /** @var string */ - private $task; - /** @var ITimeFactory */ private $timeFactory; - /** @var LoggerInterface */ - private $logger; - /** @var int */ private $start; /** @var int */ private $rel; - public function __construct(string $task, + public function __construct( + private string $task, ITimeFactory $timeFactory, - LoggerInterface $logger) { - $this->task = $task; + private LoggerInterface $logger, + ) { $this->timeFactory = $timeFactory; - $this->logger = $logger; $this->start = $this->rel = $timeFactory->getTime(); } diff --git a/package-lock.json b/package-lock.json index 587d8328aa..ceb03dc242 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "nextcloud-mail", - "version": "5.9.0-dev.1", + "version": "5.10.0-rc.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "nextcloud-mail", - "version": "5.9.0-dev.1", + "version": "5.10.0-rc.1", "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { @@ -17,7 +17,7 @@ "@nextcloud/auth": "^2.6.0", "@nextcloud/axios": "^2.6.0", "@nextcloud/calendar-js": "^8.1.6", - "@nextcloud/cdav-library": "^2.2.0", + "@nextcloud/cdav-library": "^2.6.2", "@nextcloud/dialogs": "^6.4.2", "@nextcloud/files": "^3.12.2", "@nextcloud/initial-state": "^3.0.0", @@ -27,33 +27,33 @@ "@nextcloud/router": "^3.1.0", "@nextcloud/sharing": "^0.4.0", "@nextcloud/timezones": "^1.0.2", - "@nextcloud/vue": "^8.38.0", + "@nextcloud/vue": "^8.39.0", "@pinia/testing": "^0.1.7", "@riophae/vue-treeselect": "^0.4.0", - "address-rfc2822": "^2.2.3", + "address-rfc2822": "^2.2.4", "ckeditor5": "^47.6.2-alpha.0", - "color-convert": "^2.0.1", + "color-convert": "^3.1.3", "core-js": "^3.49.0", "debounce-promise": "^3.1.2", - "dompurify": "^3.4.2", + "dompurify": "^3.4.11", "escape-html": "^1.0.3", - "html-to-text": "^9.0.5", + "html-to-text": "^10.0.0", "ical.js": "^2.2.1", - "js-base64": "^3.7.8", + "js-base64": "^3.8.0", "jstz": "^2.1.1", "lodash": "^4.18.1", "md5": "^2.3.0", "mitt": "^3.0.1", "nextcloud_issuetemplate_builder": "^0.1.0", "node-forge": "^1.4.0", - "p-limit": "^6.2.0", + "p-limit": "^7.3.0", "pinia": "^2.3.1", "printscout": "2.0.3", "process": "^0.11.10", "ramda": "^0.32.0", "raw-loader": "^4.0.2", - "stylelint": "^17.9.1", - "uuid": "^14.0.0", + "stylelint": "^17.14.0", + "uuid": "^14.0.1", "v-tooltip": "^2.1.3", "vue": "^2.7.16", "vue-autosize": "^1.0.2", @@ -63,17 +63,17 @@ "vue-router": "^3.6.5", "vue-shortkey": "^3.1.7", "vue-tabs-component": "^1.5.0", - "webdav": "4.11.5" + "webdav": "5.10.0" }, "devDependencies": { "@nextcloud/babel-config": "^1.3.0", "@nextcloud/browserslist-config": "^3.1.2", "@nextcloud/eslint-config": "^9.0.0-rc.8", - "@nextcloud/stylelint-config": "^3.2.1", - "@playwright/test": "^1.59.1", + "@nextcloud/stylelint-config": "^3.2.2", + "@playwright/test": "^1.61.1", "@vitejs/plugin-vue2": "^2.3.4", "@vue/test-utils": "^1.3.6", - "autoprefixer": "^10.5.0", + "autoprefixer": "^10.5.2", "babel-loader": "^10.1.1", "babel-loader-exclude-node-modules-except": "^1.2.4", "css-loader": "^7.1.4", @@ -83,41 +83,27 @@ "jsdom": "^29.1.1", "node-polyfill-webpack-plugin": "^3.0.0", "patch-package": "^8.0.1", - "postcss": "^8.5.13", + "postcss": "^8.5.16", "postcss-loader": "^4.3.0", - "sass": "^1.99.0", - "sass-loader": "^16.0.7", + "sass": "^1.101.0", + "sass-loader": "^17.0.0", "style-loader": "^4.0.0", "svg-inline-loader": "^0.8.2", - "ts-loader": "^9.5.7", + "ts-loader": "^9.6.2", "typescript": "^5.9.3", "url-loader": "^4.1.1", - "vitest": "^3.2.4", + "vitest": "^4.1.9", "vue-loader": "^15.11.1", "vue-template-compiler": "^2.7.16", - "webpack": "^5.106.2", - "webpack-cli": "^6.0.1", - "webpack-merge": "^5.10.0" + "webpack": "^5.108.3", + "webpack-cli": "^7.1.0", + "webpack-merge": "^6.0.1" }, "engines": { "node": "^24.0.0", "npm": "^11.3.0" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@asamuzakjp/css-color": { "version": "5.1.11", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz", @@ -198,12 +184,12 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -212,9 +198,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", - "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "dev": true, "license": "MIT", "peer": true, @@ -223,23 +209,23 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -255,15 +241,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", - "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/parser": "^7.28.3", - "@babel/types": "^7.28.2", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -287,15 +273,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -365,9 +351,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "peer": true, @@ -391,31 +377,31 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -439,9 +425,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, "license": "MIT", "peer": true, @@ -503,27 +489,27 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "dev": true, "license": "MIT", "peer": true, @@ -548,27 +534,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1193,17 +1179,17 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", - "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.4.tgz", + "integrity": "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.29.0" }, "engines": { "node": ">=6.9.0" @@ -1765,35 +1751,35 @@ } }, "node_modules/@babel/template": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", - "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.3", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1801,13 +1787,13 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1835,12 +1821,12 @@ } }, "node_modules/@cacheable/memory": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", - "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz", + "integrity": "sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==", "license": "MIT", "dependencies": { - "@cacheable/utils": "^2.4.0", + "@cacheable/utils": "^2.5.0", "@keyv/bigmap": "^1.3.1", "hookified": "^1.15.1", "keyv": "^5.6.0" @@ -1872,9 +1858,9 @@ } }, "node_modules/@cacheable/utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", - "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==", "license": "MIT", "dependencies": { "hashery": "^1.5.1", @@ -2830,9 +2816,9 @@ } }, "node_modules/@csstools/css-calc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.0.tgz", - "integrity": "sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz", + "integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==", "funding": [ { "type": "github", @@ -2875,9 +2861,9 @@ } }, "node_modules/@csstools/css-syntax-patches-for-csstree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", - "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz", + "integrity": "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==", "funding": [ { "type": "github", @@ -2941,9 +2927,9 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.1.0.tgz", + "integrity": "sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA==", "dev": true, "license": "MIT", "engines": { @@ -2978,9 +2964,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", "cpu": [ "ppc64" ], @@ -2995,9 +2981,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", "cpu": [ "arm" ], @@ -3012,9 +2998,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", "cpu": [ "arm64" ], @@ -3029,9 +3015,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", "cpu": [ "x64" ], @@ -3046,9 +3032,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", "cpu": [ "arm64" ], @@ -3063,9 +3049,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", "cpu": [ "x64" ], @@ -3080,9 +3066,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", "cpu": [ "arm64" ], @@ -3097,9 +3083,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", "cpu": [ "x64" ], @@ -3114,9 +3100,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", "cpu": [ "arm" ], @@ -3131,9 +3117,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", "cpu": [ "arm64" ], @@ -3148,9 +3134,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", "cpu": [ "ia32" ], @@ -3165,9 +3151,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", "cpu": [ "loong64" ], @@ -3182,9 +3168,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", "cpu": [ "mips64el" ], @@ -3199,9 +3185,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", "cpu": [ "ppc64" ], @@ -3216,9 +3202,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", "cpu": [ "riscv64" ], @@ -3233,9 +3219,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", "cpu": [ "s390x" ], @@ -3250,9 +3236,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", "cpu": [ "x64" ], @@ -3267,9 +3253,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", "cpu": [ "arm64" ], @@ -3284,9 +3270,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", "cpu": [ "x64" ], @@ -3301,9 +3287,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", "cpu": [ "arm64" ], @@ -3318,9 +3304,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", "cpu": [ "x64" ], @@ -3335,9 +3321,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", "cpu": [ "arm64" ], @@ -3352,9 +3338,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", "cpu": [ "x64" ], @@ -3369,9 +3355,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", "cpu": [ "arm64" ], @@ -3386,9 +3372,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", "cpu": [ "ia32" ], @@ -3403,9 +3389,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", "cpu": [ "x64" ], @@ -3962,6 +3948,18 @@ "@jridgewell/trace-mapping": "^0.3.24" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -3980,9 +3978,10 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.29", @@ -4145,12 +4144,12 @@ } }, "node_modules/@nextcloud/cdav-library": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@nextcloud/cdav-library/-/cdav-library-2.2.0.tgz", - "integrity": "sha512-vaikb6JFji8MjeNSl8rsbRm97sDI8f9+Qa4ixLtubYYomm6SuNxhTau7hVC+v7sIlzrBhQlz4h0Gmq9nEsZrug==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@nextcloud/cdav-library/-/cdav-library-2.6.2.tgz", + "integrity": "sha512-TVksMa2Liy4Vq3s3CdEgMZM4AZsU0yvm1oznMalKOKbMsvEknNEXb5nhh/+hINpJdmooYtY6Og9KC0HW4MfjCw==", "license": "AGPL-3.0-or-later", "dependencies": { - "@nextcloud/axios": "^2.5.2" + "@nextcloud/axios": "^2.6.0" }, "engines": { "node": "^24.0.0", @@ -4206,51 +4205,6 @@ "@nextcloud/files": "^3.12.0" } }, - "node_modules/@nextcloud/dialogs/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@nextcloud/dialogs/node_modules/fast-xml-parser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", - "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.5", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@nextcloud/dialogs/node_modules/hot-patcher": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", - "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", - "license": "MIT" - }, - "node_modules/@nextcloud/dialogs/node_modules/layerr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", - "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==", - "license": "MIT" - }, "node_modules/@nextcloud/dialogs/node_modules/p-queue": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.0.1.tgz", @@ -4279,52 +4233,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nextcloud/dialogs/node_modules/strnum": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", - "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@nextcloud/dialogs/node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@nextcloud/dialogs/node_modules/webdav": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.9.0.tgz", - "integrity": "sha512-OMJ6wtK1WvCO++aOLoQgE96S8KT4e5aaClWHmHXfFU369r4eyELN569B7EqT4OOUb99mmO58GkyuiCv/Ag6J0Q==", - "license": "MIT", - "dependencies": { - "@buttercup/fetch": "^0.2.1", - "base-64": "^1.0.0", - "byte-length": "^1.0.2", - "entities": "^6.0.1", - "fast-xml-parser": "^5.3.4", - "hot-patcher": "^2.0.1", - "layerr": "^3.0.0", - "md5": "^2.3.0", - "minimatch": "^9.0.5", - "nested-property": "^4.0.0", - "node-fetch": "^3.3.2", - "path-posix": "^1.0.0", - "url-join": "^5.0.0", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@nextcloud/eslint-config": { "version": "9.0.0-rc.8", "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-9.0.0-rc.8.tgz", @@ -4369,28 +4277,6 @@ "eslint": ">=8.45.0" } }, - "node_modules/@nextcloud/eslint-config/node_modules/fast-xml-parser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", - "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.5", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, "node_modules/@nextcloud/eslint-config/node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", @@ -4404,19 +4290,6 @@ "node": ">=10" } }, - "node_modules/@nextcloud/eslint-config/node_modules/strnum": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", - "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, "node_modules/@nextcloud/event-bus": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", @@ -4480,97 +4353,6 @@ "@nextcloud/files": "^3.12.0" } }, - "node_modules/@nextcloud/files/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@nextcloud/files/node_modules/fast-xml-parser": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", - "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.5", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/@nextcloud/files/node_modules/hot-patcher": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", - "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", - "license": "MIT" - }, - "node_modules/@nextcloud/files/node_modules/layerr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", - "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==", - "license": "MIT" - }, - "node_modules/@nextcloud/files/node_modules/strnum": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", - "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/@nextcloud/files/node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/@nextcloud/files/node_modules/webdav": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.9.0.tgz", - "integrity": "sha512-OMJ6wtK1WvCO++aOLoQgE96S8KT4e5aaClWHmHXfFU369r4eyELN569B7EqT4OOUb99mmO58GkyuiCv/Ag6J0Q==", - "license": "MIT", - "dependencies": { - "@buttercup/fetch": "^0.2.1", - "base-64": "^1.0.0", - "byte-length": "^1.0.2", - "entities": "^6.0.1", - "fast-xml-parser": "^5.3.4", - "hot-patcher": "^2.0.1", - "layerr": "^3.0.0", - "md5": "^2.3.0", - "minimatch": "^9.0.5", - "nested-property": "^4.0.0", - "node-fetch": "^3.3.2", - "path-posix": "^1.0.0", - "url-join": "^5.0.0", - "url-parse": "^1.5.10" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@nextcloud/initial-state": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", @@ -4660,9 +4442,9 @@ } }, "node_modules/@nextcloud/stylelint-config": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-3.2.1.tgz", - "integrity": "sha512-fRWuN92ydC52+CGURBmbgkaAFDKOq9pmx/vsujr8cRKlGbAhLH+gyxzSpQUc37ZKKNaBDuUvcGzrqH/YipKbGA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-3.2.2.tgz", + "integrity": "sha512-5rr77fGK+zoa8yN+8zR43XbqyuN/yB2wSAy4vKE2F+hgAeOhpUAyChV+pfySDbP20t4s22DHgn7BDiZKsbNE3Q==", "dev": true, "license": "AGPL-3.0-or-later", "dependencies": { @@ -4672,8 +4454,8 @@ "node": "^20.19 || ^22 || ^24" }, "peerDependencies": { - "stylelint": "^17.1.1", - "stylelint-config-recommended-scss": "^17.0.0", + "stylelint": "^17.9.1", + "stylelint-config-recommended-scss": "^17.0.1", "stylelint-config-recommended-vue": "^1.6.1" } }, @@ -4703,15 +4485,15 @@ } }, "node_modules/@nextcloud/vue": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.38.0.tgz", - "integrity": "sha512-8wfTXUhks8e5KVtmyc66bH8+IeVMSGyV0PZmZQD/ctQwuWdH53c8vA1V4voHJ8cPHrN2pXq6WF8++4/RoW1eMw==", + "version": "8.40.0", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-8.40.0.tgz", + "integrity": "sha512-jc00yzNPXGVgEwnP0b9DVIXPt/JOQDLmCxLHUwuTnuDXfppB92LBzxPOJ/L0rkHYqKRsk+gg1cHKZp9zZFDQww==", "license": "AGPL-3.0-or-later", "dependencies": { "@floating-ui/dom": "^1.7.6", "@linusborg/vue-simple-portal": "^0.1.5", "@nextcloud/auth": "^2.6.0", - "@nextcloud/axios": "^2.5.2", + "@nextcloud/axios": "^2.6.0", "@nextcloud/browser-storage": "^0.5.0", "@nextcloud/capabilities": "^1.2.1", "@nextcloud/event-bus": "^3.3.3", @@ -4726,12 +4508,12 @@ "blurhash": "^2.0.5", "clone": "^2.1.2", "debounce": "^2.2.0", - "dompurify": "^3.4.1", + "dompurify": "^3.4.11", "emoji-mart-vue-fast": "^15.0.5", "escape-html": "^1.0.3", "floating-vue": "^1.0.0-beta.19", "focus-trap": "^7.8.0", - "linkify-string": "^4.3.2", + "linkify-string": "^4.3.3", "md5": "^2.3.0", "mdast-util-to-string": "^4.0.0", "p-queue": "^8.1.1", @@ -4745,7 +4527,7 @@ "splitpanes": "^2.4.1", "string-length": "^5.0.1", "striptags": "^3.2.0", - "tabbable": "^6.4.0", + "tabbable": "^6.5.0", "tributejs": "^5.1.3", "unified": "^11.0.1", "unist-builder": "^4.0.0", @@ -4783,9 +4565,9 @@ } }, "node_modules/@nodable/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg==", "funding": [ { "type": "github", @@ -5180,13 +4962,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz", + "integrity": "sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.59.1" + "playwright": "1.61.1" }, "bin": { "playwright": "cli.js" @@ -5569,18 +5351,6 @@ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, - "node_modules/@selderee/plugin-htmlparser2": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", - "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", - "dependencies": { - "domhandler": "^5.0.3", - "selderee": "^0.11.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, "node_modules/@sindresorhus/base62": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", @@ -5606,6 +5376,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, "node_modules/@stylistic/eslint-plugin": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.7.1.tgz", @@ -5701,24 +5478,6 @@ "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -6085,59 +5844,87 @@ } }, "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", "dev": true, "license": "MIT", "dependencies": { + "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^2.0.0" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { @@ -6145,28 +5932,25 @@ } }, "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", "dev": true, "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -6511,53 +6295,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -6631,14 +6368,26 @@ } }, "node_modules/address-rfc2822": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/address-rfc2822/-/address-rfc2822-2.2.3.tgz", - "integrity": "sha512-M+tNumDEri308IBqo88uK5Ck2NEdvrCbrUwZfJXD0xkxMK0OrXY/OWyE6/xc1Z7MNBK7KCfZeZzz1QI4UMI+Mw==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/address-rfc2822/-/address-rfc2822-2.2.4.tgz", + "integrity": "sha512-jgN5ntU50F9cwwSkeeg7Ppznr4kiywukTVQTt+oNqM3ZeXubP7Ij5vOu/SIFLD90xR5geDAjLtTEo59GE82bvQ==", "license": "MIT", "dependencies": { "email-addresses": "^5.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", @@ -6722,6 +6471,30 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/anynum": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/anynum/-/anynum-1.0.1.tgz", + "integrity": "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/are-docs-informative": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", @@ -6891,16 +6664,6 @@ "util": "^0.12.5" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -6931,9 +6694,9 @@ "license": "MIT" }, "node_modules/autoprefixer": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", - "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz", + "integrity": "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==", "dev": true, "funding": [ { @@ -6951,8 +6714,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.2", - "caniuse-lite": "^1.0.30001787", + "browserslist": "^4.28.4", + "caniuse-lite": "^1.0.30001799", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -6993,13 +6756,14 @@ } }, "node_modules/axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, @@ -7213,9 +6977,9 @@ ] }, "node_modules/baseline-browser-mapping": { - "version": "2.10.24", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.24.tgz", - "integrity": "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA==", + "version": "2.10.38", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.38.tgz", + "integrity": "sha512-31/02mVB4yuQU6adKk5SlY6m+mxDwUq5KZkyYgnLrrKl7TEm1+3PyDtDBz2kOv/wxZz41GHsvV1A/u6RmiyBvw==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -7346,13 +7110,13 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", + "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", "dev": true, "license": "ISC", "dependencies": { - "bn.js": "^5.2.2", + "bn.js": "^5.2.3", "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", @@ -7418,9 +7182,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "version": "4.28.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.4.tgz", + "integrity": "sha512-MTc8i/x9jBQd1iMw2CFGS+rwMa07eYjLR0CCTLDACl9xhxy+nIs3KeML/biicXtk9JrZ6dnnTatmc7ErPXIxqw==", "funding": [ { "type": "opencollective", @@ -7437,10 +7201,10 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", + "baseline-browser-mapping": "^2.10.38", + "caniuse-lite": "^1.0.30001799", + "electron-to-chromium": "^1.5.376", + "node-releases": "^2.0.48", "update-browserslist-db": "^1.2.3" }, "bin": { @@ -7496,27 +7260,17 @@ "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==" }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/cacheable": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.4.tgz", - "integrity": "sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.5.0.tgz", + "integrity": "sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==", "license": "MIT", "dependencies": { - "@cacheable/memory": "^2.0.8", - "@cacheable/utils": "^2.4.0", + "@cacheable/memory": "^2.2.0", + "@cacheable/utils": "^2.5.0", "hookified": "^1.15.0", "keyv": "^5.6.0", - "qified": "^0.9.0" + "qified": "^0.10.1" } }, "node_modules/cacheable/node_modules/keyv": { @@ -7590,9 +7344,9 @@ "integrity": "sha512-A/8PwLk/T7IJDfUdQ68NR24QHa8rIlnN/stiJEBo6dmVUkD4K14LswG0w3VwdeK/o7qOwRUR1k2MhK5Rpy2m7A==" }, "node_modules/caniuse-lite": { - "version": "1.0.30001791", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", - "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", + "version": "1.0.30001799", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001799.tgz", + "integrity": "sha512-hG1bReV+OUU+MOqK4t/ZWI0tZOyz3rqS9XuhOUz1cIcbwBKjOyJEJuw9ER5JuNyqxNk8u/JUVbGibBOL1yrjFw==", "funding": [ { "type": "opencollective", @@ -7620,18 +7374,11 @@ } }, "node_modules/chai": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, "engines": { "node": ">=18" } @@ -7698,26 +7445,17 @@ "node": "*" } }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, "node_modules/chokidar": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", - "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "dev": true, + "license": "MIT", "dependencies": { - "readdirp": "^4.0.1" + "readdirp": "^5.0.0" }, "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -7878,14 +7616,24 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "color-name": "^2.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=14.6" + } + }, + "node_modules/color-convert/node_modules/color-name": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", + "license": "MIT", + "engines": { + "node": ">=12.20" } }, "node_modules/color-name": { @@ -7916,12 +7664,6 @@ "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -8020,8 +7762,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/core-js": { "version": "3.49.0", @@ -8404,16 +8145,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8421,12 +8152,13 @@ "dev": true, "peer": true }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/deepmerge-ts": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" + "node": ">=16.0.0" } }, "node_modules/define-data-property": { @@ -8615,18 +8347,19 @@ } }, "node_modules/dompurify": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.2.tgz", - "integrity": "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==", + "version": "3.4.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.11.tgz", + "integrity": "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -8693,9 +8426,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.344", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", - "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "version": "1.5.378", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.378.tgz", + "integrity": "sha512-VinvOAuuPmdD1guEgGv5f2Qp7/vlfqOrUOMYNnOD4wj3pit8kRsQHzfIf6teyUGWo15Tg5+bOJaRunvyltpVWQ==", "license": "ISC" }, "node_modules/element-matches": { @@ -8757,9 +8490,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", - "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "version": "5.24.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.1.tgz", + "integrity": "sha512-7DdUaTjmNwMcH2gLr1qycesKII3BK4RLy/mdAb7x10Lq7bR4aNKHt1BR1ZALSv0rPM/hF5wYF0PhGop/rJm8vw==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -8789,10 +8522,11 @@ } }, "node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -8894,10 +8628,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", + "integrity": "sha512-3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==", "license": "MIT" }, "node_modules/es-object-atoms": { @@ -8967,9 +8700,9 @@ ] }, "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -8980,32 +8713,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" + "@esbuild/aix-ppc64": "0.28.1", + "@esbuild/android-arm": "0.28.1", + "@esbuild/android-arm64": "0.28.1", + "@esbuild/android-x64": "0.28.1", + "@esbuild/darwin-arm64": "0.28.1", + "@esbuild/darwin-x64": "0.28.1", + "@esbuild/freebsd-arm64": "0.28.1", + "@esbuild/freebsd-x64": "0.28.1", + "@esbuild/linux-arm": "0.28.1", + "@esbuild/linux-arm64": "0.28.1", + "@esbuild/linux-ia32": "0.28.1", + "@esbuild/linux-loong64": "0.28.1", + "@esbuild/linux-mips64el": "0.28.1", + "@esbuild/linux-ppc64": "0.28.1", + "@esbuild/linux-riscv64": "0.28.1", + "@esbuild/linux-s390x": "0.28.1", + "@esbuild/linux-x64": "0.28.1", + "@esbuild/netbsd-arm64": "0.28.1", + "@esbuild/netbsd-x64": "0.28.1", + "@esbuild/openbsd-arm64": "0.28.1", + "@esbuild/openbsd-x64": "0.28.1", + "@esbuild/openharmony-arm64": "0.28.1", + "@esbuild/sunos-x64": "0.28.1", + "@esbuild/win32-arm64": "0.28.1", + "@esbuild/win32-ia32": "0.28.1", + "@esbuild/win32-x64": "0.28.1" } }, "node_modules/escalade": { @@ -9652,6 +9385,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -9694,9 +9437,9 @@ } }, "node_modules/expect-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9765,14 +9508,25 @@ "peer": true }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fast-xml-builder": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz", - "integrity": "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", "funding": [ { "type": "github", @@ -9781,13 +9535,14 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.1.3" + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" } }, "node_modules/fast-xml-parser": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.6.tgz", - "integrity": "sha512-Yd4vkROfJf8AuJrDIVMVmYfULKmIJszVsMv7Vo71aocsKgFxpdlpSHXSaInvyYfgw2PRuObQSW2GFpVMUjxu9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.9.3.tgz", + "integrity": "sha512-brCNCeScma/kqa54J4PIDriSSSLssRkuYaUCpvHJulGc3HGI/xxKUCTDcYkAdqJsyb//ydpbxecjC3hB9+tb/g==", "funding": [ { "type": "github", @@ -9796,7 +9551,12 @@ ], "license": "MIT", "dependencies": { - "strnum": "^1.0.5" + "@nodable/entities": "^2.2.0", + "fast-xml-builder": "^1.2.0", + "is-unsafe": "^1.0.1", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.4.1", + "xml-naming": "^0.1.0" }, "bin": { "fxparser": "src/cli/cli.js" @@ -10043,16 +9803,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -10282,11 +10042,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -10521,9 +10276,10 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -10845,6 +10601,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, "bin": { "he": "bin/he" } @@ -10875,9 +10632,10 @@ "license": "MIT" }, "node_modules/hot-patcher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-1.0.0.tgz", - "integrity": "sha512-3H8VH0PreeNsKMZw16nTHbUp4YoHCnPlawpsPXGJUR4qENDynl79b6Xk9CIFvLcH1qungBsCuzKcWyzoPPalTw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", + "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==", + "license": "MIT" }, "node_modules/html-encoding-sniffer": { "version": "6.0.0", @@ -10922,18 +10680,112 @@ } }, "node_modules/html-to-text": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", - "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-10.0.0.tgz", + "integrity": "sha512-2OH59Gtprdczel+7Rxgpz9hGVJREaf8Lt1H4kZwWHpEn70VQKRuMNGsb2eDbwaTzrYzb0hheiOG1P7Dim0B4dQ==", + "license": "MIT", "dependencies": { - "@selderee/plugin-htmlparser2": "^0.11.0", - "deepmerge": "^4.3.1", + "@selderee/plugin-htmlparser2": "~0.12.0", + "deepmerge-ts": "^7.1.5", "dom-serializer": "^2.0.0", - "htmlparser2": "^8.0.2", - "selderee": "^0.11.0" + "htmlparser2": "^10.1.0", + "selderee": "~0.12.0" }, "engines": { - "node": ">=14" + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/sponsors/KillyMXI" + } + }, + "node_modules/html-to-text/node_modules/@selderee/plugin-htmlparser2": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.12.0.tgz", + "integrity": "sha512-oELmoyA6ML9jDRMV3kgcMQFKxUfBU0yFVn6yTctVaLT5ygXnxH52I3TZEgV9EhXJC68/uFvE5Daj1/25c0Xa/A==", + "license": "MIT", + "dependencies": { + "domelementtype": "~2.3.0", + "domhandler": "~5.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/KillyMXI" + }, + "peerDependencies": { + "selderee": "~0.12.0" + } + }, + "node_modules/html-to-text/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/html-to-text/node_modules/htmlparser2": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.1.0.tgz", + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "entities": "^7.0.1" + } + }, + "node_modules/html-to-text/node_modules/leac": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.7.0.tgz", + "integrity": "sha512-qMrZeyEekgdRQ9o6a4NAB2EQZrv827GJdn1vnapwSJ90hWRB4TzUSunvacPkxQ2TnNqHNI1/zSt0hlo0crG8Jw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/KillyMXI" + } + }, + "node_modules/html-to-text/node_modules/parseley": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.13.1.tgz", + "integrity": "sha512-uNBJZzmb60l6p6VWLTmevizNAGnE0xoSf1n0B4q3ntegDNzcS68NRCcBDZTcyXHxt2XhBChsCuqj4M+nChvE/A==", + "license": "MIT", + "dependencies": { + "leac": "^0.7.0", + "peberminta": "^0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/KillyMXI" + } + }, + "node_modules/html-to-text/node_modules/peberminta": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.10.0.tgz", + "integrity": "sha512-80B2AsU+I4Qdb0ZAPSfe9UwvGzwkM37IKIFEvdS3D/3Ndgv2bsuJ0bfG1+iEYO+l7Gfd4EUJmuRyq7efLgRMzQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/KillyMXI" + } + }, + "node_modules/html-to-text/node_modules/selderee": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.12.0.tgz", + "integrity": "sha512-b1YMh3+DHZp59DLna3qVwQ5iOla/nrI6mLBNW02XxU77M3046Df6VLkoaJyFz20VsGIG5kkp+FK0kg4K4HnUFw==", + "license": "MIT", + "dependencies": { + "parseley": "~0.13.1" + }, + "funding": { + "url": "https://github.com/sponsors/KillyMXI" } }, "node_modules/html-void-elements": { @@ -10950,6 +10802,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -10957,6 +10810,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "peer": true, "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -10970,7 +10824,20 @@ "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, - "node_modules/ical.js": { + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ical.js": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.2.1.tgz", "integrity": "sha512-yK/UlPbEs316igb/tjRgbFA8ZV75rCsBJp/hWOatpyaPNlgw0dGDmU+FoicOcwX4xXkeXOkYiOmCqNPFpNPkQg==", @@ -11130,6 +10997,16 @@ "node": ">= 0.4" } }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/is-absolute-url": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", @@ -11478,6 +11355,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -11607,6 +11486,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-unsafe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-1.0.1.tgz", + "integrity": "sha512-CLK2+VdgERgD96EYm5lUQssZYlRg2tkZnbsxZoacmSiRxiFJ4Nk4SzjCl+Ur+v3kXIY9dTIdb3IH22y1mZ56LA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -11740,9 +11631,9 @@ } }, "node_modules/js-base64": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.8.tgz", - "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.8.0.tgz", + "integrity": "sha512-65kvbemyZhj+ExQt1PEFyBEjL5vAHysu1lJdW1AwhhChkO8ZBPizYk/m9GVrpbS2Je1hF+UYZ+6KywqtZV8mHw==", "license": "BSD-3-Clause" }, "node_modules/js-beautify": { @@ -11767,12 +11658,13 @@ } }, "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.7.tgz", + "integrity": "sha512-z/wZZgDrkNV1eA0ULjM/F9/50Ya8fbzgKneSpoPsXSGd0KnpdtHfOZWK+GcwLk+EZbS4F9RBhU+K2RgzuDaItw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=20" } }, "node_modules/js-tokens": { @@ -11781,9 +11673,20 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -12013,17 +11916,10 @@ "peer": true }, "node_modules/layerr": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/layerr/-/layerr-0.1.2.tgz", - "integrity": "sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ==" - }, - "node_modules/leac": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", - "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", - "funding": { - "url": "https://ko-fi.com/killymxi" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", + "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==", + "license": "MIT" }, "node_modules/levn": { "version": "0.4.1", @@ -12044,25 +11940,25 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/linkify-string": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/linkify-string/-/linkify-string-4.3.2.tgz", - "integrity": "sha512-JqBuQpSa+CSj2tskIII70SKOjPfjXwDFyjRRNFTrlg76gp2nap36xeRj/cWaXxukqBNrxM+L07XyKRsUtH/DpQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/linkify-string/-/linkify-string-4.3.3.tgz", + "integrity": "sha512-k8BwpKz6t4jigzoi5hKUbji0M4kUqhQ7LXIKFRxb2VvG5m0+4YSck+VFLhOxxeiuVu3pLDuSVNRq9+IQKroFIw==", "license": "MIT", "peerDependencies": { - "linkifyjs": "^4.0.0" + "linkifyjs": "==4.3.3" } }, "node_modules/linkifyjs": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", - "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.3.tgz", + "integrity": "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg==", "license": "MIT", "peer": true }, "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", "license": "MIT", "engines": { "node": ">=6.11.5" @@ -12138,13 +12034,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loupe": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lowlight": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.2.0.tgz", @@ -12170,13 +12059,13 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/markdown-table": { @@ -13157,6 +13046,66 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -13186,9 +13135,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", "funding": [ { "type": "github", @@ -13337,10 +13286,13 @@ } }, "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", - "license": "MIT" + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.48.tgz", + "integrity": "sha512-1uz8041X6LoI6ZSdZacM9lVY28vuzDlSKitnpbSNK0RfKoIJkX29NBPVEFXhnuSuEOA9Ww0xnPJ+ILWbGAv8DA==", + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/nopt": { "version": "7.2.1", @@ -13504,6 +13456,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -13564,15 +13527,15 @@ } }, "node_modules/p-limit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.2.0.tgz", - "integrity": "sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-7.3.0.tgz", + "integrity": "sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==", "license": "MIT", "dependencies": { - "yocto-queue": "^1.1.1" + "yocto-queue": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13741,18 +13704,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/parseley": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", - "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", - "dependencies": { - "leac": "^0.6.0", - "peberminta": "^0.9.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, "node_modules/patch-package": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", @@ -13894,16 +13845,6 @@ "dev": true, "license": "MIT" }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, "node_modules/pbkdf2": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", @@ -13922,14 +13863,6 @@ "node": ">= 0.10" } }, - "node_modules/peberminta": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", - "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -13996,13 +13929,13 @@ } }, "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.61.1.tgz", + "integrity": "sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.59.1" + "playwright-core": "1.61.1" }, "bin": { "playwright": "cli.js" @@ -14015,9 +13948,9 @@ } }, "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "version": "1.61.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz", + "integrity": "sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -14062,9 +13995,9 @@ } }, "node_modules/postcss": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz", - "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==", + "version": "8.5.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "integrity": "sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==", "funding": [ { "type": "opencollective", @@ -14081,7 +14014,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -14429,11 +14362,6 @@ "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "dev": true }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -14470,9 +14398,9 @@ } }, "node_modules/qified": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/qified/-/qified-0.9.1.tgz", - "integrity": "sha512-n7mar4T0xQ+39dE2vGTAlbxUEpndwPANH0kDef1/MYsB8Bba9wshkybIRx74qgcvKQPEWErf9AqAdYjhzY2Ilg==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz", + "integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==", "license": "MIT", "dependencies": { "hookified": "^2.1.1" @@ -14488,9 +14416,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", - "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -14618,18 +14546,32 @@ } }, "node_modules/readdirp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", - "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz", + "integrity": "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 14.16.0" + "node": ">= 20.19.0" }, "funding": { "type": "individual", "url": "https://paulmillr.com/funding/" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", @@ -15322,13 +15264,13 @@ } }, "node_modules/sass": { - "version": "1.99.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", - "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "version": "1.101.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", + "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", "dev": true, "license": "MIT", "dependencies": { - "chokidar": "^4.0.0", + "chokidar": "^5.0.0", "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, @@ -15336,23 +15278,20 @@ "sass": "sass.js" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.19.0" }, "optionalDependencies": { "@parcel/watcher": "^2.4.1" } }, "node_modules/sass-loader": { - "version": "16.0.7", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", - "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-17.0.0.tgz", + "integrity": "sha512-0Ybm8ohBQ9LcrycVrFQp/KQBNX5a3Wda9/smS0mE/xLffzEnwvV8nykOzrbiSWNzTE3IB/jiXx8O4QmDPG2+Gw==", "dev": true, "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, "engines": { - "node": ">= 18.12.0" + "node": ">= 22.11.0" }, "funding": { "type": "opencollective", @@ -15360,7 +15299,6 @@ }, "peerDependencies": { "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" @@ -15369,9 +15307,6 @@ "@rspack/core": { "optional": true }, - "node-sass": { - "optional": true - }, "sass": { "optional": true }, @@ -15453,17 +15388,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/selderee": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", - "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", - "dependencies": { - "parseley": "^0.12.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -15822,9 +15746,9 @@ "license": "MIT" }, "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", "dev": true, "license": "MIT" }, @@ -16077,42 +16001,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/strip-literal/node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, "node_modules/striptags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" }, "node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.4.1.tgz", + "integrity": "sha512-M9eUSMT2dCB2cTNPG7UYj6KuK7RJR2SN2+yCV/fTW3xzTCS6EaGZ5pSMgDIjB7r8zSfTGk+dvvn9rTjpVS9Mwg==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "anynum": "^1.0.1" + } }, "node_modules/strtok3": { "version": "10.3.4", @@ -16156,9 +16063,9 @@ } }, "node_modules/stylelint": { - "version": "17.10.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.10.0.tgz", - "integrity": "sha512-cI7I6HHEYOHHVNVci+s92WlA3QfmNhjwFdgCgYV3TLEysilOjk+B3EFxMED1xY9GYB0Kre3OD+mSLj19VLTIvA==", + "version": "17.14.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.14.0.tgz", + "integrity": "sha512-8xkHPpdqYryeIsOgfsYTmr6cIeC4nLYWk5S8BPxpodq8mIuepggkMljsHewWfuAjj/+qpRKou2QerhjMH3iasg==", "funding": [ { "type": "opencollective", @@ -16171,38 +16078,37 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.2.0", + "@csstools/css-calc": "^3.2.1", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-syntax-patches-for-csstree": "^1.1.3", + "@csstools/css-syntax-patches-for-csstree": "^1.1.5", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", "@csstools/selector-specificity": "^6.0.0", "colord": "^2.9.3", - "cosmiconfig": "^9.0.1", + "cosmiconfig": "^9.0.2", "css-functions-list": "^3.3.3", "css-tree": "^3.2.1", "debug": "^4.4.3", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^11.1.2", + "file-entry-cache": "^11.1.3", "global-modules": "^2.0.0", "globby": "^16.2.0", "globjoin": "^0.1.4", "html-tags": "^5.1.0", "ignore": "^7.0.5", "import-meta-resolve": "^4.2.0", - "is-plain-object": "^5.0.0", "mathml-tag-names": "^4.0.0", "meow": "^14.1.0", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "picocolors": "^1.1.1", - "postcss": "^8.5.13", + "postcss": "^8.5.15", "postcss-safe-parser": "^7.0.1", - "postcss-selector-parser": "^7.1.1", + "postcss-selector-parser": "^7.1.4", "postcss-value-parser": "^4.2.0", - "string-width": "^8.2.0", + "string-width": "^8.2.1", "supports-hyperlinks": "^4.4.0", "svg-tags": "^1.0.0", "table": "^6.9.0", @@ -16428,9 +16334,9 @@ } }, "node_modules/stylelint/node_modules/cosmiconfig": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", - "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz", + "integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==", "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -16454,21 +16360,21 @@ } }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz", - "integrity": "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==", + "version": "11.1.5", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz", + "integrity": "sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==", "license": "MIT", "dependencies": { - "flat-cache": "^6.1.20" + "flat-cache": "^6.1.23" } }, "node_modules/stylelint/node_modules/flat-cache": { - "version": "6.1.22", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz", - "integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==", + "version": "6.1.23", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.23.tgz", + "integrity": "sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==", "license": "MIT", "dependencies": { - "cacheable": "^2.3.4", + "cacheable": "^2.5.0", "flatted": "^3.4.2", "hookified": "^1.15.0" } @@ -16483,9 +16389,9 @@ } }, "node_modules/stylelint/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16640,9 +16546,9 @@ "license": "MIT" }, "node_modules/tabbable": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", - "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.5.0.tgz", + "integrity": "sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==", "license": "MIT" }, "node_modules/table": { @@ -16711,39 +16617,6 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", - "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -16791,11 +16664,14 @@ "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" }, "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/tinyglobby": { "version": "0.2.15", @@ -16845,30 +16721,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - } - }, "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", "engines": { @@ -16896,9 +16752,9 @@ "license": "MIT" }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "dev": true, "license": "MIT", "engines": { @@ -17026,37 +16882,41 @@ } }, "node_modules/ts-loader": { - "version": "9.5.7", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.7.tgz", - "integrity": "sha512-/ZNrKgA3K3PtpMYOC71EeMWIloGw3IYEa5/t1cyz2r5/PyUwTXGzYJvcD3kfUvmhlfpz1rhV8B2O6IVTQ0avsg==", + "version": "9.6.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.6.2.tgz", + "integrity": "sha512-R4iuczmtgxvtuI556s+hTZ6/7Ee03VCAk/l/M8LY1OAsUgB7YydsCxkgq9D9pKRaD7GJqUi2u8fp9zZP/ufjKA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", + "picomatch": "^4.0.0", "source-map": "^0.7.4" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { + "loader-utils": "*", "typescript": "*", - "webpack": "^5.0.0" + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "loader-utils": { + "optional": true + } } }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/ts-loader/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/tsconfig-paths": { @@ -17250,9 +17110,9 @@ } }, "node_modules/undici": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", - "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz", + "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==", "dev": true, "license": "MIT", "engines": { @@ -17495,9 +17355,13 @@ } }, "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/url-loader": { "version": "4.1.1", @@ -17578,9 +17442,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -17634,13 +17498,13 @@ } }, "node_modules/vite": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.2.tgz", - "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.6.tgz", + "integrity": "sha512-4XP60spRGjSZFf1qYH+dJIkK2znL3zQfl9KkOV9MkkRR/3Dls0dxaBsQPTloEc5BLXWPL9vsOxopxyKoMmDueg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.27.0", + "esbuild": "^0.27.0 || ^0.28.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -17708,29 +17572,6 @@ } } }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/vite/node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -17763,65 +17604,79 @@ } }, "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", "happy-dom": "*", - "jsdom": "*" + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, - "@types/debug": { + "@opentelemetry/api": { "optional": true }, "@types/node": { "optional": true }, - "@vitest/browser": { + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { "optional": true }, "@vitest/ui": { @@ -17832,46 +17687,12 @@ }, "jsdom": { "optional": true - } - } - }, - "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true }, "vite": { - "optional": true + "optional": false } } }, - "node_modules/vitest/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/vitest/node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", @@ -18217,12 +18038,11 @@ "integrity": "sha512-M92R89dNoTPWyCD+HuUEDdhaDnh9jxPGOwlDc0u51jAgmjUvzqaEMynXSr3BaWs+QdHYk4KzibPy1TFtjLmOZQ==" }, "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -18247,50 +18067,40 @@ } }, "node_modules/webdav": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/webdav/-/webdav-4.11.5.tgz", - "integrity": "sha512-bGw+NvtGHLftrkXPZt/fMKTcfPYIfvMFUSHXjicMvDYvAxJTgd4txGaniQytRa/Tb9VmzxNmTyWfynAO+SVhsQ==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.10.0.tgz", + "integrity": "sha512-fVPuRLtcduVGvSO7Tn/6TQCzIvI/g6BO/+xPRctCvi/GytYpjn4czxWbh4HsArsdom9qz9BI63k9/v2HBUui1A==", "license": "MIT", "dependencies": { - "axios": "^0.30.0", + "@buttercup/fetch": "^0.2.1", "base-64": "^1.0.0", "byte-length": "^1.0.2", - "fast-xml-parser": "^4.2.4", - "he": "^1.2.0", - "hot-patcher": "^1.0.0", - "layerr": "^0.1.2", + "entities": "^6.0.1", + "fast-xml-parser": "^5.7.2", + "hot-patcher": "^2.0.1", + "layerr": "^3.0.0", "md5": "^2.3.0", - "minimatch": "^5.1.0", + "minimatch": "^9.0.9", "nested-property": "^4.0.0", + "node-fetch": "^3.3.2", "path-posix": "^1.0.0", - "url-join": "^4.0.1", + "url-join": "^5.0.0", "url-parse": "^1.5.10" }, "engines": { - "node": ">=10" - } - }, - "node_modules/webdav/node_modules/axios": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.30.3.tgz", - "integrity": "sha512-5/tmEb6TmE/ax3mdXBc/Mi6YdPGxQsv+0p5YlciXWt3PHIn0VamqCXhRMtScnwY3lbgSXLneOuXAKUhgmSRpwg==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.4", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "node": ">=14" } }, - "node_modules/webdav/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/webdav/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/webidl-conversions": { @@ -18304,12 +18114,11 @@ } }, "node_modules/webpack": { - "version": "5.106.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.2.tgz", - "integrity": "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA==", + "version": "5.108.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.108.3.tgz", + "integrity": "sha512-hOpaCHmQVVY66IVTjofnH14IgSdmod2aquSGHGuYig/OIdWge01Hk2Wt988DZcwXumFUT4+FvJY5N+ikl8o/ww==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", @@ -18319,20 +18128,19 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.20.0", - "es-module-lexer": "^2.0.0", + "enhanced-resolve": "^5.22.2", + "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "loader-runner": "^4.3.1", + "loader-runner": "^4.3.2", "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.17", - "watchpack": "^2.5.1", - "webpack-sources": "^3.3.4" + "watchpack": "^2.5.2", + "webpack-sources": "^3.5.0" }, "bin": { "webpack": "bin/webpack.js" @@ -18351,22 +18159,17 @@ } }, "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.1.0.tgz", + "integrity": "sha512-pSJ5p5PkXRD88sfCq5Wo+coc42QykwRu5Md0DyESj0rT6PPPA2wTNabpHPKgqH8EMkfTDo3IWx3iiNXMu8XDBQ==", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", + "@discoveryjs/json-ext": "^1.1.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", + "envinfo": "^7.21.0", + "import-local": "^3.2.0", "interpret": "^3.1.1", "rechoir": "^0.8.0", "webpack-merge": "^6.0.1" @@ -18375,16 +18178,30 @@ "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=18.12.0" + "node": ">=20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^5.82.0" + "js-yaml": "^4.0.0 || ^5.0.0", + "json5": "^2.2.3", + "toml": "^3.0.0 || ^4.0.0", + "webpack": "^5.101.0", + "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", + "webpack-dev-server": "^5.0.0" }, "peerDependenciesMeta": { + "js-yaml": { + "optional": true + }, + "json5": { + "optional": true + }, + "toml": { + "optional": true + }, "webpack-bundle-analyzer": { "optional": true }, @@ -18394,37 +18211,16 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" + "node": ">=20" } }, - "node_modules/webpack-cli/node_modules/webpack-merge": { + "node_modules/webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", @@ -18439,35 +18235,15 @@ "node": ">=18.0.0" } }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.0.tgz", - "integrity": "sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.0.tgz", + "integrity": "sha512-HPuy+uuoTCaaoEoI1LQ3JN9+vrPBvEesnnX1jADHy728cHSMlq4wUc4afYqahq2B1mhQVZxCXOkNTnXltr+2vQ==", "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", - "license": "MIT" - }, "node_modules/webpack/node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -18678,6 +18454,21 @@ "node": ">=12" } }, + "node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -18718,9 +18509,10 @@ } }, "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "license": "MIT", "engines": { "node": ">=12.20" }, diff --git a/package.json b/package.json index b83de70929..2d3e39ad17 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nextcloud-mail", - "version": "5.9.0-dev.1", + "version": "5.10.0-rc.1", "private": true, "description": "Nextcloud Mail", "license": "AGPL-3.0-only", @@ -30,7 +30,7 @@ "@nextcloud/auth": "^2.6.0", "@nextcloud/axios": "^2.6.0", "@nextcloud/calendar-js": "^8.1.6", - "@nextcloud/cdav-library": "^2.2.0", + "@nextcloud/cdav-library": "^2.6.2", "@nextcloud/dialogs": "^6.4.2", "@nextcloud/files": "^3.12.2", "@nextcloud/initial-state": "^3.0.0", @@ -40,33 +40,33 @@ "@nextcloud/router": "^3.1.0", "@nextcloud/sharing": "^0.4.0", "@nextcloud/timezones": "^1.0.2", - "@nextcloud/vue": "^8.38.0", + "@nextcloud/vue": "^8.39.0", "@pinia/testing": "^0.1.7", "@riophae/vue-treeselect": "^0.4.0", - "address-rfc2822": "^2.2.3", + "address-rfc2822": "^2.2.4", "ckeditor5": "^47.6.2-alpha.0", - "color-convert": "^2.0.1", + "color-convert": "^3.1.3", "core-js": "^3.49.0", "debounce-promise": "^3.1.2", - "dompurify": "^3.4.2", + "dompurify": "^3.4.11", "escape-html": "^1.0.3", - "html-to-text": "^9.0.5", + "html-to-text": "^10.0.0", "ical.js": "^2.2.1", - "js-base64": "^3.7.8", + "js-base64": "^3.8.0", "jstz": "^2.1.1", "lodash": "^4.18.1", "md5": "^2.3.0", "mitt": "^3.0.1", "nextcloud_issuetemplate_builder": "^0.1.0", "node-forge": "^1.4.0", - "p-limit": "^6.2.0", + "p-limit": "^7.3.0", "pinia": "^2.3.1", "printscout": "2.0.3", "process": "^0.11.10", "ramda": "^0.32.0", "raw-loader": "^4.0.2", - "stylelint": "^17.9.1", - "uuid": "^14.0.0", + "stylelint": "^17.14.0", + "uuid": "^14.0.1", "v-tooltip": "^2.1.3", "vue": "^2.7.16", "vue-autosize": "^1.0.2", @@ -76,17 +76,17 @@ "vue-router": "^3.6.5", "vue-shortkey": "^3.1.7", "vue-tabs-component": "^1.5.0", - "webdav": "4.11.5" + "webdav": "5.10.0" }, "devDependencies": { "@nextcloud/babel-config": "^1.3.0", "@nextcloud/browserslist-config": "^3.1.2", "@nextcloud/eslint-config": "^9.0.0-rc.8", - "@nextcloud/stylelint-config": "^3.2.1", - "@playwright/test": "^1.59.1", + "@nextcloud/stylelint-config": "^3.2.2", + "@playwright/test": "^1.61.1", "@vitejs/plugin-vue2": "^2.3.4", "@vue/test-utils": "^1.3.6", - "autoprefixer": "^10.5.0", + "autoprefixer": "^10.5.2", "babel-loader": "^10.1.1", "babel-loader-exclude-node-modules-except": "^1.2.4", "css-loader": "^7.1.4", @@ -96,21 +96,21 @@ "jsdom": "^29.1.1", "node-polyfill-webpack-plugin": "^3.0.0", "patch-package": "^8.0.1", - "postcss": "^8.5.13", + "postcss": "^8.5.16", "postcss-loader": "^4.3.0", - "sass": "^1.99.0", - "sass-loader": "^16.0.7", + "sass": "^1.101.0", + "sass-loader": "^17.0.0", "style-loader": "^4.0.0", "svg-inline-loader": "^0.8.2", - "ts-loader": "^9.5.7", + "ts-loader": "^9.6.2", "typescript": "^5.9.3", "url-loader": "^4.1.1", - "vitest": "^3.2.4", + "vitest": "^4.1.9", "vue-loader": "^15.11.1", "vue-template-compiler": "^2.7.16", - "webpack": "^5.106.2", - "webpack-cli": "^6.0.1", - "webpack-merge": "^5.10.0" + "webpack": "^5.108.3", + "webpack-cli": "^7.1.0", + "webpack-merge": "^6.0.1" }, "engines": { "node": "^24.0.0", diff --git a/patches.json b/patches.json index 1562ee2148..099ce2a6a7 100644 --- a/patches.json +++ b/patches.json @@ -19,6 +19,13 @@ "upstream-fix-url": "https://github.com/PHPMailer/DKIMValidator/pull/21" } } + ], + "bytestream/horde-mail": [ + { + "description": "Fix _rfc822IsAtext treating digit 0 as empty due to PHP empty() quirk", + "url": ".patches/horde-mail-rfc822-isAtext-empty-zero.patch", + "sha256": "b864ec2b2ba71b37a44c05e69934ec9f95269b8f1cc1ef8352a294e02ae3eb71" + } ] } } diff --git a/patches.lock.json b/patches.lock.json index 1c7d42e8aa..86a0f495d5 100644 --- a/patches.lock.json +++ b/patches.lock.json @@ -1,5 +1,5 @@ { - "_hash": "e3297c923adcdbd735cc8da9765e21e3f6bcb9f669ed228d8954814d910fc127", + "_hash": "6053b3121d6c1645269ff3498cce80b35864f85ff75b039cc6c5889e28706293", "patches": { "glenscott/url-normalizer": [ { @@ -26,6 +26,18 @@ "provenance": "patches-file:patches.json" } } + ], + "bytestream/horde-mail": [ + { + "package": "bytestream/horde-mail", + "description": "Fix _rfc822IsAtext treating digit 0 as empty due to PHP empty() quirk", + "url": ".patches/horde-mail-rfc822-isAtext-empty-zero.patch", + "sha256": "b864ec2b2ba71b37a44c05e69934ec9f95269b8f1cc1ef8352a294e02ae3eb71", + "depth": 1, + "extra": { + "provenance": "patches-file:patches.json" + } + } ] } } diff --git a/rector.php b/rector.php index e4019f5408..240f234292 100644 --- a/rector.php +++ b/rector.php @@ -9,6 +9,7 @@ use Nextcloud\Rector\Set\NextcloudSets; use Rector\Config\RectorConfig; +use Rector\Php80\Rector\Class_\ClassPropertyAssignToConstructorPromotionRector; use Rector\PHPUnit\Set\PHPUnitSetList; use Rector\TypeDeclaration\Rector\Class_\AddTestsVoidReturnTypeWhereNoReturnRector; @@ -32,4 +33,5 @@ ) ->withRules([ AddTestsVoidReturnTypeWhereNoReturnRector::class, + ClassPropertyAssignToConstructorPromotionRector::class, ]); diff --git a/renovate.json b/renovate.json index 95a27f7a6c..9ccf96c41a 100644 --- a/renovate.json +++ b/renovate.json @@ -17,16 +17,15 @@ ], "commitMessageAction": "Bump", "commitMessageTopic": "{{depName}}", - "commitMessageExtra": "from {{currentVersion}} to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}", + "commitMessageExtra": "from {{currentValue}} to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}", "rangeStrategy": "bump", "minimumReleaseAge": "7 days", "rebaseWhen": "conflicted", "ignoreUnstable": false, "baseBranchPatterns": [ "main", - "stable5.8", - "stable5.7", - "stable5.6" + "stable5.10", + "stable5.9" ], "enabledManagers": [ "composer", diff --git a/resources/public_suffix_list.dat b/resources/public_suffix_list.dat index 29e6f4e01e..7e0d3ffbd6 100644 --- a/resources/public_suffix_list.dat +++ b/resources/public_suffix_list.dat @@ -5,8 +5,8 @@ // Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat, // rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported. -// VERSION: 2026-04-10_20-27-44_UTC -// COMMIT: 8f9e04f2be9098ada07aa3cf13592dfe78870985 +// VERSION: 2026-07-14_09-26-39_UTC +// COMMIT: f8d153aafe2dd6aa1c27cfdabaeb41b90ece3d48 // Instructions on pulling and using this list can be found at https://publicsuffix.org/list/. @@ -1176,12 +1176,16 @@ gov.gd // Confirmed by registry 2024-11-20 ge com.ge +cyb.ge edu.ge gov.ge +llc.ge net.ge +online.ge org.ge pvt.ge school.ge +tnx.ge // gf : https://www.iana.org/domains/root/db/gf.html gf @@ -1403,6 +1407,7 @@ video.hu // id : https://www.iana.org/domains/root/db/id.html id ac.id +ai.id biz.id co.id desa.id @@ -1463,11 +1468,14 @@ tv.im // Please note, that nic.in is not an official eTLD, but used by most // government institutions. // Confirmed by Gaurav Kansal 2025-11-06 +// Added aero.in, alumni.in, school.in and ub.in by Gaurav Kansal 2026-06-25 in 5g.in 6g.in ac.in +aero.in ai.in +alumni.in am.in bank.in bihar.in @@ -1502,8 +1510,10 @@ pg.in post.in pro.in res.in +school.in travel.in tv.in +ub.in uk.in up.in us.in @@ -4335,14 +4345,18 @@ no fhs.no folkebibl.no fylkesbibl.no +gielda.no +herad.no idrett.no +kommune.no museum.no priv.no +suohkan.no +tjielte.no +uenorge.no vgs.no // Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ dep.no -herad.no -kommune.no mil.no stat.no // Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ @@ -4483,7 +4497,7 @@ askøy.no askvoll.no asnes.no åsnes.no -audnedaln.no +audnedal.no aukra.no aure.no aurland.no @@ -4594,7 +4608,6 @@ forsand.no fosnes.no fræna.no frana.no -frei.no frogn.no froland.no frosta.no @@ -4645,6 +4658,7 @@ halden.no halsa.no hamar.no hamaroy.no +hamarøy.no hammarfeasta.no hámmárfeasta.no hammerfest.no @@ -4699,6 +4713,7 @@ karasjohka.no kárášjohka.no karasjok.no karlsoy.no +karlsøy.no karmoy.no karmøy.no kautokeino.no @@ -4887,6 +4902,7 @@ ralingen.no rana.no randaberg.no rauma.no +re.no rendalen.no rennebu.no rennesoy.no @@ -5044,6 +5060,7 @@ tysvær.no tysvar.no ullensaker.no ullensvang.no +ulstein.no ulvik.no unjarga.no unjárga.no @@ -5799,7 +5816,6 @@ or.th // tj : http://www.nic.tj/policy.html tj -ac.tj biz.tj co.tj com.tj @@ -6157,7 +6173,6 @@ k12.mo.us k12.ms.us k12.mt.us k12.nc.us -// k12.nd.us - Bug 1028347 - Removed at request of Travis Rosso k12.ne.us k12.nh.us k12.nj.us @@ -6239,8 +6254,6 @@ cc.mt.us lib.mt.us cc.nc.us lib.nc.us -cc.nd.us -lib.nd.us cc.ne.us lib.ne.us cc.nh.us @@ -6824,7 +6837,7 @@ org.zw // newGTLDs -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2026-04-10T15:53:10Z +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2026-06-13T16:12:40Z // This list is auto-generated, don't edit it manually. // aaa : American Automobile Association, Inc. // https://www.iana.org/domains/root/db/aaa.html @@ -7010,7 +7023,7 @@ anquan // https://www.iana.org/domains/root/db/anz.html anz -// aol : Yahoo Inc. +// aol : AOL Media LLC // https://www.iana.org/domains/root/db/aol.html aol @@ -9926,7 +9939,7 @@ saarland // https://www.iana.org/domains/root/db/safe.html safe -// safety : Safety Registry Services, LLC. +// safety : Jolly Host, LLC // https://www.iana.org/domains/root/db/safety.html safety @@ -10878,7 +10891,7 @@ xin // https://www.iana.org/domains/root/db/xn--5su34j936bgsg.html 香格里拉 -// xn--5tzm5g : Global Website TLD Asia Limited +// xn--5tzm5g : Jolly Host, LLC // https://www.iana.org/domains/root/db/xn--5tzm5g.html 网站 @@ -12344,6 +12357,10 @@ opentunnel.xyz // Submitted by Sander Hoentjen antagonist.cloud +// Anthropic : https://www.anthropic.com/ +// Submitted by Sid Bidasaria +claude.app + // Apigee : https://apigee.com/ // Submitted by Apigee Security Team apigee.io @@ -12423,7 +12440,10 @@ sweetpepper.org myasustor.com // Atlassian : https://atlassian.com -// Submitted by Sam Smyth +// Submitted by Benjamin McAlary +*.atlassian-3p.com +*.atlassian-3p-us-gov-mod.com +*.atlassian-isolated-3p.com cdn.prod.atlassian-dev.net // AVM : https://avm.de @@ -12570,10 +12590,12 @@ cafjs.com // Submitted by Joel Aquilina canva-apps.cn my.canvasite.cn +khsj.cn canva-apps.com canva-hosted-embed.com canvacode.com rice-labs.com +canva.link canva.run my.canva.site @@ -12744,6 +12766,12 @@ co.ca // Submitted by Gavin Brown co.com +// Code For Host Inc Ltd : https://codeforhost.com +// Submitted by Mehedi Hasan +sch.ac +dev.cv +store.cv + // Codeberg e. V. : https://codeberg.org // Submitted by Moritz Marquardt codeberg.page @@ -12813,10 +12841,6 @@ craft.me // Submitted by Ales Krajnik realm.cz -// Crisp IM SAS : https://crisp.chat/ -// Submitted by Baptiste Jamin -on.crisp.email - // Cryptonomic : https://cryptonomic.net/ // Submitted by Andrew Cady *.cryptonomic.net @@ -12896,6 +12920,8 @@ sandbox.deno.net // DeployAgent : https://deployagent.com // Submitted by Danny deployagent.com +piebox.site +deployagent.space // deSEC : https://desec.io/ // Submitted by Peter Thomassen @@ -12971,9 +12997,22 @@ cc.cd us.ci de5.net -// DNShome : https://www.dnshome.de/ +// dnsHome : https://www.dnshome.de/ // Submitted by Norbert Auler +dnshome.at +resolve.bar +ddns.berlin +dnshome.cloud +ddnssec.de dnshome.de +dyndnssec.de +heimdns.de +srvdns.de +dnshome.eu +dnshome.it +dyn.now +heimdns.online +ddns.wtf // DotArai : https://www.dotarai.com/ // Submitted by Atsadawat Netcharadsang @@ -13476,6 +13515,10 @@ on.staging.expo.app // Submitted by Eric Jiang onfabrica.com +// fachschaften.org: https://fachschaften.org/ +// Submitted by Felix Schäfer +fspages.org + // FAITID : https://faitid.org/ // Submitted by Maxim Alzoba // https://www.flexireg.net/stat_info @@ -13885,6 +13928,10 @@ whitesnow.jp zombie.jp heteml.net +// GNTC, Inc. : https://gntc.com/ +// Submitted by VibeHost Security +vibehost.space + // GoDaddy Registry : https://registry.godaddy // Submitted by Rohan Durrant graphic.design @@ -13923,11 +13970,6 @@ goupile.fr // Submitted by Richard Baker pymnt.uk -// GOV.UK Platform as a Service : https://www.cloud.service.gov.uk/ -// Submitted by Tom Whitwell -cloudapps.digital -london.cloudapps.digital - // Government of the Netherlands : https://www.government.nl // Submitted by gov.nl @@ -14057,6 +14099,10 @@ ltd.ng ngo.ng plc.ng +// Hostinger : https://hostinger.com +// Submitted by Valentinas Cirba +hstgr.cloud + // HostyHosting : https://hostyhosting.com hostyhosting.io @@ -14125,10 +14171,6 @@ in-vpn.org // Submitted by Connor McFarlane oninferno.net -// info.at : http://www.info.at/ -biz.at -info.at - // info.cx : http://info.cx // Submitted by June Slater info.cx @@ -14204,6 +14246,12 @@ iopsys.se // Submitted by Matthew Hardeman ipifony.net +// IPv64.net : https://ipv64.net/ +// Submitted by Dennis Schröder +home64.de +ipv64.de +ipv64.net + // ir.md : https://nic.ir.md // Submitted by Ali Soizi ir.md @@ -14589,7 +14637,6 @@ polyspace.com // May First - People Link : https://mayfirst.org/ // Submitted by Jamie McClelland mayfirst.info -mayfirst.org // McHost : https://mchost.ru // Submitted by Evgeniy Subbotin @@ -14624,6 +14671,7 @@ messerli.app // Submitted by Jacob Cordero atmeta.com apps.fbsbx.com +*.metaaiusercontent.com // MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ // Submitted by Zdeněk Šustr and Radim Janča @@ -14708,6 +14756,10 @@ mittwaldserver.info typo3server.info project.space +// MKM : https://mkm.fan/ +// Submitted by Kashi Ahmer +mkm.fan + // Mocha : https://getmocha.com // Submitted by Ben Reinhart mocha.app @@ -15043,6 +15095,7 @@ opensocial.site // OpenAI : https://openai.com // Submitted by Thomas Shadwell *.oaiusercontent.com +chatgpt.site // OpenCraft GmbH : http://opencraft.com/ // Submitted by Sven Marnach @@ -15240,6 +15293,12 @@ nyc.mn // Submitted by Kor Nielsen pubtls.org +// Puter : https://puter.com +// Submitted by Puter Security Team +puter.app +puter.site +puter.work + // PythonAnywhere LLP : https://www.pythonanywhere.com // Submitted by Giles Thomas pythonanywhere.com @@ -15598,9 +15657,10 @@ dedibox.fr schokokeks.net // Scottish Government : https://www.gov.scot -// Submitted by Martin Ellis +// Submitted by Martin Ellis gov.scot service.gov.scot +mygov.scot // Scry Security : http://www.scrysec.com // Submitted by Shante Adam @@ -15653,6 +15713,12 @@ pp.ua // Submitted by Information Administration as.sh.cn +// Shanghai Oray Information Technology Co., Ltd.: https://www.oray.com/ +// Submitted by: Shanghai Oray Information Technology Co., Ltd. +vicp.fun +yicp.fun +zicp.fun + // Sheezy.Art : https://sheezy.art // Submitted by Nyoom sheezy.games @@ -15994,6 +16060,11 @@ reservd.testing.thingdust.io // Submitted by Christian Franke tickets.io +// Tigris Data, Inc. : https://www.tigrisdata.com +// Submitted by Bo Cao +t3.storage.dev +t3.storageapi.dev + // Tlon.io : https://tlon.io // Submitted by Mark Staarink arvo.network @@ -16186,11 +16257,10 @@ webflowtest.io *.webhare.dev // WebHotelier Technologies Ltd : https://www.webhotelier.net/ -// Submitted by Apostolos Tsakpinis -bookonline.app +// Submitted by Apostolos Tsakpinis hotelwithflight.com -reserve-online.com reserve-online.net +book.online // WebPros International, LLC : https://webpros.com/ // Submitted by Nicolas Rochelemagne @@ -16282,6 +16352,10 @@ weeklylottery.org.uk wpenginepowered.com js.wpenginepowered.com +// xAI : https://x.ai/ +// Submitted by Asim Shrestha +grok.me + // XenonCloud GbR : https://xenoncloud.net // Submitted by Julian Uphoff *.xenonconnect.de @@ -16340,6 +16414,8 @@ zeabur.app // Zerops : https://zerops.io/ // Submitted by Zerops Team *.zerops.app +prg1-zerops.zone +*.zerops.zone // Zine EOOD : https://zine.bg/ // Submitted by Martin Angelov diff --git a/src/App.vue b/src/App.vue index 4c50e03f73..f858c546f9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -19,6 +19,12 @@ import useMainStore from './store/mainStore.js' export default { name: 'App', + data() { + return { + syncing: false, + } + }, + computed: { ...mapStores(useMainStore), ...mapState(useMainStore, [ @@ -64,6 +70,13 @@ export default { sync() { setTimeout(async () => { + // Don't sync a previous sync is still running + if (this.syncing) { + this.sync() + return + } + + this.syncing = true try { await this.mainStore.syncInboxes() @@ -78,6 +91,7 @@ export default { }, }) } finally { + this.syncing = false // Start over this.sync() } diff --git a/src/components/AccountForm.vue b/src/components/AccountForm.vue index daad120cca..ac37be97f6 100644 --- a/src/components/AccountForm.vue +++ b/src/components/AccountForm.vue @@ -65,7 +65,7 @@ {{ t('mail', 'Please enter an email of the format name@example.com') }}

-

{{ t('mail', 'IMAP Settings') }}

+

{{ t('mail', 'IMAP Settings') }}

-

{{ t('mail', 'SMTP Settings') }}

+

{{ t('mail', 'SMTP Settings') }}

+
{ + this.$refs[newState]?.$el?.scrollIntoView({ + behavior: 'smooth', + block: 'start', + }) + }) + }, }, methods: { diff --git a/src/components/AliasForm.vue b/src/components/AliasForm.vue index d8b7b878eb..3c358578f1 100644 --- a/src/components/AliasForm.vue +++ b/src/components/AliasForm.vue @@ -14,12 +14,14 @@ v-model="changeName" type="text" class="alias-form__form__input" + :aria-label="t('mail', 'Alias name')" required>
diff --git a/src/components/AppSettingsMenu.vue b/src/components/AppSettingsMenu.vue index b3ad42b2f2..5b0dbe750c 100755 --- a/src/components/AppSettingsMenu.vue +++ b/src/components/AppSettingsMenu.vue @@ -32,6 +32,16 @@ {{ account.emailAddress }} + + + {{ t('mail', '{email} (delegated)', { email: account.emailAddress }) }} + - - - - {{ t('mail', 'Avatars from Gravatar and favicons') }} - - - - {{ prioritySettingsText }} - - - - - - - - - - - - - {{ t('mail', 'New text block') }} - - - - - - - - - - - - - - - - - - - - {{ t('mail', 'Manage certificates') }} - - - - - - - {{ t('mail', 'Mailvelope is enabled for the current domain.') }} - - - - - - - - - - - - - - - {{ followUpReminderText }} - - - - - - - {{ contextChatText }} - - - - - - - - - - - - - - - - - - - - - - + + + + + {{ t('mail', 'Avatars from Gravatar and favicons') }} + + + + {{ prioritySettingsText }} + + + + + + + + + + + + + {{ t('mail', 'New text block') }} + + + + + + + + + + + + + + + + + + + + + {{ t('mail', 'Manage certificates') }} + + + + + + + {{ t('mail', 'Mailvelope is enabled for the current domain.') }} + + + + + + + + + + + + + + + {{ followUpReminderText }} + + + + + + + + {{ contextChatText }} + + + + + + + + + + + + + + + + + + + + + + + + +
@@ -412,7 +427,11 @@ export default { }, accountsWithEmail() { - return this.getAccounts.filter((account) => account && account.emailAddress) + return this.getAccounts.filter((account) => account && account.emailAddress && !account.isDelegated) + }, + + delegatedAccounts() { + return this.getAccounts.filter((account) => account && account.emailAddress && account.isDelegated) }, sortFavorites: { diff --git a/src/components/Composer.vue b/src/components/Composer.vue index 2081ca208b..567367db04 100644 --- a/src/components/Composer.vue +++ b/src/components/Composer.vue @@ -3,7 +3,11 @@ - SPDX-License-Identifier: AGPL-3.0-or-later --> @@ -104,6 +97,11 @@ export default { type: Number, default: 0, }, + + accountId: { + type: Number, + default: null, + }, }, data() { @@ -114,19 +112,15 @@ export default { attachments: [], isToggle: false, hasNextLine: false, - isAttachementPickerOpen: false, - isLinkPickerOpen: false, - attachementPickerButtons: [ + isAttachmentPickerOpen: false, + attachmentPickerButtons: [ { - label: t('mail', 'Choose'), + label: t('mail', 'Add as attachment'), callback: this.onAddCloudAttachment, type: 'primary', }, - ], - - linkPickerButtons: [ { - label: t('mail', 'Choose'), + label: t('mail', 'Add as share link'), callback: this.onAddCloudAttachmentLink, type: 'primary', }, @@ -188,8 +182,8 @@ export default { created() { this.bus.on('on-add-local-attachment', this.onAddLocalAttachment) this.bus.on('on-add-cloud-attachment', this.openAttachementPicker) - this.bus.on('on-add-cloud-attachment-link', this.OpenLinkPicker) this.bus.on('on-add-message-as-attachment', this.onAddMessageAsAttachment) + this.bus.on('on-add-local-files', this.addLocalFiles) this.value.map((attachment) => { this.attachments.push({ id: attachment.id, @@ -213,11 +207,7 @@ export default { }, openAttachementPicker() { - this.isAttachementPickerOpen = true - }, - - OpenLinkPicker() { - this.isLinkPickerOpen = true + this.isAttachmentPickerOpen = true }, onAddLocalAttachment() { @@ -240,11 +230,15 @@ export default { }, onLocalAttachmentSelected(e) { + return this.addLocalFiles(Array.from(e.target.files)) + }, + + addLocalFiles(files) { this.uploading = true // BUG - if choose again - progress lost/ move to complete() Vue.set(this, 'uploads', {}) - const toUpload = sumBy(prop('size'), Object.values(e.target.files)) + const toUpload = sumBy(prop('size'), Object.values(files)) const newTotal = toUpload + this.totalSizeOfUpload() logger.debug('checking upload size limit', { existingUploads: this.totalSizeOfUpload(), @@ -253,7 +247,7 @@ export default { newTotal, }) if (this.uploadSizeLimit && newTotal > this.uploadSizeLimit) { - this.showAttachmentFileSizeWarning(e.target.files.length) + this.showAttachmentFileSizeWarning(files.length) this.uploading = false return } @@ -292,7 +286,7 @@ export default { uploaded: 0, }) try { - return uploadLocalAttachment(file, progress(file.name), controller) + return uploadLocalAttachment(file, this.accountId, progress(file.name), controller) .catch(() => { this.attachments.some((attachment) => { if (attachment.displayName === file.name && !attachment.error) { @@ -318,7 +312,7 @@ export default { } catch (error) { logger.error('Could not upload file', { file, error }) } - }, e.target.files) + }, files) const done = Promise.all(promises) .catch((error) => logger.error('could not upload all attachments', { error })) diff --git a/src/components/DelegationModal.vue b/src/components/DelegationModal.vue new file mode 100644 index 0000000000..638875c3e0 --- /dev/null +++ b/src/components/DelegationModal.vue @@ -0,0 +1,328 @@ + + + + + + + diff --git a/src/components/DisplayContactDetails.vue b/src/components/DisplayContactDetails.vue index 3564689e0b..0f28b880c4 100644 --- a/src/components/DisplayContactDetails.vue +++ b/src/components/DisplayContactDetails.vue @@ -35,7 +35,7 @@ export default { } }, - async beforeUnmount() { + async beforeDestroy() { if (this.vm) { this.vm.$destroy() } diff --git a/src/components/Envelope.vue b/src/components/Envelope.vue index c21e7d3c40..85c2ee267b 100644 --- a/src/components/Envelope.vue +++ b/src/components/Envelope.vue @@ -173,8 +173,12 @@
- + :title="data.summary ? data.summary.trim() : null"> + {{ isEncrypted ? t('mail', 'Encrypted message') : data.summary ? data.summary.trim() : data.previewText.trim() }}
@@ -189,6 +193,14 @@ fill-color="var(--color-primary-element)" /> - - {{ slowHint }} - + @@ -57,7 +59,7 @@ export default { }, 3500) }, - beforeUnmount() { + beforeDestroy() { clearTimeout(this.slowTimer) }, } @@ -85,6 +87,6 @@ export default { flex-direction: column; flex: 1 auto; align-items: center; - height: 100vh; + height: 100%; } diff --git a/src/components/Mailbox.vue b/src/components/Mailbox.vue index 861db0a881..a117f4d545 100644 --- a/src/components/Mailbox.vue +++ b/src/components/Mailbox.vue @@ -4,7 +4,8 @@ -->