Compare commits

..

312 Commits

Author SHA1 Message Date
Robin Appelman 573099c47d feat: implement authoritative mount provider for share provider
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 15:13:38 +01:00
Robin Appelman ab40d76c99 feat: perform share mount validation on share instead of on mount
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 15:13:38 +01:00
Robin Appelman 62d7165124 Merge pull request #57370 from nextcloud/authoritative-mount-setup
Authoritative mount setup
2026-01-14 14:19:03 +01:00
Robin Appelman 47530ef95f feat: add a debug config option to disable authoritative mount optimizations
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 13:03:01 +01:00
Ferdinand Thiessen 22ebf79e90 Merge pull request #57503 from nextcloud/chore/drop-moment
refactor: drop moment from new bundles
2026-01-14 12:33:56 +01:00
Robin Appelman 9fde2523e6 Merge pull request #57493 from nextcloud/smb-invalid-arg-unavailable
fix: handle InvalidArumentException as availability failure in smb->getFileInfo
2026-01-14 12:00:03 +01:00
Kate ad8576f02d Merge pull request #57185 from nextcloud/fix/fix-files-external-tests 2026-01-14 11:46:28 +01:00
Robin Appelman e5497c7731 fix: protect against infinite loops in setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-14 11:21:27 +01:00
Robin Appelman 6eb8e8d6fd Merge pull request #57519 from nextcloud/get-existing-api
feat: add api to get a user object without verifying they exist
2026-01-14 11:15:42 +01:00
github-actions[bot] a4cf7145cd Merge pull request #57471 from nextcloud/dependabot/npm_and_yarn/zip.js/zip.js-2.8.14
build(deps-dev): bump @zip.js/zip.js from 2.8.11 to 2.8.14
2026-01-14 11:13:41 +01:00
Kate 7d1b1de155 Merge pull request #54697 from nextcloud/fix/unit-test-for-storage-auto-expire-list 2026-01-14 11:00:33 +01:00
yemkareems fb2716ab4b fix: php lint fix
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:58:32 +05:30
Ferdinand Thiessen a623bffb00 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 10:27:02 +01:00
yemkareems f0b90e6378 fix: removed the message
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:57:02 +05:30
Ferdinand Thiessen 8ac1602402 refactor: drop moment from new bundles
On the Vue 3 side lets remove the dependency on Moment as this is a
pretty huge dependency. Instead use plain Intl API for formatting.

