├── .eslintrc.cjs ├── .github ├── dependabot.yml └── workflows │ ├── appstore-build-publish.yml │ ├── dependabot-approve-merge.yml │ ├── lint-eslint-when-unrelated.yml │ ├── lint-eslint.yml │ ├── lint-php-cs.yml │ ├── lint-php.yml │ ├── lint-stylelint.yml │ ├── node-when-unrelated.yml │ ├── node.yml │ ├── phpunit-mysql.yml │ ├── phpunit-oci.yml │ ├── phpunit-pgsql.yml │ ├── phpunit-sqlite.yml │ ├── phpunit-summary-when-unrelated.yml │ ├── pr-feedback.yml │ └── reuse.yml ├── .gitignore ├── .nextcloudignore ├── .php-cs-fixer.dist.php ├── .tx └── config ├── AUTHORS.md ├── CHANGELOG.md ├── COPYING ├── LICENSES ├── AGPL-3.0-or-later.txt ├── Apache-2.0.txt ├── CC0-1.0.txt └── MIT.txt ├── README.md ├── REUSE.toml ├── appinfo ├── info.xml └── routes.php ├── composer.json ├── composer.lock ├── img ├── files_zip-dark.svg ├── files_zip.svg └── zip-box-outline.svg ├── krankerl.toml ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── bg.js ├── bg.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── ko.js ├── ko.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sv.js ├── sv.json ├── th.js ├── th.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── AppInfo │ └── Application.php ├── BackgroundJob │ └── ZipJob.php ├── Capabilities.php ├── Controller │ └── ZipController.php ├── Exceptions │ ├── MaximumSizeReachedException.php │ └── TargetAlreadyExists.php ├── InitialState.php ├── Listener │ └── LoadAdditionalListener.php ├── Notification │ └── Notifier.php └── Service │ ├── NotificationService.php │ └── ZipService.php ├── package-lock.json ├── package.json ├── src ├── Modal.vue ├── main.d.ts ├── main.ts ├── services.ts └── types.d.ts ├── stylelint.config.cjs ├── tests ├── Feature │ └── ZipFeatureTest.php ├── Unit │ └── .gitkeep ├── bootstrap.php └── phpunit.xml ├── tsconfig.json └── vite.config.ts /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | module.exports = { 6 | root: true, 7 | extends: [ 8 | '@nextcloud', 9 | ], 10 | } 11 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | version: 2 4 | updates: 5 | - package-ecosystem: composer 6 | directory: "/" 7 | schedule: 8 | interval: weekly 9 | - package-ecosystem: "npm" 10 | directory: "/" 11 | schedule: 12 | interval: "weekly" 13 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-approve-merge.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Dependabot 10 | 11 | on: 12 | pull_request_target: 13 | branches: 14 | - main 15 | - master 16 | - stable* 17 | 18 | permissions: 19 | contents: read 20 | 21 | concurrency: 22 | group: dependabot-approve-merge-${{ github.head_ref || github.run_id }} 23 | cancel-in-progress: true 24 | 25 | jobs: 26 | auto-approve-merge: 27 | if: github.actor == 'dependabot[bot]' || github.actor == 'renovate[bot]' 28 | runs-on: ubuntu-latest-low 29 | permissions: 30 | # for hmarr/auto-approve-action to approve PRs 31 | pull-requests: write 32 | 33 | steps: 34 | - name: Disabled on forks 35 | if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} 36 | run: | 37 | echo 'Can not approve PRs from forks' 38 | exit 1 39 | 40 | # GitHub actions bot approve 41 | - uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2 42 | with: 43 | github-token: ${{ secrets.GITHUB_TOKEN }} 44 | 45 | # Nextcloud bot approve and merge request 46 | - uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a # v2 47 | with: 48 | target: minor 49 | github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }} 50 | -------------------------------------------------------------------------------- /.github/workflows/lint-eslint-when-unrelated.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # Use lint-eslint together with lint-eslint-when-unrelated to make eslint a required check for GitHub actions 7 | # https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks 8 | # 9 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 10 | # SPDX-License-Identifier: MIT 11 | name: Lint eslint 12 | 13 | on: 14 | pull_request: 15 | paths-ignore: 16 | - '.github/workflows/**' 17 | - 'src/**' 18 | - 'appinfo/info.xml' 19 | - 'package.json' 20 | - 'package-lock.json' 21 | - 'tsconfig.json' 22 | - '.eslintrc.*' 23 | - '.eslintignore' 24 | - '**.js' 25 | - '**.ts' 26 | - '**.vue' 27 | 28 | permissions: 29 | contents: read 30 | 31 | jobs: 32 | lint: 33 | permissions: 34 | contents: none 35 | 36 | runs-on: ubuntu-latest 37 | 38 | name: eslint 39 | 40 | steps: 41 | - run: 'echo "No eslint required"' 42 | -------------------------------------------------------------------------------- /.github/workflows/lint-eslint.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint eslint 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-eslint-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | changes: 22 | runs-on: ubuntu-latest-low 23 | permissions: 24 | contents: read 25 | pull-requests: read 26 | 27 | outputs: 28 | src: ${{ steps.changes.outputs.src}} 29 | 30 | steps: 31 | - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 32 | id: changes 33 | continue-on-error: true 34 | with: 35 | filters: | 36 | src: 37 | - '.github/workflows/**' 38 | - 'src/**' 39 | - 'appinfo/info.xml' 40 | - 'package.json' 41 | - 'package-lock.json' 42 | - 'tsconfig.json' 43 | - '.eslintrc.*' 44 | - '.eslintignore' 45 | - '**.js' 46 | - '**.ts' 47 | - '**.vue' 48 | 49 | lint: 50 | runs-on: ubuntu-latest 51 | 52 | needs: changes 53 | if: needs.changes.outputs.src != 'false' 54 | 55 | name: NPM lint 56 | 57 | steps: 58 | - name: Checkout 59 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 60 | 61 | - name: Read package.json node and npm engines version 62 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 63 | id: versions 64 | with: 65 | fallbackNode: '^20' 66 | fallbackNpm: '^10' 67 | 68 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }} 69 | uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 70 | with: 71 | node-version: ${{ steps.versions.outputs.nodeVersion }} 72 | 73 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }} 74 | run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' 75 | 76 | - name: Install dependencies 77 | env: 78 | CYPRESS_INSTALL_BINARY: 0 79 | PUPPETEER_SKIP_DOWNLOAD: true 80 | run: npm ci 81 | 82 | - name: Lint 83 | run: npm run lint 84 | 85 | summary: 86 | permissions: 87 | contents: none 88 | runs-on: ubuntu-latest-low 89 | needs: [changes, lint] 90 | 91 | if: always() 92 | 93 | # This is the summary, we just avoid to rename it so that branch protection rules still match 94 | name: eslint 95 | 96 | steps: 97 | - name: Summary status 98 | run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi 99 | -------------------------------------------------------------------------------- /.github/workflows/lint-php-cs.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint php-cs 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-php-cs-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | lint: 22 | runs-on: ubuntu-latest 23 | 24 | name: php-cs 25 | 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 29 | 30 | - name: Get php version 31 | id: versions 32 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 33 | 34 | - name: Set up php${{ steps.versions.outputs.php-available }} 35 | uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 36 | with: 37 | php-version: ${{ steps.versions.outputs.php-available }} 38 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 39 | coverage: none 40 | ini-file: development 41 | env: 42 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 43 | 44 | - name: Install dependencies 45 | run: composer i 46 | 47 | - name: Lint 48 | run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 ) 49 | -------------------------------------------------------------------------------- /.github/workflows/lint-php.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint php 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-php-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | matrix: 22 | runs-on: ubuntu-latest-low 23 | outputs: 24 | php-versions: ${{ steps.versions.outputs.php-versions }} 25 | steps: 26 | - name: Checkout app 27 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 28 | - name: Get version matrix 29 | id: versions 30 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.0.0 31 | 32 | php-lint: 33 | runs-on: ubuntu-latest 34 | needs: matrix 35 | strategy: 36 | matrix: 37 | php-versions: ${{fromJson(needs.matrix.outputs.php-versions)}} 38 | 39 | name: php-lint 40 | 41 | steps: 42 | - name: Checkout 43 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 44 | 45 | - name: Set up php ${{ matrix.php-versions }} 46 | uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 47 | with: 48 | php-version: ${{ matrix.php-versions }} 49 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 50 | coverage: none 51 | ini-file: development 52 | env: 53 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 54 | 55 | - name: Lint 56 | run: composer run lint 57 | 58 | summary: 59 | permissions: 60 | contents: none 61 | runs-on: ubuntu-latest-low 62 | needs: php-lint 63 | 64 | if: always() 65 | 66 | name: php-lint-summary 67 | 68 | steps: 69 | - name: Summary status 70 | run: if ${{ needs.php-lint.result != 'success' && needs.php-lint.result != 'skipped' }}; then exit 1; fi 71 | -------------------------------------------------------------------------------- /.github/workflows/lint-stylelint.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Lint stylelint 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: lint-stylelint-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | lint: 22 | runs-on: ubuntu-latest 23 | 24 | name: stylelint 25 | 26 | steps: 27 | - name: Checkout 28 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 29 | 30 | - name: Read package.json node and npm engines version 31 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 32 | id: versions 33 | with: 34 | fallbackNode: '^20' 35 | fallbackNpm: '^10' 36 | 37 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }} 38 | uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 39 | with: 40 | node-version: ${{ steps.versions.outputs.nodeVersion }} 41 | 42 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }} 43 | run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' 44 | 45 | - name: Install dependencies 46 | env: 47 | CYPRESS_INSTALL_BINARY: 0 48 | run: npm ci 49 | 50 | - name: Lint 51 | run: npm run stylelint 52 | -------------------------------------------------------------------------------- /.github/workflows/node-when-unrelated.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # Use node together with node-when-unrelated to make eslint a required check for GitHub actions 7 | # https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks 8 | # 9 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 10 | # SPDX-License-Identifier: MIT 11 | name: Node 12 | 13 | on: 14 | pull_request: 15 | paths-ignore: 16 | - '.github/workflows/**' 17 | - 'src/**' 18 | - 'appinfo/info.xml' 19 | - 'package.json' 20 | - 'package-lock.json' 21 | - 'tsconfig.json' 22 | - '**.js' 23 | - '**.ts' 24 | - '**.vue' 25 | push: 26 | branches: 27 | - main 28 | - master 29 | - stable* 30 | 31 | concurrency: 32 | group: node-${{ github.head_ref || github.run_id }} 33 | cancel-in-progress: true 34 | 35 | jobs: 36 | build: 37 | permissions: 38 | contents: none 39 | 40 | runs-on: ubuntu-latest 41 | 42 | name: node 43 | steps: 44 | - name: Skip 45 | run: 'echo "No JS/TS files changed, skipped Node"' 46 | -------------------------------------------------------------------------------- /.github/workflows/node.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: Node 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: node-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | changes: 22 | runs-on: ubuntu-latest-low 23 | permissions: 24 | contents: read 25 | pull-requests: read 26 | 27 | outputs: 28 | src: ${{ steps.changes.outputs.src}} 29 | 30 | steps: 31 | - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 32 | id: changes 33 | continue-on-error: true 34 | with: 35 | filters: | 36 | src: 37 | - '.github/workflows/**' 38 | - 'src/**' 39 | - 'appinfo/info.xml' 40 | - 'package.json' 41 | - 'package-lock.json' 42 | - 'tsconfig.json' 43 | - '**.js' 44 | - '**.ts' 45 | - '**.vue' 46 | 47 | build: 48 | runs-on: ubuntu-latest 49 | 50 | needs: changes 51 | if: needs.changes.outputs.src != 'false' 52 | 53 | name: NPM build 54 | steps: 55 | - name: Checkout 56 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 57 | 58 | - name: Read package.json node and npm engines version 59 | uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 60 | id: versions 61 | with: 62 | fallbackNode: '^20' 63 | fallbackNpm: '^10' 64 | 65 | - name: Set up node ${{ steps.versions.outputs.nodeVersion }} 66 | uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 67 | with: 68 | node-version: ${{ steps.versions.outputs.nodeVersion }} 69 | 70 | - name: Set up npm ${{ steps.versions.outputs.npmVersion }} 71 | run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' 72 | 73 | - name: Install dependencies & build 74 | env: 75 | CYPRESS_INSTALL_BINARY: 0 76 | PUPPETEER_SKIP_DOWNLOAD: true 77 | run: | 78 | npm ci 79 | npm run build --if-present 80 | 81 | - name: Check webpack build changes 82 | run: | 83 | bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" 84 | 85 | - name: Show changes on failure 86 | if: failure() 87 | run: | 88 | git status 89 | git --no-pager diff 90 | exit 1 # make it red to grab attention 91 | 92 | summary: 93 | permissions: 94 | contents: none 95 | runs-on: ubuntu-latest-low 96 | needs: [changes, build] 97 | 98 | if: always() 99 | 100 | # This is the summary, we just avoid to rename it so that branch protection rules still match 101 | name: node 102 | 103 | steps: 104 | - name: Summary status 105 | run: if ${{ needs.changes.outputs.src != 'false' && needs.build.result != 'success' }}; then exit 1; fi 106 | -------------------------------------------------------------------------------- /.github/workflows/phpunit-sqlite.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | 9 | name: PHPUnit SQLite 10 | 11 | on: pull_request 12 | 13 | permissions: 14 | contents: read 15 | 16 | concurrency: 17 | group: phpunit-sqlite-${{ github.head_ref || github.run_id }} 18 | cancel-in-progress: true 19 | 20 | jobs: 21 | matrix: 22 | runs-on: ubuntu-latest-low 23 | outputs: 24 | php-version: ${{ steps.versions.outputs.php-available-list }} 25 | server-max: ${{ steps.versions.outputs.branches-max-list }} 26 | steps: 27 | - name: Checkout app 28 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 29 | 30 | - name: Get version matrix 31 | id: versions 32 | uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1 33 | 34 | changes: 35 | runs-on: ubuntu-latest-low 36 | permissions: 37 | contents: read 38 | pull-requests: read 39 | 40 | outputs: 41 | src: ${{ steps.changes.outputs.src}} 42 | 43 | steps: 44 | - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 45 | id: changes 46 | continue-on-error: true 47 | with: 48 | filters: | 49 | src: 50 | - '.github/workflows/**' 51 | - 'appinfo/**' 52 | - 'lib/**' 53 | - 'templates/**' 54 | - 'tests/**' 55 | - 'vendor/**' 56 | - 'vendor-bin/**' 57 | - '.php-cs-fixer.dist.php' 58 | - 'composer.json' 59 | - 'composer.lock' 60 | 61 | phpunit-sqlite: 62 | runs-on: ubuntu-latest 63 | 64 | needs: [changes, matrix] 65 | if: needs.changes.outputs.src != 'false' 66 | 67 | strategy: 68 | matrix: 69 | php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} 70 | server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} 71 | 72 | name: SQLite PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} 73 | 74 | steps: 75 | - name: Set app env 76 | run: | 77 | # Split and keep last 78 | echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV 79 | 80 | - name: Checkout server 81 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 82 | with: 83 | submodules: true 84 | repository: nextcloud/server 85 | ref: ${{ matrix.server-versions }} 86 | 87 | - name: Checkout app 88 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 89 | with: 90 | path: apps/${{ env.APP_NAME }} 91 | 92 | - name: Set up php ${{ matrix.php-versions }} 93 | uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 94 | with: 95 | php-version: ${{ matrix.php-versions }} 96 | # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation 97 | extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite 98 | coverage: none 99 | ini-file: development 100 | env: 101 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 102 | 103 | - name: Check composer file existence 104 | id: check_composer 105 | uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 106 | with: 107 | files: apps/${{ env.APP_NAME }}/composer.json 108 | 109 | - name: Set up dependencies 110 | # Only run if phpunit config file exists 111 | if: steps.check_composer.outputs.files_exists == 'true' 112 | working-directory: apps/${{ env.APP_NAME }} 113 | run: composer i 114 | 115 | - name: Set up Nextcloud 116 | env: 117 | DB_PORT: 4444 118 | run: | 119 | mkdir data 120 | ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin 121 | ./occ app:enable --force ${{ env.APP_NAME }} 122 | 123 | - name: Check PHPUnit script is defined 124 | id: check_phpunit 125 | continue-on-error: true 126 | working-directory: apps/${{ env.APP_NAME }} 127 | run: | 128 | composer run --list | grep '^ test:unit ' | wc -l | grep 1 129 | 130 | - name: PHPUnit 131 | # Only run if phpunit config file exists 132 | if: steps.check_phpunit.outcome == 'success' 133 | working-directory: apps/${{ env.APP_NAME }} 134 | run: composer run test:unit 135 | 136 | - name: Check PHPUnit integration script is defined 137 | id: check_integration 138 | continue-on-error: true 139 | working-directory: apps/${{ env.APP_NAME }} 140 | run: | 141 | composer run --list | grep '^ test:integration ' | wc -l | grep 1 142 | 143 | - name: Run Nextcloud 144 | # Only run if phpunit integration config file exists 145 | if: steps.check_integration.outcome == 'success' 146 | run: php -S localhost:8080 & 147 | 148 | - name: PHPUnit integration 149 | # Only run if phpunit integration config file exists 150 | if: steps.check_integration.outcome == 'success' 151 | working-directory: apps/${{ env.APP_NAME }} 152 | run: composer run test:integration 153 | 154 | - name: Print logs 155 | if: always() 156 | run: | 157 | cat data/nextcloud.log 158 | 159 | - name: Skipped 160 | # Fail the action when neither unit nor integration tests ran 161 | if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' 162 | run: | 163 | echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' 164 | exit 1 165 | 166 | summary: 167 | permissions: 168 | contents: none 169 | runs-on: ubuntu-latest-low 170 | needs: [changes, phpunit-sqlite] 171 | 172 | if: always() 173 | 174 | name: phpunit-sqlite-summary 175 | 176 | steps: 177 | - name: Summary status 178 | run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi 179 | -------------------------------------------------------------------------------- /.github/workflows/phpunit-summary-when-unrelated.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | # 6 | # SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-License-Identifier: MIT 8 | name: PHPUnit summary 9 | 10 | on: 11 | pull_request: 12 | paths-ignore: 13 | - '.github/workflows/**' 14 | - 'appinfo/**' 15 | - 'lib/**' 16 | - 'templates/**' 17 | - 'tests/**' 18 | - 'vendor/**' 19 | - 'vendor-bin/**' 20 | - '.php-cs-fixer.dist.php' 21 | - 'composer.json' 22 | - 'composer.lock' 23 | 24 | permissions: 25 | contents: read 26 | 27 | jobs: 28 | summary-mysql: 29 | permissions: 30 | contents: none 31 | runs-on: ubuntu-latest 32 | 33 | name: phpunit-mysql-summary 34 | 35 | steps: 36 | - name: Summary status 37 | run: 'echo "No PHP files changed, skipped PHPUnit"' 38 | 39 | summary-oci: 40 | permissions: 41 | contents: none 42 | runs-on: ubuntu-latest 43 | 44 | name: phpunit-oci-summary 45 | 46 | steps: 47 | - name: Summary status 48 | run: 'echo "No PHP files changed, skipped PHPUnit"' 49 | 50 | summary-pgsql: 51 | permissions: 52 | contents: none 53 | runs-on: ubuntu-latest 54 | 55 | name: phpunit-pgsql-summary 56 | 57 | steps: 58 | - name: Summary status 59 | run: 'echo "No PHP files changed, skipped PHPUnit"' 60 | 61 | summary-sqlite: 62 | permissions: 63 | contents: none 64 | runs-on: ubuntu-latest 65 | 66 | name: phpunit-sqlite-summary 67 | 68 | steps: 69 | - name: Summary status 70 | run: 'echo "No PHP files changed, skipped PHPUnit"' 71 | -------------------------------------------------------------------------------- /.github/workflows/pr-feedback.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors 7 | # SPDX-FileCopyrightText: 2023 Marcel Klehr 8 | # SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com> 9 | # SPDX-FileCopyrightText: 2023 Daniel Kesselberg 10 | # SPDX-FileCopyrightText: 2023 Florian Steffens 11 | # SPDX-License-Identifier: MIT 12 | 13 | name: 'Ask for feedback on PRs' 14 | on: 15 | schedule: 16 | - cron: '30 1 * * *' 17 | 18 | jobs: 19 | pr-feedback: 20 | runs-on: ubuntu-latest 21 | steps: 22 | - name: The get-github-handles-from-website action 23 | uses: marcelklehr/get-github-handles-from-website-action@a739600f6b91da4957f51db0792697afbb2f143c # v1.0.0 24 | id: scrape 25 | with: 26 | website: 'https://nextcloud.com/team/' 27 | 28 | - name: Get blocklist 29 | id: blocklist 30 | run: | 31 | blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -) 32 | echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT" 33 | 34 | - uses: marcelklehr/pr-feedback-action@1883b38a033fb16f576875e0cf45f98b857655c4 35 | with: 36 | feedback-message: | 37 | Hello there, 38 | Thank you so much for taking the time and effort to create a pull request to our Nextcloud project. 39 | 40 | We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. 41 | 42 | Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 43 | 44 | Thank you for contributing to Nextcloud and we hope to hear from you soon! 45 | 46 | (If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).) 47 | days-before-feedback: 14 48 | start-date: '2024-04-30' 49 | exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}' 50 | exempt-bots: true 51 | -------------------------------------------------------------------------------- /.github/workflows/reuse.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. 7 | # 8 | # SPDX-License-Identifier: CC0-1.0 9 | 10 | name: REUSE Compliance Check 11 | 12 | on: [pull_request] 13 | 14 | jobs: 15 | reuse-compliance-check: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 20 | with: 21 | persist-credentials: false 22 | 23 | - name: REUSE Compliance Check 24 | uses: fsfe/reuse-action@bb774aa972c2a89ff34781233d275075cbddf542 # v5.0.0 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | node_modules/ 4 | js/ 5 | css/ 6 | vendor/ 7 | .php_cs.cache 8 | .php-cs-fixer.cache 9 | tests/.phpunit.result.cache 10 | -------------------------------------------------------------------------------- /.nextcloudignore: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | /AUTHORS.md 4 | /build 5 | /.git 6 | /.github 7 | /.gitignore 8 | /.travis.yml 9 | /.tx 10 | /.scrutinizer.yml 11 | /babel.config.js 12 | /CONTRIBUTING.md 13 | /composer.json 14 | /composer.lock 15 | /composer.phar 16 | /karma.conf.js 17 | /krankerl.toml 18 | /l10n/no-php 19 | /Makefile 20 | /nbproject 21 | /node_modules 22 | /package.json 23 | /package-lock.json 24 | /screenshots 25 | /src 26 | /stylelint.config.js 27 | /tests 28 | /vendor/bin 29 | /webpack.common.js 30 | /webpack.dev.js 31 | /webpack.prod.js 32 | /webpack.js 33 | /vendor/bin 34 | /vendor-bin 35 | /.php_cs.dist 36 | /.nextcloudignore 37 | /.eslintrc.js 38 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | getFinder() 15 | ->ignoreVCSIgnored(true) 16 | ->notPath('build') 17 | ->notPath('l10n') 18 | ->notPath('lib/Vendor') 19 | ->notPath('src') 20 | ->notPath('vendor') 21 | ->in(__DIR__); 22 | return $config; 23 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu 4 | 5 | [o:nextcloud:p:nextcloud:r:files_zip] 6 | file_filter = translationfiles//files_zip.po 7 | source_file = translationfiles/templates/files_zip.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | 5 | # Authors 6 | 7 | - Daniel Calviño Sánchez 8 | - Ferdinand Thiessen 9 | - Joas Schilling 10 | - John Molakvoæ 11 | - Julius Härtl 12 | - Roeland Jago Douma 13 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 5 | # Changelog for files_zip 6 | 7 | ## 2.1.0 8 | 9 | ### Added 10 | 11 | - feat(deps): Add Nextcloud 31 support @nickvergessen [#275](https://github.com/nextcloud/files_zip/pull/275) 12 | - ci: Update workflows @nickvergessen [#284](https://github.com/nextcloud/files_zip/pull/284) 13 | 14 | ### Fixed 15 | 16 | - fix: disable zip on trashbin @skjnldsv [#282](https://github.com/nextcloud/files_zip/pull/282) 17 | - fix(files): upgrade `vite-config` to `1.4.2` @JuliaKirschenheuter [#288](https://github.com/nextcloud/files_zip/pull/288) 18 | 19 | ### Other 20 | 21 | - Chore(deps): Bump @nextcloud/vue from 8.15.0 to 8.15.1 @dependabot [#271](https://github.com/nextcloud/files_zip/pull/271) 22 | - Chore(deps): Bump @nextcloud/files from 3.6.0 to 3.7.0 @dependabot [#272](https://github.com/nextcloud/files_zip/pull/272) 23 | - Chore(deps): Bump @nextcloud/vue from 8.15.1 to 8.16.0 @dependabot [#273](https://github.com/nextcloud/files_zip/pull/273) 24 | - Chore(deps): Bump @nextcloud/files from 3.7.0 to 3.8.0 @dependabot [#274](https://github.com/nextcloud/files_zip/pull/274) 25 | - chore: update workflows from templates @nextcloud-command [#277](https://github.com/nextcloud/files_zip/pull/277) 26 | - Chore(deps): Bump @nextcloud/vue from 8.16.0 to 8.17.0 @dependabot [#278](https://github.com/nextcloud/files_zip/pull/278) 27 | - Chore(deps): Bump @nextcloud/dialogs from 5.3.5 to 5.3.7 @dependabot [#279](https://github.com/nextcloud/files_zip/pull/279) 28 | - Chore(deps-dev): Bump nextcloud/coding-standard from 1.2.1 to 1.2.3 @dependabot [#280](https://github.com/nextcloud/files_zip/pull/280) 29 | - Chore(deps): Bump @nextcloud/files from 3.8.0 to 3.9.0 @dependabot [#283](https://github.com/nextcloud/files_zip/pull/283) 30 | - Chore(deps): Bump @nextcloud/vue from 8.17.0 to 8.17.1 @dependabot [#281](https://github.com/nextcloud/files_zip/pull/281) 31 | - Chore(deps-dev): Bump nextcloud/coding-standard from 1.2.3 to 1.3.1 @dependabot [#287](https://github.com/nextcloud/files_zip/pull/287) 32 | 33 | ## 1.6.0 34 | 35 | ### Added 36 | 37 | - feat(deps): Add Nextcloud 30 support @nickvergessen [#226](https://github.com/nextcloud/files_zip/pull/226) 38 | - Add SPDX header @AndyScherzinger [#248](https://github.com/nextcloud/files_zip/pull/248) 39 | - Remove duplicate license info @AndyScherzinger [#250](https://github.com/nextcloud/files_zip/pull/250) 40 | - Migrate REUSE to TOML format @AndyScherzinger [#265](https://github.com/nextcloud/files_zip/pull/265) 41 | 42 | ## 1.5.0 43 | 44 | ### Added 45 | 46 | - Nextcloud 28 compatibility 47 | - feat: Move to vue and @nextcloud/files actions @juliushaertl [#189](https://github.com/nextcloud/files_zip/pull/189) 48 | 49 | ### Fixed 50 | 51 | - fix: Add share attribute check @juliushaertl [#192](https://github.com/nextcloud/files_zip/pull/192) 52 | - fix(i18n):fixed typo @rakekniven [#191](https://github.com/nextcloud/files_zip/pull/191) 53 | - (readme) Add usage info + tidy up headings @joshtrichards [#159](https://github.com/nextcloud/files_zip/pull/159) 54 | 55 | ## 1.4.0 56 | 57 | ### Removed 58 | 59 | - Support for Nextcloud 22, 23 and 24 60 | 61 | ## 1.3.0 (not released) 62 | 63 | ### Added 64 | 65 | - Compatibility with Nextcloud 27 66 | 67 | ### Fixed 68 | 69 | - Fix button labels in dialog @danxuliu [#140](https://github.com/nextcloud/files_zip/pull/140) 70 | 71 | ### Changed 72 | 73 | - Translation updates 74 | - Dependency updates 75 | 76 | ## 1.2.0 77 | 78 | ### Added 79 | 80 | - Add single file action for compressing to zip @juliushaertl [#86](https://github.com/nextcloud/files_zip/pull/86) 81 | - Compatibility with Nextcloud 26 82 | 83 | ### Fixed 84 | 85 | - Fix icon color inverting @juliushaertl [#111](https://github.com/nextcloud/files_zip/pull/111) 86 | 87 | ## 1.1.2 88 | 89 | ### Added 90 | 91 | - Add option to limit the maximum amount of files in size [#79](https://github.com/nextcloud/files_zip/pull/79) 92 | 93 | ### Fixed 94 | 95 | - Clean up any temp files after each job [#78](https://github.com/nextcloud/files_zip/pull/78) 96 | 97 | ## 1.1.1 98 | 99 | ### Fixed 100 | 101 | - Propagate filesize change [#74](https://github.com/nextcloud/files_zip/pull/74) 102 | 103 | 104 | ## 1.1.0 105 | 106 | - Nextcloud 24 compatibility 107 | - Translation updates 108 | 109 | ## 1.0.1 110 | 111 | ### Fixed 112 | 113 | - #40 Hide zip menu item when there is no create permission in a folder @juliushaertl 114 | - #50 Add transifex config @nickvergessen 115 | - #51 Add l10n/ folder @nickvergessen 116 | - #47 Fix handling of invalid names @CarlSchwan 117 | - #46 Fix notifications not getting translated @CarlSchwan 118 | - #52 l10n: Correct spelling @Valdnet 119 | - Bump dependencies 120 | - Update translations 121 | 122 | 123 | ## 1.0.0 124 | 125 | - Initial release 126 | -------------------------------------------------------------------------------- /LICENSES/MIT.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 5 | # Zipper 6 | 7 | [![REUSE status](https://api.reuse.software/badge/github.com/nextcloud/files_zip)](https://api.reuse.software/info/github.com/nextcloud/files_zip) 8 | 9 | Create zip archives from one or multiple files from within Nextcloud. The archive will be created in the background during cron job execution, so make sure that you have setup a regular cron job. Once the file has been created, the user will be notified about that. 10 | 11 | ## Usage 12 | 13 | After installing and enabling [the Zipper app](https://apps.nextcloud.com/apps/files_zip), a new contextual menu option labeled `Compress to Zip` will appear when right-clicking a file or folder as well as under the `...Actions` menu at the top of the file list in the Nextcloud Web inteface. A notification will be generated immediately for the user to inform them that the zip file creation is pending (queued). An additional notification will be generated when the zip file is available for download. 14 | 15 | ## Worker 16 | 17 | To not wait for the cron job but pick up zip jobs immediately you can run a separate worker process with the following occ command e.g. as a systemd service: 18 | 19 | ``` 20 | occ background-job:worker 'OCA\FilesZip\BackgroundJob\ZipJob' 21 | ``` 22 | 23 | ## Development 24 | 25 | The app requires frontend code build in order to run it from the git repostitory: 26 | - Install dependencies: `npm ci` 27 | - Build the app `npm run build` 28 | 29 | ## API 30 | 31 | ### Capabilities Endpoint 32 | 33 | The Capabilities endpoint will announce the possibility to create zip files through the API with the available API version. Currently only `v1` is available. 34 | 35 | ```json 36 | "files_zip": { 37 | "apiVersion": "v1" 38 | }, 39 | ``` 40 | 41 | ### Scheduling a zip file creation 42 | 43 | POST /ocs/v2.php/apps/files_zip/api/v1/zip 44 | 45 | Parameters: 46 | - fileIds: *(int[])* List of file ids to add to the archive, e.g. `[18633,18646,18667]` 47 | - target: *(string)* Full path of the target zip file in the user directory, e.g. `/path/to/file.zip` 48 | 49 | ## Configuration 50 | 51 | ### Limiting File Size 52 | 53 | In some cases it might be wanted to limit the maximum size of files in total that may be added to zip files. That might be for example useful if the amount of space on /tmp needs to be calculated in order to have enough space for compression. 54 | 55 | Setting the limit to 1GB (in bytes): 56 | ``` 57 | occ config:app:set files_zip max_compress_size --value=1073741824 58 | ``` 59 | 60 | The default value is unlimited (-1). 61 | -------------------------------------------------------------------------------- /REUSE.toml: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors 2 | # SPDX-License-Identifier: AGPL-3.0-or-later 3 | version = 1 4 | SPDX-PackageName = "files_zip" 5 | SPDX-PackageSupplier = "Nextcloud " 6 | SPDX-PackageDownloadLocation = "https://github.com/nextcloud/files_zip" 7 | 8 | [[annotations]] 9 | path = [".gitattributes", ".github/CODEOWNERS", ".editorconfig", "package-lock.json", "package.json", "composer.json", "composer.lock", "**/composer.json", "**/composer.lock", ".l10nignore", "cypress/tsconfig.json", "vendor-bin/**/composer.json", "vendor-bin/**/composer.lock", ".tx/config", "tsconfig.json", "js/vendor.LICENSE.txt", "krankerl.toml", ".npmignore", ".eslintrc.json", ".tx/backport"] 10 | precedence = "aggregate" 11 | SPDX-FileCopyrightText = "none" 12 | SPDX-License-Identifier = "CC0-1.0" 13 | 14 | [[annotations]] 15 | path = ["l10n/**.js", "l10n/**.json"] 16 | precedence = "aggregate" 17 | SPDX-FileCopyrightText = "2021 Nextcloud contributors" 18 | SPDX-License-Identifier = "AGPL-3.0-or-later" 19 | 20 | [[annotations]] 21 | path = ["js/**.js.map", "js/**.js", "js/**.mjs", "js/**.mjs.map", "js/templates/**.handlebars", "emptyTemplates/**", "vendor/autoload.php", "tests/data/**"] 22 | precedence = "aggregate" 23 | SPDX-FileCopyrightText = "2021 Nextcloud GmbH and Nextcloud contributors" 24 | SPDX-License-Identifier = "AGPL-3.0-or-later" 25 | 26 | [[annotations]] 27 | path = ["img/files_zip-dark.svg", "img/files_zip.svg", "img/zip-box-outline.svg"] 28 | precedence = "aggregate" 29 | SPDX-FileCopyrightText = "Michael Irigoyen" 30 | SPDX-License-Identifier = "Apache-2.0" 31 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | files_zip 8 | Zipper 9 | Zip files in your Nextcloud 10 | Allow zipping files directly in your Nextcloud! 11 | 2.2.0-dev.0 12 | agpl 13 | Roeland Jago Douma 14 | Julius Haertl 15 | FilesZip 16 | tools 17 | https://github.com/nextcloud/files_zip 18 | https://github.com/nextcloud/files_zip/issues 19 | https://github.com/nextcloud/files_zip.git 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | [ 10 | [ 11 | 'name' => 'Zip#zip', 12 | 'url' => '/api/v1/zip', 13 | 'verb' => 'POST', 14 | ], 15 | ], 16 | ]; 17 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "phpunit/phpunit": "^9", 4 | "nextcloud/coding-standard": "^1.0.0", 5 | "nextcloud/ocp": "^27.1" 6 | }, 7 | "scripts": { 8 | "test": "phpunit -c tests/phpunit.xml", 9 | "lint": "find . -name \\*.php -not -path './vendor/*' -not -path './build/*' -print0 | xargs -0 -n1 php -l", 10 | "cs:check": "php-cs-fixer fix --dry-run --diff", 11 | "cs:fix": "php-cs-fixer fix", 12 | "test:unit": "vendor/bin/phpunit -c tests/phpunit.xml" 13 | }, 14 | "config": { 15 | "platform": { 16 | "php": "7.4" 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /img/files_zip-dark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/files_zip.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/zip-box-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /krankerl.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | before_cmds = [ 3 | "npm install", 4 | "npm run build", 5 | ] 6 | -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/files_zip/d0365fffcbf134daae95554b31952ff0ad45afdb/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/af.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Argief" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/af.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Argief" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/ar.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "ضاغط Zipper", 5 | "A Zip archive {target} will be created." : "أرشيف ZIP ـ {target} سيتم إنشاؤه ", 6 | "Your files have been stored as a Zip archive in {path}." : "ملفاتك محفوظة في شكل أرشيف Zip في {path}.", 7 | "Creating the Zip file {path} failed." : "فشل في إنشاء ملف الأرشيف Zip ـ {path}.", 8 | "Zip files in your Nextcloud" : "ملفات أرشيف Zip على نكست كلاود", 9 | "Allow zipping files directly in your Nextcloud!" : "السماح بضغط الملفات مُباشرةً على نكست كلاود!", 10 | "Compress files" : "ضغط الملفات", 11 | "Compress" : "إضغَط", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "سيتم ضغط الملف في الخلفية. بمجرد الانتهاء، ستتلقى إشعاراً وسيكون الملف موجوداً في المجلد الحالي", 13 | "Archive file name" : "إسم ملف الأرشيف", 14 | "_Compress %n file_::_Compress %n files_" : ["إضغَط %n ملف","إضغَط%n ملف","إضغَط %n ملف","إضغَط %n ملفات","إضغَط %n ملف","إضغَط %n ملف"], 15 | "Compress to Zip" : "الضغط إلى Zip", 16 | "Archive" : "الأرشيف", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "بدأ تكوين الأرشيف المضغوط. سيتم إعلامك بمجرد انتهاء العملية.", 18 | "An error happened when trying to compress the file." : "حدث خطأٌ أثناء محاولة ضغط الملف.", 19 | "Only files up to {maxSize} can be compressed." : "يُمكن ضغط ملفات بحجم أقصى {maxSize}." 20 | }, 21 | "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;"); 22 | -------------------------------------------------------------------------------- /l10n/ar.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "ضاغط Zipper", 3 | "A Zip archive {target} will be created." : "أرشيف ZIP ـ {target} سيتم إنشاؤه ", 4 | "Your files have been stored as a Zip archive in {path}." : "ملفاتك محفوظة في شكل أرشيف Zip في {path}.", 5 | "Creating the Zip file {path} failed." : "فشل في إنشاء ملف الأرشيف Zip ـ {path}.", 6 | "Zip files in your Nextcloud" : "ملفات أرشيف Zip على نكست كلاود", 7 | "Allow zipping files directly in your Nextcloud!" : "السماح بضغط الملفات مُباشرةً على نكست كلاود!", 8 | "Compress files" : "ضغط الملفات", 9 | "Compress" : "إضغَط", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "سيتم ضغط الملف في الخلفية. بمجرد الانتهاء، ستتلقى إشعاراً وسيكون الملف موجوداً في المجلد الحالي", 11 | "Archive file name" : "إسم ملف الأرشيف", 12 | "_Compress %n file_::_Compress %n files_" : ["إضغَط %n ملف","إضغَط%n ملف","إضغَط %n ملف","إضغَط %n ملفات","إضغَط %n ملف","إضغَط %n ملف"], 13 | "Compress to Zip" : "الضغط إلى Zip", 14 | "Archive" : "الأرشيف", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "بدأ تكوين الأرشيف المضغوط. سيتم إعلامك بمجرد انتهاء العملية.", 16 | "An error happened when trying to compress the file." : "حدث خطأٌ أثناء محاولة ضغط الملف.", 17 | "Only files up to {maxSize} can be compressed." : "يُمكن ضغط ملفات بحجم أقصى {maxSize}." 18 | },"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;" 19 | } -------------------------------------------------------------------------------- /l10n/ast.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/ast.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/az.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arxiv" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/az.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arxiv" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/bg.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Ще бъде създаден Zip архив на {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Вашите файлове са съхранени като Zip архив в {path}.", 7 | "Creating the Zip file {path} failed." : "Създаването на Zip файл {path} не беше успешно.", 8 | "Zip files in your Nextcloud" : "Zip файлове във вашия Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Позволете компресирането на файлове директно във вашият Nextcloud!", 10 | "Compress files" : "Компресиране на файлове", 11 | "Compress to Zip" : "Компресиране в Zip", 12 | "Archive" : "Архив", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Започна създаването на Zip архив. Ще ви уведомим веднага, щом архивът бъде наличен.", 14 | "An error happened when trying to compress the file." : "Възникна грешка при опит за компресиране на файла.", 15 | "Only files up to {maxSize} can be compressed." : "Могат да бъдат компресирани само файлове с големина до {maxSize} ." 16 | }, 17 | "nplurals=2; plural=(n != 1);"); 18 | -------------------------------------------------------------------------------- /l10n/bg.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Ще бъде създаден Zip архив на {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Вашите файлове са съхранени като Zip архив в {path}.", 5 | "Creating the Zip file {path} failed." : "Създаването на Zip файл {path} не беше успешно.", 6 | "Zip files in your Nextcloud" : "Zip файлове във вашия Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Позволете компресирането на файлове директно във вашият Nextcloud!", 8 | "Compress files" : "Компресиране на файлове", 9 | "Compress to Zip" : "Компресиране в Zip", 10 | "Archive" : "Архив", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Започна създаването на Zip архив. Ще ви уведомим веднага, щом архивът бъде наличен.", 12 | "An error happened when trying to compress the file." : "Възникна грешка при опит за компресиране на файла.", 13 | "Only files up to {maxSize} can be compressed." : "Могат да бъдат компресирани само файлове с големина до {maxSize} ." 14 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 15 | } -------------------------------------------------------------------------------- /l10n/ca.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Compressor ZIP", 5 | "A Zip archive {target} will be created." : "Es crearà un arxiu ZIP {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Els fitxers s'han emmagatzemat en l'arxiu ZIP {path}.", 7 | "Creating the Zip file {path} failed." : "No s'ha pogut crear l'arxiu ZIP {path}.", 8 | "Zip files in your Nextcloud" : "Comprimiu fitxers en el Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Permetre comprimir fitxers directament en el Nextcloud!", 10 | "Compress files" : "Comprimeix els fitxers", 11 | "Compress" : "Comprimeix", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "El fitxer es comprimirà en segon terme. Quan hagi acabat, rebreu una notificació i trobareu el fitxer en la carpeta actual.", 13 | "Archive file name" : "Nom de l'arxiu", 14 | "_Compress %n file_::_Compress %n files_" : ["Comprimeix %n fitxer","Comprimeix %n fitxers"], 15 | "Compress to Zip" : "Comprimeix a un arxiu ZIP", 16 | "Archive" : "Arxiu", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "S'ha iniciat la creació de l'arxiu ZIP. Rebreu una notificació quan l'arxiu estigui disponible.", 18 | "An error happened when trying to compress the file." : "S'ha produït un error en intentar comprimir el fitxer.", 19 | "Only files up to {maxSize} can be compressed." : "Només es poden comprimir fitxers de fins a {maxSize}." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/ca.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Compressor ZIP", 3 | "A Zip archive {target} will be created." : "Es crearà un arxiu ZIP {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Els fitxers s'han emmagatzemat en l'arxiu ZIP {path}.", 5 | "Creating the Zip file {path} failed." : "No s'ha pogut crear l'arxiu ZIP {path}.", 6 | "Zip files in your Nextcloud" : "Comprimiu fitxers en el Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Permetre comprimir fitxers directament en el Nextcloud!", 8 | "Compress files" : "Comprimeix els fitxers", 9 | "Compress" : "Comprimeix", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "El fitxer es comprimirà en segon terme. Quan hagi acabat, rebreu una notificació i trobareu el fitxer en la carpeta actual.", 11 | "Archive file name" : "Nom de l'arxiu", 12 | "_Compress %n file_::_Compress %n files_" : ["Comprimeix %n fitxer","Comprimeix %n fitxers"], 13 | "Compress to Zip" : "Comprimeix a un arxiu ZIP", 14 | "Archive" : "Arxiu", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "S'ha iniciat la creació de l'arxiu ZIP. Rebreu una notificació quan l'arxiu estigui disponible.", 16 | "An error happened when trying to compress the file." : "S'ha produït un error en intentar comprimir el fitxer.", 17 | "Only files up to {maxSize} can be compressed." : "Només es poden comprimir fitxers de fins a {maxSize}." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/cs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Bude vytvořen Zip archiv {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Vaše soubory byly uloženy jako Zip archiv v {path}.", 7 | "Creating the Zip file {path} failed." : "Vytváření Zip souboru {path} se nezdařilo.", 8 | "Zip files in your Nextcloud" : "Zip soubory v rámci Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Umožňuje komprimování souborů do zip archivů přímo v rámci Nextcloud!", 10 | "Compress files" : "Zkomprimovat soubory", 11 | "Compress" : "Zkomprimovat", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Soubor bude zkomprimován na pozadí. Jakmile bude dokončeno, obdržíte upozornění a soubor se bude nacházet ve stávající složce.", 13 | "Archive file name" : "Název souboru s archivem", 14 | "_Compress %n file_::_Compress %n files_" : ["Zkomprimovat %n soubor","Zkomprimovat %n soubory","Zkomprimovat %n souborů","Zkomprimovat %n soubory"], 15 | "Compress to Zip" : "Zkomprimovat do Zip", 16 | "Archive" : "Archiv", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Vytváření Zip archivu zahájeno. Jakmile bude archiv k dispozici, budete upozorněni.", 18 | "An error happened when trying to compress the file." : "Došlo k chybě při pokusu o zkomprimování souboru.", 19 | "Only files up to {maxSize} can be compressed." : "Komprimovat soubory je možné pouze do velikosti {maxSize}." 20 | }, 21 | "nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); 22 | -------------------------------------------------------------------------------- /l10n/cs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Bude vytvořen Zip archiv {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Vaše soubory byly uloženy jako Zip archiv v {path}.", 5 | "Creating the Zip file {path} failed." : "Vytváření Zip souboru {path} se nezdařilo.", 6 | "Zip files in your Nextcloud" : "Zip soubory v rámci Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Umožňuje komprimování souborů do zip archivů přímo v rámci Nextcloud!", 8 | "Compress files" : "Zkomprimovat soubory", 9 | "Compress" : "Zkomprimovat", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Soubor bude zkomprimován na pozadí. Jakmile bude dokončeno, obdržíte upozornění a soubor se bude nacházet ve stávající složce.", 11 | "Archive file name" : "Název souboru s archivem", 12 | "_Compress %n file_::_Compress %n files_" : ["Zkomprimovat %n soubor","Zkomprimovat %n soubory","Zkomprimovat %n souborů","Zkomprimovat %n soubory"], 13 | "Compress to Zip" : "Zkomprimovat do Zip", 14 | "Archive" : "Archiv", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Vytváření Zip archivu zahájeno. Jakmile bude archiv k dispozici, budete upozorněni.", 16 | "An error happened when trying to compress the file." : "Došlo k chybě při pokusu o zkomprimování souboru.", 17 | "Only files up to {maxSize} can be compressed." : "Komprimovat soubory je možné pouze do velikosti {maxSize}." 18 | },"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" 19 | } -------------------------------------------------------------------------------- /l10n/cy_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archif" 5 | }, 6 | "nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;"); 7 | -------------------------------------------------------------------------------- /l10n/cy_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archif" 3 | },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" 4 | } -------------------------------------------------------------------------------- /l10n/da.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Et Zip-arkiv {target} vil blive oprettet.", 6 | "Your files have been stored as a Zip archive in {path}." : "Dine filer er blevet gemt som et zip-arkiv i {path}.", 7 | "Creating the Zip file {path} failed." : "Oprettelse af zip-filen {path} mislykkedes.", 8 | "Zip files in your Nextcloud" : "Zip filer i din Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Tillad zipning af filer direkte i din Nextcloud!", 10 | "Compress files" : "Komprimer filer", 11 | "Compress" : "Komprimer", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen vil blive komprimeret i baggrunden. Når processen er færdig modtager du en notifikation og filen er placeret i det nuværende bibliotek.", 13 | "Archive file name" : "Arkiv filnavn", 14 | "Compress to Zip" : "Komprimer til Zip", 15 | "Archive" : "Arkiver", 16 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Oprettelse af Zip-arkiv startede. Vi giver dig besked, så snart arkivet er tilgængeligt.", 17 | "An error happened when trying to compress the file." : "Der opstod en fejl under forsøget på at komprimere filen.", 18 | "Only files up to {maxSize} can be compressed." : "Kun filer op til {maxSize} kan komprimeres." 19 | }, 20 | "nplurals=2; plural=(n != 1);"); 21 | -------------------------------------------------------------------------------- /l10n/da.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Et Zip-arkiv {target} vil blive oprettet.", 4 | "Your files have been stored as a Zip archive in {path}." : "Dine filer er blevet gemt som et zip-arkiv i {path}.", 5 | "Creating the Zip file {path} failed." : "Oprettelse af zip-filen {path} mislykkedes.", 6 | "Zip files in your Nextcloud" : "Zip filer i din Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Tillad zipning af filer direkte i din Nextcloud!", 8 | "Compress files" : "Komprimer filer", 9 | "Compress" : "Komprimer", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen vil blive komprimeret i baggrunden. Når processen er færdig modtager du en notifikation og filen er placeret i det nuværende bibliotek.", 11 | "Archive file name" : "Arkiv filnavn", 12 | "Compress to Zip" : "Komprimer til Zip", 13 | "Archive" : "Arkiver", 14 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Oprettelse af Zip-arkiv startede. Vi giver dig besked, så snart arkivet er tilgængeligt.", 15 | "An error happened when trying to compress the file." : "Der opstod en fejl under forsøget på at komprimere filen.", 16 | "Only files up to {maxSize} can be compressed." : "Kun filer op til {maxSize} kan komprimeres." 17 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 18 | } -------------------------------------------------------------------------------- /l10n/de.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Ein Zip-Archiv {target} wird erstellt", 6 | "Your files have been stored as a Zip archive in {path}." : "Deine Dateien wurden als Zip-Archiv in {path} gespeichert", 7 | "Creating the Zip file {path} failed." : "Erstellen der Zip-Datei {path} fehlgeschlagen", 8 | "Zip files in your Nextcloud" : "Zip-Dateien in deiner Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Erlaubt das Zippen von Dateien direkt in deiner Nextcloud", 10 | "Compress files" : "Dateien komprimieren", 11 | "Compress" : "Komprimieren", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Die Datei wird im Hintergrund komprimiert. Sobald der Vorgang abgeschlossen ist, erhältst du eine Benachrichtigung und die Datei befindet sich im aktuellen Verzeichnis.", 13 | "Archive file name" : "Archiv-Dateiname", 14 | "_Compress %n file_::_Compress %n files_" : ["%n Datei komprimieren","%n Dateien komprimieren"], 15 | "Compress to Zip" : "Als Zip komprimieren", 16 | "Archive" : "Archiv", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Das Zip-Archiv wird erstellt. Du wirst benachrichtigt, sobald das Archiv verfügbar ist.", 18 | "An error happened when trying to compress the file." : "Es ist ein Fehler beim Versuch aufgetreten, die Datei zu komprimieren.", 19 | "Only files up to {maxSize} can be compressed." : "Nur Dateien bis zu {maxSize} können komprimiert werden." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/de.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Ein Zip-Archiv {target} wird erstellt", 4 | "Your files have been stored as a Zip archive in {path}." : "Deine Dateien wurden als Zip-Archiv in {path} gespeichert", 5 | "Creating the Zip file {path} failed." : "Erstellen der Zip-Datei {path} fehlgeschlagen", 6 | "Zip files in your Nextcloud" : "Zip-Dateien in deiner Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Erlaubt das Zippen von Dateien direkt in deiner Nextcloud", 8 | "Compress files" : "Dateien komprimieren", 9 | "Compress" : "Komprimieren", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Die Datei wird im Hintergrund komprimiert. Sobald der Vorgang abgeschlossen ist, erhältst du eine Benachrichtigung und die Datei befindet sich im aktuellen Verzeichnis.", 11 | "Archive file name" : "Archiv-Dateiname", 12 | "_Compress %n file_::_Compress %n files_" : ["%n Datei komprimieren","%n Dateien komprimieren"], 13 | "Compress to Zip" : "Als Zip komprimieren", 14 | "Archive" : "Archiv", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Das Zip-Archiv wird erstellt. Du wirst benachrichtigt, sobald das Archiv verfügbar ist.", 16 | "An error happened when trying to compress the file." : "Es ist ein Fehler beim Versuch aufgetreten, die Datei zu komprimieren.", 17 | "Only files up to {maxSize} can be compressed." : "Nur Dateien bis zu {maxSize} können komprimiert werden." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/de_DE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Ein Zip-Archiv {target} wird erstellt.", 6 | "Your files have been stored as a Zip archive in {path}." : "Ihre Dateien wurden als Zip-Archiv in {path} gespeichert.", 7 | "Creating the Zip file {path} failed." : "Erstellen der Zip-Datei {path} fehlgeschlagen.", 8 | "Zip files in your Nextcloud" : "Zip-Dateien in ihrer Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Erlaubt das Zippen von Dateien direkt in Ihrer Nextcloud!", 10 | "Compress files" : "Dateien komprimieren", 11 | "Compress" : "Komprimieren", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Die Datei wird im Hintergrund komprimiert. Sobald der Vorgang abgeschlossen ist, erhalten Sie eine Benachrichtigung und die Datei befindet sich im aktuellen Verzeichnis.", 13 | "Archive file name" : "Archiv-Dateiname", 14 | "_Compress %n file_::_Compress %n files_" : ["%n Datei komprimieren","%n Dateien komprimieren"], 15 | "Compress to Zip" : "Als Zip komprimieren", 16 | "Archive" : "Archiv", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Das Zip-Archiv wird erstellt. Sie werden benachrichtigt, sobald das Archiv verfügbar ist.", 18 | "An error happened when trying to compress the file." : "Es ist ein Fehler beim Versuch aufgetreten, die Datei zu komprimieren.", 19 | "Only files up to {maxSize} can be compressed." : "Nur Dateien bis zu {maxSize} können komprimiert werden." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/de_DE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Ein Zip-Archiv {target} wird erstellt.", 4 | "Your files have been stored as a Zip archive in {path}." : "Ihre Dateien wurden als Zip-Archiv in {path} gespeichert.", 5 | "Creating the Zip file {path} failed." : "Erstellen der Zip-Datei {path} fehlgeschlagen.", 6 | "Zip files in your Nextcloud" : "Zip-Dateien in ihrer Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Erlaubt das Zippen von Dateien direkt in Ihrer Nextcloud!", 8 | "Compress files" : "Dateien komprimieren", 9 | "Compress" : "Komprimieren", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Die Datei wird im Hintergrund komprimiert. Sobald der Vorgang abgeschlossen ist, erhalten Sie eine Benachrichtigung und die Datei befindet sich im aktuellen Verzeichnis.", 11 | "Archive file name" : "Archiv-Dateiname", 12 | "_Compress %n file_::_Compress %n files_" : ["%n Datei komprimieren","%n Dateien komprimieren"], 13 | "Compress to Zip" : "Als Zip komprimieren", 14 | "Archive" : "Archiv", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Das Zip-Archiv wird erstellt. Sie werden benachrichtigt, sobald das Archiv verfügbar ist.", 16 | "An error happened when trying to compress the file." : "Es ist ein Fehler beim Versuch aufgetreten, die Datei zu komprimieren.", 17 | "Only files up to {maxSize} can be compressed." : "Nur Dateien bis zu {maxSize} können komprimiert werden." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/el.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Το συμπιεσμένο αρχείο {target} Zip θα δημιουργηθεί. ", 6 | "Your files have been stored as a Zip archive in {path}." : "Τα αρχεία σας έχουν αποθηκευτεί ως αρχείο Zip στο {path}.", 7 | "Creating the Zip file {path} failed." : "Η δημιουργία του αρχείου Zip {path} απέτυχε.", 8 | "Zip files in your Nextcloud" : "Αρχεία Zip στο Nextcloud σας", 9 | "Allow zipping files directly in your Nextcloud!" : "Επιτρέψτε τη συμπίεση αρχείων στο Nextcloud σας!", 10 | "Compress files" : "Συμπίεση αρχείων", 11 | "Compress to Zip" : "Συμπίεση σε Zip", 12 | "Archive" : "Αρχειοθέτηση", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Η δημιουργία του αρχείου Zip ξεκίνησε. Θα σας ειδοποιήσουμε μόλις το αρχείο είναι διαθέσιμο.", 14 | "An error happened when trying to compress the file." : "Παρουσιάστηκε σφάλμα κατά τη συμπίεση του αρχείου." 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/el.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Το συμπιεσμένο αρχείο {target} Zip θα δημιουργηθεί. ", 4 | "Your files have been stored as a Zip archive in {path}." : "Τα αρχεία σας έχουν αποθηκευτεί ως αρχείο Zip στο {path}.", 5 | "Creating the Zip file {path} failed." : "Η δημιουργία του αρχείου Zip {path} απέτυχε.", 6 | "Zip files in your Nextcloud" : "Αρχεία Zip στο Nextcloud σας", 7 | "Allow zipping files directly in your Nextcloud!" : "Επιτρέψτε τη συμπίεση αρχείων στο Nextcloud σας!", 8 | "Compress files" : "Συμπίεση αρχείων", 9 | "Compress to Zip" : "Συμπίεση σε Zip", 10 | "Archive" : "Αρχειοθέτηση", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Η δημιουργία του αρχείου Zip ξεκίνησε. Θα σας ειδοποιήσουμε μόλις το αρχείο είναι διαθέσιμο.", 12 | "An error happened when trying to compress the file." : "Παρουσιάστηκε σφάλμα κατά τη συμπίεση του αρχείου." 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/en_GB.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "A Zip archive {target} will be created.", 6 | "Your files have been stored as a Zip archive in {path}." : "Your files have been stored as a Zip archive in {path}.", 7 | "Creating the Zip file {path} failed." : "Creating the Zip file {path} failed.", 8 | "Zip files in your Nextcloud" : "Zip files in your Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Allow zipping files directly in your Nextcloud!", 10 | "Compress files" : "Compress files", 11 | "Compress" : "Compress", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory.", 13 | "Archive file name" : "Archive file name", 14 | "_Compress %n file_::_Compress %n files_" : ["Compress %n file","Compress %n files"], 15 | "Compress to Zip" : "Compress to Zip", 16 | "Archive" : "Archive", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creating Zip archive started. We will notify you as soon as the archive is available.", 18 | "An error happened when trying to compress the file." : "An error happened when trying to compress the file.", 19 | "Only files up to {maxSize} can be compressed." : "Only files up to {maxSize} can be compressed." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/en_GB.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "A Zip archive {target} will be created.", 4 | "Your files have been stored as a Zip archive in {path}." : "Your files have been stored as a Zip archive in {path}.", 5 | "Creating the Zip file {path} failed." : "Creating the Zip file {path} failed.", 6 | "Zip files in your Nextcloud" : "Zip files in your Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Allow zipping files directly in your Nextcloud!", 8 | "Compress files" : "Compress files", 9 | "Compress" : "Compress", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory.", 11 | "Archive file name" : "Archive file name", 12 | "_Compress %n file_::_Compress %n files_" : ["Compress %n file","Compress %n files"], 13 | "Compress to Zip" : "Compress to Zip", 14 | "Archive" : "Archive", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creating Zip archive started. We will notify you as soon as the archive is available.", 16 | "An error happened when trying to compress the file." : "An error happened when trying to compress the file.", 17 | "Only files up to {maxSize} can be compressed." : "Only files up to {maxSize} can be compressed." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/eo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arĥivujo" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/eo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arĥivujo" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/es.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Se creará el archivo Zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Sus archivos han sido guardados como un archivador Zip en {path}.", 7 | "Creating the Zip file {path} failed." : "Error al crear el archivo Zip {path}.", 8 | "Zip files in your Nextcloud" : "Archivos Zip en su Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "¡Permite comprimir archivos directamente en su Nextcloud!", 10 | "Compress files" : "Comprimir archivos", 11 | "Compress" : "Comprimir", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "El archivo será comprimido en segundo plano. Una vez finalizado, recibirás una notificación y el archivo se encuentra en el directorio actual.", 13 | "Archive file name" : "Nombre de archivo del archivador", 14 | "_Compress %n file_::_Compress %n files_" : ["Comprimir %n archivo","Comprimir %n archivos","Comprimir %n archivos"], 15 | "Compress to Zip" : "Comprimir a Zip", 16 | "Archive" : "Archivador", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Se inició creación de archivador Zip. Le notificaremos tan pronto como el archivador esté disponible.", 18 | "An error happened when trying to compress the file." : "Ha ocurrido un error al intentar comprimir el archivo.", 19 | "Only files up to {maxSize} can be compressed." : "Solo se pueden comprimir archivos de hasta {maxSize}" 20 | }, 21 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/es.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Se creará el archivo Zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Sus archivos han sido guardados como un archivador Zip en {path}.", 5 | "Creating the Zip file {path} failed." : "Error al crear el archivo Zip {path}.", 6 | "Zip files in your Nextcloud" : "Archivos Zip en su Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "¡Permite comprimir archivos directamente en su Nextcloud!", 8 | "Compress files" : "Comprimir archivos", 9 | "Compress" : "Comprimir", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "El archivo será comprimido en segundo plano. Una vez finalizado, recibirás una notificación y el archivo se encuentra en el directorio actual.", 11 | "Archive file name" : "Nombre de archivo del archivador", 12 | "_Compress %n file_::_Compress %n files_" : ["Comprimir %n archivo","Comprimir %n archivos","Comprimir %n archivos"], 13 | "Compress to Zip" : "Comprimir a Zip", 14 | "Archive" : "Archivador", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Se inició creación de archivador Zip. Le notificaremos tan pronto como el archivador esté disponible.", 16 | "An error happened when trying to compress the file." : "Ha ocurrido un error al intentar comprimir el archivo.", 17 | "Only files up to {maxSize} can be compressed." : "Solo se pueden comprimir archivos de hasta {maxSize}" 18 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/es_419.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_419.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_AR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_AR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CL.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CL.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_CR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_CR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_DO.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_DO.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_EC.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Compresor", 5 | "A Zip archive {target} will be created." : "Se creará un archivo Zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Tus archivos se han almacenado como un archivo Zip en {path}.", 7 | "Creating the Zip file {path} failed." : "La creación del archivo Zip {path} ha fallado.", 8 | "Zip files in your Nextcloud" : "Archivos Zip en tu Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "¡Permite comprimir archivos directamente en tu Nextcloud!", 10 | "Compress files" : "Comprimir archivos", 11 | "Compress to Zip" : "Comprimir a Zip", 12 | "Archive" : "Archivar", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Se ha iniciado la creación del archivo Zip. Te notificaremos en cuanto esté disponible el archivo.", 14 | "An error happened when trying to compress the file." : "Ha ocurrido un error al intentar comprimir el archivo.", 15 | "Only files up to {maxSize} can be compressed." : "Solo se pueden comprimir archivos de hasta {maxSize}." 16 | }, 17 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 18 | -------------------------------------------------------------------------------- /l10n/es_EC.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Compresor", 3 | "A Zip archive {target} will be created." : "Se creará un archivo Zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Tus archivos se han almacenado como un archivo Zip en {path}.", 5 | "Creating the Zip file {path} failed." : "La creación del archivo Zip {path} ha fallado.", 6 | "Zip files in your Nextcloud" : "Archivos Zip en tu Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "¡Permite comprimir archivos directamente en tu Nextcloud!", 8 | "Compress files" : "Comprimir archivos", 9 | "Compress to Zip" : "Comprimir a Zip", 10 | "Archive" : "Archivar", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Se ha iniciado la creación del archivo Zip. Te notificaremos en cuanto esté disponible el archivo.", 12 | "An error happened when trying to compress the file." : "Ha ocurrido un error al intentar comprimir el archivo.", 13 | "Only files up to {maxSize} can be compressed." : "Solo se pueden comprimir archivos de hasta {maxSize}." 14 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 15 | } -------------------------------------------------------------------------------- /l10n/es_GT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_GT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_HN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_HN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_MX.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Compress files" : "Comprimir archivos", 5 | "Archive" : "Archivar" 6 | }, 7 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 8 | -------------------------------------------------------------------------------- /l10n/es_MX.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Compress files" : "Comprimir archivos", 3 | "Archive" : "Archivar" 4 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 5 | } -------------------------------------------------------------------------------- /l10n/es_NI.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_NI.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PA.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PA.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_PY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_PY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_SV.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_SV.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/es_UY.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archivar" 5 | }, 6 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/es_UY.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archivar" 3 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/et_EE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Kokkupakkija", 5 | "A Zip archive {target} will be created." : "Järgmisena pakin kokku {target} zip-faili.", 6 | "Your files have been stored as a Zip archive in {path}." : "Sinu failid on nüüd olemas zip-failidena siin: {path}", 7 | "Creating the Zip file {path} failed." : "{path} zip-faili loomine ei õnnestunud.", 8 | "Zip files in your Nextcloud" : "Zip-failid sinu Nextcloudis", 9 | "Allow zipping files directly in your Nextcloud!" : "Zip-failide kokkupakkimine sinu Nextcloudis!", 10 | "Compress files" : "Paki failid kokku", 11 | "Compress" : "Paki kokku", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Fail on taustal kokkupakkimisel Kui see on tehtud, siis saad asjakohase teavituse ning leiad faili oma viimatikasutatud kaustast.", 13 | "Archive file name" : "Arhiivifaili nimi", 14 | "_Compress %n file_::_Compress %n files_" : ["Paki kokku %n fail","Paki kokku %n faili"], 15 | "Compress to Zip" : "Paki kokku zip-failiks", 16 | "Archive" : "Arhiveeri", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip-faili pakkimine algas. Me anname sulle teada, kui see tehtud on.", 18 | "An error happened when trying to compress the file." : "Faili kokkupakkimisel tekkis viga.", 19 | "Only files up to {maxSize} can be compressed." : "Kokku saad pakkida kuni {maxSize} suuri faile." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/et_EE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Kokkupakkija", 3 | "A Zip archive {target} will be created." : "Järgmisena pakin kokku {target} zip-faili.", 4 | "Your files have been stored as a Zip archive in {path}." : "Sinu failid on nüüd olemas zip-failidena siin: {path}", 5 | "Creating the Zip file {path} failed." : "{path} zip-faili loomine ei õnnestunud.", 6 | "Zip files in your Nextcloud" : "Zip-failid sinu Nextcloudis", 7 | "Allow zipping files directly in your Nextcloud!" : "Zip-failide kokkupakkimine sinu Nextcloudis!", 8 | "Compress files" : "Paki failid kokku", 9 | "Compress" : "Paki kokku", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Fail on taustal kokkupakkimisel Kui see on tehtud, siis saad asjakohase teavituse ning leiad faili oma viimatikasutatud kaustast.", 11 | "Archive file name" : "Arhiivifaili nimi", 12 | "_Compress %n file_::_Compress %n files_" : ["Paki kokku %n fail","Paki kokku %n faili"], 13 | "Compress to Zip" : "Paki kokku zip-failiks", 14 | "Archive" : "Arhiveeri", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip-faili pakkimine algas. Me anname sulle teada, kui see tehtud on.", 16 | "An error happened when trying to compress the file." : "Faili kokkupakkimisel tekkis viga.", 17 | "Only files up to {maxSize} can be compressed." : "Kokku saad pakkida kuni {maxSize} suuri faile." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/eu.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Zip artxibo bat {target} sortuko da.", 6 | "Your files have been stored as a Zip archive in {path}." : "Zure fitxategiak Zip artxibo gisa gorde dira {path}-en.", 7 | "Creating the Zip file {path} failed." : "Ezin izan da sortu {path} zip fitxategia.", 8 | "Zip files in your Nextcloud" : "Zip fitxategiak zure Nextcloudean", 9 | "Allow zipping files directly in your Nextcloud!" : "Baimendu fitxategiak zuzenean konprimitzea zure Nextcloud-en!", 10 | "Compress files" : "Fitxategiak konprimitu", 11 | "Compress" : "Konprimatu", 12 | "Compress to Zip" : "Konprimitu Zip-era", 13 | "Archive" : "Artxibatu", 14 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip artxiboa sortzen hasi da. Artxiboa eskuragarri egon bezain laster jakinaraziko dizugu.", 15 | "An error happened when trying to compress the file." : "Errore bat gertatu da fitxategia konprimitzen saiatzean.", 16 | "Only files up to {maxSize} can be compressed." : "{maxSize} arterako fitxategiak konprimatu daitezke." 17 | }, 18 | "nplurals=2; plural=(n != 1);"); 19 | -------------------------------------------------------------------------------- /l10n/eu.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Zip artxibo bat {target} sortuko da.", 4 | "Your files have been stored as a Zip archive in {path}." : "Zure fitxategiak Zip artxibo gisa gorde dira {path}-en.", 5 | "Creating the Zip file {path} failed." : "Ezin izan da sortu {path} zip fitxategia.", 6 | "Zip files in your Nextcloud" : "Zip fitxategiak zure Nextcloudean", 7 | "Allow zipping files directly in your Nextcloud!" : "Baimendu fitxategiak zuzenean konprimitzea zure Nextcloud-en!", 8 | "Compress files" : "Fitxategiak konprimitu", 9 | "Compress" : "Konprimatu", 10 | "Compress to Zip" : "Konprimitu Zip-era", 11 | "Archive" : "Artxibatu", 12 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip artxiboa sortzen hasi da. Artxiboa eskuragarri egon bezain laster jakinaraziko dizugu.", 13 | "An error happened when trying to compress the file." : "Errore bat gertatu da fitxategia konprimitzen saiatzean.", 14 | "Only files up to {maxSize} can be compressed." : "{maxSize} arterako fitxategiak konprimatu daitezke." 15 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 16 | } -------------------------------------------------------------------------------- /l10n/fa.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "A Zip archive {target} will be created.", 6 | "Your files have been stored as a Zip archive in {path}." : "Your files have been stored as a Zip archive in {path}.", 7 | "Creating the Zip file {path} failed." : "Creating the Zip file {path} failed.", 8 | "Zip files in your Nextcloud" : "Zip files in your Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Allow zipping files directly in your Nextcloud!", 10 | "Compress files" : "Compress files", 11 | "Compress to Zip" : "Compress to Zip", 12 | "Archive" : "بایگانی", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creating Zip archive started. We will notify you as soon as the archive is available.", 14 | "An error happened when trying to compress the file." : "An error happened when trying to compress the file.", 15 | "Only files up to {maxSize} can be compressed." : "Only files up to {maxSize} can be compressed." 16 | }, 17 | "nplurals=2; plural=(n > 1);"); 18 | -------------------------------------------------------------------------------- /l10n/fa.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "A Zip archive {target} will be created.", 4 | "Your files have been stored as a Zip archive in {path}." : "Your files have been stored as a Zip archive in {path}.", 5 | "Creating the Zip file {path} failed." : "Creating the Zip file {path} failed.", 6 | "Zip files in your Nextcloud" : "Zip files in your Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Allow zipping files directly in your Nextcloud!", 8 | "Compress files" : "Compress files", 9 | "Compress to Zip" : "Compress to Zip", 10 | "Archive" : "بایگانی", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creating Zip archive started. We will notify you as soon as the archive is available.", 12 | "An error happened when trying to compress the file." : "An error happened when trying to compress the file.", 13 | "Only files up to {maxSize} can be compressed." : "Only files up to {maxSize} can be compressed." 14 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 15 | } -------------------------------------------------------------------------------- /l10n/fi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Zip-arkisto {target} luodaan.", 6 | "Your files have been stored as a Zip archive in {path}." : "Tiedostosi on talletettu Zip-arkistoon {path}.", 7 | "Creating the Zip file {path} failed." : "Zip-tiedoston {path} luominen epäonnistui.", 8 | "Zip files in your Nextcloud" : "Zip-tiedostot Nextcloudissasi", 9 | "Allow zipping files directly in your Nextcloud!" : "Mahdollista tiedostojen Zip-pakkaaminen suoraan Nextcloudissa!", 10 | "Compress files" : "Tiivistä tiedostot", 11 | "Compress" : "Tiivistä", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Tiedosto pakataan taustalla. Kun pakkaaminen valmistuu, saat ilmoituksen, ja tiedosto sijaitsee nykyisessä kansiossa.", 13 | "Archive file name" : "Arkistotiedoston nimi", 14 | "_Compress %n file_::_Compress %n files_" : ["Tiivistä %n tiedosto","Tiivistä %n tiedostoa"], 15 | "Compress to Zip" : "Pakkaa Zip-muotoon", 16 | "Archive" : "Arkisto", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip-arkiston luominen käynnistyi. Ilmoitamme sinulle, kun arkisto on saatavilla.", 18 | "An error happened when trying to compress the file." : "Tiedostoa tiivistäessä tapahtui virhe.", 19 | "Only files up to {maxSize} can be compressed." : "Vain tiedostot, joiden koko on enintään {maxSize}, on mahdollista tiivistää." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/fi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Zip-arkisto {target} luodaan.", 4 | "Your files have been stored as a Zip archive in {path}." : "Tiedostosi on talletettu Zip-arkistoon {path}.", 5 | "Creating the Zip file {path} failed." : "Zip-tiedoston {path} luominen epäonnistui.", 6 | "Zip files in your Nextcloud" : "Zip-tiedostot Nextcloudissasi", 7 | "Allow zipping files directly in your Nextcloud!" : "Mahdollista tiedostojen Zip-pakkaaminen suoraan Nextcloudissa!", 8 | "Compress files" : "Tiivistä tiedostot", 9 | "Compress" : "Tiivistä", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Tiedosto pakataan taustalla. Kun pakkaaminen valmistuu, saat ilmoituksen, ja tiedosto sijaitsee nykyisessä kansiossa.", 11 | "Archive file name" : "Arkistotiedoston nimi", 12 | "_Compress %n file_::_Compress %n files_" : ["Tiivistä %n tiedosto","Tiivistä %n tiedostoa"], 13 | "Compress to Zip" : "Pakkaa Zip-muotoon", 14 | "Archive" : "Arkisto", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip-arkiston luominen käynnistyi. Ilmoitamme sinulle, kun arkisto on saatavilla.", 16 | "An error happened when trying to compress the file." : "Tiedostoa tiivistäessä tapahtui virhe.", 17 | "Only files up to {maxSize} can be compressed." : "Vain tiedostot, joiden koko on enintään {maxSize}, on mahdollista tiivistää." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/fr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Compresseur Zip", 5 | "A Zip archive {target} will be created." : "Une archive Zip {target} va être créée.", 6 | "Your files have been stored as a Zip archive in {path}." : "Vos fichiers ont été enregistrés dans une archive Zip sous {path}.", 7 | "Creating the Zip file {path} failed." : "Échec de la création d'une archive Zip sous {path} .", 8 | "Zip files in your Nextcloud" : "Enregistrer des fichiers dans une archive Zip sur votre Nextcloud ", 9 | "Allow zipping files directly in your Nextcloud!" : "Permettre de zipper des fichiers directement dans votre Nextcloud !", 10 | "Compress files" : "Compresser les fichiers", 11 | "Compress" : "Compresser", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Le fichier sera compressé en arrière-plan. Une fois terminé, vous recevrez une notification et le fichier est situé dans le dossier courant.", 13 | "Archive file name" : "Nom du fichier d'archive", 14 | "_Compress %n file_::_Compress %n files_" : ["Compresser %n fichier","Compresser %n fichiers","Compresser %n fichiers"], 15 | "Compress to Zip" : "Compresser dans une archive Zip", 16 | "Archive" : "Archive", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "La création de l'archive Zip a commencé. Nous vous notifierons dès que l'archive sera disponible.", 18 | "An error happened when trying to compress the file." : "Une erreur est survenue lors de la compression du fichier.", 19 | "Only files up to {maxSize} can be compressed." : "Seuls les fichiers d'une taille maximale de {maxSize} peuvent être compressés." 20 | }, 21 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/fr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Compresseur Zip", 3 | "A Zip archive {target} will be created." : "Une archive Zip {target} va être créée.", 4 | "Your files have been stored as a Zip archive in {path}." : "Vos fichiers ont été enregistrés dans une archive Zip sous {path}.", 5 | "Creating the Zip file {path} failed." : "Échec de la création d'une archive Zip sous {path} .", 6 | "Zip files in your Nextcloud" : "Enregistrer des fichiers dans une archive Zip sur votre Nextcloud ", 7 | "Allow zipping files directly in your Nextcloud!" : "Permettre de zipper des fichiers directement dans votre Nextcloud !", 8 | "Compress files" : "Compresser les fichiers", 9 | "Compress" : "Compresser", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Le fichier sera compressé en arrière-plan. Une fois terminé, vous recevrez une notification et le fichier est situé dans le dossier courant.", 11 | "Archive file name" : "Nom du fichier d'archive", 12 | "_Compress %n file_::_Compress %n files_" : ["Compresser %n fichier","Compresser %n fichiers","Compresser %n fichiers"], 13 | "Compress to Zip" : "Compresser dans une archive Zip", 14 | "Archive" : "Archive", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "La création de l'archive Zip a commencé. Nous vous notifierons dès que l'archive sera disponible.", 16 | "An error happened when trying to compress the file." : "Une erreur est survenue lors de la compression du fichier.", 17 | "Only files up to {maxSize} can be compressed." : "Seuls les fichiers d'une taille maximale de {maxSize} peuvent être compressés." 18 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/ga.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Cruthófar cartlann Zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Stóráladh do chomhaid mar chartlann Zip in {path}.", 7 | "Creating the Zip file {path} failed." : "Theip ar chruthú an chomhaid Zip {path}.", 8 | "Zip files in your Nextcloud" : "Comhaid zip i do Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Ceadaigh comhaid zipping go díreach i do Nextcloud!", 10 | "Compress files" : "Comhaid comhbhrúite", 11 | "Compress" : "Comhbhrúigh", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Déanfar an comhad a chomhbhrú sa chúlra. Nuair a bheidh tú críochnaithe gheobhaidh tú fógra agus tá an comhad suite san eolaire reatha.", 13 | "Archive file name" : "Ainm comhaid cartlainne", 14 | "_Compress %n file_::_Compress %n files_" : ["Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad"], 15 | "Compress to Zip" : "Comhbhrúigh go Zip", 16 | "Archive" : "Cartlann", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Cuireadh tús le cartlann Zip a chruthú. Cuirfimid tú ar an eolas chomh luath agus a bheidh an chartlann ar fáil.", 18 | "An error happened when trying to compress the file." : "Tharla earráid agus iarracht á déanamh an comhad a chomhbhrú.", 19 | "Only files up to {maxSize} can be compressed." : "Ní féidir ach comhaid suas go dtí {maxSize} a chomhbhrú." 20 | }, 21 | "nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); 22 | -------------------------------------------------------------------------------- /l10n/ga.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Cruthófar cartlann Zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Stóráladh do chomhaid mar chartlann Zip in {path}.", 5 | "Creating the Zip file {path} failed." : "Theip ar chruthú an chomhaid Zip {path}.", 6 | "Zip files in your Nextcloud" : "Comhaid zip i do Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Ceadaigh comhaid zipping go díreach i do Nextcloud!", 8 | "Compress files" : "Comhaid comhbhrúite", 9 | "Compress" : "Comhbhrúigh", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Déanfar an comhad a chomhbhrú sa chúlra. Nuair a bheidh tú críochnaithe gheobhaidh tú fógra agus tá an comhad suite san eolaire reatha.", 11 | "Archive file name" : "Ainm comhaid cartlainne", 12 | "_Compress %n file_::_Compress %n files_" : ["Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad","Comhbhrúigh %n comhad"], 13 | "Compress to Zip" : "Comhbhrúigh go Zip", 14 | "Archive" : "Cartlann", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Cuireadh tús le cartlann Zip a chruthú. Cuirfimid tú ar an eolas chomh luath agus a bheidh an chartlann ar fáil.", 16 | "An error happened when trying to compress the file." : "Tharla earráid agus iarracht á déanamh an comhad a chomhbhrú.", 17 | "Only files up to {maxSize} can be compressed." : "Ní féidir ach comhaid suas go dtí {maxSize} a chomhbhrú." 18 | },"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" 19 | } -------------------------------------------------------------------------------- /l10n/gl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Crearase un arquivo Zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Os seus ficheiros gardáronse como un arquivo Zip en {path}.", 7 | "Creating the Zip file {path} failed." : "Produciuse un erro ao crear o ficheiro Zip {path}.", 8 | "Zip files in your Nextcloud" : "Ficheiros zip no seu Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Permite comprimir ficheiros (con zip) directamente no seu Nextcloud!", 10 | "Compress files" : "Ficheiros comprimidos", 11 | "Compress" : "Comprimir", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "O ficheiro comprimirase en segundo plano. Unha vez rematado, recibirá unha notificación e o ficheiro estará situado no directorio actual.", 13 | "Archive file name" : "Nome do arquivador", 14 | "_Compress %n file_::_Compress %n files_" : ["Comprimir %n ficheiro","Comprimir %n ficheiros"], 15 | "Compress to Zip" : "Comprimir a Zip", 16 | "Archive" : "Arquivar", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Comezou a creación do arquivo Zip. Avisarémolo en canto o arquivo estea dispoñíbel.", 18 | "An error happened when trying to compress the file." : "Produciuse un erro ao tentar comprimir o ficheiro.", 19 | "Only files up to {maxSize} can be compressed." : "Só se poden comprimir ficheiros ata {maxSize}." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/gl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Crearase un arquivo Zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Os seus ficheiros gardáronse como un arquivo Zip en {path}.", 5 | "Creating the Zip file {path} failed." : "Produciuse un erro ao crear o ficheiro Zip {path}.", 6 | "Zip files in your Nextcloud" : "Ficheiros zip no seu Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Permite comprimir ficheiros (con zip) directamente no seu Nextcloud!", 8 | "Compress files" : "Ficheiros comprimidos", 9 | "Compress" : "Comprimir", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "O ficheiro comprimirase en segundo plano. Unha vez rematado, recibirá unha notificación e o ficheiro estará situado no directorio actual.", 11 | "Archive file name" : "Nome do arquivador", 12 | "_Compress %n file_::_Compress %n files_" : ["Comprimir %n ficheiro","Comprimir %n ficheiros"], 13 | "Compress to Zip" : "Comprimir a Zip", 14 | "Archive" : "Arquivar", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Comezou a creación do arquivo Zip. Avisarémolo en canto o arquivo estea dispoñíbel.", 16 | "An error happened when trying to compress the file." : "Produciuse un erro ao tentar comprimir o ficheiro.", 17 | "Only files up to {maxSize} can be compressed." : "Só se poden comprimir ficheiros ata {maxSize}." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/he.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "לארכיון" 5 | }, 6 | "nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); 7 | -------------------------------------------------------------------------------- /l10n/he.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "לארכיון" 3 | },"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" 4 | } -------------------------------------------------------------------------------- /l10n/hr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arhiva" 5 | }, 6 | "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/hr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arhiva" 3 | },"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;" 4 | } -------------------------------------------------------------------------------- /l10n/hu.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zippelő", 5 | "A Zip archive {target} will be created." : "A(z) {target} ZIP-archívum létre fog jönni.", 6 | "Your files have been stored as a Zip archive in {path}." : "A fájlok ZIP-archívumként lettek tárolva itt: {path}.", 7 | "Creating the Zip file {path} failed." : "A(z) {path} ZIP-fájl létrehozása sikertelen", 8 | "Zip files in your Nextcloud" : "Fájlok zippelése a Nextcloudjában", 9 | "Allow zipping files directly in your Nextcloud!" : "Fájlok zippelése közvetlenül a Nextcloudban.", 10 | "Compress files" : "Fájlok tömörítése", 11 | "Compress" : "Tömörítés", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "A fájl tömörítése a háttérben történik. Ha elkészült, értesítést kap, és a fájl az aktuális könyvtárba lesz helyezve.", 13 | "Archive file name" : "Archívumfájl neve", 14 | "_Compress %n file_::_Compress %n files_" : ["%n fájl tömörítése","%n fájl tömörítése"], 15 | "Compress to Zip" : "Tömörítés ZIP-be", 16 | "Archive" : "Archívum", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "A ZIP-archívum létrehozása elindult. Értesítjük, amint az archívum elérhető.", 18 | "An error happened when trying to compress the file." : "Hiba történt a fájl tömörítése során.", 19 | "Only files up to {maxSize} can be compressed." : "Legfeljebb {maxSize} méretű fájlok tömöríthetők." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/hu.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zippelő", 3 | "A Zip archive {target} will be created." : "A(z) {target} ZIP-archívum létre fog jönni.", 4 | "Your files have been stored as a Zip archive in {path}." : "A fájlok ZIP-archívumként lettek tárolva itt: {path}.", 5 | "Creating the Zip file {path} failed." : "A(z) {path} ZIP-fájl létrehozása sikertelen", 6 | "Zip files in your Nextcloud" : "Fájlok zippelése a Nextcloudjában", 7 | "Allow zipping files directly in your Nextcloud!" : "Fájlok zippelése közvetlenül a Nextcloudban.", 8 | "Compress files" : "Fájlok tömörítése", 9 | "Compress" : "Tömörítés", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "A fájl tömörítése a háttérben történik. Ha elkészült, értesítést kap, és a fájl az aktuális könyvtárba lesz helyezve.", 11 | "Archive file name" : "Archívumfájl neve", 12 | "_Compress %n file_::_Compress %n files_" : ["%n fájl tömörítése","%n fájl tömörítése"], 13 | "Compress to Zip" : "Tömörítés ZIP-be", 14 | "Archive" : "Archívum", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "A ZIP-archívum létrehozása elindult. Értesítjük, amint az archívum elérhető.", 16 | "An error happened when trying to compress the file." : "Hiba történt a fájl tömörítése során.", 17 | "Only files up to {maxSize} can be compressed." : "Legfeljebb {maxSize} méretű fájlok tömöríthetők." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/id.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arsip" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/id.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arsip" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/is.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Safn" 5 | }, 6 | "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); 7 | -------------------------------------------------------------------------------- /l10n/is.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Safn" 3 | },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" 4 | } -------------------------------------------------------------------------------- /l10n/it.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Un archivio Zip {target} sarà creato.", 6 | "Your files have been stored as a Zip archive in {path}." : "I file sono stati inseriti in un archivio Zip in {path}.", 7 | "Creating the Zip file {path} failed." : "Creazione del file Zip {path} non riuscita.", 8 | "Zip files in your Nextcloud" : "Crea file ZIP nel tuo Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Consenti la compressione di file direttamente nel tuo Nextcloud!", 10 | "Compress files" : "Comprimi file", 11 | "Compress to Zip" : "Comprimi in Zip", 12 | "Archive" : "Archivio", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creazione dell'archivio Zip in corso. Riceverai una notifica appena l'archivio sarà disponibile.", 14 | "An error happened when trying to compress the file." : "Si è verificato un errore durante la compressione del file." 15 | }, 16 | "nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 17 | -------------------------------------------------------------------------------- /l10n/it.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Un archivio Zip {target} sarà creato.", 4 | "Your files have been stored as a Zip archive in {path}." : "I file sono stati inseriti in un archivio Zip in {path}.", 5 | "Creating the Zip file {path} failed." : "Creazione del file Zip {path} non riuscita.", 6 | "Zip files in your Nextcloud" : "Crea file ZIP nel tuo Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Consenti la compressione di file direttamente nel tuo Nextcloud!", 8 | "Compress files" : "Comprimi file", 9 | "Compress to Zip" : "Comprimi in Zip", 10 | "Archive" : "Archivio", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Creazione dell'archivio Zip in corso. Riceverai una notifica appena l'archivio sarà disponibile.", 12 | "An error happened when trying to compress the file." : "Si è verificato un errore durante la compressione del file." 13 | },"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 14 | } -------------------------------------------------------------------------------- /l10n/ja.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "zipアーカイブ {target} を作成しました。", 6 | "Your files have been stored as a Zip archive in {path}." : "ファイルは {path} にzipアーカイブとして保存されました。", 7 | "Creating the Zip file {path} failed." : "zipファイルを {path} に作成できませんでした。", 8 | "Zip files in your Nextcloud" : "Nextcloud上で直接Zip圧縮", 9 | "Allow zipping files directly in your Nextcloud!" : "nextcloud上のファイルを直接圧縮することができます!", 10 | "Compress files" : "ファイルを圧縮", 11 | "Compress to Zip" : "Zipに圧縮", 12 | "Archive" : "アーカイブ", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "zipアーカイブの作成を開始しました。アーカイブが利用できるようになればすぐにお知らせします。", 14 | "An error happened when trying to compress the file." : "ファイルの圧縮中にエラーが発生しました。", 15 | "Only files up to {maxSize} can be compressed." : "ファイル圧縮できるのは、最大{maxSize} までです" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/ja.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "zipアーカイブ {target} を作成しました。", 4 | "Your files have been stored as a Zip archive in {path}." : "ファイルは {path} にzipアーカイブとして保存されました。", 5 | "Creating the Zip file {path} failed." : "zipファイルを {path} に作成できませんでした。", 6 | "Zip files in your Nextcloud" : "Nextcloud上で直接Zip圧縮", 7 | "Allow zipping files directly in your Nextcloud!" : "nextcloud上のファイルを直接圧縮することができます!", 8 | "Compress files" : "ファイルを圧縮", 9 | "Compress to Zip" : "Zipに圧縮", 10 | "Archive" : "アーカイブ", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "zipアーカイブの作成を開始しました。アーカイブが利用できるようになればすぐにお知らせします。", 12 | "An error happened when trying to compress the file." : "ファイルの圧縮中にエラーが発生しました。", 13 | "Only files up to {maxSize} can be compressed." : "ファイル圧縮できるのは、最大{maxSize} までです" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/ka.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Archive" 5 | }, 6 | "nplurals=2; plural=(n!=1);"); 7 | -------------------------------------------------------------------------------- /l10n/ka.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Archive" 3 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 4 | } -------------------------------------------------------------------------------- /l10n/ka_GE.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "არქივი" 5 | }, 6 | "nplurals=2; plural=(n!=1);"); 7 | -------------------------------------------------------------------------------- /l10n/ka_GE.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "არქივი" 3 | },"pluralForm" :"nplurals=2; plural=(n!=1);" 4 | } -------------------------------------------------------------------------------- /l10n/ko.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "압축 도구", 5 | "A Zip archive {target} will be created." : "Zip 압축 파일 {target}이(가) 생성됩니다", 6 | "Your files have been stored as a Zip archive in {path}." : "파일이 {path}에 Zip 압축 파일로 저장되었습니다", 7 | "Creating the Zip file {path} failed." : "Zip 압축 파일 {path}을(를) 만들 수 없음", 8 | "Zip files in your Nextcloud" : "내 Nextcloud에 있는 Zip 파일", 9 | "Allow zipping files directly in your Nextcloud!" : "Nextcloud에서 직접 Zip 파일로 압축하세요!", 10 | "Compress files" : "파일 압축", 11 | "Compress" : "압축", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "백그라운드에서 파일을 압축합니다. 작업이 완료되면 알림이 표시되며 파일은 현재 경로에 저장됩니다.", 13 | "Archive file name" : "압축 파일 이름", 14 | "_Compress %n file_::_Compress %n files_" : ["%n개 파일 압축"], 15 | "Compress to Zip" : "Zip 파일로 압축", 16 | "Archive" : "보관", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip 파일 생성을 시작했습니다. 작업이 종료되면 알림을 표시합니다", 18 | "An error happened when trying to compress the file." : "파일을 압축 시도 중 오류가 발생했습니다", 19 | "Only files up to {maxSize} can be compressed." : "최대 {maxSize}까지 압축할 수 있습니다" 20 | }, 21 | "nplurals=1; plural=0;"); 22 | -------------------------------------------------------------------------------- /l10n/ko.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "압축 도구", 3 | "A Zip archive {target} will be created." : "Zip 압축 파일 {target}이(가) 생성됩니다", 4 | "Your files have been stored as a Zip archive in {path}." : "파일이 {path}에 Zip 압축 파일로 저장되었습니다", 5 | "Creating the Zip file {path} failed." : "Zip 압축 파일 {path}을(를) 만들 수 없음", 6 | "Zip files in your Nextcloud" : "내 Nextcloud에 있는 Zip 파일", 7 | "Allow zipping files directly in your Nextcloud!" : "Nextcloud에서 직접 Zip 파일로 압축하세요!", 8 | "Compress files" : "파일 압축", 9 | "Compress" : "압축", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "백그라운드에서 파일을 압축합니다. 작업이 완료되면 알림이 표시되며 파일은 현재 경로에 저장됩니다.", 11 | "Archive file name" : "압축 파일 이름", 12 | "_Compress %n file_::_Compress %n files_" : ["%n개 파일 압축"], 13 | "Compress to Zip" : "Zip 파일로 압축", 14 | "Archive" : "보관", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip 파일 생성을 시작했습니다. 작업이 종료되면 알림을 표시합니다", 16 | "An error happened when trying to compress the file." : "파일을 압축 시도 중 오류가 발생했습니다", 17 | "Only files up to {maxSize} can be compressed." : "최대 {maxSize}까지 압축할 수 있습니다" 18 | },"pluralForm" :"nplurals=1; plural=0;" 19 | } -------------------------------------------------------------------------------- /l10n/lt_LT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zip įrankis", 5 | "A Zip archive {target} will be created." : "Bus sukurtas {target} Zip archyvas.", 6 | "Your files have been stored as a Zip archive in {path}." : "Jūsų failai buvo suglaudinti Zip formatu ir įkelti {path}.", 7 | "Creating the Zip file {path} failed." : "Nepavyko sukurti Zip failo {path} vietoje.", 8 | "Zip files in your Nextcloud" : "Zip failai jūsų Nextcloud'e", 9 | "Allow zipping files directly in your Nextcloud!" : "Leiskite Zip'inti failus tiesiogiai Nextcloud'e!", 10 | "Compress files" : "Suglaudinti failus", 11 | "Compress to Zip" : "Suglaudinti Zip formatu", 12 | "Archive" : "Archyvuoti", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Vyksta glaudinimas Zip formatu. Pranešima iš karto, kai tik procesas bus užbaigtas.", 14 | "An error happened when trying to compress the file." : "Įvyko klaida glaudinant failus." 15 | }, 16 | "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);"); 17 | -------------------------------------------------------------------------------- /l10n/lt_LT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zip įrankis", 3 | "A Zip archive {target} will be created." : "Bus sukurtas {target} Zip archyvas.", 4 | "Your files have been stored as a Zip archive in {path}." : "Jūsų failai buvo suglaudinti Zip formatu ir įkelti {path}.", 5 | "Creating the Zip file {path} failed." : "Nepavyko sukurti Zip failo {path} vietoje.", 6 | "Zip files in your Nextcloud" : "Zip failai jūsų Nextcloud'e", 7 | "Allow zipping files directly in your Nextcloud!" : "Leiskite Zip'inti failus tiesiogiai Nextcloud'e!", 8 | "Compress files" : "Suglaudinti failus", 9 | "Compress to Zip" : "Suglaudinti Zip formatu", 10 | "Archive" : "Archyvuoti", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Vyksta glaudinimas Zip formatu. Pranešima iš karto, kai tik procesas bus užbaigtas.", 12 | "An error happened when trying to compress the file." : "Įvyko klaida glaudinant failus." 13 | },"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);" 14 | } -------------------------------------------------------------------------------- /l10n/lv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arhīvi" 5 | }, 6 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); 7 | -------------------------------------------------------------------------------- /l10n/lv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arhīvi" 3 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" 4 | } -------------------------------------------------------------------------------- /l10n/mk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Архива" 5 | }, 6 | "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); 7 | -------------------------------------------------------------------------------- /l10n/mk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Архива" 3 | },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" 4 | } -------------------------------------------------------------------------------- /l10n/mn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "архив" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/mn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "архив" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/nb.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Et Zip-arkiv {target} vil opprettes.", 6 | "Your files have been stored as a Zip archive in {path}." : "Filene dine er lagret som et zip-arkiv i {path}.", 7 | "Creating the Zip file {path} failed." : "Oppretting av zip-filen i {path} feilet", 8 | "Zip files in your Nextcloud" : "Zip-filer i din Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Tillat komprimering av filer direkte i Nextcloud!", 10 | "Compress files" : "Komprimer filer", 11 | "Compress" : "Komprimer", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen komprimeres i bakgrunnen. Når det er ferdig, vil du motta et varsel, og filen ligger i gjeldende katalog.", 13 | "Archive file name" : "Navn på arkivfil", 14 | "_Compress %n file_::_Compress %n files_" : ["Komprimer %n fil","Komprimer %n filer"], 15 | "Compress to Zip" : "Komprimer til Zip", 16 | "Archive" : "Arkiv", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Oppretting av Zip-arkiv startet. Vi gir deg beskjed så snart arkivet er tilgjengelig.", 18 | "An error happened when trying to compress the file." : "Det oppstod en feil under forsøk på å komprimere filen.", 19 | "Only files up to {maxSize} can be compressed." : "Kun filer opptil {maxSize} kan komprimeres." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/nb.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Et Zip-arkiv {target} vil opprettes.", 4 | "Your files have been stored as a Zip archive in {path}." : "Filene dine er lagret som et zip-arkiv i {path}.", 5 | "Creating the Zip file {path} failed." : "Oppretting av zip-filen i {path} feilet", 6 | "Zip files in your Nextcloud" : "Zip-filer i din Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Tillat komprimering av filer direkte i Nextcloud!", 8 | "Compress files" : "Komprimer filer", 9 | "Compress" : "Komprimer", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen komprimeres i bakgrunnen. Når det er ferdig, vil du motta et varsel, og filen ligger i gjeldende katalog.", 11 | "Archive file name" : "Navn på arkivfil", 12 | "_Compress %n file_::_Compress %n files_" : ["Komprimer %n fil","Komprimer %n filer"], 13 | "Compress to Zip" : "Komprimer til Zip", 14 | "Archive" : "Arkiv", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Oppretting av Zip-arkiv startet. Vi gir deg beskjed så snart arkivet er tilgjengelig.", 16 | "An error happened when trying to compress the file." : "Det oppstod en feil under forsøk på å komprimere filen.", 17 | "Only files up to {maxSize} can be compressed." : "Kun filer opptil {maxSize} kan komprimeres." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/nl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Zip-archief {target} wordt aangemaakr.", 6 | "Your files have been stored as a Zip archive in {path}." : "Je bestanden zijn opgeslagen als een Zip-archief in {pad}.", 7 | "Creating the Zip file {path} failed." : "Het maken van het Zip-bestand {pad} is mislukt.", 8 | "Zip files in your Nextcloud" : "Zip-bestanden in je Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Sta direct comprimeren van bestanden in je Nextcloud toe!", 10 | "Compress files" : "Comprimeer bestanden", 11 | "Compress to Zip" : "Comprimeer naar Zip", 12 | "Archive" : "Archiveren", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Het maken van Zip-archief is gestart. We laten je weten zodra het archief beschikbaar is.", 14 | "An error happened when trying to compress the file." : "Er is een fout opgetreden bij het comprimeren van het bestand." 15 | }, 16 | "nplurals=2; plural=(n != 1);"); 17 | -------------------------------------------------------------------------------- /l10n/nl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Zip-archief {target} wordt aangemaakr.", 4 | "Your files have been stored as a Zip archive in {path}." : "Je bestanden zijn opgeslagen als een Zip-archief in {pad}.", 5 | "Creating the Zip file {path} failed." : "Het maken van het Zip-bestand {pad} is mislukt.", 6 | "Zip files in your Nextcloud" : "Zip-bestanden in je Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Sta direct comprimeren van bestanden in je Nextcloud toe!", 8 | "Compress files" : "Comprimeer bestanden", 9 | "Compress to Zip" : "Comprimeer naar Zip", 10 | "Archive" : "Archiveren", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Het maken van Zip-archief is gestart. We laten je weten zodra het archief beschikbaar is.", 12 | "An error happened when trying to compress the file." : "Er is een fout opgetreden bij het comprimeren van het bestand." 13 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 14 | } -------------------------------------------------------------------------------- /l10n/oc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipador", 5 | "A Zip archive {target} will be created." : "Un arichiu Zip {target} serà creat.", 6 | "Your files have been stored as a Zip archive in {path}." : "Los fichièrs son gardat coma archius Zip dins {path}.", 7 | "Creating the Zip file {path} failed." : "La creacion del fichièr Zip {path} a pas reüssit.", 8 | "Zip files in your Nextcloud" : "Zipatz fichièrs dins vòstre Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Permet de zipar fichièrs e dossièr dins vòstre Nextcloud !", 10 | "Compress files" : "Compressar los fichièrs", 11 | "Compress to Zip" : "Compressar en Zip", 12 | "Archive" : "Archiu", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "La creacion de l’archiu Zip a començat. Vos assabentarem tre que l’archiu es disponible.", 14 | "An error happened when trying to compress the file." : "Una error s’es producha en ensajant de compressar lo fichièr." 15 | }, 16 | "nplurals=2; plural=(n > 1);"); 17 | -------------------------------------------------------------------------------- /l10n/oc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipador", 3 | "A Zip archive {target} will be created." : "Un arichiu Zip {target} serà creat.", 4 | "Your files have been stored as a Zip archive in {path}." : "Los fichièrs son gardat coma archius Zip dins {path}.", 5 | "Creating the Zip file {path} failed." : "La creacion del fichièr Zip {path} a pas reüssit.", 6 | "Zip files in your Nextcloud" : "Zipatz fichièrs dins vòstre Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Permet de zipar fichièrs e dossièr dins vòstre Nextcloud !", 8 | "Compress files" : "Compressar los fichièrs", 9 | "Compress to Zip" : "Compressar en Zip", 10 | "Archive" : "Archiu", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "La creacion de l’archiu Zip a començat. Vos assabentarem tre que l’archiu es disponible.", 12 | "An error happened when trying to compress the file." : "Una error s’es producha en ensajant de compressar lo fichièr." 13 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 14 | } -------------------------------------------------------------------------------- /l10n/pl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Zostanie utworzone archiwum Zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Twoje pliki zostały zapisane w archiwum Zip w lokalizacji {path}.", 7 | "Creating the Zip file {path} failed." : "Utworzenie pliku Zip {path} nie powiodło się.", 8 | "Zip files in your Nextcloud" : "Pliki Zip w Twoim Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Zezwala na zipowanie plików bezpośrednio w Twoim Nextcloud!", 10 | "Compress files" : "Kompresuj pliki", 11 | "Compress to Zip" : "Skompresuj do Zip", 12 | "Archive" : "Archiwizuj", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Rozpoczęto tworzenie archiwum Zip. Powiadomimy Ciebie, gdy tylko archiwum będzie dostępne.", 14 | "An error happened when trying to compress the file." : "Wystąpił błąd podczas próby skompresowania pliku.", 15 | "Only files up to {maxSize} can be compressed." : "Można skompresować tylko pliki do {maxSize}." 16 | }, 17 | "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);"); 18 | -------------------------------------------------------------------------------- /l10n/pl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Zostanie utworzone archiwum Zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Twoje pliki zostały zapisane w archiwum Zip w lokalizacji {path}.", 5 | "Creating the Zip file {path} failed." : "Utworzenie pliku Zip {path} nie powiodło się.", 6 | "Zip files in your Nextcloud" : "Pliki Zip w Twoim Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Zezwala na zipowanie plików bezpośrednio w Twoim Nextcloud!", 8 | "Compress files" : "Kompresuj pliki", 9 | "Compress to Zip" : "Skompresuj do Zip", 10 | "Archive" : "Archiwizuj", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Rozpoczęto tworzenie archiwum Zip. Powiadomimy Ciebie, gdy tylko archiwum będzie dostępne.", 12 | "An error happened when trying to compress the file." : "Wystąpił błąd podczas próby skompresowania pliku.", 13 | "Only files up to {maxSize} can be compressed." : "Można skompresować tylko pliki do {maxSize}." 14 | },"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);" 15 | } -------------------------------------------------------------------------------- /l10n/pt_BR.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "O arquivo Zip {target} será criado.", 6 | "Your files have been stored as a Zip archive in {path}." : "Seus arquivos foram armazenados como um zip em {path}.", 7 | "Creating the Zip file {path} failed." : "Falha ao criar o arquivo zip {path}.", 8 | "Zip files in your Nextcloud" : "Compactar arquivos em seu nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Permite compactar arquivos diretamente em seu nextcloud!", 10 | "Compress files" : "Compactar arquivos", 11 | "Compress" : "Comprimir", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "O arquivo será compactado em segundo plano. Ao terminar, você receberá uma notificação e o arquivo estará localizado no diretório atual.", 13 | "Archive file name" : "Nome do arquivo arquivado", 14 | "_Compress %n file_::_Compress %n files_" : ["Compactar %n arquivo","Compactar %n de arquivos","Compactar %n arquivos"], 15 | "Compress to Zip" : "Compactar para Zip", 16 | "Archive" : "Arquivo", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "A criação do arquivo zip foi iniciada. Iremos notificá-lo assim que o arquivo estiver disponível.", 18 | "An error happened when trying to compress the file." : "Ocorreu um erro ao tentar compactar o arquivo.", 19 | "Only files up to {maxSize} can be compressed." : "Somente arquivos de até {maxSize} podem ser compactados." 20 | }, 21 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 22 | -------------------------------------------------------------------------------- /l10n/pt_BR.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "O arquivo Zip {target} será criado.", 4 | "Your files have been stored as a Zip archive in {path}." : "Seus arquivos foram armazenados como um zip em {path}.", 5 | "Creating the Zip file {path} failed." : "Falha ao criar o arquivo zip {path}.", 6 | "Zip files in your Nextcloud" : "Compactar arquivos em seu nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Permite compactar arquivos diretamente em seu nextcloud!", 8 | "Compress files" : "Compactar arquivos", 9 | "Compress" : "Comprimir", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "O arquivo será compactado em segundo plano. Ao terminar, você receberá uma notificação e o arquivo estará localizado no diretório atual.", 11 | "Archive file name" : "Nome do arquivo arquivado", 12 | "_Compress %n file_::_Compress %n files_" : ["Compactar %n arquivo","Compactar %n de arquivos","Compactar %n arquivos"], 13 | "Compress to Zip" : "Compactar para Zip", 14 | "Archive" : "Arquivo", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "A criação do arquivo zip foi iniciada. Iremos notificá-lo assim que o arquivo estiver disponível.", 16 | "An error happened when trying to compress the file." : "Ocorreu um erro ao tentar compactar o arquivo.", 17 | "Only files up to {maxSize} can be compressed." : "Somente arquivos de até {maxSize} podem ser compactados." 18 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 19 | } -------------------------------------------------------------------------------- /l10n/pt_PT.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arquivar" 5 | }, 6 | "nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); 7 | -------------------------------------------------------------------------------- /l10n/pt_PT.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arquivar" 3 | },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" 4 | } -------------------------------------------------------------------------------- /l10n/ro.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arhivă" 5 | }, 6 | "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); 7 | -------------------------------------------------------------------------------- /l10n/ro.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arhivă" 3 | },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" 4 | } -------------------------------------------------------------------------------- /l10n/ru.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Будет создан Zip-архив {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Ваши файлы были сохранены в виде Zip-архива в {path}.", 7 | "Creating the Zip file {path} failed." : "Не удалось создать Zip-файл {path}.", 8 | "Zip files in your Nextcloud" : "Zip-файлы в вашем Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Позволяет архивировать файлы прямо в вашем Nextcloud!", 10 | "Compress files" : "Сжатие файлов", 11 | "Compress" : "Сжатие", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Файл будет сжат в фоновом режиме. После завершения вы получите уведомление, а файл будет расположен в текущем каталоге.", 13 | "Archive file name" : "Имя файла архива", 14 | "Compress to Zip" : "Сжать в Zip", 15 | "Archive" : "Архив", 16 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Началось создание Zip-архива. Мы уведомим вас, как только архив будет доступен.", 17 | "An error happened when trying to compress the file." : "При попытке сжать файл произошла ошибка.", 18 | "Only files up to {maxSize} can be compressed." : "Сжимать можно только файлы размером до {maxSize}." 19 | }, 20 | "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);"); 21 | -------------------------------------------------------------------------------- /l10n/ru.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Будет создан Zip-архив {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Ваши файлы были сохранены в виде Zip-архива в {path}.", 5 | "Creating the Zip file {path} failed." : "Не удалось создать Zip-файл {path}.", 6 | "Zip files in your Nextcloud" : "Zip-файлы в вашем Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Позволяет архивировать файлы прямо в вашем Nextcloud!", 8 | "Compress files" : "Сжатие файлов", 9 | "Compress" : "Сжатие", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Файл будет сжат в фоновом режиме. После завершения вы получите уведомление, а файл будет расположен в текущем каталоге.", 11 | "Archive file name" : "Имя файла архива", 12 | "Compress to Zip" : "Сжать в Zip", 13 | "Archive" : "Архив", 14 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Началось создание Zip-архива. Мы уведомим вас, как только архив будет доступен.", 15 | "An error happened when trying to compress the file." : "При попытке сжать файл произошла ошибка.", 16 | "Only files up to {maxSize} can be compressed." : "Сжимать можно только файлы размером до {maxSize}." 17 | },"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);" 18 | } -------------------------------------------------------------------------------- /l10n/sc.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Cartella" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/sc.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Cartella" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "සංරක්ෂණය" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "සංරක්ෂණය" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/sk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Bol vytvorený Zip archív {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Vaše súbory boli uložené v Zip archíve v {path}.", 7 | "Creating the Zip file {path} failed." : "Vytváranie Zip súboru {path} zlyhalo.", 8 | "Zip files in your Nextcloud" : "Zip súbory vo vašom Nextcloude", 9 | "Allow zipping files directly in your Nextcloud!" : "Povoliť zipovanie súborov priamo vo vašom Nextcloude!", 10 | "Compress files" : "Komprimovať súbory", 11 | "Compress" : "Komprimovať", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Súbor bude komprimovaný na pozadí. Po dokončení dostanete upozornenie a súbor sa nachádza v aktuálnom adresári.", 13 | "Archive file name" : "Názov súboru archívu", 14 | "_Compress %n file_::_Compress %n files_" : ["Komprimuje sa %n súbor","Komprimujú sa %n súbory","Komprimuje sa %n súborov","Komprimuje sa %n súborov"], 15 | "Compress to Zip" : "Komprimovať do Zip", 16 | "Archive" : "Archív", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Začalo sa vytváranie archívu Zip. Hneď, ako bude archív dostupný, vás budeme informovať.", 18 | "An error happened when trying to compress the file." : "Pri pokuse o komprimáciu súboru sa vyskytla chyba.", 19 | "Only files up to {maxSize} can be compressed." : "Iba súbory do veľkosti {maxSize} môžu byť komprimované." 20 | }, 21 | "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); 22 | -------------------------------------------------------------------------------- /l10n/sk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Bol vytvorený Zip archív {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Vaše súbory boli uložené v Zip archíve v {path}.", 5 | "Creating the Zip file {path} failed." : "Vytváranie Zip súboru {path} zlyhalo.", 6 | "Zip files in your Nextcloud" : "Zip súbory vo vašom Nextcloude", 7 | "Allow zipping files directly in your Nextcloud!" : "Povoliť zipovanie súborov priamo vo vašom Nextcloude!", 8 | "Compress files" : "Komprimovať súbory", 9 | "Compress" : "Komprimovať", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Súbor bude komprimovaný na pozadí. Po dokončení dostanete upozornenie a súbor sa nachádza v aktuálnom adresári.", 11 | "Archive file name" : "Názov súboru archívu", 12 | "_Compress %n file_::_Compress %n files_" : ["Komprimuje sa %n súbor","Komprimujú sa %n súbory","Komprimuje sa %n súborov","Komprimuje sa %n súborov"], 13 | "Compress to Zip" : "Komprimovať do Zip", 14 | "Archive" : "Archív", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Začalo sa vytváranie archívu Zip. Hneď, ako bude archív dostupný, vás budeme informovať.", 16 | "An error happened when trying to compress the file." : "Pri pokuse o komprimáciu súboru sa vyskytla chyba.", 17 | "Only files up to {maxSize} can be compressed." : "Iba súbory do veľkosti {maxSize} môžu byť komprimované." 18 | },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" 19 | } -------------------------------------------------------------------------------- /l10n/sl.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Ustvarjen bo arhiv zip {target}.", 6 | "Your files have been stored as a Zip archive in {path}." : "Datoteke bodo shranjene v arhivu zip na naslovu {path}.", 7 | "Creating the Zip file {path} failed." : "Ustvarjanje arhiva na mestu {path} je spodletelo.", 8 | "Zip files in your Nextcloud" : "Datoteke zip v Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Omogoča shranjevanje datotek v arhiv zip neposredno v oblak Nextcloud!", 10 | "Compress files" : "Stisni datoteke", 11 | "Compress to Zip" : "Skrči v zip", 12 | "Archive" : "Arhiv", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Ustvarjanje arhiva zip je začeto. Po koncu stiskanja bo prikazano obvestilo.", 14 | "An error happened when trying to compress the file." : "Prišlo je do napake med stiskanjem datoteke." 15 | }, 16 | "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); 17 | -------------------------------------------------------------------------------- /l10n/sl.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Ustvarjen bo arhiv zip {target}.", 4 | "Your files have been stored as a Zip archive in {path}." : "Datoteke bodo shranjene v arhivu zip na naslovu {path}.", 5 | "Creating the Zip file {path} failed." : "Ustvarjanje arhiva na mestu {path} je spodletelo.", 6 | "Zip files in your Nextcloud" : "Datoteke zip v Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Omogoča shranjevanje datotek v arhiv zip neposredno v oblak Nextcloud!", 8 | "Compress files" : "Stisni datoteke", 9 | "Compress to Zip" : "Skrči v zip", 10 | "Archive" : "Arhiv", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Ustvarjanje arhiva zip je začeto. Po koncu stiskanja bo prikazano obvestilo.", 12 | "An error happened when trying to compress the file." : "Prišlo je do napake med stiskanjem datoteke." 13 | },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" 14 | } -------------------------------------------------------------------------------- /l10n/sq.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arkiva" 5 | }, 6 | "nplurals=2; plural=(n != 1);"); 7 | -------------------------------------------------------------------------------- /l10n/sq.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arkiva" 3 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 4 | } -------------------------------------------------------------------------------- /l10n/sr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Зипер", 5 | "A Zip archive {target} will be created." : "Креираће се Зип архива {target}", 6 | "Your files have been stored as a Zip archive in {path}." : "Важи фајлови су сачувани као Зип архива у {path}.", 7 | "Creating the Zip file {path} failed." : "Није успело креирање Зип фајла {path}.", 8 | "Zip files in your Nextcloud" : "Зипујте фајлове у свом Некстклауду", 9 | "Allow zipping files directly in your Nextcloud!" : "Омогућава директно зиповање фајлова у вашем Некстклауду!", 10 | "Compress files" : "Компресује фајлове", 11 | "Compress" : "Компресуј", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Фајл ће се компресовати у позадини. Када се то заврши, примићете обавештење и фајл ће се налазити у текућем директоријуму.", 13 | "Archive file name" : "Име фајла архиве", 14 | "_Compress %n file_::_Compress %n files_" : ["Компресуј %n фајл","Компресуј %n фајла","Компресуј %n фајлова"], 15 | "Compress to Zip" : "Компресуј у Зип", 16 | "Archive" : "Архива", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Започето је креирање Зип архиве. Обавестићемо вас чим ваша архива буде доступна.", 18 | "An error happened when trying to compress the file." : "Дошло је до грешке током покушаја да се компресује фајл.", 19 | "Only files up to {maxSize} can be compressed." : "Могу да се компресују само фајлови величине до {maxSize}." 20 | }, 21 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 22 | -------------------------------------------------------------------------------- /l10n/sr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Зипер", 3 | "A Zip archive {target} will be created." : "Креираће се Зип архива {target}", 4 | "Your files have been stored as a Zip archive in {path}." : "Важи фајлови су сачувани као Зип архива у {path}.", 5 | "Creating the Zip file {path} failed." : "Није успело креирање Зип фајла {path}.", 6 | "Zip files in your Nextcloud" : "Зипујте фајлове у свом Некстклауду", 7 | "Allow zipping files directly in your Nextcloud!" : "Омогућава директно зиповање фајлова у вашем Некстклауду!", 8 | "Compress files" : "Компресује фајлове", 9 | "Compress" : "Компресуј", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Фајл ће се компресовати у позадини. Када се то заврши, примићете обавештење и фајл ће се налазити у текућем директоријуму.", 11 | "Archive file name" : "Име фајла архиве", 12 | "_Compress %n file_::_Compress %n files_" : ["Компресуј %n фајл","Компресуј %n фајла","Компресуј %n фајлова"], 13 | "Compress to Zip" : "Компресуј у Зип", 14 | "Archive" : "Архива", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Започето је креирање Зип архиве. Обавестићемо вас чим ваша архива буде доступна.", 16 | "An error happened when trying to compress the file." : "Дошло је до грешке током покушаја да се компресује фајл.", 17 | "Only files up to {maxSize} can be compressed." : "Могу да се компресују само фајлови величине до {maxSize}." 18 | },"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);" 19 | } -------------------------------------------------------------------------------- /l10n/sv.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zippare", 5 | "A Zip archive {target} will be created." : "Ett Zip-arkiv {target} kommer att skapas.", 6 | "Your files have been stored as a Zip archive in {path}." : "Dina filer har sparats som ett Zip-arkiv i {path}.", 7 | "Creating the Zip file {path} failed." : "Det gick inte att skapa zip-filen {sökväg}.", 8 | "Zip files in your Nextcloud" : "Zip-filer i ditt Nextcloud", 9 | "Allow zipping files directly in your Nextcloud!" : "Tillåt att zippa filer direkt i ditt Nextcloud!", 10 | "Compress files" : "Komprimera filer", 11 | "Compress" : "Komprimera", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen kommer att komprimeras i bakgrunden. När det är klart får du ett meddelande och filen finns i den nuvarande katalogen.", 13 | "Archive file name" : "Arkivfilens namn", 14 | "_Compress %n file_::_Compress %n files_" : ["Komprimera %n fil","Komprimera %n filer"], 15 | "Compress to Zip" : "Komprimera till Zip", 16 | "Archive" : "Arkivera", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Skapande av Zip-arkivet har startat. Vi meddelar dig så snart arkivet är tillgängligt.", 18 | "An error happened when trying to compress the file." : "Ett fel inträffade när filen skulle komprimeras.", 19 | "Only files up to {maxSize} can be compressed." : "Endast filer upp till {maxSize} kan komprimeras." 20 | }, 21 | "nplurals=2; plural=(n != 1);"); 22 | -------------------------------------------------------------------------------- /l10n/sv.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zippare", 3 | "A Zip archive {target} will be created." : "Ett Zip-arkiv {target} kommer att skapas.", 4 | "Your files have been stored as a Zip archive in {path}." : "Dina filer har sparats som ett Zip-arkiv i {path}.", 5 | "Creating the Zip file {path} failed." : "Det gick inte att skapa zip-filen {sökväg}.", 6 | "Zip files in your Nextcloud" : "Zip-filer i ditt Nextcloud", 7 | "Allow zipping files directly in your Nextcloud!" : "Tillåt att zippa filer direkt i ditt Nextcloud!", 8 | "Compress files" : "Komprimera filer", 9 | "Compress" : "Komprimera", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Filen kommer att komprimeras i bakgrunden. När det är klart får du ett meddelande och filen finns i den nuvarande katalogen.", 11 | "Archive file name" : "Arkivfilens namn", 12 | "_Compress %n file_::_Compress %n files_" : ["Komprimera %n fil","Komprimera %n filer"], 13 | "Compress to Zip" : "Komprimera till Zip", 14 | "Archive" : "Arkivera", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Skapande av Zip-arkivet har startat. Vi meddelar dig så snart arkivet är tillgängligt.", 16 | "An error happened when trying to compress the file." : "Ett fel inträffade när filen skulle komprimeras.", 17 | "Only files up to {maxSize} can be compressed." : "Endast filer upp till {maxSize} kan komprimeras." 18 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 19 | } -------------------------------------------------------------------------------- /l10n/th.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "เก็บถาวร" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/th.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "เก็บถาวร" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/tr.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Sıkıştırıcı", 5 | "A Zip archive {target} will be created." : "{target} Zip arşivi oluşturulacak.", 6 | "Your files have been stored as a Zip archive in {path}." : "Dosyalarınız {path} yolunda Zip arşivi olarak kaydedilecek.", 7 | "Creating the Zip file {path} failed." : "{path} Zip dosyası oluşturulamadı.", 8 | "Zip files in your Nextcloud" : "Nextcloud kopyanızdaki Zip dosyaları", 9 | "Allow zipping files directly in your Nextcloud!" : "Dosyalarınızı doğrudan Nextcloud üzerinde sıkıştırmanızı sağlar!", 10 | "Compress files" : "Dosyaları sıkıştır", 11 | "Compress" : "Sıkıştır", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Dosya arka planda sıkıştırılacak. İşlem tamamlandığında bir bildirim alacaksınız ve dosya geçerli klasöre kaydedilecek.", 13 | "Archive file name" : "Arşiv dosyası adı", 14 | "_Compress %n file_::_Compress %n files_" : ["%n dosyayı sıkıştır","%n dosyayı sıkıştır"], 15 | "Compress to Zip" : "Zip arşivine ekle", 16 | "Archive" : "Arşiv", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip arşivi oluşturuluyor. Hazır olduğunda sizi bilgilendireceğiz.", 18 | "An error happened when trying to compress the file." : "Dosya sıkıştırılmaya çalışılırken bir sorun çıktı.", 19 | "Only files up to {maxSize} can be compressed." : "Yalnızca {maxSize} boyutuna kadar olan dosyalar sıkıştırılabilir." 20 | }, 21 | "nplurals=2; plural=(n > 1);"); 22 | -------------------------------------------------------------------------------- /l10n/tr.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Sıkıştırıcı", 3 | "A Zip archive {target} will be created." : "{target} Zip arşivi oluşturulacak.", 4 | "Your files have been stored as a Zip archive in {path}." : "Dosyalarınız {path} yolunda Zip arşivi olarak kaydedilecek.", 5 | "Creating the Zip file {path} failed." : "{path} Zip dosyası oluşturulamadı.", 6 | "Zip files in your Nextcloud" : "Nextcloud kopyanızdaki Zip dosyaları", 7 | "Allow zipping files directly in your Nextcloud!" : "Dosyalarınızı doğrudan Nextcloud üzerinde sıkıştırmanızı sağlar!", 8 | "Compress files" : "Dosyaları sıkıştır", 9 | "Compress" : "Sıkıştır", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Dosya arka planda sıkıştırılacak. İşlem tamamlandığında bir bildirim alacaksınız ve dosya geçerli klasöre kaydedilecek.", 11 | "Archive file name" : "Arşiv dosyası adı", 12 | "_Compress %n file_::_Compress %n files_" : ["%n dosyayı sıkıştır","%n dosyayı sıkıştır"], 13 | "Compress to Zip" : "Zip arşivine ekle", 14 | "Archive" : "Arşiv", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip arşivi oluşturuluyor. Hazır olduğunda sizi bilgilendireceğiz.", 16 | "An error happened when trying to compress the file." : "Dosya sıkıştırılmaya çalışılırken bir sorun çıktı.", 17 | "Only files up to {maxSize} can be compressed." : "Yalnızca {maxSize} boyutuna kadar olan dosyalar sıkıştırılabilir." 18 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 19 | } -------------------------------------------------------------------------------- /l10n/ug.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Zip ئارخىپى {target} قۇرۇلىدۇ.", 6 | "Your files have been stored as a Zip archive in {path}." : "ھۆججەتلىرىڭىز {path} in دىكى Zip ئارخىپى سۈپىتىدە ساقلاندى.", 7 | "Creating the Zip file {path} failed." : "Zip ھۆججىتى {path} قۇرۇش مەغلۇب بولدى.", 8 | "Zip files in your Nextcloud" : "Nextcloud دىكى ھۆججەتلەرنى يوللاڭ", 9 | "Allow zipping files directly in your Nextcloud!" : "Nextcloud دىكى ھۆججەتلەرنى بىۋاسىتە يوللاشقا يول قويۇڭ!", 10 | "Compress files" : "ھۆججەتلەرنى پىرىسلاش", 11 | "Compress" : "پىرىسلاش", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "ھۆججەت ئارقا سۇپىدا پىرىسلىنىدۇ. تاماملانغاندىن كېيىن ئۇقتۇرۇش تاپشۇرۇۋالىسىز ھەمدە ھۆججەت نۆۋەتتىكى مۇندەرىجىگە جايلاشقان.", 13 | "Archive file name" : "ھۆججەت ئىسمى", 14 | "Compress to Zip" : "Zip غا پىرىسلاش", 15 | "Archive" : "ئارخىپ", 16 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip ئارخىپى قۇرۇش باشلاندى. ئارخىپ تېپىلسىلا سىزگە خەۋەر قىلىمىز.", 17 | "An error happened when trying to compress the file." : "ھۆججەتنى پىرىسلاشقا ئۇرۇنغاندا خاتالىق كۆرۈلدى.", 18 | "Only files up to {maxSize} can be compressed." : "پەقەت {maxSize} گىچە بولغان ھۆججەتلەرنىلا پىرىسلىغىلى بولىدۇ." 19 | }, 20 | "nplurals=2; plural=(n != 1);"); 21 | -------------------------------------------------------------------------------- /l10n/ug.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Zip ئارخىپى {target} قۇرۇلىدۇ.", 4 | "Your files have been stored as a Zip archive in {path}." : "ھۆججەتلىرىڭىز {path} in دىكى Zip ئارخىپى سۈپىتىدە ساقلاندى.", 5 | "Creating the Zip file {path} failed." : "Zip ھۆججىتى {path} قۇرۇش مەغلۇب بولدى.", 6 | "Zip files in your Nextcloud" : "Nextcloud دىكى ھۆججەتلەرنى يوللاڭ", 7 | "Allow zipping files directly in your Nextcloud!" : "Nextcloud دىكى ھۆججەتلەرنى بىۋاسىتە يوللاشقا يول قويۇڭ!", 8 | "Compress files" : "ھۆججەتلەرنى پىرىسلاش", 9 | "Compress" : "پىرىسلاش", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "ھۆججەت ئارقا سۇپىدا پىرىسلىنىدۇ. تاماملانغاندىن كېيىن ئۇقتۇرۇش تاپشۇرۇۋالىسىز ھەمدە ھۆججەت نۆۋەتتىكى مۇندەرىجىگە جايلاشقان.", 11 | "Archive file name" : "ھۆججەت ئىسمى", 12 | "Compress to Zip" : "Zip غا پىرىسلاش", 13 | "Archive" : "ئارخىپ", 14 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Zip ئارخىپى قۇرۇش باشلاندى. ئارخىپ تېپىلسىلا سىزگە خەۋەر قىلىمىز.", 15 | "An error happened when trying to compress the file." : "ھۆججەتنى پىرىسلاشقا ئۇرۇنغاندا خاتالىق كۆرۈلدى.", 16 | "Only files up to {maxSize} can be compressed." : "پەقەت {maxSize} گىچە بولغان ھۆججەتلەرنىلا پىرىسلىغىلى بولىدۇ." 17 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 18 | } -------------------------------------------------------------------------------- /l10n/uk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "Відбувається архівування {target} у ZIP-архів.", 6 | "Your files have been stored as a Zip archive in {path}." : "Ваші файли заархівовано у архів ZIP {path}.", 7 | "Creating the Zip file {path} failed." : "Не вдалося створити файл ZIP {path}. ", 8 | "Zip files in your Nextcloud" : "Файли ZIP у вашій хмарі Nextcloud ", 9 | "Allow zipping files directly in your Nextcloud!" : "Архівуйте файли безпосередньо засобами Nextcloud! ", 10 | "Compress files" : "Архівувати", 11 | "Compress" : "Архівувати", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Файл буде заархівовано в фоновому процесі. Одразу після завершення ви отримаєте відповідне сповіщення, файл з архівом буде збережено в поточному каталозі.", 13 | "Archive file name" : "Ім'я архівного файлу", 14 | "_Compress %n file_::_Compress %n files_" : ["Архівувати %n файл","Архівувати %n файли","Архівувати %n файлів","Архівувати %n файлів"], 15 | "Compress to Zip" : "Архівувати у ZIP", 16 | "Archive" : "Архів", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Розпочато архівування. Ви отримаєте сповіщення, щойно буде створено архів ZIP. ", 18 | "An error happened when trying to compress the file." : "При спробі архівування файлу сталася помилка. ", 19 | "Only files up to {maxSize} can be compressed." : "Лише файли розміром до {maxSize} дозволено архівувати. " 20 | }, 21 | "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);"); 22 | -------------------------------------------------------------------------------- /l10n/uk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "Відбувається архівування {target} у ZIP-архів.", 4 | "Your files have been stored as a Zip archive in {path}." : "Ваші файли заархівовано у архів ZIP {path}.", 5 | "Creating the Zip file {path} failed." : "Не вдалося створити файл ZIP {path}. ", 6 | "Zip files in your Nextcloud" : "Файли ZIP у вашій хмарі Nextcloud ", 7 | "Allow zipping files directly in your Nextcloud!" : "Архівуйте файли безпосередньо засобами Nextcloud! ", 8 | "Compress files" : "Архівувати", 9 | "Compress" : "Архівувати", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "Файл буде заархівовано в фоновому процесі. Одразу після завершення ви отримаєте відповідне сповіщення, файл з архівом буде збережено в поточному каталозі.", 11 | "Archive file name" : "Ім'я архівного файлу", 12 | "_Compress %n file_::_Compress %n files_" : ["Архівувати %n файл","Архівувати %n файли","Архівувати %n файлів","Архівувати %n файлів"], 13 | "Compress to Zip" : "Архівувати у ZIP", 14 | "Archive" : "Архів", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "Розпочато архівування. Ви отримаєте сповіщення, щойно буде створено архів ZIP. ", 16 | "An error happened when trying to compress the file." : "При спробі архівування файлу сталася помилка. ", 17 | "Only files up to {maxSize} can be compressed." : "Лише файли розміром до {maxSize} дозволено архівувати. " 18 | },"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);" 19 | } -------------------------------------------------------------------------------- /l10n/uz.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Arxiv" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/uz.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Arxiv" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/vi.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Archive" : "Lưu trữ" 5 | }, 6 | "nplurals=1; plural=0;"); 7 | -------------------------------------------------------------------------------- /l10n/vi.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Archive" : "Lưu trữ" 3 | },"pluralForm" :"nplurals=1; plural=0;" 4 | } -------------------------------------------------------------------------------- /l10n/zh_CN.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "打包器", 5 | "A Zip archive {target} will be created." : "即将创建一个名为{target}的Zip档", 6 | "Your files have been stored as a Zip archive in {path}." : "你的文件将在{path}存为一个Zip档", 7 | "Creating the Zip file {path} failed." : "在{path}创建Zip失败", 8 | "Zip files in your Nextcloud" : "在你Nextcloud中的Zip文件", 9 | "Allow zipping files directly in your Nextcloud!" : "允许在您的Nextcloud中直接打包文件!", 10 | "Compress files" : "压缩文件", 11 | "Compress to Zip" : "压缩成Zip档", 12 | "Archive" : "压缩档", 13 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "已开始创建Zip档。完成归档后我们将尽快通知您。", 14 | "An error happened when trying to compress the file." : "在压缩文件时发生了一个错误", 15 | "Only files up to {maxSize} can be compressed." : "只能压缩最大{maxSize}的文件。" 16 | }, 17 | "nplurals=1; plural=0;"); 18 | -------------------------------------------------------------------------------- /l10n/zh_CN.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "打包器", 3 | "A Zip archive {target} will be created." : "即将创建一个名为{target}的Zip档", 4 | "Your files have been stored as a Zip archive in {path}." : "你的文件将在{path}存为一个Zip档", 5 | "Creating the Zip file {path} failed." : "在{path}创建Zip失败", 6 | "Zip files in your Nextcloud" : "在你Nextcloud中的Zip文件", 7 | "Allow zipping files directly in your Nextcloud!" : "允许在您的Nextcloud中直接打包文件!", 8 | "Compress files" : "压缩文件", 9 | "Compress to Zip" : "压缩成Zip档", 10 | "Archive" : "压缩档", 11 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "已开始创建Zip档。完成归档后我们将尽快通知您。", 12 | "An error happened when trying to compress the file." : "在压缩文件时发生了一个错误", 13 | "Only files up to {maxSize} can be compressed." : "只能压缩最大{maxSize}的文件。" 14 | },"pluralForm" :"nplurals=1; plural=0;" 15 | } -------------------------------------------------------------------------------- /l10n/zh_HK.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "將創建一個 Zip 存檔 {target}。", 6 | "Your files have been stored as a Zip archive in {path}." : "您的檔案已作為 Zip 存檔存儲在 {path} 中。", 7 | "Creating the Zip file {path} failed." : "創建 Zip 檔案 {path} 失敗。", 8 | "Zip files in your Nextcloud" : "在 Nextcloud 中壓縮文件", 9 | "Allow zipping files directly in your Nextcloud!" : "直接在 Nextcloud 中壓縮檔案!", 10 | "Compress files" : "壓縮檔案", 11 | "Compress" : "壓縮", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "檔案將在背景中壓縮。完成後,您將收到一個通知,並且該檔案位於目前的目錄中。", 13 | "Archive file name" : "封存檔案名字", 14 | "_Compress %n file_::_Compress %n files_" : ["壓縮 %n 個檔案"], 15 | "Compress to Zip" : "壓縮為 Zip", 16 | "Archive" : "存檔", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "開始創建 Zip 存檔。 一旦存檔可用,我們將立即通知您。", 18 | "An error happened when trying to compress the file." : "嘗試壓縮檔案時發生錯誤。", 19 | "Only files up to {maxSize} can be compressed." : "只能壓縮最大為 {maxSize} 的檔案。" 20 | }, 21 | "nplurals=1; plural=0;"); 22 | -------------------------------------------------------------------------------- /l10n/zh_HK.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "將創建一個 Zip 存檔 {target}。", 4 | "Your files have been stored as a Zip archive in {path}." : "您的檔案已作為 Zip 存檔存儲在 {path} 中。", 5 | "Creating the Zip file {path} failed." : "創建 Zip 檔案 {path} 失敗。", 6 | "Zip files in your Nextcloud" : "在 Nextcloud 中壓縮文件", 7 | "Allow zipping files directly in your Nextcloud!" : "直接在 Nextcloud 中壓縮檔案!", 8 | "Compress files" : "壓縮檔案", 9 | "Compress" : "壓縮", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "檔案將在背景中壓縮。完成後,您將收到一個通知,並且該檔案位於目前的目錄中。", 11 | "Archive file name" : "封存檔案名字", 12 | "_Compress %n file_::_Compress %n files_" : ["壓縮 %n 個檔案"], 13 | "Compress to Zip" : "壓縮為 Zip", 14 | "Archive" : "存檔", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "開始創建 Zip 存檔。 一旦存檔可用,我們將立即通知您。", 16 | "An error happened when trying to compress the file." : "嘗試壓縮檔案時發生錯誤。", 17 | "Only files up to {maxSize} can be compressed." : "只能壓縮最大為 {maxSize} 的檔案。" 18 | },"pluralForm" :"nplurals=1; plural=0;" 19 | } -------------------------------------------------------------------------------- /l10n/zh_TW.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "files_zip", 3 | { 4 | "Zipper" : "Zipper", 5 | "A Zip archive {target} will be created." : "將會建立 Zip 壓縮檔 {target}。", 6 | "Your files have been stored as a Zip archive in {path}." : "您的檔案已作為 Zip 壓縮檔存放在 {path} 中。", 7 | "Creating the Zip file {path} failed." : "建立 Zip 檔案 {path} 失敗。", 8 | "Zip files in your Nextcloud" : "在您的 Nextcloud 中壓縮檔案", 9 | "Allow zipping files directly in your Nextcloud!" : "直接在您的 Nextcloud 中壓縮檔案!", 10 | "Compress files" : "壓縮檔案", 11 | "Compress" : "壓縮", 12 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "該檔案將在背景壓縮。完成後,您將收到通知,並且該檔案位於目前目錄中。", 13 | "Archive file name" : "封存檔名稱", 14 | "_Compress %n file_::_Compress %n files_" : ["壓縮 %n 個檔案"], 15 | "Compress to Zip" : "壓縮為 Zip", 16 | "Archive" : "壓縮檔", 17 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "開始建立 Zip 壓縮檔。一旦壓縮檔可用,我們會盡快通知您。", 18 | "An error happened when trying to compress the file." : "嘗試壓縮檔案時發生錯誤。", 19 | "Only files up to {maxSize} can be compressed." : "只能壓縮最大 {maxSize} 的檔案。" 20 | }, 21 | "nplurals=1; plural=0;"); 22 | -------------------------------------------------------------------------------- /l10n/zh_TW.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Zipper" : "Zipper", 3 | "A Zip archive {target} will be created." : "將會建立 Zip 壓縮檔 {target}。", 4 | "Your files have been stored as a Zip archive in {path}." : "您的檔案已作為 Zip 壓縮檔存放在 {path} 中。", 5 | "Creating the Zip file {path} failed." : "建立 Zip 檔案 {path} 失敗。", 6 | "Zip files in your Nextcloud" : "在您的 Nextcloud 中壓縮檔案", 7 | "Allow zipping files directly in your Nextcloud!" : "直接在您的 Nextcloud 中壓縮檔案!", 8 | "Compress files" : "壓縮檔案", 9 | "Compress" : "壓縮", 10 | "The file will be compressed in the background. Once finished you will receive a notification and the file is located in the current directory." : "該檔案將在背景壓縮。完成後,您將收到通知,並且該檔案位於目前目錄中。", 11 | "Archive file name" : "封存檔名稱", 12 | "_Compress %n file_::_Compress %n files_" : ["壓縮 %n 個檔案"], 13 | "Compress to Zip" : "壓縮為 Zip", 14 | "Archive" : "壓縮檔", 15 | "Creating Zip archive started. We will notify you as soon as the archive is available." : "開始建立 Zip 壓縮檔。一旦壓縮檔可用,我們會盡快通知您。", 16 | "An error happened when trying to compress the file." : "嘗試壓縮檔案時發生錯誤。", 17 | "Only files up to {maxSize} can be compressed." : "只能壓縮最大 {maxSize} 的檔案。" 18 | },"pluralForm" :"nplurals=1; plural=0;" 19 | } -------------------------------------------------------------------------------- /lib/AppInfo/Application.php: -------------------------------------------------------------------------------- 1 | registerEventListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class); 30 | $context->registerCapability(Capabilities::class); 31 | $context->registerNotifierService(Notifier::class); 32 | $context->registerInitialStateProvider(InitialState::class); 33 | } 34 | 35 | public function boot(IBootContext $context): void { 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /lib/BackgroundJob/ZipJob.php: -------------------------------------------------------------------------------- 1 | zipService = $zipService; 32 | $this->notificationService = $notificationService; 33 | $this->logger = $logger; 34 | $this->tempManager = $tempManager; 35 | } 36 | 37 | public function getUid(): string { 38 | return $this->argument['uid']; 39 | } 40 | 41 | public function getFileIds(): array { 42 | return $this->argument['fileIds']; 43 | } 44 | 45 | public function getTarget(): string { 46 | return $this->argument['target']; 47 | } 48 | 49 | protected function run($argument) { 50 | try { 51 | $file = $this->zipService->zip($this->getUid(), $this->getFileIds(), $this->getTarget()); 52 | $this->notificationService->sendNotificationOnSuccess($this, $file); 53 | } catch (\Throwable $e) { 54 | $this->logger->error('Failed to create zip archive', ['exception' => $e]); 55 | $this->notificationService->sendNotificationOnFailure($this); 56 | } finally { 57 | $this->tempManager->clean(); 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /lib/Capabilities.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'apiVersion' => 'v1' 19 | ] 20 | ]; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/Controller/ZipController.php: -------------------------------------------------------------------------------- 1 | zipService = $zipService; 31 | $this->logger = $logger; 32 | } 33 | 34 | /** 35 | * @NoAdminRequired 36 | * 37 | * @param int[] $fileIds The fileIds to zip up 38 | * @param string $target The target location (relative to the users file root) 39 | */ 40 | public function zip(array $fileIds, string $target) { 41 | try { 42 | $this->zipService->createZipJob($fileIds, $target); 43 | return new DataResponse([]); 44 | } catch (MaximumSizeReachedException $e) { 45 | return new DataResponse('Failed to add zip job', Http::STATUS_REQUEST_ENTITY_TOO_LARGE); 46 | } catch (\Exception $e) { 47 | $this->logger->error('Failed to add zip job', ['exception' => $e]); 48 | return new DataResponse('Failed to add zip job', Http::STATUS_INTERNAL_SERVER_ERROR); 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /lib/Exceptions/MaximumSizeReachedException.php: -------------------------------------------------------------------------------- 1 | config = $config; 20 | } 21 | 22 | public function getKey(): string { 23 | return 'max_compress_size'; 24 | } 25 | 26 | public function getData() { 27 | return (int)$this->config->getAppValue(Application::APP_NAME, $this->getKey(), (string)-1); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /lib/Listener/LoadAdditionalListener.php: -------------------------------------------------------------------------------- 1 | factory = $factory; 29 | $this->url = $urlGenerator; 30 | } 31 | 32 | public function getID(): string { 33 | return 'files_zip'; 34 | } 35 | 36 | public function getName(): string { 37 | return $this->factory->get('files_zip')->t('Zipper'); 38 | } 39 | 40 | public function prepare(INotification $notification, string $languageCode): INotification { 41 | if ($notification->getApp() !== 'files_zip') { 42 | throw new InvalidArgumentException('Application should be files_zip instead of ' . $notification->getApp()); 43 | } 44 | 45 | $l = $this->factory->get('files_zip', $languageCode); 46 | 47 | switch ($notification->getSubject()) { 48 | case self::TYPE_SCHEDULED: 49 | $parameters = $notification->getSubjectParameters(); 50 | $notification->setRichSubject($l->t('A Zip archive {target} will be created.'), [ 51 | 'target' => [ 52 | 'type' => 'highlight', 53 | 'id' => $notification->getObjectId(), 54 | 'name' => $parameters['target-name'], 55 | ] 56 | ]); 57 | break; 58 | case self::TYPE_SUCCESS: 59 | $parameters = $notification->getSubjectParameters(); 60 | $notification->setRichSubject($l->t('Your files have been stored as a Zip archive in {path}.'), [ 61 | 'path' => [ 62 | 'type' => 'file', 63 | 'id' => $parameters['fileid'], 64 | 'name' => $parameters['name'], 65 | 'path' => $parameters['path'] 66 | ] 67 | ]); 68 | break; 69 | case self::TYPE_FAILURE: 70 | $parameters = $notification->getSubjectParameters(); 71 | $notification->setRichSubject($l->t('Creating the Zip file {path} failed.'), [ 72 | 'path' => [ 73 | 'type' => 'highlight', 74 | 'id' => $notification->getObjectId(), 75 | 'name' => basename($parameters['target']), 76 | ] 77 | ]); 78 | break; 79 | default: 80 | throw new InvalidArgumentException(); 81 | } 82 | $notification->setIcon($this->url->getAbsoluteURL($this->url->imagePath('files_zip', 'files_zip-dark.svg'))); 83 | $this->setParsedSubjectFromRichSubject($notification); 84 | return $notification; 85 | } 86 | 87 | protected function setParsedSubjectFromRichSubject(INotification $notification): void { 88 | $placeholders = $replacements = []; 89 | foreach ($notification->getRichSubjectParameters() as $placeholder => $parameter) { 90 | $placeholders[] = '{' . $placeholder . '}'; 91 | if ($parameter['type'] === 'file') { 92 | $replacements[] = $parameter['path']; 93 | } else { 94 | $replacements[] = $parameter['name']; 95 | } 96 | } 97 | 98 | $notification->setParsedSubject(str_replace($placeholders, $replacements, $notification->getRichSubject())); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /lib/Service/NotificationService.php: -------------------------------------------------------------------------------- 1 | notificationManager = $notificationManager; 25 | } 26 | 27 | public function sendNotificationOnPending($userId, $target): void { 28 | $notification = $this->buildScheduledNotification($userId, $target) 29 | ->setDateTime(new DateTime()); 30 | $this->notificationManager->notify($notification); 31 | } 32 | 33 | public function sendNotificationOnSuccess(ZipJob $job, File $file): void { 34 | $this->notificationManager->markProcessed($this->buildScheduledNotification($job->getUid(), $job->getTarget())); 35 | $notification = $this->notificationManager->createNotification(); 36 | $notification->setUser($job->getUid()) 37 | ->setApp('files_zip') 38 | ->setDateTime(new DateTime()) 39 | ->setObject('target', md5($job->getTarget())) 40 | ->setSubject(Notifier::TYPE_SUCCESS, ['fileid' => $file->getId(), 'name' => basename($job->getTarget()), 'path' => dirname($job->getTarget())]); 41 | $this->notificationManager->notify($notification); 42 | } 43 | 44 | public function sendNotificationOnFailure(ZipJob $job): void { 45 | $this->notificationManager->markProcessed($this->buildScheduledNotification($job->getUid(), $job->getTarget())); 46 | $notification = $this->notificationManager->createNotification(); 47 | $notification->setUser($job->getUid()) 48 | ->setApp('files_zip') 49 | ->setDateTime(new DateTime()) 50 | ->setObject('job', (string)$job->getId()) 51 | ->setSubject(Notifier::TYPE_FAILURE, ['target' => $job->getTarget()]); 52 | $this->notificationManager->notify($notification); 53 | } 54 | 55 | private function buildScheduledNotification(string $uid, string $target): INotification { 56 | $notification = $this->notificationManager->createNotification(); 57 | $notification->setUser($uid) 58 | ->setApp('files_zip') 59 | ->setObject('target', md5($target)) 60 | ->setSubject(Notifier::TYPE_SCHEDULED, [ 61 | 'directory' => dirname($target), 62 | 'directory-name' => basename(dirname($target)), 63 | 'target-name' => basename($target), 64 | ]); 65 | return $notification; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /lib/Service/ZipService.php: -------------------------------------------------------------------------------- 1 | userSession->getUser(); 56 | if ($user === null) { 57 | throw new Exception('No user session available'); 58 | } 59 | if (strlen($target) === 0) { 60 | throw new Exception('The target is invalid'); 61 | } 62 | 63 | $this->verifyAndGetFiles($user->getUID(), $fileIds, $target); 64 | 65 | $this->jobList->add(ZipJob::class, [ 66 | 'uid' => $user->getUID(), 67 | 'fileIds' => $fileIds, 68 | 'target' => $target, 69 | ]); 70 | $this->notificationService->sendNotificationOnPending($user->getUID(), $target); 71 | } 72 | 73 | /** 74 | * @throws NotPermittedException 75 | * @throws NoUserException 76 | * @throws TargetAlreadyExists 77 | * @throws LockedException 78 | * @throws MaximumSizeReachedException 79 | */ 80 | public function zip(string $uid, array $fileIds, string $target): File { 81 | try { 82 | $this->userSession->setVolatileActiveUser($this->userManager->get($uid)); 83 | $userFolder = $this->rootFolder->getUserFolder($uid); 84 | 85 | $files = $this->verifyAndGetFiles($uid, $fileIds, $target); 86 | 87 | $targetNode = $userFolder->newFile($target); 88 | $outStream = $targetNode->fopen('w'); 89 | 90 | $countStream = CountWrapper::wrap($outStream, function ($readSize, $writtenSize) use ($targetNode) { 91 | $targetNode->getStorage()->getCache()->update($targetNode->getId(), ['size' => $writtenSize]); 92 | $targetNode->getStorage()->getPropagator()->propagateChange($targetNode->getInternalPath(), $this->timeFactory->getTime(), $writtenSize); 93 | }); 94 | 95 | $zip = new ZipStreamer([ 96 | 'outstream' => $countStream, 97 | 'zip64' => true, 98 | ]); 99 | 100 | foreach ($files as $node) { 101 | $this->addNode($zip, $node, ''); 102 | } 103 | 104 | $zip->finalize(); 105 | 106 | fclose($outStream); 107 | 108 | return $targetNode; 109 | } finally { 110 | $this->userSession->setVolatileActiveUser(null); 111 | } 112 | } 113 | 114 | private function verifyAndGetFiles($uid, $fileIds, $target): array { 115 | $userFolder = $this->rootFolder->getUserFolder($uid); 116 | 117 | try { 118 | $userFolder->get($target); 119 | throw new TargetAlreadyExists(); 120 | } catch (NotFoundException $e) { 121 | // Expected behavior that the file does not exist yet 122 | } 123 | 124 | $files = []; 125 | $size = 0; 126 | foreach ($fileIds as $fileId) { 127 | $nodes = $userFolder->getById($fileId); 128 | 129 | if (count($nodes) === 0) { 130 | continue; 131 | } 132 | 133 | /** @var Node $node */ 134 | $node = array_pop($nodes); 135 | 136 | // Skip incoming shares without download permission 137 | $storage = $node->getStorage(); 138 | if ($node->isShared() && $storage->instanceOfStorage(SharedStorage::class) && method_exists(IShare::class, 'getAttributes')) { 139 | /** @var SharedStorage $storage */ 140 | $share = $storage->getShare(); 141 | $hasShareAttributes = $share && $share->getAttributes() instanceof IAttributes; 142 | if ($hasShareAttributes && $share->getAttributes()->getAttribute('permissions', 'download') === false) { 143 | continue; 144 | } 145 | } 146 | 147 | $files[] = $node; 148 | $size += $node->getSize(); 149 | } 150 | 151 | $maxSize = (int)$this->config->getAppValue(Application::APP_NAME, 'max_compress_size', -1); 152 | if ($maxSize !== -1 && $size > $maxSize) { 153 | throw new MaximumSizeReachedException(); 154 | } 155 | 156 | return $files; 157 | } 158 | 159 | private function addNode(ZipStreamer $streamer, Node $node, string $path): void { 160 | if ($node instanceof Folder) { 161 | $this->addFolder($streamer, $node, $path); 162 | } 163 | 164 | if ($node instanceof File) { 165 | $this->addFile($streamer, $node, $path); 166 | } 167 | } 168 | 169 | private function addFolder(ZipStreamer $streamer, Folder $folder, string $path): void { 170 | $nodes = $folder->getDirectoryListing(); 171 | 172 | if (count($nodes) === 0) { 173 | $streamer->addEmptyDir($path . $folder->getName(), [ 174 | 'timestamp' => $folder->getMTime(), 175 | ]); 176 | } 177 | 178 | foreach ($nodes as $node) { 179 | $this->addNode($streamer, $node, $path . $folder->getName() . '/'); 180 | } 181 | } 182 | 183 | private function addFile(ZipStreamer $streamer, File $file, string $path): void { 184 | $stream = $file->fopen('r'); 185 | $streamer->addFileFromStream($stream, $path . $file->getName(), [ 186 | 'timestamp' => $file->getMTime(), 187 | ]); 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "files_zip", 3 | "description": "Compress selected files to a zip archive", 4 | "version": "2.2.0-dev.0", 5 | "author": "Julius Härtl 5 | 25 | 61 | 70 | -------------------------------------------------------------------------------- /src/main.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | export {} 6 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | import { registerFileAction, FileAction, Node, Permission, View } from '@nextcloud/files' 6 | import { translate as t } from '@nextcloud/l10n' 7 | import ZipIcon from '@mdi/svg/svg/zip-box-outline.svg?raw' 8 | import { action } from './services' 9 | 10 | const fileAction = new FileAction({ 11 | id: 'files_zip', 12 | order: 60, 13 | iconSvgInline() { 14 | return ZipIcon 15 | }, 16 | displayName() { 17 | return t('files_zip', 'Compress to Zip') 18 | }, 19 | enabled(nodes: Node[], view: View) { 20 | if (view.id === 'trashbin') { 21 | return false 22 | } 23 | return nodes.filter((node) => (node.permissions & Permission.READ) !== 0).length > 0 24 | }, 25 | async execBatch(nodes: Node[], view: View, dir: string) { 26 | const result = action(dir, nodes) 27 | return Promise.all(nodes.map(() => result)) 28 | }, 29 | async exec(node: Node, view: View, dir: string): Promise { 30 | const result = action(dir, [node]) 31 | return result 32 | }, 33 | }) 34 | 35 | registerFileAction(fileAction) 36 | -------------------------------------------------------------------------------- /src/services.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | import axios from '@nextcloud/axios' 6 | import { showSuccess, showError } from '@nextcloud/dialogs' 7 | import type { Node } from '@nextcloud/files' 8 | import { formatFileSize } from '@nextcloud/files' 9 | import { generateOcsUrl } from '@nextcloud/router' 10 | import Vue from 'vue' 11 | import Modal from './Modal.vue' 12 | import { loadState } from '@nextcloud/initial-state' 13 | import { translate as t, translatePlural as n } from '@nextcloud/l10n' 14 | 15 | Vue.prototype.t = t 16 | Vue.prototype.n = n 17 | 18 | const MAX_COMPRESS_SIZE = loadState('files_zip', 'max_compress_size', -1) 19 | 20 | const askForName = async (nodes: Node[]) => { 21 | const modal = document.createElement('div') 22 | modal.id = 'files_zip_modal' 23 | document.body.appendChild(modal) 24 | const App = Vue.extend(Modal) 25 | const modalInstance = new App({ 26 | propsData: { 27 | nodes, 28 | }, 29 | }) 30 | modalInstance.$mount('#files_zip_modal') 31 | 32 | const promise = new Promise((resolve) => { 33 | modalInstance.$on('confirm', (result: string) => { 34 | modalInstance.$destroy() 35 | resolve(result) 36 | }) 37 | modalInstance.$on('closing', () => { 38 | modalInstance.$destroy() 39 | resolve(null) 40 | }) 41 | }) 42 | 43 | return promise 44 | } 45 | 46 | export const getArchivePath = (nodes: Node[]) => { 47 | const currentDirectory = nodes[0].path 48 | const currentDirectoryName = currentDirectory.split('/').slice(-1).pop() 49 | 50 | return (currentDirectoryName === '' ? t('files_zip', 'Archive') : currentDirectoryName) + '.zip' 51 | } 52 | 53 | const compressFiles = async (fileIds: number[], target: string) => { 54 | try { 55 | await axios.post(generateOcsUrl('apps/files_zip/api/v1/zip'), { 56 | fileIds, 57 | target, 58 | }) 59 | showSuccess(t('files_zip', 'Creating Zip archive started. We will notify you as soon as the archive is available.')) 60 | } catch (e) { 61 | showError(t('files_zip', 'An error happened when trying to compress the file.')) 62 | } 63 | } 64 | 65 | export const action = async (dir: string, nodes: Node[]) => { 66 | const fileIds: number[] = nodes.map(file => file.fileid) as number[] 67 | const size = nodes.reduce((carry: number, file: Node) => (file?.size ?? 0) + carry, 0) 68 | 69 | if (MAX_COMPRESS_SIZE !== -1 && (size ?? 0) > MAX_COMPRESS_SIZE) { 70 | showError(t('files_zip', 'Only files up to {maxSize} can be compressed.', { 71 | maxSize: formatFileSize(MAX_COMPRESS_SIZE), 72 | })) 73 | return null 74 | } 75 | 76 | const target = await askForName(nodes) 77 | if (target === null) { 78 | return null 79 | } 80 | 81 | await compressFiles(fileIds, dir + '/' + target) 82 | 83 | return true 84 | } 85 | -------------------------------------------------------------------------------- /src/types.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | declare module '*.svg?raw' { 6 | const content: string 7 | export default content 8 | } 9 | -------------------------------------------------------------------------------- /stylelint.config.cjs: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | const stylelintConfig = require('@nextcloud/stylelint-config') 6 | 7 | module.exports = stylelintConfig 8 | -------------------------------------------------------------------------------- /tests/Feature/ZipFeatureTest.php: -------------------------------------------------------------------------------- 1 | createUser(self::TEST_USER1, self::TEST_USER1); 34 | \OC::$server->get(IUserManager::class)->registerBackend($backend); 35 | } 36 | 37 | public function setUp(): void { 38 | parent::setUp(); 39 | $this->rootFolder = \OC::$server->get(IRootFolder::class); 40 | $this->zipService = \OC::$server->get(ZipService::class); 41 | $folder = $this->loginAndGetUserFolder(self::TEST_USER1); 42 | foreach (self::TEST_FILES as $filename) { 43 | $folder->delete($filename); 44 | } 45 | } 46 | 47 | public function testZipJob() { 48 | $this->loginAndGetUserFolder(self::TEST_USER1) 49 | ->delete('/pendingzipfile.zip'); 50 | 51 | $files = []; 52 | foreach (self::TEST_FILES as $filename) { 53 | $files[] = $this->loginAndGetUserFolder(self::TEST_USER1) 54 | ->newFile($filename, $filename); 55 | } 56 | 57 | 58 | $fileIds = array_map(function ($file) { 59 | return $file->getId(); 60 | }, $files); 61 | $target = '/pendingzipfile.zip'; 62 | $this->zipService->createZipJob($fileIds, $target); 63 | 64 | $jobList = \OCP\Server::get(\OCP\BackgroundJob\IJobList::class); 65 | $this->assertTrue($jobList->has(\OCA\FilesZip\BackgroundJob\ZipJob::class, [ 66 | 'uid' => self::TEST_USER1, 67 | 'fileIds' => $fileIds, 68 | 'target' => $target, 69 | ])); 70 | } 71 | 72 | public function testZip() { 73 | $target = '/zipfile.zip'; 74 | 75 | $userFolder = $this->loginAndGetUserFolder(self::TEST_USER1); 76 | $userFolder->delete($target); 77 | 78 | $files = []; 79 | foreach (self::TEST_FILES as $filename) { 80 | $files[] = $this->loginAndGetUserFolder(self::TEST_USER1) 81 | ->newFile($filename, $filename); 82 | } 83 | 84 | 85 | $fileIds = array_map(function ($file) { 86 | return $file->getId(); 87 | }, $files); 88 | try { 89 | $this->zipService->zip(self::TEST_USER1, $fileIds, $target); 90 | } catch (\PHPUnit\Framework\Error\Deprecated $e) { 91 | $this->markTestSkipped('Test skipped due to upstream issue https://github.com/DeepDiver1975/PHPZipStreamer/pull/11'); 92 | } 93 | /** @var File $node */ 94 | $node = $userFolder->get($target); 95 | $this->assertTrue($userFolder->nodeExists($target)); 96 | $this->assertEquals('application/zip', $node->getMimetype()); 97 | $this->assertEquals(671, $node->getSize()); 98 | 99 | $path = $node->getStorage()->getLocalFile($node->getInternalPath()); 100 | $zip = new \OC\Archive\ZIP($path); 101 | self::assertEquals(self::TEST_FILES, $zip->getFiles()); 102 | 103 | $i = 0; 104 | foreach (self::TEST_FILES as $filename) { 105 | self::assertEquals($files[$i++]->getSize(), $zip->filesize($filename)); 106 | } 107 | } 108 | 109 | private function loginAndGetUserFolder(string $userId) { 110 | $this->loginAsUser($userId); 111 | return $this->rootFolder->getUserFolder($userId); 112 | } 113 | 114 | private function shareFileWithUser(File $file, $owner, $user) { 115 | $this->shareManager = \OC::$server->getShareManager(); 116 | $share1 = $this->shareManager->newShare(); 117 | $share1->setNode($file) 118 | ->setSharedBy($owner) 119 | ->setSharedWith($user) 120 | ->setShareType(IShare::TYPE_USER) 121 | ->setPermissions(19); 122 | $share1 = $this->shareManager->createShare($share1); 123 | $share1->setStatus(IShare::STATUS_ACCEPTED); 124 | $this->shareManager->updateShare($share1); 125 | } 126 | 127 | public function tearDown(): void { 128 | parent::tearDown(); 129 | $folder = $this->rootFolder->getUserFolder(self::TEST_USER1); 130 | foreach (self::TEST_FILES as $filename) { 131 | $folder->delete($filename); 132 | } 133 | } 134 | } 135 | -------------------------------------------------------------------------------- /tests/Unit/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nextcloud/files_zip/d0365fffcbf134daae95554b31952ff0ad45afdb/tests/Unit/.gitkeep -------------------------------------------------------------------------------- /tests/bootstrap.php: -------------------------------------------------------------------------------- 1 | addPsr4('Test\\', OC::$SERVERROOT . '/tests/lib/', true); 11 | \OC::$composerAutoloader->addPsr4('Tests\\', OC::$SERVERROOT . '/tests/', true); 12 | 13 | OC_App::loadApp('files_zip'); 14 | 15 | OC_Hook::clear(); 16 | -------------------------------------------------------------------------------- /tests/phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 12 | 13 | . 14 | 15 | 16 | 17 | ../ 18 | 19 | ../tests 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@vue/tsconfig", 3 | "compilerOptions": { 4 | "allowSyntheticDefaultImports": true, 5 | "declaration": true, 6 | "esModuleInterop": true, 7 | "lib": ["DOM", "ESNext"], 8 | "noEmit": true, 9 | "outDir": "./js", 10 | "plugins": [ 11 | { "name": "typescript-plugin-css-modules" } 12 | ], 13 | "sourceMap": true 14 | }, 15 | "exclude": [ 16 | "js", 17 | "lib", 18 | "node_modules", 19 | "vendor" 20 | ], 21 | "vueCompilerOptions": { 22 | "target": 2.7 23 | } 24 | } -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors 3 | * SPDX-License-Identifier: AGPL-3.0-or-later 4 | */ 5 | import { createAppConfig } from '@nextcloud/vite-config' 6 | 7 | export default createAppConfig({ 8 | main: 'src/main.ts', 9 | }, { 10 | config: { 11 | css: { 12 | modules: { 13 | localsConvention: 'camelCase', 14 | }, 15 | }, 16 | }, 17 | }) 18 | --------------------------------------------------------------------------------