Compare commits

..

121 Commits

Author SHA1 Message Date
Josh f69ed341b0 fixup: lint sigh
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-07 17:07:10 -04:00
Josh d1a03b9c1f fixup: xxx
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-07 17:07:10 -04:00
Josh b48550ec6c fixup: lint + logic mistake in newToken
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-07 17:07:10 -04:00
Josh 0c9b059e10 refactor(auth): PublicKeyTokenProvider clean-up
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-07 17:07:10 -04:00
Robin Appelman 5660a73a3d Merge pull request #54238 from nextcloud/extra_sensitive_values
feat: allow admins to configure additional sensitive config values
2025-08-07 15:08:56 +02:00
Carl Schwan 43aa92f6c3 Merge pull request #54275 from nextcloud/fix-order-metadata-deletion
fix(trash): Fix order of metadata deletion
2025-08-07 15:04:49 +02:00
John Molakvoæ 2e0baa5801 Merge pull request #54279 from nextcloud/fix/tags-icon 2025-08-07 11:57:20 +02:00
John Molakvoæ a488bff27a Merge pull request #54309 from nextcloud/fix/dav-wrong-return-type 2025-08-07 11:35:45 +02:00
Carl Schwan 9fef97c9ec fix(trash): Fix order of metadata deletion
First query metadata for live photo and then delete the metadata, by
making the SyncLivePhotosListener priority higher than the default.

Partially fix #54274

Signed-off-by: Carl Schwan <carl.schwan@nextclound.com>
2025-08-07 11:19:30 +02:00
nextcloud-command f16c449275 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-07 07:47:39 +00:00
skjnldsv 7139cac9d8 fix(systemtags): outline icon css selector
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-08-07 07:45:40 +00:00
Nextcloud bot f0c392e21c fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-07 00:12:14 +00:00
Ferdinand Thiessen 378ddda301 fix(files_versions): has-preview must be either true or false
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-07 01:24:07 +02:00
Ferdinand Thiessen 6b0bce8a2d fix(files_trashbin): has-preview must return true or false
Currently it returned the boolean value, but PHP will turn it into an
integer...

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-07 01:23:10 +02:00
dependabot[bot] 58ae326f83 Merge pull request #54299 from nextcloud/dependabot/npm_and_yarn/tmp-0.2.4 2025-08-06 23:00:14 +00:00
dependabot[bot] 7f3fcdf495 chore(deps): bump tmp from 0.2.3 to 0.2.4
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.3 to 0.2.4.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.4)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-07 00:46:45 +02:00
Ferdinand Thiessen 09b0698255 Merge pull request #54298 from nextcloud/fix/dav/addressbook-permissions-principal
fix(dav): calculate permissions based on addressbook principal
2025-08-06 23:36:39 +02:00
Matthieu Gallien e7a28e787d Merge pull request #54285 from nextcloud/automated/noid/master-update-code-signing-crl
[master] fix(security): Update code signing revocation list
2025-08-06 21:45:22 +02:00
Daniel Calviño Sánchez 3ba7888537 Merge pull request #53950 from nextcloud/fix-button-alignment-for-email-templates-in-outlook
fix: Fix button alignment for email templates in Outlook
2025-08-06 19:43:11 +02:00
Christoph Wurst 0c4bb5e8c5 fix(dav): calculate permissions based on addressbook principal
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2025-08-06 18:15:43 +02:00
nextcloud-command 67610f387c fix(security): Update code signing revocation list
Signed-off-by: GitHub <noreply@github.com>
2025-08-06 14:57:14 +00:00
Daniel Calviño Sánchez 8b7aad82c7 fix: Fix button alignment for email templates in Outlook
The button group generated in email templates is expected to show the
two buttons side by side in a single row, but in Outlook both buttons
took the full width of the wrapper row and each button was shown in
its own row. To solve that the buttons are wrapped in an additional
table that shows each button in its own cell, limiting their width and
showing them in a single row; this is done conditionally and only
applied in Outlook, so it should not affect other clients.

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-08-06 15:18:01 +02:00
Hamza 6e9d48b558 Merge pull request #50092 from nextcloud/feat/sync-truncation
feat(cardav): support result truncation for addressbook federation
2025-08-06 14:57:13 +02:00
Daniel Kesselberg 13f25c9316 fix(carddav): return correct sync token for non-truncated requests
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
2025-08-06 14:32:25 +02:00
Daniel Kesselberg b54c5392b6 feat(carddav): handle truncated non-initial requests
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
2025-08-06 14:04:55 +02:00
Hamza Mahjoubi 36d9fcbb4d feat(cardav): support result truncation for addressbook federation
Signed-off-by: Hamza Mahjoubi <hamzamahjoubi221@gmail.com>
2025-08-06 14:04:55 +02:00
John Molakvoæ b514d75323 Merge pull request #51855 from Phreeman33/master
fix: display chinese character avatar
2025-08-06 13:43:23 +02:00
Ferdinand Thiessen c67bdf02f0 chore: add missing license ref for new fonts
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-06 13:12:57 +02:00
Ferdinand Thiessen 7e76c91677 fix: resolve psalm errors
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-06 12:52:50 +02:00
John Molakvoæ 535bf3af9f Merge pull request #54049 from nextcloud/fix/only-show-reshare-if-there-is 2025-08-06 12:40:28 +02:00
Ferdinand Thiessen 6cae7d1f81 Merge pull request #54183 from nextcloud/refactor/unified-search-
refactor(UnifiedSearch): use `NcHeaderButton` for proper styles
2025-08-06 12:24:43 +02:00
Phreeman33 655ef1031b fix: display chinese character avatar
Signed-off-by: Phreeman33 <12772373+Phreeman33@users.noreply.github.com>
2025-08-06 12:24:09 +02:00
John Molakvoæ 48dc04b571 Merge pull request #54237 from nextcloud/test/fix-cypress 2025-08-06 11:48:31 +02:00
nextcloud-command 3ff3ceae5d chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-06 09:43:08 +00:00
Ferdinand Thiessen 6adbe44976 refactor(UnifiedSearch): use NcHeaderButton for proper styles
Allowing to have the new styles from
https://github.com/nextcloud/server/pull/54178 and
https://github.com/nextcloud-libraries/nextcloud-vue/pull/7242

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-06 09:41:09 +00:00
nextcloud-command 96011a1579 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-06 09:40:06 +00:00
Ferdinand Thiessen 61c9a6eb22 fix(files_sharing): only show "shared with me" information if shared
The variable is intialized to `{}` which is truthy, so instead just
check if there is a user assigned to the share info.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-06 09:37:58 +00:00
Ferdinand Thiessen 7c69862a5d Merge pull request #54186 from nextcloud/chore/refactor-header-scss
refactor: de-duplicate header styles, add comments and mark deprecations
2025-08-06 11:35:28 +02:00
Ferdinand Thiessen 761093daf8 Merge pull request #54264 from nextcloud/smb-timeout-unavailable
fix: handle smb timeouts as storage not available
2025-08-06 11:27:02 +02:00
Ferdinand Thiessen 1fdda4b202 Merge pull request #54043 from nextcloud/fix/mysql-removed-auth
fix(db): use `caching_sha2_password` for MySQL
2025-08-06 11:26:30 +02:00
Joas Schilling 84323ff6dd Merge pull request #54241 from nextcloud/feat/noid/add-busy-status-capability
feat(userstatus): add busy capability
2025-08-06 10:42:25 +02:00
Richard Steinmetz ee6596782f Merge pull request #54232 from nextcloud/feat/notifications/preload-many
feat(notifications): provide method to preload many notifications at once
2025-08-06 09:57:53 +02:00
Richard Steinmetz ad39dab6ca feat(notifications): provide method to preload many notifications at once
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
2025-08-06 09:22:56 +02:00
nextcloud-command 89577f6f94 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-06 05:37:57 +00:00
Ferdinand Thiessen ab49a6d8a9 refactor: de-duplicate header styles, add comments and mark deprecations
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-06 05:36:05 +00:00
John Molakvoæ 687df7c8ab Merge pull request #54165 from nextcloud/fix/unique-vcategory
fix(core): ensure unique vcategory
2025-08-06 07:13:46 +02:00
Nextcloud bot 1064c676cc fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-06 00:12:56 +00:00
Ferdinand Thiessen 88be308b06 test(cypress): split helpers for files actions to make tests less flaky
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-05 23:49:46 +02:00
skjnldsv 9aac182109 fix(core): ensure unique vcategory
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-08-05 22:11:21 +02:00
Kate 51e5f7b159 Merge pull request #54125 from nextcloud/s3-multipart-size-check 2025-08-05 20:57:15 +02:00
Ferdinand Thiessen c695bf1a95 Merge pull request #53437 from nextcloud/refactor/files-hotkeys
refactor(files): move hotkey handling to composable
2025-08-05 20:42:43 +02:00
Ferdinand Thiessen b814f3bba6 fix(db): use caching_sha2_password for MySQL
`caching_sha2_password` was added in 8.0.4 as the default
authentication plugin. `mysql_native_password` is deprecated since then.
In MySQL 8.4 it was disabled by default so a user need to manually
reenable it to make it work.
In MySQL 9.0 it is removed and causes the following error:

> SQLSTATE[HY000] [1524] Plugin 'mysql_native_password' is not loaded

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-05 20:40:38 +02:00
Robin Appelman 97efc95efc fix: better object store write error propagation
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-05 19:17:58 +02:00
Robin Appelman 83b8a390cd fix: always do stream counting for object store upload
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-05 19:17:58 +02:00
Robin Appelman 398b106f0c fix: validate written size for s3 multipart uploads
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-05 19:17:58 +02:00
Robin Appelman 064e1133f5 feat: allow admins to configure additional sensitive config values
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-05 19:16:14 +02:00
nextcloud-command 2cf7e038b3 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-05 17:08:50 +00:00
Ferdinand Thiessen 3a5769e8f9 refactor(files): move hotkey handling to composable
This is a composable - not a service, because it is using the
`useHotKey` composable. At this moment it works, but in general
its only safe to put composables into `setup`-context.

This makes it future prove.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-08-05 19:00:32 +02:00
Joas Schilling db8dd9f7f6 Merge pull request #54207 from nextcloud/feat/noid/cache-user-keys
Cache IdentityProof keys
2025-08-05 18:43:56 +02:00
Ferdinand Thiessen ad85d65064 Merge pull request #54077 from nextcloud/jtr-files-detection-refactor-finfo
refactor(IMimeTypeDetector): streamline + minor tidying
2025-08-05 18:10:46 +02:00
Robin Appelman 6f0120af16 fix: handle smb timeouts as storage not available
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-05 17:39:12 +02:00
Marcel Müller 520d8beaf5 feat: Cache user keys
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
2025-08-05 16:42:14 +02:00
John Molakvoæ a4795a216c Merge pull request #54233 from nextcloud/fix/ignore-shares-in-encrypt-all 2025-08-05 15:31:35 +02:00
Anna Larch b819d71337 feat(userstatus): add busy capability
Signed-off-by: Anna Larch <anna@nextcloud.com>
2025-08-05 14:52:33 +02:00
Josh 2aa6894c38 Merge pull request #54239 from nextcloud/cleanup-appframework-spreed
refactor(AppFramework): drop unused spreed/Talk fallback
2025-08-05 08:42:31 -04:00
Joas Schilling c9fa1db925 Merge pull request #54230 from nextcloud/bugfix/spreed-15625/log-query-with-immutable-dates
fix(logging): Fix query logging with DateTimeImmutable parameters
2025-08-05 12:29:04 +02:00
Joas Schilling ff3043346a Merge pull request #54196 from nextcloud/enh/noid/taskprocessing-lazy-config
[TaskProcessing] Load and store some config keys lazily
2025-08-05 12:28:34 +02:00
Joas Schilling a3f1b079bb Merge pull request #54203 from nextcloud/oci-string-length-empty
fix: fix oci string length with empty strings
2025-08-05 12:18:41 +02:00
Joas Schilling 1750708509 Merge pull request #54240 from nextcloud/fix/noid/oracle-test-failure
fix(caldav): get UID value
2025-08-05 12:18:07 +02:00
Joas Schilling 12f31b69a0 Merge pull request #54250 from nextcloud/revert/50258
Revert "feat: Implement Directory Check"
2025-08-05 12:11:05 +02:00
nextcloud-command d24f0a3a54 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-05 09:25:58 +00:00
Joas Schilling 78dcf3744d Revert "feat: Implement Directory Check"
This reverts commit feae8ba16a.
2025-08-05 11:18:50 +02:00
Nextcloud bot ccda64fc66 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-05 00:12:37 +00:00
John Molakvoæ 662838b542 Merge pull request #54159 from nextcloud/fix/file-request-enforced 2025-08-04 19:18:26 +02:00
Josh 3535149418 refactor(IMimeTypeDetector): streamline finfo usage + misc tidying
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-04 11:24:58 -04:00
Anna Larch b694d2659b fix(caldav): get UID value
Signed-off-by: Anna Larch <anna@nextcloud.com>
2025-08-04 16:43:50 +02:00
Josh 9195987d14 refactor(AppFramework): drop unused spreed/Talk fallback
No longer needed from what I can tell since #20114 & nextcloud/spreed#3134

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-04 08:59:49 -04:00
Daniel 9c79483392 Merge pull request #54193 from nextcloud/ci/codeql/convert-to-action
ci(codeql): convert codeql integration into a workflow
2025-08-04 12:10:35 +02:00
Côme Chilliet f95fef9938 chore(encryption): Adapt tests to code changes
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2025-08-04 11:53:19 +02:00
Côme Chilliet d711d68701 fix(encryption): Ignore shared files in encrypt-all command
Copying and renaming a share will not encrypt it anyway. It will get
 encrypted when the owner’s files get encrypted.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2025-08-04 10:42:04 +02:00