This reduces the bundle size by ~1.5MiB.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 10:25:37 +01:00
yemkareems 5f6a777c5b fix: refactored testBucketKeepsLatest to add invalid data assert
Signed-off-by: yemkareems <yemkareems@gmail.com>
2026-01-14 14:46:48 +05:30
grnd-alt dac8fe4034 Merge pull request #57405 from nextcloud/3rdparty/justinrainbow/json-schema
chore: update justinrainbow/json-schema to 6.6.4
2026-01-14 09:27:53 +01:00
Ferdinand Thiessen 891d0fc481 Merge pull request #57526 from nextcloud/refactor/loginflow-to-vue
refactor(core): migrate login flow ui from jQuery to Vue
2026-01-14 03:10:07 +01:00
dependabot[bot] 172698e61a build(deps-dev): bump @zip.js/zip.js from 2.8.11 to 2.8.14
Bumps [@zip.js/zip.js](https://github.com/gildas-lormeau/zip.js) from 2.8.11 to 2.8.14.
- [Release notes](https://github.com/gildas-lormeau/zip.js/releases)
- [Commits](https://github.com/gildas-lormeau/zip.js/compare/v2.8.11...v2.8.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-14 01:16:57 +01:00
Ferdinand Thiessen 942a92f072 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 01:15:01 +01:00
Ferdinand Thiessen d26ec02aa1 refactor(core): migrate login flow ui from jQuery to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-14 01:15:01 +01:00
Nextcloud bot a8369cdbee fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-14 00:13:54 +00:00
Ferdinand Thiessen 038d940df1 Merge pull request #57515 from nextcloud/refactor/encryption-vue3
refactor(encryption): migrate to Vue 3 and Typescript and script setup
2026-01-14 00:29:17 +01:00
Ferdinand Thiessen a2d0d8b26b chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 22:51:07 +01:00
Ferdinand Thiessen 108858daef refactor(encryption): migrate to Vue 3 and Typescript and script setup
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 22:49:18 +01:00
Ferdinand Thiessen ab8e4e60ea Merge pull request #57502 from nextcloud/chore/theming-js
refactor(theming): move from `js/` to `src/`
2026-01-13 22:41:44 +01:00
Ferdinand Thiessen c59ad1f847 Merge pull request #57355 from nextcloud/refactor/oc-settings
refactor: consolidate `OC.Settings`
2026-01-13 22:35:40 +01:00
nextcloud-command fa535d0e20 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-13 19:04:13 +00:00
Ferdinand Thiessen 41e1a995a9 refactor(theming): move from js/ to src/
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 18:47:28 +01:00
Benjamin Gaussorgues 6248afe544 Merge pull request #57441 from nextcloud/release/33.0.0_beta_3 2026-01-13 16:58:49 +01:00
Benjamin Gaussorgues e3f951b804 Merge pull request #57455 from nextcloud/feat/nextcloudignore 2026-01-13 16:58:32 +01:00
Robin Appelman 467487ecd8 feat: dont reload authoritative mount providers when doing by-path setup
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 16:42:48 +01:00
Robin Appelman ae74dbef2b Merge pull request #56499 from nextcloud/authoritative-mount-provider-files_external
Add api for authoritative mount providers and implement it for files_external
2026-01-13 16:36:33 +01:00
Robin Appelman 663f6822c7 test: use a different smb image for smb testing
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 16:11:21 +01:00
Robin Appelman 5924a2e3ec feat: add api to get a user object without verifying they exist
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-13 15:59:07 +01:00
Ferdinand Thiessen bd664cb8fd chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 15:42:00 +01:00
Ferdinand Thiessen 805805767f refactor: consolidate OC.Settings
1. Remove unused legacy parts (no code match in the whole github
organization).
2. Consolidate `OC.Settings` in `core/src/OC` for consistency.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 15:41:59 +01:00
Ferdinand Thiessen 0fa396d0b8 Merge pull request #57509 from nextcloud/fix/use-strict-array-search
Use strict array search
2026-01-13 15:22:20 +01:00
Carl Schwan 5acb93a5be Merge pull request #57510 from nextcloud/carl/callback-optimization
perf(dav): Avoid getting DB Connection inside callback
2026-01-13 15:01:54 +01:00
Maxence Lange 048037b629 Merge pull request #57495 from nextcloud/fix/noid/no-data-response
fix(ocm): empty response
2026-01-13 11:21:03 -01:00
Côme Chilliet f31f4eba7f chore: While at it use strict array search in build/integration
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:59 +01:00
Côme Chilliet dc843f6d0a fix: Use strict array search in other shipped apps as well
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:36 +01:00
Côme Chilliet 3c80b7f2b3 fix: Use strict array comparisons in lib/
To avoid surprises with corner cases.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:48:04 +01:00
Carl Schwan a1979c9cd1 perf(dav): Avoid getting DB Connection inside callback
Fetch it once outside instead and pass it to the callback.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-13 11:47:11 +01:00
Côme Chilliet c1dd559965 fix: Use strict array comparisons in user_ldap
Otherwise there are issues with string values looking like numbers.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:46:57 +01:00
Côme Chilliet 166febb940 fix(tests): Use absolute paths for files_external tests configuration files
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2026-01-13 11:07:27 +01:00
Joas Schilling 408f9e8256 Merge pull request #57491 from nextcloud/fix/taskprocessing-userfacingerrormessage-responsedef
fix(TaskProcessing): Expose userFacingErrorMessage on ResponseDefinitions#CoreTaskProcessingTask
2026-01-13 10:27:01 +01:00
grnd-alt 0461301597 chore: update justinrainbow/json-schema to 6.6.4
Signed-off-by: grnd-alt <git@belakkaf.net>
2026-01-13 10:14:53 +01:00
Ferdinand Thiessen 08d4ccb36f Merge pull request #57237 from nextcloud/refactor/files-external-vue3-ts
refactor(files_external): migrate to script-setup and Vue 3
2026-01-13 03:04:49 +01:00
nextcloud-command 31957add33 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-13 01:33:19 +00:00
Ferdinand Thiessen e76f9284ce refactor(files_external): adjust files integration
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen a05c285979 feat(files_external): implement storage table
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 1ec308a9dd feat(files_external): provide new API to register AuthMechanisms
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 0e22ae1efe refactor(files_external): migrate public key auth to Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 5ed7c4fd97 fix(files_external): adjust settings
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 545c72becb chore: remove non working and legacy OAuth2 auth schema
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen e1133ec926 feat(files_external): Migrate settings to Vue
Template parameters are migrated to initial state, common state between admin and user settings is shared in the CommonSettingsTrait.
The template is cleaned and replaced with only a stub for the Vue mount.
Code only used for the frontend of the settings is moved from the MountConfig to the CommonSettingsTrait (the missing dependency messages).

On the frontend a wrapper view is created that currently holds the global credentials settings and the external storages settings.
- The global credentials sections is now a stand-alone sections - fully implemented.
- The external storages section holds the table + user config + warnings on missing dependencies

The legacy UI is temporarly renamed but will be removed in a following commit.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen d4674060dc fix(files_external): return correct type for new user defined storages
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 38ed0a8283 fix: hard type controllers where the type is required to match
Prevent HTTP 500 errors where a 400 would be the correct response

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 4c8b9deca0 feat(files_external): Move script loading to CommonSettingsTrait to reduce duplicated code between admin and user settings
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Ferdinand Thiessen 5c652484e3 refactor(files_external): migrate files integration to script-setup and Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-13 01:30:37 +00:00
Nextcloud bot a5225bdf99 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-13 00:13:56 +00:00
Ferdinand Thiessen ac3d09d817 Merge pull request #57499 from nextcloud/feat/migrate-user-ldap-renew
refactor(user_ldap): migrate jQuery UI of password renewal to Vue
2026-01-12 22:56:09 +01:00
Ferdinand Thiessen 2c3872f325 Merge pull request #57095 from nextcloud/fix/public-upload
fix(files): ensure creating folders in public shares work
2026-01-12 22:31:47 +01:00
Ferdinand Thiessen bad5531860 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 21:48:13 +01:00
Ferdinand Thiessen 29e31ffdb1 refactor(user_ldap): migrate jQuery UI of password renewal to Vue
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 21:48:13 +01:00
nextcloud-command bdd379e82e chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 20:07:13 +00:00
Ferdinand Thiessen 8c93d4a9e1 fix(files): ensure creating folders in public shares work
The root of the webdav client needs to be the public share root,
as accessing the `/files` folder is not possible for public shares.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 20:39:54 +01:00
Ferdinand Thiessen 5f33fee58f Merge pull request #56941 from nextcloud/fix/importmaps
fix(template): add import map for JS module entry points
2026-01-12 20:38:58 +01:00
Kate 258b30606f Merge pull request #57357 from Freiheitswolke/fix/NavigationManager/Remove-break-to-return-all-defaultEntryIds 2026-01-12 19:29:18 +01:00
Marcel Klehr 1182b6d4f0 chore: Update openapi specs
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2026-01-12 18:32:33 +01:00
Marcel Klehr a45978789b fix(TaskProcessing): Expose userFacingErrorMessage on ResponseDefinitions#CoreTaskProcessingTask
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2026-01-12 18:32:33 +01:00
Maxence Lange 42d745e17b fix(ocm): empty response
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-12 15:22:08 -01:00
Robin Appelman 4dcd4223de fix: make smb auth failure on forbidden exception more reliable
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-12 15:23:57 +01:00
Robin Appelman 43727cb72c fix: handle InvalidArumentException as availability failure in smb->getFileInfo
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-12 15:23:57 +01:00
Benjamin Gaussorgues 89166cbf9a Merge pull request #57054 from nextcloud/fix/federated-vue 2026-01-12 15:11:40 +01:00
Joas Schilling 6bdda55733 Merge pull request #57453 from nextcloud/feat/noid/qr-code-in-account-menu
Improve usability of QR code login
2026-01-12 14:01:10 +01:00
Ferdinand Thiessen f0e020f97d fix(template): add import map for JS module entry points
Currently apps are broken if they have exports in the JS entry point,
because they then will import from the entry point but because they do
not know about the Nextcloud cache buster they will import without cache
buster.

This results in two problem:
1. The module might be outdated (old cached)
2. The module is duplicated, so the module will be loaded twice and will
   have two different - out of sync - states. This also means it will
   re-run sideeffects of the entry point.

To fix this we generate an import map which basically maps the plain
entry point script to the script with cache buster added.

(Some background: Bundler will try to minimize chunks (reduce page
loading time) so they can inline modules into entry points and thus
extend the entry point exports and then this issue would be caused).

For example:
```js
// entry.mjs
console.error('called')

async function onClick() {
  await import('./chunk.mjs')
}

export const name = 'foo'

// chunk.mjs
import { name } from './entry.mjs'

console.error(name)
```

When calling `onClick` without this fix the output will be:
> called
> called
> foo

With this fix:
> called
> foo

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 13:34:11 +01:00
Joas Schilling 0e99c60da1 Merge pull request #57450 from nextcloud/3rdparty/sabre-vobject-iTipBroker-replies
fix: add send participation reply on fresh event patch
2026-01-12 12:27:43 +01:00
Benjamin Gaussorgues 98619ca6fb Merge pull request #56524 from nextcloud/fix/group-displayname-in-user-edit 2026-01-12 12:25:19 +01:00
Joas Schilling 8b4491ae1c fix: Add translation for temporary app password names
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-12 11:58:45 +01:00
Robin Appelman 2a2cd291d5 Merge pull request #57392 from nextcloud/user-share-access-event
feat: add event for apps that a users share access might have changed
2026-01-12 11:58:00 +01:00
Ferdinand Thiessen 835d507d64 Merge pull request #57354 from nextcloud/fix/comments-node-api
fix(comments): adjust Activity integration for changed Node API
2026-01-12 11:28:58 +01:00
nextcloud-command 954945a26b chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 10:10:52 +00:00
Joas Schilling f4acd8a7ab fix: Adjust and add new tests
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-12 11:07:44 +01:00
Benjamin Gaussorgues bd90e7c122 Merge pull request #57442 from nextcloud/carl/entity-id-type 2026-01-12 11:03:33 +01:00
Benjamin Gaussorgues 8d50027e78 Merge pull request #57142 from nextcloud/carl/dashboard-psalm 2026-01-12 11:03:17 +01:00
Ferdinand Thiessen 29488d6a78 fix(federatedfilesharing): pre must not be a child of p
Fix the problem reported:
> [plugin vite:vue] apps/federatedfilesharing/src/components/PersonalSettings.vue: <pre> cannot be child of <p>, according to HTML specifications.
> This can cause hydration errors or potentially disrupt future functionality.

`p` only allows inline elements, but pre is none.
We either need to use `div` instead of `p` or `code` instead of `pre`.
But in this case we want a block of code, so we use `div` and inner
`<pre><code>`.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 10:45:58 +01:00
Carl Schwan 716513164f Merge pull request #57452 from nextcloud/fix/noid/ldap-get-displayname-backend
fix: Make User_Proxy IGetDisplayNameBackend complient
2026-01-12 10:19:10 +01:00
Benjamin Gaussorgues e0e5cdf3e1 Merge pull request #57449 from nextcloud/feat/unstable/moving-out-of-unstable-signature 2026-01-12 09:39:21 +01:00
nextcloud-command 9e2058d199 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-12 08:38:06 +00:00
Ferdinand Thiessen a1503481f3 fix(comments): adjust Activity integration for changed Node API
The activity app integration was changed to use the files Node API
instead of the legacy FileInfo API. So the comments app needs to be
adjusted for it.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-12 09:23:57 +01:00
Benjamin Gaussorgues b9c3e47b82 feat(build): add .nextcloudignore file to match Krankerl behaviour
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-12 09:17:58 +01:00
Christoph Wurst 18a7369bb9 Merge pull request #57020 from abhinavohri/fix_warnings
fix: Reduce deprecation warnings in phpunit_nodb CI jobs
2026-01-12 08:58:26 +01:00
Abhinav Ohri f89613b507 refactor(testing): Rename mock trait classes for clarity
Signed-off-by: Abhinav Ohri <abhinavohri13@gmail.com>
2026-01-12 07:59:41 +01:00
Abhinav Ohri 252956d6b2 test: fix PHPUnit deprecations and mocking issues
Signed-off-by: Abhinav Ohri <abhinavohri13@gmail.com>
2026-01-12 07:59:41 +01:00
Nextcloud bot 3e9d2fe208 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-12 00:13:44 +00:00
Nextcloud bot 7335927bed fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-11 00:13:41 +00:00
SebastianKrupinski 6ce24383c2 fix: add send participation reply on fresh event patch
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2026-01-10 11:35:08 -05:00
nextcloud-command a17a4f4958 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-10 11:26:58 +01:00
Benjamin Frueh 2b97afa829 fix(settings): Display group displayName consistently when editing a user
Signed-off-by: Benjamin Frueh <benjamin.frueh@gmail.com>
2026-01-10 11:26:58 +01:00
Nextcloud bot d341c2011f fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-10 00:27:12 +00:00
Raphael Gradenwitz 7eea3b7742 Merge pull request #55433 from nextcloud/ernolf/enh/http2-brotli-client
perf(client): enable HTTP/2 and brotli support in internal HTTP client
2026-01-10 01:09:17 +01:00
Raphael Gradenwitz 7c526b4de3 Merge branch 'master' into ernolf/enh/http2-brotli-client 2026-01-10 00:00:47 +01:00
Maxence Lange 327d691c23 feat(signed-request): moving out of unstable
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-09 20:16:24 -01:00
Sebastian Krupinski 635e26dfdc Merge pull request #57231 from nextcloud/feat/restrict-calendar-invitation-users
feat: restrict calendar invitation participants
2026-01-09 13:42:12 -05:00
Maksim Sukharev 80f6856ce7 chore: Recompile assets
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
2026-01-09 19:07:08 +01:00
Joas Schilling 2510020b33 fix: Recompile openapi
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 927bea2b4d fix(psalm): Satisfy psalm
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 3713f40d5b fix(app-password): Require strict password confirmation
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling a82827dff5 feat(app-passwords): Add config to disallow creating app-passwords
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 6c20e3e103 fix(onetime): Allow longer duration via app config
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling bacb4323de fix: add app config to control onetime case
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling e7d0ed2020 fix(sessions): Hide one-time app passwords
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Joas Schilling 6b121c37da feat: Allow to create one-time app passwords that only allow loading an app-password
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-09 19:07:07 +01:00
Marcel Müller 3b9ec2d119 feat(qrcode-login): Add QR code login option directly in the user menu
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
Signed-off-by: Maksim Sukharev <antreesy.web@gmail.com>
2026-01-09 19:07:07 +01:00
Robin Appelman c2cd236411 Merge pull request #57191 from nextcloud/dav-x-user-id
feat: also send x-user-id for dav responses
2026-01-09 18:43:36 +01:00
Marcel Müller f870041943 fix: Make User_Proxy IGetDisplayNameBackend complient
Signed-off-by: Marcel Müller <marcel-mueller@gmx.de>
2026-01-09 18:31:55 +01:00
SebastianKrupinski acfec22652 feat: restrict calendar invitation participants
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2026-01-09 12:07:18 -05:00
Robin Appelman 272d6141ca fix: improve handling updated storages
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:55 +01:00
Robin Appelman be3bbf22e0 fix: better applicable check for updating external mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:54 +01:00
Robin Appelman c14948f629 test: update cypress test for new files_external mount behavior
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:54 +01:00
Robin Appelman fa61c4c57d fix: don't error when checking login credential storage from cli
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:53 +01:00
Robin Appelman 6dd6d06606 fix: update external storage mounts on login
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:53 +01:00
Robin Appelman 9dffca2f07 fix: improve handling of unavailable storages
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:52 +01:00
Robin Appelman 73e84f9bf5 perf: cache root cache entries for external storage in MountCacheService
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:51 +01:00
Robin Appelman d64f7eb939 feat: listen to user/group events and update external storage mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:51 +01:00
Robin Appelman 5565cdb390 feat: make external storage mount provider authoritative
Signed-off-by: Robin Appelman <robin@icewind.nl>

# Conflicts:
#	apps/files_external/lib/AppInfo/Application.php
2026-01-09 17:53:50 +01:00
Robin Appelman 765d1af2a6 feat: yield user by id in IUserManager::getSeenUsers
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:49 +01:00
Robin Appelman c80c980e29 feat: add typed events for external storage config changes
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:49 +01:00
Robin Appelman e3551e576c feat: add api for authoritative mount providers to update the user mounts
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:48 +01:00
Robin Appelman 198d500ac6 feat: add interface to mark mount providers as authoritative
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-09 17:53:42 +01:00
Robin Appelman 328a4608aa Merge pull request #57454 from nextcloud/fix/session/handle-null-logger
fix(session): handle null logger
2026-01-09 17:51:04 +01:00
Christoph Wurst 7e188433a1 fix(session): handle null logger
Signed-off-by: Christoph Wurst <1374172+ChristophWurst@users.noreply.github.com>
2026-01-09 16:42:39 +01:00
Benjamin Gaussorgues acb3e68a93 Merge pull request #56725 from nextcloud/rakekniven-patch-3 2026-01-09 14:38:37 +01:00
nextcloud-command fbb551311e chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-09 09:24:00 +00:00
Carl Schwan 81a21fb718 refactor(entity): Don't type id
Some apps overwrite this and this breaks them.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-09 10:19:34 +01:00
rakekniven c2ae99a668 chore(i18n): Remove strings from i18n and adapted casing
Reported at Transifex

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-09 10:13:22 +01:00
Worker Builder 8265e4b489 build(hub): 33.0.0 beta 3
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-09 08:53:57 +00:00
ernolf 932523e844 style(tests): apply cs-fixer formatting to ClientTest
Signed-off-by: ernolf <raphael.gradenwitz@googlemail.com>
2026-01-09 01:29:59 +01:00
Nextcloud bot 6fd76bfa0e fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-09 00:14:00 +00:00
Raphael Gradenwitz 510c203dfe Merge branch 'master' into ernolf/enh/http2-brotli-client
Signed-off-by: Raphael Gradenwitz <39901936+ernolf@users.noreply.github.com>
2026-01-08 21:02:07 +01:00
Benjamin Gaussorgues 0514ecfb96 Merge pull request #57398 from nextcloud/release/33.0.0_beta_2 2026-01-08 17:06:21 +01:00
Benjamin Gaussorgues 91a544ef45 Merge pull request #53414 from nextcloud/fix/49584-background-worker-remove-interval 2026-01-08 15:57:05 +01:00
Louis a0c922cc7f Merge pull request #56404 from nextcloud/share-sidebar-hide-external
feat: hide "External Shares" section if no external shares can be created
2026-01-08 14:32:11 +01:00
Côme Chilliet 2da078f258 Merge pull request #55861 from nextcloud/feat/allow-decrypt-all-with-encryption-disabled
feat(encryption): Support running decrypt-all when encryption is already disabled
2026-01-08 14:19:06 +01:00
Benjamin Gaussorgues 36b0d7c189 Merge pull request #55265 from nextcloud/perf/log-slow-dns 2026-01-08 14:06:31 +01:00
Benjamin Gaussorgues fe34ea5ec7 Merge pull request #57407 from nextcloud/carl/fix-php-85-deprecation-image 2026-01-08 13:57:11 +01:00
Benjamin Gaussorgues ae250777fd Merge pull request #56899 from nextcloud/feat/noid/ocm-capabilities 2026-01-08 13:46:09 +01:00
Benjamin Gaussorgues 17aa77e29f Merge pull request #57427 from nextcloud/fix/openmetrics_classes 2026-01-08 13:45:55 +01:00
Salvatore Martire 43f2470f90 fix: use interval value in JobWorker
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2026-01-08 13:45:11 +01:00
Joas Schilling d5eab95414 Merge pull request #57428 from nextcloud/dependabot/composer/aws/aws-sdk-php-3.369.3
build(deps): bump aws/aws-sdk-php from 3.349.3 to 3.369.9
2026-01-08 13:40:04 +01:00
nextcloud-command 7e4c4f2f3c chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-08 11:54:41 +00:00
Robin Appelman de286709f8 feat: hide "External Shares" section if no external shares can be created
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-08 11:49:02 +00:00
Andy Scherzinger d86975e9fa Merge pull request #56923 from nextcloud/fix/update-all
fix(settings): update all button only updates a single app
2026-01-08 12:48:34 +01:00
Joas Schilling 03adb7e184 build(deps): bump aws/aws-sdk-php from 3.349.3 to 3.369.9
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-08 11:52:50 +01:00
Kate 8eb24155c4 Merge pull request #56518 from nextcloud/jtr/feat-appmanager-cleanappid-log 2026-01-08 11:42:04 +01:00
Git'Fellow 377de23bf5 Merge pull request #57291 from nextcloud/fixTypoAdminAuditLog
fix(admin_audit) Fix typo in visibility log message
2026-01-08 11:41:45 +01:00
Louis 73dd45be4f Merge pull request #57289 from nextcloud/feature/54562/drop-mounts-on-full-or-provider-setup
Feature/54562/drop mounts on full or provider setup
2026-01-08 11:26:50 +01:00
Christoph Wurst adf7ea5f0b perf: log slow DNS operations
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2026-01-08 11:22:15 +01:00
Christoph Wurst cc89a2a2b8 refactor: extract slow operation logging into trait
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2026-01-08 11:22:15 +01:00
Benjamin Gaussorgues 5403284b23 Merge pull request #55293 from nextcloud/jtr/refactor-dav-quotaplugin 2026-01-08 11:18:02 +01:00
Benjamin Gaussorgues f56f747f46 Merge pull request #57245 from nextcloud/jtr/refactor-versions-DAV-plugin 2026-01-08 11:12:50 +01:00
Benjamin Gaussorgues 7a2606b894 Merge pull request #57267 from nextcloud/jtr/refactor-trashbin-sabre-plugin 2026-01-08 11:11:37 +01:00
Joas Schilling eb91d8671d Merge pull request #57348 from nextcloud/fix/adjust-public-page-footer-logic
fix: adjust public page footer logic
2026-01-08 11:10:07 +01:00
Benjamin Gaussorgues 1a5ad32063 fix(openmetrics): import right classes
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-08 10:39:46 +01:00
Benjamin Gaussorgues a1fbd55992 Merge pull request #57395 from nextcloud/feat/exapp-task-proc-endpoints 2026-01-08 09:52:50 +01:00
Benjamin Gaussorgues a6a320498b Merge pull request #55252 from nextcloud/chore/chunked_orphan_delete 2026-01-08 09:50:09 +01:00
Anupam Kumar 3e4e544096 feat(TaskProcessing): add endpoints for ExApp access without userId
Signed-off-by: Anupam Kumar <kyteinsky@gmail.com>
2026-01-08 11:36:08 +05:30
Nextcloud bot 1a7f2f878e fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-08 00:13:49 +00:00
nextcloud-command f6a783e07b chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-07 19:21:14 +00:00
Thomas Lamant 7436340f4c fix: update() function does not return a Promise
Signed-off-by: Thomas Lamant <tom@tmlmt.com>
2026-01-07 19:18:29 +00:00
Thomas Lamant 58c6a8387b fix: update all button only updates a single app
Signed-off-by: Thomas Lamant <tom@tmlmt.com>
2026-01-07 19:18:29 +00:00
Maxence Lange 6af64a5495 feat(ocm): event on ocm discovery and ocm request
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2026-01-07 17:54:26 -01:00
Joas Schilling 66c8f9c4dc Merge pull request #57414 from nextcloud/bugfix/noid/clean-language
fix(l10n): Fix language selection
2026-01-07 19:05:41 +01:00
Joas Schilling 52cfd57af9 Merge pull request #57413 from nextcloud/bugfix/noid/support-native-int-range
fix(controller): Support native int ranges
2026-01-07 19:05:19 +01:00
Ferdinand Thiessen 6a75cd9454 Merge pull request #57347 from nextcloud/refactor/drop-deprecated-composable
refactor(files): migrate from deprecated `useNavigation` to `activeStore`
2026-01-07 18:06:41 +01:00
Daniel Calviño Sánchez 8e5ae53e02 Merge pull request #56938 from nextcloud/unify-handling-of-exclude-groups-in-contacts-menu-and-sharing
fix: Unify handling of exclude groups in contacts menu and sharing
2026-01-07 18:04:53 +01:00
Joas Schilling ab122ac15d fix(l10n): Fix language selection
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 17:41:18 +01:00
Joas Schilling f2e2e4ea21 fix(controller): Support native int ranges
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 17:36:57 +01:00
Robin Appelman 534632334c feat: add event for apps that a users share access might have changed
Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-07 17:18:16 +01:00
Joas Schilling 15b45975e2 Merge pull request #57410 from nextcloud/bugfix/noid/fix-generate-id
fix(snowflake): Fix generateId() call for SnowflakeEntity
2026-01-07 17:17:33 +01:00
Salvatore Martire 2d22c4f654 fix: update information cached by mount point on rename
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2026-01-07 17:00:09 +01:00
Salvatore Martire 07eef5eaf4 fix: drop set up partial mounts on setupForUser
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2026-01-07 17:00:09 +01:00
nextcloud-command 09e0f06678 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-07 16:50:42 +01:00
Ferdinand Thiessen 47acb66b9c refactor(files): migrate from deprecated useNavigation to activeStore
Small preparation for upcoming Vue 3 migration of the files app.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-07 16:50:42 +01:00
SebastianKrupinski 6b3d3fd2d3 fix: adjust public page footer logic
Signed-off-by: SebastianKrupinski <krupinskis05@gmail.com>
2026-01-07 10:16:35 -05:00
Joas Schilling f42493bf1e Merge pull request #57409 from nextcloud/fix/ci-psalm
ci(static-code-analysis): add missing permissions to upload sarif file
2026-01-07 16:03:58 +01:00
Joas Schilling fe393c5dbf fix(snowflake): Fix generateId() call for SnowflakeEntity
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 15:39:09 +01:00
Carl Schwan bd815595d4 fix: Remove NOP ReflectionProperty::setAccessible calls
Doesn't do anything since PHP 8.1 and is deprecated since PHP 8.5
2026-01-07 15:23:20 +01:00
Ferdinand Thiessen 86c90221f1 ci(static-code-analysis): add missing permissions to upload sarif file
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-07 15:21:48 +01:00
Maxence Lange 0cdd19271d Merge pull request #56047 from nextcloud/feat/ocm/handle-new-ocm-endpoint
feat(ocm): handle /.well-known/ocm
2026-01-07 13:17:06 -01:00
Carl Schwan 513b37916f fix(image): Remove NOP imagedestroy call
This is NOP since 8.0 and deprecated since 8.5

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-07 15:13:07 +01:00
Joas Schilling 9e516beb85 Merge pull request #57403 from nextcloud/followup/noid/snowflake-entity
fix(snowflake): Allow SnowflakeAware to overwrite the field types
2026-01-07 15:10:09 +01:00
Joas Schilling 6b6deefee9 Merge pull request #57373 from nextcloud/carl/fix-deprecated-alias
fix: Usage of a deprecated alias
2026-01-07 14:35:32 +01:00
Joas Schilling 8d55b13641 Merge pull request #57367 from nextcloud/work/carl/psalm-unittests
refactor(psalm): Enable psalm for comments unit tests
2026-01-07 14:16:14 +01:00
Joas Schilling 2bd2cc71e5 fix(snowflake): Allow SnowflakeAware to overwrite the field types
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 14:06:18 +01:00
Joas Schilling 40b79f5af8 Merge pull request #56795 from nextcloud/feat/noid/extend-entity-to-be-snoflake-aware
feat(snowflake): extend Entity class to support snowflakes
2026-01-07 13:42:49 +01:00
Carl Schwan 6eb1609b35 fix(psalm): Fix InvalidArgument in FilesByType OpenMetrics exporter
Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-07 13:22:39 +01:00
Carl Schwan 58de51160c fix(psalm): Fix return type of TokenService::getTokens
Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-07 13:21:34 +01:00
Carl Schwan a430702caa refactor(psalm): Enable psalm for comments unit tests
This is the first step to enable psalm for our test suite to find issues
also there.

At the moment, this already found some completely broken and unused
method in TestCase and prepare the way for making ICommentsManager work
with snowflake ids by using string instead of int for the ids
consistently.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-07 13:21:33 +01:00
Benjamin Gaussorgues 351351a832 Merge pull request #57371 from nextcloud/enh/noid/change-config-to-amr 2026-01-07 12:04:36 +01:00
Worker Builder 944341543e build(hub): 33.0.0 beta 2
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-07 10:53:53 +00:00
Joas Schilling e5c989066f Merge pull request #57394 from nextcloud/bugfix/noid/theming-links
fix(settings): Allow clearing legal and privacy links
2026-01-07 11:06:33 +01:00
Benjamin Gaussorgues 62513dfd92 Merge pull request #57165 from nextcloud/feat/openmetrics 2026-01-07 10:43:56 +01:00
Joas Schilling 649e042568 fix(settings): Fix reset button for legal and privacy
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 09:45:48 +01:00
Benjamin Gaussorgues 71fa5937b2 feat(openapi): add OpenMetrics controller into OpenAPI
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-07 09:38:13 +01:00
Benjamin Gaussorgues 6ee8325b3e feat(files_sharing): add basic OpenMetrics exporter for files shares
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-07 09:38:13 +01:00
Benjamin Gaussorgues 47de164946 feat(comments): add basic OpenMetrics exporter
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-07 09:38:13 +01:00
Benjamin Gaussorgues c57c4843e8 feat(openmetrics): introduce OpenMetrics exporter
Expose a `/metrics` endpoint with some basic metrics

Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2026-01-07 09:38:13 +01:00
Joas Schilling 7c64394617 fix(settings): Allow clearing legal and privacy links
Signed-off-by: Joas Schilling <coding@schilljs.com>
2026-01-07 09:29:34 +01:00
Nextcloud bot c09168e911 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-07 00:13:32 +00:00
Benjamin Gaussorgues 9f7d4d055e Merge pull request #57361 from nextcloud/release/33.0.0_beta_1 2026-01-06 16:56:21 +01:00
Joas Schilling c3be0b8814 Merge pull request #57380 from nextcloud/automated/noid/master-update-code-signing-crl
[master] fix(security): Update code signing revocation list
2026-01-06 16:54:55 +01:00
nextcloud-command 1432c97584 fix(security): Update code signing revocation list
Signed-off-by: GitHub <noreply@github.com>
2026-01-06 15:38:16 +00:00
Simon L. 178fb77be8 feat(Config.php): change array_merge to array_replace_recursive when merging configs
Signed-off-by: Simon L. <szaimen@e.mail.de>
2026-01-06 16:03:38 +01:00
Benjamin Gaussorgues 86fe44d9f4 Merge pull request #56627 from nextcloud/fix/54953/value-is-already-team-id 2026-01-06 16:00:53 +01:00
Tobias Kaminsky fdfaf6b363 Merge pull request #57372 from nextcloud/feat/adapt-webhook
Feat(webhook_listeners): adapt webhook payload format
2026-01-06 15:55:27 +01:00
Tobias Kaminsky ad13a8acc7 Merge pull request #57235 from nextcloud/enh/noid/testing-ocr-provider
Add fake OCR taskprocessing provider in the testing app
2026-01-06 15:52:10 +01:00
Carl Schwan 693a2263cc fix(entity): Do not call getId when inserting and $id is null
Otherwise this breaks some existing code, in particular PublicKeyToken

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-06 15:42:03 +01:00
Jana Peper 65d44b0007 docs: adapt docblock
Signed-off-by: Jana Peper <jana.peper@nextcloud.com>
2026-01-06 15:24:40 +01:00
Jana Peper ec9cac90e0 feat: adapt webhook payload format
Signed-off-by: Jana Peper <jana.peper@nextcloud.com>
2026-01-06 15:19:22 +01:00
Carl Schwan e63c4afdab fix: Usage of a deprecated alias
The deprecated warning:

The requested alias "UserId" is deprecated. Please request "userId" directly.

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-06 15:04:07 +01:00
Julien Veyssier e1d19b2c24 feat: add fake OCR taskprocessing provider in the testing app
Signed-off-by: Julien Veyssier <julien-nc@posteo.net>
2026-01-06 14:36:51 +01:00
Kate 72ad2edcd7 Merge pull request #57118 from nextcloud/test/delete-orphaned-files/improve-count-mounts 2026-01-06 14:36:05 +01:00
Robin Appelman 72632faaf1 Merge pull request #57284 from nextcloud/allow-cross-share-move-delete
fix: allow moving from of non-resharable to other share if the user has delete permissions
2026-01-06 14:23:51 +01:00
Côme Chilliet ebab99ec9a Merge pull request #56779 from nextcloud/jtr/needUpgrade-refactor
feat: improve needUpgrade() output and refactor for clarity
2026-01-06 14:04:13 +01:00
Côme Chilliet e6ac79d570 Merge branch 'master' into carl/dashboard-psalm
Signed-off-by: Côme Chilliet <91878298+come-nc@users.noreply.github.com>
2026-01-06 13:07:32 +01:00
Carl Schwan 7c1a8a4060 feat: Adapt a bit the snowflake ids API
- Rename setId() -> generateId() in SnowflakeAwareEntity

Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-06 12:57:17 +01:00
Anna Larch 5f797ebc32 refactor: move existing usages of snoflake IDs SnowflakeAwareEntity
Signed-off-by: Anna Larch <anna@nextcloud.com>
2026-01-06 12:57:17 +01:00
Anna Larch a100ede789 feat: extend Entity and adjust QBMapper to support Snowflake IDs
Signed-off-by: Anna Larch <anna@nextcloud.com>
2026-01-06 12:57:17 +01:00
Anna Larch f546daada7 refactor: Rename Snowflake Generator and Decoder
And introduce the Snowflake DTO

Signed-off-by: Anna Larch <anna@nextcloud.com>
2026-01-06 12:57:04 +01:00
Côme Chilliet c32009fd32 Merge pull request #57145 from nextcloud/carl/psalm-dav
refactor(dav): fix psalm for dav endpoints
2026-01-06 12:47:29 +01:00
Benjamin Gaussorgues 72be2f41b3 Merge pull request #57099 from nextcloud/carl/fix-32-bits-job-tests 2026-01-06 11:59:28 +01:00
Worker Builder 758a9c26db build(hub): 33.0.0 beta 1
Signed-off-by: Worker Builder <worker-builder@nextcloud.com>
2026-01-06 10:34:50 +00:00
Ferdinand Thiessen 0c6565ea44 fix(birthday-service): Fix on 32 bits system
Signed-off-by: Carl Schwan <carlschwan@kde.org>
2026-01-06 10:44:47 +01:00
Carl Schwan 33e5f2d345 fix(background-jobs): Fix unit tests with 32-bits tests
Signed-off-by: Carl Schwan <carl.schwan@nextcloud.com>
2026-01-06 10:44:21 +01:00
Joda Stößer 16d8cc065a fix(NavigationManager): Remove break to return all defaultEntryIds
Otherwise only the first entry id is returned, breaking loading the value for the "Global Default App" option

Signed-off-by: Joda Stößer <git@simjo.st>
2026-01-06 02:41:37 +01:00
Nextcloud bot 0a3cc4dd6f fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-06 00:13:48 +00:00
Ferdinand Thiessen c6b095234e Merge pull request #57236 from nextcloud/refactor/profile-vue3-ts
refactor(profile): migrate to script setup and Vue 3
2026-01-05 22:52:49 +01:00
Ferdinand Thiessen f9d4bb2ba8 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 22:21:43 +01:00
Ferdinand Thiessen ad61aa7a30 refactor(profile): migrate to script setup and Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 22:16:48 +01:00
Ferdinand Thiessen 8cc588fc42 Merge pull request #57341 from nextcloud/refactor/federation-vue3
refactor(federation): migrate app frontend (admin settings) to Vue 3
2026-01-05 20:07:18 +01:00
nextcloud-command 35bfa1d2f0 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-05 17:16:35 +00:00
Ferdinand Thiessen 5d3e1f70b2 refactor(federation): migrate app frontend (admin settings) to Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 18:08:29 +01:00
Robin Appelman 8a05a3e01b Merge pull request #57186 from nextcloud/perbucket-without-multibucket
feat: don't gate perBucket object store configuration behind multibucket
2026-01-05 16:49:16 +01:00
Robin Appelman afa23291d6 feat: don't gate perBucket object store configuration behind multibucket
a setup can have multiple bucket without having `multibucket` enabled trough things like per-groupfolder buckets

Signed-off-by: Robin Appelman <robin@icewind.nl>
2026-01-05 16:09:25 +01:00
Ferdinand Thiessen c50c5a9e6b Merge pull request #57277 from nextcloud/refactor/files-sidebar-nodeapi
refactor!: migrate files sidebar to Node API
2026-01-05 13:38:26 +01:00
Maxence Lange eb0369705a Merge pull request #56240 from nextcloud/fix/noid/set-adr-book-local-but-not-system
fix(contacts): allow address book to be local but not system
2026-01-05 09:55:42 -01:00
Joas Schilling fe0c56a1d7 Merge pull request #57332 from nextcloud/jtr/chore-drop-10n-xgettextfiles
chore(l10n): drop unused xgettextfiles
2026-01-05 10:00:42 +01:00
Ferdinand Thiessen 98a4b959ec chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:41 +01:00
Ferdinand Thiessen fd96a32dda test: adjust cypress tests
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:30 +01:00
Ferdinand Thiessen 3726596ad0 refactor(systemtags): migrate to new files sidebar API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Ferdinand Thiessen f9a137ea87 refactor(files): migrate favorite sidebar action to new Sidebar API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Ferdinand Thiessen 7077685bf8 refactor(files_sharing): migrate to new Files Sidebar API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Ferdinand Thiessen 34511e9036 refactor(comments): migrate to new Files Sidebar API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Ferdinand Thiessen 493c371a22 refactor(files_versions): adjust frontend for new files sidebar API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Ferdinand Thiessen 4a9cdeb01f refactor!(files): migrate sidebar API to use Node API
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-05 02:23:15 +01:00
Nextcloud bot 7abd46fb53 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-05 00:13:26 +00:00
Ferdinand Thiessen fb18804192 chore(deps): update @nextcloud/files to v4.0.0-beta.8
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2026-01-04 22:30:12 +01:00
github-actions[bot] 513c0cceb6 Merge pull request #57320 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/nextcloud/files-4.0.0-beta.8
build(deps): bump @nextcloud/files from 4.0.0-beta.7 to 4.0.0-beta.8 in /build/frontend-legacy
2026-01-04 08:29:45 +00:00
Josh 867a8d1088 chore(l10n): drop unused xgettextfiles
Signed-off-by: Josh <josh.t.richards@gmail.com>
2026-01-03 20:32:45 -05:00
Nextcloud bot 56658fc3ef fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2026-01-04 00:13:41 +00:00
nextcloud-command dc5d199e3a chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-03 20:41:28 +00:00
dependabot[bot] 41c739d370 build(deps): bump @nextcloud/files in /build/frontend-legacy
Bumps [@nextcloud/files](https://github.com/nextcloud-libraries/nextcloud-files) from 4.0.0-beta.7 to 4.0.0-beta.8.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-files/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-files/compare/v4.0.0-beta.7...v4.0.0-beta.8)

---
updated-dependencies:
- dependency-name: "@nextcloud/files"
  dependency-version: 4.0.0-beta.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-03 21:33:05 +01:00
github-actions[bot] 68149e01cb Merge pull request #57319 from nextcloud/dependabot/npm_and_yarn/nextcloud/files-4.0.0-beta.8
build(deps): bump @nextcloud/files from 4.0.0-beta.7 to 4.0.0-beta.8
2026-01-03 21:32:35 +01:00
nextcloud-command 44216b36e4 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2026-01-03 19:55:53 +00:00
dependabot[bot] 68b8e2662d build(deps): bump @nextcloud/files from 4.0.0-beta.7 to 4.0.0-beta.8
Bumps [@nextcloud/files](https://github.com/nextcloud-libraries/nextcloud-files) from 4.0.0-beta.7 to 4.0.0-beta.8.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-files/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-files/compare/v4.0.0-beta.7...v4.0.0-beta.8)

---
updated-dependencies:
- dependency-name: "@nextcloud/files"
  dependency-version: 4.0.0-beta.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-03 20:47:39 +01:00
Josh 24ec0e85e5 feat(AppManager): log when cleanAppId drops invalid chars
Log a debug message if invalid characters are replaced in app IDs.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-31 14:30:05 -05:00
Git'Fellow eafbb5a23c fix(admin_audit): Fix typo in visibility log message
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2025-12-30 10:09:08 +01:00
Robin Appelman 8cfb49012d test: update cross-share move tests
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-12-29 17:39:44 +01:00
Robin Appelman 39c8141f0c fix: allow moving from of non-resharable to other share if the user has delete permissions
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-12-29 17:39:43 +01:00
Josh 5c51b42d3f test(trashbin): Update DAV quotaProvider test cases
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-27 00:40:55 -05:00
Josh 80caedb050 chore: php-cs fixup
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-27 00:30:19 -05:00
Josh 853db93601 chore: typo fixup
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-27 00:26:11 -05:00
Josh 355d6637ff refactor(trashbin): restyle DAV handlers, enhance internal docs, refactor for clarity & robustness
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-27 00:07:19 -05:00
Josh 183136d166 chore: Fix comments and formatting in Plugin.php
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-26 19:07:13 -05:00
Josh b872208285 refactor(files_versions): tidy up UA download header logic and modernize class structure
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-26 18:56:56 -05:00
yemkareems 9ed9a317f5 fix: added Test\TestCase namespace for failing tests
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 12:01:13 +05:30
yemkareems 674381e8c1 fix: php cs fix run
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 11:23:19 +05:30
yemkareems bbbbc4de22 fix: offsets corrected, test added to have exact count when time is frozen and variable count when time is dynamic
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-12-24 11:16:43 +05:30
Maxence Lange b28176458d fix(contacts): not contact, not local
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2025-12-22 12:36:33 -01:00
Robin Appelman 69249a3ce3 feat: also send x-user-id for dav responses
Signed-off-by: Robin Appelman <robin@icewind.nl>
2025-12-19 18:20:01 +01:00
Carl Schwan 3555e00754 refactor(dav): fix psalm for dav endpoints
Signed-off-by: Carl Schwan <carl.schwan@nextcloud.com>
2025-12-17 15:09:48 +01:00
Carl Schwan 6111ecefbc refactor(dashboard): Fix all psalm issues
Signed-off-by: Carl Schwan <carl.schwan@nextcloud.com>
2025-12-17 14:58:47 +01:00
Côme Chilliet c11cc64470 chore: update psalm baseline
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2025-12-16 11:09:46 +01:00
Côme Chilliet a6184661bd feat(encryption): Support running decrypt-all when encryption is already disabled
This was an arbitrary limitation since the first thing the command does
 is disabling encryption anyway, it makes little sence to force the admin
 to enable encryption first.

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2025-12-16 11:09:46 +01:00
Maxence Lange 981e987bd0 fix(team-manager): team is already teamid
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2025-12-16 08:56:46 -01:00
provokateurin f9157c85c2 test(DeleteOrphanedFilesTest): Improve counting mounts
Signed-off-by: provokateurin <kate@provokateurin.de>
2025-12-16 09:11:27 +01:00
Daniel Calviño Sánchez fbe2023d39 fix: Unify handling of exclude groups in contacts menu and sharing
If the current user belongs to both one or more groups excluded from
sharing and one or more groups not excluded from sharing the user is
allowed to share. However, in the contacts menu, as soon as the current
user belonged to a group excluded from sharing the user could not search
for local contacts. This has been unified now with the sharing
behaviour, so local contacts can still be searched if the user also
belongs to a group not excluded from sharing (or to no group at all,
which was also allowed before).

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-09 19:16:59 +01:00
Daniel Calviño Sánchez d59d8db1d6 test: Add unit test for excluded groups in contacts menu
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-09 19:16:59 +01:00
Daniel Calviño Sánchez 694651de3a test: Adjust unit test name to better reflect its behaviour
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-09 19:16:59 +01:00
Daniel Calviño Sánchez 70ed393b34 test: Add integration tests for excluded groups in contacts and sharees
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
2025-12-09 19:16:59 +01:00
Josh 3de06a2b33 chore: lint happiness
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-01 12:26:03 -05:00
Josh d3432482cc feat: improve needUpgrade() output and refactor for clarity
- Reorganized logic to improve clarity + eliminate duplication
- Switched app handling to non-deprecated IAppManager API
- Make the HintException clearer and more actionable
- Log disallowed downgrade attempts before throwing

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-12-01 12:10:52 -05:00
Maxence Lange e456f116b8 feat(ocm): handle /well-known/ocm
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2025-11-07 08:55:16 -01:00
ernolf b6ea2bc0f5 refactor(http-client): use direct HTTP/2 cURL hint and align tests
Signed-off-by: ernolf <raphael.gradenwitz@googlemail.com>
2025-10-22 12:17:17 +02:00
ernolf 65aa731ef3 test: add unit test for Accept-Encoding with Brotli support
Signed-off-by: ernolf <raphael.gradenwitz@googlemail.com>
2025-09-30 18:01:38 +02:00
ernolf 812f12ecc4 perf(client): enable HTTP/2 and brotli support in internal HTTP client
- Prefer HTTP/2 by setting RequestOptions::VERSION => "2.0" so clients
  that respect PSR-7 request version will prefer HTTP/2.
- Add a curl hint (CURLOPT_HTTP_VERSION) to prefer HTTP/2 via ALPN
  (CURL_HTTP_VERSION_2TLS or CURL_HTTP_VERSION_2_0 fallback) while allowing
  automatic fallback to HTTP/1.1.
- Advertise Brotli ("br") in Accept-Encoding when the php-brotli extension
  is available (detected via function_exists('brotli_uncompress')), otherwise
  fall back to gzip.

Notes:
- The PSR-7 request version is used as a hint for HTTP client libraries;
  setting the version to "2.0" signals a preference for HTTP/2 at the request
  abstraction level.
- The curl option is defensive: it prefers HTTP/2 where libcurl supports it
  (via ALPN), but will not break on older libcurl/builds (uses defined()).

Compatibility:
- Fully backwards compatible: if the php-brotli extension is not present,
  no Brotli usage will occur and behaviour remains equivalent to previous
  (gzip).

Signed-off-by: ernolf <raphael.gradenwitz@googlemail.com>
2025-09-30 17:01:07 +02:00
yemkareems 2ba3766bef Merge branch 'master' into fix/unit-test-for-storage-auto-expire-list 2025-09-30 17:58:16 +05:30
yemkareems fbd99cef8f fix: since removed and copy right text changed
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-09-29 17:03:05 +05:30
Josh a9b17a1a16 chore: Add OCP\Util import
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-26 13:42:47 -04:00
Josh 5f5bb77bf3 fix: Update QuotaPlugin to handle 32-bit numeric lengths correctly
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-26 13:40:59 -04:00
Josh fbe5238d7f fix: review input
Co-authored-by: Carl Schwan <carl@carlschwan.eu>
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-26 13:17:47 -04:00
Josh cc96a16df5 fix: Apply suggestions from code review
Co-authored-by: Carl Schwan <carl@carlschwan.eu>
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-26 13:11:51 -04:00
Josh 04f30cad62 chore: drop buildFileViewMock cast and give it a docblock
Updated the buildFileViewMock method to accept int, float, or false as quota type.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-24 20:53:57 -04:00
Josh 23546013e1 fix(dav): test hint time in buildFileViewMock method wrong
Doesn't match current interface.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-24 20:46:39 -04:00
Josh 45eb87ba6e chore: Change methods back to public for tests
Tagged with \@internal instead for now.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-24 18:32:54 -04:00
Josh 01e0ca7298 chore: lint compliance :)
Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-24 18:21:49 -04:00
Josh 3bb5ed502a refactor(dav): Clean up QuotaPlugin and add new hints
Add new hints and improve documentation for the QuotaPlugin. This commit also removes unused code and tidies up some code, which improves readability and simplifies maintenance, without introducing breaking changes.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-09-24 18:13:48 -04:00
Benjamin Gaussorgues 13bfd8b292 chore: add chunked queries on occ sharing:delete-orphan-shares
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-09-22 11:12:06 +02:00
yemkareems 4914b4aff3 fix: added test to assert auto expire list preserve's version as per max_versions_per_interval
Signed-off-by: yemkareems <yemkareems@gmail.com>
2025-08-28 17:09:55 +05:30
2277 changed files with 38189 additions and 26954 deletions
+7 -1
View File
@@ -53,7 +53,13 @@ jobs:
services:
samba:
image: ghcr.io/nextcloud/continuous-integration-samba:latest # zizmor: ignore[unpinned-images]
image: ghcr.io/servercontainers/samba:smbd-only-a3.18.0-s4.18.2-r0
env:
ACCOUNT_test: test
UID_test: 1000
SAMBA_VOLUME_CONFIG_test: "[public]; path=/tmp; valid users = test; guest ok = no; read only = no; browseable = yes"
options: >-
--health-cmd=true
ports:
- 445:445
@@ -15,6 +15,7 @@ on:
permissions:
contents: read
security-events: write
concurrency:
group: static-code-analysis-${{ github.head_ref || github.run_id }}
+29
View File
@@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: AGPL-3.0-only
# Files removed at build time
# Global exclude
.editorconfig
.git
.git-blame-ignore-revs
.gitattributes
.github
.gitignore
.gitmodules
.idea
.l10nignore
.nextcloudignore
.noopenapi
.tx
cypress
tests
# Server specific
/.devcontainer
/__mocks__
/__tests__
/autotest*.sh
/build
/config/config.php
/contribute
/data
@@ -18,7 +18,7 @@ class TagManagement extends Action {
$this->log('System tag "%s" (%s, %s) created',
[
'name' => $tag->getName(),
'visbility' => $tag->isUserVisible() ? 'visible' : 'invisible',
'visibility' => $tag->isUserVisible() ? 'visible' : 'invisible',
'assignable' => $tag->isUserAssignable() ? 'user assignable' : 'system only',
],
['name', 'visibility', 'assignable']
+10 -1
View File
@@ -25,6 +25,15 @@ return [
'url' => '/invite-accepted',
'verb' => 'POST',
'root' => '/ocm',
]
],
// needs to be kept at the bottom of the list
[
'name' => 'OCMRequest#manageOCMRequests',
'url' => '/{ocmPath}',
'requirements' => ['ocmPath' => '.*'],
'verb' => ['GET', 'POST', 'PUT', 'DELETE'],
'root' => '/ocm',
],
],
];
@@ -10,6 +10,7 @@ return array(
'OCA\\CloudFederationAPI\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\CloudFederationAPI\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
'OCA\\CloudFederationAPI\\Config' => $baseDir . '/../lib/Config.php',
'OCA\\CloudFederationAPI\\Controller\\OCMRequestController' => $baseDir . '/../lib/Controller/OCMRequestController.php',
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => $baseDir . '/../lib/Controller/RequestHandlerController.php',
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => $baseDir . '/../lib/Db/FederatedInvite.php',
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => $baseDir . '/../lib/Db/FederatedInviteMapper.php',
@@ -25,6 +25,7 @@ class ComposerStaticInitCloudFederationAPI
'OCA\\CloudFederationAPI\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\CloudFederationAPI\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
'OCA\\CloudFederationAPI\\Config' => __DIR__ . '/..' . '/../lib/Config.php',
'OCA\\CloudFederationAPI\\Controller\\OCMRequestController' => __DIR__ . '/..' . '/../lib/Controller/OCMRequestController.php',
'OCA\\CloudFederationAPI\\Controller\\RequestHandlerController' => __DIR__ . '/..' . '/../lib/Controller/RequestHandlerController.php',
'OCA\\CloudFederationAPI\\Db\\FederatedInvite' => __DIR__ . '/..' . '/../lib/Db/FederatedInvite.php',
'OCA\\CloudFederationAPI\\Db\\FederatedInviteMapper' => __DIR__ . '/..' . '/../lib/Db/FederatedInviteMapper.php',
@@ -0,0 +1,87 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\CloudFederationAPI\Controller;
use JsonException;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\Attribute\BruteForceProtection;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\PublicPage;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\Response;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IRequest;
use OCP\OCM\Events\OCMEndpointRequestEvent;
use OCP\OCM\Exceptions\OCMArgumentException;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\Exceptions\IncomingRequestException;
use Psr\Log\LoggerInterface;
class OCMRequestController extends Controller {
public function __construct(
string $appName,
IRequest $request,
private readonly IEventDispatcher $eventDispatcher,
private readonly IOCMDiscoveryService $ocmDiscoveryService,
private readonly LoggerInterface $logger,
) {
parent::__construct($appName, $request);
}
/**
* Method will catch any request done to /ocm/[...] and will broadcast an event.
* The first parameter of the remaining subpath (post-/ocm/) is defined as
* capability and should be used by listeners to filter incoming requests.
*
* @see OCMEndpointRequestEvent
* @see OCMEndpointRequestEvent::getArgs
*
* @param string $ocmPath
* @return Response
* @throws OCMArgumentException
*/
#[NoCSRFRequired]
#[PublicPage]
#[BruteForceProtection(action: 'receiveOcmRequest')]
public function manageOCMRequests(string $ocmPath): Response {
if (!mb_check_encoding($ocmPath, 'UTF-8')) {
throw new OCMArgumentException('path is not UTF-8');
}
try {
// if request is signed and well signed, no exceptions are thrown
// if request is not signed and host is known for not supporting signed request, no exceptions are thrown
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
} catch (IncomingRequestException $e) {
$this->logger->warning('incoming ocm request exception', ['exception' => $e]);
return new JSONResponse(['message' => $e->getMessage(), 'validationErrors' => []], Http::STATUS_BAD_REQUEST);
}
// assuming that ocm request contains a json array
$payload = $signedRequest?->getBody() ?? file_get_contents('php://input');
try {
$payload = ($payload) ? json_decode($payload, true, 512, JSON_THROW_ON_ERROR) : null;
} catch (JsonException $e) {
$this->logger->debug('json decode error', ['exception' => $e]);
$payload = null;
}
$event = new OCMEndpointRequestEvent(
$this->request->getMethod(),
preg_replace('@/+@', '/', $ocmPath),
$payload,
$signedRequest?->getOrigin()
);
$this->eventDispatcher->dispatchTyped($event);
return $event->getResponse() ?? new Response(Http::STATUS_NOT_FOUND);
}
}
@@ -7,14 +7,6 @@
namespace OCA\CloudFederationAPI\Controller;
use NCU\Federation\ISignedCloudFederationProvider;
use NCU\Security\Signature\Exceptions\IdentityNotFoundException;
use NCU\Security\Signature\Exceptions\IncomingRequestException;
use NCU\Security\Signature\Exceptions\SignatoryNotFoundException;
use NCU\Security\Signature\Exceptions\SignatureException;
use NCU\Security\Signature\Exceptions\SignatureNotFoundException;
use NCU\Security\Signature\IIncomingSignedRequest;
use NCU\Security\Signature\ISignatureManager;
use OC\OCM\OCMSignatoryManager;
use OCA\CloudFederationAPI\Config;
use OCA\CloudFederationAPI\Db\FederatedInviteMapper;
@@ -39,11 +31,18 @@ use OCP\Federation\Exceptions\ProviderDoesNotExistsException;
use OCP\Federation\ICloudFederationFactory;
use OCP\Federation\ICloudFederationProviderManager;
use OCP\Federation\ICloudIdManager;
use OCP\Federation\ISignedCloudFederationProvider;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserManager;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\Exceptions\IdentityNotFoundException;
use OCP\Security\Signature\Exceptions\IncomingRequestException;
use OCP\Security\Signature\Exceptions\SignatoryNotFoundException;
use OCP\Security\Signature\IIncomingSignedRequest;
use OCP\Security\Signature\ISignatureManager;
use OCP\Share\Exceptions\ShareNotFound;
use OCP\Util;
use Psr\Log\LoggerInterface;
@@ -74,8 +73,8 @@ class RequestHandlerController extends Controller {
private readonly IAppConfig $appConfig,
private ICloudFederationFactory $factory,
private ICloudIdManager $cloudIdManager,
private readonly IOCMDiscoveryService $ocmDiscoveryService,
private readonly ISignatureManager $signatureManager,
private readonly OCMSignatoryManager $signatoryManager,
private ITimeFactory $timeFactory,
) {
parent::__construct($appName, $request);
@@ -108,9 +107,9 @@ class RequestHandlerController extends Controller {
public function addShare($shareWith, $name, $description, $providerId, $owner, $ownerDisplayName, $sharedBy, $sharedByDisplayName, $protocol, $shareType, $resourceType) {
if (!$this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_DISABLED, lazy: true)) {
try {
// if request is signed and well signed, no exception are thrown
// if request is signed and well signed, no exceptions are thrown
// if request is not signed and host is known for not supporting signed request, no exception are thrown
$signedRequest = $this->getSignedRequest();
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
$this->confirmSignedOrigin($signedRequest, 'owner', $owner);
} catch (IncomingRequestException $e) {
$this->logger->warning('incoming request exception', ['exception' => $e]);
@@ -360,7 +359,7 @@ class RequestHandlerController extends Controller {
try {
// if request is signed and well signed, no exception are thrown
// if request is not signed and host is known for not supporting signed request, no exception are thrown
$signedRequest = $this->getSignedRequest();
$signedRequest = $this->ocmDiscoveryService->getIncomingSignedRequest();
$this->confirmNotificationIdentity($signedRequest, $resourceType, $notification);
} catch (IncomingRequestException $e) {
$this->logger->warning('incoming request exception', ['exception' => $e]);
@@ -434,37 +433,6 @@ class RequestHandlerController extends Controller {
}
/**
* returns signed request if available.
* throw an exception:
* - if request is signed, but wrongly signed
* - if request is not signed but instance is configured to only accept signed ocm request
*
* @return IIncomingSignedRequest|null null if remote does not (and never did) support signed request
* @throws IncomingRequestException
*/
private function getSignedRequest(): ?IIncomingSignedRequest {
try {
$signedRequest = $this->signatureManager->getIncomingSignedRequest($this->signatoryManager);
$this->logger->debug('signed request available', ['signedRequest' => $signedRequest]);
return $signedRequest;
} catch (SignatureNotFoundException|SignatoryNotFoundException $e) {
$this->logger->debug('remote does not support signed request', ['exception' => $e]);
// remote does not support signed request.
// currently we still accept unsigned request until lazy appconfig
// core.enforce_signed_ocm_request is set to true (default: false)
if ($this->appConfig->getValueBool('core', OCMSignatoryManager::APPCONFIG_SIGN_ENFORCED, lazy: true)) {
$this->logger->notice('ignored unsigned request', ['exception' => $e]);
throw new IncomingRequestException('Unsigned request');
}
} catch (SignatureException $e) {
$this->logger->warning('wrongly signed request', ['exception' => $e]);
throw new IncomingRequestException('Invalid signature');
}
return null;
}
/**
* confirm that the value related to $key entry from the payload is in format userid@hostname
* and compare hostname with the origin of the signed request.
@@ -9,8 +9,6 @@ declare(strict_types=1);
namespace OCA\CloudFederationApi\Tests;
use NCU\Security\Signature\ISignatureManager;
use OC\OCM\OCMSignatoryManager;
use OCA\CloudFederationAPI\Config;
use OCA\CloudFederationAPI\Controller\RequestHandlerController;
use OCA\CloudFederationAPI\Db\FederatedInvite;
@@ -29,6 +27,8 @@ use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\OCM\IOCMDiscoveryService;
use OCP\Security\Signature\ISignatureManager;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
use Test\TestCase;
@@ -45,10 +45,11 @@ class RequestHandlerControllerTest extends TestCase {
private FederatedInviteMapper&MockObject $federatedInviteMapper;
private AddressHandler&MockObject $addressHandler;
private IAppConfig&MockObject $appConfig;
private ICloudFederationFactory&MockObject $cloudFederationFactory;
private ICloudIdManager&MockObject $cloudIdManager;
private IOCMDiscoveryService&MockObject $discoveryService;
private ISignatureManager&MockObject $signatureManager;
private OCMSignatoryManager&MockObject $signatoryManager;
private ITimeFactory&MockObject $timeFactory;
private RequestHandlerController $requestHandlerController;
@@ -69,8 +70,8 @@ class RequestHandlerControllerTest extends TestCase {
$this->appConfig = $this->createMock(IAppConfig::class);
$this->cloudFederationFactory = $this->createMock(ICloudFederationFactory::class);
$this->cloudIdManager = $this->createMock(ICloudIdManager::class);
$this->discoveryService = $this->createMock(IOCMDiscoveryService::class);
$this->signatureManager = $this->createMock(ISignatureManager::class);
$this->signatoryManager = $this->createMock(OCMSignatoryManager::class);
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->requestHandlerController = new RequestHandlerController(
@@ -88,8 +89,8 @@ class RequestHandlerControllerTest extends TestCase {
$this->appConfig,
$this->cloudFederationFactory,
$this->cloudIdManager,
$this->discoveryService,
$this->signatureManager,
$this->signatoryManager,
$this->timeFactory,
);
}
+4
View File
@@ -38,6 +38,10 @@
</providers>
</activity>
<openmetrics>
<exporter>OCA\Comments\OpenMetrics\CommentsCountMetric</exporter>
</openmetrics>
<collaboration>
<plugins>
<plugin type="autocomplete-sort">OCA\Comments\Collaboration\CommentersSorter</plugin>
@@ -22,5 +22,6 @@ return array(
'OCA\\Comments\\MaxAutoCompleteResultsInitialState' => $baseDir . '/../lib/MaxAutoCompleteResultsInitialState.php',
'OCA\\Comments\\Notification\\Listener' => $baseDir . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => $baseDir . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\OpenMetrics\\CommentsCountMetric' => $baseDir . '/../lib/OpenMetrics/CommentsCountMetric.php',
'OCA\\Comments\\Search\\CommentsSearchProvider' => $baseDir . '/../lib/Search/CommentsSearchProvider.php',
);
@@ -37,6 +37,7 @@ class ComposerStaticInitComments
'OCA\\Comments\\MaxAutoCompleteResultsInitialState' => __DIR__ . '/..' . '/../lib/MaxAutoCompleteResultsInitialState.php',
'OCA\\Comments\\Notification\\Listener' => __DIR__ . '/..' . '/../lib/Notification/Listener.php',
'OCA\\Comments\\Notification\\Notifier' => __DIR__ . '/..' . '/../lib/Notification/Notifier.php',
'OCA\\Comments\\OpenMetrics\\CommentsCountMetric' => __DIR__ . '/..' . '/../lib/OpenMetrics/CommentsCountMetric.php',
'OCA\\Comments\\Search\\CommentsSearchProvider' => __DIR__ . '/..' . '/../lib/Search/CommentsSearchProvider.php',
);
+1
View File
@@ -17,6 +17,7 @@ OC.L10N.register(
"Delete comment" : "Ezabatu iruzkina",
"Cancel edit" : "Utzi editatzeari",
"New comment" : "Iruzkin berria",
"Write a comment …" : "Idatzi iruzkin bat …",
"Post comment" : "Argitaratu iruzkina",
"@ for mentions, : for emoji, / for smart picker" : "@ aipamenetarako, : emojientzako, / hautatzaile adimentsurako",
"Could not reload comments" : "Ezin izan dira iruzkinak freskatu",
+1
View File
@@ -15,6 +15,7 @@
"Delete comment" : "Ezabatu iruzkina",
"Cancel edit" : "Utzi editatzeari",
"New comment" : "Iruzkin berria",
"Write a comment …" : "Idatzi iruzkin bat …",
"Post comment" : "Argitaratu iruzkina",
"@ for mentions, : for emoji, / for smart picker" : "@ aipamenetarako, : emojientzako, / hautatzaile adimentsurako",
"Could not reload comments" : "Ezin izan dira iruzkinak freskatu",
+9 -1
View File
@@ -9,12 +9,19 @@ OC.L10N.register(
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
"{author} commented on {file}" : "{author} berkomentar pada {file}",
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
"Files" : "File",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
"Edit comment" : "Sunting komentar",
"Delete comment" : "Hapus komentar",
"Cancel edit" : "Batal sunting",
"New comment" : "Komentar baru",
"Write a comment …" : "Tulis komentar …",
"Post comment" : "Posting komentar",
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
"No more messages" : "Tidak ada pesan lagi",
@@ -23,6 +30,7 @@ OC.L10N.register(
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
"Comment deleted" : "Komentar dihapus",
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
"Write a comment …" : "Tulis komentar …"
},
"nplurals=1; plural=0;");
+9 -1
View File
@@ -7,12 +7,19 @@
"%1$s commented on %2$s" : "%1$s dikomentari pada %2$s",
"{author} commented on {file}" : "{author} berkomentar pada {file}",
"<strong>Comments</strong> for files" : "<strong>komentar</strong> pada file",
"Files" : "File",
"You were mentioned on \"{file}\", in a comment by an account that has since been deleted" : "Anda disebutkan pada \"{file}\", dalam sebuah komentar oleh akun yang sejak itu telah dihapus",
"{user} mentioned you in a comment on \"{file}\"" : "{user} menyebut Anda dalam sebuah komentar pada \"{file}\" ",
"Files app plugin to add comments to files" : "Plugin aplikasi file untuk menambah komentar pada file",
"Edit comment" : "Sunting komentar",
"Delete comment" : "Hapus komentar",
"Cancel edit" : "Batal sunting",
"New comment" : "Komentar baru",
"Write a comment …" : "Tulis komentar …",
"Post comment" : "Posting komentar",
"@ for mentions, : for emoji, / for smart picker" : "@ untuk penyebutan, : untuk emoji, / untuk pemilih cerdas",
"Could not reload comments" : "Tidak dapat memuat ulang komentar",
"Failed to mark comments as read" : "Gagal menandai komentar sebagai sudah dibaca",
"Unable to load the comments list" : "Tidak dapat memuat daftar komentar",
"No comments yet, start the conversation!" : "Belum ada yang berkomentar, mulailah perbincangan!",
"No more messages" : "Tidak ada pesan lagi",
@@ -21,6 +28,7 @@
"An error occurred while trying to edit the comment" : "Terjadi kesalahan ketika mencoba menyunting komentar",
"Comment deleted" : "Komentar dihapus",
"An error occurred while trying to delete the comment" : "Terjadi kesalahan ketika mencoba untuk menghapus komentar",
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar"
"An error occurred while trying to create the comment" : "Terjadi kesalahan ketika mencoba untuk membuat komentar",
"Write a comment …" : "Tulis komentar …"
},"pluralForm" :"nplurals=1; plural=0;"
}
@@ -0,0 +1,52 @@
<?php
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Comments\OpenMetrics;
use Generator;
use OCP\IDBConnection;
use OCP\OpenMetrics\IMetricFamily;
use OCP\OpenMetrics\Metric;
use OCP\OpenMetrics\MetricType;
use Override;
class CommentsCountMetric implements IMetricFamily {
public function __construct(
private IDBConnection $connection,
) {
}
#[Override]
public function name(): string {
return 'comments';
}
#[Override]
public function type(): MetricType {
return MetricType::gauge;
}
#[Override]
public function unit(): string {
return 'comments';
}
#[Override]
public function help(): string {
return 'Number of comments';
}
#[Override]
public function metrics(): Generator {
$qb = $this->connection->getQueryBuilder();
$result = $qb->select($qb->func()->count())
->from('comments')
->where($qb->expr()->eq('verb', $qb->expr()->literal('comment')))
->executeQuery();
yield new Metric($result->fetchOne(), [], time());
}
}
@@ -180,14 +180,12 @@ describe('Inline unread comments action enabled tests', () => {
describe('Inline unread comments action execute tests', () => {
test('Action opens sidebar', async () => {
const openMock = vi.fn()
const setActiveTabMock = vi.fn()
window.OCA = {
Files: {
// @ts-expect-error Mocking for testing
Sidebar: {
_sidebar: () => ({
open: openMock,
setActiveTab: setActiveTabMock,
},
}),
},
}
@@ -211,22 +209,19 @@ describe('Inline unread comments action execute tests', () => {
})
expect(result).toBe(null)
expect(setActiveTabMock).toBeCalledWith('comments')
expect(openMock).toBeCalledWith('/foobar.txt')
expect(openMock).toBeCalledWith(file, 'comments')
})
test('Action handles sidebar open failure', async () => {
const openMock = vi.fn(() => {
throw new Error('Mock error')
})
const setActiveTabMock = vi.fn()
window.OCA = {
Files: {
// @ts-expect-error Mocking for testing
Sidebar: {
_sidebar: () => ({
open: openMock,
setActiveTab: setActiveTabMock,
},
}),
},
}
vi.spyOn(logger, 'error').mockImplementation(() => vi.fn())
@@ -251,8 +246,7 @@ describe('Inline unread comments action execute tests', () => {
})
expect(result).toBe(false)
expect(setActiveTabMock).toBeCalledWith('comments')
expect(openMock).toBeCalledWith('/foobar.txt')
expect(openMock).toBeCalledWith(file, 'comments')
expect(logger.error).toBeCalledTimes(1)
})
})
@@ -1,9 +1,10 @@
/**
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import CommentProcessingSvg from '@mdi/svg/svg/comment-processing.svg?raw'
import { FileAction } from '@nextcloud/files'
import { FileAction, getSidebar } from '@nextcloud/files'
import { n, t } from '@nextcloud/l10n'
import logger from '../logger.js'
@@ -34,8 +35,8 @@ export const action = new FileAction({
}
try {
window.OCA.Files.Sidebar.setActiveTab('comments')
await window.OCA.Files.Sidebar.open(nodes[0].path)
const sidebar = getSidebar()
sidebar.open(nodes[0], 'comments')
return null
} catch (error) {
logger.error('Error while opening sidebar', { error })
+16 -8
View File
@@ -1,8 +1,10 @@
/**
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import type { INode } from '@nextcloud/files'
import moment from '@nextcloud/moment'
import { createPinia, PiniaVuePlugin } from 'pinia'
import Vue, { type ComponentPublicInstance } from 'vue'
@@ -19,7 +21,7 @@ let ActivityTabPluginInstance
*/
export function registerCommentsPlugins() {
window.OCA.Activity.registerSidebarAction({
mount: async (el, { fileInfo, reload }) => {
mount: async (el: HTMLElement, { node, reload }: { node: INode, reload: () => void }) => {
const pinia = createPinia()
if (!ActivityTabPluginView) {
@@ -32,10 +34,10 @@ export function registerCommentsPlugins() {
pinia,
propsData: {
reloadCallback: reload,
resourceId: fileInfo.id,
resourceId: node.fileid,
},
})
logger.info('Comments plugin mounted in Activity sidebar action', { fileInfo })
logger.info('Comments plugin mounted in Activity sidebar action', { node })
},
unmount: () => {
// destroy previous instance if available
@@ -45,9 +47,15 @@ export function registerCommentsPlugins() {
},
})
window.OCA.Activity.registerSidebarEntries(async ({ fileInfo, limit, offset }) => {
const { data: comments } = await getComments({ resourceType: 'files', resourceId: fileInfo.id }, { limit, offset })
logger.debug('Loaded comments', { fileInfo, comments })
window.OCA.Activity.registerSidebarEntries(async ({ node, limit, offset }: { node: INode, limit?: number, offset?: number }) => {
const { data: comments } = await getComments(
{ resourceType: 'files', resourceId: node.fileid },
{
limit,
offset: offset ?? 0,
},
)
logger.debug('Loaded comments', { node, comments })
const { default: CommentView } = await import('./views/ActivityCommentEntry.vue')
// @ts-expect-error Types are broken for Vue2
const CommentsViewObject = Vue.extend(CommentView)
@@ -62,7 +70,7 @@ export function registerCommentsPlugins() {
el: element,
propsData: {
comment,
resourceId: fileInfo.id,
resourceId: node.fileid,
reloadCallback: reload,
},
})
-59
View File
@@ -1,59 +0,0 @@
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
import { getCSPNonce } from '@nextcloud/auth'
import { loadState } from '@nextcloud/initial-state'
import { registerCommentsPlugins } from './comments-activity-tab.ts'
// @ts-expect-error __webpack_nonce__ is injected by webpack
__webpack_nonce__ = getCSPNonce()
if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {
// Do not mount own tab but mount into activity
window.addEventListener('DOMContentLoaded', function() {
registerCommentsPlugins()
})
} else {
// Init Comments tab component
let TabInstance = null
const commentTab = new OCA.Files.Sidebar.Tab({
id: 'comments',
name: t('comments', 'Comments'),
iconSvg: MessageReplyText,
async mount(el, fileInfo, context) {
if (TabInstance) {
TabInstance.$destroy()
}
TabInstance = new OCA.Comments.View('files', {
// Better integration with vue parent component
parent: context,
propsData: {
resourceId: fileInfo.id,
},
})
// Only mount after we have all the info we need
await TabInstance.update(fileInfo.id)
TabInstance.$mount(el)
},
update(fileInfo) {
TabInstance.update(fileInfo.id)
},
destroy() {
TabInstance.$destroy()
TabInstance = null
},
scrollBottomReached() {
TabInstance.onScrollBottomReached()
},
})
window.addEventListener('DOMContentLoaded', function() {
if (OCA.Files && OCA.Files.Sidebar) {
OCA.Files.Sidebar.registerTab(commentTab)
}
})
}
+57
View File
@@ -0,0 +1,57 @@
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import MessageReplyText from '@mdi/svg/svg/message-reply-text.svg?raw'
import { getCSPNonce } from '@nextcloud/auth'
import { registerSidebarTab } from '@nextcloud/files'
import { loadState } from '@nextcloud/initial-state'
import { t } from '@nextcloud/l10n'
import wrap from '@vue/web-component-wrapper'
import { createPinia, PiniaVuePlugin } from 'pinia'
import Vue from 'vue'
import FilesSidebarTab from './views/FilesSidebarTab.vue'
import { registerCommentsPlugins } from './comments-activity-tab.ts'
__webpack_nonce__ = getCSPNonce()
const tagName = 'comments_files-sidebar-tab'
if (loadState('comments', 'activityEnabled', false) && OCA?.Activity?.registerSidebarAction !== undefined) {
// Do not mount own tab but mount into activity
window.addEventListener('DOMContentLoaded', function() {
registerCommentsPlugins()
})
} else {
registerSidebarTab({
id: 'comments',
displayName: t('comments', 'Comments'),
iconSvgInline: MessageReplyText,
order: 50,
tagName,
enabled() {
if (!window.customElements.get(tagName)) {
setupSidebarTab()
}
return true
},
})
}
/**
* Setup the sidebar tab as a web component
*/
function setupSidebarTab() {
Vue.use(PiniaVuePlugin)
Vue.mixin({ pinia: createPinia() })
const webComponent = wrap(Vue, FilesSidebarTab)
// In Vue 2, wrap doesn't support disabling shadow. Disable with a hack
Object.defineProperty(webComponent.prototype, 'attachShadow', {
value() { return this },
})
Object.defineProperty(webComponent.prototype, 'shadowRoot', {
get() { return this },
})
window.customElements.define(tagName, webComponent)
}
+4 -3
View File
@@ -1,8 +1,9 @@
import { getCurrentUser } from '@nextcloud/auth'
/**
/*!
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import { getCurrentUser } from '@nextcloud/auth'
import axios from '@nextcloud/axios'
import { loadState } from '@nextcloud/initial-state'
import { generateOcsUrl } from '@nextcloud/router'
@@ -32,7 +33,7 @@ export default defineComponent({
},
methods: {
/**
* Autocomplete @mentions
* Autocomplete `@mentions`
*
* @param search the query
* @param callback the callback to process the results with
@@ -0,0 +1,40 @@
<!--
- SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
- SPDX-License-Identifier: AGPL-3.0-or-later
-->
<script setup lang="ts">
import type { IFolder, INode, IView } from '@nextcloud/files'
import { computed } from 'vue'
import Comments from './Comments.vue'
const props = defineProps<{
node?: INode
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
folder?: IFolder
// eslint-disable-next-line vue/no-unused-properties -- Required on the web component interface
view?: IView
}>()
defineExpose({ setActive })
const resourceId = computed(() => props.node?.fileid)
/**
* Set this tab as active
*
* @param active - The active state
*/
function setActive(active: boolean) {
return active
}
</script>
<template>
<Comments
v-if="resourceId !== undefined"
:key="resourceId"
:resource-id="resourceId"
resource-type="files" />
</template>
+4
View File
@@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Dasbor",
"Dashboard app" : "Aplikasi dasbor",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
"Weather" : "Cuaca",
"Status" : "Status",
"Good morning" : "Selamat pagi",
@@ -13,10 +14,13 @@ OC.L10N.register(
"Good evening, {name}" : "Selamat malam, {name}",
"Hello" : "Halo",
"Hello, {name}" : "Halo, {name}",
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
"Customize" : "Sesuaikan",
"Edit widgets" : "Edit widget",
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
"Weather service" : "Layanan cuaca",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
"Weather data from Met.no" : "Data cuaca dari Met.no",
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
+4
View File
@@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Dasbor",
"Dashboard app" : "Aplikasi dasbor",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an overview of your upcoming appointments, urgent emails, chat messages, incoming tickets, latest tweets and much more! People can add the widgets they like and change the background to their liking." : "Mulai hari Anda dengan informasi\n\nDasbor Nextcloud adalah titik awal hari Anda, memberikan ikhtisar janji temu mendatang, email mendesak, pesan obrolan, tiket masuk, tweet terbaru, dan masih banyak lagi! Orang dapat menambahkan widget yang mereka sukai dan mengubah latar belakang sesuai keinginan mereka.",
"Weather" : "Cuaca",
"Status" : "Status",
"Good morning" : "Selamat pagi",
@@ -11,10 +12,13 @@
"Good evening, {name}" : "Selamat malam, {name}",
"Hello" : "Halo",
"Hello, {name}" : "Halo, {name}",
"Happy birthday 🥳🤩🎂🎉" : "Selamat ulang tahun 🥳🤩🎂🎉",
"Happy birthday, {name} 🥳🤩🎂🎉" : "Selamat ulang tahun, {name} 🥳🤩🎂🎉",
"Customize" : "Sesuaikan",
"Edit widgets" : "Edit widget",
"Get more widgets from the App Store" : "Dapatkan lebih banyak widget dari App Store",
"Weather service" : "Layanan cuaca",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Demi privasi Anda, data cuaca diminta oleh server {productName} Anda atas nama Anda sehingga layanan cuaca tidak menerima informasi pribadi apa pun.",
"Weather data from Met.no" : "Data cuaca dari Met.no",
"geocoding with Nominatim" : "Secara khusus, dengan geocoding",
"elevation data from OpenTopoData" : "data ketinggian dari OpenTopoData",
@@ -18,6 +18,7 @@ use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCSController;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Config\IUserConfig;
use OCP\Dashboard\IAPIWidget;
use OCP\Dashboard\IAPIWidgetV2;
use OCP\Dashboard\IButtonWidget;
@@ -30,7 +31,6 @@ use OCP\Dashboard\Model\WidgetButton;
use OCP\Dashboard\Model\WidgetItem;
use OCP\Dashboard\Model\WidgetOptions;
use OCP\IConfig;
use OCP\IRequest;
/**
@@ -45,7 +45,7 @@ class DashboardApiController extends OCSController {
IRequest $request,
private IManager $dashboardManager,
private IAppConfig $appConfig,
private IConfig $config,
private IUserConfig $userConfig,
private ?string $userId,
private DashboardService $service,
) {
@@ -59,7 +59,7 @@ class DashboardApiController extends OCSController {
private function getShownWidgets(array $widgetIds): array {
if (empty($widgetIds)) {
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
$widgetIds = explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault));
$widgetIds = explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault));
}
return array_filter(
@@ -202,7 +202,7 @@ class DashboardApiController extends OCSController {
#[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/layout')]
public function updateLayout(array $layout): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'layout', implode(',', $layout));
$this->userConfig->setValueString($this->userId, 'dashboard', 'layout', implode(',', $layout));
return new DataResponse(['layout' => $layout]);
}
@@ -230,7 +230,7 @@ class DashboardApiController extends OCSController {
#[NoAdminRequired]
#[ApiRoute(verb: 'POST', url: '/api/v3/statuses')]
public function updateStatuses(array $statuses): DataResponse {
$this->config->setUserValue($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
$this->userConfig->setValueString($this->userId, 'dashboard', 'statuses', implode(',', $statuses));
return new DataResponse(['statuses' => $statuses]);
}
}
@@ -17,10 +17,10 @@ use OCP\AppFramework\Http\Attribute\OpenAPI;
use OCP\AppFramework\Http\FeaturePolicy;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Services\IInitialState;
use OCP\Config\IUserConfig;
use OCP\Dashboard\IIconWidget;
use OCP\Dashboard\IManager;
use OCP\Dashboard\IWidget;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IRequest;
@@ -33,9 +33,9 @@ class DashboardController extends Controller {
string $appName,
IRequest $request,
private IInitialState $initialState,
private IEventDispatcher $eventDispatcher,
private IManager $dashboardManager,
private IConfig $config,
private IUserConfig $userConfig,
private IL10N $l10n,
private ?string $userId,
private DashboardService $service,
@@ -67,9 +67,9 @@ class DashboardController extends Controller {
$this->initialState->provideInitialState('statuses', $this->service->getStatuses());
$this->initialState->provideInitialState('layout', $this->service->getLayout());
$this->initialState->provideInitialState('appStoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true));
$this->initialState->provideInitialState('firstRun', $this->config->getUserValue($this->userId, 'dashboard', 'firstRun', '1') === '1');
$this->initialState->provideInitialState('firstRun', $this->userConfig->getValueBool($this->userId, 'dashboard', 'firstRun', true));
$this->initialState->provideInitialState('birthdate', $this->service->getBirthdate());
$this->config->setUserValue($this->userId, 'dashboard', 'firstRun', '0');
$this->userConfig->setValueBool($this->userId, 'dashboard', 'firstRun', false);
$response = new TemplateResponse('dashboard', 'index', [
'id-app-content' => '#app-dashboard',
@@ -12,12 +12,12 @@ use JsonException;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\PropertyDoesNotExistException;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IConfig;
use OCP\Config\IUserConfig;
use OCP\IUserManager;
class DashboardService {
public function __construct(
private IConfig $config,
private IUserConfig $userConfig,
private IAppConfig $appConfig,
private ?string $userId,
private IUserManager $userManager,
@@ -31,21 +31,24 @@ class DashboardService {
*/
public function getLayout(): array {
$systemDefault = $this->appConfig->getAppValueString('layout', 'recommendations,spreed,mail,calendar');
return array_values(array_filter(explode(',', $this->config->getUserValue($this->userId, 'dashboard', 'layout', $systemDefault)), fn (string $value) => $value !== ''));
return array_values(array_filter(
explode(',', $this->userConfig->getValueString($this->userId, 'dashboard', 'layout', $systemDefault)),
fn (string $value) => $value !== '')
);
}
/**
* @return list<string>
*/
public function getStatuses() {
$configStatuses = $this->config->getUserValue($this->userId, 'dashboard', 'statuses', '');
public function getStatuses(): array {
$configStatuses = $this->userConfig->getValueString($this->userId, 'dashboard', 'statuses');
try {
// Parse the old format
/** @var array<string, bool> $statuses */
$statuses = json_decode($configStatuses, true, 512, JSON_THROW_ON_ERROR);
// We avoid getting an empty array as it will not produce an object in UI's JS
return array_keys(array_filter($statuses, static fn (bool $value) => $value));
} catch (JsonException $e) {
} catch (JsonException) {
return array_values(array_filter(explode(',', $configStatuses), fn (string $value) => $value !== ''));
}
}
@@ -13,7 +13,7 @@ use OC\Accounts\Account;
use OCA\Dashboard\Service\DashboardService;
use OCP\Accounts\IAccountManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\IConfig;
use OCP\Config\IUserConfig;
use OCP\IUser;
use OCP\IUserManager;
use PHPUnit\Framework\MockObject\MockObject;
@@ -21,7 +21,7 @@ use Test\TestCase;
class DashboardServiceTest extends TestCase {
private IConfig&MockObject $config;
private IUserConfig&MockObject $userConfig;
private IAppConfig&MockObject $appConfig;
private IUserManager&MockObject $userManager;
private IAccountManager&MockObject $accountManager;
@@ -30,13 +30,13 @@ class DashboardServiceTest extends TestCase {
protected function setUp(): void {
parent::setUp();
$this->config = $this->createMock(IConfig::class);
$this->userConfig = $this->createMock(IUserConfig::class);
$this->appConfig = $this->createMock(IAppConfig::class);
$this->userManager = $this->createMock(IUserManager::class);
$this->accountManager = $this->createMock(IAccountManager::class);
$this->service = new DashboardService(
$this->config,
$this->userConfig,
$this->appConfig,
'alice',
$this->userManager,
@@ -90,7 +90,7 @@ class DashboardServiceTest extends TestCase {
public function testGetBirthdateNoUserId(): void {
$service = new DashboardService(
$this->config,
$this->userConfig,
$this->appConfig,
null,
$this->userManager,
+5 -3
View File
@@ -24,6 +24,7 @@ use OCA\DAV\Connector\Sabre\Principal;
use OCP\Accounts\IAccountManager;
use OCP\App\IAppManager;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\IAppConfig;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IDBConnection;
@@ -56,7 +57,7 @@ $principalBackend = new Principal(
Server::get(ProxyMapper::class),
Server::get(KnownUserService::class),
Server::get(IConfig::class),
\OC::$server->getL10NFactory(),
Server::get(IL10NFactory::class),
'principals/'
);
$db = Server::get(IDBConnection::class);
@@ -84,7 +85,7 @@ $calDavBackend = new CalDavBackend(
);
$debugging = Server::get(IConfig::class)->getSystemValue('debug', false);
$sendInvitations = Server::get(IConfig::class)->getAppValue('dav', 'sendInvitations', 'yes') === 'yes';
$sendInvitations = Server::get(IAppConfig::class)->getValueBool('dav', 'sendInvitations', true);
// Root nodes
$principalCollection = new \Sabre\CalDAV\Principal\Collection($principalBackend);
@@ -102,6 +103,7 @@ $nodes = [
$server = new \Sabre\DAV\Server($nodes);
$server::$exposeVersion = false;
$server->httpRequest->setUrl(Server::get(IRequest::class)->getRequestUri());
/** @var string $baseuri defined in remote.php */
$server->setBaseUri($baseuri);
// Add plugins
@@ -126,4 +128,4 @@ $server->addPlugin(Server::get(RateLimitingPlugin::class));
$server->addPlugin(Server::get(CalDavValidatePlugin::class));
// And off we go!
$server->exec();
$server->start();
+5 -3
View File
@@ -30,6 +30,7 @@ use OCP\IRequest;
use OCP\ISession;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory as IL10nFactory;
use OCP\Security\Bruteforce\IThrottler;
use OCP\Server;
use Psr\Log\LoggerInterface;
@@ -53,7 +54,7 @@ $principalBackend = new Principal(
Server::get(ProxyMapper::class),
Server::get(KnownUserService::class),
Server::get(IConfig::class),
\OC::$server->getL10NFactory(),
Server::get(IL10nFactory::class),
'principals/'
);
$db = Server::get(IDBConnection::class);
@@ -85,9 +86,10 @@ $nodes = [
$server = new \Sabre\DAV\Server($nodes);
$server::$exposeVersion = false;
$server->httpRequest->setUrl(Server::get(IRequest::class)->getRequestUri());
/** @var string $baseuri defined in remote.php */
$server->setBaseUri($baseuri);
// Add plugins
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), \OC::$server->getL10N('dav')));
$server->addPlugin(new MaintenancePlugin(Server::get(IConfig::class), \OCP\Server::get(IL10nFactory::class)->get('dav')));
$server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend));
$server->addPlugin(new Plugin());
@@ -104,4 +106,4 @@ $server->addPlugin(Server::get(CardDavRateLimitingPlugin::class));
$server->addPlugin(Server::get(CardDavValidatePlugin::class));
// And off we go!
$server->exec();
$server->start();
+10 -5
View File
@@ -14,6 +14,7 @@ use OCA\DAV\Files\Sharing\FilesDropPlugin;
use OCA\DAV\Files\Sharing\PublicLinkCheckPlugin;
use OCA\DAV\Storage\PublicOwnerWrapper;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCP\App\IAppManager;
use OCP\BeforeSabrePubliclyLoadedEvent;
use OCP\Constants;
use OCP\EventDispatcher\IEventDispatcher;
@@ -26,16 +27,19 @@ use OCP\IRequest;
use OCP\ISession;
use OCP\ITagManager;
use OCP\IUserSession;
use OCP\L10N\IFactory as IL10nFactory;
use OCP\Security\Bruteforce\IThrottler;
use OCP\Server;
use Psr\Log\LoggerInterface;
// load needed apps
$RUNTIME_APPTYPES = ['filesystem', 'authentication', 'logging'];
Server::get(IAppManager::class)->loadApps($RUNTIME_APPTYPES);
OC_App::loadApps($RUNTIME_APPTYPES);
OC_Util::obEnd();
// Turn off output buffering to prevent memory problems
while (ob_get_level()) {
ob_end_clean();
}
Server::get(ISession::class)->close();
// Backends
@@ -60,7 +64,7 @@ $serverFactory = new ServerFactory(
Server::get(IRequest::class),
Server::get(IPreview::class),
$eventDispatcher,
\OC::$server->getL10N('dav')
Server::get(IL10nFactory::class)->get('dav')
);
$requestUri = Server::get(IRequest::class)->getRequestUri();
@@ -68,6 +72,7 @@ $requestUri = Server::get(IRequest::class)->getRequestUri();
$linkCheckPlugin = new PublicLinkCheckPlugin();
$filesDropPlugin = new FilesDropPlugin();
/** @var string $baseuri defined in public.php */
$server = $serverFactory->createServer(
true,
$baseuri,
@@ -125,4 +130,4 @@ $event = new BeforeSabrePubliclyLoadedEvent($server);
$eventDispatcher->dispatchTyped($event);
// And off we go!
$server->exec();
$server->start();
+7 -3
View File
@@ -19,6 +19,7 @@ use OCP\IRequest;
use OCP\ISession;
use OCP\ITagManager;
use OCP\IUserSession;
use OCP\L10N\IFactory as IL10nFactory;
use OCP\SabrePluginEvent;
use OCP\Security\Bruteforce\IThrottler;
use OCP\Server;
@@ -31,7 +32,9 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
while (ob_get_level()) {
ob_end_clean();
}
$dispatcher = Server::get(IEventDispatcher::class);
@@ -45,7 +48,7 @@ $serverFactory = new ServerFactory(
Server::get(IRequest::class),
Server::get(IPreview::class),
$dispatcher,
\OC::$server->getL10N('dav')
Server::get(IL10nFactory::class)->get('dav')
);
// Backends
@@ -68,6 +71,7 @@ $authPlugin->addBackend($bearerAuthPlugin);
$requestUri = Server::get(IRequest::class)->getRequestUri();
/** @var string $baseuri defined in remote.php */
$server = $serverFactory->createServer(false, $baseuri, $requestUri, $authPlugin, function () {
// use the view for the logged in user
return Filesystem::getView();
@@ -80,4 +84,4 @@ $event = new SabrePluginAddEvent($server);
$dispatcher->dispatchTyped($event);
// And off we go!
$server->exec();
$server->start();
+5 -2
View File
@@ -21,12 +21,15 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
while (ob_get_level()) {
ob_end_clean();
}
$requestUri = Server::get(IRequest::class)->getRequestUri();
/** @var ServerFactory $serverFactory */
$serverFactory = Server::get(ServerFactory::class);
/** @var string $baseuri defined in remote.php */
$server = $serverFactory->createServer(
$baseuri,
$requestUri,
@@ -37,4 +40,4 @@ $server = $serverFactory->createServer(
Server::get(IRequest::class)
);
$server->exec();
$server->start();
+7 -2
View File
@@ -17,6 +17,7 @@ use OCA\DAV\Storage\PublicShareWrapper;
use OCA\DAV\Upload\ChunkingPlugin;
use OCA\DAV\Upload\ChunkingV2Plugin;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCP\App\IAppManager;
use OCP\BeforeSabrePubliclyLoadedEvent;
use OCP\Constants;
use OCP\EventDispatcher\IEventDispatcher;
@@ -41,8 +42,12 @@ use Sabre\DAV\Exception\NotFound;
// load needed apps
$RUNTIME_APPTYPES = ['filesystem', 'authentication', 'logging'];
OC_App::loadApps($RUNTIME_APPTYPES);
OC_Util::obEnd();
Server::get(IAppManager::class)->loadApps($RUNTIME_APPTYPES);
// Turn off output buffering to prevent memory problems
while (ob_get_level()) {
ob_end_clean();
}
$session = Server::get(ISession::class);
$request = Server::get(IRequest::class);
+4 -1
View File
@@ -15,8 +15,11 @@ if (!str_contains(@ini_get('disable_functions'), 'set_time_limit')) {
ignore_user_abort(true);
// Turn off output buffering to prevent memory problems
\OC_Util::obEnd();
while (ob_get_level()) {
ob_end_clean();
}
$request = \OCP\Server::get(IRequest::class);
/** @var string $baseuri defined in remote.php */
$server = new Server($request, $baseuri);
$server->exec();
@@ -254,6 +254,7 @@ return array(
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => $baseDir . '/../lib/Connector/Sabre/SharesPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\TagList' => $baseDir . '/../lib/Connector/Sabre/TagList.php',
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => $baseDir . '/../lib/Connector/Sabre/TagsPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\UserIdHeaderPlugin' => $baseDir . '/../lib/Connector/Sabre/UserIdHeaderPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => $baseDir . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
'OCA\\DAV\\Controller\\BirthdayCalendarController' => $baseDir . '/../lib/Controller/BirthdayCalendarController.php',
'OCA\\DAV\\Controller\\DirectController' => $baseDir . '/../lib/Controller/DirectController.php',
@@ -269,6 +269,7 @@ class ComposerStaticInitDAV
'OCA\\DAV\\Connector\\Sabre\\SharesPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/SharesPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\TagList' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagList.php',
'OCA\\DAV\\Connector\\Sabre\\TagsPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/TagsPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\UserIdHeaderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/UserIdHeaderPlugin.php',
'OCA\\DAV\\Connector\\Sabre\\ZipFolderPlugin' => __DIR__ . '/..' . '/../lib/Connector/Sabre/ZipFolderPlugin.php',
'OCA\\DAV\\Controller\\BirthdayCalendarController' => __DIR__ . '/..' . '/../lib/Controller/BirthdayCalendarController.php',
'OCA\\DAV\\Controller\\DirectController' => __DIR__ . '/..' . '/../lib/Controller/DirectController.php',
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen, wurde durch einen Hook abgebrochen",
"Could not rename part file to final file" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen",
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen, wurde durch einen Hook abgebrochen",
"Could not rename part file to final file" : "Konnte temporäre Datei nicht in die endgültige Datei umbenennen",
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Konnte Teildatei nicht in endgültige Datei umbenennen, wurde durch Hook abgebrochen.",
"Could not rename part file to final file" : "Konnte Teildatei nicht in endgültige Datei umbenennen",
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Konnte Teildatei nicht in endgültige Datei umbenennen, wurde durch Hook abgebrochen.",
"Could not rename part file to final file" : "Konnte Teildatei nicht in endgültige Datei umbenennen",
"Failed to check file size: %1$s" : "Dateigröße konnte nicht überprüft werden: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint aber zu existieren",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Datei konnte nicht geöffnet werden: %1$s (%2$d), Datei scheint nicht zu existieren",
"Encryption not ready: %1$s" : "Verschlüsselung nicht bereit: %1$s",
"Failed to open file: %1$s" : "Datei konnte nicht geöffnet werden: %1$s",
"Failed to unlink: %1$s" : "Fehler beim Aufheben der Verknüpfung: %1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Could not rename part file to final file, cancelled by hook",
"Could not rename part file to final file" : "Could not rename part file to final file",
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
"Failed to open file: %1$s" : "Failed to open file: %1$s",
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Could not rename part file to final file, cancelled by hook",
"Could not rename part file to final file" : "Could not rename part file to final file",
"Failed to check file size: %1$s" : "Failed to check file size: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Could not open file: %1$s (%2$d), file does seem to exist",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Could not open file: %1$s (%2$d), file doesn't seem to exist",
"Encryption not ready: %1$s" : "Encryption not ready: %1$s",
"Failed to open file: %1$s" : "Failed to open file: %1$s",
"Failed to unlink: %1$s" : "Failed to unlink: %1$s",
+32
View File
@@ -73,7 +73,19 @@ OC.L10N.register(
"Where: %s" : "Kus: %s",
"%1$s via %2$s" : "%1$s %2$s kaudu",
"In the past on %1$s for the entire day" : "Minevikus kogu päeva: %1$s",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["%n minuti pärast %1$s kogu päeva kestel","%n minuti pärast %1$s kogu päeva kestel"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["%n tunni pärast %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["%n tunni päeva %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["%n nädala pärast %1$s kogu päeva kestel","%n nädala pärast %1$s kogu päeva kestel"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["%n kuu pärast %1$s kogu päeva kestel","%n kuu pärast %1$s kogu päeva kestel"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["%n aasta pärast %1$s kogu päeva kestel","%n aasta pärast %1$s kogu päeva kestel"],
"In the past on %1$s between %2$s - %3$s" : "Minevikus: %1$s ajavahemikus %2$s - %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s","%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s","%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s","%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s","%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s","%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s","%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s"],
"Could not generate when statement" : "Ei õnnestunud koostada tingimuslikku „when“ lausendit",
"Every Day for the entire day" : "Iga päev kogu päeva jooksul",
"Every Day for the entire day until %1$s" : "Iga päev kogu päeva jooksul kuni %1$s",
@@ -111,8 +123,26 @@ OC.L10N.register(
"On specific dates for the entire day until %1$s" : "Kindlatel päevadel kogu päeva jooksul kuni %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Kindlatel päevadel ajavahemikus %1$s - %2$s kuni %3$s",
"In the past on %1$s" : "Minevikus %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["%n minuti pärast %1$s","%n minuti pärast %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["%n tunni pärast %1$s","%n tunni pärast %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["%n päeva pärast %1$s","%n päeva pärast %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["%n nädala pärast %1$s","%n nädala pärast %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["%n kuu pärast %1$s","%n kuu pärast %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["%n aasta pärast %1$s","%n aasta pärast %1$s"],
"In the past on %1$s then on %2$s" : "Minevikus: %1$s ja siis %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["%n minuti pärast %1$s, seejärel %2$s","%n minuti pärast %1$s, seejärel %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["%n tunni pärast %1$s, seejärel %2$s","%n tunni pärast %1$s, seejärel %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["%n päeva pärast %1$s, seejärel %2$s","%n päeva pärast %1$s, seejärel %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["%n nädala pärast %1$s, seejärel %2$s","%n nädala pärast %1$s, seejärel %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["%n kuu pärast %1$s, seejärel %2$s","%n kuu pärast %1$s, seejärel %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["%n aasta pärast %1$s, seejärel %2$s","%n aasta pärast %1$s, seejärel %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Minevikus: %1$s ja siis %2$s ning %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["%n minuti pärast %1$s, seejärel %2$s ja %3$s","%n minuti pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["%n tunni pärast %1$s, seejärel %2$s ja %3$s","%n tunni pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["%n päeva pärast %1$s, seejärel %2$s ja %3$s","%n päeva pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["%n nädala pärast %1$s, seejärel %2$s ja %3$s","%n nädala pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["%n kuu pärast %1$s, seejärel %2$s ja %3$s","%n kuu pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["%n aasta pärast %1$s, seejärel %2$s ja %3$s","%n aasta pärast %1$s, seejärel %2$s ja %3$s"],
"Could not generate next recurrence statement" : "Ei õnnestunud koostada korduva ürituse järgmise toimumise lausendit",
"Cancelled: %1$s" : "Tühistatud: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
@@ -204,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud, selle katkestas programmi haak",
"Could not rename part file to final file" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud",
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, aga tundub, et ta on olemas",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, tundub, et teda pole olemas",
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
+32
View File
@@ -71,7 +71,19 @@
"Where: %s" : "Kus: %s",
"%1$s via %2$s" : "%1$s %2$s kaudu",
"In the past on %1$s for the entire day" : "Minevikus kogu päeva: %1$s",
"_In %n minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["%n minuti pärast %1$s kogu päeva kestel","%n minuti pärast %1$s kogu päeva kestel"],
"_In %n hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["%n tunni pärast %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
"_In %n day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["%n tunni päeva %1$s kogu päeva kestel","%n tunni pärast %1$s kogu päeva kestel"],
"_In %n week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["%n nädala pärast %1$s kogu päeva kestel","%n nädala pärast %1$s kogu päeva kestel"],
"_In %n month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["%n kuu pärast %1$s kogu päeva kestel","%n kuu pärast %1$s kogu päeva kestel"],
"_In %n year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["%n aasta pärast %1$s kogu päeva kestel","%n aasta pärast %1$s kogu päeva kestel"],
"In the past on %1$s between %2$s - %3$s" : "Minevikus: %1$s ajavahemikus %2$s - %3$s",
"_In %n minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s","%n minuti pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s","%n tunni pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s","%n päeva pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s","%n nädala pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s","%n kuu pärast %1$s ajavahemikus %2$s kuni %3$s"],
"_In %n year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s","%n aasta pärast %1$s ajavahemikus %2$s kuni %3$s"],
"Could not generate when statement" : "Ei õnnestunud koostada tingimuslikku „when“ lausendit",
"Every Day for the entire day" : "Iga päev kogu päeva jooksul",
"Every Day for the entire day until %1$s" : "Iga päev kogu päeva jooksul kuni %1$s",
@@ -109,8 +121,26 @@
"On specific dates for the entire day until %1$s" : "Kindlatel päevadel kogu päeva jooksul kuni %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Kindlatel päevadel ajavahemikus %1$s - %2$s kuni %3$s",
"In the past on %1$s" : "Minevikus %1$s",
"_In %n minute on %1$s_::_In %n minutes on %1$s_" : ["%n minuti pärast %1$s","%n minuti pärast %1$s"],
"_In %n hour on %1$s_::_In %n hours on %1$s_" : ["%n tunni pärast %1$s","%n tunni pärast %1$s"],
"_In %n day on %1$s_::_In %n days on %1$s_" : ["%n päeva pärast %1$s","%n päeva pärast %1$s"],
"_In %n week on %1$s_::_In %n weeks on %1$s_" : ["%n nädala pärast %1$s","%n nädala pärast %1$s"],
"_In %n month on %1$s_::_In %n months on %1$s_" : ["%n kuu pärast %1$s","%n kuu pärast %1$s"],
"_In %n year on %1$s_::_In %n years on %1$s_" : ["%n aasta pärast %1$s","%n aasta pärast %1$s"],
"In the past on %1$s then on %2$s" : "Minevikus: %1$s ja siis %2$s",
"_In %n minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["%n minuti pärast %1$s, seejärel %2$s","%n minuti pärast %1$s, seejärel %2$s"],
"_In %n hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["%n tunni pärast %1$s, seejärel %2$s","%n tunni pärast %1$s, seejärel %2$s"],
"_In %n day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["%n päeva pärast %1$s, seejärel %2$s","%n päeva pärast %1$s, seejärel %2$s"],
"_In %n week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["%n nädala pärast %1$s, seejärel %2$s","%n nädala pärast %1$s, seejärel %2$s"],
"_In %n month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["%n kuu pärast %1$s, seejärel %2$s","%n kuu pärast %1$s, seejärel %2$s"],
"_In %n year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["%n aasta pärast %1$s, seejärel %2$s","%n aasta pärast %1$s, seejärel %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "Minevikus: %1$s ja siis %2$s ning %3$s",
"_In %n minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["%n minuti pärast %1$s, seejärel %2$s ja %3$s","%n minuti pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["%n tunni pärast %1$s, seejärel %2$s ja %3$s","%n tunni pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["%n päeva pärast %1$s, seejärel %2$s ja %3$s","%n päeva pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["%n nädala pärast %1$s, seejärel %2$s ja %3$s","%n nädala pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["%n kuu pärast %1$s, seejärel %2$s ja %3$s","%n kuu pärast %1$s, seejärel %2$s ja %3$s"],
"_In %n year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["%n aasta pärast %1$s, seejärel %2$s ja %3$s","%n aasta pärast %1$s, seejärel %2$s ja %3$s"],
"Could not generate next recurrence statement" : "Ei õnnestunud koostada korduva ürituse järgmise toimumise lausendit",
"Cancelled: %1$s" : "Tühistatud: %1$s",
"\"%1$s\" has been canceled" : "„%1$s“ on tühistatud",
@@ -202,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud, selle katkestas programmi haak",
"Could not rename part file to final file" : "Osalise faili nime muutmine lõplikuks nimeks ei õnnestunud",
"Failed to check file size: %1$s" : "Faili suuruse kontrollimine ei õnnestunud: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, aga tundub, et ta on olemas",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "„%1$s“ (%2$d) faili avamine ei õnnestunud, tundub, et teda pole olemas",
"Encryption not ready: %1$s" : "Krüptimine pole veel kasutatav: %1$s",
"Failed to open file: %1$s" : "Faili avamine ei õnnestunud: %1$s",
"Failed to unlink: %1$s" : "Lingi eemaldamine ei õnnestunud: %1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Níorbh fhéidir páirtchomhad a athainmniú go comhad deiridh, curtha ar ceal le hook",
"Could not rename part file to final file" : "Níorbh fhéidir páirtchomhad a athainmniú go dtí an comhad deiridh",
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Níorbh fhéidir páirtchomhad a athainmniú go comhad deiridh, curtha ar ceal le hook",
"Could not rename part file to final file" : "Níorbh fhéidir páirtchomhad a athainmniú go dtí an comhad deiridh",
"Failed to check file size: %1$s" : "Níorbh fhéidir méid an chomhaid a sheiceáil: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil go bhfuil an comhad ann",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Níorbh fhéidir an comhad a oscailt: %1$s (%2$d), is cosúil nach bhfuil an comhad ann.",
"Encryption not ready: %1$s" : "Níl an criptiúchán réidh: %1$s",
"Failed to open file: %1$s" : "Níorbh fhéidir an comhad a oscailt: %1$s",
"Failed to unlink: %1$s" : "Theip ar dhínascadh: %1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema",
"Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final",
"Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro existe",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro non existe",
"Encryption not ready: %1$s" : "A cifraxe non está preparada: %1$s",
"Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s",
"Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final, foi cancelado polo sistema",
"Could not rename part file to final file" : "Non foi posíbel cambiar o nome do ficheiro parcial ao ficheiro final",
"Failed to check file size: %1$s" : "Produciuse un erro ao comprobar o tamaño do ficheiro: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro existe",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Non foi posíbel abrir o ficheiro: %1$s (%2$d), semella o ficheiro non existe",
"Encryption not ready: %1$s" : "A cifraxe non está preparada: %1$s",
"Failed to open file: %1$s" : "Produciuse un erro ao abrir o ficheiro: %1$s",
"Failed to unlink: %1$s" : "Produciuse un erro ao desligar: %1$s",
+312
View File
@@ -0,0 +1,312 @@
OC.L10N.register(
"dav",
{
"Calendar" : "Kalender",
"Tasks" : "Tugas",
"Personal" : "Pribadi",
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
"Untitled event" : "Acara tanpa judul",
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
"Busy" : "Sibuk",
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
"Contact birthdays" : "Ulang tahun kontak",
"Death of %s" : "Wafatnya %s",
"Untitled calendar" : "Kalender tanpa judul",
"Calendar:" : "Kalender:",
"Date:" : "Tanggal:",
"Where:" : "Tempat:",
"Description:" : "Deskripsi:",
"_%n hour_::_%n hours_" : ["%n jam"],
"_%n minute_::_%n minutes_" : ["%n menit"],
"%s (in %s)" : "%s (dalam %s)",
"%s (%s ago)" : "%s (%s yang lalu)",
"Calendar: %s" : "Kalender: %s",
"Date: %s" : "Tanggal: %s",
"Description: %s" : "Deskripsi: %s",
"Where: %s" : "Di mana: %s",
"%1$s via %2$s" : "%1$s melalui %2$s",
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
"Every Day for the entire day" : "Setiap hari sepanjang hari",
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
"In the past on %1$s" : "Di masa lalu pada %1$s",
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
"Cancelled: %1$s" : "Dibatalkan: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
"Re: %1$s" : "Re: %1$s",
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
"Invitation: %1$s" : "Undangan: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
"Organizer:" : "Penyelenggara:",
"Attendees:" : "Peserta:",
"Title:" : "Judul:",
"When:" : "Kapan:",
"Location:" : "Lokasi:",
"Link:" : "Tautan:",
"Occurring:" : "Berlangsung:",
"Accept" : "Terima",
"Decline" : "Tolak",
"More options …" : "Opsi lainnya …",
"More options at %s" : "Opsi lainnya di %s",
"Monday" : "Senin",
"Tuesday" : "Selasa",
"Wednesday" : "Rabu",
"Thursday" : "Kamis",
"Friday" : "Jumat",
"Saturday" : "Sabtu",
"Sunday" : "Minggu",
"January" : "Januari",
"February" : "Februari",
"March" : "Maret",
"April" : "April",
"May" : "Mei",
"June" : "Juni",
"July" : "Juli",
"August" : "Agustus",
"September" : "September",
"October" : "Oktober",
"November" : "November",
"December" : "Desember",
"First" : "Pertama",
"Second" : "Kedua",
"Third" : "Ketiga",
"Fourth" : "Keempat",
"Fifth" : "Kelima",
"Last" : "Terakhir",
"Second Last" : "Kedua terakhir",
"Third Last" : "Ketiga terakhir",
"Fourth Last" : "Keempat terakhir",
"Fifth Last" : "Kelima terakhir",
"Contacts" : "Kontak",
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
"Could not write file contents" : "Tidak dapat menulis konten file",
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %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." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
"File not found: %1$s" : "File tidak ditemukan: %1$s",
"Invalid target path" : "Jalur tujuan tidak valid",
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
"Upgrade needed" : "Perlu peningkatan",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
"Events" : "Acara",
"Untitled task" : "Tugas tanpa judul",
"Completed on %s" : "Selesai pada %s",
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
"Due on %s" : "Jatuh tempo pada %s",
"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." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
"Example event - open me!" : "Acara contoh - buka saya!",
"System Address Book" : "Buku Alamat Sistem",
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
"DAV system address book" : "Buku alamat sistem DAV",
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
"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\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
"Contacts and groups" : "Kontak dan grup",
"WebDAV" : "WebDAV",
"Absence saved" : "Ketidakhadiran disimpan",
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
"Absence cleared" : "Ketidakhadiran dihapus",
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
"First day" : "Hari pertama",
"Last day (inclusive)" : "Hari terakhir (termasuk)",
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
"Name of the replacement" : "Nama pengganti",
"Short absence status" : "Status ketidakhadiran singkat",
"Long absence Message" : "Pesan ketidakhadiran panjang",
"Save" : "Simpan",
"Disable absence" : "Nonaktifkan ketidakhadiran",
"Failed to load availability" : "Gagal memuat ketersediaan",
"Saved availability" : "Ketersediaan disimpan",
"Failed to save availability" : "Gagal menyimpan ketersediaan",
"to" : "untuk",
"Delete slot" : "Hapus slot",
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
"Add slot" : "Tambahkan slot",
"Weekdays" : "Hari kerja",
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
"Cancel" : "Batal",
"Import" : "Impor",
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
"Contact reset successfully" : "Kontak berhasil direset",
"Error while resetting contact" : "Kesalahan saat mereset kontak",
"Contact imported successfully" : "Kontak berhasil diimpor",
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
"Import contact" : "Impor kontak",
"Reset to default" : "Reset ke default",
"Import contacts" : "Impor kontak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
"Import calendar event" : "Impor acara kalender",
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
"Upload event" : "Unggah acara",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
"Calendar server" : "Server kalender",
"Send invitations to attendees" : "Kirim undangan kepada peserta",
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
"Send notifications for events" : "Kirim notifikasi untuk acara",
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
"Example content" : "Konten contoh",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
"Availability" : "Ketersediaan",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
"Absence" : "Ketidakhadiran",
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
"Tentative" : "Tentatif",
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
"No results." : "Tidak ada hasil.",
"Start typing." : "Mulai mengetik.",
"Time zone:" : "Zona waktu:"
},
"nplurals=1; plural=0;");
+310
View File
@@ -0,0 +1,310 @@
{ "translations": {
"Calendar" : "Kalender",
"Tasks" : "Tugas",
"Personal" : "Pribadi",
"{actor} created calendar {calendar}" : "{actor} membuat kalender {calendar}",
"You created calendar {calendar}" : "Anda membuat kalender {calendar}",
"{actor} deleted calendar {calendar}" : "{actor} menghapus kalender {calendar}",
"You deleted calendar {calendar}" : "Anda menghapus kalender {calendar}",
"{actor} updated calendar {calendar}" : "{actor} memperbarui kalender {calendar}",
"You updated calendar {calendar}" : "Anda memperbarui kalender {calendar}",
"{actor} restored calendar {calendar}" : "{actor} memulihkan kalender {calendar}",
"You restored calendar {calendar}" : "Anda memulihkan kalender {calendar}",
"You shared calendar {calendar} as public link" : "Anda membagikan kalender {calendar} sebagai tautan publik",
"You removed public link for calendar {calendar}" : "Anda menghapus tautan publik untuk kalender {calendar}",
"{actor} shared calendar {calendar} with you" : "{actor} membagikan kalender {calendar} kepada Anda",
"You shared calendar {calendar} with {user}" : "Anda membagikan kalender {calendar} dengan {user}",
"{actor} shared calendar {calendar} with {user}" : "{actor} membagikan kalender {calendar} dengan {user}",
"{actor} unshared calendar {calendar} from you" : "{actor} membatalkan berbagi kalender {calendar} dari Anda",
"You unshared calendar {calendar} from {user}" : "Anda membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from {user}" : "{actor} membatalkan berbagi kalender {calendar} dari {user}",
"{actor} unshared calendar {calendar} from themselves" : "{actor} membatalkan berbagi kalender {calendar} dari diri mereka sendiri",
"You shared calendar {calendar} with group {group}" : "Anda membagikan kalender {calendar} dengan grup {group}",
"{actor} shared calendar {calendar} with group {group}" : "{actor} membagikan kalender {calendar} dengan grup {group}",
"You unshared calendar {calendar} from group {group}" : "Anda membatalkan berbagi kalender {calendar} dari grup {group}",
"{actor} unshared calendar {calendar} from group {group}" : "{actor} membatalkan berbagi kalender {calendar} dari grup {group}",
"Untitled event" : "Acara tanpa judul",
"{actor} created event {event} in calendar {calendar}" : "{actor} membuat acara {event} di kalender {calendar}",
"You created event {event} in calendar {calendar}" : "Anda membuat acara {event} di kalender {calendar}",
"{actor} deleted event {event} from calendar {calendar}" : "{actor} menghapus acara {event} dari kalender {calendar}",
"You deleted event {event} from calendar {calendar}" : "Anda menghapus acara {event} dari kalender {calendar}",
"{actor} updated event {event} in calendar {calendar}" : "{actor} memperbarui acara {event} di kalender {calendar}",
"You updated event {event} in calendar {calendar}" : "Anda memperbarui acara {event} di kalender {calendar}",
"{actor} moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "{actor} memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"You moved event {event} from calendar {sourceCalendar} to calendar {targetCalendar}" : "Anda memindahkan acara {event} dari kalender {sourceCalendar} ke kalender {targetCalendar}",
"{actor} restored event {event} of calendar {calendar}" : "{actor} memulihkan acara {event} dari kalender {calendar}",
"You restored event {event} of calendar {calendar}" : "Anda memulihkan acara {event} dari kalender {calendar}",
"Busy" : "Sibuk",
"{actor} created to-do {todo} in list {calendar}" : "{actor} membuat tugas {todo} di daftar {calendar}",
"You created to-do {todo} in list {calendar}" : "Anda membuat tugas {todo} di daftar {calendar}",
"{actor} deleted to-do {todo} from list {calendar}" : "{actor} menghapus tugas {todo} dari daftar {calendar}",
"You deleted to-do {todo} from list {calendar}" : "Anda menghapus tugas {todo} dari daftar {calendar}",
"{actor} updated to-do {todo} in list {calendar}" : "{actor} memperbarui tugas {todo} di daftar {calendar}",
"You updated to-do {todo} in list {calendar}" : "Anda memperbarui tugas {todo} di daftar {calendar}",
"{actor} solved to-do {todo} in list {calendar}" : "{actor} menyelesaikan tugas {todo} di daftar {calendar}",
"You solved to-do {todo} in list {calendar}" : "Anda menyelesaikan tugas {todo} di daftar {calendar}",
"{actor} reopened to-do {todo} in list {calendar}" : "{actor} membuka kembali tugas {todo} di daftar {calendar}",
"You reopened to-do {todo} in list {calendar}" : "Anda membuka kembali tugas {todo} di daftar {calendar}",
"{actor} moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "{actor} memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"You moved to-do {todo} from list {sourceCalendar} to list {targetCalendar}" : "Anda memindahkan tugas {todo} dari daftar {sourceCalendar} ke daftar {targetCalendar}",
"Calendar, contacts and tasks" : "Kalender, kontak, dan tugas",
"A <strong>calendar</strong> was modified" : "<strong>Kalender</strong> telah diubah",
"A calendar <strong>event</strong> was modified" : "Sebuah <strong>acara</strong> kalender telah diubah",
"A calendar <strong>to-do</strong> was modified" : "Sebuah <strong>tugas</strong> kalender telah diubah",
"Contact birthdays" : "Ulang tahun kontak",
"Death of %s" : "Wafatnya %s",
"Untitled calendar" : "Kalender tanpa judul",
"Calendar:" : "Kalender:",
"Date:" : "Tanggal:",
"Where:" : "Tempat:",
"Description:" : "Deskripsi:",
"_%n hour_::_%n hours_" : ["%n jam"],
"_%n minute_::_%n minutes_" : ["%n menit"],
"%s (in %s)" : "%s (dalam %s)",
"%s (%s ago)" : "%s (%s yang lalu)",
"Calendar: %s" : "Kalender: %s",
"Date: %s" : "Tanggal: %s",
"Description: %s" : "Deskripsi: %s",
"Where: %s" : "Di mana: %s",
"%1$s via %2$s" : "%1$s melalui %2$s",
"In the past on %1$s for the entire day" : "Di masa lalu pada %1$s sepanjang hari",
"In the past on %1$s between %2$s - %3$s" : "Di masa lalu pada %1$s antara %2$s - %3$s",
"Could not generate when statement" : "Tidak dapat membuat pernyataan waktu",
"Every Day for the entire day" : "Setiap hari sepanjang hari",
"Every Day for the entire day until %1$s" : "Setiap hari sepanjang hari hingga %1$s",
"Every Day between %1$s - %2$s" : "Setiap hari antara %1$s - %2$s",
"Every Day between %1$s - %2$s until %3$s" : "Setiap hari antara %1$s - %2$s hingga %3$s",
"Every %1$d Days for the entire day" : "Setiap %1$d hari sepanjang hari",
"Every %1$d Days for the entire day until %2$s" : "Setiap %1$d hari sepanjang hari hingga %2$s",
"Every %1$d Days between %2$s - %3$s" : "Setiap %1$d hari antara %2$s - %3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Setiap %1$d hari antara %2$s - %3$s hingga %4$s",
"Could not generate event recurrence statement" : "Tidak dapat membuat pernyataan pengulangan acara",
"Every Week on %1$s for the entire day" : "Setiap minggu pada %1$s sepanjang hari",
"Every Week on %1$s for the entire day until %2$s" : "Setiap minggu pada %1$s sepanjang hari hingga %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Setiap minggu pada %1$s antara %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Setiap minggu pada %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Setiap %1$d minggu pada %2$s sepanjang hari",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Setiap %1$d minggu pada %2$s sepanjang hari hingga %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d minggu pada %2$s antara %3$s - %4$s hingga %5$s",
"Every Month on the %1$s for the entire day" : "Setiap bulan pada tanggal %1$s sepanjang hari",
"Every Month on the %1$s for the entire day until %2$s" : "Setiap bulan pada tanggal %1$s sepanjang hari hingga %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Setiap bulan pada tanggal %1$s antara %2$s - %3$s hingga %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Setiap %1$d bulan pada tanggal %2$s sepanjang hari hingga %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Setiap %1$d bulan pada tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Setiap tahun pada bulan %1$s tanggal %2$s sepanjang hari hingga %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Setiap tahun pada bulan %1$s tanggal %2$s antara %3$s - %4$s hingga %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s sepanjang hari hingga %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Setiap %1$d tahun pada bulan %2$s tanggal %3$s antara %4$s - %5$s hingga %6$s",
"On specific dates for the entire day until %1$s" : "Pada tanggal tertentu sepanjang hari hingga %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "Pada tanggal tertentu antara %1$s - %2$s hingga %3$s",
"In the past on %1$s" : "Di masa lalu pada %1$s",
"In the past on %1$s then on %2$s" : "Di masa lalu pada %1$s lalu pada %2$s",
"In the past on %1$s then on %2$s and %3$s" : "Di masa lalu pada %1$s lalu pada %2$s dan %3$s",
"Could not generate next recurrence statement" : "Tidak dapat membuat pernyataan pengulangan berikutnya",
"Cancelled: %1$s" : "Dibatalkan: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" telah dibatalkan",
"Re: %1$s" : "Re: %1$s",
"%1$s has accepted your invitation" : "%1$s telah menerima undangan Anda",
"%1$s has tentatively accepted your invitation" : "%1$s telah menerima undangan Anda secara sementara",
"%1$s has declined your invitation" : "%1$s telah menolak undangan Anda",
"%1$s has responded to your invitation" : "%1$s telah merespons undangan Anda",
"Invitation updated: %1$s" : "Undangan diperbarui: %1$s",
"%1$s updated the event \"%2$s\"" : "%1$s memperbarui acara \"%2$s\"",
"Invitation: %1$s" : "Undangan: %1$s",
"%1$s would like to invite you to \"%2$s\"" : "%1$s ingin mengundang Anda ke \"%2$s\"",
"Organizer:" : "Penyelenggara:",
"Attendees:" : "Peserta:",
"Title:" : "Judul:",
"When:" : "Kapan:",
"Location:" : "Lokasi:",
"Link:" : "Tautan:",
"Occurring:" : "Berlangsung:",
"Accept" : "Terima",
"Decline" : "Tolak",
"More options …" : "Opsi lainnya …",
"More options at %s" : "Opsi lainnya di %s",
"Monday" : "Senin",
"Tuesday" : "Selasa",
"Wednesday" : "Rabu",
"Thursday" : "Kamis",
"Friday" : "Jumat",
"Saturday" : "Sabtu",
"Sunday" : "Minggu",
"January" : "Januari",
"February" : "Februari",
"March" : "Maret",
"April" : "April",
"May" : "Mei",
"June" : "Juni",
"July" : "Juli",
"August" : "Agustus",
"September" : "September",
"October" : "Oktober",
"November" : "November",
"December" : "Desember",
"First" : "Pertama",
"Second" : "Kedua",
"Third" : "Ketiga",
"Fourth" : "Keempat",
"Fifth" : "Kelima",
"Last" : "Terakhir",
"Second Last" : "Kedua terakhir",
"Third Last" : "Ketiga terakhir",
"Fourth Last" : "Keempat terakhir",
"Fifth Last" : "Kelima terakhir",
"Contacts" : "Kontak",
"{actor} created address book {addressbook}" : "{actor} membuat buku alamat {addressbook}",
"You created address book {addressbook}" : "Anda membuat buku alamat {addressbook}",
"{actor} deleted address book {addressbook}" : "{actor} menghapus buku alamat {addressbook}",
"You deleted address book {addressbook}" : "Anda menghapus buku alamat {addressbook}",
"{actor} updated address book {addressbook}" : "{actor} memperbarui buku alamat {addressbook}",
"You updated address book {addressbook}" : "Anda memperbarui buku alamat {addressbook}",
"{actor} shared address book {addressbook} with you" : "{actor} membagikan buku alamat {addressbook} kepada Anda",
"You shared address book {addressbook} with {user}" : "Anda membagikan buku alamat {addressbook} dengan {user}",
"{actor} shared address book {addressbook} with {user}" : "{actor} membagikan buku alamat {addressbook} dengan {user}",
"{actor} unshared address book {addressbook} from you" : "{actor} membatalkan berbagi buku alamat {addressbook} dari Anda",
"You unshared address book {addressbook} from {user}" : "Anda membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from {user}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari {user}",
"{actor} unshared address book {addressbook} from themselves" : "{actor} membatalkan berbagi buku alamat {addressbook} dari diri mereka sendiri",
"You shared address book {addressbook} with group {group}" : "Anda membagikan buku alamat {addressbook} dengan grup {group}",
"{actor} shared address book {addressbook} with group {group}" : "{actor} membagikan buku alamat {addressbook} dengan grup {group}",
"You unshared address book {addressbook} from group {group}" : "Anda membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} unshared address book {addressbook} from group {group}" : "{actor} membatalkan berbagi buku alamat {addressbook} dari grup {group}",
"{actor} created contact {card} in address book {addressbook}" : "{actor} membuat kontak {card} di buku alamat {addressbook}",
"You created contact {card} in address book {addressbook}" : "Anda membuat kontak {card} di buku alamat {addressbook}",
"{actor} deleted contact {card} from address book {addressbook}" : "{actor} menghapus kontak {card} dari buku alamat {addressbook}",
"You deleted contact {card} from address book {addressbook}" : "Anda menghapus kontak {card} dari buku alamat {addressbook}",
"{actor} updated contact {card} in address book {addressbook}" : "{actor} memperbarui kontak {card} di buku alamat {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Anda memperbarui kontak {card} di buku alamat {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Sebuah <strong>kontak</strong> atau <strong>buku alamat</strong> telah diubah",
"System address book disabled" : "Buku alamat sistem dinonaktifkan",
"The system contacts address book has been automatically disabled during upgrade. This means that the address book will no longer be available to users in the contacts app or other clients. The system contacts address book was disabled because the amount of contacts in the address book exceeded the maximum recommended number of contacts. This limit is set to prevent performance issues. You can re-enable the system address book with the following command {command}" : "Buku alamat kontak sistem telah dinonaktifkan secara otomatis selama peningkatan. Ini berarti buku alamat tersebut tidak akan lagi tersedia bagi pengguna di aplikasi kontak atau klien lain. Buku alamat kontak sistem dinonaktifkan karena jumlah kontak dalam buku alamat melebihi jumlah maksimum kontak yang direkomendasikan. Batas ini ditetapkan untuk mencegah masalah performa. Anda dapat mengaktifkan kembali buku alamat sistem dengan perintah berikut {command}",
"Accounts" : "Accounts",
"System address book which holds all accounts" : "Buku alamat sistem yang menyimpan semua akun",
"File is not updatable: %1$s" : "File tidak dapat diperbarui: %1$s",
"Failed to get storage for file" : "Gagal mendapatkan penyimpanan untuk file",
"Could not write to final file, canceled by hook" : "Tidak dapat menulis ke file akhir, dibatalkan oleh hook",
"Could not write file contents" : "Tidak dapat menulis konten file",
"Error while copying file to target location (copied: %1$s, expected filesize: %2$s)" : "Kesalahan saat menyalin file ke lokasi tujuan (disalin: %1$s, ukuran file yang diharapkan: %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." : "Ukuran file %1$s yang diharapkan adalah %1$s tetapi membaca (dari klien Nextcloud) dan menulis (ke penyimpanan Nextcloud) %2$s. Ini bisa jadi masalah jaringan di sisi pengirim atau masalah saat menulis ke penyimpanan di sisi server.",
"Could not rename part file to final file, canceled by hook" : "Tidak dapat mengganti nama file bagian menjadi file akhir, dibatalkan oleh hook",
"Could not rename part file to final file" : "Tidak dapat mengganti nama file bagian menjadi file akhir",
"Failed to check file size: %1$s" : "Gagal memeriksa ukuran file: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya ada",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Tidak dapat membuka file: %1$s (%2$d), file tampaknya tidak ada",
"Encryption not ready: %1$s" : "Enkripsi belum siap: %1$s",
"Failed to open file: %1$s" : "Gagal membuka file: %1$s",
"Failed to unlink: %1$s" : "Gagal melepas tautan: %1$s",
"Failed to write file contents: %1$s" : "Gagal menulis konten file: %1$s",
"File not found: %1$s" : "File tidak ditemukan: %1$s",
"Invalid target path" : "Jalur tujuan tidak valid",
"System is in maintenance mode." : "Sistem sedang dalam mode pemeliharaan.",
"Upgrade needed" : "Perlu peningkatan",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "%s Anda perlu dikonfigurasi untuk menggunakan HTTPS agar dapat menggunakan CalDAV dan CardDAV dengan iOS/macOS.",
"Configures a CalDAV account" : "Mengonfigurasi akun CalDAV",
"Configures a CardDAV account" : "Mengonfigurasi akun CardDAV",
"Events" : "Acara",
"Untitled task" : "Tugas tanpa judul",
"Completed on %s" : "Selesai pada %s",
"Due on %s by %s" : "Jatuh tempo pada %s oleh %s",
"Due on %s" : "Jatuh tempo pada %s",
"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." : "Selamat datang di Kalender Nextcloud!\n\nIni adalah acara contoh - jelajahi fleksibilitas perencanaan dengan Kalender Nextcloud dengan melakukan perubahan apa pun yang Anda inginkan!\n\nDengan Kalender Nextcloud, Anda dapat:\n- Membuat, mengedit, dan mengelola acara dengan mudah.\n- Membuat beberapa kalender dan membagikannya dengan rekan tim, teman, atau keluarga.\n- Memeriksa ketersediaan dan menampilkan waktu sibuk Anda kepada orang lain.\n- Terintegrasi dengan lancar dengan aplikasi dan perangkat melalui CalDAV.\n- Menyesuaikan pengalaman Anda: jadwalkan acara berulang, sesuaikan notifikasi, dan pengaturan lainnya.",
"Example event - open me!" : "Acara contoh - buka saya!",
"System Address Book" : "Buku Alamat Sistem",
"The system address book contains contact information for all users in your instance." : "Buku alamat sistem berisi informasi kontak untuk semua pengguna di instance Anda.",
"Enable System Address Book" : "Aktifkan Buku Alamat Sistem",
"DAV system address book" : "Buku alamat sistem DAV",
"No outstanding DAV system address book sync." : "Tidak ada sinkronisasi buku alamat sistem DAV yang tertunda.",
"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\"." : "Sinkronisasi buku alamat sistem DAV belum berjalan karena instance Anda memiliki lebih dari 1000 pengguna atau karena terjadi kesalahan. Silakan jalankan secara manual dengan memanggil \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Ukuran buku alamat sistem DAV",
"The system address book is disabled" : "Buku alamat sistem dinonaktifkan",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan, tetapi berisi lebih dari batas yang dikonfigurasi yaitu %d kontak",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "Buku alamat sistem diaktifkan dan berisi kurang dari batas yang dikonfigurasi yaitu %d kontak",
"WebDAV endpoint" : "Endpoint WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Tidak dapat memeriksa apakah web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV. Silakan periksa secara manual.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Peladen web Anda belum diatur sesuai untuk sinkronisasi berkas, karena antarmuka WebDAV tidak berfungsi.",
"Your web server is properly set up to allow file synchronization over WebDAV." : "Web server Anda telah disiapkan dengan benar untuk mengizinkan sinkronisasi file melalui WebDAV.",
"Migrated calendar (%1$s)" : "Kalender termigrasi (%1$s)",
"Calendars including events, details and attendees" : "Kalender termasuk acara, detail, dan peserta",
"Contacts and groups" : "Kontak dan grup",
"WebDAV" : "WebDAV",
"Absence saved" : "Ketidakhadiran disimpan",
"Failed to save your absence settings" : "Gagal menyimpan pengaturan ketidakhadiran Anda",
"Absence cleared" : "Ketidakhadiran dihapus",
"Failed to clear your absence settings" : "Gagal menghapus pengaturan ketidakhadiran Anda",
"First day" : "Hari pertama",
"Last day (inclusive)" : "Hari terakhir (termasuk)",
"Out of office replacement (optional)" : "Pengganti di luar kantor (opsional)",
"Name of the replacement" : "Nama pengganti",
"Short absence status" : "Status ketidakhadiran singkat",
"Long absence Message" : "Pesan ketidakhadiran panjang",
"Save" : "Simpan",
"Disable absence" : "Nonaktifkan ketidakhadiran",
"Failed to load availability" : "Gagal memuat ketersediaan",
"Saved availability" : "Ketersediaan disimpan",
"Failed to save availability" : "Gagal menyimpan ketersediaan",
"to" : "untuk",
"Delete slot" : "Hapus slot",
"No working hours set" : "Tidak ada jam kerja yang ditetapkan",
"Add slot" : "Tambahkan slot",
"Weekdays" : "Hari kerja",
"Pick a start time for {dayName}" : "Pilih waktu mulai untuk {dayName}",
"Pick a end time for {dayName}" : "Pilih waktu selesai untuk {dayName}",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Secara otomatis tetapkan status pengguna menjadi \"Jangan ganggu\" di luar ketersediaan untuk membisukan semua notifikasi.",
"Cancel" : "Batal",
"Import" : "Impor",
"Error while saving settings" : "Kesalahan saat menyimpan pengaturan",
"Contact reset successfully" : "Kontak berhasil direset",
"Error while resetting contact" : "Kesalahan saat mereset kontak",
"Contact imported successfully" : "Kontak berhasil diimpor",
"Error while importing contact" : "Kesalahan saat mengimpor kontak",
"Import contact" : "Impor kontak",
"Reset to default" : "Reset ke default",
"Import contacts" : "Impor kontak",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "Mengunggah file .vcf baru akan menghapus kontak default yang ada dan menggantinya dengan yang baru. Apakah Anda ingin melanjutkan?",
"Failed to save example event creation setting" : "Gagal menyimpan pengaturan pembuatan acara contoh",
"Failed to upload the example event" : "Gagal mengunggah acara contoh",
"Custom example event was saved successfully" : "Acara contoh kustom berhasil disimpan",
"Failed to delete the custom example event" : "Gagal menghapus acara contoh kustom",
"Custom example event was deleted successfully" : "Acara contoh kustom berhasil dihapus",
"Import calendar event" : "Impor acara kalender",
"Uploading a new event will overwrite the existing one." : "Mengunggah acara baru akan menimpa acara yang sudah ada.",
"Upload event" : "Unggah acara",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Instal juga {calendarappstoreopen}aplikasi Kalender{linkclose}, atau {calendardocopen}hubungkan desktop & seluler Anda untuk sinkronisasi ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Pastikan Anda menyiapkan {emailopen}server email{linkclose} dengan benar.",
"Calendar server" : "Server kalender",
"Send invitations to attendees" : "Kirim undangan kepada peserta",
"Automatically generate a birthday calendar" : "Buat kalender ulang tahun secara otomatis",
"Birthday calendars will be generated by a background job." : "Kalender ulang tahun akan dibuat oleh tugas latar belakang.",
"Hence they will not be available immediately after enabling but will show up after some time." : "Karena itu kalender tersebut tidak akan tersedia segera setelah diaktifkan, tetapi akan muncul setelah beberapa waktu.",
"Send notifications for events" : "Kirim notifikasi untuk acara",
"Notifications are sent via background jobs, so these must occur often enough." : "Notifikasi dikirim melalui tugas latar belakang, jadi tugas tersebut harus dijalankan cukup sering.",
"Send reminder notifications to calendar sharees as well" : "Kirim juga notifikasi pengingat kepada pengguna yang dibagikan kalendernya",
"Reminders are always sent to organizers and attendees." : "Pengingat selalu dikirim kepada penyelenggara dan peserta.",
"Enable notifications for events via push" : "Aktifkan notifikasi untuk acara melalui push",
"Example content" : "Konten contoh",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Konten contoh berfungsi untuk menampilkan fitur Nextcloud. Konten default disertakan dengan Nextcloud, dan dapat diganti dengan konten kustom.",
"Availability" : "Ketersediaan",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Jika Anda mengonfigurasi jam kerja, orang lain akan melihat kapan Anda di luar kantor saat mereka memesan rapat.",
"Absence" : "Ketidakhadiran",
"Configure your next absence period." : "Konfigurasikan periode ketidakhadiran Anda berikutnya.",
"There was an error updating your attendance status." : "Terjadi kesalahan saat memperbarui status kehadiran Anda.",
"Please contact the organizer directly." : "Silakan hubungi penyelenggara secara langsung.",
"Are you accepting the invitation?" : "Apakah Anda menerima undangan ini?",
"Tentative" : "Tentatif",
"Your attendance was updated successfully." : "Kehadiran Anda berhasil diperbarui.",
"Could not open file: %1$s, file does seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya ada",
"Could not open file: %1$s, file doesn't seem to exist" : "Tidak dapat membuka file: %1$s, file tampaknya tidak ada",
"No results." : "Tidak ada hasil.",
"Start typing." : "Mulai mengetik.",
"Time zone:" : "Zona waktu:"
},"pluralForm" :"nplurals=1; plural=0;"
}
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de peça para o arquivo final, cancelado pelo hook",
"Could not rename part file to final file" : "Não foi possível renomear o arquivo de peça para o arquivo final",
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "Não foi possível renomear o arquivo de peça para o arquivo final, cancelado pelo hook",
"Could not rename part file to final file" : "Não foi possível renomear o arquivo de peça para o arquivo final",
"Failed to check file size: %1$s" : "Falha ao verificar o tamanho do arquivo: %1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece existir",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "Não foi possível abrir o arquivo: %1$s (%2$d), o arquivo parece não existir",
"Encryption not ready: %1$s" : "A criptografia não está pronta: %1$s",
"Failed to open file: %1$s" : "Falha ao abrir arquivo: %1$s",
"Failed to unlink: %1$s" : "Falha ao desvincular: %1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "无法将部分文件重命名为最终文件,操作被插件取消",
"Could not rename part file to final file" : "无法将部分文件重命名为最终文件",
"Failed to check file size: %1$s" : "检查文件大小失败:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "无法打开文件:%1$s%2$d),文件似乎不存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "无法打开文件:%1$s%2$d),文件似乎不存在",
"Encryption not ready: %1$s" : "加密不可用:%1$s",
"Failed to open file: %1$s" : "打开文件失败:%1$s",
"Failed to unlink: %1$s" : "解除链接失败:%1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "无法将部分文件重命名为最终文件,操作被插件取消",
"Could not rename part file to final file" : "无法将部分文件重命名为最终文件",
"Failed to check file size: %1$s" : "检查文件大小失败:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "无法打开文件:%1$s%2$d),文件似乎不存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "无法打开文件:%1$s%2$d),文件似乎不存在",
"Encryption not ready: %1$s" : "加密不可用:%1$s",
"Failed to open file: %1$s" : "打开文件失败:%1$s",
"Failed to unlink: %1$s" : "解除链接失败:%1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被掛勾取消",
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎不存在",
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被掛勾取消",
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎不存在",
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
+2
View File
@@ -234,6 +234,8 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被連動取消",
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎不存在",
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
+2
View File
@@ -232,6 +232,8 @@
"Could not rename part file to final file, canceled by hook" : "無法將部份檔案重新命名為最終檔案,被連動取消",
"Could not rename part file to final file" : "無法將部份檔案重新命名為最終檔案",
"Failed to check file size: %1$s" : "檢查檔案大小失敗:%1$s",
"Could not open file: %1$s (%2$d), file does seem to exist" : "無法開啟檔案:%1$s (%2$d),檔案似乎存在",
"Could not open file: %1$s (%2$d), file doesn't seem to exist" : "無法開啟檔案:%1$s%2$d),檔案似乎不存在",
"Encryption not ready: %1$s" : "尚未準備好加密:%1$s",
"Failed to open file: %1$s" : "開啟檔案失敗:%1$s",
"Failed to unlink: %1$s" : "解除連結失敗:%1$s",
+1 -1
View File
@@ -217,7 +217,7 @@ class BirthdayService {
$vEvent->DTSTART['VALUE'] = 'DATE';
$vEvent->add('DTEND');
$dtEndDate = (new \DateTime())->setTimestamp($date->getTimeStamp());
$dtEndDate = \DateTime::createFromInterface($date);
$dtEndDate->add(new \DateInterval('P1D'));
$vEvent->DTEND->setDateTime(
$dtEndDate
@@ -126,6 +126,18 @@ class IMipPlugin extends SabreIMipPlugin {
$iTipMessage->scheduleStatus = '5.0; EMail delivery failed';
return;
}
// Check if external attendees are disabled
$externalAttendeesDisabled = $this->config->getValueBool('dav', 'caldav_external_attendees_disabled', false);
if ($externalAttendeesDisabled && !$this->imipService->isSystemUser($recipient)) {
$this->logger->debug('Invitation not sent to external attendee (external attendees disabled)', [
'uid' => $iTipMessage->uid,
'attendee' => $recipient,
]);
$iTipMessage->scheduleStatus = '5.0; External attendees are disabled';
return;
}
$recipientName = $iTipMessage->recipientName ? (string)$iTipMessage->recipientName : null;
$newEvents = $iTipMessage->message;
@@ -875,6 +875,16 @@ class IMipService {
return $dtStart->getDateTime()->getTimeStamp();
}
/**
* Check if an email address belongs to a system user
*
* @param string $email
* @return bool True if the email belongs to a system user, false otherwise
*/
public function isSystemUser(string $email): bool {
return !empty($this->userManager->getByEmail($email));
}
/**
* @param Property $attendee
*/
+161 -109
View File
@@ -1,16 +1,20 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-FileCopyrightText: 2012 entreCables S.L. All rights reserved
* SPDX-License-Identifier: AGPL-3.0-only
* SPDX-FileContributor: Sergio Cambra
* SPDX-License-Identifier: AGPL-3.0-only AND BSD-3-Clause
*/
namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
use OCA\DAV\Upload\UploadFolder;
use OCP\Files\StorageNotAvailableException;
use OCP\Util;
use Sabre\DAV\Exception\InsufficientStorage;
use Sabre\DAV\Exception\ServiceUnavailable;
use Sabre\DAV\IFile;
@@ -19,42 +23,41 @@ use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
/**
* This plugin check user quota and deny creating files when they exceeds the quota.
* This plugin enforces user storage quotas by preventing file operations that would
* exceed the users allotted quota.
*
* @author Sergio Cambra
* @copyright Copyright (C) 2012 entreCables S.L. All rights reserved.
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
* @property-read View $view The Nextcloud file view for quota operations.
*/
class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
/**
* Reference to main server object
* The Sabre\DAV server instance (set during initialize()).
*
* @var \Sabre\DAV\Server
* @var \Sabre\DAV\Server|null
*/
private $server;
private ?\Sabre\DAV\Server $server = null;
/**
* @param View $view
* QuotaPlugin constructor.
*
* @param View $view The Nextcloud Files View instance.
*/
public function __construct(
private $view,
private View $view,
) {
}
/**
* This initializes the plugin.
* Initializes the quota plugin and subscribes to relevant Sabre\DAV server events.
*
* This function is called by \Sabre\DAV\Server, after
* addPlugin is called.
* @link https://sabre.io/dav/writing-plugins/#events
*
* This method should set up the requires event subscriptions.
*
* @param \Sabre\DAV\Server $server
* @param \Sabre\DAV\Server $server The Sabre\DAV server instance.
* @return void
*/
public function initialize(\Sabre\DAV\Server $server) {
public function initialize(\Sabre\DAV\Server $server): void {
$this->server = $server;
// Register event handlers for quota checks on various file operations
$server->on('beforeWriteContent', [$this, 'beforeWriteContent'], 10);
$server->on('beforeCreateFile', [$this, 'beforeCreateFile'], 10);
$server->on('method:MKCOL', [$this, 'onCreateCollection'], 30);
@@ -63,78 +66,91 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
}
/**
* Check quota before creating file
* Checks quota before creating a new file.
* For chunked uploads (with 'Destination' and 'OC-Total-Length'), checks quota for the destination folder.
* Otherwise, checks quota for the parent node plus the new filename.
*
* @param string $uri target file URI
* @param resource $data data
* @param INode $parent Sabre Node
* @param bool $modified modified
* @param string $uri Target file URI (unused).
* @param resource $data The data to write (unused).
* @param INode $parent Parent Sabre node.
* @param bool $modified Whether the node is modified (unused).
* @return bool True if quota is sufficient, otherwise throws InsufficientStorage.
*/
public function beforeCreateFile($uri, $data, INode $parent, $modified) {
public function beforeCreateFile(string $uri, $data, INode $parent, bool $modified): bool {
$request = $this->server->httpRequest;
// Check quota during chunked uploads
if ($parent instanceof UploadFolder && $request->getHeader('Destination')) {
// If chunked upload and Total-Length header is set, use that
// value for quota check. This allows us to also check quota while
// uploading chunks and not only when the file is assembled.
$length = $request->getHeader('OC-Total-Length');
$destinationPath = $this->server->calculateUri($request->getHeader('Destination'));
$totalLength = $request->getHeader('OC-Total-Length');
$destinationUri = $request->getHeader('Destination');
$destinationPath = $this->server->calculateUri($destinationUri);
$quotaPath = $this->getPathForDestination($destinationPath);
if ($quotaPath && is_numeric($length)) {
return $this->checkQuota($quotaPath, (int)$length);
if ($quotaPath && is_numeric($totalLength)) {
return $this->checkQuota($quotaPath, Util::numericToNumber($totalLength));
}
// If quota cannot be checked, allow by default
// NOTE: We can still check during assembly.
return true;
}
if (!$parent instanceof Node) {
return;
// No quota check for non-Node parents
return true;
}
return $this->checkQuota($parent->getPath() . '/' . basename($uri));
$filePath = $parent->getPath() . '/' . basename($uri);
return $this->checkQuota($filePath);
}
/**
* Check quota before creating directory
* Checks quota before creating a new collection (directory) via MKCOL.
* Assumes a fixed size (4096 bytes) for quota check as MKCOL lacks a Content-Length header.
*
* @param RequestInterface $request
* @param ResponseInterface $response
* @return bool
* @throws InsufficientStorage
* @throws \Sabre\DAV\Exception\Forbidden
* @param RequestInterface $request The HTTP request for the MKCOL operation.
* @param ResponseInterface $response The HTTP response object.
* @return bool True if there is enough quota, otherwise throws InsufficientStorage or \Sabre\DAV\Exception\Forbidden (?).
*/
public function onCreateCollection(RequestInterface $request, ResponseInterface $response): bool {
try {
$destinationPath = $this->server->calculateUri($request->getUrl());
$quotaPath = $this->getPathForDestination($destinationPath);
$collectionPath = $this->getPathForDestination($destinationPath);
} catch (\Exception $e) {
return true;
// Optionally log: e.g. ('Quota check failed during onCreateCollection: ' . $e->getMessage());
return true; // Quota cannot be checked, allow by default
}
if ($quotaPath) {
// MKCOL does not have a Content-Length header, so we can use
// a fixed value for the quota check.
return $this->checkQuota($quotaPath, 4096, true);
if ($collectionPath) {
// Default directory size for quota check since MKCOL doesn't specify one
return $this->checkQuota($collectionPath, 4096, true);
}
return true;
return true; // No path to check, allow by default
}
/**
* Check quota before writing content
* Checks quota before writing content to a node.
*
* @param string $uri target file URI
* @param INode $node Sabre Node
* @param resource $data data
* @param bool $modified modified
* @param string $uri Target file URI (unused).
* @param INode $node Sabre node to which content will be written.
* @param resource $data Content data (unused).
* @param bool $modified Whether the node is modified (unused).
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
*/
public function beforeWriteContent($uri, INode $node, $data, $modified) {
public function beforeWriteContent(string $uri, INode $node, $data, bool $modified): bool {
if (!$node instanceof Node) {
return;
// No quota check for non-Node objects
return true;
}
return $this->checkQuota($node->getPath());
}
/**
* Check if we're moving a FutureFile in which case we need to check
* the quota on the target destination.
* Checks quota before moving a FutureFile node to a new destination.
*
* @param string $sourcePath Path to the source node.
* @param string $destinationPath Path where the node will be moved to.
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
*/
public function beforeMove(string $sourcePath, string $destinationPath): bool {
$sourceNode = $this->server->tree->getNodeForPath($sourcePath);
@@ -143,17 +159,22 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
}
try {
// The final path is not known yet, we check the quota on the parent
$path = $this->getPathForDestination($destinationPath);
// The final path is not known yet, check quota on the parent of the destination
$quotaPath = $this->getPathForDestination($destinationPath);
} catch (\Exception $e) {
// Optionally log: e.g. ('Quota check failed during beforeMove: ' . $e->getMessage());
return true;
}
return $this->checkQuota($path, $sourceNode->getSize());
return $this->checkQuota($quotaPath, $sourceNode->getSize());
}
/**
* Check quota on the target destination before a copy.
* Checks quota before allowing a file copy operation.
*
* @param string $sourcePath Path to the source node.
* @param string $destinationPath Path where the node will be copied to.
* @return bool True if there is enough quota, otherwise throws InsufficientStorage.
*/
public function beforeCopy(string $sourcePath, string $destinationPath): bool {
$sourceNode = $this->server->tree->getNodeForPath($sourcePath);
@@ -162,101 +183,132 @@ class QuotaPlugin extends \Sabre\DAV\ServerPlugin {
}
try {
$path = $this->getPathForDestination($destinationPath);
$quotaPath = $this->getPathForDestination($destinationPath);
} catch (\Exception $e) {
// Optionally log: e.g. ('Quota check failed during beforeCopy: ' . $e->getMessage());
return true;
}
return $this->checkQuota($path, $sourceNode->getSize());
return $this->checkQuota($quotaPath, $sourceNode->getSize());
}
/**
* Resolves the path for quota checking, given a destination path.
*
* If the destination node exists, returns its internal path.
* If it does not exist, returns the internal path of its parent node.
* Throws an exception if the relevant node is not a valid Node instance.
*
* @param string $destinationPath Destination path within the virtual file tree.
* @return string Internal path to use for quota checking.
* @throws \Exception If the destination or parent node is not a valid Node.
*/
private function getPathForDestination(string $destinationPath): string {
// get target node for proper path conversion
// If the node exists, return its actual path
if ($this->server->tree->nodeExists($destinationPath)) {
$destinationNode = $this->server->tree->getNodeForPath($destinationPath);
if (!$destinationNode instanceof Node) {
throw new \Exception('Invalid destination node');
throw new \Exception("Destination node at '$destinationPath' is not a valid Node instance.");
}
return $destinationNode->getPath();
}
// Otherwise, use the parent directory's path
$parent = dirname($destinationPath);
if ($parent === '.') {
$parent = '';
}
$parent = ($parent === '.') ? '' : $parent;
$parentNode = $this->server->tree->getNodeForPath($parent);
if (!$parentNode instanceof Node) {
throw new \Exception('Invalid destination node');
throw new \Exception("Parent node at '$parent' is not a valid Node instance.");
}
return $parentNode->getPath();
}
/**
* This method is called before any HTTP method and validates there is enough free space to store the file
* Validates there is enough free space to store the file at the given path.
*
* @param string $path relative to the users home
* @param int|float|null $length
* Called before relevant HTTP DAV events (when there is an associated View).
* @see initialize() for specific events we're registered for.
*
* @internal
* @param string $path Path relative to the user's home.
* @param int|float|null $length Size to check for, or null to auto-detect.
* @param bool $isDir Whether the target is a directory.
* @throws InsufficientStorage
* @return bool
* @return bool True if there is enough space, otherwise throws.
*/
public function checkQuota(string $path, $length = null, $isDir = false) {
public function checkQuota(string $path, int|float|null $length = null, bool $isDir = false): bool {
// Auto-detect length if not provided
if ($length === null) {
$length = $this->getLength();
}
if (empty($length)) {
return true; // No length to check, assume okay
}
if ($length) {
[$parentPath, $newName] = \Sabre\Uri\split($path);
if (is_null($parentPath)) {
$parentPath = '';
}
$req = $this->server->httpRequest;
$normalizedPath = str_replace('//', '/', $path);
$freeSpace = $this->getFreeSpace($normalizedPath);
// Strip any duplicate slashes
$path = str_replace('//', '/', $path);
// Explicitly handle unknown/invalid free space
if ($freeSpace === false || $freeSpace < 0) {
// You might log here; currently allows the operation
return true;
}
$freeSpace = $this->getFreeSpace($path);
if ($freeSpace >= 0 && $length > $freeSpace) {
if ($isDir) {
throw new InsufficientStorage("Insufficient space in $path. $freeSpace available. Cannot create directory");
}
throw new InsufficientStorage("Insufficient space in $path, $length required, $freeSpace available");
}
if ($length > $freeSpace) {
$msg = $isDir
? "Insufficient space in $normalizedPath. $freeSpace available. Cannot create directory"
: "Insufficient space in $normalizedPath, $length required, $freeSpace available";
throw new InsufficientStorage($msg);
}
return true;
}
public function getLength() {
$req = $this->server->httpRequest;
$length = $req->getHeader('X-Expected-Entity-Length');
if (!is_numeric($length)) {
$length = $req->getHeader('Content-Length');
$length = is_numeric($length) ? $length : null;
}
/**
* Returns the largest valid content length found in any of the following HTTP headers:
* - X-Expected-Entity-Length
* - Content-Length
* - OC-Total-Length
*
* Only numeric values are considered. If none of the headers contain a valid numeric value,
* returns null.
*
* @internal
* @return int|float|null The largest valid content length, or null if none is found.
*/
public function getLength(): int|float|null {
$request = $this->server->httpRequest;
$ocLength = $req->getHeader('OC-Total-Length');
if (!is_numeric($ocLength)) {
return $length;
}
if (!is_numeric($length)) {
return $ocLength;
}
return max($length, $ocLength);
// Get headers as strings
$expectedLength = $request->getHeader('X-Expected-Entity-Length');
$contentLength = $request->getHeader('Content-Length');
$ocTotalLength = $request->getHeader('OC-Total-Length');
// Filter out non-numeric values, use Util::numericToNumber for safe conversion
$lengths = array_filter([
is_numeric($expectedLength) ? Util::numericToNumber($expectedLength) : null,
is_numeric($contentLength) ? Util::numericToNumber($contentLength) : null,
is_numeric($ocTotalLength) ? Util::numericToNumber($ocTotalLength) : null,
], fn ($v) => $v !== null);
// Return the largest valid length, or null if none
return !empty($lengths) ? max($lengths) : null;
}
/**
* @param string $uri
* @return mixed
* @throws ServiceUnavailable
* Returns the available free space for the given URI.
*
* TODO: `false` can probably be dropped here, if not now when free_space is cleaned up.
*
* @param string $uri The resource URI whose free space is being queried.
* @return int|float|false The amount of free space in bytes,
* @throws ServiceUnavailable If the underlying storage is not available.
*/
public function getFreeSpace($uri) {
private function getFreeSpace(string $uri): int|float|false {
try {
$freeSpace = $this->view->free_space(ltrim($uri, '/'));
return $freeSpace;
return $this->view->free_space(ltrim($uri, '/'));
} catch (StorageNotAvailableException $e) {
throw new ServiceUnavailable($e->getMessage());
}
+2 -1
View File
@@ -150,12 +150,13 @@ class Server extends \Sabre\DAV\Server {
string $pluginName,
string $eventName,
): callable {
$connection = \OCP\Server::get(Connection::class);
return function (PropFind $propFind, INode $node) use (
$callBack,
$pluginName,
$eventName,
$connection,
): bool {
$connection = \OCP\Server::get(Connection::class);
$queriesBefore = $connection->getStats()['executed'];
$result = $callBack($propFind, $node);
$queriesAfter = $connection->getStats()['executed'];
@@ -103,6 +103,7 @@ class ServerFactory {
$server->addPlugin(new LockPlugin());
$server->addPlugin(new RequestIdHeaderPlugin($this->request));
$server->addPlugin(new UserIdHeaderPlugin($this->userSession));
$server->addPlugin(new ZipFolderPlugin(
$tree,
@@ -261,6 +261,14 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
return true;
}
}
// if the share recipient is allow to delete from the share, they are allowed to move the file out of the share
// the user moving the file out of the share to their home storage would give them share permissions and allow moving into the share
//
// since the 2-step move is allowed, we also allow both steps at once
if ($sourceNode->isDeletable()) {
return true;
}
}
throw new Forbidden('You cannot move a non-shareable node into a share');
+1 -1
View File
@@ -123,7 +123,7 @@ class TagsPlugin extends \Sabre\DAV\ServerPlugin {
$isFav = false;
$tags = $this->getTags($fileId);
if ($tags) {
$favPos = array_search(self::TAG_FAVORITE, $tags);
$favPos = array_search(self::TAG_FAVORITE, $tags, true);
if ($favPos !== false) {
$isFav = true;
unset($tags[$favPos]);
@@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\DAV\Connector\Sabre;
use OCP\IUserSession;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
class UserIdHeaderPlugin extends \Sabre\DAV\ServerPlugin {
public function __construct(
private readonly IUserSession $userSession,
) {
}
public function initialize(\Sabre\DAV\Server $server): void {
$server->on('afterMethod:*', [$this, 'afterMethod']);
}
/**
* Add the request id as a header in the response
*
* @param RequestInterface $request request
* @param ResponseInterface $response response
*/
public function afterMethod(RequestInterface $request, ResponseInterface $response): void {
if ($user = $this->userSession->getUser()) {
$response->setHeader('X-User-Id', $user->getUID());
}
}
}
+2
View File
@@ -51,6 +51,7 @@ use OCA\DAV\Connector\Sabre\QuotaPlugin;
use OCA\DAV\Connector\Sabre\RequestIdHeaderPlugin;
use OCA\DAV\Connector\Sabre\SharesPlugin;
use OCA\DAV\Connector\Sabre\TagsPlugin;
use OCA\DAV\Connector\Sabre\UserIdHeaderPlugin;
use OCA\DAV\Connector\Sabre\ZipFolderPlugin;
use OCA\DAV\DAV\CustomPropertiesBackend;
use OCA\DAV\DAV\PublicAuth;
@@ -244,6 +245,7 @@ class Server {
// performance improvement plugins
$this->server->addPlugin(new CopyEtagHeaderPlugin());
$this->server->addPlugin(new RequestIdHeaderPlugin(\OCP\Server::get(IRequest::class)));
$this->server->addPlugin(new UserIdHeaderPlugin(\OCP\Server::get(IUserSession::class)));
$this->server->addPlugin(new UploadAutoMkcolPlugin());
$this->server->addPlugin(new ChunkingV2Plugin(\OCP\Server::get(ICacheFactory::class)));
$this->server->addPlugin(new ChunkingPlugin());
@@ -18,7 +18,9 @@ class ExternalCalendarTest extends TestCase {
parent::setUp();
$this->abstractExternalCalendar
= $this->getMockForAbstractClass(ExternalCalendar::class, ['example-app-id', 'calendar-uri-in-backend']);
= $this->getMockBuilder(ExternalCalendar::class)
->setConstructorArgs(['example-app-id', 'calendar-uri-in-backend'])
->getMock();
}
public function testGetName():void {
@@ -130,6 +130,10 @@ class IMipPluginTest extends TestCase {
$message->senderName = 'Mr. Wizard';
$message->recipient = 'mailto:' . 'frodo@hobb.it';
$message->significantChange = false;
$this->config->expects(self::never())
->method('getValueBool');
$this->plugin->schedule($message);
$this->assertEquals('1.0', $message->getScheduleStatus());
}
@@ -177,6 +181,12 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, false],
]);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
@@ -280,6 +290,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::once())
->method('getValueBool')
->with('dav', 'caldav_external_attendees_disabled', false)
->willReturn(false);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
@@ -354,6 +368,10 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::once())
->method('getValueBool')
->with('dav', 'caldav_external_attendees_disabled', false)
->willReturn(false);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => null]);
@@ -455,6 +473,12 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, false],
]);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['old' => [] ,'new' => [$newVevent]]);
@@ -695,6 +719,12 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, true],
]);
$this->service->expects(self::once())
->method('getCurrentAttendee')
->with($message)
@@ -837,10 +867,12 @@ class IMipPluginTest extends TestCase {
->method('getValueString')
->with('dav', 'invitation_link_recipients', 'yes')
->willReturn('yes');
$this->config->expects(self::once())
$this->config->expects(self::exactly(2))
->method('getValueBool')
->with('core', 'mail_providers_enabled', true)
->willReturn(false);
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, false],
]);
$this->service->expects(self::once())
->method('createInvitationToken')
->with($message, $newVevent, 1496912700)
@@ -888,6 +920,12 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, false],
]);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->with($newVCalendar, null)
@@ -981,6 +1019,12 @@ class IMipPluginTest extends TestCase {
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, false],
['core', 'mail_providers_enabled', true, false],
]);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->with($newVCalendar, null)
@@ -1040,4 +1084,156 @@ class IMipPluginTest extends TestCase {
$this->plugin->schedule($message);
$this->assertEquals('1.1', $message->getScheduleStatus());
}
public function testExternalAttendeesDisabledForExternalUser(): void {
$message = new Message();
$message->method = 'REQUEST';
$newVCalendar = new VCalendar();
$newVevent = new VEvent($newVCalendar, 'one', array_merge([
'UID' => 'uid-1234',
'SEQUENCE' => 1,
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
], []));
$newVevent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
$newVevent->add('ATTENDEE', 'mailto:external@example.com', ['RSVP' => 'TRUE', 'CN' => 'External User']);
$message->message = $newVCalendar;
$message->sender = 'mailto:gandalf@wiz.ard';
$message->senderName = 'Mr. Wizard';
$message->recipient = 'mailto:external@example.com';
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::once())
->method('getValueBool')
->with('dav', 'caldav_external_attendees_disabled', false)
->willReturn(true);
$this->service->expects(self::once())
->method('isSystemUser')
->with('external@example.com')
->willReturn(false);
$this->eventComparisonService->expects(self::never())
->method('findModified');
$this->service->expects(self::never())
->method('getCurrentAttendee');
$this->mailer->expects(self::never())
->method('send');
$this->plugin->schedule($message);
$this->assertEquals('5.0', $message->getScheduleStatus());
}
public function testExternalAttendeesDisabledForSystemUser(): void {
$message = new Message();
$message->method = 'REQUEST';
$newVCalendar = new VCalendar();
$newVevent = new VEvent($newVCalendar, 'one', array_merge([
'UID' => 'uid-1234',
'SEQUENCE' => 1,
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
], []));
$newVevent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
$newVevent->add('ATTENDEE', 'mailto:frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']);
$message->message = $newVCalendar;
$message->sender = 'mailto:gandalf@wiz.ard';
$message->senderName = 'Mr. Wizard';
$message->recipient = 'mailto:frodo@hobb.it';
$oldVCalendar = new VCalendar();
$oldVEvent = new VEvent($oldVCalendar, 'one', [
'UID' => 'uid-1234',
'SEQUENCE' => 0,
'SUMMARY' => 'Fellowship meeting',
'DTSTART' => new \DateTime('2016-01-01 00:00:00')
]);
$oldVEvent->add('ORGANIZER', 'mailto:gandalf@wiz.ard');
$oldVEvent->add('ATTENDEE', 'mailto:frodo@hobb.it', ['RSVP' => 'TRUE', 'CN' => 'Frodo']);
$oldVCalendar->add($oldVEvent);
$data = ['invitee_name' => 'Mr. Wizard',
'meeting_title' => 'Fellowship meeting',
'attendee_name' => 'frodo@hobb.it'
];
$attendees = $newVevent->select('ATTENDEE');
$atnd = '';
foreach ($attendees as $attendee) {
if (strcasecmp($attendee->getValue(), $message->recipient) === 0) {
$atnd = $attendee;
}
}
$this->plugin->setVCalendar($oldVCalendar);
$this->service->expects(self::once())
->method('getLastOccurrence')
->willReturn(1496912700);
$this->config->expects(self::exactly(2))
->method('getValueBool')
->willReturnMap([
['dav', 'caldav_external_attendees_disabled', false, true],
['core', 'mail_providers_enabled', true, false],
]);
$this->service->expects(self::once())
->method('isSystemUser')
->with('frodo@hobb.it')
->willReturn(true);
$this->eventComparisonService->expects(self::once())
->method('findModified')
->willReturn(['new' => [$newVevent], 'old' => [$oldVEvent]]);
$this->service->expects(self::once())
->method('getCurrentAttendee')
->with($message)
->willReturn($atnd);
$this->service->expects(self::once())
->method('isRoomOrResource')
->with($atnd)
->willReturn(false);
$this->service->expects(self::once())
->method('isCircle')
->with($atnd)
->willReturn(false);
$this->service->expects(self::once())
->method('buildBodyData')
->with($newVevent, $oldVEvent)
->willReturn($data);
$this->user->expects(self::any())
->method('getUID')
->willReturn('user1');
$this->user->expects(self::any())
->method('getDisplayName')
->willReturn('Mr. Wizard');
$this->userSession->expects(self::any())
->method('getUser')
->willReturn($this->user);
$this->service->expects(self::once())
->method('getFrom');
$this->service->expects(self::once())
->method('addSubjectAndHeading')
->with($this->emailTemplate, 'request', 'Mr. Wizard', 'Fellowship meeting', true);
$this->service->expects(self::once())
->method('addBulletList')
->with($this->emailTemplate, $newVevent, $data);
$this->service->expects(self::once())
->method('getAttendeeRsvpOrReqForParticipant')
->willReturn(true);
$this->config->expects(self::once())
->method('getValueString')
->with('dav', 'invitation_link_recipients', 'yes')
->willReturn('yes');
$this->service->expects(self::once())
->method('createInvitationToken')
->with($message, $newVevent, 1496912700)
->willReturn('token');
$this->service->expects(self::once())
->method('addResponseButtons')
->with($this->emailTemplate, 'token');
$this->service->expects(self::once())
->method('addMoreOptionsButton')
->with($this->emailTemplate, 'token');
$this->mailer->expects(self::once())
->method('send')
->willReturn([]);
$this->plugin->schedule($message);
$this->assertEquals('1.1', $message->getScheduleStatus());
}
}
@@ -161,6 +161,31 @@ class IMipServiceTest extends TestCase {
$this->assertEquals($expected, $actual);
}
public function testIsSystemUserWhenUserExists(): void {
$email = 'user@example.com';
$user = $this->createMock(\OCP\IUser::class);
$this->userManager->expects(self::once())
->method('getByEmail')
->with($email)
->willReturn([$user]);
$result = $this->service->isSystemUser($email);
$this->assertTrue($result);
}
public function testIsSystemUserWhenUserDoesNotExist(): void {
$email = 'external@example.com';
$this->userManager->expects(self::once())
->method('getByEmail')
->with($email)
->willReturn([]);
$result = $this->service->isSystemUser($email);
$this->assertFalse($result);
}
public function testBuildBodyDataCreated(): void {
// construct l10n return(s)
@@ -19,7 +19,7 @@ class QuotaPluginTest extends TestCase {
private QuotaPlugin $plugin;
private function init(int $quota, string $checkedPath = ''): void {
$view = $this->buildFileViewMock((string)$quota, $checkedPath);
$view = $this->buildFileViewMock($quota, $checkedPath);
$this->server = new \Sabre\DAV\Server();
$this->plugin = new QuotaPlugin($view);
$this->plugin->initialize($this->server);
@@ -136,7 +136,14 @@ class QuotaPluginTest extends TestCase {
];
}
private function buildFileViewMock(string $quota, string $checkedPath): View {
/**
* Build a mock for the View class with a controlled free_space() response.
*
* @param int|float|false $quota The quota value to return from free_space().
* @param string $checkedPath The path expected as a parameter to free_space().
* @return View&\PHPUnit\Framework\MockObject\MockObject
*/
private function buildFileViewMock(int|float|false $quota, string $checkedPath): View {
// mock filesystem
$view = $this->getMockBuilder(View::class)
->onlyMethods(['free_space'])
-32
View File
@@ -1,32 +0,0 @@
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2014-2015 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
/**
* @namespace OC
*/
OC.Encryption = _.extend(OC.Encryption || {}, {
displayEncryptionWarning: function() {
if (!OC.currentUser || !OC.Notification.isHidden()) {
return
}
$.get(
OC.generateUrl('/apps/encryption/ajax/getStatus'),
function(result) {
if (result.status === 'interactionNeeded') {
OC.Notification.show(result.data.message)
}
},
)
},
})
window.addEventListener('DOMContentLoaded', function() {
// wait for other apps/extensions to register their event handlers and file actions
// in the "ready" clause
_.defer(function() {
OC.Encryption.displayEncryptionWarning()
})
})
-80
View File
@@ -1,80 +0,0 @@
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
window.addEventListener('DOMContentLoaded', function() {
$('input:button[name="enableRecoveryKey"]').click(function() {
const recoveryStatus = $(this).attr('status')
const newRecoveryStatus = (1 + parseInt(recoveryStatus)) % 2
const buttonValue = $(this).attr('value')
const recoveryPassword = $('#encryptionRecoveryPassword').val()
const confirmPassword = $('#repeatEncryptionRecoveryPassword').val()
OC.msg.startSaving('#encryptionSetRecoveryKey .msg')
$.post(
OC.generateUrl('/apps/encryption/ajax/adminRecovery'),
{
adminEnableRecovery: newRecoveryStatus,
recoveryPassword,
confirmPassword,
},
).done(function(data) {
OC.msg.finishedSuccess('#encryptionSetRecoveryKey .msg', data.data.message)
if (newRecoveryStatus === 0) {
$('p[name="changeRecoveryPasswordBlock"]').addClass('hidden')
$('input:button[name="enableRecoveryKey"]').attr('value', 'Enable recovery key')
$('input:button[name="enableRecoveryKey"]').attr('status', '0')
} else {
$('input:password[name="changeRecoveryPassword"]').val('')
$('p[name="changeRecoveryPasswordBlock"]').removeClass('hidden')
$('input:button[name="enableRecoveryKey"]').attr('value', 'Disable recovery key')
$('input:button[name="enableRecoveryKey"]').attr('status', '1')
}
})
.fail(function(jqXHR) {
$('input:button[name="enableRecoveryKey"]').attr('value', buttonValue)
$('input:button[name="enableRecoveryKey"]').attr('status', recoveryStatus)
OC.msg.finishedError('#encryptionSetRecoveryKey .msg', JSON.parse(jqXHR.responseText).data.message)
})
})
$('#repeatEncryptionRecoveryPassword').keyup(function(event) {
if (event.keyCode == 13) {
$('#enableRecoveryKey').click()
}
})
// change recovery password
$('button:button[name="submitChangeRecoveryKey"]').click(function() {
const oldRecoveryPassword = $('#oldEncryptionRecoveryPassword').val()
const newRecoveryPassword = $('#newEncryptionRecoveryPassword').val()
const confirmNewPassword = $('#repeatedNewEncryptionRecoveryPassword').val()
OC.msg.startSaving('#encryptionChangeRecoveryKey .msg')
$.post(
OC.generateUrl('/apps/encryption/ajax/changeRecoveryPassword'),
{
oldPassword: oldRecoveryPassword,
newPassword: newRecoveryPassword,
confirmPassword: confirmNewPassword,
},
).done(function(data) {
OC.msg.finishedSuccess('#encryptionChangeRecoveryKey .msg', data.data.message)
})
.fail(function(jqXHR) {
OC.msg.finishedError('#encryptionChangeRecoveryKey .msg', JSON.parse(jqXHR.responseText).data.message)
})
})
$('#encryptHomeStorage').change(function() {
$.post(
OC.generateUrl('/apps/encryption/ajax/setEncryptHomeStorage'),
{
encryptHomeStorage: this.checked,
},
)
})
})
-64
View File
@@ -1,64 +0,0 @@
/**
* SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2013-2015 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
OC.Encryption = _.extend(OC.Encryption || {}, {
updatePrivateKeyPassword: function() {
const oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val()
const newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val()
OC.msg.startSaving('#ocDefaultEncryptionModule .msg')
$.post(
OC.generateUrl('/apps/encryption/ajax/updatePrivateKeyPassword'),
{
oldPassword: oldPrivateKeyPassword,
newPassword: newPrivateKeyPassword,
},
).done(function(data) {
OC.msg.finishedSuccess('#ocDefaultEncryptionModule .msg', data.message)
}).fail(function(jqXHR) {
OC.msg.finishedError('#ocDefaultEncryptionModule .msg', JSON.parse(jqXHR.responseText).message)
})
},
})
window.addEventListener('DOMContentLoaded', function() {
// Trigger ajax on recoveryAdmin status change
$('input:radio[name="userEnableRecovery"]').change(function() {
const recoveryStatus = $(this).val()
OC.msg.startAction('#userEnableRecovery .msg', 'Updating recovery keys. This can take some time...')
$.post(
OC.generateUrl('/apps/encryption/ajax/userSetRecovery'),
{
userEnableRecovery: recoveryStatus,
},
).done(function(data) {
OC.msg.finishedSuccess('#userEnableRecovery .msg', data.data.message)
})
.fail(function(jqXHR) {
OC.msg.finishedError('#userEnableRecovery .msg', JSON.parse(jqXHR.responseText).data.message)
})
// Ensure page is not reloaded on form submit
return false
})
// update private key password
$('input:password[name="changePrivateKeyPassword"]').keyup(function(event) {
const oldPrivateKeyPassword = $('input:password[id="oldPrivateKeyPassword"]').val()
const newPrivateKeyPassword = $('input:password[id="newPrivateKeyPassword"]').val()
if (newPrivateKeyPassword !== '' && oldPrivateKeyPassword !== '') {
$('button:button[name="submitChangePrivateKeyPassword"]').removeAttr('disabled')
if (event.which === 13) {
OC.Encryption.updatePrivateKeyPassword()
}
} else {
$('button:button[name="submitChangePrivateKeyPassword"]').attr('disabled', 'true')
}
})
$('button:button[name="submitChangePrivateKeyPassword"]').click(function() {
OC.Encryption.updatePrivateKeyPassword()
})
})
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "لم يُمكن تفعيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
"Recovery key successfully disabled" : "تمّ بنجاح تعطيل مفتاح الاستعادة ",
"Could not disable recovery key. Please check your recovery key password!" : "لم يُمكن تعطيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
"Missing parameters" : "المعاملات ناقصة",
"Please provide the old recovery password" : "يرجى إعطاء كلمة مرور الاستعادة القديمة",
"Please provide a new recovery password" : "يرجى إعطاء كلمة مرور جديدة للاستعادة",
"Please repeat the new recovery password" : "يرجى تكرار كلمة مرور الاستعادة الجديدة",
@@ -34,32 +33,34 @@ OC.L10N.register(
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "يرجى تسجيل الدخول إلى واجهة الويب، و الانتقال إلى قسم \"الأمان\" Security في إعداداتك الشخصية وتحديث كلمة مرور التشفير الخاصة بك عن طريق إدخال كلمة المرور هذه في حقل \"كلمة مرور تسجيل الدخول القديمة\" Old login password،و كلمة مرور تسجيل الدخول الحالية.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
"Enable recovery key" : "تمكين مفتاح الاستعادة",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Disable recovery key" : "تعطيل مفتاح الاستعادة",
"Enable recovery key" : "تمكين مفتاح الاستعادة",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "مفتاح الاسترداد هو مفتاح تشفير إضافي يستخدم لتشفير الملفات. يتم استخدامه لاستعادة الملفات من الحساب في حالة نسيان كلمة المرور.",
"Recovery key password" : "استعادة كلمة مرور المفتاح",
"Repeat recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة",
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
"Old recovery key password" : "كلمة مرور مفتاح الاستعادة القديمة",
"New recovery key password" : "كلمة مرور جديدة لمفتاح الاستعادة",
"Repeat new recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة الجديدة",
"Change Password" : "تعديل كلمة المرور",
"Basic encryption module" : "وحدة التشفير الأساسية",
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
"If you do not remember your old password you can ask your administrator to recover your files." : "إذا كنت لا تتذكر كلمة مرورك القديمة، فيمكنك أن تطلب من المشرف استرداد ملفاتك.",
"Old log-in password" : "كلمة المرور القديمة الخاصة بالدخول",
"Current log-in password" : "كلمة المرور الحالية الخاصة بالدخول",
"Update" : "تحديث",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Basic encryption module" : "وحدة التشفير الأساسية",
"Missing parameters" : "المعاملات ناقصة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
"Change Password" : "تعديل كلمة المرور",
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
"Update Private Key Password" : "تحديث كلمة المرور لـ المفتاح الخاص",
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Enabled" : "مفعلة",
"Disabled" : "معطلة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
"Disabled" : "معطلة"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "لم يُمكن تفعيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
"Recovery key successfully disabled" : "تمّ بنجاح تعطيل مفتاح الاستعادة ",
"Could not disable recovery key. Please check your recovery key password!" : "لم يُمكن تعطيل مفتاح الاستعادة. يرجى التحقق من كلمة مرور مفتاح الاستعادة!",
"Missing parameters" : "المعاملات ناقصة",
"Please provide the old recovery password" : "يرجى إعطاء كلمة مرور الاستعادة القديمة",
"Please provide a new recovery password" : "يرجى إعطاء كلمة مرور جديدة للاستعادة",
"Please repeat the new recovery password" : "يرجى تكرار كلمة مرور الاستعادة الجديدة",
@@ -32,32 +31,34 @@
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "يرجى تسجيل الدخول إلى واجهة الويب، و الانتقال إلى قسم \"الأمان\" Security في إعداداتك الشخصية وتحديث كلمة مرور التشفير الخاصة بك عن طريق إدخال كلمة المرور هذه في حقل \"كلمة مرور تسجيل الدخول القديمة\" Old login password،و كلمة مرور تسجيل الدخول الحالية.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذّر فك تشفير هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "تعذرت قراءة هذا الملف؛ ربما يكون ملفّاً مُشتركاً. رجاءً، أطلب من مالك الملف إلغاء مشاركته معك.",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "يؤدي تمكين هذا الخيار إلى تشفير جميع الملفات المخزنة على وحدة التخزين الرئيسية، وإلا فسيتم تشفير الملفات الموجودة على وحدة التخزين الخارجية فقط",
"Enable recovery key" : "تمكين مفتاح الاستعادة",
"Encrypt the home storage" : "تشفير وحدة التخزين الأساسية",
"Disable recovery key" : "تعطيل مفتاح الاستعادة",
"Enable recovery key" : "تمكين مفتاح الاستعادة",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "مفتاح الاسترداد هو مفتاح تشفير إضافي يستخدم لتشفير الملفات. يتم استخدامه لاستعادة الملفات من الحساب في حالة نسيان كلمة المرور.",
"Recovery key password" : "استعادة كلمة مرور المفتاح",
"Repeat recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة",
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
"Old recovery key password" : "كلمة مرور مفتاح الاستعادة القديمة",
"New recovery key password" : "كلمة مرور جديدة لمفتاح الاستعادة",
"Repeat new recovery key password" : "أعد كتابة كلمة مرور مفتاح الاستعادة الجديدة",
"Change Password" : "تعديل كلمة المرور",
"Basic encryption module" : "وحدة التشفير الأساسية",
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
"If you do not remember your old password you can ask your administrator to recover your files." : "إذا كنت لا تتذكر كلمة مرورك القديمة، فيمكنك أن تطلب من المشرف استرداد ملفاتك.",
"Old log-in password" : "كلمة المرور القديمة الخاصة بالدخول",
"Current log-in password" : "كلمة المرور الحالية الخاصة بالدخول",
"Update" : "تحديث",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Default encryption module" : "وحدة التشفير الافتراضية",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "تم تمكين تطبيق التشفير، ولكن لم تتم تهيئة المفاتيح الخاصة بك. يرجى تسجيل الخروج ثم تسجيل الدخول من جديد.",
"Basic encryption module" : "وحدة التشفير الأساسية",
"Missing parameters" : "المعاملات ناقصة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم.",
"Change recovery key password:" : "تعديل كلمة المرور استعادة المفتاح:",
"Change Password" : "تعديل كلمة المرور",
"Your private key password no longer matches your log-in password." : "لم تعد كلمة مرور المفتاح الخاص تطابق كلمة مرور تسجيل الدخول الخاصة بك.",
"Set your old private key password to your current log-in password:" : "قم بتعيين كلمة مرور المفتاح الخاص القديم على كلمة مرور تسجيل الدخول الحالية:",
"Update Private Key Password" : "تحديث كلمة المرور لـ المفتاح الخاص",
"Enable password recovery:" : "تفعيل استعادة كلمة المرور:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "تفعيل هذا الخيار يمكنك من اعادة الوصول الى ملفاتك المشفرة عند فقدان كلمة المرور",
"Enabled" : "مفعلة",
"Disabled" : "معطلة",
"Default encryption module for server-side encryption" : "وحدة التشفير الافتراضية للتشفير من جانب الخادم",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "لاستخدام وحدة التشفير هذه ، تحتاج إلى تمكين التشفير من جانب الخادم في إعدادات المدير. بمجرد تمكين هذه الوحدة ، ستقوم بتشفير جميع ملفاتك بشفافية. يعتمد التشفير على مفاتيح AES 256. لن تلمس الوحدة الملفات الموجودة ، سيتم تشفير الملفات الجديدة فقط بعد تمكين التشفير من جانب الخادم. لكن لاحظ أنه لن يُمكن تعطيل التشفير والعودة إلى حالة عدم التشفير. يرجى قراءة الوثائق لمعرفة جميع العواقب قبل أن تقرر تمكين التشفير من جانب الخادم."
"Disabled" : "معطلة"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Неуспешно включване на опцията ключ за възстановяване. Моля, провери паролата за ключа за възстановяване.",
"Recovery key successfully disabled" : "Успешно изключване на ключа за възстановяване.",
"Could not disable recovery key. Please check your recovery key password!" : "Неуспешно изключване на ключа за възстановяване. Моля, провери паролата за ключа за възстановяване!",
"Missing parameters" : "Липсващи параметри",
"Please provide the old recovery password" : "Моля, въведете старата парола за възстановяване",
"Please provide a new recovery password" : "Моля, задай нова парола за възстановяване",
"Please repeat the new recovery password" : "Моля, въведете новата парола за възстановяване отново",
@@ -33,30 +32,32 @@ OC.L10N.register(
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Администрацията е активирала криптирането от страна на сървъра. Файловете ви са били криптирани с помощта на паролата „%s“",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
"Enable recovery key" : "Активиране на ключа за въстановяване:",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Disable recovery key" : "Изключване на въстановяването на ключа:",
"Enable recovery key" : "Активиране на ключа за въстановяване:",
"Recovery key password" : "Парола за възстановяане на ключа",
"Repeat recovery key password" : "Повторение на паролата за възстановяане на ключа",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Old recovery key password" : "Стара парола за възстановяане на ключа",
"New recovery key password" : "Нова парола за възстановяане на ключа",
"Repeat new recovery key password" : "Повторение на новата парола за възстановяане на ключа",
"Change Password" : "Промени Паролата",
"Basic encryption module" : "Основен модул за криптиране",
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
"Old log-in password" : "Стара парола за вписване",
"Current log-in password" : "Текуща парола за вписване",
"Update" : "Обновяване",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Basic encryption module" : "Основен модул за криптиране",
"Missing parameters" : "Липсващи параметри",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Change Password" : "Промени Паролата",
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
"Update Private Key Password" : "Промени Тайната Парола за Ключа",
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Enabled" : "Включено",
"Disabled" : "Изключено",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
"Disabled" : "Изключено"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Неуспешно включване на опцията ключ за възстановяване. Моля, провери паролата за ключа за възстановяване.",
"Recovery key successfully disabled" : "Успешно изключване на ключа за възстановяване.",
"Could not disable recovery key. Please check your recovery key password!" : "Неуспешно изключване на ключа за възстановяване. Моля, провери паролата за ключа за възстановяване!",
"Missing parameters" : "Липсващи параметри",
"Please provide the old recovery password" : "Моля, въведете старата парола за възстановяване",
"Please provide a new recovery password" : "Моля, задай нова парола за възстановяване",
"Please repeat the new recovery password" : "Моля, въведете новата парола за възстановяване отново",
@@ -31,30 +30,32 @@
"The administration enabled server-side-encryption. Your files were encrypted using the password \"%s\"." : "Администрацията е активирала криптирането от страна на сървъра. Файловете ви са били криптирани с помощта на паролата „%s“",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде разшифрован, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Файлът не може да бъде прочетен, вероятно е споделен файл. Моля, помолете собственика на файла да го сподели повторно с вас.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Активирането на тази опция криптира всички файлове, съхранявани в основното хранилище, в противен случай ще бъдат криптирани само файлове от външно хранилище",
"Enable recovery key" : "Активиране на ключа за въстановяване:",
"Encrypt the home storage" : "Шифровайте домашното хранилище",
"Disable recovery key" : "Изключване на въстановяването на ключа:",
"Enable recovery key" : "Активиране на ключа за въстановяване:",
"Recovery key password" : "Парола за възстановяане на ключа",
"Repeat recovery key password" : "Повторение на паролата за възстановяане на ключа",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Old recovery key password" : "Стара парола за възстановяане на ключа",
"New recovery key password" : "Нова парола за възстановяане на ключа",
"Repeat new recovery key password" : "Повторение на новата парола за възстановяане на ключа",
"Change Password" : "Промени Паролата",
"Basic encryption module" : "Основен модул за криптиране",
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
"Old log-in password" : "Стара парола за вписване",
"Current log-in password" : "Текуща парола за вписване",
"Update" : "Обновяване",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Default encryption module" : "Модул за криптиране по подразбиране:",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Приложението за криптиране е включено, но вашите ключове не са инициализирани. Моля отпишете си и се впишете отново.",
"Basic encryption module" : "Основен модул за криптиране",
"Missing parameters" : "Липсващи параметри",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране.",
"Change recovery key password:" : "Промени паролата за въстановяване на ключа:",
"Change Password" : "Промени Паролата",
"Your private key password no longer matches your log-in password." : "Личният ви ключ не съвпада с паролата за вписване.",
"Set your old private key password to your current log-in password:" : "Промени паролата за тайния ти включ на паролата за вписване:",
"Update Private Key Password" : "Промени Тайната Парола за Ключа",
"Enable password recovery:" : "Включи опцията възстановяване на паролата:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Избирането на тази опция ще ти позволи да възстановиш достъпа си до файловете в случай на изгубена парола.",
"Enabled" : "Включено",
"Disabled" : "Изключено",
"Default encryption module for server-side encryption" : "Модул за криптиране по подразбиране за сървърно криптиране",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "За да използвате този модул за криптиране, трябва да активирате от страна на сървъра криптирането в администраторските настройки. След като бъде активиран, този модул ще шифрова всичките ви файлове прозрачно. Криптирането се базира на AES 256 ключове.\nМодулът няма да засяга съществуващи файлове, само новите файлове ще бъдат криптирани след активиране на криптиране от страна на сървъра. Също така не е възможно да деактивирате криптирането отново и да се върнете към нешифрована система.\nМоля, прочетете документацията, за да сте наясно за всички последици, преди да решите да активирате сървърното криптиране."
"Disabled" : "Изключено"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+14 -13
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut habilitar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!",
"Recovery key successfully disabled" : "La clau de recuperació s'ha inhabilitat",
"Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut inhabilitar la clau de recuperació. Comproveu la contrasenya de la clau de recuperació!",
"Missing parameters" : "Falten paràmetres",
"Please provide the old recovery password" : "Si us plau, proporcioneu la contrasenya de recuperació antiga",
"Please provide a new recovery password" : "Si us plau, proporcioneu una nova contrasenya de recuperació",
"Please repeat the new recovery password" : "Si us plau, repetiu la nova contrasenya de recuperació",
@@ -30,29 +29,31 @@ OC.L10N.register(
"one-time password for server-side-encryption" : "contrasenya única per al xifratge en el servidor",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a lemmagatzematge principal; en cas contrari, només es xifraran els fitxers demmagatzematge extern",
"Enable recovery key" : "Habilita la clau de recuperació",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Disable recovery key" : "Inhabilita la clau de recuperació",
"Enable recovery key" : "Habilita la clau de recuperació",
"Recovery key password" : "Clau de recuperació de la contrasenya",
"Repeat recovery key password" : "Repetiu la contrasenya de la clau de recuperació",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Old recovery key password" : "Contrasenya antiga de clau de recuperació",
"New recovery key password" : "Nova contrasenya de clau de recuperació",
"Repeat new recovery key password" : "Repetiu la contrasenya de la clau de recuperació nova",
"Change Password" : "Canvia la contrasenya",
"Basic encryption module" : "Mòdul de xifratge bàsic",
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
"Old log-in password" : "Contrasenya antiga dinici de sessió",
"Current log-in password" : "Contrasenya actual dinici de sessió",
"Update" : "Actualitza",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Basic encryption module" : "Mòdul de xifratge bàsic",
"Missing parameters" : "Falten paràmetres",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Change Password" : "Canvia la contrasenya",
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
"Update Private Key Password" : "Actualitza la contrasenya de clau privada",
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Enabled" : "Habilitat",
"Disabled" : "Inhabilitat",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
"Disabled" : "Inhabilitat"
},
"nplurals=2; plural=(n != 1);");
+14 -13
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "No s'ha pogut habilitar la clau de recuperació. Comproveu contrasenya de la clau de recuperació!",
"Recovery key successfully disabled" : "La clau de recuperació s'ha inhabilitat",
"Could not disable recovery key. Please check your recovery key password!" : "No s'ha pogut inhabilitar la clau de recuperació. Comproveu la contrasenya de la clau de recuperació!",
"Missing parameters" : "Falten paràmetres",
"Please provide the old recovery password" : "Si us plau, proporcioneu la contrasenya de recuperació antiga",
"Please provide a new recovery password" : "Si us plau, proporcioneu una nova contrasenya de recuperació",
"Please repeat the new recovery password" : "Si us plau, repetiu la nova contrasenya de recuperació",
@@ -28,29 +27,31 @@
"one-time password for server-side-encryption" : "contrasenya única per al xifratge en el servidor",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot desxifrar aquest fitxer, probablement és un fitxer compartit. Demaneu al propietari del fitxer que torni a compartir el fitxer amb vosaltres.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No es pot llegir aquest fitxer, probablement aquest sigui un fitxer compartit. Demana al propietari del fitxer que torni a compartir el fitxer amb tu.",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Si activeu aquesta opció, es xifraran tots els fitxers emmagatzemats a lemmagatzematge principal; en cas contrari, només es xifraran els fitxers demmagatzematge extern",
"Enable recovery key" : "Habilita la clau de recuperació",
"Encrypt the home storage" : "Xifra l'emmagatzematge de casa",
"Disable recovery key" : "Inhabilita la clau de recuperació",
"Enable recovery key" : "Habilita la clau de recuperació",
"Recovery key password" : "Clau de recuperació de la contrasenya",
"Repeat recovery key password" : "Repetiu la contrasenya de la clau de recuperació",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Old recovery key password" : "Contrasenya antiga de clau de recuperació",
"New recovery key password" : "Nova contrasenya de clau de recuperació",
"Repeat new recovery key password" : "Repetiu la contrasenya de la clau de recuperació nova",
"Change Password" : "Canvia la contrasenya",
"Basic encryption module" : "Mòdul de xifratge bàsic",
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
"Old log-in password" : "Contrasenya antiga dinici de sessió",
"Current log-in password" : "Contrasenya actual dinici de sessió",
"Update" : "Actualitza",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Default encryption module" : "Mòdul de xifratge per defecte",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "L'aplicació de xifratge està activada però les claus no estan inicialitzades, tanqueu la sessió i inicieu-ne una de nova.",
"Basic encryption module" : "Mòdul de xifratge bàsic",
"Missing parameters" : "Falten paràmetres",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor",
"Change recovery key password:" : "Canvia la clau de recuperació de contrasenya:",
"Change Password" : "Canvia la contrasenya",
"Your private key password no longer matches your log-in password." : "La clau privada ja no es correspon amb la contrasenya d'inici de sessió:",
"Set your old private key password to your current log-in password:" : "Establiu la vostra antiga clau privada a l'actual contrasenya d'accés:",
"Update Private Key Password" : "Actualitza la contrasenya de clau privada",
"Enable password recovery:" : "Habilita la recuperació de contrasenya:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Si activeu aquesta opció, podreu accedir als vostres fitxers encriptats en cas de pèrdua de contrasenya",
"Enabled" : "Habilitat",
"Disabled" : "Inhabilitat",
"Default encryption module for server-side encryption" : "Mòdul criptogràfic per defecte per a xifratge de servidor"
"Disabled" : "Inhabilitat"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Nepodařilo se povolit záchranný klíč. Zkontrolujte své heslo k záchrannému klíči!",
"Recovery key successfully disabled" : "Záchranný klíč úspěšně zakázán",
"Could not disable recovery key. Please check your recovery key password!" : "Nedaří se zakázat záchranný klíč. Zkontrolujte zadání hesla k němu.",
"Missing parameters" : "Chybějící parametry",
"Please provide the old recovery password" : "Zadejte původní heslo pro obnovu",
"Please provide a new recovery password" : "Zadejte nové heslo pro obnovu",
"Please repeat the new recovery password" : "Zopakujte zadání nového hesla pro obnovu",
@@ -36,32 +35,34 @@ OC.L10N.register(
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Default Encryption Module" : "Výchozí šifrovací modul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Výchozí modul pro šifrování na straně Nextcloud serveru (SSE)",
"Default encryption module" : "Výchozí šifrovací modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
"Enable recovery key" : "Povolit záchranný klíč",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Disable recovery key" : "Vypnout záchranný klíč",
"Enable recovery key" : "Povolit záchranný klíč",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Záchranný klíč je dodatečný šifrovací klíč sloužící pro šifrování souborů. Slouží k obnovení souborů z účtu, pokud dojde k zapomenutí hesla.",
"Recovery key password" : "Heslo ke klíči pro obnovu",
"Repeat recovery key password" : "Zopakovat heslo záchranného klíče",
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
"Old recovery key password" : "Staré heslo záchranného klíče",
"New recovery key password" : "Nové heslo k záchrannému klíči",
"Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče",
"Change Password" : "Změnit heslo",
"Basic encryption module" : "Základní šifrovací modul",
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.",
"Old log-in password" : "Původní přihlašovací heslo",
"Current log-in password" : "Stávající přihlašovací heslo",
"Update" : "Aktualizovat",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Default encryption module" : "Výchozí šifrovací modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Basic encryption module" : "Základní šifrovací modul",
"Missing parameters" : "Chybějící parametry",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
"Change Password" : "Změnit heslo",
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
"Update Private Key Password" : "Změnit heslo k soukromé části klíče",
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
"Disabled" : "Zakázáno"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Nepodařilo se povolit záchranný klíč. Zkontrolujte své heslo k záchrannému klíči!",
"Recovery key successfully disabled" : "Záchranný klíč úspěšně zakázán",
"Could not disable recovery key. Please check your recovery key password!" : "Nedaří se zakázat záchranný klíč. Zkontrolujte zadání hesla k němu.",
"Missing parameters" : "Chybějící parametry",
"Please provide the old recovery password" : "Zadejte původní heslo pro obnovu",
"Please provide a new recovery password" : "Zadejte nové heslo pro obnovu",
"Please repeat the new recovery password" : "Zopakujte zadání nového hesla pro obnovu",
@@ -34,32 +33,34 @@
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Z tohoto souboru se nedaří číst pravděpodobně se jedná o nasdílený soubor. Požádejte jeho vlastníka, aby vám ho znovu nasdílel.",
"Default Encryption Module" : "Výchozí šifrovací modul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Výchozí modul pro šifrování na straně Nextcloud serveru (SSE)",
"Default encryption module" : "Výchozí šifrovací modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Povolení tohoto nastavení zašifruje všechny soubory uložené v hlavním úložišti, jinak budou šifrovány pouze soubory na externích úložištích.",
"Enable recovery key" : "Povolit záchranný klíč",
"Encrypt the home storage" : "Zašifrovat domovské úložiště",
"Disable recovery key" : "Vypnout záchranný klíč",
"Enable recovery key" : "Povolit záchranný klíč",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Záchranný klíč je dodatečný šifrovací klíč sloužící pro šifrování souborů. Slouží k obnovení souborů z účtu, pokud dojde k zapomenutí hesla.",
"Recovery key password" : "Heslo ke klíči pro obnovu",
"Repeat recovery key password" : "Zopakovat heslo záchranného klíče",
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
"Old recovery key password" : "Staré heslo záchranného klíče",
"New recovery key password" : "Nové heslo k záchrannému klíči",
"Repeat new recovery key password" : "Zopakujte nové heslo záchranného klíče",
"Change Password" : "Změnit heslo",
"Basic encryption module" : "Základní šifrovací modul",
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Pokud si nepamatujete své původní heslo, můžete požádat správce o obnovu vašich souborů.",
"Old log-in password" : "Původní přihlašovací heslo",
"Current log-in password" : "Stávající přihlašovací heslo",
"Update" : "Aktualizovat",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Default encryption module" : "Výchozí šifrovací modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale šifrovací klíče ještě nejsou inicializované. Odhlaste se a znovu se přihlaste",
"Basic encryption module" : "Základní šifrovací modul",
"Missing parameters" : "Chybějící parametry",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky.",
"Change recovery key password:" : "Změna hesla klíče pro obnovu:",
"Change Password" : "Změnit heslo",
"Your private key password no longer matches your log-in password." : "Heslo k vašemu soukromému klíči se už neshoduje s vaším přihlašovacím heslem.",
"Set your old private key password to your current log-in password:" : "Změňte své staré heslo soukromého klíče na stejné, jako je vaše současné přihlašovací heslo:",
"Update Private Key Password" : "Změnit heslo k soukromé části klíče",
"Enable password recovery:" : "Povolit obnovu hesla:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Zapnutí této volby vám umožní znovu získat přístup k vašim zašifrovaným souborům pokud ztratíte heslo",
"Enabled" : "Povoleno",
"Disabled" : "Zakázáno",
"Default encryption module for server-side encryption" : "Výchozí modul pro šifrování na straně serveru",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Pro používání tohoto šifrovacího modulu je třeba zapnout šifrování na straně serveru v nastavení správy. Jakmile je zapnutý, tento modul transparentně zašifruje všechny vaše soubory. Šifrování je založeno na AES 256 klíčích.\nModul se nedotkne existujících souborů, zašifrovány budou pouze nové soubory po zapnutí šifrování na straně serveru už není možné ho zase vypnout a vrátit se k nešifrovanému systému.\nNež se rozhodnete zapnout šifrování na straně serveru přečtěte si dokumentaci, abyste se seznámili se známými důsledky."
"Disabled" : "Zakázáno"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Kunne ikke aktivere gendannelsesnøgle. Kontroller venligst dit gendannelsesnøgle kodeord!",
"Recovery key successfully disabled" : "Gendannelsesnøgle deaktiveret succesfuldt",
"Could not disable recovery key. Please check your recovery key password!" : "Kunne ikke deaktivere gendannelsesnøgle. Kontroller din gendannelsesnøgle kodeord!",
"Missing parameters" : "Manglende parametre",
"Please provide the old recovery password" : "Angiv venligst det gamle kodeord for gendannelsesnøglen",
"Please provide a new recovery password" : "Angiv venligst et nyt kodeord til gendannelse",
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
@@ -35,32 +34,34 @@ OC.L10N.register(
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Default Encryption Module" : "Standard krypteringsmodul",
"Default encryption module" : "Standard krypterings modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
"Enable recovery key" : "Aktiver gendannelsesnøgle",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Disable recovery key" : "Deaktiver gendannelsesnøgle",
"Enable recovery key" : "Aktiver gendannelsesnøgle",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Det bruges til at gendanne filer fra en konto, hvis adgangskoden er glemt.",
"Recovery key password" : "Gendannelsesnøgle kodeord",
"Repeat recovery key password" : "Gentag adgangskode for gendannelsesnøgle",
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
"Old recovery key password" : "Gammel adgangskode for gendannelsesnøgle",
"New recovery key password" : "Ny adgangskode for gendannelsesnøgle",
"Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle",
"Change Password" : "Skift Kodeord",
"Basic encryption module" : "Basis krypterings modul",
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
"If you do not remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske din gamle adgangskode, så kan du bede din administrator om at redde dine filer.",
"Old log-in password" : "Gammel adgangskode",
"Current log-in password" : "Nuværende adgangskode",
"Update" : "Opdatér",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Default encryption module" : "Standard krypterings modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Basic encryption module" : "Basis krypterings modul",
"Missing parameters" : "Manglende parametre",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
"Change Password" : "Skift Kodeord",
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
"Update Private Key Password" : "Opdater Privat Nøgle Kodeord",
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Enabled" : "Aktiveret",
"Disabled" : "Deaktiveret",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
"Disabled" : "Deaktiveret"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Kunne ikke aktivere gendannelsesnøgle. Kontroller venligst dit gendannelsesnøgle kodeord!",
"Recovery key successfully disabled" : "Gendannelsesnøgle deaktiveret succesfuldt",
"Could not disable recovery key. Please check your recovery key password!" : "Kunne ikke deaktivere gendannelsesnøgle. Kontroller din gendannelsesnøgle kodeord!",
"Missing parameters" : "Manglende parametre",
"Please provide the old recovery password" : "Angiv venligst det gamle kodeord for gendannelsesnøglen",
"Please provide a new recovery password" : "Angiv venligst et nyt kodeord til gendannelse",
"Please repeat the new recovery password" : "Gentag venligst det nye kodeord til gendannelse",
@@ -33,32 +32,34 @@
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke dekryptere denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Kan ikke læse denne fil, sandsynligvis er dette en delt fil. Bed filejeren om at videredele filen med dig.",
"Default Encryption Module" : "Standard krypteringsmodul",
"Default encryption module" : "Standard krypterings modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ved at slå denne valgmulighed til krypteres alle filer i hovedlageret, ellers vil kun filer på eksternt lager blive krypteret",
"Enable recovery key" : "Aktiver gendannelsesnøgle",
"Encrypt the home storage" : "Krypter hjemmelageret",
"Disable recovery key" : "Deaktiver gendannelsesnøgle",
"Enable recovery key" : "Aktiver gendannelsesnøgle",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Gendannelsesnøglen er en ekstra krypteringsnøgle, der bruges til at kryptere filer. Det bruges til at gendanne filer fra en konto, hvis adgangskoden er glemt.",
"Recovery key password" : "Gendannelsesnøgle kodeord",
"Repeat recovery key password" : "Gentag adgangskode for gendannelsesnøgle",
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
"Old recovery key password" : "Gammel adgangskode for gendannelsesnøgle",
"New recovery key password" : "Ny adgangskode for gendannelsesnøgle",
"Repeat new recovery key password" : "Gentag ny adgangskode for gendannelsesnøgle",
"Change Password" : "Skift Kodeord",
"Basic encryption module" : "Basis krypterings modul",
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
"If you do not remember your old password you can ask your administrator to recover your files." : "Hvis du ikke kan huske din gamle adgangskode, så kan du bede din administrator om at redde dine filer.",
"Old log-in password" : "Gammel adgangskode",
"Current log-in password" : "Nuværende adgangskode",
"Update" : "Opdatér",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Default encryption module" : "Standard krypterings modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Krypteringsprogrammet er aktiveret men dine nøgler er ikke indlæst, log venligst ud og ind igen",
"Basic encryption module" : "Basis krypterings modul",
"Missing parameters" : "Manglende parametre",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering.",
"Change recovery key password:" : "Skift gendannelsesnøgle kodeord:",
"Change Password" : "Skift Kodeord",
"Your private key password no longer matches your log-in password." : "Dit private nøglekodeord stemmer ikke længere overens med dit login-kodeord.",
"Set your old private key password to your current log-in password:" : "Sæt dit gamle, private nøglekodeord til at være dit nuværende login-kodeord. ",
"Update Private Key Password" : "Opdater Privat Nøgle Kodeord",
"Enable password recovery:" : "Aktiver kodeord gendannelse:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Aktivering af denne valgmulighed tillader dig at generhverve adgang til dine krypterede filer i tilfælde af tab af kodeord",
"Enabled" : "Aktiveret",
"Disabled" : "Deaktiveret",
"Default encryption module for server-side encryption" : "Standard krypteringsmodul til kryptering på serveren",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "For at bruge dette krypteringsmodul skal du aktivere serversidekryptering i admin-indstillingerne. Når det er aktiveret, vil dette modul kryptere alle dine filer gennemsigtigt. Krypteringen er baseret på AES 256 nøgler.\nModulet vil ikke røre ved eksisterende filer, kun nye filer vil blive krypteret efter server-side kryptering blev aktiveret. Det er heller ikke muligt at deaktivere krypteringen igen og skifte tilbage til et ukrypteret system.\nLæs venligst dokumentationen for at kende alle implikationer, før du beslutter dig for at aktivere server-side-kryptering."
"Disabled" : "Deaktiveret"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.",
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
"Missing parameters" : "Fehlende Parameter",
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
@@ -37,32 +36,34 @@ OC.L10N.register(
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl \"encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
"Recovery key password" : "Passwort für den Wiederherstellungsschlüsse",
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change Password" : "Passwort ändern",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn du dich nicht mehr an dein altes Passwort erinnern kannst, kannst du deine Administration bitten, deine Dateien wiederherzustellen.",
"Old log-in password" : "Altes Anmelde-Passwort",
"Current log-in password" : "Aktuelles Passwort",
"Update" : "Aktualisieren",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Missing parameters" : "Fehlende Parameter",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
"Change Password" : "Passwort ändern",
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" : "Wiederherstellungsschlüssel deaktiviert.",
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfe das Passwort für den Wiederherstellungsschlüssel!",
"Missing parameters" : "Fehlende Parameter",
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
@@ -35,32 +34,34 @@
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktiviere diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwende den Befehl \"encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor du SSE aktivierst, vorhandene Dateien verschlüsseln oder deaktivierst, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
"Recovery key password" : "Passwort für den Wiederherstellungsschlüsse",
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change Password" : "Passwort ändern",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn du dich nicht mehr an dein altes Passwort erinnern kannst, kannst du deine Administration bitten, deine Dateien wiederherzustellen.",
"Old log-in password" : "Altes Anmelde-Passwort",
"Current log-in password" : "Aktuelles Passwort",
"Update" : "Aktualisieren",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melde ab- und wieder anmelden",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Missing parameters" : "Fehlende Parameter",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren.",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern:",
"Change Password" : "Passwort ändern",
"Your private key password no longer matches your log-in password." : "Das Passwort für den privaten Schlüssel stimmt nicht mehr mit dem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Dein altes Passwort für den privaten Schlüssel auf dein aktuelles Anmeldepasswort setzen:",
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option hast du die Möglichkeit, wieder auf deine verschlüsselten Dateien zugreifen zu können, wenn du dein Passwort verloren hast.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, musst du die serverseitige Verschlüsselung in den Verwaltungseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle deine Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lies die Dokumentation, um alle Auswirkungen zu kennen, bevor du dich entscheidest, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.",
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Missing parameters" : "Fehlende Parameter",
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
@@ -37,32 +36,34 @@ OC.L10N.register(
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl \"occ encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
"Recovery key password" : "Passwort für den Wiederherstellungsschlüssel",
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change Password" : "Passwort ändern",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn Sie sich nicht mehr an Ihr altes Passwort erinnern, können Sie Ihre Administration bitten, Ihre Dateien wiederherzustellen.",
"Old log-in password" : "Altes Anmelde-Passwort",
"Current log-in password" : "Aktuelles Anmeldepasswort",
"Update" : "Aktualisieren",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Missing parameters" : "Fehlende Parameter",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
"Change Password" : "Passwort ändern",
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht aktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Recovery key successfully disabled" : "Der Wiederherstellungsschlüssel wurde deaktiviert.",
"Could not disable recovery key. Please check your recovery key password!" : "Der Wiederherstellungsschlüssel konnte nicht deaktiviert werden. Bitte überprüfen Sie das Passwort für den Wiederherstellungsschlüssel!",
"Missing parameters" : "Fehlende Parameter",
"Please provide the old recovery password" : "Bitte das alte Wiederherstellungspasswort eingeben",
"Please provide a new recovery password" : "Bitte ein neues Wiederherstellungspasswort eingeben",
"Please repeat the new recovery password" : "Bitte das neue Passwort zur Wiederherstellung wiederholen",
@@ -35,32 +34,34 @@
"Default Encryption Module" : "Standard-Verschlüsselungsmodul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Standard-Verschlüsselungsmodul für Nextcloud serverseitige Verschlüsselung",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "Diese App bietet die (standardmäßige) Kryptografieimplementierung für die serverseitige Verschlüsselung (SSE) von Nextcloud.\n\n\t\t\t**Verschlüsselungsdetails**\n\t\t\t* **Verschlüsselungsmodus:** AES-256-CTR (Standard)\n\t\t\t* **Authentifizierung:** HMAC-SHA256\n\n\t\t\t**Wichtige Warnungen**\n\t\t\t* **ACHTUNG:** Deaktivieren Sie diese Anwendung erst, wenn alle Dateien entschlüsselt wurden (`occ encryption:decrypt-all`).\n\t\t\t* **WARNUNG**: Die Rückkehr zur unverschlüsselten Dateispeicherung nach der Aktivierung erfordert Zugriff über die Befehlszeile. Die Aktion ist über die Web-Benutzeroberfläche dauerhaft.\n\n\t\t\t**Hinweise zu vorhandenen Dateien**\n\t\t\t* Standardmäßig werden vorhandene Dateien durch die Aktivierung von SSE nicht verschlüsselt; nur neue Dateien werden verschlüsselt.\n\t\t\t* Um alle vorhandenen Dateien zu verschlüsseln, verwenden Sie den Befehl \"occ encryption:encrypt-all\".\n\n\t\t\t**Vorbereitung**\n\t\t\t* **Dokumentation lesen:** Bevor Sie SSE aktivieren, vorhandene Dateien verschlüsseln oder deaktivieren, ist es wichtig,\n\t\t\t\t die Dokumentation zu lesen, um die Auswirkungen und die entsprechenden Maßnahmen zur Vermeidung von Datenverlust zu kennen.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Die Aktivierung dieser Option verschlüsselt alle Dateien die auf dem Hauptspeicher gespeichert sind, ansonsten werden nur Dateien auf dem externen Speicher verschlüsselt",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"Encrypt the home storage" : "Benutzerverzeichnis verschlüsseln",
"Disable recovery key" : "Wiederherstellungsschlüssel deaktivieren",
"Enable recovery key" : "Wiederherstellungsschlüssel aktivieren",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Der Wiederherstellungsschlüssel ist ein zusätzlicher Verschlüsselungsschlüssel, der zur Verschlüsselung von Dateien verwendet wird. Er wird verwendet, um Dateien aus einem Konto wiederherzustellen, wenn das Passwort vergessen wurde.",
"Recovery key password" : "Passwort für den Wiederherstellungsschlüssel",
"Repeat recovery key password" : "Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
"Old recovery key password" : "Altes Passwort für den Wiederherstellungsschlüssel",
"New recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel",
"Repeat new recovery key password" : "Neues Passwort für den Wiederherstellungsschlüssel wiederholen",
"Change Password" : "Passwort ändern",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Wenn Sie sich nicht mehr an Ihr altes Passwort erinnern, können Sie Ihre Administration bitten, Ihre Dateien wiederherzustellen.",
"Old log-in password" : "Altes Anmelde-Passwort",
"Current log-in password" : "Aktuelles Anmeldepasswort",
"Update" : "Aktualisieren",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Default encryption module" : "Standard-Verschlüsselungsmodul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Verschlüsselungs-App ist aktiviert, aber die Schlüssel sind noch nicht initialisiert. Bitte melden Sie sich ab und wieder an",
"Basic encryption module" : "Basisverschlüsselungsmodul",
"Missing parameters" : "Fehlende Parameter",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren.",
"Change recovery key password:" : "Passwort für den Wiederherstellungsschlüssel ändern",
"Change Password" : "Passwort ändern",
"Your private key password no longer matches your log-in password." : "Das Passwort für Ihren privaten Schlüssel stimmt nicht mehr mit Ihrem Anmelde-Passwort überein.",
"Set your old private key password to your current log-in password:" : "Ihr altes Passwort für den privaten Schlüssel auf Ihr aktuelles Anmeldepasswort setzen:",
"Update Private Key Password" : "Das Passwort des privaten Schlüssels aktualisieren",
"Enable password recovery:" : "Die Passwort-Wiederherstellung aktivieren:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Durch die Aktivierung dieser Option haben Sie die Möglichkeit, wieder auf Ihre verschlüsselten Dateien zugreifen zu können, wenn Sie Ihr Passwort verloren haben.",
"Enabled" : "Aktiviert",
"Disabled" : "Deaktiviert",
"Default encryption module for server-side encryption" : "Standard-Verschlüsselungsmodul für serverseitige Verschlüsselung",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Um dieses Verschlüsselungsmodul nutzen zu können, müssen Sie die serverseitige Verschlüsselung in den Administrationseinstellungen aktivieren. Sobald das Modul aktiviert ist, verschlüsselt es alle Ihre Dateien transparent. Die Verschlüsselung basiert auf AES-256-Schlüsseln.\nDas Modul ändert keine vorhandenen Dateien, nur neue Dateien werden verschlüsselt, nachdem die serverseitige Verschlüsselung aktiviert wurde. Es ist nicht möglich, die Verschlüsselung zu deaktivieren und wieder auf ein unverschlüsseltes System umzuschalten.\nBitte lesen Sie die Dokumentation, um alle Auswirkungen zu kennen, bevor Sie sich entscheiden, die serverseitige Verschlüsselung zu aktivieren."
"Disabled" : "Deaktiviert"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Αποτυχία ενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Recovery key successfully disabled" : "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
"Could not disable recovery key. Please check your recovery key password!" : "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Missing parameters" : "Ελλιπείς παράμετροι",
"Please provide the old recovery password" : "Παρακαλούμε παρέχετε τον παλιό κωδικό ανάκτησης",
"Please provide a new recovery password" : "Παρακαλούμε παρέχετε ένα νέο κωδικό ανάκτησης",
"Please repeat the new recovery password" : "Παρακαλούμε επαναλάβετε το νέο κωδικό ανάκτησης",
@@ -34,32 +33,34 @@ OC.L10N.register(
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Παρακαλούμε συνδεθείτε στη διαδικτυακή διεπαφή, μεταβείτε στην ενότητα \"Ασφάλεια\" των προσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησής σας εισάγοντας αυτόν τον κωδικό στο πεδίο \"Παλιός κωδικός σύνδεσης\" και τον τρέχοντα κωδικό σύνδεσής σας.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Το κλειδί ανάκτησης είναι ένα πρόσθετο κλειδί κρυπτογράφησης που χρησιμοποιείται για την κρυπτογράφηση αρχείων. Χρησιμοποιείται για την ανάκτηση αρχείων από έναν λογαριασμό εάν ξεχαστεί το συνθηματικό.",
"Recovery key password" : "Συνθηματικό κλειδιού ανάκτησης",
"Repeat recovery key password" : "Επαναλάβετε το συνθηματικό κλειδιού ανάκτησης",
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
"Old recovery key password" : "Παλιό συνθηματικό κλειδιού ανάκτησης",
"New recovery key password" : "Νέο συνθηματικό κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο συνθηματικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή συνθηματικό",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας συνθηματικό, μπορείτε να ζητήσετε από το διαχειριστή σας να ανακτήσει τα αρχεία σας.",
"Old log-in password" : "Παλαιό συνθηματικό σύνδεσης",
"Current log-in password" : "Τρέχων συνθηματικό σύνδεσης",
"Update" : "Ενημέρωση",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Missing parameters" : "Ελλιπείς παράμετροι",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
"Change Password" : "Αλλαγή συνθηματικό",
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
"Update Private Key Password" : "Ενημέρωση Κωδικού Ιδιωτικού Κλειδιού",
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
"Disabled" : "Απενεργοποιημένο"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Αποτυχία ενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Recovery key successfully disabled" : "Επιτυχής απενεργοποίηση κλειδιού ανάκτησης",
"Could not disable recovery key. Please check your recovery key password!" : "Αποτυχία απενεργοποίησης κλειδιού ανάκτησης. Παρακαλούμε ελέγξτε τον κωδικό του κλειδιού ανάκτησής σας!",
"Missing parameters" : "Ελλιπείς παράμετροι",
"Please provide the old recovery password" : "Παρακαλούμε παρέχετε τον παλιό κωδικό ανάκτησης",
"Please provide a new recovery password" : "Παρακαλούμε παρέχετε ένα νέο κωδικό ανάκτησης",
"Please repeat the new recovery password" : "Παρακαλούμε επαναλάβετε το νέο κωδικό ανάκτησης",
@@ -32,32 +31,34 @@
"Please login to the web interface, go to the \"Security\" section of your personal settings and update your encryption password by entering this password into the \"Old login password\" field and your current login password." : "Παρακαλούμε συνδεθείτε στη διαδικτυακή διεπαφή, μεταβείτε στην ενότητα \"Ασφάλεια\" των προσωπικών σας ρυθμίσεων και ενημερώστε τον κωδικό κρυπτογράφησής σας εισάγοντας αυτόν τον κωδικό στο πεδίο \"Παλιός κωδικός σύνδεσης\" και τον τρέχοντα κωδικό σύνδεσής σας.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να αποκρυπτογραφηθεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Δεν ήταν δυνατό να διαβαστεί αυτό το αρχείο, πιθανόν πρόκειται για κοινόχρηστο αρχείο. Παρακαλούμε ζητήστε από τον κάτοχο του αρχείου να το ξαναμοιραστεί μαζί σας.",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Η ενεργοποίηση αυτής της επιλογής κρυπτογραφεί όλα τα αρχεία που είναι αποθηκευμένα στον κύριο αποθηκευτικό χώρο, αλλιώς μόνο τα αρχεία σε εξωτερικούς αποθηκευτικούς χώρους θα κρυπτογραφηθούν",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"Encrypt the home storage" : "Κρυπτογράφηση του κεντρικού χώρου αποθήκευσης",
"Disable recovery key" : "Απενεργοποίηση κλειδιού ανάκτησης",
"Enable recovery key" : "Ενεργοποίηση κλειδιού ανάκτησης",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "Το κλειδί ανάκτησης είναι ένα πρόσθετο κλειδί κρυπτογράφησης που χρησιμοποιείται για την κρυπτογράφηση αρχείων. Χρησιμοποιείται για την ανάκτηση αρχείων από έναν λογαριασμό εάν ξεχαστεί το συνθηματικό.",
"Recovery key password" : "Συνθηματικό κλειδιού ανάκτησης",
"Repeat recovery key password" : "Επαναλάβετε το συνθηματικό κλειδιού ανάκτησης",
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
"Old recovery key password" : "Παλιό συνθηματικό κλειδιού ανάκτησης",
"New recovery key password" : "Νέο συνθηματικό κλειδιού ανάκτησης",
"Repeat new recovery key password" : "Επαναλάβετε το νέο συνθηματικό κλειδιού ανάκτησης",
"Change Password" : "Αλλαγή συνθηματικό",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
"If you do not remember your old password you can ask your administrator to recover your files." : "Εάν δεν θυμάστε τον παλιό σας συνθηματικό, μπορείτε να ζητήσετε από το διαχειριστή σας να ανακτήσει τα αρχεία σας.",
"Old log-in password" : "Παλαιό συνθηματικό σύνδεσης",
"Current log-in password" : "Τρέχων συνθηματικό σύνδεσης",
"Update" : "Ενημέρωση",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Default encryption module" : "Προεπιλεγμένη μονάδα κρυπτογράφησης",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Η εφαρμογή κρυπτογράφησης είναι ενεργοποιημένη αλλά τα κλειδιά σας δεν έχουν αρχικοποιηθεί, παρακαλώ αποσυνδεθείτε και συνδεθείτε ξανά",
"Basic encryption module" : "Βασική μονάδα κρυπτογράφησης",
"Missing parameters" : "Ελλιπείς παράμετροι",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή.",
"Change recovery key password:" : "Αλλαγή συνθηματικού κλειδιού ανάκτησης:",
"Change Password" : "Αλλαγή συνθηματικό",
"Your private key password no longer matches your log-in password." : "Το συνθηματικό του ιδιωτικού κλειδιού σας δεν ταιριάζει πλέον με τον κωδικό σύνδεσής σας.",
"Set your old private key password to your current log-in password:" : "Ορίστε τον παλιό σας συνθηματικό ιδιωτικού κλειδιού στον τρέχοντα κωδικό σύνδεσης:",
"Update Private Key Password" : "Ενημέρωση Κωδικού Ιδιωτικού Κλειδιού",
"Enable password recovery:" : "Ενεργοποίηση ανάκτησης συνθηματικού:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Η ενεργοποίηση αυτής της επιλογής θα σας επιτρέψει να επανακτήσετε πρόσβαση στα κρυπτογραφημένα σας αρχεία σε περίπτωση απώλειας του κωδικού σας",
"Enabled" : "Ενεργοποιημένο",
"Disabled" : "Απενεργοποιημένο",
"Default encryption module for server-side encryption" : "Προεπιλεγμένη μονάδα κρυπτογράφησης για κρυπτογράφηση στον διακομιστή",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "Για να χρησιμοποιήσετε αυτή τη μονάδα κρυπτογράφησης, πρέπει να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή στις ρυθμίσεις διαχειριστή. Μόλις ενεργοποιηθεί, αυτή η μονάδα θα κρυπτογραφεί όλα τα αρχεία σας διαφανώς. Η κρυπτογράφηση βασίζεται σε κλειδιά AES 256.\nΗ μονάδα δεν θα αγγίξει τα υπάρχοντα αρχεία, μόνο τα νέα αρχεία θα κρυπτογραφηθούν αφού ενεργοποιηθεί η κρυπτογράφηση στον διακομιστή. Επίσης, δεν είναι δυνατό να απενεργοποιήσετε ξανά την κρυπτογράφηση και να επιστρέψετε σε ένα μη κρυπτογραφημένο σύστημα.\nΠαρακαλούμε διαβάστε την τεκμηρίωση για να γνωρίζετε όλες τις επιπτώσεις πριν αποφασίσετε να ενεργοποιήσετε την κρυπτογράφηση στον διακομιστή."
"Disabled" : "Απενεργοποιημένο"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+15 -14
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Could not enable recovery key. Please check your recovery key password!",
"Recovery key successfully disabled" : "Recovery key disabled successfully",
"Could not disable recovery key. Please check your recovery key password!" : "Could not disable recovery key. Please check your recovery key password!",
"Missing parameters" : "Missing parameters",
"Please provide the old recovery password" : "Please provide the old recovery password",
"Please provide a new recovery password" : "Please provide a new recovery password",
"Please repeat the new recovery password" : "Please repeat the new recovery password",
@@ -37,32 +36,34 @@ OC.L10N.register(
"Default Encryption Module" : "Default Encryption Module",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Default encryption module for Nextcloud Server-side Encryption (SSE)",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss.",
"Default encryption module" : "Default encryption module",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption app is enabled but your keys are not initialised, please log-out and log-in again",
"Encrypt the home storage" : "Encrypt the home storage",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted",
"Enable recovery key" : "Enable recovery key",
"Encrypt the home storage" : "Encrypt the home storage",
"Disable recovery key" : "Disable recovery key",
"Enable recovery key" : "Enable recovery key",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.",
"Recovery key password" : "Recovery key password",
"Repeat recovery key password" : "Repeat recovery key password",
"Change recovery key password:" : "Change recovery key password:",
"Old recovery key password" : "Old recovery key password",
"New recovery key password" : "New recovery key password",
"Repeat new recovery key password" : "Repeat new recovery key password",
"Change Password" : "Change Password",
"Basic encryption module" : "Basic encryption module",
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
"If you do not remember your old password you can ask your administrator to recover your files." : "If you do not remember your old password you can ask your administrator to recover your files.",
"Old log-in password" : "Old login password",
"Current log-in password" : "Current login password",
"Update" : "Update",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
"Default encryption module" : "Default encryption module",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption app is enabled but your keys are not initialised, please log-out and log-in again",
"Basic encryption module" : "Basic encryption module",
"Missing parameters" : "Missing parameters",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption.",
"Change recovery key password:" : "Change recovery key password:",
"Change Password" : "Change Password",
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
"Update Private Key Password" : "Update Private Key Password",
"Enable password recovery:" : "Enable password recovery:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
"Enabled" : "Enabled",
"Disabled" : "Disabled",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption."
"Disabled" : "Disabled"
},
"nplurals=2; plural=(n != 1);");
+15 -14
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Could not enable recovery key. Please check your recovery key password!",
"Recovery key successfully disabled" : "Recovery key disabled successfully",
"Could not disable recovery key. Please check your recovery key password!" : "Could not disable recovery key. Please check your recovery key password!",
"Missing parameters" : "Missing parameters",
"Please provide the old recovery password" : "Please provide the old recovery password",
"Please provide a new recovery password" : "Please provide a new recovery password",
"Please repeat the new recovery password" : "Please repeat the new recovery password",
@@ -35,32 +34,34 @@
"Default Encryption Module" : "Default Encryption Module",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Default encryption module for Nextcloud Server-side Encryption (SSE)",
"This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss." : "This app provides the (default) cryptography implementation for Nextcloud's Server-side Encryption (SSE) feature.\n\n\t\t\t**Encryption Details**\n\t\t\t* **Cipher Mode:** AES-256-CTR (default)\n\t\t\t* **Authentication:** HMAC-SHA256\n\n\t\t\t**Important Warnings**\n\t\t\t* **DANGER:** Do not disable this application until all files have been decrypted (`occ encryption:decrypt-all`).\n\t\t\t* **WARNING**: Reverting to non-encrypted file storage after activation requires command-line access. The action is permanent via the Web UI.\"\n\n\t\t\t**Notes for Existing Files**\n\t\t\t* By default, enabling SSE does not encrypt existing files; only new files will be encrypted.\n\t\t\t* To encrypt all existing files, use the command `occ encryption:encrypt-all`.\n\n\t\t\t**Before You Begin**\n\t\t\t* **Read the Documentation:** Before you enable SSE, encrypt existing files, or disable SSE, it is critical to \n\t\t\t\tread the documentation to understand implications and the appropriate procedures to avoid data loss.",
"Default encryption module" : "Default encryption module",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption app is enabled but your keys are not initialised, please log-out and log-in again",
"Encrypt the home storage" : "Encrypt the home storage",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted",
"Enable recovery key" : "Enable recovery key",
"Encrypt the home storage" : "Encrypt the home storage",
"Disable recovery key" : "Disable recovery key",
"Enable recovery key" : "Enable recovery key",
"The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten." : "The recovery key is an additional encryption key used to encrypt files. It is used to recover files from an account if the password is forgotten.",
"Recovery key password" : "Recovery key password",
"Repeat recovery key password" : "Repeat recovery key password",
"Change recovery key password:" : "Change recovery key password:",
"Old recovery key password" : "Old recovery key password",
"New recovery key password" : "New recovery key password",
"Repeat new recovery key password" : "Repeat new recovery key password",
"Change Password" : "Change Password",
"Basic encryption module" : "Basic encryption module",
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
"If you do not remember your old password you can ask your administrator to recover your files." : "If you do not remember your old password you can ask your administrator to recover your files.",
"Old log-in password" : "Old login password",
"Current log-in password" : "Current login password",
"Update" : "Update",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
"Default encryption module" : "Default encryption module",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Encryption app is enabled but your keys are not initialised, please log-out and log-in again",
"Basic encryption module" : "Basic encryption module",
"Missing parameters" : "Missing parameters",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption.",
"Change recovery key password:" : "Change recovery key password:",
"Change Password" : "Change Password",
"Your private key password no longer matches your log-in password." : "Your private key password no longer matches your log-in password.",
"Set your old private key password to your current log-in password:" : "Set your old private key password to your current log-in password:",
"Update Private Key Password" : "Update Private Key Password",
"Enable password recovery:" : "Enable password recovery:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Enabling this option will allow you to reobtain access to your encrypted files in case of password loss",
"Enabled" : "Enabled",
"Disabled" : "Disabled",
"Default encryption module for server-side encryption" : "Default encryption module for server-side encryption",
"In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption." : "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys.\nThe module will not touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to an unencrypted system.\nPlease read the documentation to know all implications before you decide to enable server-side encryption."
"Disabled" : "Disabled"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+14 -13
View File
@@ -8,7 +8,6 @@ OC.L10N.register(
"Could not enable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti ŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
"Recovery key successfully disabled" : "Restaŭroŝlosilo sukcese malŝaltita",
"Could not disable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti malŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
"Missing parameters" : "Mankas parametroj",
"Please provide the old recovery password" : "Bv. doni la malnovan pasvorton de restaŭroŝlosilo",
"Please provide a new recovery password" : "Bv. doni la novan pasvorton de restaŭroŝlosilo",
"Please repeat the new recovery password" : "Bv. ripeti la novan pasvorton de restaŭroŝlosilo",
@@ -28,29 +27,31 @@ OC.L10N.register(
"Bad Signature" : "Malbona subskribo",
"Missing Signature" : "Mankanta subskribo",
"one-time password for server-side-encryption" : "unuuza pasvorto por ĉeservila ĉifrado",
"Default encryption module" : "Defaŭlta ĉifra modulo",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ebligi tiun opcion ĉifras ĉiujn dosierojn de la ĉefkonservejo, alie nur dosieroj en ekstera konservejo ĉifriĝos.",
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
"Disable recovery key" : "Malŝalti restaŭroŝlosilon",
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
"Recovery key password" : "Pasvorto de restaŭroŝlosilo",
"Repeat recovery key password" : "Ripetu la pasvorton de restaŭroŝlosilo",
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
"Old recovery key password" : "Malnova pasvorto de restaŭroŝlosilo",
"New recovery key password" : "Nova pasvorto de restaŭroŝlosilo",
"Repeat new recovery key password" : "Ripetu la novan pasvorton de restaŭroŝlosilo",
"Change Password" : "Ŝanĝi pasvorton",
"Basic encryption module" : "Bazĉifrada modulo",
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
"Old log-in password" : "Malnova ensaluta pasvorto",
"Current log-in password" : "Nuna ensaluta pasvorto",
"Update" : "Ĝisdatigi",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
"Default encryption module" : "Defaŭlta ĉifra modulo",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
"Basic encryption module" : "Bazĉifrada modulo",
"Missing parameters" : "Mankas parametroj",
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado",
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
"Change Password" : "Ŝanĝi pasvorton",
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
"Update Private Key Password" : "Ĝisdatigi la pasvorton de la malpublika ŝlosilo",
"Enable password recovery:" : "Ŝalti restaŭron de pasvorto:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
"Enabled" : "Ŝaltita",
"Disabled" : "Malŝaltita",
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado"
"Disabled" : "Malŝaltita"
},
"nplurals=2; plural=(n != 1);");
+14 -13
View File
@@ -6,7 +6,6 @@
"Could not enable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti ŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
"Recovery key successfully disabled" : "Restaŭroŝlosilo sukcese malŝaltita",
"Could not disable recovery key. Please check your recovery key password!" : "Restaŭroŝlosilo ne povis esti malŝaltita. Bv. kontroli vian pasvorton de restaŭroŝlosilo!",
"Missing parameters" : "Mankas parametroj",
"Please provide the old recovery password" : "Bv. doni la malnovan pasvorton de restaŭroŝlosilo",
"Please provide a new recovery password" : "Bv. doni la novan pasvorton de restaŭroŝlosilo",
"Please repeat the new recovery password" : "Bv. ripeti la novan pasvorton de restaŭroŝlosilo",
@@ -26,29 +25,31 @@
"Bad Signature" : "Malbona subskribo",
"Missing Signature" : "Mankanta subskribo",
"one-time password for server-side-encryption" : "unuuza pasvorto por ĉeservila ĉifrado",
"Default encryption module" : "Defaŭlta ĉifra modulo",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
"Enabling this option encrypts all files stored on the main storage, otherwise only files on external storage will be encrypted" : "Ebligi tiun opcion ĉifras ĉiujn dosierojn de la ĉefkonservejo, alie nur dosieroj en ekstera konservejo ĉifriĝos.",
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
"Encrypt the home storage" : "Ĉifri la ĉefkonservejon",
"Disable recovery key" : "Malŝalti restaŭroŝlosilon",
"Enable recovery key" : "Ŝalti restaŭroŝlosilon",
"Recovery key password" : "Pasvorto de restaŭroŝlosilo",
"Repeat recovery key password" : "Ripetu la pasvorton de restaŭroŝlosilo",
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
"Old recovery key password" : "Malnova pasvorto de restaŭroŝlosilo",
"New recovery key password" : "Nova pasvorto de restaŭroŝlosilo",
"Repeat new recovery key password" : "Ripetu la novan pasvorton de restaŭroŝlosilo",
"Change Password" : "Ŝanĝi pasvorton",
"Basic encryption module" : "Bazĉifrada modulo",
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
"Old log-in password" : "Malnova ensaluta pasvorto",
"Current log-in password" : "Nuna ensaluta pasvorto",
"Update" : "Ĝisdatigi",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
"Default encryption module" : "Defaŭlta ĉifra modulo",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "Ĉifra aplikaĵo estas ŝaltita, sed viaj ŝlosiloj ne uziĝas. Bv. elsaluti kaj re-ensaluti.",
"Basic encryption module" : "Bazĉifrada modulo",
"Missing parameters" : "Mankas parametroj",
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado",
"Change recovery key password:" : "Ŝanĝi la pasvorton de la restaŭroŝlosilo:",
"Change Password" : "Ŝanĝi pasvorton",
"Your private key password no longer matches your log-in password." : "La pasvorto de via privata ŝlosilo ne plu kongruas kun via ensaluta pasvorto.",
"Set your old private key password to your current log-in password:" : "Agordi la pasvorton de via antaŭa privata ŝlosilo al via nuna ensaluta pasvorto:",
"Update Private Key Password" : "Ĝisdatigi la pasvorton de la malpublika ŝlosilo",
"Enable password recovery:" : "Ŝalti restaŭron de pasvorto:",
"Enabling this option will allow you to reobtain access to your encrypted files in case of password loss" : "Ŝalti tiun opcion ebligas al vi rehavi aliron al viaj ĉifritaj dosierojn okaze de pasvorta perdo.",
"Enabled" : "Ŝaltita",
"Disabled" : "Malŝaltita",
"Default encryption module for server-side encryption" : "Defaŭlta ĉifra modulo por ĉeservila ĉifrado"
"Disabled" : "Malŝaltita"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

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