Julien Veyssier be7ef439cf fix(taskprocessing): move LAZY_CONFIG_KEYS constant to the private namespace
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
2025-08-04 10:11:24 +02:00
Julien Veyssier f22f7311de fix(taskprocessing): fix TaskProcessingTest
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
2025-08-04 10:11:24 +02:00
Julien Veyssier 282bedcfb0 fix(taskprocessing): remove unused psalm baseline entries
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
2025-08-04 10:11:24 +02:00
Julien Veyssier 2e3fa51132 feat(taskprocessing): load and store some config keys lazily
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
2025-08-04 10:11:24 +02:00
Joas Schilling c722f8c88b fix(logging): Fix query logging with DateTimeImmutable parameters
Signed-off-by: Joas Schilling <coding@schilljs.com>
2025-08-04 08:47:55 +02:00
Nextcloud bot 2211390ca5 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-04 00:13:25 +00:00
Joas Schilling 894463b935 Merge pull request #54224 from nextcloud/nickvergessen-patch-1
Update CODEOWNERS
2025-08-03 12:40:08 +02:00
Joas Schilling fbd492ff1c Update CODEOWNERS
Signed-off-by: Joas Schilling <213943+nickvergessen@users.noreply.github.com>
2025-08-03 12:32:11 +02:00
Nextcloud bot 262f647104 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-03 00:12:23 +00:00
nextcloud-command 7f93711e68 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-02 12:24:34 +00:00
skjnldsv 627f8cabd6 fix(files_sharing): ensure password or date is enabled by default to be enforced
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-08-02 12:22:31 +00:00
John Molakvoæ f3d2e53371 Merge pull request #54010 from nextcloud/automated/noid/master-fix-npm-audit 2025-08-02 11:52:43 +02:00
nextcloud-command dca988cf8c chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-02 08:22:38 +00:00
skjnldsv bf6f3d7761 chore: update minor and patch dependencies
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-08-02 10:18:41 +02:00
John Molakvoæ e469d2fdad Merge pull request #54209 from nextcloud/dependabot/npm_and_yarn/wait-on-8.0.4 2025-08-02 09:49:02 +02:00
John Molakvoæ 828007ec5d Merge pull request #54215 from nextcloud/dependabot/npm_and_yarn/marked-16.1.1 2025-08-02 09:48:40 +02:00
John Molakvoæ 219dd00c99 Merge pull request #54211 from nextcloud/dependabot/npm_and_yarn/types/dockerode-3.3.42 2025-08-02 09:48:28 +02:00
John Molakvoæ 0052d77af2 Merge pull request #54212 from nextcloud/dependabot/npm_and_yarn/cypress-split-1.24.20 2025-08-02 09:48:19 +02:00
John Molakvoæ 55a0dfc691 Merge pull request #54208 from nextcloud/dependabot/npm_and_yarn/sass-1.89.2 2025-08-02 09:47:35 +02:00
John Molakvoæ 5b4177a962 Merge pull request #54210 from nextcloud/dependabot/npm_and_yarn/zip.js/zip.js-2.7.71 2025-08-02 09:46:52 +02:00
John Molakvoæ cc7c86b1c1 Merge pull request #54214 from nextcloud/dependabot/npm_and_yarn/vitest/coverage-v8-3.2.4 2025-08-02 09:46:40 +02:00
nextcloud-command 97c3b8389c chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-02 03:22:52 +00:00
dependabot[bot] 0b5ddf82c4 chore(deps): bump marked from 15.0.12 to 16.1.1
Bumps [marked](https://github.com/markedjs/marked) from 15.0.12 to 16.1.1.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v15.0.12...v16.1.1)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.1.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:15:18 +00:00
dependabot[bot] 127a02f9de chore(deps-dev): bump @vitest/coverage-v8 from 3.2.3 to 3.2.4
Bumps [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Commits](https://github.com/vitest-dev/vitest/commits/v3.2.4/packages/coverage-v8)

---
updated-dependencies:
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 3.2.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:14:51 +00:00
dependabot[bot] 02c2e01b97 chore(deps-dev): bump cypress-split from 1.24.18 to 1.24.20
Bumps [cypress-split](https://github.com/bahmutov/cypress-split) from 1.24.18 to 1.24.20.
- [Release notes](https://github.com/bahmutov/cypress-split/releases)
- [Commits](https://github.com/bahmutov/cypress-split/compare/v1.24.18...v1.24.20)

---
updated-dependencies:
- dependency-name: cypress-split
  dependency-version: 1.24.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:13:30 +00:00
dependabot[bot] 57aa99fb96 chore(deps-dev): bump @types/dockerode from 3.3.38 to 3.3.42
Bumps [@types/dockerode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/dockerode) from 3.3.38 to 3.3.42.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/dockerode)

---
updated-dependencies:
- dependency-name: "@types/dockerode"
  dependency-version: 3.3.42
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:12:41 +00:00
dependabot[bot] 2cb552d8e2 chore(deps-dev): bump @zip.js/zip.js from 2.7.62 to 2.7.71
Bumps [@zip.js/zip.js](https://github.com/gildas-lormeau/zip.js) from 2.7.62 to 2.7.71.
- [Release notes](https://github.com/gildas-lormeau/zip.js/releases)
- [Commits](https://github.com/gildas-lormeau/zip.js/compare/v2.7.62...v2.7.71)

---
updated-dependencies:
- dependency-name: "@zip.js/zip.js"
  dependency-version: 2.7.71
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:12:08 +00:00
dependabot[bot] 7750bef6b5 chore(deps-dev): bump wait-on from 8.0.3 to 8.0.4
Bumps [wait-on](https://github.com/jeffbski/wait-on) from 8.0.3 to 8.0.4.
- [Release notes](https://github.com/jeffbski/wait-on/releases)
- [Commits](https://github.com/jeffbski/wait-on/compare/v8.0.3...v8.0.4)

---
updated-dependencies:
- dependency-name: wait-on
  dependency-version: 8.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:11:41 +00:00
dependabot[bot] 99e097d360 chore(deps-dev): bump sass from 1.89.1 to 1.89.2
Bumps [sass](https://github.com/sass/dart-sass) from 1.89.1 to 1.89.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.89.1...1.89.2)

---
updated-dependencies:
- dependency-name: sass
  dependency-version: 1.89.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-02 01:11:13 +00:00
Nextcloud bot 4ce1980eff fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-08-02 00:12:22 +00:00
Robin Appelman 222cbd0af6 fix: fix oci string length with empty strings
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-08-01 17:45:35 +02:00
John Molakvoæ e4ed547bc6 Merge pull request #50099 from nextcloud/jtr/fix-appframework-server-proto 2025-08-01 17:28:37 +02:00
John Molakvoæ 17ae4e767f Merge pull request #52285 from nextcloud/fix/issue-50748-card-object-move 2025-08-01 17:07:30 +02:00
John Molakvoæ 3417581021 Merge pull request #50258 from nextcloud/feat/add-directory-check-workflowengine 2025-08-01 17:01:00 +02:00
skjnldsv d2a20ea1bd chore: update composer
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
2025-08-01 17:00:09 +02:00
John Molakvoæ 4829ac57c1 fix: use OCP\Server
Signed-off-by: John Molakvoæ <skjnldsv@users.noreply.github.com>
2025-08-01 17:00:09 +02:00
Josh 14b4d0327e fix(AppFramework): Log malformed protocol values and unify fallback behavior
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-08-01 17:00:09 +02:00
SebastianKrupinski 49d8e29a18 fix: do not ignore move command object target uri
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2025-08-01 09:36:07 -04:00
nextcloud-command 69a3604d64 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-08-01 09:47:05 +00:00
Robin Windey feae8ba16a feat: Implement Directory Check
* Partially implements #27591

Signed-off-by: Robin Windey <ro.windey@gmail.com>
2025-08-01 09:43:59 +00:00
Richard Steinmetz e2176bcaf1 ci(codeql): convert codeql integration into a workflow
Signed-off-by: Richard Steinmetz <richard@steinmetz.cloud>
2025-08-01 09:54:06 +02:00
611 changed files with 5231 additions and 3662 deletions
+2
View File
@@ -103,3 +103,5 @@ ResponseDefinitions.php @provokateurin @nextcloud/server-backend
# Personal interest
*/Activity/* @nickvergessen @nextcloud/server-backend
*/Notifications/* @nickvergessen @nextcloud/talk-backend
/apps/workflowengine/lib @nickvergessen
+7
View File
@@ -0,0 +1,7 @@
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
name: "CodeQL config"
paths-ignore:
- dist
+47
View File
@@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-or-later
name: "CodeQL Advanced"
on:
push:
branches: [ "master", "stable*" ]
pull_request:
branches: [ "master", "stable*" ]
schedule:
- cron: '28 18 * * 1'
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
- language: javascript-typescript
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
config-file: ./.github/codeql-config.yml
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
-356
View File
File diff suppressed because one or more lines are too long
+526
View File
File diff suppressed because one or more lines are too long
+1
View File
@@ -63,6 +63,7 @@ $cardDavBackend = new CardDavBackend(
Server::get(IUserManager::class),
Server::get(IEventDispatcher::class),
Server::get(\OCA\DAV\CardDAV\Sharing\Backend::class),
Server::get(IConfig::class),
);
$debugging = Server::get(IConfig::class)->getSystemValue('debug', false);
+1 -1
View File
@@ -80,7 +80,7 @@ OC.L10N.register(
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på %1$s for hele dagen","Om %n måneder den %1$s for hele dagen"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på %1$s for hele dagen","Om %n år den %1$s for hele dagen"],
"In the past on %1$s between %2$s - %3$s" : "Tidligere den %1$s mellem %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem% %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"],
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på %1$s mellem %2$s - %3$s","Om %n timer den %1$s mellem %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på %1$s mellem %2$s - %3$s","Om %n dage den %1$s mellem %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på %1$s mellem %2$s - %3$s","Om %n uger den %1$s mellem %2$s - %3$s"],
+1 -1
View File
@@ -78,7 +78,7 @@
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["I en måned på %1$s for hele dagen","Om %n måneder den %1$s for hele dagen"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["I et år på %1$s for hele dagen","Om %n år den %1$s for hele dagen"],
"In the past on %1$s between %2$s - %3$s" : "Tidligere den %1$s mellem %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem% %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"],
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["I et minut på %1$s mellem %2$s - %3$s","Om %n minutter den %1$s mellem %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["I en time på %1$s mellem %2$s - %3$s","Om %n timer den %1$s mellem %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["I en dag på %1$s mellem %2$s - %3$s","Om %n dage den %1$s mellem %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["I en uge på %1$s mellem %2$s - %3$s","Om %n uger den %1$s mellem %2$s - %3$s"],
+25 -25
View File
@@ -208,28 +208,28 @@ OC.L10N.register(
"{actor} unshared address book {addressbook} from you" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con Ud.",
"You unshared address book {addressbook} from {user}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir la libreta de direcciones {addressbook} consigo mismo",
"You shared address book {addressbook} with group {group}" : "Has compartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir su propia libreta de direcciones {addressbook}",
"You shared address book {addressbook} with group {group}" : "Ud. ha compartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartido la libreta de direcciones {addressbook} con el grupo {group}",
"You unshared address book {addressbook} from group {group}" : "Has descompartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}",
"You created contact {card} in address book {addressbook}" : "Has creado un contacto {card} en la libreta de direcciones {addressbook}",
"You unshared address book {addressbook} from group {group}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}",
"You created contact {card} in address book {addressbook}" : "Ud. ha creado un contacto {card} en la libreta de direcciones {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Has eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Ud. ha eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Has actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong> ",
"You updated contact {card} in address book {addressbook}" : "Ud. ha actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong>",
"Accounts" : "Cuentas",
"System address book which holds all accounts" : "Libretas de direcciones del sistema que contienen todas las cuentas",
"System address book which holds all accounts" : "Libreta de direcciones del sistema que contiene todas las cuentas",
"File is not updatable: %1$s" : "El archivo no se puede actualizar: %1$s",
"Failed to get storage for file" : "Error al obtener almacenamiento para el archivo",
"Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.",
"Failed to get storage for file" : "Error al obtener datos de almacenamiento para el archivo",
"Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema",
"Could not write file contents" : "No se han podido escribir los contenidos del archivo",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error al copiar el archivo al destino (copiado: %1$s, tamaño esperado: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Se esperaba un tamaño de archivo de %1$s pero se leyó (desde el cliente Nextcloud) y se escribió (en el almacenamiento Nextcloud) %2$s. Podría ser un problema de red en el lado del envío o un problema de escritura en el almacenamiento en el lado del servidor.",
"Could not rename part file to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.",
"Could not rename part file to final file, canceled by hook" : "No se pudo renombrar del archivo parcial como el archivo final, cancelado por el sistema.",
"Could not rename part file to final file" : "No se ha podido renombrar el archivo parcial como el archivo final",
"Failed to check file size: %1$s" : "Fallo al comprobar el tamaño del archivo: %1$s",
"Could not open file: %1$s, file does seem to exist" : "No se pudo abrir el archivo: %1$s, parece que el archivo existe",
@@ -260,24 +260,24 @@ OC.L10N.register(
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronización DAV de la libreta de direcciones del sistema no se ha ejecutado ya que su instancia tiene más de 1000 usuarios o por que ha ocurrido un error. Por favor, ejecútela manualmente llamando al comando: \"occ dav:sync-system-addressbook\".",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "No se pudo verificar si su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV. Por favor, verifique manualmente.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Tu servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Su servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV.",
"Migrated calendar (%1$s)" : "Calendario migrado (%1$s)",
"Migrated calendar (%1$s)" : "Se migró el calendario (%1$s)",
"Calendars including events, details and attendees" : "Calendarios que incluyen eventos, detalles y asistentes",
"Contacts and groups" : "Contactos y grupos",
"WebDAV" : "WebDAV",
"Absence saved" : "Ausencia guardada",
"Failed to save your absence settings" : "Error al guardar tus ajustes de ausencia",
"Failed to save your absence settings" : "Error al guardar sus ajustes de ausencia",
"Absence cleared" : "Ausencia limpiada",
"Failed to clear your absence settings" : "Error al borrar tus ajustes de ausencia",
"Failed to clear your absence settings" : "Error al borrar sus ajustes de ausencia",
"First day" : "Primer día",
"Last day (inclusive)" : "Último día (incluido)",
"Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)",
"Name of the replacement" : "Nombre del sustituto",
"No results." : "Sin resultados.",
"Start typing." : "Empieza a escribir.",
"Start typing." : "Empiece a escribir.",
"Short absence status" : "Estado de ausencia corta",
"Long absence Message" : "Mensaje en ausencia larga",
"Long absence Message" : "Mensaje de ausencia larga",
"Save" : "Guardar",
"Disable absence" : "Deshabilitar ausencia",
"Failed to load availability" : "No se ha podido cargar la disponibilidad",
@@ -285,13 +285,13 @@ OC.L10N.register(
"Failed to save availability" : "No se ha podido guardar la disponibilidad",
"Time zone:" : "Zona horaria:",
"to" : "para",
"Delete slot" : "Eliminar espacio",
"No working hours set" : "No se han establecido horas de funcionamiento",
"Add slot" : "Añadir espacio",
"Delete slot" : "Eliminar franja de tiempo",
"No working hours set" : "No se han establecido horas laborales",
"Add slot" : "Añadir franja horaria",
"Weekdays" : "Días de semana",
"Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}",
"Pick a end time for {dayName}" : "Elija una hora fin para {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" fuera de las horas de disponibilidad para silenciar todas las notificaciones.",
"Cancel" : "Cancelar",
"Import" : "Importar",
"Error while saving settings" : "Error al guardar los ajustes",
@@ -300,7 +300,7 @@ OC.L10N.register(
"Contact imported successfully" : "El contacto se importó exitosamente",
"Error while importing contact" : "Error al importar el contacto",
"Import contact" : "Importar contacto",
"Reset to default" : "Reestablecer a predeterminado",
"Reset to default" : "Restablecer a predeterminado",
"Import contacts" : "Importar contactos",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importar un nuevo archivo .vcf eliminará el contacto predeterminado existente y lo reemplazará con el nuevo. ¿Desea continuar?",
"Failed to save example event creation setting" : "Fallo al guardar el ajuste de creación de evento de ejemplo",
@@ -314,7 +314,7 @@ OC.L10N.register(
"Availability" : "Disponibilidad",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
"Absence" : "Ausencia",
"Configure your next absence period." : "Configura el siguiente periodo en que estarás ausente",
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
"Calendar server" : "Servidor de calendario",
+25 -25
View File
@@ -206,28 +206,28 @@
"{actor} unshared address book {addressbook} from you" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con Ud.",
"You unshared address book {addressbook} from {user}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir la libreta de direcciones {addressbook} consigo mismo",
"You shared address book {addressbook} with group {group}" : "Has compartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} dejó de compartir su propia libreta de direcciones {addressbook}",
"You shared address book {addressbook} with group {group}" : "Ud. ha compartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} ha compartido la libreta de direcciones {addressbook} con el grupo {group}",
"You unshared address book {addressbook} from group {group}" : "Has descompartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} ha descompartido la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}",
"You created contact {card} in address book {addressbook}" : "Has creado un contacto {card} en la libreta de direcciones {addressbook}",
"You unshared address book {addressbook} from group {group}" : "Ud. ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} ha dejado de compartir la libreta de direcciones {addressbook} con el grupo {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} ha creado el contacto {card} en la libreta de direcciones {addressbook}",
"You created contact {card} in address book {addressbook}" : "Ud. ha creado un contacto {card} en la libreta de direcciones {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} ha eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Has eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Ud. ha eliminado el contacto {card} de la libreta de direcciones {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Has actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong> ",
"You updated contact {card} in address book {addressbook}" : "Ud. ha actualizado el contacto {card} en la libreta de direcciones {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Se ha modificado un <strong>contacto</strong> o una <strong>libreta de direcciones</strong>",
"Accounts" : "Cuentas",
"System address book which holds all accounts" : "Libretas de direcciones del sistema que contienen todas las cuentas",
"System address book which holds all accounts" : "Libreta de direcciones del sistema que contiene todas las cuentas",
"File is not updatable: %1$s" : "El archivo no se puede actualizar: %1$s",
"Failed to get storage for file" : "Error al obtener almacenamiento para el archivo",
"Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.",
"Failed to get storage for file" : "Error al obtener datos de almacenamiento para el archivo",
"Could not write to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema",
"Could not write file contents" : "No se han podido escribir los contenidos del archivo",
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Error al copiar el archivo al destino (copiado: %1$s, tamaño esperado: %2$s)",
"Expected filesize of %1$s but read (from Nextcloud client) and wrote (to Nextcloud storage) %2$s. Could either be a network problem on the sending side or a problem writing to the storage on the server side." : "Se esperaba un tamaño de archivo de %1$s pero se leyó (desde el cliente Nextcloud) y se escribió (en el almacenamiento Nextcloud) %2$s. Podría ser un problema de red en el lado del envío o un problema de escritura en el almacenamiento en el lado del servidor.",
"Could not rename part file to final file, canceled by hook" : "No se pudo escribir en el archivo final, cancelado por el sistema.",
"Could not rename part file to final file, canceled by hook" : "No se pudo renombrar del archivo parcial como el archivo final, cancelado por el sistema.",
"Could not rename part file to final file" : "No se ha podido renombrar el archivo parcial como el archivo final",
"Failed to check file size: %1$s" : "Fallo al comprobar el tamaño del archivo: %1$s",
"Could not open file: %1$s, file does seem to exist" : "No se pudo abrir el archivo: %1$s, parece que el archivo existe",
@@ -258,24 +258,24 @@
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronización DAV de la libreta de direcciones del sistema no se ha ejecutado ya que su instancia tiene más de 1000 usuarios o por que ha ocurrido un error. Por favor, ejecútela manualmente llamando al comando: \"occ dav:sync-system-addressbook\".",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "No se pudo verificar si su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV. Por favor, verifique manualmente.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Tu servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Su servidor web todavía no está configurado correctamente para permitir la sincronización de archivos, porque la interfaz WebDAV parece estar rota.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Su servidor web está adecuadamente configurado para permitir la sincronización de archivos a través de WebDAV.",
"Migrated calendar (%1$s)" : "Calendario migrado (%1$s)",
"Migrated calendar (%1$s)" : "Se migró el calendario (%1$s)",
"Calendars including events, details and attendees" : "Calendarios que incluyen eventos, detalles y asistentes",
"Contacts and groups" : "Contactos y grupos",
"WebDAV" : "WebDAV",
"Absence saved" : "Ausencia guardada",
"Failed to save your absence settings" : "Error al guardar tus ajustes de ausencia",
"Failed to save your absence settings" : "Error al guardar sus ajustes de ausencia",
"Absence cleared" : "Ausencia limpiada",
"Failed to clear your absence settings" : "Error al borrar tus ajustes de ausencia",
"Failed to clear your absence settings" : "Error al borrar sus ajustes de ausencia",
"First day" : "Primer día",
"Last day (inclusive)" : "Último día (incluido)",
"Out of office replacement (optional)" : "Sustituto durante vacaciones/ausencia (opcional)",
"Name of the replacement" : "Nombre del sustituto",
"No results." : "Sin resultados.",
"Start typing." : "Empieza a escribir.",
"Start typing." : "Empiece a escribir.",
"Short absence status" : "Estado de ausencia corta",
"Long absence Message" : "Mensaje en ausencia larga",
"Long absence Message" : "Mensaje de ausencia larga",
"Save" : "Guardar",
"Disable absence" : "Deshabilitar ausencia",
"Failed to load availability" : "No se ha podido cargar la disponibilidad",
@@ -283,13 +283,13 @@
"Failed to save availability" : "No se ha podido guardar la disponibilidad",
"Time zone:" : "Zona horaria:",
"to" : "para",
"Delete slot" : "Eliminar espacio",
"No working hours set" : "No se han establecido horas de funcionamiento",
"Add slot" : "Añadir espacio",
"Delete slot" : "Eliminar franja de tiempo",
"No working hours set" : "No se han establecido horas laborales",
"Add slot" : "Añadir franja horaria",
"Weekdays" : "Días de semana",
"Pick a start time for {dayName}" : "Elija una hora de inicio para {dayName}",
"Pick a end time for {dayName}" : "Elija una hora fin para {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" cuando no esté disponible para silenciar todas las notificaciones.",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Cambiar automáticamente el estado del usuario a \"No molestar\" fuera de las horas de disponibilidad para silenciar todas las notificaciones.",
"Cancel" : "Cancelar",
"Import" : "Importar",
"Error while saving settings" : "Error al guardar los ajustes",
@@ -298,7 +298,7 @@
"Contact imported successfully" : "El contacto se importó exitosamente",
"Error while importing contact" : "Error al importar el contacto",
"Import contact" : "Importar contacto",
"Reset to default" : "Reestablecer a predeterminado",
"Reset to default" : "Restablecer a predeterminado",
"Import contacts" : "Importar contactos",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Importar un nuevo archivo .vcf eliminará el contacto predeterminado existente y lo reemplazará con el nuevo. ¿Desea continuar?",
"Failed to save example event creation setting" : "Fallo al guardar el ajuste de creación de evento de ejemplo",
@@ -312,7 +312,7 @@
"Availability" : "Disponibilidad",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Si configura sus horas laborales, otras personas verán cuando está fuera de la oficina cuando agenden una reunión.",
"Absence" : "Ausencia",
"Configure your next absence period." : "Configura el siguiente periodo en que estarás ausente",
"Configure your next absence period." : "Configure el siguiente periodo en que estará ausente",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instale también la {calendarappstoreopen}app de Calendario{linkclose} o {calendardocopen}conecte su escritorio y móvil para sincronizar ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Por favor, asegúrese de configurar correctamente {emailopen}el servidor web{linkclose}",
"Calendar server" : "Servidor de calendario",
+23
View File
@@ -189,6 +189,7 @@ OC.L10N.register(
"Second" : "Bigarrena",
"Third" : "Hirugarrena",
"Fourth" : "Laugarrena",
"Fifth" : "Bosgarrena",
"Last" : "Azkena",
"Second Last" : "Azken aurrekoa",
"Third Last" : "Hirugarren azkena",
@@ -248,6 +249,11 @@ OC.L10N.register(
"Completed on %s" : "%s-an osatua",
"Due on %s by %s" : "%s-(e)an epemuga %s-(e)k",
"Due on %s" : "%s-(e)an epemuga",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ongi etorri Nextcloud Egutegira!\n\nHau gertaera erakusgarria da - aztertu plangintzaren malgutasuna Nextcloud Egutegiarekin nahi dituzun edizioak eginez!\n\nNextcloud Egutegia aukerarekin, hau egin dezakezu:\n- Sortu, editatu eta kudeatu gertaerak esfortzurik gabe.\n- Egutegi ugari sortu eta taldekideekin, lagunekin edo familiarekin partekatu.\n- Egiaztatu libre egotea eta bistaratu zure laneko orduak beste batzuei.\n- Aplikazio eta gailuekin arazorik gabe integratzea CalDAV bidez.\n- Zure esperientzia pertsonalizatu: gertaera errepikariak programatu, jakinarazpenak doitu eta bestelako ezarpenak.",
"Example event - open me!" : "Gertaera adibidea - ireki nazazu!",
"System Address Book" : "Sistemaren helbide-liburua",
"The system address book contains contact information for all users in your instance." : "Sistemaren helbide-liburuak zure instantziako erabiltzaile guztien kontaktu-informazioa dauka.",
"Enable System Address Book" : "Gaitu sistemaren helbide-liburua",
"DAV system address book" : "DAV sistemaren helbide-liburua",
"No outstanding DAV system address book sync." : "Ez dago DAV sistema helbide-liburuaren sinkronizazio arrarorik.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV sistemaren helbide-liburuaren sinkronizazioa oraindik ez da martxan jarri zure instantziak 1000 erabiltzaile baino gehiago dituelako edo akats bat gertatu delako. Mesedez, exekutatu eskuz \"occ dav:sync-system-addressbook\" deituz.",
@@ -288,7 +294,22 @@ OC.L10N.register(
"Cancel" : "Utzi",
"Import" : "Inportatu",
"Error while saving settings" : "Errorea ezarpenak gordetzean",
"Contact reset successfully" : "Kontaktua behar bezala berrezarri da",
"Error while resetting contact" : "Errorea kontaktua berrezartzean",
"Contact imported successfully" : "Kontaktua behar bezala inportatu da",
"Error while importing contact" : "Errorea kontaktua inportatzean",
"Import contact" : "Inportatu kontaktua",
"Reset to default" : "Berezarri balio lehenetsira",
"Import contacts" : "Inportatu kontaktuak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : ".vcf fitxategi berri bat inportatzean, lehendik dagoen kontaktu lehenetsia ezabatu eta berriarekin ordeztuko da. Jarraitu nahi duzu?",
"Failed to save example event creation setting" : "Adibide gertaeraren sortze ezarpenak gordetzeak huts egin du",
"Failed to upload the example event" : "Adibide gertaera igotzeak huts egin du",
"Custom example event was saved successfully" : "Adibide gertaera pertsonalizatua behar bezala gorde da",
"Failed to delete the custom example event" : "Adibide gertaera pertsonalizatua ezabatzeak huts egin du",
"Custom example event was deleted successfully" : "Adibide gertaera pertsonalizatua behar bezala ezabatu da.",
"Import calendar event" : "Inportatu egutegiko gertaera",
"Uploading a new event will overwrite the existing one." : "Gertaera berri bat igotzeak dagoena gainidatz dezake",
"Upload event" : "Igo gertaera",
"Availability" : "Eskuragarritasuna",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Zure lan orduak konfiguratzen badituzu, beste pertsonek bulegotik kanpo zaudela ikusiko dute bilera bat erreserbatzen dutenean.",
"Absence" : "Absentzia",
@@ -305,6 +326,8 @@ OC.L10N.register(
"Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere",
"Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.",
"Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat",
"Example content" : "Adibideko edukia",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Adibideko edukiak Nextcloud-en ezaugarriak erakusteko balio du. Eduki lehenetsia Nextcloud-ekin bidaltzen da, eta eduki pertsonalizatuarekin ordezka daiteke.",
"There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.",
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
+23
View File
@@ -187,6 +187,7 @@
"Second" : "Bigarrena",
"Third" : "Hirugarrena",
"Fourth" : "Laugarrena",
"Fifth" : "Bosgarrena",
"Last" : "Azkena",
"Second Last" : "Azken aurrekoa",
"Third Last" : "Hirugarren azkena",
@@ -246,6 +247,11 @@
"Completed on %s" : "%s-an osatua",
"Due on %s by %s" : "%s-(e)an epemuga %s-(e)k",
"Due on %s" : "%s-(e)an epemuga",
"Welcome to Nextcloud Calendar!\n\nThis is a sample event - explore the flexibility of planning with Nextcloud Calendar by making any edits you want!\n\nWith Nextcloud Calendar, you can:\n- Create, edit, and manage events effortlessly.\n- Create multiple calendars and share them with teammates, friends, or family.\n- Check availability and display your busy times to others.\n- Seamlessly integrate with apps and devices via CalDAV.\n- Customize your experience: schedule recurring events, adjust notifications and other settings." : "Ongi etorri Nextcloud Egutegira!\n\nHau gertaera erakusgarria da - aztertu plangintzaren malgutasuna Nextcloud Egutegiarekin nahi dituzun edizioak eginez!\n\nNextcloud Egutegia aukerarekin, hau egin dezakezu:\n- Sortu, editatu eta kudeatu gertaerak esfortzurik gabe.\n- Egutegi ugari sortu eta taldekideekin, lagunekin edo familiarekin partekatu.\n- Egiaztatu libre egotea eta bistaratu zure laneko orduak beste batzuei.\n- Aplikazio eta gailuekin arazorik gabe integratzea CalDAV bidez.\n- Zure esperientzia pertsonalizatu: gertaera errepikariak programatu, jakinarazpenak doitu eta bestelako ezarpenak.",
"Example event - open me!" : "Gertaera adibidea - ireki nazazu!",
"System Address Book" : "Sistemaren helbide-liburua",
"The system address book contains contact information for all users in your instance." : "Sistemaren helbide-liburuak zure instantziako erabiltzaile guztien kontaktu-informazioa dauka.",
"Enable System Address Book" : "Gaitu sistemaren helbide-liburua",
"DAV system address book" : "DAV sistemaren helbide-liburua",
"No outstanding DAV system address book sync." : "Ez dago DAV sistema helbide-liburuaren sinkronizazio arrarorik.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "DAV sistemaren helbide-liburuaren sinkronizazioa oraindik ez da martxan jarri zure instantziak 1000 erabiltzaile baino gehiago dituelako edo akats bat gertatu delako. Mesedez, exekutatu eskuz \"occ dav:sync-system-addressbook\" deituz.",
@@ -286,7 +292,22 @@
"Cancel" : "Utzi",
"Import" : "Inportatu",
"Error while saving settings" : "Errorea ezarpenak gordetzean",
"Contact reset successfully" : "Kontaktua behar bezala berrezarri da",
"Error while resetting contact" : "Errorea kontaktua berrezartzean",
"Contact imported successfully" : "Kontaktua behar bezala inportatu da",
"Error while importing contact" : "Errorea kontaktua inportatzean",
"Import contact" : "Inportatu kontaktua",
"Reset to default" : "Berezarri balio lehenetsira",
"Import contacts" : "Inportatu kontaktuak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : ".vcf fitxategi berri bat inportatzean, lehendik dagoen kontaktu lehenetsia ezabatu eta berriarekin ordeztuko da. Jarraitu nahi duzu?",
"Failed to save example event creation setting" : "Adibide gertaeraren sortze ezarpenak gordetzeak huts egin du",
"Failed to upload the example event" : "Adibide gertaera igotzeak huts egin du",
"Custom example event was saved successfully" : "Adibide gertaera pertsonalizatua behar bezala gorde da",
"Failed to delete the custom example event" : "Adibide gertaera pertsonalizatua ezabatzeak huts egin du",
"Custom example event was deleted successfully" : "Adibide gertaera pertsonalizatua behar bezala ezabatu da.",
"Import calendar event" : "Inportatu egutegiko gertaera",
"Uploading a new event will overwrite the existing one." : "Gertaera berri bat igotzeak dagoena gainidatz dezake",
"Upload event" : "Igo gertaera",
"Availability" : "Eskuragarritasuna",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Zure lan orduak konfiguratzen badituzu, beste pertsonek bulegotik kanpo zaudela ikusiko dute bilera bat erreserbatzen dutenean.",
"Absence" : "Absentzia",
@@ -303,6 +324,8 @@
"Send reminder notifications to calendar sharees as well" : "Bidali gogorarazpen jakinarazpenak egutegi partekatzea dutenei ere",
"Reminders are always sent to organizers and attendees." : "Gogorarazpenak beti bidaltzen zaizkie antolatzaileei eta parte-hartzaileei.",
"Enable notifications for events via push" : "Gaitu push bidezko jakinarazpenak gertaerentzat",
"Example content" : "Adibideko edukia",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Adibideko edukiak Nextcloud-en ezaugarriak erakusteko balio du. Eduki lehenetsia Nextcloud-ekin bidaltzen da, eta eduki pertsonalizatuarekin ordezka daiteke.",
"There was an error updating your attendance status." : "Errore bat gertatu da zure parte-hartze egoera eguneratzerakoan.",
"Please contact the organizer directly." : "Mesedez jarri harremanetan antolatzailearekin zuzenean.",
"Are you accepting the invitation?" : "Gonbidapena onartzen duzu?",
+1 -1
View File
@@ -1110,7 +1110,7 @@ class IMipService {
$sequence = $iTipMessage->sequence;
$recurrenceId = isset($vevent->{'RECURRENCE-ID'})
? $vevent->{'RECURRENCE-ID'}->serialize() : null;
$uid = $vevent->{'UID'};
$uid = $vevent->{'UID'}?->getValue();
$query = $this->db->getQueryBuilder();
$query->insert('calendar_invitations')
+6 -5
View File
@@ -8,7 +8,6 @@
namespace OCA\DAV\CardDAV;
use OCA\DAV\DAV\Sharing\IShareable;
use OCA\DAV\Exception\UnsupportedLimitOnInitialSyncException;
use OCP\DB\Exception;
use OCP\IL10N;
use OCP\Server;
@@ -234,9 +233,6 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable, IMov
}
public function getChanges($syncToken, $syncLevel, $limit = null) {
if (!$syncToken && $limit) {
throw new UnsupportedLimitOnInitialSyncException();
}
return parent::getChanges($syncToken, $syncLevel, $limit);
}
@@ -250,7 +246,12 @@ class AddressBook extends \Sabre\CardDAV\AddressBook implements IShareable, IMov
}
try {
return $this->carddavBackend->moveCard($sourceNode->getAddressbookId(), (int)$this->addressBookInfo['id'], $sourceNode->getUri(), $sourceNode->getOwner());
return $this->carddavBackend->moveCard(
$sourceNode->getAddressbookId(),
$sourceNode->getUri(),
$this->getResourceId(),
$targetName,
);
} catch (Exception $e) {
// Avoid injecting LoggerInterface everywhere
Server::get(LoggerInterface::class)->error('Could not move calendar object: ' . $e->getMessage(), ['exception' => $e]);
+4
View File
@@ -152,6 +152,10 @@ class AddressBookImpl implements IAddressBookEnabled {
$permissions = $this->addressBook->getACL();
$result = 0;
foreach ($permissions as $permission) {
if ($this->addressBookInfo['principaluri'] !== $permission['principal']) {
continue;
}
switch ($permission['privilege']) {
case '{DAV:}read':
$result |= Constants::PERMISSION_READ;
+85 -19
View File
@@ -23,6 +23,7 @@ use OCP\AppFramework\Db\TTransactional;
use OCP\DB\Exception;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IUserManager;
use PDO;
@@ -59,6 +60,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
private IUserManager $userManager,
private IEventDispatcher $dispatcher,
private Sharing\Backend $sharingBackend,
private IConfig $config,
) {
}
@@ -473,7 +475,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
*/
public function getCards($addressbookId) {
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
->from($this->dbCardsTable)
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressbookId)));
@@ -510,7 +512,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
*/
public function getCard($addressBookId, $cardUri) {
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
->from($this->dbCardsTable)
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
->andWhere($query->expr()->eq('uri', $query->createNamedParameter($cardUri)))
@@ -553,7 +555,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
$cards = [];
$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
$query->select(['id', 'addressbookid', 'uri', 'lastmodified', 'etag', 'size', 'carddata', 'uid'])
->from($this->dbCardsTable)
->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId)))
->andWhere($query->expr()->in('uri', $query->createParameter('uri')));
@@ -715,32 +717,33 @@ class CardDavBackend implements BackendInterface, SyncSupport {
/**
* @throws Exception
*/
public function moveCard(int $sourceAddressBookId, int $targetAddressBookId, string $cardUri, string $oldPrincipalUri): bool {
return $this->atomic(function () use ($sourceAddressBookId, $targetAddressBookId, $cardUri, $oldPrincipalUri) {
$card = $this->getCard($sourceAddressBookId, $cardUri);
public function moveCard(int $sourceAddressBookId, string $sourceObjectUri, int $targetAddressBookId, string $tragetObjectUri): bool {
return $this->atomic(function () use ($sourceAddressBookId, $sourceObjectUri, $targetAddressBookId, $tragetObjectUri) {
$card = $this->getCard($sourceAddressBookId, $sourceObjectUri);
if (empty($card)) {
return false;
}
$sourceObjectId = (int)$card['id'];
$query = $this->db->getQueryBuilder();
$query->update('cards')
->set('addressbookid', $query->createNamedParameter($targetAddressBookId, IQueryBuilder::PARAM_INT))
->where($query->expr()->eq('uri', $query->createNamedParameter($cardUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR))
->set('uri', $query->createNamedParameter($tragetObjectUri, IQueryBuilder::PARAM_STR))
->where($query->expr()->eq('uri', $query->createNamedParameter($sourceObjectUri, IQueryBuilder::PARAM_STR), IQueryBuilder::PARAM_STR))
->andWhere($query->expr()->eq('addressbookid', $query->createNamedParameter($sourceAddressBookId, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT))
->executeStatement();
$this->purgeProperties($sourceAddressBookId, (int)$card['id']);
$this->updateProperties($sourceAddressBookId, $card['uri'], $card['carddata']);
$this->purgeProperties($sourceAddressBookId, $sourceObjectId);
$this->updateProperties($targetAddressBookId, $tragetObjectUri, $card['carddata']);
$this->addChange($sourceAddressBookId, $card['uri'], 3);
$this->addChange($targetAddressBookId, $card['uri'], 1);
$this->addChange($sourceAddressBookId, $sourceObjectUri, 3);
$this->addChange($targetAddressBookId, $tragetObjectUri, 1);
$card = $this->getCard($targetAddressBookId, $cardUri);
$card = $this->getCard($targetAddressBookId, $tragetObjectUri);
// Card wasn't found - possibly because it was deleted in the meantime by a different client
if (empty($card)) {
return false;
}
$targetAddressBookRow = $this->getAddressBookById($targetAddressBookId);
// the address book this card is being moved to does not exist any longer
if (empty($targetAddressBookRow)) {
@@ -850,6 +853,8 @@ class CardDavBackend implements BackendInterface, SyncSupport {
* @return array
*/
public function getChangesForAddressBook($addressBookId, $syncToken, $syncLevel, $limit = null) {
$maxLimit = $this->config->getSystemValueInt('carddav_sync_request_truncation', 2500);
$limit = ($limit === null) ? $maxLimit : min($limit, $maxLimit);
// Current synctoken
return $this->atomic(function () use ($addressBookId, $syncToken, $syncLevel, $limit) {
$qb = $this->db->getQueryBuilder();
@@ -872,10 +877,35 @@ class CardDavBackend implements BackendInterface, SyncSupport {
'modified' => [],
'deleted' => [],
];
if ($syncToken) {
if (str_starts_with($syncToken, 'init_')) {
$syncValues = explode('_', $syncToken);
$lastID = $syncValues[1];
$initialSyncToken = $syncValues[2];
$qb = $this->db->getQueryBuilder();
$qb->select('uri', 'operation')
$qb->select('id', 'uri')
->from('cards')
->where(
$qb->expr()->andX(
$qb->expr()->eq('addressbookid', $qb->createNamedParameter($addressBookId)),
$qb->expr()->gt('id', $qb->createNamedParameter($lastID)))
)->orderBy('id')
->setMaxResults($limit);
$stmt = $qb->executeQuery();
$values = $stmt->fetchAll(\PDO::FETCH_ASSOC);
$stmt->closeCursor();
if (count($values) === 0) {
$result['syncToken'] = $initialSyncToken;
$result['result_truncated'] = false;
$result['added'] = [];
} else {
$lastID = $values[array_key_last($values)]['id'];
$result['added'] = array_column($values, 'uri');
$result['syncToken'] = count($result['added']) >= $limit ? "init_{$lastID}_$initialSyncToken" : $initialSyncToken ;
$result['result_truncated'] = count($result['added']) >= $limit;
}
} elseif ($syncToken) {
$qb = $this->db->getQueryBuilder();
$qb->select('uri', 'operation', 'synctoken')
->from('addressbookchanges')
->where(
$qb->expr()->andX(
@@ -885,22 +915,31 @@ class CardDavBackend implements BackendInterface, SyncSupport {
)
)->orderBy('synctoken');
if (is_int($limit) && $limit > 0) {
if ($limit > 0) {
$qb->setMaxResults($limit);
}
// Fetching all changes
$stmt = $qb->executeQuery();
$rowCount = $stmt->rowCount();
$changes = [];
$highestSyncToken = 0;
// This loop ensures that any duplicates are overwritten, only the
// last change on a node is relevant.
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$changes[$row['uri']] = $row['operation'];
$highestSyncToken = $row['synctoken'];
}
$stmt->closeCursor();
// No changes found, use current token
if (empty($changes)) {
$result['syncToken'] = $currentToken;
}
foreach ($changes as $uri => $operation) {
switch ($operation) {
case 1:
@@ -914,16 +953,43 @@ class CardDavBackend implements BackendInterface, SyncSupport {
break;
}
}
/*
* The synctoken in oc_addressbooks is always the highest synctoken in oc_addressbookchanges for a given addressbook plus one (see addChange).
*
* For truncated results, it is expected that we return the highest token from the response, so the client can continue from the latest change.
*
* For non-truncated results, it is expected to return the currentToken. If we return the highest token, as with truncated results, the client will always think it is one change behind.
*
* Therefore, we differentiate between truncated and non-truncated results when returning the synctoken.
*/
if ($rowCount === $limit && $highestSyncToken < $currentToken) {
$result['syncToken'] = $highestSyncToken;
$result['result_truncated'] = true;
}
} else {
$qb = $this->db->getQueryBuilder();
$qb->select('uri')
$qb->select('id', 'uri')
->from('cards')
->where(
$qb->expr()->eq('addressbookid', $qb->createNamedParameter($addressBookId))
);
// No synctoken supplied, this is the initial sync.
$qb->setMaxResults($limit);
$stmt = $qb->executeQuery();
$result['added'] = $stmt->fetchAll(\PDO::FETCH_COLUMN);
$values = $stmt->fetchAll(\PDO::FETCH_ASSOC);
if (empty($values)) {
$result['added'] = [];
return $result;
}
$lastID = $values[array_key_last($values)]['id'];
if (count($values) >= $limit) {
$result['syncToken'] = 'init_' . $lastID . '_' . $currentToken;
$result['result_truncated'] = true;
}
$result['added'] = array_column($values, 'uri');
$stmt->closeCursor();
}
return $result;
+48 -13
View File
@@ -22,6 +22,7 @@ use Psr\Log\LoggerInterface;
use Sabre\DAV\Xml\Response\MultiStatus;
use Sabre\DAV\Xml\Service;
use Sabre\VObject\Reader;
use Sabre\Xml\ParseException;
use function is_null;
class SyncService {
@@ -43,9 +44,10 @@ class SyncService {
}
/**
* @psalm-return list{0: ?string, 1: boolean}
* @throws \Exception
*/
public function syncRemoteAddressBook(string $url, string $userName, string $addressBookUrl, string $sharedSecret, ?string $syncToken, string $targetBookHash, string $targetPrincipal, array $targetProperties): string {
public function syncRemoteAddressBook(string $url, string $userName, string $addressBookUrl, string $sharedSecret, ?string $syncToken, string $targetBookHash, string $targetPrincipal, array $targetProperties): array {
// 1. create addressbook
$book = $this->ensureSystemAddressBookExists($targetPrincipal, $targetBookHash, $targetProperties);
$addressBookId = $book['id'];
@@ -83,7 +85,10 @@ class SyncService {
}
}
return $response['token'];
return [
$response['token'],
$response['truncated'],
];
}
/**
@@ -127,7 +132,7 @@ class SyncService {
private function prepareUri(string $host, string $path): string {
/*
* The trailing slash is important for merging the uris together.
* The trailing slash is important for merging the uris.
*
* $host is stored in oc_trusted_servers.url and usually without a trailing slash.
*
@@ -158,7 +163,9 @@ class SyncService {
}
/**
* @return array{response: array<string, array<array-key, mixed>>, token: ?string, truncated: bool}
* @throws ClientExceptionInterface
* @throws ParseException
*/
protected function requestSyncReport(string $url, string $userName, string $addressBookUrl, string $sharedSecret, ?string $syncToken): array {
$client = $this->clientService->newClient();
@@ -181,7 +188,7 @@ class SyncService {
$body = $response->getBody();
assert(is_string($body));
return $this->parseMultiStatus($body);
return $this->parseMultiStatus($body, $addressBookUrl);
}
protected function download(string $url, string $userName, string $sharedSecret, string $resourcePath): string {
@@ -219,22 +226,50 @@ class SyncService {
}
/**
* @param string $body
* @return array
* @throws \Sabre\Xml\ParseException
* @return array{response: array<string, array<array-key, mixed>>, token: ?string, truncated: bool}
* @throws ParseException
*/
private function parseMultiStatus($body) {
$xml = new Service();
private function parseMultiStatus(string $body, string $addressBookUrl): array {
/** @var MultiStatus $multiStatus */
$multiStatus = $xml->expect('{DAV:}multistatus', $body);
$multiStatus = (new Service())->expect('{DAV:}multistatus', $body);
$result = [];
$truncated = false;
foreach ($multiStatus->getResponses() as $response) {
$result[$response->getHref()] = $response->getResponseProperties();
$href = $response->getHref();
if ($response->getHttpStatus() === '507' && $this->isResponseForRequestUri($href, $addressBookUrl)) {
$truncated = true;
} else {
$result[$response->getHref()] = $response->getResponseProperties();
}
}
return ['response' => $result, 'token' => $multiStatus->getSyncToken()];
return ['response' => $result, 'token' => $multiStatus->getSyncToken(), 'truncated' => $truncated];
}
/**
* Determines whether the provided response URI corresponds to the given request URI.
*/
private function isResponseForRequestUri(string $responseUri, string $requestUri): bool {
/*
* Example response uri:
*
* /remote.php/dav/addressbooks/system/system/system/
* /cloud/remote.php/dav/addressbooks/system/system/system/ (when installed in a subdirectory)
*
* Example request uri:
*
* remote.php/dav/addressbooks/system/system/system
*
* References:
* https://github.com/nextcloud/3rdparty/blob/e0a509739b13820f0a62ff9cad5d0fede00e76ee/sabre/dav/lib/DAV/Sync/Plugin.php#L172-L174
* https://github.com/nextcloud/server/blob/b40acb34a39592070d8455eb91c5364c07928c50/apps/federation/lib/SyncFederationAddressBooks.php#L41
*/
return str_ends_with(
rtrim($responseUri, '/'),
rtrim($requestUri, '/')
);
}
/**
@@ -8,7 +8,6 @@ declare(strict_types=1);
*/
namespace OCA\DAV\CardDAV;
use OCA\DAV\Exception\UnsupportedLimitOnInitialSyncException;
use OCA\Federation\TrustedServers;
use OCP\Accounts\IAccountManager;
use OCP\IConfig;
@@ -212,14 +211,7 @@ class SystemAddressbook extends AddressBook {
}
return new Card($this->carddavBackend, $this->addressBookInfo, $obj);
}
/**
* @throws UnsupportedLimitOnInitialSyncException
*/
public function getChanges($syncToken, $syncLevel, $limit = null) {
if (!$syncToken && $limit) {
throw new UnsupportedLimitOnInitialSyncException();
}
if (!$this->carddavBackend instanceof SyncSupport) {
return null;
+6 -6
View File
@@ -204,6 +204,9 @@ class File extends Node implements IFile {
}
}
$lengthHeader = $this->request->getHeader('content-length');
$expected = $lengthHeader !== '' ? (int)$lengthHeader : null;
if ($partStorage->instanceOfStorage(IWriteStreamStorage::class)) {
$isEOF = false;
$wrappedData = CallbackWrapper::wrap($data, null, null, null, null, function ($stream) use (&$isEOF): void {
@@ -215,7 +218,7 @@ class File extends Node implements IFile {
$count = -1;
try {
/** @var IWriteStreamStorage $partStorage */
$count = $partStorage->writeStream($internalPartPath, $wrappedData);
$count = $partStorage->writeStream($internalPartPath, $wrappedData, $expected);
} catch (GenericFileException $e) {
$logger = Server::get(LoggerInterface::class);
$logger->error('Error while writing stream to storage: ' . $e->getMessage(), ['exception' => $e, 'app' => 'webdav']);
@@ -235,10 +238,7 @@ class File extends Node implements IFile {
[$count, $result] = Files::streamCopy($data, $target, true);
fclose($target);
}
$lengthHeader = $this->request->getHeader('content-length');
$expected = $lengthHeader !== '' ? (int)$lengthHeader : -1;
if ($result === false && $expected >= 0) {
if ($result === false && $expected !== null) {
throw new Exception(
$this->l10n->t(
'Error while copying file to target location (copied: %1$s, expected filesize: %2$s)',
@@ -253,7 +253,7 @@ class File extends Node implements IFile {
// if content length is sent by client:
// double check if the file was fully received
// compare expected and actual size
if ($expected >= 0
if ($expected !== null
&& $expected !== $count
&& $this->request->getMethod() === 'PUT'
) {
+3
View File
@@ -132,6 +132,7 @@ class RootCollection extends SimpleCollection {
);
$contactsSharingBackend = Server::get(\OCA\DAV\CardDAV\Sharing\Backend::class);
$config = Server::get(IConfig::class);
$pluginManager = new PluginManager(\OC::$server, Server::get(IAppManager::class));
$usersCardDavBackend = new CardDavBackend(
@@ -140,6 +141,7 @@ class RootCollection extends SimpleCollection {
$userManager,
$dispatcher,
$contactsSharingBackend,
$config
);
$usersAddressBookRoot = new AddressBookRoot($userPrincipalBackend, $usersCardDavBackend, $pluginManager, $userSession->getUser(), $groupManager, 'principals/users');
$usersAddressBookRoot->disableListing = $disableListing;
@@ -150,6 +152,7 @@ class RootCollection extends SimpleCollection {
$userManager,
$dispatcher,
$contactsSharingBackend,
$config
);
$systemAddressBookRoot = new AddressBookRoot(new SystemPrincipalBackend(), $systemCardDavBackend, $pluginManager, $userSession->getUser(), $groupManager, 'principals/system');
$systemAddressBookRoot->disableListing = $disableListing;
@@ -241,14 +241,15 @@ class AddressBookImplTest extends TestCase {
public static function dataTestGetPermissions(): array {
return [
[[], 0],
[[['privilege' => '{DAV:}read']], 1],
[[['privilege' => '{DAV:}write']], 6],
[[['privilege' => '{DAV:}all']], 31],
[[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 7],
[[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}all']], 31],
[[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}write']], 31],
[[['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write'],['privilege' => '{DAV:}all']], 31],
[[['privilege' => '{DAV:}all'],['privilege' => '{DAV:}read'],['privilege' => '{DAV:}write']], 31],
[[['privilege' => '{DAV:}read', 'principal' => 'principals/system/system']], 1],
[[['privilege' => '{DAV:}read', 'principal' => 'principals/system/system'], ['privilege' => '{DAV:}write', 'principal' => 'principals/someone/else']], 1],
[[['privilege' => '{DAV:}write', 'principal' => 'principals/system/system']], 6],
[[['privilege' => '{DAV:}all', 'principal' => 'principals/system/system']], 31],
[[['privilege' => '{DAV:}read', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}write', 'principal' => 'principals/system/system']], 7],
[[['privilege' => '{DAV:}read', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}all', 'principal' => 'principals/system/system']], 31],
[[['privilege' => '{DAV:}all', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}write', 'principal' => 'principals/system/system']], 31],
[[['privilege' => '{DAV:}read', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}write', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}all', 'principal' => 'principals/system/system']], 31],
[[['privilege' => '{DAV:}all', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}read', 'principal' => 'principals/system/system'],['privilege' => '{DAV:}write', 'principal' => 'principals/system/system']], 31],
];
}
@@ -34,7 +34,7 @@ class AddressBookTest extends TestCase {
$card = new Card($backend, $addressBookInfo, ['id' => 5, 'carddata' => 'RANDOM VCF DATA', 'uri' => 'something', 'addressbookid' => 23]);
$backend->expects($this->once())->method('moveCard')
->with(23, 666, 'something', 'user1')
->with(23, 'something', 666, 'new')
->willReturn(true);
$addressBook->moveInto('new', 'old', $card);
@@ -50,6 +50,7 @@ class CardDavBackendTest extends TestCase {
private IUserManager&MockObject $userManager;
private IGroupManager&MockObject $groupManager;
private IEventDispatcher&MockObject $dispatcher;
private IConfig&MockObject $config;
private Backend $sharingBackend;
private IDBConnection $db;
private CardDavBackend $backend;
@@ -96,6 +97,7 @@ class CardDavBackendTest extends TestCase {
$this->userManager = $this->createMock(IUserManager::class);
$this->groupManager = $this->createMock(IGroupManager::class);
$this->config = $this->createMock(IConfig::class);
$this->principal = $this->getMockBuilder(Principal::class)
->setConstructorArgs([
$this->userManager,
@@ -106,7 +108,7 @@ class CardDavBackendTest extends TestCase {
$this->createMock(IAppManager::class),
$this->createMock(ProxyMapper::class),
$this->createMock(KnownUserService::class),
$this->createMock(IConfig::class),
$this->config,
$this->createMock(IFactory::class)
])
->onlyMethods(['getPrincipalByPath', 'getGroupMembership', 'findByUri'])
@@ -135,6 +137,7 @@ class CardDavBackendTest extends TestCase {
$this->userManager,
$this->dispatcher,
$this->sharingBackend,
$this->config,
);
// start every test with a empty cards_properties and cards table
$query = $this->db->getQueryBuilder();
@@ -231,7 +234,7 @@ class CardDavBackendTest extends TestCase {
public function testCardOperations(): void {
/** @var CardDavBackend&MockObject $backend */
$backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend,$this->config])
->onlyMethods(['updateProperties', 'purgeProperties'])
->getMock();
@@ -291,7 +294,7 @@ class CardDavBackendTest extends TestCase {
public function testMultiCard(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend,$this->config])
->onlyMethods(['updateProperties'])
->getMock();
@@ -345,7 +348,7 @@ class CardDavBackendTest extends TestCase {
public function testMultipleUIDOnDifferentAddressbooks(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend,$this->config])
->onlyMethods(['updateProperties'])
->getMock();
@@ -368,7 +371,7 @@ class CardDavBackendTest extends TestCase {
public function testMultipleUIDDenied(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend, $this->config])
->onlyMethods(['updateProperties'])
->getMock();
@@ -390,7 +393,7 @@ class CardDavBackendTest extends TestCase {
public function testNoValidUID(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend, $this->config])
->onlyMethods(['updateProperties'])
->getMock();
@@ -408,7 +411,7 @@ class CardDavBackendTest extends TestCase {
public function testDeleteWithoutCard(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend, $this->config])
->onlyMethods([
'getCardId',
'addChange',
@@ -453,7 +456,7 @@ class CardDavBackendTest extends TestCase {
public function testSyncSupport(): void {
$this->backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend, $this->config])
->onlyMethods(['updateProperties'])
->getMock();
@@ -522,7 +525,7 @@ class CardDavBackendTest extends TestCase {
$cardId = 2;
$backend = $this->getMockBuilder(CardDavBackend::class)
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend])
->setConstructorArgs([$this->db, $this->principal, $this->userManager, $this->dispatcher, $this->sharingBackend, $this->config])
->onlyMethods(['getCardId'])->getMock();
$backend->expects($this->any())->method('getCardId')->willReturn($cardId);
@@ -108,7 +108,7 @@ class SyncServiceTest extends TestCase {
'1',
'principals/system/system',
[]
);
)[0];
$this->assertEquals('http://sabre.io/ns/sync/1', $token);
}
@@ -179,7 +179,7 @@ END:VCARD';
'1',
'principals/system/system',
[]
);
)[0];
$this->assertEquals('http://sabre.io/ns/sync/2', $token);
}
@@ -250,7 +250,7 @@ END:VCARD';
'1',
'principals/system/system',
[]
);
)[0];
$this->assertEquals('http://sabre.io/ns/sync/3', $token);
}
@@ -291,7 +291,7 @@ END:VCARD';
'1',
'principals/system/system',
[]
);
)[0];
$this->assertEquals('http://sabre.io/ns/sync/4', $token);
}
+5 -5
View File
@@ -2,16 +2,16 @@ OC.L10N.register(
"encryption",
{
"Missing recovery key password" : "Pazudusi atkopšanas atslēgas parole",
"Please repeat the recovery key password" : "Lūdzu atkārtot atgūšanas atslēgas paroli",
"Please repeat the recovery key password" : "Lūgums atkārtot atkopes atslēgas paroli",
"Repeated recovery key password does not match the provided recovery key password" : "Atkārtota atkopšanas atslēgas parole nesakrīt ar izsniegto atkopšanas atslēgu paroli",
"Recovery key successfully enabled" : "Atkopšanas atslēga ir veiksmīgi iespējota",
"Could not enable recovery key. Please check your recovery key password!" : "Atkopšanas atslēgu nevarēja iespējot. Lūdzu, pārbaudiet atkopšanas atslēgas paroli!",
"Could not enable recovery key. Please check your recovery key password!" : "Atkopes atslēgu nevarēja iespējot. Lūgums pārbaudīt atkopes atslēgas paroli.",
"Recovery key successfully disabled" : "Atkopšanas atslēga ir veiksmīgi deaktivizēta",
"Could not disable recovery key. Please check your recovery key password!" : "Atkopšanas atslēgu nevarēja atspējot. Lūdzu, pārbaudiet atkopšanas atslēgas paroli!",
"Could not disable recovery key. Please check your recovery key password!" : "Atkopes atslēgu nevarēja atspējot. Lūgums pārbaudīt atkopes atslēgas paroli.",
"Missing parameters" : "Trūkstošos parametrs",
"Please provide the old recovery password" : "Lūgums norādīt iepriekšējo atkopes paroli",
"Please provide a new recovery password" : "Lūdzu, ievadiet jaunu paroli",
"Please repeat the new recovery password" : "Lūdzu, atkārtojiet jauno atkopšanas paroli",
"Please provide a new recovery password" : "Lūgums norādīt jaunu atkopes paroli",
"Please repeat the new recovery password" : "Lūgums atkārtot jauno atkopes paroli",
"Password successfully changed." : "Parole veiksmīgi nomainīta.",
"Could not change the password. Maybe the old password was not correct." : "Nevarēja mainīt paroli. Varbūt vecā parole nav pareiza.",
"Recovery Key disabled" : "Atkopšanas atslēga deaktivizēta",
+5 -5
View File
@@ -1,15 +1,15 @@
{ "translations": {
"Missing recovery key password" : "Pazudusi atkopšanas atslēgas parole",
"Please repeat the recovery key password" : "Lūdzu atkārtot atgūšanas atslēgas paroli",
"Please repeat the recovery key password" : "Lūgums atkārtot atkopes atslēgas paroli",
"Repeated recovery key password does not match the provided recovery key password" : "Atkārtota atkopšanas atslēgas parole nesakrīt ar izsniegto atkopšanas atslēgu paroli",
"Recovery key successfully enabled" : "Atkopšanas atslēga ir veiksmīgi iespējota",
"Could not enable recovery key. Please check your recovery key password!" : "Atkopšanas atslēgu nevarēja iespējot. Lūdzu, pārbaudiet atkopšanas atslēgas paroli!",
"Could not enable recovery key. Please check your recovery key password!" : "Atkopes atslēgu nevarēja iespējot. Lūgums pārbaudīt atkopes atslēgas paroli.",
"Recovery key successfully disabled" : "Atkopšanas atslēga ir veiksmīgi deaktivizēta",
"Could not disable recovery key. Please check your recovery key password!" : "Atkopšanas atslēgu nevarēja atspējot. Lūdzu, pārbaudiet atkopšanas atslēgas paroli!",
"Could not disable recovery key. Please check your recovery key password!" : "Atkopes atslēgu nevarēja atspējot. Lūgums pārbaudīt atkopes atslēgas paroli.",
"Missing parameters" : "Trūkstošos parametrs",
"Please provide the old recovery password" : "Lūgums norādīt iepriekšējo atkopes paroli",
"Please provide a new recovery password" : "Lūdzu, ievadiet jaunu paroli",
"Please repeat the new recovery password" : "Lūdzu, atkārtojiet jauno atkopšanas paroli",
"Please provide a new recovery password" : "Lūgums norādīt jaunu atkopes paroli",
"Please repeat the new recovery password" : "Lūgums atkārtot jauno atkopes paroli",
"Password successfully changed." : "Parole veiksmīgi nomainīta.",
"Could not change the password. Maybe the old password was not correct." : "Nevarēja mainīt paroli. Varbūt vecā parole nav pareiza.",
"Recovery Key disabled" : "Atkopšanas atslēga deaktivizēta",
+10 -13
View File
@@ -12,6 +12,7 @@ use OC\Files\View;
use OCA\Encryption\KeyManager;
use OCA\Encryption\Users\Setup;
use OCA\Encryption\Util;
use OCP\Files\FileInfo;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IUser;
@@ -202,15 +203,19 @@ class EncryptAll {
while ($root = array_pop($directories)) {
$content = $this->rootView->getDirectoryContent($root);
foreach ($content as $file) {
$path = $root . '/' . $file['name'];
if ($this->rootView->is_dir($path)) {
$path = $root . '/' . $file->getName();
if ($file->isShared()) {
$progress->setMessage("Skip shared file/folder $path");
$progress->advance();
continue;
} elseif ($file->getType() === FileInfo::TYPE_FOLDER) {
$directories[] = $path;
continue;
} else {
$progress->setMessage("encrypt files for user $userCount: $path");
$progress->advance();
try {
if ($this->encryptFile($path) === false) {
if ($this->encryptFile($file, $path) === false) {
$progress->setMessage("encrypt files for user $userCount: $path (already encrypted)");
$progress->advance();
}
@@ -231,17 +236,9 @@ class EncryptAll {
}
}
/**
* encrypt file
*
* @param string $path
* @return bool
*/
protected function encryptFile($path) {
protected function encryptFile(FileInfo $fileInfo, string $path): bool {
// skip already encrypted files
$fileInfo = $this->rootView->getFileInfo($path);
if ($fileInfo !== false && $fileInfo->isEncrypted()) {
if ($fileInfo->isEncrypted()) {
return true;
}
+15 -18
View File
@@ -82,7 +82,7 @@ class EncryptAllTest extends TestCase {
/**
* We need format method to return a string
* @var OutputFormatterInterface|\PHPUnit\Framework\MockObject\MockObject
* @var OutputFormatterInterface&MockObject
*/
$outputFormatter = $this->createMock(OutputFormatterInterface::class);
$outputFormatter->method('isDecorated')->willReturn(false);
@@ -114,6 +114,13 @@ class EncryptAllTest extends TestCase {
);
}
protected function createFileInfoMock($type, string $name): FileInfo&MockObject {
$fileInfo = $this->createMock(FileInfo::class);
$fileInfo->method('getType')->willReturn($type);
$fileInfo->method('getName')->willReturn($name);
return $fileInfo;
}
public function testEncryptAll(): void {
/** @var EncryptAll&MockObject $encryptAll */
$encryptAll = $this->getMockBuilder(EncryptAll::class)
@@ -299,8 +306,8 @@ class EncryptAllTest extends TestCase {
'',
null,
[
['name' => 'foo', 'type' => 'dir'],
['name' => 'bar', 'type' => 'file'],
$this->createFileInfoMock(FileInfo::TYPE_FOLDER, 'foo'),
$this->createFileInfoMock(FileInfo::TYPE_FILE, 'bar'),
],
],
[
@@ -308,26 +315,17 @@ class EncryptAllTest extends TestCase {
'',
null,
[
['name' => 'subfile', 'type' => 'file']
$this->createFileInfoMock(FileInfo::TYPE_FILE, 'subfile'),
],
],
]);
$this->view->expects($this->any())->method('is_dir')
->willReturnCallback(
function ($path) {
if ($path === '/user1/files/foo') {
return true;
}
return false;
}
);
$encryptAllCalls = [];
$encryptAll->expects($this->exactly(2))
->method('encryptFile')
->willReturnCallback(function (string $path) use (&$encryptAllCalls): void {
->willReturnCallback(function (FileInfo $file, string $path) use (&$encryptAllCalls): bool {
$encryptAllCalls[] = $path;
return true;
});
$outputFormatter = $this->createMock(OutputFormatterInterface::class);
@@ -362,8 +360,7 @@ class EncryptAllTest extends TestCase {
$fileInfo = $this->createMock(FileInfo::class);
$fileInfo->expects($this->any())->method('isEncrypted')
->willReturn($isEncrypted);
$this->view->expects($this->any())->method('getFileInfo')
->willReturn($fileInfo);
$this->view->expects($this->never())->method('getFileInfo');
if ($isEncrypted) {
@@ -375,7 +372,7 @@ class EncryptAllTest extends TestCase {
}
$this->assertTrue(
$this->invokePrivate($this->encryptAll, 'encryptFile', ['foo.txt'])
$this->invokePrivate($this->encryptAll, 'encryptFile', [$fileInfo, 'foo.txt'])
);
}
@@ -34,7 +34,7 @@ class SyncFederationAddressBooks {
$url = $trustedServer['url'];
$callback($url, null);
$sharedSecret = $trustedServer['shared_secret'];
$syncToken = $trustedServer['sync_token'];
$oldSyncToken = $trustedServer['sync_token'];
$endPoints = $this->ocsDiscoveryService->discover($url, 'FEDERATED_SHARING');
$cardDavUser = $endPoints['carddav-user'] ?? 'system';
@@ -49,10 +49,25 @@ class SyncFederationAddressBooks {
$targetBookProperties = [
'{DAV:}displayname' => $url
];
try {
$newToken = $this->syncService->syncRemoteAddressBook($url, $cardDavUser, $addressBookUrl, $sharedSecret, $syncToken, $targetBookId, $targetPrincipal, $targetBookProperties);
if ($newToken !== $syncToken) {
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $newToken);
$syncToken = $oldSyncToken;
do {
[$syncToken, $truncated] = $this->syncService->syncRemoteAddressBook(
$url,
$cardDavUser,
$addressBookUrl,
$sharedSecret,
$syncToken,
$targetBookId,
$targetPrincipal,
$targetBookProperties
);
} while ($truncated);
if ($syncToken !== $oldSyncToken) {
$this->dbHandler->setServerStatus($url, TrustedServers::STATUS_OK, $syncToken);
} else {
$this->logger->debug("Sync Token for $url unchanged from previous sync");
// The server status might have been changed to a failure status in previous runs.
@@ -45,7 +45,7 @@ class SyncFederationAddressbooksTest extends \Test\TestCase {
->with('https://cloud.example.org', 1, '1');
$syncService = $this->createMock(SyncService::class);
$syncService->expects($this->once())->method('syncRemoteAddressBook')
->willReturn('1');
->willReturn(['1', false]);
/** @var SyncService $syncService */
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger);
@@ -96,7 +96,7 @@ class SyncFederationAddressbooksTest extends \Test\TestCase {
->with('https://cloud.example.org', 1);
$syncService = $this->createMock(SyncService::class);
$syncService->expects($this->once())->method('syncRemoteAddressBook')
->willReturn('0');
->willReturn(['0', false]);
/** @var SyncService $syncService */
$s = new SyncFederationAddressBooks($dbHandler, $syncService, $this->discoveryService, $this->logger);
+8 -1
View File
@@ -52,6 +52,7 @@ OC.L10N.register(
"Files compatibility" : "Сумяшчальнасць файлаў",
"File Management" : "Кіраванне файламі",
"Home" : "Дадому",
"Target folder does not exist any more" : "Мэтавая папка больш не існуе",
"Reload current directory" : "Перазагрузіць бягучы каталог",
"Go to the \"{dir}\" directory" : "Перайсці да каталога \"{dir}\"",
"Drag and drop files here to upload" : "Перацягніце файлы сюды, каб запампаваць іх",
@@ -61,9 +62,14 @@ OC.L10N.register(
"Folder is loading" : "Папка загружаецца",
"Filename" : "Назва файла",
"Folder name" : "Назва папкі",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" перайменаваны ў \"{newName}\"",
"Rename file" : "Перайменаваць файл",
"Folder" : "Папка",
"Unknown file type" : "Невядомы тып файла",
"{ext} image" : "Відарыс {ext}",
"{ext} video" : "Відэа {ext}",
"{ext} audio" : "Аўдыя {ext} ",
"{ext} text" : "Тэкст {ext}",
"Pending" : "У чаканні",
"Unknown date" : "Невядомая дата",
"Clear filter" : "Ачысціць фільтр",
@@ -240,6 +246,7 @@ OC.L10N.register(
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл і 1 папка","{fileCount} файлы і 1 папка","{fileCount} файлаў і 1 папка","{fileCount} файлаў і 1 папка"],
"All folders" : "Усе папкі",
"Personal Files" : "Асабістыя файлы",
"Text file" : "Тэкставы файл"
"Text file" : "Тэкставы файл",
"%1$s (renamed)" : "%1$s (перайменаваны)"
},
"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);");
+8 -1
View File
@@ -50,6 +50,7 @@
"Files compatibility" : "Сумяшчальнасць файлаў",
"File Management" : "Кіраванне файламі",
"Home" : "Дадому",
"Target folder does not exist any more" : "Мэтавая папка больш не існуе",
"Reload current directory" : "Перазагрузіць бягучы каталог",
"Go to the \"{dir}\" directory" : "Перайсці да каталога \"{dir}\"",
"Drag and drop files here to upload" : "Перацягніце файлы сюды, каб запампаваць іх",
@@ -59,9 +60,14 @@
"Folder is loading" : "Папка загружаецца",
"Filename" : "Назва файла",
"Folder name" : "Назва папкі",
"Renamed \"{oldName}\" to \"{newName}\"" : "\"{oldName}\" перайменаваны ў \"{newName}\"",
"Rename file" : "Перайменаваць файл",
"Folder" : "Папка",
"Unknown file type" : "Невядомы тып файла",
"{ext} image" : "Відарыс {ext}",
"{ext} video" : "Відэа {ext}",
"{ext} audio" : "Аўдыя {ext} ",
"{ext} text" : "Тэкст {ext}",
"Pending" : "У чаканні",
"Unknown date" : "Невядомая дата",
"Clear filter" : "Ачысціць фільтр",
@@ -238,6 +244,7 @@
"_{fileCount} file and 1 folder_::_{fileCount} files and 1 folder_" : ["{fileCount} файл і 1 папка","{fileCount} файлы і 1 папка","{fileCount} файлаў і 1 папка","{fileCount} файлаў і 1 папка"],
"All folders" : "Усе папкі",
"Personal Files" : "Асабістыя файлы",
"Text file" : "Тэкставы файл"
"Text file" : "Тэкставы файл",
"%1$s (renamed)" : "%1$s (перайменаваны)"
},"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);"
}
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier",
"List of your files and folders." : "Liste deiner Dateien und Ordner",
"Folder tree" : "Ordnerbaum",
"List of your files and folders that are not shared." : "Liste deiner Dateien und Ordner, die nicht geteilt wurden.",
"No personal files found" : "Keine persönlichen Dateien gefunden",
"Files that are not shared will show up here." : "Dateien, die nicht geteilt wurden, werden hier angezeigt.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die als Favoriten markiert werden, erscheinen hier",
"List of your files and folders." : "Liste deiner Dateien und Ordner",
"Folder tree" : "Ordnerbaum",
"List of your files and folders that are not shared." : "Liste deiner Dateien und Ordner, die nicht geteilt wurden.",
"No personal files found" : "Keine persönlichen Dateien gefunden",
"Files that are not shared will show up here." : "Dateien, die nicht geteilt wurden, werden hier angezeigt.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
"List of your files and folders." : "Liste Ihrer Dateien und Ordner.",
"Folder tree" : "Ordnerbaum",
"List of your files and folders that are not shared." : "Liste Ihrer Dateien und Ordner, die nicht geteilt wurden.",
"No personal files found" : "Keine persönlichen Dateien gefunden",
"Files that are not shared will show up here." : "Dateien, die nicht geteilt wurden, werden hier angezeigt.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Noch keine Favoriten vorhanden",
"Files and folders you mark as favorite will show up here" : "Dateien und Ordner, die Sie als Favoriten kennzeichnen, werden hier erscheinen",
"List of your files and folders." : "Liste Ihrer Dateien und Ordner.",
"Folder tree" : "Ordnerbaum",
"List of your files and folders that are not shared." : "Liste Ihrer Dateien und Ordner, die nicht geteilt wurden.",
"No personal files found" : "Keine persönlichen Dateien gefunden",
"Files that are not shared will show up here." : "Dateien, die nicht geteilt wurden, werden hier angezeigt.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
"List of your files and folders." : "List of your files and folders.",
"Folder tree" : "Folder tree",
"List of your files and folders that are not shared." : "List of your files and folders that are not shared.",
"No personal files found" : "No personal files found",
"Files that are not shared will show up here." : "Files that are not shared will show up here.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "No favourites yet",
"Files and folders you mark as favorite will show up here" : "Files and folders you mark as favourite will show up here",
"List of your files and folders." : "List of your files and folders.",
"Folder tree" : "Folder tree",
"List of your files and folders that are not shared." : "List of your files and folders that are not shared.",
"No personal files found" : "No personal files found",
"Files that are not shared will show up here." : "Files that are not shared will show up here.",
+25 -16
View File
@@ -1,9 +1,9 @@
OC.L10N.register(
"files",
{
"Added to favorites" : "Agregado a favoritos",
"Added to favorites" : "Añadido a favoritos",
"Removed from favorites" : "Quitado de favoritos",
"You added {file} to your favorites" : "Has agregado {file} a tus favoritos",
"You added {file} to your favorites" : "Has añadido {file} a tus favoritos",
"You removed {file} from your favorites" : "Has quitado {file} de tus favoritos",
"Favorites" : "Favoritos",
"File changes" : "Cambios del archivo",
@@ -39,10 +39,10 @@ OC.L10N.register(
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile} a {newfile}",
"You moved {oldfile} to {newfile}" : "Has movido {oldfile} a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
"A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo fue agregado o borrado de tus <strong>favoritos</strong>",
"A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo se ha añadido o borrado de tus <strong>favoritos</strong>",
"Files" : "Archivos",
"A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta",
"A favorite file or folder has been <strong>changed</strong>" : "Un archivo o carpeta favorito ha sido <strong>cambiado</strong>",
"A favorite file or folder has been <strong>changed</strong>" : "Un archivo favorito o carpeta se ha <strong>cambiado</strong>",
"Failed to authorize" : "Fallo al autorizar",
"Invalid folder path" : "Ruta de carpeta inválida",
"Folder not found" : "Carpeta no encontrada",
@@ -129,6 +129,7 @@ OC.L10N.register(
"Search globally by filename …" : "Búsqueda global por nombre de archivo …",
"Search here by filename …" : "Buscar aquí por nombre de archivo …",
"Search scope options" : "Opciones de alcance de la búsqueda",
"Filter and search from this location" : "Filtrar y buscar en esta ubicación",
"Search globally" : "Buscar globalmente",
"{usedQuotaByte} used" : "{usedQuotaByte} utilizados",
"{used} of {quota} used" : "{used} usados de {quota}",
@@ -141,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Crear carpeta nueva",
"This name is already in use." : "Este nombre ya está en uso.",
"Create" : "Crear",
"Files starting with a dot are hidden by default" : "Los archivos que comienzan con un punto son ocultados por defecto",
"Fill template fields" : "Rellenar los campos de la plantilla",
"Submitting fields …" : "Enviando campos …",
"Submit" : "Enviar",
@@ -182,7 +184,7 @@ OC.L10N.register(
"Loading current folder" : "Cargando carpeta actual",
"Retry" : "Reintentar",
"No files in here" : "Aquí no hay archivos",
"Upload some content or sync with your devices!" : "¡Suba contenidos o sincronice sus dispositivos!",
"Upload some content or sync with your devices!" : "¡Sube contenido o sincroniza tus dispositivos!",
"Go back" : "Ir atrás",
"Views" : "Vistas",
"Files settings" : "Configuración de archivos",
@@ -200,16 +202,21 @@ OC.L10N.register(
"Sort favorites first" : "Ordenar los favoritos primero",
"Sort folders before files" : "Ordenar carpetas antes que archivos",
"Enable folder tree" : "Habilitar el árbol de carpetas",
"Visual settings" : "Ajustes visuales",
"Show hidden files" : "Mostrar archivos ocultos",
"Show file type column" : "Mostrar la columna de tipo de archivo",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Show files extensions" : "Mostrar extensiones de archivos",
"Additional settings" : "Ajustes adicionales",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"WebDAV URL" : "URL de WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV." : "Usa esta dirección para acceder a tus Archivos a través de WebDAV.",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "La autenticación en dos pasos está habilitada para su cuenta y, por lo tanto, debe usar una contraseña de aplicación para conectarse a un cliente WebDAV externo.",
"Warnings" : "Advertencias",
"Prevent warning dialogs from open or reenable them." : "Evitar que se abran los diálogos de advertencia o volver a habilitarlos.",
"Show a warning dialog when changing a file extension." : "Mostrar un diálogo de advertencia cuando se cambia la extensión de un archivo.",
"Show a warning dialog when deleting files." : "Mostrar un cuadro de aviso cuando se borren archivos.",
"Keyboard shortcuts" : "Atajos de teclado",
"Speed up your Files experience with these quick shortcuts." : "Acelere su experiencia con Archivos con esos rápidos atajos de teclado.",
"Open the actions menu for a file" : "Abrir el menú de acciones para un archivo",
@@ -327,6 +334,7 @@ OC.L10N.register(
"Templates" : "Plantillas",
"New template folder" : "Nueva carpeta de plantillas",
"In folder" : "En carpeta",
"Search in all files" : "Buscar en todos los archivos",
"Search in folder: {folder}" : "Buscar en carpeta: {folder}",
"One of the dropped files could not be processed" : "Uno de los archivos arrastrados no puede ser procesado",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Su navegador no soporta la API de Sistema de archivos. Los directorios no se subirán",
@@ -360,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
"List of your files and folders." : "Lista de sus archivos y carpetas.",
"Folder tree" : "Árbol de carpetas",
"List of your files and folders that are not shared." : "Lista de sus archivos y carpetas que no están compartidos.",
"No personal files found" : "No se encontraron archivos personales",
"Files that are not shared will show up here." : "Los archivos y carpetas que no ha compartido aparecerán aquí.",
@@ -372,12 +381,12 @@ OC.L10N.register(
"No entries found in this folder" : "No hay entradas en esta carpeta",
"Select all" : "Seleccionar todo",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"File could not be found" : "El archivo no se ha encontrado",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Close" : "Cerrar",
"Could not create folder \"{dir}\"" : "No se pudo crear la carpeta \"{dir}\"",
"Could not create folder \"{dir}\"" : "No se ha podido crear la carpeta \"{dir}\"",
"This will stop your current uploads." : "Esto detendrá las subidas en curso.",
"Upload cancelled." : "Subida cancelada.",
"Processing files …" : "Procesando archivos …",
@@ -385,7 +394,7 @@ OC.L10N.register(
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"An unknown error has occurred" : "Ha ocurrido un error desconocido",
"An unknown error has occurred" : "Se ha producido un error desconocido",
"File could not be uploaded" : "No se ha podido subir el archivo",
"Uploading …" : "Subiendo …",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
@@ -404,18 +413,18 @@ OC.L10N.register(
"Select directory \"{dirName}\"" : "Seleccione la carpeta \"{dirName}\"",
"Select file \"{fileName}\"" : "Seleccione el archivo \"{fileName}\"",
"Unable to determine date" : "No se ha podido determinar la fecha",
"Could not move \"{file}\", target exists" : "No se pudo mover \"{file}\", ya existe",
"Could not move \"{file}\"" : "No se pudo mover \"{file}\"",
"Could not move \"{file}\", target exists" : "No se ha podido mover \"{file}\", ya existe",
"Could not move \"{file}\"" : "No se ha podido mover \"{file}\"",
"copy" : "copiar",
"Could not copy \"{file}\", target exists" : "No se ha podido copiar \"{file}\", ya existe el destino",
"Could not copy \"{file}\"" : "No se ha podido copiar \"{file}\"",
"Copied {origin} inside {destination}" : "Se ha copiado {origin} dentro de {destination}",
"Copied {origin} and {nbfiles} other files inside {destination}" : "Se han copiado {origin} y {nbfiles} otros archivos dentro de {destination}",
"{newName} already exists" : "{newName} ya existe",
"Could not create file \"{file}\"" : "No se pudo crear archivo \"{file}\"",
"Could not create file \"{file}\"" : "No se ha podido crear el archivo \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "No se pudo crear archivo \"{file}\" porque ya existe",
"Could not create folder \"{dir}\" because it already exists" : "No se ha podido crear la carpeta \"{dir}\" porque ya existe",
"Could not fetch file details \"{file}\"" : "No se pudieron obtener los detalles de \"{file}\"",
"Could not fetch file details \"{file}\"" : "No se han podido obtener los detalles de \"{file}\"",
"Error deleting file \"{fileName}\"." : "Error al borrar el archivo \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados de búsqueda en otras carpetas para {tag}{filter}{endtag}",
"Enter more than two characters to search in other folders" : "Escriba más de dos caracteres para buscar en otras carpetas",
@@ -428,7 +437,7 @@ OC.L10N.register(
"Select file range" : "Seleccionar el rango de archivos",
"{used}%" : "{used}%",
"{used} used" : "{used} usados",
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.",
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo no válido.",
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
"\"/\" is not allowed inside a file name." : "\"/\" no se permite en un nombre de archivo.",
"\"{name}\" is not an allowed filetype" : "\"{name}\" no es un tipo de archivo permitido",
@@ -446,10 +455,10 @@ OC.L10N.register(
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
"Favored" : "Favorecido",
"Favor" : "Favorecer",
"Copy direct link (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Copy direct link (only works for people who have access to this file/folder)" : "Copiar enlace directo (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Upload file" : "Subir archivo",
"Not favored" : "No favorecido",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"An error occurred while trying to update the tags" : "Se ha producido un error al tratar de actualizar las etiquetas",
"Upload (max. %s)" : "Subida (máx. %s)",
"Submitting fields…" : "Enviando campos…",
"Filter filenames…" : "Filtrar nombres de archivo…",
+25 -16
View File
@@ -1,7 +1,7 @@
{ "translations": {
"Added to favorites" : "Agregado a favoritos",
"Added to favorites" : "Añadido a favoritos",
"Removed from favorites" : "Quitado de favoritos",
"You added {file} to your favorites" : "Has agregado {file} a tus favoritos",
"You added {file} to your favorites" : "Has añadido {file} a tus favoritos",
"You removed {file} from your favorites" : "Has quitado {file} de tus favoritos",
"Favorites" : "Favoritos",
"File changes" : "Cambios del archivo",
@@ -37,10 +37,10 @@
"{user} renamed {oldfile} to {newfile}" : "{user} ha renombrado {oldfile} a {newfile}",
"You moved {oldfile} to {newfile}" : "Has movido {oldfile} a {newfile}",
"{user} moved {oldfile} to {newfile}" : "{user} movió {oldfile} a {newfile}",
"A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo fue agregado o borrado de tus <strong>favoritos</strong>",
"A file has been added to or removed from your <strong>favorites</strong>" : "Un archivo se ha añadido o borrado de tus <strong>favoritos</strong>",
"Files" : "Archivos",
"A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta",
"A favorite file or folder has been <strong>changed</strong>" : "Un archivo o carpeta favorito ha sido <strong>cambiado</strong>",
"A favorite file or folder has been <strong>changed</strong>" : "Un archivo favorito o carpeta se ha <strong>cambiado</strong>",
"Failed to authorize" : "Fallo al autorizar",
"Invalid folder path" : "Ruta de carpeta inválida",
"Folder not found" : "Carpeta no encontrada",
@@ -127,6 +127,7 @@
"Search globally by filename …" : "Búsqueda global por nombre de archivo …",
"Search here by filename …" : "Buscar aquí por nombre de archivo …",
"Search scope options" : "Opciones de alcance de la búsqueda",
"Filter and search from this location" : "Filtrar y buscar en esta ubicación",
"Search globally" : "Buscar globalmente",
"{usedQuotaByte} used" : "{usedQuotaByte} utilizados",
"{used} of {quota} used" : "{used} usados de {quota}",
@@ -139,6 +140,7 @@
"Create new folder" : "Crear carpeta nueva",
"This name is already in use." : "Este nombre ya está en uso.",
"Create" : "Crear",
"Files starting with a dot are hidden by default" : "Los archivos que comienzan con un punto son ocultados por defecto",
"Fill template fields" : "Rellenar los campos de la plantilla",
"Submitting fields …" : "Enviando campos …",
"Submit" : "Enviar",
@@ -180,7 +182,7 @@
"Loading current folder" : "Cargando carpeta actual",
"Retry" : "Reintentar",
"No files in here" : "Aquí no hay archivos",
"Upload some content or sync with your devices!" : "¡Suba contenidos o sincronice sus dispositivos!",
"Upload some content or sync with your devices!" : "¡Sube contenido o sincroniza tus dispositivos!",
"Go back" : "Ir atrás",
"Views" : "Vistas",
"Files settings" : "Configuración de archivos",
@@ -198,16 +200,21 @@
"Sort favorites first" : "Ordenar los favoritos primero",
"Sort folders before files" : "Ordenar carpetas antes que archivos",
"Enable folder tree" : "Habilitar el árbol de carpetas",
"Visual settings" : "Ajustes visuales",
"Show hidden files" : "Mostrar archivos ocultos",
"Show file type column" : "Mostrar la columna de tipo de archivo",
"Crop image previews" : "Recortar la previsualización de las imágenes",
"Show files extensions" : "Mostrar extensiones de archivos",
"Additional settings" : "Ajustes adicionales",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"WebDAV URL" : "URL de WebDAV",
"Copy to clipboard" : "Copiar al portapapeles",
"Use this address to access your Files via WebDAV." : "Usa esta dirección para acceder a tus Archivos a través de WebDAV.",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "La autenticación en dos pasos está habilitada para su cuenta y, por lo tanto, debe usar una contraseña de aplicación para conectarse a un cliente WebDAV externo.",
"Warnings" : "Advertencias",
"Prevent warning dialogs from open or reenable them." : "Evitar que se abran los diálogos de advertencia o volver a habilitarlos.",
"Show a warning dialog when changing a file extension." : "Mostrar un diálogo de advertencia cuando se cambia la extensión de un archivo.",
"Show a warning dialog when deleting files." : "Mostrar un cuadro de aviso cuando se borren archivos.",
"Keyboard shortcuts" : "Atajos de teclado",
"Speed up your Files experience with these quick shortcuts." : "Acelere su experiencia con Archivos con esos rápidos atajos de teclado.",
"Open the actions menu for a file" : "Abrir el menú de acciones para un archivo",
@@ -325,6 +332,7 @@
"Templates" : "Plantillas",
"New template folder" : "Nueva carpeta de plantillas",
"In folder" : "En carpeta",
"Search in all files" : "Buscar en todos los archivos",
"Search in folder: {folder}" : "Buscar en carpeta: {folder}",
"One of the dropped files could not be processed" : "Uno de los archivos arrastrados no puede ser procesado",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Su navegador no soporta la API de Sistema de archivos. Los directorios no se subirán",
@@ -358,6 +366,7 @@
"No favorites yet" : "Aún no hay favoritos",
"Files and folders you mark as favorite will show up here" : "Aquí aparecerán los archivos y carpetas que has marcado como favoritos",
"List of your files and folders." : "Lista de sus archivos y carpetas.",
"Folder tree" : "Árbol de carpetas",
"List of your files and folders that are not shared." : "Lista de sus archivos y carpetas que no están compartidos.",
"No personal files found" : "No se encontraron archivos personales",
"Files that are not shared will show up here." : "Los archivos y carpetas que no ha compartido aparecerán aquí.",
@@ -370,12 +379,12 @@
"No entries found in this folder" : "No hay entradas en esta carpeta",
"Select all" : "Seleccionar todo",
"Upload too large" : "Subida demasido grande",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que está intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"The files you are trying to upload exceed the maximum size for file uploads on this server." : "Los archivos que estás intentando subir sobrepasan el tamaño máximo permitido en este servidor.",
"File could not be found" : "El archivo no se ha encontrado",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Close" : "Cerrar",
"Could not create folder \"{dir}\"" : "No se pudo crear la carpeta \"{dir}\"",
"Could not create folder \"{dir}\"" : "No se ha podido crear la carpeta \"{dir}\"",
"This will stop your current uploads." : "Esto detendrá las subidas en curso.",
"Upload cancelled." : "Subida cancelada.",
"Processing files …" : "Procesando archivos …",
@@ -383,7 +392,7 @@
"Unable to upload {filename} as it is a directory or has 0 bytes" : "No ha sido posible subir {filename} porque es un directorio o tiene 0 bytes",
"Not enough free space, you are uploading {size1} but only {size2} is left" : "No hay suficiente espacio libre. Quiere subir {size1} pero solo quedan {size2}",
"Target folder \"{dir}\" does not exist any more" : "La carpeta de destino \"{dir}\" ya no existe",
"An unknown error has occurred" : "Ha ocurrido un error desconocido",
"An unknown error has occurred" : "Se ha producido un error desconocido",
"File could not be uploaded" : "No se ha podido subir el archivo",
"Uploading …" : "Subiendo …",
"{remainingTime} ({currentNumber}/{total})" : "{remainingTime} ({currentNumber}/{total})",
@@ -402,18 +411,18 @@
"Select directory \"{dirName}\"" : "Seleccione la carpeta \"{dirName}\"",
"Select file \"{fileName}\"" : "Seleccione el archivo \"{fileName}\"",
"Unable to determine date" : "No se ha podido determinar la fecha",
"Could not move \"{file}\", target exists" : "No se pudo mover \"{file}\", ya existe",
"Could not move \"{file}\"" : "No se pudo mover \"{file}\"",
"Could not move \"{file}\", target exists" : "No se ha podido mover \"{file}\", ya existe",
"Could not move \"{file}\"" : "No se ha podido mover \"{file}\"",
"copy" : "copiar",
"Could not copy \"{file}\", target exists" : "No se ha podido copiar \"{file}\", ya existe el destino",
"Could not copy \"{file}\"" : "No se ha podido copiar \"{file}\"",
"Copied {origin} inside {destination}" : "Se ha copiado {origin} dentro de {destination}",
"Copied {origin} and {nbfiles} other files inside {destination}" : "Se han copiado {origin} y {nbfiles} otros archivos dentro de {destination}",
"{newName} already exists" : "{newName} ya existe",
"Could not create file \"{file}\"" : "No se pudo crear archivo \"{file}\"",
"Could not create file \"{file}\"" : "No se ha podido crear el archivo \"{file}\"",
"Could not create file \"{file}\" because it already exists" : "No se pudo crear archivo \"{file}\" porque ya existe",
"Could not create folder \"{dir}\" because it already exists" : "No se ha podido crear la carpeta \"{dir}\" porque ya existe",
"Could not fetch file details \"{file}\"" : "No se pudieron obtener los detalles de \"{file}\"",
"Could not fetch file details \"{file}\"" : "No se han podido obtener los detalles de \"{file}\"",
"Error deleting file \"{fileName}\"." : "Error al borrar el archivo \"{fileName}\".",
"No search results in other folders for {tag}{filter}{endtag}" : "No hay resultados de búsqueda en otras carpetas para {tag}{filter}{endtag}",
"Enter more than two characters to search in other folders" : "Escriba más de dos caracteres para buscar en otras carpetas",
@@ -426,7 +435,7 @@
"Select file range" : "Seleccionar el rango de archivos",
"{used}%" : "{used}%",
"{used} used" : "{used} usados",
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.",
"\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo no válido.",
"File name cannot be empty." : "El nombre de archivo no puede estar vacío.",
"\"/\" is not allowed inside a file name." : "\"/\" no se permite en un nombre de archivo.",
"\"{name}\" is not an allowed filetype" : "\"{name}\" no es un tipo de archivo permitido",
@@ -444,10 +453,10 @@
"_%n byte_::_%n bytes_" : ["%n byte","%n bytes","%n bytes"],
"Favored" : "Favorecido",
"Favor" : "Favorecer",
"Copy direct link (only works for people who have access to this file/folder)" : "El enlace directo fue copiado (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Copy direct link (only works for people who have access to this file/folder)" : "Copiar enlace directo (solo funciona para usuarios que tienen acceso a este archivo/carpeta)",
"Upload file" : "Subir archivo",
"Not favored" : "No favorecido",
"An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas",
"An error occurred while trying to update the tags" : "Se ha producido un error al tratar de actualizar las etiquetas",
"Upload (max. %s)" : "Subida (máx. %s)",
"Submitting fields…" : "Enviando campos…",
"Filter filenames…" : "Filtrar nombres de archivo…",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Lemmikuid veel pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
"List of your files and folders." : "Sinu failide ja kaustade loend.",
"Folder tree" : "Kaustapuu",
"List of your files and folders that are not shared." : "Sinu mittejagatud failide ja kaustade loend",
"No personal files found" : "Isiklikke faile ei leitud",
"Files that are not shared will show up here." : "Siin kuvatakse faile ja kaustu, mida sa pole teistega jaganud.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Lemmikuid veel pole",
"Files and folders you mark as favorite will show up here" : "Siin kuvatakse faile ja kaustasid, mille oled märkinud lemmikuteks",
"List of your files and folders." : "Sinu failide ja kaustade loend.",
"Folder tree" : "Kaustapuu",
"List of your files and folders that are not shared." : "Sinu mittejagatud failide ja kaustade loend",
"No personal files found" : "Isiklikke faile ei leitud",
"Files that are not shared will show up here." : "Siin kuvatakse faile ja kaustu, mida sa pole teistega jaganud.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Níl aon cheanáin go fóill",
"Files and folders you mark as favorite will show up here" : "Taispeánfar comhaid agus fillteáin a mharcálann tú mar is fearr leat anseo",
"List of your files and folders." : "Liosta de do chuid comhad agus fillteáin.",
"Folder tree" : "Crann fillteán",
"List of your files and folders that are not shared." : "Liosta de do chuid comhad agus fillteáin nach bhfuil roinnte.",
"No personal files found" : "Níor aimsíodh aon chomhaid phearsanta",
"Files that are not shared will show up here." : "Taispeánfar comhaid nach bhfuil roinnte anseo.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Níl aon cheanáin go fóill",
"Files and folders you mark as favorite will show up here" : "Taispeánfar comhaid agus fillteáin a mharcálann tú mar is fearr leat anseo",
"List of your files and folders." : "Liosta de do chuid comhad agus fillteáin.",
"Folder tree" : "Crann fillteán",
"List of your files and folders that are not shared." : "Liosta de do chuid comhad agus fillteáin nach bhfuil roinnte.",
"No personal files found" : "Níor aimsíodh aon chomhaid phearsanta",
"Files that are not shared will show up here." : "Taispeánfar comhaid nach bhfuil roinnte anseo.",
+17
View File
@@ -277,15 +277,24 @@ OC.L10N.register(
"This year ({year})" : "Оваа година ({year})",
"Last year ({year})" : "Минатата година ({year})",
"Documents" : "Документи",
"Spreadsheets" : "Табели",
"Presentations" : "Презентации",
"PDFs" : "PDF-и",
"Folders" : "Папки",
"Audio" : "Аудио",
"Photos and images" : "Фотографии и слики",
"Videos" : "Видеа",
"Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
"Unable to initialize the templates directory" : "Не може да се иницијализира папка за шаблони",
"Create templates folder" : "Креирај папка за шаблони",
"Templates" : "Шаблони",
"New template folder" : "Нова папка за шаблони",
"In folder" : "Во папка",
"Search in folder: {folder}" : "Барај во папка: {folder}",
"One of the dropped files could not be processed" : "Една од испуштените датотеки неможе да се процесоира",
"Unable to create the directory {directory}" : "Неможе да се креира папка {directory}",
"Some files could not be uploaded" : "Некој датотеки неможат да се прикачат",
"Files uploaded successfully" : "Успешно прикачени датотеки",
"Some files could not be moved" : "Некои датотеки не можат да се преместат",
"Could not rename \"{oldName}\", it does not exist any more" : "Неможе да се преименува \"{oldName}\", не постои повеќе",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Името \"{newName}\" веќе се користи во папката \"{dir}\". Ве молиме изберете друго име.",
@@ -293,9 +302,15 @@ OC.L10N.register(
"This operation is forbidden" : "Операцијата не е дозволена",
"This directory is unavailable, please check the logs or contact the administrator" : "Овој директориум е недостапен, ве молиме проверете ги логовите или контактирајте со администраторот",
"Storage is temporarily not available" : "Складиштето моментално не е достапно",
"Unexpected error: {error}" : "Неочекувана грешка: {error}",
"_%n file_::_%n files_" : ["%n датотека","%n датотеки"],
"_%n folder_::_%n folders_" : ["%n папка","%n папки"],
"Filename must not be empty." : "Името на датотеката не може да биде празно.",
"\"{char}\" is not allowed inside a filename." : "\"{char}\" не е дозволен во името на датотеката.",
"\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" е резервирано име и не е дозволено во името на датотеката.",
"\"{extension}\" is not an allowed filetype." : "\"{extension}\" не е дозволен вид на датотека.",
"Filenames must not end with \"{extension}\"." : "Името неможе да завршува со \"{extension}\".",
"List of favorite files and folders." : "Листа на омилени датотеки и папки.",
"No favorites yet" : "Сеуште нема фаворити",
"Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука",
"List of your files and folders." : "Листа на вашите датотеки и папки.",
@@ -397,6 +412,8 @@ OC.L10N.register(
"Personal Files" : "Лични датотеки",
"Text file" : "Текстуална датотека",
"New text file.txt" : "Нова текстуална датотека file.txt",
"%1$s (renamed)" : "%1$s (преименувано)",
"renamed file" : "преименувана датотека",
"Filter file names …" : "Филтрирај имиња на датотеки ..."
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
+17
View File
@@ -275,15 +275,24 @@
"This year ({year})" : "Оваа година ({year})",
"Last year ({year})" : "Минатата година ({year})",
"Documents" : "Документи",
"Spreadsheets" : "Табели",
"Presentations" : "Презентации",
"PDFs" : "PDF-и",
"Folders" : "Папки",
"Audio" : "Аудио",
"Photos and images" : "Фотографии и слики",
"Videos" : "Видеа",
"Created new folder \"{name}\"" : "Креирана нова папка \"{name}\"",
"Unable to initialize the templates directory" : "Не може да се иницијализира папка за шаблони",
"Create templates folder" : "Креирај папка за шаблони",
"Templates" : "Шаблони",
"New template folder" : "Нова папка за шаблони",
"In folder" : "Во папка",
"Search in folder: {folder}" : "Барај во папка: {folder}",
"One of the dropped files could not be processed" : "Една од испуштените датотеки неможе да се процесоира",
"Unable to create the directory {directory}" : "Неможе да се креира папка {directory}",
"Some files could not be uploaded" : "Некој датотеки неможат да се прикачат",
"Files uploaded successfully" : "Успешно прикачени датотеки",
"Some files could not be moved" : "Некои датотеки не можат да се преместат",
"Could not rename \"{oldName}\", it does not exist any more" : "Неможе да се преименува \"{oldName}\", не постои повеќе",
"The name \"{newName}\" is already used in the folder \"{dir}\". Please choose a different name." : "Името \"{newName}\" веќе се користи во папката \"{dir}\". Ве молиме изберете друго име.",
@@ -291,9 +300,15 @@
"This operation is forbidden" : "Операцијата не е дозволена",
"This directory is unavailable, please check the logs or contact the administrator" : "Овој директориум е недостапен, ве молиме проверете ги логовите или контактирајте со администраторот",
"Storage is temporarily not available" : "Складиштето моментално не е достапно",
"Unexpected error: {error}" : "Неочекувана грешка: {error}",
"_%n file_::_%n files_" : ["%n датотека","%n датотеки"],
"_%n folder_::_%n folders_" : ["%n папка","%n папки"],
"Filename must not be empty." : "Името на датотеката не може да биде празно.",
"\"{char}\" is not allowed inside a filename." : "\"{char}\" не е дозволен во името на датотеката.",
"\"{segment}\" is a reserved name and not allowed for filenames." : "\"{segment}\" е резервирано име и не е дозволено во името на датотеката.",
"\"{extension}\" is not an allowed filetype." : "\"{extension}\" не е дозволен вид на датотека.",
"Filenames must not end with \"{extension}\"." : "Името неможе да завршува со \"{extension}\".",
"List of favorite files and folders." : "Листа на омилени датотеки и папки.",
"No favorites yet" : "Сеуште нема фаворити",
"Files and folders you mark as favorite will show up here" : "Датотеките и папките кои ќе ги означите како чести, ќе се појават тука",
"List of your files and folders." : "Листа на вашите датотеки и папки.",
@@ -395,6 +410,8 @@
"Personal Files" : "Лични датотеки",
"Text file" : "Текстуална датотека",
"New text file.txt" : "Нова текстуална датотека file.txt",
"%1$s (renamed)" : "%1$s (преименувано)",
"renamed file" : "преименувана датотека",
"Filter file names …" : "Филтрирај имиња на датотеки ..."
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
}
+13 -1
View File
@@ -29,7 +29,7 @@ OC.L10N.register(
"{user} deleted an encrypted file in {file}" : "{user} heeft een versleuteld bestand gewist in {file}",
"You restored {file}" : "Je herstelde {file}",
"{user} restored {file}" : "{user} herstelde {file}",
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Je hernoemde {oldfile} (verborgen) naar {newfile}",
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Je hernoemde {oldfile} (verborgen) naar {newfile}(verborgen)",
"You renamed {oldfile} (hidden) to {newfile}" : "Je hernoemde {oldfile} (verborgen) naar {newfile}",
"You renamed {oldfile} to {newfile} (hidden)" : "Je hernoemde {oldfile} naar {newfile} (verborgen)",
"You renamed {oldfile} to {newfile}" : "Je hernoemde {oldfile} naar {newfile}",
@@ -142,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "Nieuwe map aanmaken",
"This name is already in use." : "De naam is al in gebruik.",
"Create" : "Aanmaken",
"Files starting with a dot are hidden by default" : "Bestanden die met een punt beginnen, worden standaard verborgen",
"Fill template fields" : "Vul de velden van het sjabloon in",
"Submitting fields …" : "Velden verwerken ...",
"Submit" : "Verwerken",
@@ -201,16 +202,21 @@ OC.L10N.register(
"Sort favorites first" : "Sorteer eerst favorieten",
"Sort folders before files" : "Sorteer mappen voor bestanden",
"Enable folder tree" : "Mappenboom inschakelen",
"Visual settings" : "Visuele instellingen",
"Show hidden files" : "Toon verborgen bestanden",
"Show file type column" : "Toon bestandstypekolom",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
"Show files extensions" : "Bestanden extensies weergeven",
"Additional settings" : "Aanvullende instellingen",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"Copy to clipboard" : "Kopiëren naar het klembord",
"Use this address to access your Files via WebDAV." : "Gebruik dit adres om toegang te krijgen tot je bestanden via WebDAV.",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Tweefactorauthenticatie is ingeschakeld voor jouw account en daarom moet je een app-wachtwoord gebruiken om een externe WebDAV-client aan te sluiten.",
"Warnings" : "Waarschuwingen",
"Prevent warning dialogs from open or reenable them." : "Voorkom dat waarschuwingsvensters worden geopend of schakel ze opnieuw in.",
"Show a warning dialog when changing a file extension." : "Een waarschuwingsvenster tonen bij het wijzigen van een bestandsextensie.",
"Show a warning dialog when deleting files." : "Een waarschuwingsdialoogvenster tonen bij het verwijderen van bestanden.",
"Keyboard shortcuts" : "Toetsenbord sneltoetsen",
"Speed up your Files experience with these quick shortcuts." : "Verbeter je interactie met bestanden met deze snelkoppelingen.",
"Open the actions menu for a file" : "Open het actiemenu voor een bestand",
@@ -235,6 +241,7 @@ OC.L10N.register(
"Show those shortcuts" : "Toon die snelkoppelingen",
"You" : "Jij",
"Shared multiple times with different people" : "Meerdere keren gedeeld met verschillende mensen",
"Unable to change the favorite state of the file" : "Kan de favoriete status van het bestand niet wijzigen",
"Error while loading the file data" : "Fout bij het lezen van de bestandsgegevens",
"Owner" : "Eigenaar",
"Remove from favorites" : "Verwijderen uit favorieten",
@@ -278,6 +285,8 @@ OC.L10N.register(
"Download" : "Downloaden",
"Moving \"{source}\" to \"{destination}\" …" : "Verplaatsen \"{source}\" naar \"{destination}\" …",
"Copying \"{source}\" to \"{destination}\" …" : "Kopiëren \"{source}\" naar \"{destination}\" …",
"Destination is not a folder" : "Bestemming is geen map",
"This file/folder is already in that directory" : "Dit bestand/deze map staat al in die map",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Je kan een bestand/map niet verplaatsen naar zichzelf of naar een subfolder van zichzelf.",
"(copy)" : "(kopieer)",
"(copy %n)" : "(kopieer %n)",
@@ -325,6 +334,7 @@ OC.L10N.register(
"Templates" : "Sjablonen",
"New template folder" : "Nieuwe sjablonenmap",
"In folder" : "In map",
"Search in all files" : "Zoeken in alle bestanden",
"Search in folder: {folder}" : "Zoeken in map: {folder}",
"One of the dropped files could not be processed" : "Een van de bestanden kon niet verwerkt worden.",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Je browser ondersteund de Filesystem API niet. Mappen worden niet geüpload",
@@ -358,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Nog geen favorieten",
"Files and folders you mark as favorite will show up here" : "Bestanden en mappen die je als favoriet aanmerkt, worden hier getoond",
"List of your files and folders." : "Lijst van je bestanden en mappen.",
"Folder tree" : "Mapboom",
"List of your files and folders that are not shared." : "Lijst van je bestanden en mappen die niet gedeeld zijn.",
"No personal files found" : "Geen persoonlijke bestanden gevonden",
"Files that are not shared will show up here." : "Niet-gedeelde bestanden worden hier getoond.",
@@ -366,6 +377,7 @@ OC.L10N.register(
"No recently modified files" : "Geen recent gewijzigde bestanden",
"Files and folders you recently modified will show up here." : "Bestanden en mappen die je recent gewijzigd hebt, worden hier getoond.",
"Search" : "Zoeken",
"Search results within your files." : "Zoekresultaten binnen jouw bestanden.",
"No entries found in this folder" : "Niets gevonden in deze map",
"Select all" : "Alles selecteren",
"Upload too large" : "Upload is te groot",
+13 -1
View File
@@ -27,7 +27,7 @@
"{user} deleted an encrypted file in {file}" : "{user} heeft een versleuteld bestand gewist in {file}",
"You restored {file}" : "Je herstelde {file}",
"{user} restored {file}" : "{user} herstelde {file}",
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Je hernoemde {oldfile} (verborgen) naar {newfile}",
"You renamed {oldfile} (hidden) to {newfile} (hidden)" : "Je hernoemde {oldfile} (verborgen) naar {newfile}(verborgen)",
"You renamed {oldfile} (hidden) to {newfile}" : "Je hernoemde {oldfile} (verborgen) naar {newfile}",
"You renamed {oldfile} to {newfile} (hidden)" : "Je hernoemde {oldfile} naar {newfile} (verborgen)",
"You renamed {oldfile} to {newfile}" : "Je hernoemde {oldfile} naar {newfile}",
@@ -140,6 +140,7 @@
"Create new folder" : "Nieuwe map aanmaken",
"This name is already in use." : "De naam is al in gebruik.",
"Create" : "Aanmaken",
"Files starting with a dot are hidden by default" : "Bestanden die met een punt beginnen, worden standaard verborgen",
"Fill template fields" : "Vul de velden van het sjabloon in",
"Submitting fields …" : "Velden verwerken ...",
"Submit" : "Verwerken",
@@ -199,16 +200,21 @@
"Sort favorites first" : "Sorteer eerst favorieten",
"Sort folders before files" : "Sorteer mappen voor bestanden",
"Enable folder tree" : "Mappenboom inschakelen",
"Visual settings" : "Visuele instellingen",
"Show hidden files" : "Toon verborgen bestanden",
"Show file type column" : "Toon bestandstypekolom",
"Crop image previews" : "Snij afbeeldingvoorbeelden bij",
"Show files extensions" : "Bestanden extensies weergeven",
"Additional settings" : "Aanvullende instellingen",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"Copy to clipboard" : "Kopiëren naar het klembord",
"Use this address to access your Files via WebDAV." : "Gebruik dit adres om toegang te krijgen tot je bestanden via WebDAV.",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "Tweefactorauthenticatie is ingeschakeld voor jouw account en daarom moet je een app-wachtwoord gebruiken om een externe WebDAV-client aan te sluiten.",
"Warnings" : "Waarschuwingen",
"Prevent warning dialogs from open or reenable them." : "Voorkom dat waarschuwingsvensters worden geopend of schakel ze opnieuw in.",
"Show a warning dialog when changing a file extension." : "Een waarschuwingsvenster tonen bij het wijzigen van een bestandsextensie.",
"Show a warning dialog when deleting files." : "Een waarschuwingsdialoogvenster tonen bij het verwijderen van bestanden.",
"Keyboard shortcuts" : "Toetsenbord sneltoetsen",
"Speed up your Files experience with these quick shortcuts." : "Verbeter je interactie met bestanden met deze snelkoppelingen.",
"Open the actions menu for a file" : "Open het actiemenu voor een bestand",
@@ -233,6 +239,7 @@
"Show those shortcuts" : "Toon die snelkoppelingen",
"You" : "Jij",
"Shared multiple times with different people" : "Meerdere keren gedeeld met verschillende mensen",
"Unable to change the favorite state of the file" : "Kan de favoriete status van het bestand niet wijzigen",
"Error while loading the file data" : "Fout bij het lezen van de bestandsgegevens",
"Owner" : "Eigenaar",
"Remove from favorites" : "Verwijderen uit favorieten",
@@ -276,6 +283,8 @@
"Download" : "Downloaden",
"Moving \"{source}\" to \"{destination}\" …" : "Verplaatsen \"{source}\" naar \"{destination}\" …",
"Copying \"{source}\" to \"{destination}\" …" : "Kopiëren \"{source}\" naar \"{destination}\" …",
"Destination is not a folder" : "Bestemming is geen map",
"This file/folder is already in that directory" : "Dit bestand/deze map staat al in die map",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "Je kan een bestand/map niet verplaatsen naar zichzelf of naar een subfolder van zichzelf.",
"(copy)" : "(kopieer)",
"(copy %n)" : "(kopieer %n)",
@@ -323,6 +332,7 @@
"Templates" : "Sjablonen",
"New template folder" : "Nieuwe sjablonenmap",
"In folder" : "In map",
"Search in all files" : "Zoeken in alle bestanden",
"Search in folder: {folder}" : "Zoeken in map: {folder}",
"One of the dropped files could not be processed" : "Een van de bestanden kon niet verwerkt worden.",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "Je browser ondersteund de Filesystem API niet. Mappen worden niet geüpload",
@@ -356,6 +366,7 @@
"No favorites yet" : "Nog geen favorieten",
"Files and folders you mark as favorite will show up here" : "Bestanden en mappen die je als favoriet aanmerkt, worden hier getoond",
"List of your files and folders." : "Lijst van je bestanden en mappen.",
"Folder tree" : "Mapboom",
"List of your files and folders that are not shared." : "Lijst van je bestanden en mappen die niet gedeeld zijn.",
"No personal files found" : "Geen persoonlijke bestanden gevonden",
"Files that are not shared will show up here." : "Niet-gedeelde bestanden worden hier getoond.",
@@ -364,6 +375,7 @@
"No recently modified files" : "Geen recent gewijzigde bestanden",
"Files and folders you recently modified will show up here." : "Bestanden en mappen die je recent gewijzigd hebt, worden hier getoond.",
"Search" : "Zoeken",
"Search results within your files." : "Zoekresultaten binnen jouw bestanden.",
"No entries found in this folder" : "Niets gevonden in deze map",
"Select all" : "Alles selecteren",
"Upload too large" : "Upload is te groot",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
"List of your files and folders." : "Lista de seus arquivos e pastas.",
"Folder tree" : "Árvore de pastas",
"List of your files and folders that are not shared." : "Lista dos seus arquivos e pastas que não estão compartilhados.",
"No personal files found" : "Nenhum arquivo pessoal encontrado",
"Files that are not shared will show up here." : "Arquivos que não estão compartilhados aparecerão aqui.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Você não possui favoritos!",
"Files and folders you mark as favorite will show up here" : "Suas pastas e arquivos favoritos serão exibidos aqui.",
"List of your files and folders." : "Lista de seus arquivos e pastas.",
"Folder tree" : "Árvore de pastas",
"List of your files and folders that are not shared." : "Lista dos seus arquivos e pastas que não estão compartilhados.",
"No personal files found" : "Nenhum arquivo pessoal encontrado",
"Files that are not shared will show up here." : "Arquivos que não estão compartilhados aparecerão aqui.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "В избранное ещё ничего не добавлено ",
"Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные",
"List of your files and folders." : "Список ваших файлов и каталогов.",
"Folder tree" : "Дерево папок",
"List of your files and folders that are not shared." : "Список ваших неопубликованных файлов и папок.",
"No personal files found" : "Личные файлы не найдены",
"Files that are not shared will show up here." : "Файлы, которые не опубликованы, показаны здесь.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "В избранное ещё ничего не добавлено ",
"Files and folders you mark as favorite will show up here" : "Здесь будут показаны файлы и каталоги, отмеченные как избранные",
"List of your files and folders." : "Список ваших файлов и каталогов.",
"Folder tree" : "Дерево папок",
"List of your files and folders that are not shared." : "Список ваших неопубликованных файлов и папок.",
"No personal files found" : "Личные файлы не найдены",
"Files that are not shared will show up here." : "Файлы, которые не опубликованы, показаны здесь.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"List of your files and folders." : "Lista över dina filer och mappar.",
"Folder tree" : "Mappträd",
"List of your files and folders that are not shared." : "Lista över dina filer och mappar som inte delas.",
"No personal files found" : "Inga personliga filer hittades",
"Files that are not shared will show up here." : "Filer som inte delas kommer att visas här.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Inga favoriter ännu",
"Files and folders you mark as favorite will show up here" : "Filer och mappar markerade som favoriter kommer att visas här",
"List of your files and folders." : "Lista över dina filer och mappar.",
"Folder tree" : "Mappträd",
"List of your files and folders that are not shared." : "Lista över dina filer och mappar som inte delas.",
"No personal files found" : "Inga personliga filer hittades",
"Files that are not shared will show up here." : "Filer som inte delas kommer att visas här.",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Bado hakuna vinavyopendwa",
"Files and folders you mark as favorite will show up here" : "Faili na visunduku ulivyoweka alama kama vipendwa vitaonekana hapa",
"List of your files and folders." : "Orodha ya faili na vikasha vyako",
"Folder tree" : "Mti wa folda",
"List of your files and folders that are not shared." : "Orodha ya faili na vikasha ambavyo havijashirikishwa",
"No personal files found" : "Hakuna faili binafsi zilizopatikana",
"Files that are not shared will show up here." : "Faili ambazo hazija shirikishwa zitaonekana hapa",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Bado hakuna vinavyopendwa",
"Files and folders you mark as favorite will show up here" : "Faili na visunduku ulivyoweka alama kama vipendwa vitaonekana hapa",
"List of your files and folders." : "Orodha ya faili na vikasha vyako",
"Folder tree" : "Mti wa folda",
"List of your files and folders that are not shared." : "Orodha ya faili na vikasha ambavyo havijashirikishwa",
"No personal files found" : "Hakuna faili binafsi zilizopatikana",
"Files that are not shared will show up here." : "Faili ambazo hazija shirikishwa zitaonekana hapa",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "Поки немає нічого, позначеного зірочкою",
"Files and folders you mark as favorite will show up here" : "Файли та каталоги із зірочкою з’являться тут",
"List of your files and folders." : "Список ваших файлів та каталогів.",
"Folder tree" : "Дерево каталогів",
"List of your files and folders that are not shared." : "Перелік ваших файлів та каталогів, які не є у спільному доступі.",
"No personal files found" : "Мої документи не знайдено",
"Files that are not shared will show up here." : "Тут показуватимуться файли, які не є у спільному доступі.",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "Поки немає нічого, позначеного зірочкою",
"Files and folders you mark as favorite will show up here" : "Файли та каталоги із зірочкою з’являться тут",
"List of your files and folders." : "Список ваших файлів та каталогів.",
"Folder tree" : "Дерево каталогів",
"List of your files and folders that are not shared." : "Перелік ваших файлів та каталогів, які не є у спільному доступі.",
"No personal files found" : "Мої документи не знайдено",
"Files that are not shared will show up here." : "Тут показуватимуться файли, які не є у спільному доступі.",
+8
View File
@@ -142,6 +142,7 @@ OC.L10N.register(
"Create new folder" : "创建新文件夹",
"This name is already in use." : "此名称已被使用。",
"Create" : "创建",
"Files starting with a dot are hidden by default" : "以点开头的文件默认是隐藏的",
"Fill template fields" : "填写模板字段",
"Submitting fields …" : "正在提交字段…",
"Submit" : "使用",
@@ -201,16 +202,21 @@ OC.L10N.register(
"Sort favorites first" : "收藏排序优先",
"Sort folders before files" : "将文件夹排在文件前面",
"Enable folder tree" : "启用文件夹树",
"Visual settings" : "视觉设置",
"Show hidden files" : "显示隐藏文件",
"Show file type column" : "显示文件类型列",
"Crop image previews" : "裁剪图片预览",
"Show files extensions" : "显示文件扩展名",
"Additional settings" : "其他设置",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"Copy to clipboard" : "复制到剪贴板",
"Use this address to access your Files via WebDAV." : "使用此地址通过 WebDAV 访问您的文件。",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "您的账号已启用双因素身份验证,因此您需要使用应用密码来连接外部 WebDAV 客户端。",
"Warnings" : "警告",
"Prevent warning dialogs from open or reenable them." : "防止打开或重新启用警告对话框。",
"Show a warning dialog when changing a file extension." : "更改文件扩展名时显示警告对话框。",
"Show a warning dialog when deleting files." : "删除文件时显示警告对话框。",
"Keyboard shortcuts" : "键盘快捷键",
"Speed up your Files experience with these quick shortcuts." : "这些快捷键可以加快你的“文件”体验。",
"Open the actions menu for a file" : "打开文件的操作菜单",
@@ -328,6 +334,7 @@ OC.L10N.register(
"Templates" : "模板",
"New template folder" : "新建模板文件夹",
"In folder" : "文件夹内",
"Search in all files" : "在所有文件中搜索",
"Search in folder: {folder}" : "在文件夹内搜索:{folder}",
"One of the dropped files could not be processed" : "无法处理其中一个已删除的文件",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "你的浏览器不支持文件系统API。目录不会被上传",
@@ -361,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "暂无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
"List of your files and folders." : "您的文件与文件件列表。",
"Folder tree" : "文件夹树",
"List of your files and folders that are not shared." : "尚未分享的文件与文件夹",
"No personal files found" : "找不到个人文件",
"Files that are not shared will show up here." : "尚未分享的文件会显示在此处",
+8
View File
@@ -140,6 +140,7 @@
"Create new folder" : "创建新文件夹",
"This name is already in use." : "此名称已被使用。",
"Create" : "创建",
"Files starting with a dot are hidden by default" : "以点开头的文件默认是隐藏的",
"Fill template fields" : "填写模板字段",
"Submitting fields …" : "正在提交字段…",
"Submit" : "使用",
@@ -199,16 +200,21 @@
"Sort favorites first" : "收藏排序优先",
"Sort folders before files" : "将文件夹排在文件前面",
"Enable folder tree" : "启用文件夹树",
"Visual settings" : "视觉设置",
"Show hidden files" : "显示隐藏文件",
"Show file type column" : "显示文件类型列",
"Crop image previews" : "裁剪图片预览",
"Show files extensions" : "显示文件扩展名",
"Additional settings" : "其他设置",
"WebDAV" : "WebDAV",
"WebDAV URL" : "WebDAV URL",
"Copy to clipboard" : "复制到剪贴板",
"Use this address to access your Files via WebDAV." : "使用此地址通过 WebDAV 访问您的文件。",
"Two-Factor Authentication is enabled for your account, and therefore you need to use an app password to connect an external WebDAV client." : "您的账号已启用双因素身份验证,因此您需要使用应用密码来连接外部 WebDAV 客户端。",
"Warnings" : "警告",
"Prevent warning dialogs from open or reenable them." : "防止打开或重新启用警告对话框。",
"Show a warning dialog when changing a file extension." : "更改文件扩展名时显示警告对话框。",
"Show a warning dialog when deleting files." : "删除文件时显示警告对话框。",
"Keyboard shortcuts" : "键盘快捷键",
"Speed up your Files experience with these quick shortcuts." : "这些快捷键可以加快你的“文件”体验。",
"Open the actions menu for a file" : "打开文件的操作菜单",
@@ -326,6 +332,7 @@
"Templates" : "模板",
"New template folder" : "新建模板文件夹",
"In folder" : "文件夹内",
"Search in all files" : "在所有文件中搜索",
"Search in folder: {folder}" : "在文件夹内搜索:{folder}",
"One of the dropped files could not be processed" : "无法处理其中一个已删除的文件",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "你的浏览器不支持文件系统API。目录不会被上传",
@@ -359,6 +366,7 @@
"No favorites yet" : "暂无收藏",
"Files and folders you mark as favorite will show up here" : "收藏的文件和文件夹会在这里显示",
"List of your files and folders." : "您的文件与文件件列表。",
"Folder tree" : "文件夹树",
"List of your files and folders that are not shared." : "尚未分享的文件与文件夹",
"No personal files found" : "找不到个人文件",
"Files that are not shared will show up here." : "尚未分享的文件会显示在此处",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of your files and folders." : "您的檔案與資料夾清單。",
"Folder tree" : "資料夾樹",
"List of your files and folders that are not shared." : "未分享的檔案與資料夾清單。",
"No personal files found" : "找不到個人檔案",
"Files that are not shared will show up here." : "尚未分享的檔案將會顯示在此處。",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "尚無最愛",
"Files and folders you mark as favorite will show up here" : "您標記為最愛的檔案與資料夾將會顯示在這裡",
"List of your files and folders." : "您的檔案與資料夾清單。",
"Folder tree" : "資料夾樹",
"List of your files and folders that are not shared." : "未分享的檔案與資料夾清單。",
"No personal files found" : "找不到個人檔案",
"Files that are not shared will show up here." : "尚未分享的檔案將會顯示在此處。",
+1
View File
@@ -368,6 +368,7 @@ OC.L10N.register(
"No favorites yet" : "尚無喜愛",
"Files and folders you mark as favorite will show up here" : "您標記為喜愛的檔案與資料夾將會顯示在這裡",
"List of your files and folders." : "您的檔案與資料夾清單。",
"Folder tree" : "資料夾樹",
"List of your files and folders that are not shared." : "未分享的檔案與資料夾清單。",
"No personal files found" : "找不到個人檔案",
"Files that are not shared will show up here." : "尚未分享的檔案將會顯示在此處。",
+1
View File
@@ -366,6 +366,7 @@
"No favorites yet" : "尚無喜愛",
"Files and folders you mark as favorite will show up here" : "您標記為喜愛的檔案與資料夾將會顯示在這裡",
"List of your files and folders." : "您的檔案與資料夾清單。",
"Folder tree" : "資料夾樹",
"List of your files and folders that are not shared." : "未分享的檔案與資料夾清單。",
"No personal files found" : "找不到個人檔案",
"Files that are not shared will show up here." : "尚未分享的檔案將會顯示在此處。",
+1 -1
View File
@@ -117,7 +117,7 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(RenderReferenceEvent::class, RenderReferenceEventListener::class);
$context->registerEventListener(BeforeNodeRenamedEvent::class, SyncLivePhotosListener::class);
$context->registerEventListener(BeforeNodeDeletedEvent::class, SyncLivePhotosListener::class);
$context->registerEventListener(CacheEntryRemovedEvent::class, SyncLivePhotosListener::class);
$context->registerEventListener(CacheEntryRemovedEvent::class, SyncLivePhotosListener::class, 1); // Ensure this happen before the metadata are deleted.
$context->registerEventListener(BeforeNodeCopiedEvent::class, SyncLivePhotosListener::class);
$context->registerEventListener(NodeCopiedEvent::class, SyncLivePhotosListener::class);
$context->registerEventListener(LoadSearchPlugins::class, LoadSearchPluginsListener::class);
+4 -2
View File
@@ -12,11 +12,10 @@
<script lang="ts">
import { isPublicShare } from '@nextcloud/sharing/public'
import { defineComponent } from 'vue'
import NcContent from '@nextcloud/vue/components/NcContent'
import Navigation from './views/Navigation.vue'
import FilesList from './views/FilesList.vue'
import { useHotKeys } from './composables/useHotKeys'
export default defineComponent({
name: 'FilesApp',
@@ -28,6 +27,9 @@ export default defineComponent({
},
setup() {
// Register global hotkeys
useHotKeys()
const isPublic = isPublicShare()
return {
@@ -1,10 +1,14 @@
/**
/*
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { Location } from 'vue-router'
import { File, Folder, Permission, View } from '@nextcloud/files'
import { describe, it, vi, expect, beforeEach, beforeAll, afterEach } from 'vitest'
import { nextTick } from 'vue'
import { enableAutoDestroy, mount } from '@vue/test-utils'
import { describe, it, vi, expect, beforeEach, afterEach } from 'vitest'
import { defineComponent, nextTick } from 'vue'
import axios from '@nextcloud/axios'
import { getPinia } from '../store/index.ts'
@@ -15,38 +19,64 @@ import { action as deleteAction } from '../actions/deleteAction.ts'
import { action as favoriteAction } from '../actions/favoriteAction.ts'
import { action as renameAction } from '../actions/renameAction.ts'
import { action as sidebarAction } from '../actions/sidebarAction.ts'
import { registerHotkeys } from './HotKeysService.ts'
import { useHotKeys } from './useHotKeys.ts'
import { useUserConfigStore } from '../store/userconfig.ts'
// this is the mocked current route
const route = vi.hoisted(() => ({
name: 'test',
params: {
fileId: 123,
},
query: {
openFile: 'false',
dir: '/parent/dir',
},
}))
// mocked router
const router = vi.hoisted(() => ({
push: vi.fn<(route: Location) => void>(),
}))
vi.mock('../actions/sidebarAction.ts', { spy: true })
vi.mock('../actions/deleteAction.ts', { spy: true })
vi.mock('../actions/favoriteAction.ts', { spy: true })
vi.mock('../actions/renameAction.ts', { spy: true })
vi.mock('vue-router/composables', () => ({
useRoute: vi.fn(() => route),
useRouter: vi.fn(() => router),
}))
let file: File
const view = {
id: 'files',
name: 'Files',
} as View
vi.mock('../actions/sidebarAction.ts', { spy: true })
vi.mock('../actions/deleteAction.ts', { spy: true })
vi.mock('../actions/favoriteAction.ts', { spy: true })
vi.mock('../actions/renameAction.ts', { spy: true })
const TestComponent = defineComponent({
name: 'test',
setup() {
useHotKeys()
},
template: '<div />',
})
describe('HotKeysService testing', () => {
const activeStore = useActiveStore(getPinia())
const goToRouteMock = vi.fn()
let initialState: HTMLInputElement
enableAutoDestroy(afterEach)
afterEach(() => {
document.body.removeChild(initialState)
})
beforeAll(() => {
registerHotkeys()
})
beforeEach(() => {
// Make sure the router is reset before each test
goToRouteMock.mockClear()
router.push.mockClear()
// Make sure the file is reset before each test
file = new File({
@@ -66,9 +96,6 @@ describe('HotKeysService testing', () => {
activeStore.activeNode = file
window.OCA = { Files: { Sidebar: { open: () => {}, setActiveTab: () => {} } } }
// We only mock what needed, we do not need Files.Router.goTo or Files.Navigation
window.OCP = { Files: { Router: { goToRoute: goToRouteMock, params: {}, query: {} } } }
initialState = document.createElement('input')
initialState.setAttribute('type', 'hidden')
initialState.setAttribute('id', 'initial-state-files_trashbin-config')
@@ -76,6 +103,8 @@ describe('HotKeysService testing', () => {
allow_delete: true,
})))
document.body.appendChild(initialState)
mount(TestComponent)
})
it('Pressing d should open the sidebar once', () => {
@@ -135,13 +164,11 @@ describe('HotKeysService testing', () => {
})
it('Pressing alt+up should go to parent directory', () => {
expect(goToRouteMock).toHaveBeenCalledTimes(0)
window.OCP.Files.Router.query = { dir: '/foo/bar' }
expect(router.push).toHaveBeenCalledTimes(0)
dispatchEvent({ key: 'ArrowUp', code: 'ArrowUp', altKey: true })
expect(goToRouteMock).toHaveBeenCalledOnce()
expect(goToRouteMock.mock.calls[0][2].dir).toBe('/foo')
expect(router.push).toHaveBeenCalledOnce()
expect(router.push.mock.calls[0][0].query?.dir).toBe('/parent')
})
it('Pressing v should toggle grid view', async () => {
@@ -4,13 +4,15 @@
*/
import { useHotKey } from '@nextcloud/vue/composables/useHotKey'
import { dirname } from 'path'
import { useRoute, useRouter } from 'vue-router/composables'
import { action as deleteAction } from '../actions/deleteAction.ts'
import { action as favoriteAction } from '../actions/favoriteAction.ts'
import { action as renameAction } from '../actions/renameAction.ts'
import { action as sidebarAction } from '../actions/sidebarAction.ts'
import { executeAction } from '../utils/actionUtils.ts'
import { useUserConfigStore } from '../store/userconfig.ts'
import { useRouteParameters } from './useRouteParameters.ts'
import { executeAction } from '../utils/actionUtils.ts'
import logger from '../logger.ts'
/**
@@ -18,7 +20,12 @@ import logger from '../logger.ts'
* As much as possible, we try to have all the hotkeys in one place.
* Please make sure to add tests for the hotkeys after adding a new one.
*/
export const registerHotkeys = function() {
export function useHotKeys(): void {
const userConfigStore = useUserConfigStore()
const { directory } = useRouteParameters()
const router = useRouter()
const route = useRoute()
// d opens the sidebar
useHotKey('d', () => executeAction(sidebarAction), {
stop: true,
@@ -57,26 +64,23 @@ export const registerHotkeys = function() {
})
logger.debug('Hotkeys registered')
}
const goToParentDir = function() {
const params = window.OCP.Files.Router?.params || {}
const query = window.OCP.Files.Router?.query || {}
const currentDir = (query?.dir || '/') as string
const parentDir = dirname(currentDir)
logger.debug('Navigating to parent directory', { parentDir })
window.OCP.Files.Router.goToRoute(
null,
{ ...params },
{ ...query, dir: parentDir },
)
}
const toggleGridView = function() {
const userConfigStore = useUserConfigStore()
const value = userConfigStore?.userConfig?.grid_view
logger.debug('Toggling grid view', { old: value, new: !value })
userConfigStore.update('grid_view', !value)
/**
* Use the router to go to the parent directory
*/
function goToParentDir() {
const dir = dirname(directory.value)
logger.debug('Navigating to parent directory', { dir })
router.push({ params: { ...route.params }, query: { ...route.query, dir } })
}
/**
* Toggle the grid view
*/
function toggleGridView() {
const value = userConfigStore.userConfig.grid_view
logger.debug('Toggling grid view', { old: value, new: !value })
userConfigStore.update('grid_view', !value)
}
}
-4
View File
@@ -8,7 +8,6 @@ import { PiniaVuePlugin } from 'pinia'
import Vue from 'vue'
import { getPinia } from './store/index.ts'
import { registerHotkeys } from './services/HotKeysService.ts'
import FilesApp from './FilesApp.vue'
import router from './router/router'
import RouterService from './services/RouterService'
@@ -40,9 +39,6 @@ if (!window.OCP.Files.Router) {
// Init Pinia store
Vue.use(PiniaVuePlugin)
// Init HotKeys AFTER pinia is set up
registerHotkeys()
// Init Files App Settings Service
const Settings = new SettingsService()
Object.assign(window.OCA.Files, { Settings })
+1 -1
View File
@@ -336,7 +336,7 @@ class SMB extends Common implements INotifyStorage {
if ($retry) {
return $this->stat($path, false);
} else {
throw $e;
throw new StorageNotAvailableException($e->getMessage(), $e->getCode(), $e);
}
}
if ($this->remoteIsShare() && $this->isRootDir($path)) {
+10 -10
View File
@@ -385,16 +385,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "تمّت مشاركته معك و مع الدائرة {circle} من قِبَل {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "تمّت مشاركته معك و مع المحادثة {conversation} من قِبَل {owner}",
"Shared with you in a conversation by {owner}" : "تمّت مشاركته معك في محادثة من قِبَل {owner}",
"Share note" : "ملاحظة عن المشاركة",
"Show list view" : "أظهِِر عرض القائمة list view",
"Show grid view" : "أظهِِر عرض الصناديق grid view",
"Upload files to %s" : "رَفْعُ ملفات إلى %s",
"%s shared a folder with you." : "قام %s بمشاركة مجلد معك.",
"Note" : "ملاحظة",
"Select or drop files" : "إختر أو أفلِت ملفات",
"Uploading files" : "رفع الملفات جارٍ...",
"Uploaded files:" : "تمّ رَفْعُ ملفاتٍ:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.",
"Share not found" : "مشاركة غير موجودة",
"Back to %s" : "عودة إلى %s",
"Add to your Nextcloud" : "إضافة إلى حسابك على نكست كلاود",
@@ -404,6 +394,8 @@ OC.L10N.register(
"This will stop your current uploads." : "سيؤدي هذا لإيقاف رفع الملفات الحالية.",
"Move or copy" : "أنقُل أو انسَخ",
"You can upload into this folder" : "بإمكانك رفع الملفات إلى هذا المجلد",
"Show list view" : "أظهِِر عرض القائمة list view",
"Show grid view" : "أظهِِر عرض الصناديق grid view",
"No compatible server found at {remote}" : "لم يتم العثور على خادم متوافق في {remote}",
"Invalid server URL" : "عنوان الرابط للخادم غير صالح",
"Failed to add the public link to your Nextcloud" : "فشل في إضافة الرابط العام إلى الخادم السحابي الخاص بك",
@@ -416,6 +408,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "لرفع الملفات، يجب أن تكتب اسمك أوّلاً.",
"Enter your name" : "أدخِل اسمك",
"Submit name" : "إرسال الاسم",
"Share note" : "ملاحظة عن المشاركة",
"Upload files to %s" : "رَفْعُ ملفات إلى %s",
"%s shared a folder with you." : "قام %s بمشاركة مجلد معك.",
"Note" : "ملاحظة",
"Select or drop files" : "إختر أو أفلِت ملفات",
"Uploading files" : "رفع الملفات جارٍ...",
"Uploaded files:" : "تمّ رَفْعُ ملفاتٍ:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.",
"Name" : "الاسم",
"Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة",
"Filename must not be empty." : "يجب ألّا يكون اسم الملف فارغاً."
+10 -10
View File
@@ -383,16 +383,6 @@
"Shared with you and {circle} by {owner}" : "تمّت مشاركته معك و مع الدائرة {circle} من قِبَل {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "تمّت مشاركته معك و مع المحادثة {conversation} من قِبَل {owner}",
"Shared with you in a conversation by {owner}" : "تمّت مشاركته معك في محادثة من قِبَل {owner}",
"Share note" : "ملاحظة عن المشاركة",
"Show list view" : "أظهِِر عرض القائمة list view",
"Show grid view" : "أظهِِر عرض الصناديق grid view",
"Upload files to %s" : "رَفْعُ ملفات إلى %s",
"%s shared a folder with you." : "قام %s بمشاركة مجلد معك.",
"Note" : "ملاحظة",
"Select or drop files" : "إختر أو أفلِت ملفات",
"Uploading files" : "رفع الملفات جارٍ...",
"Uploaded files:" : "تمّ رَفْعُ ملفاتٍ:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.",
"Share not found" : "مشاركة غير موجودة",
"Back to %s" : "عودة إلى %s",
"Add to your Nextcloud" : "إضافة إلى حسابك على نكست كلاود",
@@ -402,6 +392,8 @@
"This will stop your current uploads." : "سيؤدي هذا لإيقاف رفع الملفات الحالية.",
"Move or copy" : "أنقُل أو انسَخ",
"You can upload into this folder" : "بإمكانك رفع الملفات إلى هذا المجلد",
"Show list view" : "أظهِِر عرض القائمة list view",
"Show grid view" : "أظهِِر عرض الصناديق grid view",
"No compatible server found at {remote}" : "لم يتم العثور على خادم متوافق في {remote}",
"Invalid server URL" : "عنوان الرابط للخادم غير صالح",
"Failed to add the public link to your Nextcloud" : "فشل في إضافة الرابط العام إلى الخادم السحابي الخاص بك",
@@ -414,6 +406,14 @@
"To upload files, you need to provide your name first." : "لرفع الملفات، يجب أن تكتب اسمك أوّلاً.",
"Enter your name" : "أدخِل اسمك",
"Submit name" : "إرسال الاسم",
"Share note" : "ملاحظة عن المشاركة",
"Upload files to %s" : "رَفْعُ ملفات إلى %s",
"%s shared a folder with you." : "قام %s بمشاركة مجلد معك.",
"Note" : "ملاحظة",
"Select or drop files" : "إختر أو أفلِت ملفات",
"Uploading files" : "رفع الملفات جارٍ...",
"Uploaded files:" : "تمّ رَفْعُ ملفاتٍ:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "برفع الملفات ، فإنك توافق على %1$s شروط الخدمة %2$s.",
"Name" : "الاسم",
"Email, federated cloud id" : "بريد إلكتروني، مُعرِّف سحابة اتحاديّة",
"Filename must not be empty." : "يجب ألّا يكون اسم الملف فارغاً."
+9 -9
View File
@@ -278,15 +278,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "{owner} compartió l'elementu contigo y con «{circle}»",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} compartió l'elementu contigo y cola conversación «{conversation}»",
"Shared with you in a conversation by {owner}" : "{owner} compartió l'elementu contigo nuna conversación",
"Share note" : "Compartir una nota",
"Show list view" : "Amosar la vista en llista",
"Show grid view" : "Amosar la vista en rexáu",
"Upload files to %s" : "Xubir ficheros a «%s»",
"Note" : "Nota",
"Select or drop files" : "Seleiciona o suelta los ficheros",
"Uploading files" : "Xubiendo ficheros",
"Uploaded files:" : "Ficheros xubíos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al xubir los ficheros, aceptes los %1$stérminos del serviciu%2$s",
"Share not found" : "Nun s'atopó la compartición",
"Back to %s" : "Volver a «%s»",
"Add to your Nextcloud" : "Amestar a Nextcloud",
@@ -296,12 +287,21 @@ OC.L10N.register(
"This will stop your current uploads." : "Esta aición va parar les xubes actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Pues xubir conteníu a esta carpeta",
"Show list view" : "Amosar la vista en llista",
"Show grid view" : "Amosar la vista en rexáu",
"No compatible server found at {remote}" : "Nun s'atopó nengún sirvidor compatible en «{remote}»",
"Invalid server URL" : "La URL del sirvidor ye inválida",
"Failed to add the public link to your Nextcloud" : "Nun se pue amestar l'enllaz públicu a esta instancia de Nextcloud",
"Download all files" : "Baxar tolos ficheros",
"Search for share recipients" : "Buscar destinatarios del elementu compartíu",
"No recommendations. Start typing." : "Nun hai nenguna recomendación. Comienza a escribir",
"Share note" : "Compartir una nota",
"Upload files to %s" : "Xubir ficheros a «%s»",
"Note" : "Nota",
"Select or drop files" : "Seleiciona o suelta los ficheros",
"Uploading files" : "Xubiendo ficheros",
"Uploaded files:" : "Ficheros xubíos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al xubir los ficheros, aceptes los %1$stérminos del serviciu%2$s",
"Name" : "Nome"
},
"nplurals=2; plural=(n != 1);");
+9 -9
View File
@@ -276,15 +276,6 @@
"Shared with you and {circle} by {owner}" : "{owner} compartió l'elementu contigo y con «{circle}»",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} compartió l'elementu contigo y cola conversación «{conversation}»",
"Shared with you in a conversation by {owner}" : "{owner} compartió l'elementu contigo nuna conversación",
"Share note" : "Compartir una nota",
"Show list view" : "Amosar la vista en llista",
"Show grid view" : "Amosar la vista en rexáu",
"Upload files to %s" : "Xubir ficheros a «%s»",
"Note" : "Nota",
"Select or drop files" : "Seleiciona o suelta los ficheros",
"Uploading files" : "Xubiendo ficheros",
"Uploaded files:" : "Ficheros xubíos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al xubir los ficheros, aceptes los %1$stérminos del serviciu%2$s",
"Share not found" : "Nun s'atopó la compartición",
"Back to %s" : "Volver a «%s»",
"Add to your Nextcloud" : "Amestar a Nextcloud",
@@ -294,12 +285,21 @@
"This will stop your current uploads." : "Esta aición va parar les xubes actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Pues xubir conteníu a esta carpeta",
"Show list view" : "Amosar la vista en llista",
"Show grid view" : "Amosar la vista en rexáu",
"No compatible server found at {remote}" : "Nun s'atopó nengún sirvidor compatible en «{remote}»",
"Invalid server URL" : "La URL del sirvidor ye inválida",
"Failed to add the public link to your Nextcloud" : "Nun se pue amestar l'enllaz públicu a esta instancia de Nextcloud",
"Download all files" : "Baxar tolos ficheros",
"Search for share recipients" : "Buscar destinatarios del elementu compartíu",
"No recommendations. Start typing." : "Nun hai nenguna recomendación. Comienza a escribir",
"Share note" : "Compartir una nota",
"Upload files to %s" : "Xubir ficheros a «%s»",
"Note" : "Nota",
"Select or drop files" : "Seleiciona o suelta los ficheros",
"Uploading files" : "Xubiendo ficheros",
"Uploaded files:" : "Ficheros xubíos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al xubir los ficheros, aceptes los %1$stérminos del serviciu%2$s",
"Name" : "Nome"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+9 -9
View File
@@ -223,15 +223,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Споделено с вас и {circle} от {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Споделено с вас и разговора {conversation} от {owner}",
"Shared with you in a conversation by {owner}" : "Споделено с вас в разговор от {owner}",
"Share note" : "Сподели бележка",
"Show list view" : "Показване с изглед на списък",
"Show grid view" : "Показване в решетъчен изглед",
"Upload files to %s" : "Качване на файлове към %s",
"Note" : "Бележка",
"Select or drop files" : "Изберете файл или преместете с мишката",
"Uploading files" : "Качване на файлове",
"Uploaded files:" : "Качени файлове:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.",
"Share not found" : "Споделянето не е открито",
"Back to %s" : "Обратно към %s",
"Add to your Nextcloud" : "Добавете към Nextcloud",
@@ -241,6 +232,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Това ще прекрати всички ваши текущи процеси по качване на файлове.",
"Move or copy" : "Премести или копирай",
"You can upload into this folder" : "Може да качвате в папката",
"Show list view" : "Показване с изглед на списък",
"Show grid view" : "Показване в решетъчен изглед",
"No compatible server found at {remote}" : "Не беше намерен съвместим сървър на {remote}",
"Invalid server URL" : "URL адреса на сървъра не е валиден",
"Failed to add the public link to your Nextcloud" : "Неуспешно добавяне на публичната връзка към вашия Nextcloud",
@@ -248,6 +241,13 @@ OC.L10N.register(
"Search for share recipients" : "Търсене на получатели на споделяне",
"No recommendations. Start typing." : "Няма препоръки. Започнете да пишете.",
"Enter your name" : "Въведете вашето име",
"Share note" : "Сподели бележка",
"Upload files to %s" : "Качване на файлове към %s",
"Note" : "Бележка",
"Select or drop files" : "Изберете файл или преместете с мишката",
"Uploading files" : "Качване на файлове",
"Uploaded files:" : "Качени файлове:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.",
"Name" : "Име"
},
"nplurals=2; plural=(n != 1);");
+9 -9
View File
@@ -221,15 +221,6 @@
"Shared with you and {circle} by {owner}" : "Споделено с вас и {circle} от {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Споделено с вас и разговора {conversation} от {owner}",
"Shared with you in a conversation by {owner}" : "Споделено с вас в разговор от {owner}",
"Share note" : "Сподели бележка",
"Show list view" : "Показване с изглед на списък",
"Show grid view" : "Показване в решетъчен изглед",
"Upload files to %s" : "Качване на файлове към %s",
"Note" : "Бележка",
"Select or drop files" : "Изберете файл или преместете с мишката",
"Uploading files" : "Качване на файлове",
"Uploaded files:" : "Качени файлове:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.",
"Share not found" : "Споделянето не е открито",
"Back to %s" : "Обратно към %s",
"Add to your Nextcloud" : "Добавете към Nextcloud",
@@ -239,6 +230,8 @@
"This will stop your current uploads." : "Това ще прекрати всички ваши текущи процеси по качване на файлове.",
"Move or copy" : "Премести или копирай",
"You can upload into this folder" : "Може да качвате в папката",
"Show list view" : "Показване с изглед на списък",
"Show grid view" : "Показване в решетъчен изглед",
"No compatible server found at {remote}" : "Не беше намерен съвместим сървър на {remote}",
"Invalid server URL" : "URL адреса на сървъра не е валиден",
"Failed to add the public link to your Nextcloud" : "Неуспешно добавяне на публичната връзка към вашия Nextcloud",
@@ -246,6 +239,13 @@
"Search for share recipients" : "Търсене на получатели на споделяне",
"No recommendations. Start typing." : "Няма препоръки. Започнете да пишете.",
"Enter your name" : "Въведете вашето име",
"Share note" : "Сподели бележка",
"Upload files to %s" : "Качване на файлове към %s",
"Note" : "Бележка",
"Select or drop files" : "Изберете файл или преместете с мишката",
"Uploading files" : "Качване на файлове",
"Uploaded files:" : "Качени файлове:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "С качването на файлове, вие се съгласявате с %1$s условията на услугата%2$s.",
"Name" : "Име"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+10 -10
View File
@@ -385,16 +385,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}",
"Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa",
"Share note" : "Nota de l'element compartit",
"Show list view" : "Mostra la visualització de llista",
"Show grid view" : "Mostra la visualització de graella",
"Upload files to %s" : "Puja fitxers a %s",
"%s shared a folder with you." : "%s ha compartit una carpeta amb tu.",
"Note" : "Nota",
"Select or drop files" : "Seleccioneu o deixeu anar fitxers",
"Uploading files" : "S'estan pujant els fitxers",
"Uploaded files:" : "Fitxers pujats:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.",
"Share not found" : "No s'ha trobat la compartició",
"Back to %s" : "Torna a %s",
"Add to your Nextcloud" : "Afegeix al Nextcloud",
@@ -404,6 +394,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Això aturarà les pujades actuals.",
"Move or copy" : "Mou o copia",
"You can upload into this folder" : "Podeu pujar elements a aquesta carpeta",
"Show list view" : "Mostra la visualització de llista",
"Show grid view" : "Mostra la visualització de graella",
"No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}",
"Invalid server URL" : "L'URL del servidor no és vàlida",
"Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud",
@@ -416,6 +408,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Per la pujada de fitxers, primer heu de proporcionar el vostre nom.",
"Enter your name" : "Introdueix el teu nom",
"Submit name" : "Envia el nom",
"Share note" : "Nota de l'element compartit",
"Upload files to %s" : "Puja fitxers a %s",
"%s shared a folder with you." : "%s ha compartit una carpeta amb tu.",
"Note" : "Nota",
"Select or drop files" : "Seleccioneu o deixeu anar fitxers",
"Uploading files" : "S'estan pujant els fitxers",
"Uploaded files:" : "Fitxers pujats:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.",
"Name" : "Nom",
"Email, federated cloud id" : "Correu, identificador del núvol federat",
"Filename must not be empty." : "El nom del fitxer no ha d'estar buit."
+10 -10
View File
@@ -383,16 +383,6 @@
"Shared with you and {circle} by {owner}" : "{owner} l'ha compartit amb vós i amb el cercle {circle}",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} l'ha compartit amb vós i amb la conversa {conversation}",
"Shared with you in a conversation by {owner}" : "{owner} l'ha compartit amb vós en una conversa",
"Share note" : "Nota de l'element compartit",
"Show list view" : "Mostra la visualització de llista",
"Show grid view" : "Mostra la visualització de graella",
"Upload files to %s" : "Puja fitxers a %s",
"%s shared a folder with you." : "%s ha compartit una carpeta amb tu.",
"Note" : "Nota",
"Select or drop files" : "Seleccioneu o deixeu anar fitxers",
"Uploading files" : "S'estan pujant els fitxers",
"Uploaded files:" : "Fitxers pujats:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.",
"Share not found" : "No s'ha trobat la compartició",
"Back to %s" : "Torna a %s",
"Add to your Nextcloud" : "Afegeix al Nextcloud",
@@ -402,6 +392,8 @@
"This will stop your current uploads." : "Això aturarà les pujades actuals.",
"Move or copy" : "Mou o copia",
"You can upload into this folder" : "Podeu pujar elements a aquesta carpeta",
"Show list view" : "Mostra la visualització de llista",
"Show grid view" : "Mostra la visualització de graella",
"No compatible server found at {remote}" : "No s'ha trobat cap servidor compatible a {remote}",
"Invalid server URL" : "L'URL del servidor no és vàlida",
"Failed to add the public link to your Nextcloud" : "No s'ha pogut afegir l'enllaç públic al vostre Nextcloud",
@@ -414,6 +406,14 @@
"To upload files, you need to provide your name first." : "Per la pujada de fitxers, primer heu de proporcionar el vostre nom.",
"Enter your name" : "Introdueix el teu nom",
"Submit name" : "Envia el nom",
"Share note" : "Nota de l'element compartit",
"Upload files to %s" : "Puja fitxers a %s",
"%s shared a folder with you." : "%s ha compartit una carpeta amb tu.",
"Note" : "Nota",
"Select or drop files" : "Seleccioneu o deixeu anar fitxers",
"Uploading files" : "S'estan pujant els fitxers",
"Uploaded files:" : "Fitxers pujats:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Si pugeu fitxers, accepteu les %1$scondicions del servei%2$s.",
"Name" : "Nom",
"Email, federated cloud id" : "Correu, identificador del núvol federat",
"Filename must not be empty." : "El nom del fitxer no ha d'estar buit."
+10 -10
View File
@@ -401,16 +401,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Sdíleno s vámi a {circle} od {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} sdílí vám a konverzaci {conversation}",
"Shared with you in a conversation by {owner}" : " {owner} vám sdílí v konverzaci",
"Share note" : "Sdílet poznámku",
"Show list view" : "Zobrazit v seznamu",
"Show grid view" : "Zobrazit v mřížce",
"Upload files to %s" : "Nahrát soubory do %s",
"%s shared a folder with you." : "%s vám nasdílel(a) složku.",
"Note" : "Poznámka",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files" : "Nahrávání souborů",
"Uploaded files:" : "Nahrané soubory:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.",
"Share not found" : "Sdílení nenalezeno",
"Back to %s" : "Zpět na %s",
"Add to your Nextcloud" : "Přidat do Nextcloud",
@@ -420,6 +410,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Toto zastaví vaše stávající nahrávání.",
"Move or copy" : "Přesunout nebo zkopírovat",
"You can upload into this folder" : "Do této složky můžete nahrávat",
"Show list view" : "Zobrazit v seznamu",
"Show grid view" : "Zobrazit v mřížce",
"No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server",
"Invalid server URL" : "Neplatná URL serveru",
"Failed to add the public link to your Nextcloud" : "Nepodařilo se přidání veřejného odkazu do Nextcloud",
@@ -432,6 +424,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Aby bylo možné nahrávat soubory, je třeba nejprve zadat své jméno.",
"Enter your name" : "Zadejte své jméno",
"Submit name" : "Odeslat jméno",
"Share note" : "Sdílet poznámku",
"Upload files to %s" : "Nahrát soubory do %s",
"%s shared a folder with you." : "%s vám nasdílel(a) složku.",
"Note" : "Poznámka",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files" : "Nahrávání souborů",
"Uploaded files:" : "Nahrané soubory:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.",
"Name" : "Název",
"Share with accounts, teams, federated cloud id" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu",
"Email, federated cloud id" : "E-mail, identif. federovaného cloudu",
+10 -10
View File
@@ -399,16 +399,6 @@
"Shared with you and {circle} by {owner}" : "Sdíleno s vámi a {circle} od {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} sdílí vám a konverzaci {conversation}",
"Shared with you in a conversation by {owner}" : " {owner} vám sdílí v konverzaci",
"Share note" : "Sdílet poznámku",
"Show list view" : "Zobrazit v seznamu",
"Show grid view" : "Zobrazit v mřížce",
"Upload files to %s" : "Nahrát soubory do %s",
"%s shared a folder with you." : "%s vám nasdílel(a) složku.",
"Note" : "Poznámka",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files" : "Nahrávání souborů",
"Uploaded files:" : "Nahrané soubory:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.",
"Share not found" : "Sdílení nenalezeno",
"Back to %s" : "Zpět na %s",
"Add to your Nextcloud" : "Přidat do Nextcloud",
@@ -418,6 +408,8 @@
"This will stop your current uploads." : "Toto zastaví vaše stávající nahrávání.",
"Move or copy" : "Přesunout nebo zkopírovat",
"You can upload into this folder" : "Do této složky můžete nahrávat",
"Show list view" : "Zobrazit v seznamu",
"Show grid view" : "Zobrazit v mřížce",
"No compatible server found at {remote}" : "Na {remote} nebyl nalezen kompatibilní server",
"Invalid server URL" : "Neplatná URL serveru",
"Failed to add the public link to your Nextcloud" : "Nepodařilo se přidání veřejného odkazu do Nextcloud",
@@ -430,6 +422,14 @@
"To upload files, you need to provide your name first." : "Aby bylo možné nahrávat soubory, je třeba nejprve zadat své jméno.",
"Enter your name" : "Zadejte své jméno",
"Submit name" : "Odeslat jméno",
"Share note" : "Sdílet poznámku",
"Upload files to %s" : "Nahrát soubory do %s",
"%s shared a folder with you." : "%s vám nasdílel(a) složku.",
"Note" : "Poznámka",
"Select or drop files" : "Vyberte nebo přetáhněte soubory",
"Uploading files" : "Nahrávání souborů",
"Uploaded files:" : "Nahrané soubory:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Nahráním souborů vyjadřujete souhlas s %1$svšeobecnými podmínkami%2$s.",
"Name" : "Název",
"Share with accounts, teams, federated cloud id" : "Nasdílejte účtům, týmům, identifikátorům v rámci federovaného cloudu",
"Email, federated cloud id" : "E-mail, identif. federovaného cloudu",
+10 -10
View File
@@ -385,16 +385,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Delt med dig og {circle} af {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Delt med dig og konversationen {conversation} af {owner}",
"Shared with you in a conversation by {owner}" : "Delt med dig og konversationen af {owner}",
"Share note" : "Del note",
"Show list view" : "Vis som liste",
"Show grid view" : "Vis som gitter",
"Upload files to %s" : "Upload filer til %s",
"%s shared a folder with you." : "%s delte en mappe med dig.",
"Note" : "Note",
"Select or drop files" : "Vælg eller slip filer",
"Uploading files" : "Uploader filer",
"Uploaded files:" : "Uploadede filer:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Ved at uploade filer accepterer du %1$sservicebetingelserne%2$s.",
"Share not found" : "Delt fil ikke fundet",
"Back to %s" : "Tilbage til %s",
"Add to your Nextcloud" : "Tilføj til din Nextcloud",
@@ -404,6 +394,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Dette vil stoppe din nuværende uploads.",
"Move or copy" : "Flyt eller kopier",
"You can upload into this folder" : "Du kan overføre til denne mappe",
"Show list view" : "Vis som liste",
"Show grid view" : "Vis som gitter",
"No compatible server found at {remote}" : "Ingen kompatible servere fundet på {remote}",
"Invalid server URL" : "Ugyldig server adresse",
"Failed to add the public link to your Nextcloud" : "Fejl ved tilføjelse af offentligt link til din Nextcloud",
@@ -416,6 +408,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "For at uploade filer skal du først angive dit navn.",
"Enter your name" : "Angiv dit navn",
"Submit name" : "Angiv navn",
"Share note" : "Del note",
"Upload files to %s" : "Upload filer til %s",
"%s shared a folder with you." : "%s delte en mappe med dig.",
"Note" : "Note",
"Select or drop files" : "Vælg eller slip filer",
"Uploading files" : "Uploader filer",
"Uploaded files:" : "Uploadede filer:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Ved at uploade filer accepterer du %1$sservicebetingelserne%2$s.",
"Name" : "Navn",
"Email, federated cloud id" : "E-mail, sammenkoblings cloud id",
"Filename must not be empty." : "Filnavnet må ikke være tomt."
+10 -10
View File
@@ -383,16 +383,6 @@
"Shared with you and {circle} by {owner}" : "Delt med dig og {circle} af {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Delt med dig og konversationen {conversation} af {owner}",
"Shared with you in a conversation by {owner}" : "Delt med dig og konversationen af {owner}",
"Share note" : "Del note",
"Show list view" : "Vis som liste",
"Show grid view" : "Vis som gitter",
"Upload files to %s" : "Upload filer til %s",
"%s shared a folder with you." : "%s delte en mappe med dig.",
"Note" : "Note",
"Select or drop files" : "Vælg eller slip filer",
"Uploading files" : "Uploader filer",
"Uploaded files:" : "Uploadede filer:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Ved at uploade filer accepterer du %1$sservicebetingelserne%2$s.",
"Share not found" : "Delt fil ikke fundet",
"Back to %s" : "Tilbage til %s",
"Add to your Nextcloud" : "Tilføj til din Nextcloud",
@@ -402,6 +392,8 @@
"This will stop your current uploads." : "Dette vil stoppe din nuværende uploads.",
"Move or copy" : "Flyt eller kopier",
"You can upload into this folder" : "Du kan overføre til denne mappe",
"Show list view" : "Vis som liste",
"Show grid view" : "Vis som gitter",
"No compatible server found at {remote}" : "Ingen kompatible servere fundet på {remote}",
"Invalid server URL" : "Ugyldig server adresse",
"Failed to add the public link to your Nextcloud" : "Fejl ved tilføjelse af offentligt link til din Nextcloud",
@@ -414,6 +406,14 @@
"To upload files, you need to provide your name first." : "For at uploade filer skal du først angive dit navn.",
"Enter your name" : "Angiv dit navn",
"Submit name" : "Angiv navn",
"Share note" : "Del note",
"Upload files to %s" : "Upload filer til %s",
"%s shared a folder with you." : "%s delte en mappe med dig.",
"Note" : "Note",
"Select or drop files" : "Vælg eller slip filer",
"Uploading files" : "Uploader filer",
"Uploaded files:" : "Uploadede filer:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Ved at uploade filer accepterer du %1$sservicebetingelserne%2$s.",
"Name" : "Navn",
"Email, federated cloud id" : "E-mail, sammenkoblings cloud id",
"Filename must not be empty." : "Filnavnet må ikke være tomt."
+10 -10
View File
@@ -401,16 +401,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "{owner} hat dies mit dir und dem Kreis {circle} geteilt",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} hat dies mit dir und der Unterhaltung {conversation} geteilt",
"Shared with you in a conversation by {owner}" : "{owner} hat dies mit dir in einer Unterhaltung geteilt",
"Share note" : "Notiz teilen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Rasteransicht anzeigen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit dir geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.",
"Share not found" : "Freigabe nicht gefunden",
"Back to %s" : "Zurück zu %s",
"Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen",
@@ -420,6 +410,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.",
"Move or copy" : "Verschieben oder kopieren",
"You can upload into this folder" : "Du kannst in diesen Ordner hochladen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Rasteransicht anzeigen",
"No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden",
"Invalid server URL" : "Falsche Server-URL",
"Failed to add the public link to your Nextcloud" : "Der öffentliche Link konnte nicht zu deiner Nextcloud hinzugefügt werden",
@@ -432,6 +424,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Um Dateien hochzuladen, musst du zunächst deinen Namen angeben.",
"Enter your name" : "Gib deinen Namen ein",
"Submit name" : "Name übermitteln",
"Share note" : "Notiz teilen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit dir geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.",
"Name" : "Name",
"Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs",
"Email, federated cloud id" : "Name, Federated-Cloud-ID",
+10 -10
View File
@@ -399,16 +399,6 @@
"Shared with you and {circle} by {owner}" : "{owner} hat dies mit dir und dem Kreis {circle} geteilt",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} hat dies mit dir und der Unterhaltung {conversation} geteilt",
"Shared with you in a conversation by {owner}" : "{owner} hat dies mit dir in einer Unterhaltung geteilt",
"Share note" : "Notiz teilen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Rasteransicht anzeigen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit dir geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.",
"Share not found" : "Freigabe nicht gefunden",
"Back to %s" : "Zurück zu %s",
"Add to your Nextcloud" : "Zu deiner Nextcloud hinzufügen",
@@ -418,6 +408,8 @@
"This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.",
"Move or copy" : "Verschieben oder kopieren",
"You can upload into this folder" : "Du kannst in diesen Ordner hochladen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Rasteransicht anzeigen",
"No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden",
"Invalid server URL" : "Falsche Server-URL",
"Failed to add the public link to your Nextcloud" : "Der öffentliche Link konnte nicht zu deiner Nextcloud hinzugefügt werden",
@@ -430,6 +422,14 @@
"To upload files, you need to provide your name first." : "Um Dateien hochzuladen, musst du zunächst deinen Namen angeben.",
"Enter your name" : "Gib deinen Namen ein",
"Submit name" : "Name übermitteln",
"Share note" : "Notiz teilen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit dir geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmst du den %1$sNutzungsbedingungen%2$s zu.",
"Name" : "Name",
"Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs",
"Email, federated cloud id" : "Name, Federated-Cloud-ID",
+10 -10
View File
@@ -401,16 +401,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "{owner} hat dies mit Ihnen und dem Kreis {circle} geteilt",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} hat diese mit Ihnen und der Unterhaltung {conversation} geteilt",
"Shared with you in a conversation by {owner}" : "{owner} hat diese mit Ihnen in einer Unterhaltung geteilt",
"Share note" : "Notiz teilen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Kachelansicht anzeigen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit Ihnen geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.",
"Share not found" : "Freigabe nicht gefunden",
"Back to %s" : "Zurück zu %s",
"Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
@@ -420,6 +410,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.",
"Move or copy" : "Verschieben oder kopieren",
"You can upload into this folder" : "Sie können in diesen Ordner hochladen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Kachelansicht anzeigen",
"No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden",
"Invalid server URL" : "Falsche Server-URL",
"Failed to add the public link to your Nextcloud" : "Der öffentliche Link konnte nicht zu Ihrer Nextcloud hinzugefügt werden",
@@ -432,6 +424,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Um Dateien hochzuladen, müssen Sie zunächst Ihren Namen angeben.",
"Enter your name" : "Geben Sie Ihren Namen ein",
"Submit name" : "Name übermitteln",
"Share note" : "Notiz teilen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit Ihnen geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.",
"Name" : "Name",
"Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs",
"Email, federated cloud id" : "Name, Federated-Cloud-ID",
+10 -10
View File
@@ -399,16 +399,6 @@
"Shared with you and {circle} by {owner}" : "{owner} hat dies mit Ihnen und dem Kreis {circle} geteilt",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} hat diese mit Ihnen und der Unterhaltung {conversation} geteilt",
"Shared with you in a conversation by {owner}" : "{owner} hat diese mit Ihnen in einer Unterhaltung geteilt",
"Share note" : "Notiz teilen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Kachelansicht anzeigen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit Ihnen geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.",
"Share not found" : "Freigabe nicht gefunden",
"Back to %s" : "Zurück zu %s",
"Add to your Nextcloud" : "Zu Ihrer Nextcloud hinzufügen",
@@ -418,6 +408,8 @@
"This will stop your current uploads." : "Hiermit werden die aktuellen Uploads angehalten.",
"Move or copy" : "Verschieben oder kopieren",
"You can upload into this folder" : "Sie können in diesen Ordner hochladen",
"Show list view" : "Listenansicht anzeigen",
"Show grid view" : "Kachelansicht anzeigen",
"No compatible server found at {remote}" : "Keinen kompatiblen Server unter {remote} gefunden",
"Invalid server URL" : "Falsche Server-URL",
"Failed to add the public link to your Nextcloud" : "Der öffentliche Link konnte nicht zu Ihrer Nextcloud hinzugefügt werden",
@@ -430,6 +422,14 @@
"To upload files, you need to provide your name first." : "Um Dateien hochzuladen, müssen Sie zunächst Ihren Namen angeben.",
"Enter your name" : "Geben Sie Ihren Namen ein",
"Submit name" : "Name übermitteln",
"Share note" : "Notiz teilen",
"Upload files to %s" : "Dateien für %s hochladen",
"%s shared a folder with you." : "%s hat einen Ordner mit Ihnen geteilt.",
"Note" : "Notiz",
"Select or drop files" : "Dateien auswählen oder hierher ziehen",
"Uploading files" : "Dateien werden hochgeladen",
"Uploaded files:" : "Hochgeladene Dateien:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Durch das Hochladen von Dateien stimmen Sie den %1$sNutzungsbedingungen%2$s zu.",
"Name" : "Name",
"Share with accounts, teams, federated cloud id" : "Teilen mit Konten, Teams, Federated-Cloud-IDs",
"Email, federated cloud id" : "Name, Federated-Cloud-ID",
+9 -9
View File
@@ -245,15 +245,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Διαμοιράστηκε με σας και τον {circle} από τον {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Διαμοιράστηκε με σας και με τη συζήτηση {conversation} από {owner}",
"Shared with you in a conversation by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"Share note" : "Σημείωση κοινόχρηστου",
"Show list view" : "Προβολή λίστας",
"Show grid view" : "Προβολή πλέγματος",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Note" : "Σημείωση",
"Select or drop files" : "Επιλέξτε ή αποθέστε αρχεία",
"Uploading files" : "Μεταφόρτωση αρχείων",
"Uploaded files:" : "Αποστολή αρχείων:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.",
"Share not found" : "Δεν βρέθηκε το κονόχρηστο",
"Back to %s" : "Πίσω στο %s",
"Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
@@ -263,6 +254,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Αυτό θα σταματήσει τις τρέχουσες μεταφορτώσεις.",
"Move or copy" : "Μετακίνηση ή αντιγραφή",
"You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο",
"Show list view" : "Προβολή λίστας",
"Show grid view" : "Προβολή πλέγματος",
"No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}",
"Invalid server URL" : "Μη έγκυρο URL διακομιστή",
"Failed to add the public link to your Nextcloud" : "Αποτυχία στην πρόσθεση του κοινού συνδέσμου στο Nextcloud σας",
@@ -270,6 +263,13 @@ OC.L10N.register(
"Search for share recipients" : "Αναζήτηση για παραλήπτες διαμοιρασμού",
"No recommendations. Start typing." : "Δεν υπάρχουν συστάσεις. Αρχίστε να πληκτρολογείτε.",
"Enter your name" : "Προσθέστε το όνομά σας",
"Share note" : "Σημείωση κοινόχρηστου",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Note" : "Σημείωση",
"Select or drop files" : "Επιλέξτε ή αποθέστε αρχεία",
"Uploading files" : "Μεταφόρτωση αρχείων",
"Uploaded files:" : "Αποστολή αρχείων:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.",
"Name" : "Όνομα",
"Filename must not be empty." : "Το όνομα αρχείου δεν πρέπει να είναι κενό."
},
+9 -9
View File
@@ -243,15 +243,6 @@
"Shared with you and {circle} by {owner}" : "Διαμοιράστηκε με σας και τον {circle} από τον {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Διαμοιράστηκε με σας και με τη συζήτηση {conversation} από {owner}",
"Shared with you in a conversation by {owner}" : "Διαμοιράστηκε με σας από τον {owner}",
"Share note" : "Σημείωση κοινόχρηστου",
"Show list view" : "Προβολή λίστας",
"Show grid view" : "Προβολή πλέγματος",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Note" : "Σημείωση",
"Select or drop files" : "Επιλέξτε ή αποθέστε αρχεία",
"Uploading files" : "Μεταφόρτωση αρχείων",
"Uploaded files:" : "Αποστολή αρχείων:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.",
"Share not found" : "Δεν βρέθηκε το κονόχρηστο",
"Back to %s" : "Πίσω στο %s",
"Add to your Nextcloud" : "Προσθήκη στο Nextcloud σου",
@@ -261,6 +252,8 @@
"This will stop your current uploads." : "Αυτό θα σταματήσει τις τρέχουσες μεταφορτώσεις.",
"Move or copy" : "Μετακίνηση ή αντιγραφή",
"You can upload into this folder" : "Μπορείτε να μεταφορτώσετε σε αυτόν τον φάκελο",
"Show list view" : "Προβολή λίστας",
"Show grid view" : "Προβολή πλέγματος",
"No compatible server found at {remote}" : "Δεν βρέθηκε συμβατός διακομιστής σε {remote}",
"Invalid server URL" : "Μη έγκυρο URL διακομιστή",
"Failed to add the public link to your Nextcloud" : "Αποτυχία στην πρόσθεση του κοινού συνδέσμου στο Nextcloud σας",
@@ -268,6 +261,13 @@
"Search for share recipients" : "Αναζήτηση για παραλήπτες διαμοιρασμού",
"No recommendations. Start typing." : "Δεν υπάρχουν συστάσεις. Αρχίστε να πληκτρολογείτε.",
"Enter your name" : "Προσθέστε το όνομά σας",
"Share note" : "Σημείωση κοινόχρηστου",
"Upload files to %s" : "Αποστολή αρχείων σε %s",
"Note" : "Σημείωση",
"Select or drop files" : "Επιλέξτε ή αποθέστε αρχεία",
"Uploading files" : "Μεταφόρτωση αρχείων",
"Uploaded files:" : "Αποστολή αρχείων:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Με την μεταφόρτωση αρχείων, συμφωνείτε με %1$sόρους χρήσεως %2$s.",
"Name" : "Όνομα",
"Filename must not be empty." : "Το όνομα αρχείου δεν πρέπει να είναι κενό."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+10 -10
View File
@@ -401,16 +401,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Shared with you and {circle} by {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Shared with you and the conversation {conversation} by {owner}",
"Shared with you in a conversation by {owner}" : "Shared with you in a conversation by {owner}",
"Share note" : "Share note",
"Show list view" : "Show list view",
"Show grid view" : "Show grid view",
"Upload files to %s" : "Upload files to %s",
"%s shared a folder with you." : "%s shared a folder with you.",
"Note" : "Note",
"Select or drop files" : "Select or drop files",
"Uploading files" : "Uploading files",
"Uploaded files:" : "Uploaded files:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.",
"Share not found" : "Share not found",
"Back to %s" : "Back to %s",
"Add to your Nextcloud" : "Add to your Nextcloud",
@@ -420,6 +410,8 @@ OC.L10N.register(
"This will stop your current uploads." : "This will stop your current uploads.",
"Move or copy" : "Move or copy",
"You can upload into this folder" : "You can upload into this folder",
"Show list view" : "Show list view",
"Show grid view" : "Show grid view",
"No compatible server found at {remote}" : "No compatible server found at {remote}",
"Invalid server URL" : "Invalid server URL",
"Failed to add the public link to your Nextcloud" : "Failed to add the public link to your Nextcloud",
@@ -432,6 +424,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "To upload files, you need to provide your name first.",
"Enter your name" : "Enter your name",
"Submit name" : "Submit name",
"Share note" : "Share note",
"Upload files to %s" : "Upload files to %s",
"%s shared a folder with you." : "%s shared a folder with you.",
"Note" : "Note",
"Select or drop files" : "Select or drop files",
"Uploading files" : "Uploading files",
"Uploaded files:" : "Uploaded files:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.",
"Name" : "Surname",
"Share with accounts, teams, federated cloud id" : "Share with accounts, teams, federated cloud id",
"Email, federated cloud id" : "Email, federated cloud id",
+10 -10
View File
@@ -399,16 +399,6 @@
"Shared with you and {circle} by {owner}" : "Shared with you and {circle} by {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Shared with you and the conversation {conversation} by {owner}",
"Shared with you in a conversation by {owner}" : "Shared with you in a conversation by {owner}",
"Share note" : "Share note",
"Show list view" : "Show list view",
"Show grid view" : "Show grid view",
"Upload files to %s" : "Upload files to %s",
"%s shared a folder with you." : "%s shared a folder with you.",
"Note" : "Note",
"Select or drop files" : "Select or drop files",
"Uploading files" : "Uploading files",
"Uploaded files:" : "Uploaded files:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.",
"Share not found" : "Share not found",
"Back to %s" : "Back to %s",
"Add to your Nextcloud" : "Add to your Nextcloud",
@@ -418,6 +408,8 @@
"This will stop your current uploads." : "This will stop your current uploads.",
"Move or copy" : "Move or copy",
"You can upload into this folder" : "You can upload into this folder",
"Show list view" : "Show list view",
"Show grid view" : "Show grid view",
"No compatible server found at {remote}" : "No compatible server found at {remote}",
"Invalid server URL" : "Invalid server URL",
"Failed to add the public link to your Nextcloud" : "Failed to add the public link to your Nextcloud",
@@ -430,6 +422,14 @@
"To upload files, you need to provide your name first." : "To upload files, you need to provide your name first.",
"Enter your name" : "Enter your name",
"Submit name" : "Submit name",
"Share note" : "Share note",
"Upload files to %s" : "Upload files to %s",
"%s shared a folder with you." : "%s shared a folder with you.",
"Note" : "Note",
"Select or drop files" : "Select or drop files",
"Uploading files" : "Uploading files",
"Uploaded files:" : "Uploaded files:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "By uploading files, you agree to the %1$sterms of service%2$s.",
"Name" : "Surname",
"Share with accounts, teams, federated cloud id" : "Share with accounts, teams, federated cloud id",
"Email, federated cloud id" : "Email, federated cloud id",
+10 -10
View File
@@ -386,16 +386,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y con la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido contigo por {owner} en una conversación",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Subir archivos a %s",
"%s shared a folder with you." : "%s ha compartido una carpeta contigo.",
"Note" : "Nota",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos subidos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.",
"Share not found" : "Recurso compartido no encontrado",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Añadir a tu Nextcloud",
@@ -405,6 +395,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Esto detendrá tus subidas actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes subir archivos en esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválida",
"Failed to add the public link to your Nextcloud" : "No se ha podido añadir el enlace público a tu Nextcloud",
@@ -417,6 +409,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Para cargar archivos, primero debes indicar tu nombre.",
"Enter your name" : "Escriba su nombre",
"Submit name" : "Enviar nombre",
"Share note" : "Compartir nota",
"Upload files to %s" : "Subir archivos a %s",
"%s shared a folder with you." : "%s ha compartido una carpeta contigo.",
"Note" : "Nota",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos subidos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.",
"Name" : "Nombre",
"Share with accounts, teams, federated cloud id" : "Comparta con cuentas, equipos, id de nube federada",
"Email, federated cloud id" : "Email, ID de nube federada",
+10 -10
View File
@@ -384,16 +384,6 @@
"Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y con la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido contigo por {owner} en una conversación",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Subir archivos a %s",
"%s shared a folder with you." : "%s ha compartido una carpeta contigo.",
"Note" : "Nota",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos subidos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.",
"Share not found" : "Recurso compartido no encontrado",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Añadir a tu Nextcloud",
@@ -403,6 +393,8 @@
"This will stop your current uploads." : "Esto detendrá tus subidas actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes subir archivos en esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se ha encontrado un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválida",
"Failed to add the public link to your Nextcloud" : "No se ha podido añadir el enlace público a tu Nextcloud",
@@ -415,6 +407,14 @@
"To upload files, you need to provide your name first." : "Para cargar archivos, primero debes indicar tu nombre.",
"Enter your name" : "Escriba su nombre",
"Submit name" : "Enviar nombre",
"Share note" : "Compartir nota",
"Upload files to %s" : "Subir archivos a %s",
"%s shared a folder with you." : "%s ha compartido una carpeta contigo.",
"Note" : "Nota",
"Select or drop files" : "Seleccione o arrastre y suelte archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos subidos:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos del servicio%2$s.",
"Name" : "Nombre",
"Share with accounts, teams, federated cloud id" : "Comparta con cuentas, equipos, id de nube federada",
"Email, federated cloud id" : "Email, ID de nube federada",
+9 -9
View File
@@ -230,15 +230,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido contigo en una conversación por {owner}",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Cargar archivos a %s",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos de servicio%2$s.",
"Share not found" : "No se encontró el elemento compartido",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Agregar a tu Nextcloud",
@@ -248,12 +239,21 @@ OC.L10N.register(
"This will stop your current uploads." : "Esto detendrá tus cargas actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválido",
"Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar el enlace público a tu Nextcloud",
"Download all files" : "Descargar todos los archivos",
"Search for share recipients" : "Buscar destinatarios de la compartición",
"No recommendations. Start typing." : "No hay recomendaciones. Comienza a escribir.",
"Share note" : "Compartir nota",
"Upload files to %s" : "Cargar archivos a %s",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos de servicio%2$s.",
"Name" : "Nombre"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
+9 -9
View File
@@ -228,15 +228,6 @@
"Shared with you and {circle} by {owner}" : "Compartido contigo y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido contigo y la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido contigo en una conversación por {owner}",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Cargar archivos a %s",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos de servicio%2$s.",
"Share not found" : "No se encontró el elemento compartido",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Agregar a tu Nextcloud",
@@ -246,12 +237,21 @@
"This will stop your current uploads." : "Esto detendrá tus cargas actuales.",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválido",
"Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar el enlace público a tu Nextcloud",
"Download all files" : "Descargar todos los archivos",
"Search for share recipients" : "Buscar destinatarios de la compartición",
"No recommendations. Start typing." : "No hay recomendaciones. Comienza a escribir.",
"Share note" : "Compartir nota",
"Upload files to %s" : "Cargar archivos a %s",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Subiendo archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al subir archivos, aceptas los %1$stérminos de servicio%2$s.",
"Name" : "Nombre"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}
+10 -10
View File
@@ -329,16 +329,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "Compartido con Ud. y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido con Ud. y la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido con Ud. en una conversación por {owner}",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Cargar archivos a %s",
"%s shared a folder with you." : "%s le compartió una carpeta.",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Cargando archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al cargar archivos, acepta los %1$stérminos de servicio%2$s.",
"Share not found" : "No se encontró el elemento compartido",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Agregar a tu Nextcloud",
@@ -348,6 +338,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Se detendrán las cargas en curso",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválido",
"Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
@@ -360,6 +352,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Para cargar archivos, primero debe proveer su nombre.",
"Enter your name" : "Ingrese su nombre",
"Submit name" : "Enviar nombre",
"Share note" : "Compartir nota",
"Upload files to %s" : "Cargar archivos a %s",
"%s shared a folder with you." : "%s le compartió una carpeta.",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Cargando archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al cargar archivos, acepta los %1$stérminos de servicio%2$s.",
"Name" : "Nombre",
"Filename must not be empty." : "El nombre de archivo no puede estar vacío."
},
+10 -10
View File
@@ -327,16 +327,6 @@
"Shared with you and {circle} by {owner}" : "Compartido con Ud. y {circle} por {owner}",
"Shared with you and the conversation {conversation} by {owner}" : "Compartido con Ud. y la conversación {conversation} por {owner}",
"Shared with you in a conversation by {owner}" : "Compartido con Ud. en una conversación por {owner}",
"Share note" : "Compartir nota",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"Upload files to %s" : "Cargar archivos a %s",
"%s shared a folder with you." : "%s le compartió una carpeta.",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Cargando archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al cargar archivos, acepta los %1$stérminos de servicio%2$s.",
"Share not found" : "No se encontró el elemento compartido",
"Back to %s" : "Volver a %s",
"Add to your Nextcloud" : "Agregar a tu Nextcloud",
@@ -346,6 +336,8 @@
"This will stop your current uploads." : "Se detendrán las cargas en curso",
"Move or copy" : "Mover o copiar",
"You can upload into this folder" : "Puedes cargar archivos dentro de esta carpeta",
"Show list view" : "Mostrar vista de lista",
"Show grid view" : "Mostrar vista de cuadrícula",
"No compatible server found at {remote}" : "No se encontró un servidor compatible en {remote}",
"Invalid server URL" : "URL del servidor inválido",
"Failed to add the public link to your Nextcloud" : "Se presentó una falla al agregar la liga pública a tu Nextcloud",
@@ -358,6 +350,14 @@
"To upload files, you need to provide your name first." : "Para cargar archivos, primero debe proveer su nombre.",
"Enter your name" : "Ingrese su nombre",
"Submit name" : "Enviar nombre",
"Share note" : "Compartir nota",
"Upload files to %s" : "Cargar archivos a %s",
"%s shared a folder with you." : "%s le compartió una carpeta.",
"Note" : "Nota",
"Select or drop files" : "Selecciona o suelta los archivos",
"Uploading files" : "Cargando archivos",
"Uploaded files:" : "Archivos cargados:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Al cargar archivos, acepta los %1$stérminos de servicio%2$s.",
"Name" : "Nombre",
"Filename must not be empty." : "El nombre de archivo no puede estar vacío."
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+10 -10
View File
@@ -401,16 +401,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : "„{owner}“ jagas seda sinuga ja „{circle}“ tiimiga",
"Shared with you and the conversation {conversation} by {owner}" : "„{owner}“ jagas seda sinuga ja vestlusega „{conversation}“",
"Shared with you in a conversation by {owner}" : "„{owner}“ jagas seda sinuga vestluses",
"Share note" : "Jaga märget",
"Show list view" : "Näita loendivaadet",
"Show grid view" : "Näita ruudustikuvaadet",
"Upload files to %s" : "Laadi failid %s",
"%s shared a folder with you." : "%s jagas sinuga kausta.",
"Note" : "Märge",
"Select or drop files" : "Vali või lohista failid",
"Uploading files" : "Failid on üleslaadimisel",
"Uploaded files:" : "Üleslaaditud failid:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.",
"Share not found" : "Jagamist ei leidu",
"Back to %s" : "Tagasi siia: %s",
"Add to your Nextcloud" : "Lisa oma Nextcloudi",
@@ -420,6 +410,8 @@ OC.L10N.register(
"This will stop your current uploads." : "See peatab praegused üleslaadimised.",
"Move or copy" : "Liiguta või kopeeri",
"You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida",
"Show list view" : "Näita loendivaadet",
"Show grid view" : "Näita ruudustikuvaadet",
"No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit",
"Invalid server URL" : "Vigane serveri URL",
"Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus",
@@ -432,6 +424,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Faili üleslaadimiseks pead esmalt oma nime sisestama.",
"Enter your name" : "Sisesta oma nimi",
"Submit name" : "Salvesta nimi",
"Share note" : "Jaga märget",
"Upload files to %s" : "Laadi failid %s",
"%s shared a folder with you." : "%s jagas sinuga kausta.",
"Note" : "Märge",
"Select or drop files" : "Vali või lohista failid",
"Uploading files" : "Failid on üleslaadimisel",
"Uploaded files:" : "Üleslaaditud failid:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.",
"Name" : "Nimi",
"Share with accounts, teams, federated cloud id" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega",
"Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus",
+10 -10
View File
@@ -399,16 +399,6 @@
"Shared with you and {circle} by {owner}" : "„{owner}“ jagas seda sinuga ja „{circle}“ tiimiga",
"Shared with you and the conversation {conversation} by {owner}" : "„{owner}“ jagas seda sinuga ja vestlusega „{conversation}“",
"Shared with you in a conversation by {owner}" : "„{owner}“ jagas seda sinuga vestluses",
"Share note" : "Jaga märget",
"Show list view" : "Näita loendivaadet",
"Show grid view" : "Näita ruudustikuvaadet",
"Upload files to %s" : "Laadi failid %s",
"%s shared a folder with you." : "%s jagas sinuga kausta.",
"Note" : "Märge",
"Select or drop files" : "Vali või lohista failid",
"Uploading files" : "Failid on üleslaadimisel",
"Uploaded files:" : "Üleslaaditud failid:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.",
"Share not found" : "Jagamist ei leidu",
"Back to %s" : "Tagasi siia: %s",
"Add to your Nextcloud" : "Lisa oma Nextcloudi",
@@ -418,6 +408,8 @@
"This will stop your current uploads." : "See peatab praegused üleslaadimised.",
"Move or copy" : "Liiguta või kopeeri",
"You can upload into this folder" : "Sa saad sellesse kausta faile üles laadida",
"Show list view" : "Näita loendivaadet",
"Show grid view" : "Näita ruudustikuvaadet",
"No compatible server found at {remote}" : "Aadressil {remote} ei leitud ühilduvat serverit",
"Invalid server URL" : "Vigane serveri URL",
"Failed to add the public link to your Nextcloud" : "Avaliku lingi lisamine sinu Nextcloudi ebaõnnestus",
@@ -430,6 +422,14 @@
"To upload files, you need to provide your name first." : "Faili üleslaadimiseks pead esmalt oma nime sisestama.",
"Enter your name" : "Sisesta oma nimi",
"Submit name" : "Salvesta nimi",
"Share note" : "Jaga märget",
"Upload files to %s" : "Laadi failid %s",
"%s shared a folder with you." : "%s jagas sinuga kausta.",
"Note" : "Märge",
"Select or drop files" : "Vali või lohista failid",
"Uploading files" : "Failid on üleslaadimisel",
"Uploaded files:" : "Üleslaaditud failid:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Faile üleslaadides nõustud sa „%2$s“ teenuse „%1$s“ kasutustingimustega.",
"Name" : "Nimi",
"Share with accounts, teams, federated cloud id" : "Jaga kasutajatega, tiimidega ja liitpilves osalejatega",
"Email, federated cloud id" : "E-posti aadress, liitpilve kasutajatunnus",
+10 -10
View File
@@ -389,16 +389,6 @@ OC.L10N.register(
"Shared with you and {circle} by {owner}" : " {owner} erabiltzaileak zurekin eta {circle} zirkuluarekin partekatua",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} erabiltzaileak zu eta {conversation} elkarrizketarekin partekatua",
"Shared with you in a conversation by {owner}" : "{owner} erabiltzaileak zurekin partekatua elkarrizketa batean",
"Share note" : "Partekatu oharra",
"Show list view" : "Erakutsi zerrenda ikuspegia",
"Show grid view" : "Erakutsi sareta-ikuspegia",
"Upload files to %s" : "Igo fitxategiak hona: %s",
"%s shared a folder with you." : "%s zurekin karpeta bat partekatu du.",
"Note" : "Oharra",
"Select or drop files" : "Hautatu edo jaregin fitxategiak",
"Uploading files" : "Fitxategiak igotzen",
"Uploaded files:" : "Igotako fitxategiak:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak igotzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.",
"Share not found" : "Partekatzea ez da aurkitu",
"Back to %s" : "Itzuli %s(e)ra",
"Add to your Nextcloud" : "Gehitu zure Nextclouden",
@@ -408,6 +398,8 @@ OC.L10N.register(
"This will stop your current uploads." : "Honek zure uneko igoerak geldituko ditu.",
"Move or copy" : "Mugitu edo kopiatu",
"You can upload into this folder" : "Karpeta honetara igo dezakezu",
"Show list view" : "Erakutsi zerrenda ikuspegia",
"Show grid view" : "Erakutsi sareta-ikuspegia",
"No compatible server found at {remote}" : "Ez da zerbitzari bateragarririk aurkitu {remote} helbidean",
"Invalid server URL" : "Zerbitzari URL baliogabea",
"Failed to add the public link to your Nextcloud" : "Huts egin du esteka publikoa zure Nextcloudera gehitzean",
@@ -420,6 +412,14 @@ OC.L10N.register(
"To upload files, you need to provide your name first." : "Fitxategiak igotzeko, zure izena eman behar duzu lehenik.",
"Enter your name" : "Sartu zure izena",
"Submit name" : "Sartu izena",
"Share note" : "Partekatu oharra",
"Upload files to %s" : "Igo fitxategiak hona: %s",
"%s shared a folder with you." : "%s zurekin karpeta bat partekatu du.",
"Note" : "Oharra",
"Select or drop files" : "Hautatu edo jaregin fitxategiak",
"Uploading files" : "Fitxategiak igotzen",
"Uploaded files:" : "Igotako fitxategiak:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak igotzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.",
"Name" : "Izena",
"Share with accounts, teams, federated cloud id" : "Partekatu kontuekin, taldeekin edo federatutako hodeien ID-ekin",
"Email, federated cloud id" : "Posta elektroniko, federatutako hodeien ID",
+10 -10
View File
@@ -387,16 +387,6 @@
"Shared with you and {circle} by {owner}" : " {owner} erabiltzaileak zurekin eta {circle} zirkuluarekin partekatua",
"Shared with you and the conversation {conversation} by {owner}" : "{owner} erabiltzaileak zu eta {conversation} elkarrizketarekin partekatua",
"Shared with you in a conversation by {owner}" : "{owner} erabiltzaileak zurekin partekatua elkarrizketa batean",
"Share note" : "Partekatu oharra",
"Show list view" : "Erakutsi zerrenda ikuspegia",
"Show grid view" : "Erakutsi sareta-ikuspegia",
"Upload files to %s" : "Igo fitxategiak hona: %s",
"%s shared a folder with you." : "%s zurekin karpeta bat partekatu du.",
"Note" : "Oharra",
"Select or drop files" : "Hautatu edo jaregin fitxategiak",
"Uploading files" : "Fitxategiak igotzen",
"Uploaded files:" : "Igotako fitxategiak:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak igotzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.",
"Share not found" : "Partekatzea ez da aurkitu",
"Back to %s" : "Itzuli %s(e)ra",
"Add to your Nextcloud" : "Gehitu zure Nextclouden",
@@ -406,6 +396,8 @@
"This will stop your current uploads." : "Honek zure uneko igoerak geldituko ditu.",
"Move or copy" : "Mugitu edo kopiatu",
"You can upload into this folder" : "Karpeta honetara igo dezakezu",
"Show list view" : "Erakutsi zerrenda ikuspegia",
"Show grid view" : "Erakutsi sareta-ikuspegia",
"No compatible server found at {remote}" : "Ez da zerbitzari bateragarririk aurkitu {remote} helbidean",
"Invalid server URL" : "Zerbitzari URL baliogabea",
"Failed to add the public link to your Nextcloud" : "Huts egin du esteka publikoa zure Nextcloudera gehitzean",
@@ -418,6 +410,14 @@
"To upload files, you need to provide your name first." : "Fitxategiak igotzeko, zure izena eman behar duzu lehenik.",
"Enter your name" : "Sartu zure izena",
"Submit name" : "Sartu izena",
"Share note" : "Partekatu oharra",
"Upload files to %s" : "Igo fitxategiak hona: %s",
"%s shared a folder with you." : "%s zurekin karpeta bat partekatu du.",
"Note" : "Oharra",
"Select or drop files" : "Hautatu edo jaregin fitxategiak",
"Uploading files" : "Fitxategiak igotzen",
"Uploaded files:" : "Igotako fitxategiak:",
"By uploading files, you agree to the %1$sterms of service%2$s." : "Fitxategiak igotzean, %1$szerbitzu-baldintzak%2$s onartzen dituzu.",
"Name" : "Izena",
"Share with accounts, teams, federated cloud id" : "Partekatu kontuekin, taldeekin edo federatutako hodeien ID-ekin",
"Email, federated cloud id" : "Posta elektroniko, federatutako hodeien ID",

Some files were not shown because too many files have changed in this diff Show More