Compare commits

...

95 Commits

Author SHA1 Message Date
Git'Fellow 1ba646a193 fix(PublicPreview): Call getMimetype() on File objects
Signed-off-by: Git'Fellow <12234510+solracsf@users.noreply.github.com>
2025-11-04 18:33:46 +01:00
Benjamin Gaussorgues 9581230b56 Merge pull request #56106 from nextcloud/fix/snowflake_apcu 2025-11-04 16:01:12 +01:00
Benjamin Gaussorgues 635a6ac9da Merge pull request #56095 from nextcloud/feat/add-serverid 2025-11-04 16:00:32 +01:00
Benjamin Gaussorgues d92b02a14a Merge pull request #56083 from nextcloud/fix/snowflakeids 2025-11-04 15:59:21 +01:00
Kate 6911a33d50 Merge pull request #55748 from nextcloud/bugfix/noid/closure-job 2025-11-04 12:56:33 +01:00
Joas Schilling 34f1ae62a1 fix(jobs): Limit command jobs to known cases
Signed-off-by: Joas Schilling <coding@schilljs.com>
2025-11-04 11:10:40 +01:00
Benjamin Gaussorgues df8d838186 Merge pull request #56035 from nextcloud/cacheXmlPaginationResponse 2025-11-04 10:52:41 +01:00
Salvatore Martire 36d515da61 fix(pagination): render multistatus to XML before caching
Signed-off-by: Salvatore Martire <4652631+salmart-dev@users.noreply.github.com>
2025-11-04 09:20:30 +01:00
Nextcloud bot 4770c2f120 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-04 00:13:50 +00:00
Andy Scherzinger d8c404c1ef Merge pull request #56099 from nextcloud/rakekniven-patch-1
chore(i18n): Adapted spelling of MIME type
2025-11-03 23:15:27 +01:00
dependabot[bot] 256e74d410 Merge pull request #55933 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/dompurify-3.3.0 2025-11-03 20:30:58 +00:00
nextcloud-command d267d839e3 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-11-03 18:52:24 +01:00
rakekniven 1588abec25 chore(i18n): Adapted spelling of MIME type
Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-11-03 18:52:24 +01:00
Ferdinand Thiessen 68e492ef17 Merge pull request #56129 from nextcloud/chore/remove-oc-app-config
chore: remove deprecated `OC.AppConfig` in favor of `OCP.AppConfig`
2025-11-03 16:25:48 +01:00
Joas Schilling f98cabc20f Merge pull request #56155 from nextcloud/feat/update-supported-postgres-versions
feat: Update supported PostgreSQL versions
2025-11-03 15:21:34 +01:00
Ferdinand Thiessen 101560af75 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-03 15:08:19 +01:00
Ferdinand Thiessen 15e610a63f chore: remove deprecated OC.AppConfig in favor of OCP.AppConfig
It was deprecated since Nextcloud 16 and can be replaced with
`OCP.AppConfig`.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-03 15:05:45 +01:00
Maxence Lange 4a399a3d0b Merge pull request #56159 from nextcloud/feat/noid/lexicon-internal-flag
feat(lexicon): add FLAG_INTERNAL
2025-11-03 12:55:21 -01:00
Benjamin Gaussorgues 1f74ed9239 feat(config): add serverid configuration and use it for Snowflakes
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-11-03 14:25:09 +01:00
Benjamin Gaussorgues 8062cdb485 fix(snowflakes): fix APCu cache restarted detection
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-11-03 14:21:30 +01:00
Benjamin Gaussorgues 69ec2ce26b Merge pull request #56120 from nextcloud/feat/snowflake-file-sequence 2025-11-03 14:02:33 +01:00
dependabot[bot] a1d6af4997 Merge pull request #56144 from nextcloud/dependabot/npm_and_yarn/globals-16.5.0 2025-11-03 12:58:58 +00:00
dependabot[bot] 3ed719afc5 Merge pull request #56148 from nextcloud/dependabot/npm_and_yarn/nextcloud/moment-1.3.5 2025-11-03 12:55:15 +00:00
dependabot[bot] 0dc0d593bb Merge pull request #56149 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/sass-1.93.3 2025-11-03 12:55:01 +00:00
Maxence Lange 1538692987 feat(lexicon): add FLAG_INTERNAL
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
2025-11-03 11:39:25 -01:00
provokateurin a529cdf080 feat: Update supportes PostgreSQL versions
Signed-off-by: provokateurin <kate@provokateurin.de>
2025-11-03 13:36:53 +01:00
Benjamin Gaussorgues 83dd9d313a feat(snowflakeids): add File Sequence Generator
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-11-03 11:45:13 +01:00
Kate e3edf43e28 Merge pull request #56096 from nextcloud/fix/56077/s3-configure-checksum-defaults 2025-11-03 11:08:33 +01:00
Stephan Orbaugh ef21c79368 Merge pull request #55717 from DaanSelen/fix-issue-55665
fix(ObjectStoreStorage): fix s3 path encoding (issue causing 55665)
2025-11-03 10:58:53 +01:00
nextcloud-command 13701dfda3 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-11-03 08:12:33 +00:00
dependabot[bot] cdcf1b6703 build(deps-dev): bump globals from 16.4.0 to 16.5.0
Bumps [globals](https://github.com/sindresorhus/globals) from 16.4.0 to 16.5.0.
- [Release notes](https://github.com/sindresorhus/globals/releases)
- [Commits](https://github.com/sindresorhus/globals/compare/v16.4.0...v16.5.0)

---
updated-dependencies:
- dependency-name: globals
  dependency-version: 16.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 08:09:38 +00:00
dependabot[bot] a26d2a553f Merge pull request #56145 from nextcloud/dependabot/npm_and_yarn/eslint-9.39.0 2025-11-03 08:06:20 +00:00
dependabot[bot] 87885e35d4 build(deps): bump @nextcloud/moment from 1.2.1 to 1.3.5
Bumps [@nextcloud/moment](https://github.com/nextcloud-libraries/nextcloud-moment) from 1.2.1 to 1.3.5.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-moment/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-moment/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-moment/compare/v1.2.1...v1.3.5)

---
updated-dependencies:
- dependency-name: "@nextcloud/moment"
  dependency-version: 1.3.5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 09:04:04 +01:00
dependabot[bot] 5169d9be94 build(deps-dev): bump sass in /build/frontend-legacy
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.2 to 1.93.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.2...1.93.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 00:51:48 +00:00
dependabot[bot] bfd2ede77d Merge pull request #56147 from nextcloud/dependabot/npm_and_yarn/sass-1.93.3 2025-11-03 00:47:42 +00:00
dependabot[bot] 4dcaca4e13 build(deps-dev): bump sass from 1.93.2 to 1.93.3
Bumps [sass](https://github.com/sass/dart-sass) from 1.93.2 to 1.93.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.93.2...1.93.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 00:24:17 +00:00
dependabot[bot] eef8dc26ba build(deps-dev): bump eslint from 9.38.0 to 9.39.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.38.0 to 9.39.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.39.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-03 00:23:47 +00:00
Nextcloud bot 2232e6851e fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-03 00:13:38 +00:00
Thomas Citharel 143d486748 Merge pull request #56140 from nextcloud/rakekniven-patch-2
chore(i18n): Fixed grammar
2025-11-02 21:38:01 +01:00
nextcloud-command bb062d149e chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-11-02 19:22:56 +00:00
rakekniven 9f56a2fcfc chore(i18n): Fixed grammar
Reported at Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2025-11-02 20:13:02 +01:00
dependabot[bot] 2c851228d3 Merge pull request #55928 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/msw-2.11.6 2025-11-02 18:45:36 +00:00
Joas Schilling ed050b2aae Merge pull request #56100 from nextcloud/rakekniven-patch-2
chore(l10n): Use numbered placeholders
2025-11-02 11:09:57 +01:00
rakekniven ee39b5093d chore(l10n): Use numbered placeholders
Reported in Transifex.

Signed-off-by: rakekniven <2069590+rakekniven@users.noreply.github.com>
2025-11-02 10:09:34 +01:00
Nextcloud bot 815338cdc0 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-02 00:13:29 +00:00
dependabot[bot] 35d6a829f1 Merge pull request #56122 from nextcloud/dependabot/composer/vendor-bin/rector/rector/rector-2.2.7 2025-11-01 21:33:09 +00:00
Ferdinand Thiessen 4a63bd2068 Merge pull request #56039 from nextcloud/fix/theming-legacy-app-config
fix(theming): use IAppConfig for all ThemingDefaults
2025-11-01 18:13:11 +01:00
dependabot[bot] 7885ac53e0 build(deps-dev): bump rector/rector in /vendor-bin/rector
Bumps [rector/rector](https://github.com/rectorphp/rector) from 2.2.5 to 2.2.7.
- [Release notes](https://github.com/rectorphp/rector/releases)
- [Commits](https://github.com/rectorphp/rector/compare/2.2.5...2.2.7)

---
updated-dependencies:
- dependency-name: rector/rector
  dependency-version: 2.2.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-01 17:34:39 +01:00
nextcloud-command 22ed856b31 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-11-01 16:02:58 +01:00
dependabot[bot] dc55aaf4d1 build(deps): bump dompurify in /build/frontend-legacy
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.2.7 to 3.3.0.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.2.7...3.3.0)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-01 16:02:58 +01:00
Ferdinand Thiessen 0bb1deb3de Merge pull request #56087 from nextcloud/chore/remove-oc-host
chore: remove deprecated hosts functions from OC
2025-11-01 15:06:42 +01:00
Ferdinand Thiessen f4ebcc7004 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 14:42:02 +01:00
Ferdinand Thiessen cf7ed089e1 chore: remove deprecated hosts functions from OC
- deprecated since Nextcloud 17

- To replace `OC.getHost` use `window.location.host`.
- To replace `OC.getHostName` use `window.location.hostname`.
- To replace `OC.getPort` use `window.location.port`.
- To replace `OC.getProtocol` use `window.location.protocol`.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 14:40:00 +01:00
Ferdinand Thiessen 9f40d4cac3 Merge pull request #56088 from nextcloud/chore/remove-oc-blacklist
chore: remove `OC.fileIsBlacklisted`
2025-11-01 14:39:07 +01:00
Ferdinand Thiessen 8840b582c5 refactor(theming): migrate ThemingDefaults to OCP\AppFramework\Services\IAppConfig
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 14:16:40 +01:00
dependabot[bot] 195a9a08e4 Merge pull request #56121 from nextcloud/dependabot/composer/build/integration/behat/behat-3.26.0 2025-11-01 13:00:50 +00:00
Ferdinand Thiessen f52e838a18 chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 13:52:06 +01:00
Ferdinand Thiessen fd0a7351c3 chore: remove OC.fileIsBlacklisted
Its deprecated since Nextcloud 18 and nowadays we have much more complex
logic for this.
So the proper replacement is to use `validateFilename` from
`@nextcloud/files` package.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 13:50:14 +01:00
Ferdinand Thiessen f67d90ab27 Merge pull request #56067 from nextcloud/refactor/twofactor-vue3
refactor(twofactor_backupcodes): migrate to Typescript and Vue 3
2025-11-01 13:41:04 +01:00
Ferdinand Thiessen 9008175bff chore: compile assets
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 12:40:02 +01:00
Ferdinand Thiessen 95915340f5 chore(twofactor_backupcodes): migrate to Vue 3
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 12:35:24 +01:00
Ferdinand Thiessen 11f4fa92cf refactor(twofactor_backupcodes): migrate Vue to script-setup and Typescript
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 12:34:26 +01:00
Ferdinand Thiessen 95f2d5dbac refactor(twofactor_backupcodes): migrate frontend to Typescript
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-11-01 12:34:26 +01:00
dependabot[bot] fb78ee8389 build(deps-dev): bump behat/behat in /build/integration
Bumps [behat/behat](https://github.com/Behat/Behat) from 3.25.0 to 3.26.0.
- [Release notes](https://github.com/Behat/Behat/releases)
- [Changelog](https://github.com/Behat/Behat/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Behat/Behat/compare/v3.25.0...v3.26.0)

---
updated-dependencies:
- dependency-name: behat/behat
  dependency-version: 3.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-11-01 02:07:27 +00:00
Nextcloud bot 095e4709b7 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-01 00:13:28 +00:00
dependabot[bot] ab2242c214 build(deps-dev): bump msw in /build/frontend-legacy
Bumps [msw](https://github.com/mswjs/msw) from 2.11.3 to 2.11.6.
- [Release notes](https://github.com/mswjs/msw/releases)
- [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mswjs/msw/compare/v2.11.3...v2.11.6)

---
updated-dependencies:
- dependency-name: msw
  dependency-version: 2.11.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 17:18:31 +01:00
Joas Schilling 481edbd553 Merge pull request #56109 from nextcloud/dependabot/composer/mlocati/ip-lib-1.22.0
build(deps): Bump mlocati/ip-lib from 1.20.0 to 1.22.0
2025-10-31 16:57:29 +01:00
dependabot[bot] a7e1492db3 Merge pull request #55920 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/marked-16.4.1 2025-10-31 15:12:49 +00:00
Joas Schilling d1b9486d12 build(deps): Bump mlocati/ip-lib from 1.20.0 to 1.22.0
Signed-off-by: Joas Schilling <coding@schilljs.com>
2025-10-31 15:27:10 +01:00
Ferdinand Thiessen 700f4db967 Merge pull request #56063 from nextcloud/tests/taskprocessing
test(TaskProcessing): use proper types
2025-10-31 15:04:49 +01:00
dependabot[bot] 0ba6c779c8 Merge pull request #56000 from nextcloud/dependabot/npm_and_yarn/nextcloud/vue-9.1.0 2025-10-31 14:02:08 +00:00
Joas Schilling 10fa94ac94 Merge pull request #56108 from nextcloud/ci/noid/action-pin-versions
ci(actions): Pin action versions by hash
2025-10-31 10:22:38 +01:00
Joas Schilling 9198244e6d ci(actions): Pin action versions by hash
Signed-off-by: Joas Schilling <coding@schilljs.com>
2025-10-31 09:53:05 +01:00
dependabot[bot] 1650adedf7 build(deps): bump marked from 16.3.0 to 16.4.1 in /build/frontend-legacy
Bumps [marked](https://github.com/markedjs/marked) from 16.3.0 to 16.4.1.
- [Release notes](https://github.com/markedjs/marked/releases)
- [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json)
- [Commits](https://github.com/markedjs/marked/compare/v16.3.0...v16.4.1)

---
updated-dependencies:
- dependency-name: marked
  dependency-version: 16.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 09:35:15 +01:00
nextcloud-command 80af22ca2d chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-10-31 07:53:05 +00:00
dependabot[bot] 5c55141353 build(deps): bump @nextcloud/vue from 9.0.1 to 9.1.0
Bumps [@nextcloud/vue](https://github.com/nextcloud-libraries/nextcloud-vue) from 9.0.1 to 9.1.0.
- [Release notes](https://github.com/nextcloud-libraries/nextcloud-vue/releases)
- [Changelog](https://github.com/nextcloud-libraries/nextcloud-vue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/nextcloud-libraries/nextcloud-vue/compare/v9.0.1...v9.1.0)

---
updated-dependencies:
- dependency-name: "@nextcloud/vue"
  dependency-version: 9.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-31 08:40:48 +01:00
Nextcloud bot f77c4f7c09 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-10-31 00:13:46 +00:00
dependabot[bot] 8eae6cc44f Merge pull request #55590 from nextcloud/dependabot/npm_and_yarn/stylelint-16.25.0 2025-10-30 23:35:44 +00:00
dependabot[bot] aa20f7a0dd Merge pull request #55934 from nextcloud/dependabot/npm_and_yarn/build/frontend-legacy/core-js-3.46.0 2025-10-30 23:16:24 +00:00
nextcloud-command 5d43550bd3 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-10-30 23:00:31 +00:00
dependabot[bot] eca835aae0 build(deps): bump core-js in /build/frontend-legacy
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.45.1 to 3.46.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.46.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.46.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-30 22:57:21 +00:00
Ferdinand Thiessen fdbd376c1f Merge pull request #56086 from nextcloud/chore/remove-oc-navigation
chore: remove deprecated `OC.redirect` and `OC.reload`
2025-10-30 23:43:22 +01:00
nextcloud-command 2b2dac9754 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-10-30 22:23:30 +00:00
Ferdinand Thiessen 439f825774 chore: remove deprecated OC.redirect and OC.reload
- Deprecated since Nextcloud 17

To replace `OC.redirect` directly use `window.location`.
To replace `OC.reload` directly use `window.location.reload`.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-10-30 23:14:37 +01:00
Ferdinand Thiessen f4e8cd13a4 Merge pull request #56089 from nextcloud/chore/remove-oc-set-get
chore: remove `OC.set` and `OC.get`
2025-10-30 23:13:06 +01:00
nextcloud-command 1c347bcac5 chore(assets): Recompile assets
Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
2025-10-30 21:14:12 +00:00
Ferdinand Thiessen bea30fcb2b chore: remove OC.set and OC.get
Both are deprecated since Nextcloud 19.
- For `get`, if really needed, use https://lodash.com/docs#get
- And for `set` https://lodash.com/docs#set

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-10-30 22:06:11 +01:00
Arthur Schiwon 5060d64c9b Merge pull request #56085 from nextcloud/fix/55613/drop-hard-base-checks
fix(LDAP): drop hard base checks for now
2025-10-30 14:56:35 +01:00
Fiehe Christoph b87add2711 fix(s3): expose request_checksum_calculation and response_checksum_validation
Fix https://github.com/nextcloud/server/issues/56077

This commit makes the configuration settings 'request_checksum_calculation' and 'response_checksum_validation' of the S3Client from the AWS SDK for PHP configurable.

Signed-off-by: Fiehe Christoph  <c.fiehe@eurodata.de>
Signed-off-by: Daniel Kesselberg <mail@danielkesselberg.de>
2025-10-30 11:57:32 +01:00
Ferdinand Thiessen af7c56a75e test(TaskProcessing): use proper types
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-10-30 00:07:56 +01:00
Arthur Schiwon 57cb905580 fix(LDAP): drop hard base checks for now
The migration path is hard and unexpected. We can follow-up with a soft
setup check instead for a while, but needs to be discussed.

Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
2025-10-29 18:21:45 +01:00
Benjamin Gaussorgues 231b7f8c41 chore(snowflakes): small fixes on decode command
Signed-off-by: Benjamin Gaussorgues <benjamin.gaussorgues@nextcloud.com>
2025-10-29 17:28:54 +01:00
Ferdinand Thiessen 4667634247 fix(theming): use IAppConfig for all ThemingDefaults
Fixes issues where values have the wrong type.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
2025-10-28 14:58:17 +01:00
dependabot[bot] 7a47fd6d04 build(deps-dev): bump stylelint from 16.24.0 to 16.25.0
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.24.0 to 16.25.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stylelint/stylelint/compare/16.24.0...16.25.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-10-20 16:19:13 +00:00
Daan Selen 4b4b39e7ec fix(ObjectStoreStorage): Encode original-path in writeStream by @frabe1579
Signed-off-by: Daan Selen <dselen@systemec.nl>
2025-10-15 11:53:39 +02:00
590 changed files with 3459 additions and 3636 deletions
+5 -3
View File
@@ -32,16 +32,18 @@ jobs:
build-mode: none
steps:
- name: Checkout repository
uses: actions/checkout@v5
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
config-file: ./.github/codeql-config.yml
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@5d5cd550d3e189c569da8f16ea8de2d821c9bf7a # v3.31.2
with:
category: "/language:${{matrix.language}}"
+4 -4
View File
@@ -61,13 +61,13 @@ jobs:
matrix:
php-versions: ['8.2']
# To keep the matrix smaller we ignore PostgreSQL versions in between as we already test the minimum and the maximum
postgres-versions: ['13', '17']
postgres-versions: ['14', '18']
include:
- php-versions: '8.3'
postgres-versions: '17'
postgres-versions: '18'
coverage: ${{ github.event_name != 'pull_request' }}
- php-versions: '8.4'
postgres-versions: '17'
postgres-versions: '18'
name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests
@@ -86,7 +86,7 @@ jobs:
POSTGRES_USER: root
POSTGRES_PASSWORD: rootpassword
POSTGRES_DB: nextcloud
options: --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
options: --mount type=tmpfs,destination=/var/lib/postgresql --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
steps:
- name: Checkout server
+1
View File
@@ -17,6 +17,7 @@ OC.L10N.register(
"Delete comment" : "Elimina commento",
"Cancel edit" : "Annulla modifica",
"New comment" : "Nuovo commento",
"Write a comment …" : "Scrivi un commento ...",
"Post comment" : "Pubblica commento",
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
"Could not reload comments" : "Impossibile ricaricare i commenti",
+1
View File
@@ -15,6 +15,7 @@
"Delete comment" : "Elimina commento",
"Cancel edit" : "Annulla modifica",
"New comment" : "Nuovo commento",
"Write a comment …" : "Scrivi un commento ...",
"Post comment" : "Pubblica commento",
"@ for mentions, : for emoji, / for smart picker" : "@ per menzioni, : per emoji, / per selettore intelligente",
"Could not reload comments" : "Impossibile ricaricare i commenti",
+1
View File
@@ -20,6 +20,7 @@ OC.L10N.register(
"Edit widgets" : "Modifica widget",
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
"Weather service" : "Servizio meteo",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
"Weather data from Met.no" : "Dati meteo da Met.no",
"geocoding with Nominatim" : "geocodifica conh Nominatim",
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
+1
View File
@@ -18,6 +18,7 @@
"Edit widgets" : "Modifica widget",
"Get more widgets from the App Store" : "Ottieni altri widget dal negozio delle applicazioni",
"Weather service" : "Servizio meteo",
"For your privacy, the weather data is requested by your {productName} server on your behalf so the weather service receives no personal information." : "Per la tua riservatezza, i dati meteorologici sono richiesti dal tuo server {productName} per tuo conto, per cui il servizio meteo non riceve informazioni personali.",
"Weather data from Met.no" : "Dati meteo da Met.no",
"geocoding with Nominatim" : "geocodifica conh Nominatim",
"elevation data from OpenTopoData" : "dati di elevazione da OpenTopoData",
+1
View File
@@ -186,6 +186,7 @@ OC.L10N.register(
"Delete slot" : "Изтриване на слот",
"No working hours set" : "Няма зададено работно време",
"Add slot" : "Добавяне на слот",
"Weekdays" : "Делнични дни",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
"Cancel" : "Отказ",
"Import" : "Импортиране /внасяне/",
+1
View File
@@ -184,6 +184,7 @@
"Delete slot" : "Изтриване на слот",
"No working hours set" : "Няма зададено работно време",
"Add slot" : "Добавяне на слот",
"Weekdays" : "Делнични дни",
"Automatically set user status to \"Do not disturb\" outside of availability to mute all notifications." : "Автоматично задаване на потребителският статус на „Не безпокойте“ извън достъпността, за заглушаване на всички известия.",
"Cancel" : "Отказ",
"Import" : "Импортиране /внасяне/",
+114 -6
View File
@@ -72,15 +72,78 @@ OC.L10N.register(
"Description: %s" : "Descrizione: %s",
"Where: %s" : "Dove: %s",
"%1$s via %2$s" : "%1$s tramite %2$s",
"In the past on %1$s for the entire day" : "In passato ogni %1$s per l'intero giorno",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Fra un minuto il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Fra un'ora il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Fra un giorno il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Fra una settimana il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Fra un mese il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Fra un anno di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno"],
"In the past on %1$s between %2$s - %3$s" : "In passato il %1$s nelle ore %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Fra un minuto il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Fra un'ora il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Fra un giorno il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Fra una settimana il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Fra un mese il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Fra un anno il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s"],
"Could not generate when statement" : "Impossibile generare l'istruzione \"quando\"",
"Every Day for the entire day" : "Ogni giorno per l'intero giorno",
"Every Day for the entire day until %1$s" : "Ogni Giorno per l'intero giorno fino a %1$s",
"Every Day between %1$s - %2$s" : "Ogni giorno tra %1$s-%2$s",
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno tra %1$s -%2$s fino al %3$s",
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per tutto il giorno",
"Every Day between %1$s - %2$s" : "Ogni giorno nelle ore %1$s-%2$s",
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno nelle ore %1$s -%2$s fino al %3$s",
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per l'intero giorno",
"Every %1$d Days for the entire day until %2$s" : "Ogni %1$d Giorni per l'intero giorno fino al %2$s",
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni tra %2$s-%3$s",
"Every Week on %1$s for the entire day" : "Ogni settimana di %1$s per l'intero giorno",
"Every Week on %1$s for the entire day until %2$s" : "Ogni settimana di %1$s per l'intero giorno fino al %2$s",
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni nelle ore %2$s-%3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Ogni %1$d Giorni nelle ore %2$s - %3$s fino al %4$s",
"Could not generate event recurrence statement" : "Impossibile generare l'istruzione di ricorrenza dell'evento",
"Every Week on %1$s for the entire day" : "Ogni Settimana il %1$s per l'intero giorno",
"Every Week on %1$s for the entire day until %2$s" : "Ogni Settimana il %1$s per l'intero giorno fino al %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s fino al %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Ogni %1$d Settimane il %2$s per l'intero giorno",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Ogni %1$d Settimane il %2$s per l'intero giorno fino al %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every Month on the %1$s for the entire day" : "Ogni Mese il/la %1$s per l'intero giorno",
"Every Month on the %1$s for the entire day until %2$s" : "Ogni Mese il/la %1$s per l'intero giorno fino al %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s fino al %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno fino al %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno fino al %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno fino al %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s fino al %6$s",
"On specific dates for the entire day until %1$s" : "In una specifica data per l'intero giorno fino al %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "In una specifica data nelle ore %1$s - %2$s fino al %3$s",
"In the past on %1$s" : "In passato il %1$s",
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Fra un minuto il %1$s","Fra %n minuti il %1$s","Fra %n minuti il %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Fra un'ora il %1$s","Fra %n ore il %1$s","Fra %n ore il %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["Fra un giorno il %1$s","Fra %n giorni il %1$s","Fra %n giorni il %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Fra una settimana il %1$s","Fra %n settimane il %1$s","Fra %n settimane il %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["Fra un mese il %1$s","Fra %n mesi il %1$s","Fra %n mesi il %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["Fra un anno il %1$s","Fra %n anni il %1$s","Fra %n anni il %1$s"],
"In the past on %1$s then on %2$s" : "In passato il %1$s successivamente il %2$s",
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Fra un minuto %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Fra un'ora %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Fra un giorno %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Fra una settimana %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Fra un mese %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Fra un anno %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "In passato il %1$s successivamente il %2$s e %3$s",
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Fra un minuto il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Fra un'ora il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Fra un giorno il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Fra una settimana il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Fra un mese il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Fra un anno il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s"],
"Could not generate next recurrence statement" : "Impossibile generare l'istruzione della prossima ricorrenza ",
"Cancelled: %1$s" : "Annullato: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" è stato annullato",
"Re: %1$s" : "Re: %1$s",
@@ -98,6 +161,7 @@ OC.L10N.register(
"When:" : "Quando:",
"Location:" : "Posizione:",
"Link:" : "Collegamento:",
"Occurring:" : "Ricorrenza:",
"Accept" : "Accetta",
"Decline" : "Rifiuta",
"More options …" : "Altre opzioni...",
@@ -122,7 +186,15 @@ OC.L10N.register(
"November" : "Novembre",
"December" : "Dicembre",
"First" : "Primo",
"Second" : "Secondo",
"Third" : "Terzo",
"Fourth" : "Quarto",
"Fifth" : "Quinto",
"Last" : "Ultimo",
"Second Last" : "Penultimo",
"Third Last" : "Terzultimo",
"Fourth Last" : "Quartultimo",
"Fifth Last" : "Quintultimo",
"Contacts" : "Contatti",
"{actor} created address book {addressbook}" : "{actor} ha creato la rubrica {addressbook}",
"You created address book {addressbook}" : "Hai creato la rubrica {addressbook}",
@@ -148,9 +220,12 @@ OC.L10N.register(
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha aggiornato il contatto {card} nella rubrica {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Hai aggiornato il contatto {card} nella rubrica {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contatto</strong> o <strong>rubrica</strong> sono stati modificati ",
"System address book disabled" : "Rubrica di sistema disabilitata",
"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}" : "La rubrica dei contatti di sistema è stata disabilitata automaticamente durante l'aggiornamento. Ciò significa che la rubrica non sarà più disponibile per gli utenti nell'app Contatti o in altri client. La rubrica dei contatti di sistema è stata disabilitata perché il numero di contatti nella rubrica ha superato il numero massimo consigliato. Questo limite è stato impostato per evitare problemi di prestazioni. È possibile riabilitare la rubrica di sistema con il seguente comando {command}",
"Accounts" : "Account",
"System address book which holds all accounts" : "Rubrica di sistema che contiene tutti gli account",
"File is not updatable: %1$s" : "Il file non è aggiornabile: %1$s",
"Failed to get storage for file" : "Impossibile ottenere spazio di archiviazione per il file",
"Could not write to final file, canceled by hook" : "Impossibile scrivere nel file finale, annullato da hook",
"Could not write file contents" : "Impossibile scrivere il contenuto del file",
"_%n byte_::_%n bytes_" : ["%n byte","%n byte","%n byte"],
@@ -159,11 +234,14 @@ OC.L10N.register(
"Could not rename part file to final file, canceled by hook" : "Impossibile rinominare il file di parte in file finale, annullato da hook",
"Could not rename part file to final file" : "Impossibile rinominare il file di parte in file finale",
"Failed to check file size: %1$s" : "Verifica della dimensione del file non riuscito: %1$s",
"Could not open file: %1$s, file does seem to exist" : "Impossibile aprire il file: %1$s, il file sembra esistere",
"Could not open file: %1$s, file doesn't seem to exist" : "Impossibile aprire il file: %1$s, il file non sembra esistere",
"Encryption not ready: %1$s" : "Cifratura non pronta: %1$s",
"Failed to open file: %1$s" : "Apertura del file non riuscito: %1$s",
"Failed to unlink: %1$s" : "Scollegamento non riuscito: %1$s",
"Failed to write file contents: %1$s" : "Scrittura del contenuto del file non riuscita: %1$s",
"File not found: %1$s" : "File non trovato: %1$s",
"Invalid target path" : "Percorso di destinazione non valido",
"System is in maintenance mode." : "Il sistema è in modalità di manutenzione.",
"Upgrade needed" : "Aggiornamento necessario",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Il tuo %s deve essere configurato all'uso di HTTPS per poter usare CalDAV e CardDAV con iOS/macOS.",
@@ -174,9 +252,18 @@ OC.L10N.register(
"Completed on %s" : "Completata il %s",
"Due on %s by %s" : "Scade il %s per %s",
"Due on %s" : "Scade il %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." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
"Example event - open me!" : "Evento d'esempio - aprimi!",
"System Address Book" : "Rubrica di Sistema",
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
"Enable System Address Book" : "Abilita rubrica di sistema",
"DAV system address book" : "Rubrica di sistema DAV",
"No outstanding DAV system address book sync." : "Nessuna sincronizzazione della rubrica del sistema DAV in sospeso.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronizzazione della rubrica del sistema DAV non è ancora stata eseguita poiché la tua istanza ha più di 1000 utenti o perché si è verificato un errore. Eseguila a mano chiamando \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Dimensione della rubrica del sistema DAV",
"The system address book is disabled" : "La rubrica di sistema è disabilitata",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, ma contiene più del limite configurato di %d contatti",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, e contiene meno del limite configurato di %d contatti",
"WebDAV endpoint" : "Terminatore WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossibile verificare se il server è configurato correttamente per consentire la sincronizzazione di file via WebDAV. Controllalo a mano.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
@@ -191,6 +278,8 @@ OC.L10N.register(
"Failed to clear your absence settings" : "Impossibile cancellare le impostazioni di assenza",
"First day" : "Primo giorno",
"Last day (inclusive)" : "Ultimo giorno (inclusivo)",
"Out of office replacement (optional)" : "Sostituzione per assenza (opzionale)",
"Name of the replacement" : "Nome del sostituto",
"Short absence status" : "Stato di assenza breve",
"Long absence Message" : "Messaggio di assenza lunga",
"Save" : "Salva",
@@ -209,7 +298,22 @@ OC.L10N.register(
"Cancel" : "Annulla",
"Import" : "Importa",
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
"Contact reset successfully" : "Contatto resettato con successo",
"Error while resetting contact" : "Errore durante il reset del contatto",
"Contact imported successfully" : "Contatto importato con successo",
"Error while importing contact" : "Errore durante l'importazione del contatto",
"Import contact" : "Importa contatto",
"Reset to default" : "Ripristina valori predefiniti",
"Import contacts" : "Importa contatti",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "L'importazione di un nuovo file .vcf cancellerà il contatto predefinito esistente e lo sostituirà con quello nuovo. Vuoi continuare?",
"Failed to save example event creation setting" : "Impossibile salvare le impostazioni di creazione dell'evento di esempio",
"Failed to upload the example event" : "Impossibile caricare l'evento di esempio",
"Custom example event was saved successfully" : "Esempio di evento personalizzato salvato correttamente",
"Failed to delete the custom example event" : "Impossibile eliminare l'evento di esempio personalizzato",
"Custom example event was deleted successfully" : "L'evento personalizzato di esempio è stato eliminato correttamente.",
"Import calendar event" : "Importa evento del calendario",
"Uploading a new event will overwrite the existing one." : "Il caricamento di un nuovo evento sovrascriverà quello esistente.",
"Upload event" : "Carica evento",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
"Calendar server" : "Server di calendari",
@@ -222,6 +326,8 @@ OC.L10N.register(
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
"Example content" : "Contenuto d'esempio",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
"Availability" : "Disponibilità",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
"Absence" : "Assenza",
@@ -231,6 +337,8 @@ OC.L10N.register(
"Are you accepting the invitation?" : "Accetti l'invito?",
"Tentative" : "Provvisorio",
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
"No results." : "Nessun risultato.",
"Start typing." : "Inizia a scrivere.",
"Time zone:" : "Fuso orario:"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
+114 -6
View File
@@ -70,15 +70,78 @@
"Description: %s" : "Descrizione: %s",
"Where: %s" : "Dove: %s",
"%1$s via %2$s" : "%1$s tramite %2$s",
"In the past on %1$s for the entire day" : "In passato ogni %1$s per l'intero giorno",
"_In a minute on %1$s for the entire day_::_In %n minutes on %1$s for the entire day_" : ["Fra un minuto il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno","Fra %n minuti il %1$s per l'intero giorno"],
"_In a hour on %1$s for the entire day_::_In %n hours on %1$s for the entire day_" : ["Fra un'ora il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno","Fra %n ore il %1$s per l'intero giorno"],
"_In a day on %1$s for the entire day_::_In %n days on %1$s for the entire day_" : ["Fra un giorno il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno","Fra %n giorni il %1$s per l'intero giorno"],
"_In a week on %1$s for the entire day_::_In %n weeks on %1$s for the entire day_" : ["Fra una settimana il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno","Fra %n settimane il %1$s per l'intero giorno"],
"_In a month on %1$s for the entire day_::_In %n months on %1$s for the entire day_" : ["Fra un mese il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno","Fra %n mesi il %1$s per l'intero giorno"],
"_In a year on %1$s for the entire day_::_In %n years on %1$s for the entire day_" : ["Fra un anno di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno","Fra %n anni di %1$s per l'intero giorno"],
"In the past on %1$s between %2$s - %3$s" : "In passato il %1$s nelle ore %2$s - %3$s",
"_In a minute on %1$s between %2$s - %3$s_::_In %n minutes on %1$s between %2$s - %3$s_" : ["Fra un minuto il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s","Fra %n minuti il %1$s nelle ore %2$s - %3$s"],
"_In a hour on %1$s between %2$s - %3$s_::_In %n hours on %1$s between %2$s - %3$s_" : ["Fra un'ora il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s","Fra %n ore il %1$s nelle ore %2$s - %3$s"],
"_In a day on %1$s between %2$s - %3$s_::_In %n days on %1$s between %2$s - %3$s_" : ["Fra un giorno il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s","Fra %n giorni il %1$s nelle ore %2$s - %3$s"],
"_In a week on %1$s between %2$s - %3$s_::_In %n weeks on %1$s between %2$s - %3$s_" : ["Fra una settimana il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s","Fra %n settimane il %1$s nelle ore %2$s - %3$s"],
"_In a month on %1$s between %2$s - %3$s_::_In %n months on %1$s between %2$s - %3$s_" : ["Fra un mese il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s","Fra %n mesi il %1$s nelle ore %2$s - %3$s"],
"_In a year on %1$s between %2$s - %3$s_::_In %n years on %1$s between %2$s - %3$s_" : ["Fra un anno il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s","Fra %n anni il %1$s nelle ore %2$s - %3$s"],
"Could not generate when statement" : "Impossibile generare l'istruzione \"quando\"",
"Every Day for the entire day" : "Ogni giorno per l'intero giorno",
"Every Day for the entire day until %1$s" : "Ogni Giorno per l'intero giorno fino a %1$s",
"Every Day between %1$s - %2$s" : "Ogni giorno tra %1$s-%2$s",
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno tra %1$s -%2$s fino al %3$s",
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per tutto il giorno",
"Every Day between %1$s - %2$s" : "Ogni giorno nelle ore %1$s-%2$s",
"Every Day between %1$s - %2$s until %3$s" : "Ogni giorno nelle ore %1$s -%2$s fino al %3$s",
"Every %1$d Days for the entire day" : "Ogni %1$d Giorni per l'intero giorno",
"Every %1$d Days for the entire day until %2$s" : "Ogni %1$d Giorni per l'intero giorno fino al %2$s",
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni tra %2$s-%3$s",
"Every Week on %1$s for the entire day" : "Ogni settimana di %1$s per l'intero giorno",
"Every Week on %1$s for the entire day until %2$s" : "Ogni settimana di %1$s per l'intero giorno fino al %2$s",
"Every %1$d Days between %2$s - %3$s" : "Ogni %1$d Giorni nelle ore %2$s-%3$s",
"Every %1$d Days between %2$s - %3$s until %4$s" : "Ogni %1$d Giorni nelle ore %2$s - %3$s fino al %4$s",
"Could not generate event recurrence statement" : "Impossibile generare l'istruzione di ricorrenza dell'evento",
"Every Week on %1$s for the entire day" : "Ogni Settimana il %1$s per l'intero giorno",
"Every Week on %1$s for the entire day until %2$s" : "Ogni Settimana il %1$s per l'intero giorno fino al %2$s",
"Every Week on %1$s between %2$s - %3$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s",
"Every Week on %1$s between %2$s - %3$s until %4$s" : "Ogni Settimana il %1$s nelle ore %2$s - %3$s fino al %4$s",
"Every %1$d Weeks on %2$s for the entire day" : "Ogni %1$d Settimane il %2$s per l'intero giorno",
"Every %1$d Weeks on %2$s for the entire day until %3$s" : "Ogni %1$d Settimane il %2$s per l'intero giorno fino al %3$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s",
"Every %1$d Weeks on %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Settimane il %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every Month on the %1$s for the entire day" : "Ogni Mese il/la %1$s per l'intero giorno",
"Every Month on the %1$s for the entire day until %2$s" : "Ogni Mese il/la %1$s per l'intero giorno fino al %2$s",
"Every Month on the %1$s between %2$s - %3$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s",
"Every Month on the %1$s between %2$s - %3$s until %4$s" : "Ogni Mese il/la %1$s nelle ore %2$s - %3$s fino al %4$s",
"Every %1$d Months on the %2$s for the entire day" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno",
"Every %1$d Months on the %2$s for the entire day until %3$s" : "Ogni %1$d Mesi il/la %2$s per l'intero giorno fino al %3$s",
"Every %1$d Months on the %2$s between %3$s - %4$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s",
"Every %1$d Months on the %2$s between %3$s - %4$s until %5$s" : "Ogni %1$d Mesi il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every Year in %1$s on the %2$s for the entire day" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno",
"Every Year in %1$s on the %2$s for the entire day until %3$s" : "Ogni Anno a %1$s il/la %2$s per l'intero giorno fino al %3$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s",
"Every Year in %1$s on the %2$s between %3$s - %4$s until %5$s" : "Ogni Anno a %1$s il/la %2$s nelle ore %3$s - %4$s fino al %5$s",
"Every %1$d Years in %2$s on the %3$s for the entire day" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno",
"Every %1$d Years in %2$s on the %3$s for the entire day until %4$s" : "Ogni %1$d Anni a %2$s il/la %3$s per l'intero giorno fino al %4$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s",
"Every %1$d Years in %2$s on the %3$s between %4$s - %5$s until %6$s" : "Ogni %1$d Anni a %2$s il/la %3$s nelle ore %4$s - %5$s fino al %6$s",
"On specific dates for the entire day until %1$s" : "In una specifica data per l'intero giorno fino al %1$s",
"On specific dates between %1$s - %2$s until %3$s" : "In una specifica data nelle ore %1$s - %2$s fino al %3$s",
"In the past on %1$s" : "In passato il %1$s",
"_In a minute on %1$s_::_In %n minutes on %1$s_" : ["Fra un minuto il %1$s","Fra %n minuti il %1$s","Fra %n minuti il %1$s"],
"_In a hour on %1$s_::_In %n hours on %1$s_" : ["Fra un'ora il %1$s","Fra %n ore il %1$s","Fra %n ore il %1$s"],
"_In a day on %1$s_::_In %n days on %1$s_" : ["Fra un giorno il %1$s","Fra %n giorni il %1$s","Fra %n giorni il %1$s"],
"_In a week on %1$s_::_In %n weeks on %1$s_" : ["Fra una settimana il %1$s","Fra %n settimane il %1$s","Fra %n settimane il %1$s"],
"_In a month on %1$s_::_In %n months on %1$s_" : ["Fra un mese il %1$s","Fra %n mesi il %1$s","Fra %n mesi il %1$s"],
"_In a year on %1$s_::_In %n years on %1$s_" : ["Fra un anno il %1$s","Fra %n anni il %1$s","Fra %n anni il %1$s"],
"In the past on %1$s then on %2$s" : "In passato il %1$s successivamente il %2$s",
"_In a minute on %1$s then on %2$s_::_In %n minutes on %1$s then on %2$s_" : ["Fra un minuto %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s","Fra %n minuti %1$s successivamente il %2$s"],
"_In a hour on %1$s then on %2$s_::_In %n hours on %1$s then on %2$s_" : ["Fra un'ora %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s","Fra %n ore %1$s successivamente il %2$s"],
"_In a day on %1$s then on %2$s_::_In %n days on %1$s then on %2$s_" : ["Fra un giorno %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s","Fra %n giorni %1$s successivamente il %2$s"],
"_In a week on %1$s then on %2$s_::_In %n weeks on %1$s then on %2$s_" : ["Fra una settimana %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s","Fra %n settimane %1$s successivamente il %2$s"],
"_In a month on %1$s then on %2$s_::_In %n months on %1$s then on %2$s_" : ["Fra un mese %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s","Fra %n mesi %1$s successivamente il %2$s"],
"_In a year on %1$s then on %2$s_::_In %n years on %1$s then on %2$s_" : ["Fra un anno %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s","Fra %n anni %1$s successivamente il %2$s"],
"In the past on %1$s then on %2$s and %3$s" : "In passato il %1$s successivamente il %2$s e %3$s",
"_In a minute on %1$s then on %2$s and %3$s_::_In %n minutes on %1$s then on %2$s and %3$s_" : ["Fra un minuto il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s","Fra %n minuti il %1$s successivamente il %2$s e %3$s"],
"_In a hour on %1$s then on %2$s and %3$s_::_In %n hours on %1$s then on %2$s and %3$s_" : ["Fra un'ora il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s","Fra %n ore il %1$s successivamente il %2$s e %3$s"],
"_In a day on %1$s then on %2$s and %3$s_::_In %n days on %1$s then on %2$s and %3$s_" : ["Fra un giorno il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s","Fra %n giorni il %1$s successivamente il %2$s e %3$s"],
"_In a week on %1$s then on %2$s and %3$s_::_In %n weeks on %1$s then on %2$s and %3$s_" : ["Fra una settimana il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s","Fra %n settimane il %1$s successivamente il %2$s e %3$s"],
"_In a month on %1$s then on %2$s and %3$s_::_In %n months on %1$s then on %2$s and %3$s_" : ["Fra un mese il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s","Fra %n mesi il %1$s successivamente il %2$s e %3$s"],
"_In a year on %1$s then on %2$s and %3$s_::_In %n years on %1$s then on %2$s and %3$s_" : ["Fra un anno il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s","Fra %n anni il %1$s successivamente il %2$s e %3$s"],
"Could not generate next recurrence statement" : "Impossibile generare l'istruzione della prossima ricorrenza ",
"Cancelled: %1$s" : "Annullato: %1$s",
"\"%1$s\" has been canceled" : "\"%1$s\" è stato annullato",
"Re: %1$s" : "Re: %1$s",
@@ -96,6 +159,7 @@
"When:" : "Quando:",
"Location:" : "Posizione:",
"Link:" : "Collegamento:",
"Occurring:" : "Ricorrenza:",
"Accept" : "Accetta",
"Decline" : "Rifiuta",
"More options …" : "Altre opzioni...",
@@ -120,7 +184,15 @@
"November" : "Novembre",
"December" : "Dicembre",
"First" : "Primo",
"Second" : "Secondo",
"Third" : "Terzo",
"Fourth" : "Quarto",
"Fifth" : "Quinto",
"Last" : "Ultimo",
"Second Last" : "Penultimo",
"Third Last" : "Terzultimo",
"Fourth Last" : "Quartultimo",
"Fifth Last" : "Quintultimo",
"Contacts" : "Contatti",
"{actor} created address book {addressbook}" : "{actor} ha creato la rubrica {addressbook}",
"You created address book {addressbook}" : "Hai creato la rubrica {addressbook}",
@@ -146,9 +218,12 @@
"{actor} updated contact {card} in address book {addressbook}" : "{actor} ha aggiornato il contatto {card} nella rubrica {addressbook}",
"You updated contact {card} in address book {addressbook}" : "Hai aggiornato il contatto {card} nella rubrica {addressbook}",
"A <strong>contact</strong> or <strong>address book</strong> was modified" : "Un <strong>contatto</strong> o <strong>rubrica</strong> sono stati modificati ",
"System address book disabled" : "Rubrica di sistema disabilitata",
"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}" : "La rubrica dei contatti di sistema è stata disabilitata automaticamente durante l'aggiornamento. Ciò significa che la rubrica non sarà più disponibile per gli utenti nell'app Contatti o in altri client. La rubrica dei contatti di sistema è stata disabilitata perché il numero di contatti nella rubrica ha superato il numero massimo consigliato. Questo limite è stato impostato per evitare problemi di prestazioni. È possibile riabilitare la rubrica di sistema con il seguente comando {command}",
"Accounts" : "Account",
"System address book which holds all accounts" : "Rubrica di sistema che contiene tutti gli account",
"File is not updatable: %1$s" : "Il file non è aggiornabile: %1$s",
"Failed to get storage for file" : "Impossibile ottenere spazio di archiviazione per il file",
"Could not write to final file, canceled by hook" : "Impossibile scrivere nel file finale, annullato da hook",
"Could not write file contents" : "Impossibile scrivere il contenuto del file",
"_%n byte_::_%n bytes_" : ["%n byte","%n byte","%n byte"],
@@ -157,11 +232,14 @@
"Could not rename part file to final file, canceled by hook" : "Impossibile rinominare il file di parte in file finale, annullato da hook",
"Could not rename part file to final file" : "Impossibile rinominare il file di parte in file finale",
"Failed to check file size: %1$s" : "Verifica della dimensione del file non riuscito: %1$s",
"Could not open file: %1$s, file does seem to exist" : "Impossibile aprire il file: %1$s, il file sembra esistere",
"Could not open file: %1$s, file doesn't seem to exist" : "Impossibile aprire il file: %1$s, il file non sembra esistere",
"Encryption not ready: %1$s" : "Cifratura non pronta: %1$s",
"Failed to open file: %1$s" : "Apertura del file non riuscito: %1$s",
"Failed to unlink: %1$s" : "Scollegamento non riuscito: %1$s",
"Failed to write file contents: %1$s" : "Scrittura del contenuto del file non riuscita: %1$s",
"File not found: %1$s" : "File non trovato: %1$s",
"Invalid target path" : "Percorso di destinazione non valido",
"System is in maintenance mode." : "Il sistema è in modalità di manutenzione.",
"Upgrade needed" : "Aggiornamento necessario",
"Your %s needs to be configured to use HTTPS in order to use CalDAV and CardDAV with iOS/macOS." : "Il tuo %s deve essere configurato all'uso di HTTPS per poter usare CalDAV e CardDAV con iOS/macOS.",
@@ -172,9 +250,18 @@
"Completed on %s" : "Completata il %s",
"Due on %s by %s" : "Scade il %s per %s",
"Due on %s" : "Scade il %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." : "Benvenuto nel Calendario Nextcloud!\n\nQuesto è un evento di esempio: scopri la flessibilità della pianificazione con Calendario Nextcloud apportando tutte le modifiche che desideri!\n\nCon il Calendario Nextcloud puoi:\n- Creare, modificare e gestire eventi senza alcuno sforzo.\n- Creare più calendari e condividerli con colleghi, amici o familiari.\n- Verificare la disponibilità e mostrare agli altri i tuoi impegni.\n- Integrare perfettamente app e dispositivi tramite CalDAV.\n- Personalizzare la tua esperienza: pianificare eventi ricorrenti, regolare le notifiche e altre impostazioni.",
"Example event - open me!" : "Evento d'esempio - aprimi!",
"System Address Book" : "Rubrica di Sistema",
"The system address book contains contact information for all users in your instance." : "La rubrica di sistema contiene le informazioni di contatto di tutti gli utenti della tua istanza.",
"Enable System Address Book" : "Abilita rubrica di sistema",
"DAV system address book" : "Rubrica di sistema DAV",
"No outstanding DAV system address book sync." : "Nessuna sincronizzazione della rubrica del sistema DAV in sospeso.",
"The DAV system address book sync has not run yet as your instance has more than 1000 users or because an error occurred. Please run it manually by calling \"occ dav:sync-system-addressbook\"." : "La sincronizzazione della rubrica del sistema DAV non è ancora stata eseguita poiché la tua istanza ha più di 1000 utenti o perché si è verificato un errore. Eseguila a mano chiamando \"occ dav:sync-system-addressbook\".",
"DAV system address book size" : "Dimensione della rubrica del sistema DAV",
"The system address book is disabled" : "La rubrica di sistema è disabilitata",
"The system address book is enabled, but contains more than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, ma contiene più del limite configurato di %d contatti",
"The system address book is enabled and contains less than the configured limit of %d contacts" : "La rubrica di sistema è abilitata, e contiene meno del limite configurato di %d contatti",
"WebDAV endpoint" : "Terminatore WebDAV",
"Could not check that your web server is properly set up to allow file synchronization over WebDAV. Please check manually." : "Impossibile verificare se il server è configurato correttamente per consentire la sincronizzazione di file via WebDAV. Controllalo a mano.",
"Your web server is not yet properly set up to allow file synchronization, because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file, poiché l'interfaccia WebDAV sembra essere danneggiata.",
@@ -189,6 +276,8 @@
"Failed to clear your absence settings" : "Impossibile cancellare le impostazioni di assenza",
"First day" : "Primo giorno",
"Last day (inclusive)" : "Ultimo giorno (inclusivo)",
"Out of office replacement (optional)" : "Sostituzione per assenza (opzionale)",
"Name of the replacement" : "Nome del sostituto",
"Short absence status" : "Stato di assenza breve",
"Long absence Message" : "Messaggio di assenza lunga",
"Save" : "Salva",
@@ -207,7 +296,22 @@
"Cancel" : "Annulla",
"Import" : "Importa",
"Error while saving settings" : "Errore durante il salvataggio delle impostazioni",
"Contact reset successfully" : "Contatto resettato con successo",
"Error while resetting contact" : "Errore durante il reset del contatto",
"Contact imported successfully" : "Contatto importato con successo",
"Error while importing contact" : "Errore durante l'importazione del contatto",
"Import contact" : "Importa contatto",
"Reset to default" : "Ripristina valori predefiniti",
"Import contacts" : "Importa contatti",
"Importing a new .vcf file will delete the existing default contact and replace it with the new one. Do you want to continue?" : "L'importazione di un nuovo file .vcf cancellerà il contatto predefinito esistente e lo sostituirà con quello nuovo. Vuoi continuare?",
"Failed to save example event creation setting" : "Impossibile salvare le impostazioni di creazione dell'evento di esempio",
"Failed to upload the example event" : "Impossibile caricare l'evento di esempio",
"Custom example event was saved successfully" : "Esempio di evento personalizzato salvato correttamente",
"Failed to delete the custom example event" : "Impossibile eliminare l'evento di esempio personalizzato",
"Custom example event was deleted successfully" : "L'evento personalizzato di esempio è stato eliminato correttamente.",
"Import calendar event" : "Importa evento del calendario",
"Uploading a new event will overwrite the existing one." : "Il caricamento di un nuovo evento sovrascriverà quello esistente.",
"Upload event" : "Carica evento",
"Also install the {calendarappstoreopen}Calendar app{linkclose}, or {calendardocopen}connect your desktop & mobile for syncing ↗{linkclose}." : "Installa anche {calendarappstoreopen}l'applicazione Calendario{linkclose}, o {calendardocopen}connetti il tuo desktop e mobile per la sincronizzazione ↗{linkclose}.",
"Please make sure to properly set up {emailopen}the email server{linkclose}." : "Assicurati di configurare correttamente {emailopen}il server di posta{linkclose}.",
"Calendar server" : "Server di calendari",
@@ -220,6 +324,8 @@
"Send reminder notifications to calendar sharees as well" : "Invia notifiche di promemoria anche ai partecipanti al calendario",
"Reminders are always sent to organizers and attendees." : "I promemoria vengono sempre inviati agli organizzatori e ai partecipanti.",
"Enable notifications for events via push" : "Abilita notifiche per eventi tramite push",
"Example content" : "Contenuto d'esempio",
"Example content serves to showcase the features of Nextcloud. Default content is shipped with Nextcloud, and can be replaced by custom content." : "Il contenuto di esempio serve a mostrare le funzionalità di Nextcloud. Il contenuto predefinito viene fornito con Nextcloud e può essere sostituito da contenuti personalizzati.",
"Availability" : "Disponibilità",
"If you configure your working hours, other people will see when you are out of office when they book a meeting." : "Se imposti il tuo orario di lavoro, le altre persone potranno vedere quando non sei in ufficio per organizzare una riunione.",
"Absence" : "Assenza",
@@ -229,6 +335,8 @@
"Are you accepting the invitation?" : "Accetti l'invito?",
"Tentative" : "Provvisorio",
"Your attendance was updated successfully." : "La tua partecipazione è stata aggiornata correttamente.",
"No results." : "Nessun risultato.",
"Start typing." : "Inizia a scrivere.",
"Time zone:" : "Fuso orario:"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}
+58 -5
View File
@@ -11,6 +11,7 @@ namespace OCA\DAV\Paginate;
use Sabre\DAV\Server;
use Sabre\DAV\ServerPlugin;
use Sabre\DAV\Xml\Element\Response;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
@@ -54,8 +55,13 @@ class PaginatePlugin extends ServerPlugin {
) {
$pageSize = (int)$request->getHeader(self::PAGINATE_COUNT_HEADER) ?: $this->pageSize;
$offset = (int)$request->getHeader(self::PAGINATE_OFFSET_HEADER);
$copyIterator = new LimitedCopyIterator($fileProperties, $pageSize, $offset);
['token' => $token, 'count' => $count] = $this->cache->store($url, $copyIterator);
// wrap the iterator with another that renders XML, this way we
// cache XML, but we keep the first $pageSize elements as objects
// to use for the response of the first page.
$rendererGenerator = $this->getXmlRendererGenerator($copyIterator);
['token' => $token, 'count' => $count] = $this->cache->store($url, $rendererGenerator);
$fileProperties = $copyIterator->getRequestedItems();
$this->server->httpResponse->addHeader(self::PAGINATE_HEADER, 'true');
@@ -65,6 +71,44 @@ class PaginatePlugin extends ServerPlugin {
}
}
/**
* Returns a generator that yields rendered XML entries for the provided
* $fileProperties, as they would appear in the MultiStatus response.
*/
private function getXmlRendererGenerator(iterable $fileProperties): \Generator {
$writer = $this->server->xml->getWriter();
$prefer = $this->server->getHTTPPrefer();
$minimal = $prefer['return'] === 'minimal';
$writer->contextUri = $this->server->getBaseUri();
$writer->openMemory();
$writer->startDocument();
$writer->startElement('{DAV:}multistatus');
// throw away the beginning of the document
$writer->flush();
foreach ($fileProperties as $entry) {
$href = $entry['href'];
unset($entry['href']);
if ($minimal) {
unset($entry[404]);
}
$response = new Response(
ltrim($href, '/'),
$entry
);
$writer->write([
'name' => '{DAV:}response',
'value' => $response,
]);
// flushing does not remove the > for the previous element
// (multistatus)
yield ltrim($writer->flush(), '>');
}
}
public function onMethod(RequestInterface $request, ResponseInterface $response) {
$url = $this->server->httpRequest->getUrl();
if (
@@ -83,11 +127,20 @@ class PaginatePlugin extends ServerPlugin {
$response->setHeader('Content-Type', 'application/xml; charset=utf-8');
$response->setHeader('Vary', 'Brief,Prefer');
$prefer = $this->server->getHTTPPrefer();
$minimal = $prefer['return'] === 'minimal';
// as we cached strings of XML, rebuild the multistatus response
// and output the RAW entries, as stored in the cache
$writer = $this->server->xml->getWriter();
$writer->contextUri = $this->server->getBaseUri();
$writer->openMemory();
$writer->startDocument();
$writer->startElement('{DAV:}multistatus');
foreach ($items as $item) {
$writer->writeRaw($item);
}
$writer->endElement();
$writer->endDocument();
$data = $this->server->generateMultiStatus($items, $minimal);
$response->setBody($data);
$response->setBody($writer->flush());
return false;
}
@@ -0,0 +1,337 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\DAV\Tests\unit\Paginate;
use OCA\DAV\Paginate\PaginateCache;
use OCA\DAV\Paginate\PaginatePlugin;
use PHPUnit\Framework\MockObject\MockObject;
use Sabre\DAV\Server;
use Sabre\HTTP\RequestInterface;
use Sabre\HTTP\ResponseInterface;
use Sabre\Xml\Service;
use Test\TestCase;
class PaginatePluginTest extends TestCase {
private PaginateCache&MockObject $cache;
private PaginatePlugin $plugin;
private Server&MockObject $server;
private RequestInterface&MockObject $request;
private ResponseInterface&MockObject $response;
public function testOnMultiStatusCachesAndUpdatesResponse(): void {
$this->initializePlugin();
$fileProperties = [
[
'href' => '/file1',
200 => [
'{DAV:}displayname' => 'File 1',
'{DAV:}resourcetype' => null
],
],
[
'href' => '/file2',
200 => [
'{DAV:}displayname' => 'File 2',
'{DAV:}resourcetype' => null
],
],
[
'href' => '/file3',
200 => [
'{DAV:}displayname' => 'File 3',
'{DAV:}resourcetype' => null
],
],
];
$this->request->expects(self::exactly(2))
->method('hasHeader')
->willReturnMap([
[PaginatePlugin::PAGINATE_HEADER, true],
[PaginatePlugin::PAGINATE_TOKEN_HEADER, false],
]);
$this->request->expects(self::once())
->method('getUrl')
->willReturn('url');
$this->request->expects(self::exactly(2))
->method('getHeader')
->willReturnMap([
[PaginatePlugin::PAGINATE_COUNT_HEADER, 2],
[PaginatePlugin::PAGINATE_OFFSET_HEADER, 0],
]);
$this->request->expects(self::once())
->method('setHeader')
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token');
$this->cache->expects(self::once())
->method('store')
->with(
'url',
$this->callback(function ($generator) {
self::assertInstanceOf(\Generator::class, $generator);
$items = iterator_to_array($generator);
self::assertCount(3, $items);
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file1', 'File 1'), $items[0]);
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file2', 'File 2'), $items[1]);
self::assertStringContainsString($this->getResponseXmlForFile('/dav/file3', 'File 3'), $items[2]);
return true;
}),
)
->willReturn([
'token' => 'token',
'count' => 3,
]);
$this->expectSequentialCalls(
$this->response,
'addHeader',
[
[PaginatePlugin::PAGINATE_HEADER, 'true'],
[PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token'],
[PaginatePlugin::PAGINATE_TOTAL_HEADER, '3'],
],
);
$this->plugin->onMultiStatus($fileProperties);
self::assertInstanceOf(\Iterator::class, $fileProperties);
// the iterator should be replaced with one that has the amount of
// items for the page
$items = iterator_to_array($fileProperties, false);
$this->assertCount(2, $items);
}
private function initializePlugin(): void {
$this->expectSequentialCalls(
$this->server,
'on',
[
['beforeMultiStatus', [$this->plugin, 'onMultiStatus'], 100],
['method:SEARCH', [$this->plugin, 'onMethod'], 1],
['method:PROPFIND', [$this->plugin, 'onMethod'], 1],
['method:REPORT', [$this->plugin, 'onMethod'], 1],
],
);
$this->plugin->initialize($this->server);
}
/**
* @param array<int, array<int, mixed>> $expectedCalls
*/
private function expectSequentialCalls(MockObject $mock, string $method, array $expectedCalls): void {
$mock->expects(self::exactly(\count($expectedCalls)))
->method($method)
->willReturnCallback(function (...$args) use (&$expectedCalls) {
$expected = array_shift($expectedCalls);
self::assertNotNull($expected);
self::assertSame($expected, $args);
});
}
private function getResponseXmlForFile(string $fileName, string $displayName): string {
return preg_replace('/>\s+</', '><', <<<XML
<d:response>
<d:href>$fileName</d:href>
<d:propstat>
<d:prop>
<d:displayname>$displayName</d:displayname>
<d:resourcetype/>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
</d:response>
XML
);
}
public function testOnMultiStatusSkipsWhenHeadersAndCacheExist(): void {
$this->initializePlugin();
$fileProperties = [
[
'href' => '/file1',
],
[
'href' => '/file2',
],
];
$this->request->expects(self::exactly(2))
->method('hasHeader')
->willReturnMap([
[PaginatePlugin::PAGINATE_HEADER, true],
[PaginatePlugin::PAGINATE_TOKEN_HEADER, true],
]);
$this->request->expects(self::once())
->method('getUrl')
->willReturn('');
$this->request->expects(self::once())
->method('getHeader')
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER)
->willReturn('token');
$this->cache->expects(self::once())
->method('exists')
->with('', 'token')
->willReturn(true);
$this->cache->expects(self::never())
->method('store');
$this->plugin->onMultiStatus($fileProperties);
self::assertInstanceOf(\Iterator::class, $fileProperties);
self::assertSame(
[
['href' => '/file1'],
['href' => '/file2'],
],
iterator_to_array($fileProperties)
);
}
public function testOnMethodReturnsCachedResponse(): void {
$this->initializePlugin();
$response = $this->createMock(ResponseInterface::class);
$this->request->expects(self::exactly(2))
->method('hasHeader')
->willReturnMap([
[PaginatePlugin::PAGINATE_TOKEN_HEADER, true],
[PaginatePlugin::PAGINATE_OFFSET_HEADER, true],
]);
$this->request->expects(self::once())
->method('getUrl')
->willReturn('url');
$this->request->expects(self::exactly(4))
->method('getHeader')
->willReturnMap([
[PaginatePlugin::PAGINATE_TOKEN_HEADER, 'token'],
[PaginatePlugin::PAGINATE_OFFSET_HEADER, '2'],
[PaginatePlugin::PAGINATE_COUNT_HEADER, '4'],
]);
$this->cache->expects(self::once())
->method('exists')
->with('url', 'token')
->willReturn(true);
$this->cache->expects(self::once())
->method('get')
->with('url', 'token', 2, 4)
->willReturn((function (): \Generator {
yield $this->getResponseXmlForFile('/file1', 'File 1');
yield $this->getResponseXmlForFile('/file2', 'File 2');
})());
$response->expects(self::once())
->method('setStatus')
->with(207);
$response->expects(self::once())
->method('addHeader')
->with(PaginatePlugin::PAGINATE_HEADER, 'true');
$this->expectSequentialCalls(
$response,
'setHeader',
[
['Content-Type', 'application/xml; charset=utf-8'],
['Vary', 'Brief,Prefer'],
],
);
$response->expects(self::once())
->method('setBody')
->with($this->callback(function (string $body) {
// header of the XML
self::assertStringContainsString(<<<XML
<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:">
XML,
$body);
self::assertStringContainsString($this->getResponseXmlForFile('/file1', 'File 1'), $body);
self::assertStringContainsString($this->getResponseXmlForFile('/file2', 'File 2'), $body);
// footer of the XML
self::assertStringContainsString('</d:multistatus>', $body);
return true;
}));
self::assertFalse($this->plugin->onMethod($this->request, $response));
}
public function testOnMultiStatusNoPaginateHeaderShouldSucceed(): void {
$this->initializePlugin();
$this->request->expects(self::once())
->method('getUrl')
->willReturn('');
$this->cache->expects(self::never())
->method('exists');
$this->cache->expects(self::never())
->method('store');
$this->plugin->onMultiStatus($this->request);
}
public function testOnMethodNoTokenHeaderShouldSucceed(): void {
$this->initializePlugin();
$this->request->expects(self::once())
->method('hasHeader')
->with(PaginatePlugin::PAGINATE_TOKEN_HEADER)
->willReturn(false);
$this->cache->expects(self::never())
->method('exists');
$this->cache->expects(self::never())
->method('get');
$this->plugin->onMethod($this->request, $this->response);
}
protected function setUp(): void {
parent::setUp();
$this->cache = $this->createMock(PaginateCache::class);
$this->server = $this->getMockBuilder(Server::class)
->disableOriginalConstructor()
->onlyMethods(['on', 'getHTTPPrefer', 'getBaseUri'])
->getMock();
$this->request = $this->createMock(RequestInterface::class);
$this->response = $this->createMock(ResponseInterface::class);
$this->server->httpRequest = $this->request;
$this->server->httpResponse = $this->response;
$this->server->xml = new Service();
$this->server->xml->namespaceMap = [ 'DAV:' => 'd' ];
$this->server->method('getHTTPPrefer')
->willReturn(['return' => null]);
$this->server->method('getBaseUri')
->willReturn('/dav/');
$this->plugin = new PaginatePlugin($this->cache, 2);
}
}
+3
View File
@@ -34,6 +34,9 @@ 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." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
"Default Encryption Module" : "Alapértelmezett titkosítási modul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz (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." : "Ez az alkalmazás biztosítja az (alapértelmezett) titkosítási megvalósítást a Nextcloud kiszolgálóoldali titkosítási (SSE) funkciójához.\n\n\t\t\t**Titkosítás részletei**\n\t\t\t* **Titkosítási mód:** AES-256-CTR (alapértelmezett)\n\t\t\t* **Hitelesítés:** HMAC-SHA256\n\n\t\t\t**Fontos figyelmeztetések**\n\t\t\t* **VESZÉLY:** Ne tiltsa le az alkalmazást addig, amíg fel nem oldotta az összes fájl titkosítását (`occ encryption:decrypt-all`).\n\t\t\t* **FIGYELMEZTETÉS**: A nem titkosított fájltárolásra visszaálláshoz parancssoros hozzáférés szükséges. A művelet a webes felületen végleges.\"\n\n\t\t\t**Megjegyzés a meglévő fájlokhoz**\n\t\t\t* Alapértelmezés szerint az SSE engedélyezése nem titkosítja a meglévő fájlokat; csak az új fájlok lesznek titkosítva.\n\t\t\t* Az összes meglévő fájl titkosításához használja az `occ encryption:encrypt-all` parancsot.\n\n\t\t\t**Mielőtt nekikezd**\n\t\t\t* **Olvassa el a dokumentációt:** Az SSE engedélyezése, a meglévő fájlok titkosítása vagy az SSE letiltása előtt \n\t\t\t\telengedhetetlen a dokumentáció elolvasása, hogy tisztában legyen a következményekkel, és az adatvesztés\n\t\t\t\telkerülését eredményező folyamatokkal.",
"Default encryption module" : "Alapértelmezett titkosítási modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.",
"Encrypt the home storage" : "Helyi tároló titkosítása",
+3
View File
@@ -32,6 +32,9 @@
"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." : "Jelentkezzen be a webes felületre, ugorjon a személyes beállításai „Biztonság” szakaszához, és frissítse a titkosítási jelszavát úgy, hogy megadja ezt a jelszót a „Régi bejelentkezési jelszó” mezőben, majd megadja a jelenlegi bejelentkezési jelszavát.",
"Cannot decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "A fájl nem fejthető vissza, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
"Cannot read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Ez a fájl nem olvasható, valószínűleg ez egy megosztott fájl. Kérje meg a fájl tulajdonosát, hogy ossza meg újra Önnel ezt a fájlt.",
"Default Encryption Module" : "Alapértelmezett titkosítási modul",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Alapértelmezett titkosítási modul a kiszolgálóoldali titkosításhoz (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." : "Ez az alkalmazás biztosítja az (alapértelmezett) titkosítási megvalósítást a Nextcloud kiszolgálóoldali titkosítási (SSE) funkciójához.\n\n\t\t\t**Titkosítás részletei**\n\t\t\t* **Titkosítási mód:** AES-256-CTR (alapértelmezett)\n\t\t\t* **Hitelesítés:** HMAC-SHA256\n\n\t\t\t**Fontos figyelmeztetések**\n\t\t\t* **VESZÉLY:** Ne tiltsa le az alkalmazást addig, amíg fel nem oldotta az összes fájl titkosítását (`occ encryption:decrypt-all`).\n\t\t\t* **FIGYELMEZTETÉS**: A nem titkosított fájltárolásra visszaálláshoz parancssoros hozzáférés szükséges. A művelet a webes felületen végleges.\"\n\n\t\t\t**Megjegyzés a meglévő fájlokhoz**\n\t\t\t* Alapértelmezés szerint az SSE engedélyezése nem titkosítja a meglévő fájlokat; csak az új fájlok lesznek titkosítva.\n\t\t\t* Az összes meglévő fájl titkosításához használja az `occ encryption:encrypt-all` parancsot.\n\n\t\t\t**Mielőtt nekikezd**\n\t\t\t* **Olvassa el a dokumentációt:** Az SSE engedélyezése, a meglévő fájlok titkosítása vagy az SSE letiltása előtt \n\t\t\t\telengedhetetlen a dokumentáció elolvasása, hogy tisztában legyen a következményekkel, és az adatvesztés\n\t\t\t\telkerülését eredményező folyamatokkal.",
"Default encryption module" : "Alapértelmezett titkosítási modul",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "A titkosító alkalmazás engedélyezett, de a kulcsai még nincsenek előkészítve. Lépjen ki, majd lépjen be újra.",
"Encrypt the home storage" : "Helyi tároló titkosítása",
+3
View File
@@ -34,6 +34,9 @@ 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." : "Webインターフェースにログインし、個人設定の「セキュリティ」セクションに移動し、「旧ログインパスワード」フィールドにこのパスワードと現在のログインパスワードを入力して、暗号化パスワードを更新してください。",
"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" : "デフォルトの暗号化モジュール",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Nextcloud サーバー側暗号化 (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." : "このアプリは、Nextcloud のサーバー側暗号化 (SSE) 機能の(デフォルトの)暗号化実装を提供します。\n\n**暗号化の詳細**\n* **暗号モード:** AES-256-CTR (デフォルト)\n* **認証:** HMAC-SHA256\n\n**重要な警告**\n* **危険:** すべてのファイルが復号化されるまで、このアプリケーションを無効にしないでください (`occ encryption:decrypt-all`)。\n* **警告**: アクティベーション後に暗号化されていないファイルストレージに戻すには、コマンドラインアクセスが必要です。この操作はWeb UI経由で永続的に実行されます。\n\n**既存ファイルに関する注意事項**\n* デフォルトでは、SSEを有効にしても既存のファイルは暗号化されず、新規ファイルのみが暗号化されます。\n* 既存のすべてのファイルを暗号化するには、コマンド「occ encryption:encrypt-all」を使用します。\n\n**始める前に**\n* **ドキュメントを読む:** SSEを有効化、既存ファイルを暗号化、または無効化する前に、\nSSEの影響とデータ損失を回避するための適切な手順を理解するために、ドキュメントを読むことが重要です。",
"Default encryption module" : "デフォルトの暗号化モジュール",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
"Encrypt the home storage" : "メインストレージ暗号化",
+3
View File
@@ -32,6 +32,9 @@
"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." : "Webインターフェースにログインし、個人設定の「セキュリティ」セクションに移動し、「旧ログインパスワード」フィールドにこのパスワードと現在のログインパスワードを入力して、暗号化パスワードを更新してください。",
"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" : "デフォルトの暗号化モジュール",
"Default encryption module for Nextcloud Server-side Encryption (SSE)" : "Nextcloud サーバー側暗号化 (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." : "このアプリは、Nextcloud のサーバー側暗号化 (SSE) 機能の(デフォルトの)暗号化実装を提供します。\n\n**暗号化の詳細**\n* **暗号モード:** AES-256-CTR (デフォルト)\n* **認証:** HMAC-SHA256\n\n**重要な警告**\n* **危険:** すべてのファイルが復号化されるまで、このアプリケーションを無効にしないでください (`occ encryption:decrypt-all`)。\n* **警告**: アクティベーション後に暗号化されていないファイルストレージに戻すには、コマンドラインアクセスが必要です。この操作はWeb UI経由で永続的に実行されます。\n\n**既存ファイルに関する注意事項**\n* デフォルトでは、SSEを有効にしても既存のファイルは暗号化されず、新規ファイルのみが暗号化されます。\n* 既存のすべてのファイルを暗号化するには、コマンド「occ encryption:encrypt-all」を使用します。\n\n**始める前に**\n* **ドキュメントを読む:** SSEを有効化、既存ファイルを暗号化、または無効化する前に、\nSSEの影響とデータ損失を回避するための適切な手順を理解するために、ドキュメントを読むことが重要です。",
"Default encryption module" : "デフォルトの暗号化モジュール",
"Encryption app is enabled but your keys are not initialized, please log-out and log-in again" : "暗号化アプリは有効ですが、あなたの暗号化キーは初期化されていません。ログアウトした後に、再度ログインしてください",
"Encrypt the home storage" : "メインストレージ暗号化",
+1 -1
View File
@@ -352,7 +352,7 @@ OC.L10N.register(
"One of the dropped files could not be processed" : "Non foi posíbel procesar un dos ficheiros arrastrados",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "O seu navegador non é compatíbel coa API do sistema de ficheiros. Os directorios non van ser enviados",
"No files to upload" : "Non hai ficheiros que enviar",
"Unable to create the directory {directory}" : "Non foi posíbel crear o directorio {directory}",
"Unable to create the directory {directory}" : "Non é posíbel crear o directorio {directory}",
"Some files could not be uploaded" : "Non foi posíbel enviar algúns ficheiros",
"Files uploaded successfully" : "Ficheiros enviados satisfactoriamente",
"No files to process" : "Non hai ficheiros para procesar",
+1 -1
View File
@@ -350,7 +350,7 @@
"One of the dropped files could not be processed" : "Non foi posíbel procesar un dos ficheiros arrastrados",
"Your browser does not support the Filesystem API. Directories will not be uploaded" : "O seu navegador non é compatíbel coa API do sistema de ficheiros. Os directorios non van ser enviados",
"No files to upload" : "Non hai ficheiros que enviar",
"Unable to create the directory {directory}" : "Non foi posíbel crear o directorio {directory}",
"Unable to create the directory {directory}" : "Non é posíbel crear o directorio {directory}",
"Some files could not be uploaded" : "Non foi posíbel enviar algúns ficheiros",
"Files uploaded successfully" : "Ficheiros enviados satisfactoriamente",
"No files to process" : "Non hai ficheiros para procesar",
+40 -8
View File
@@ -51,6 +51,10 @@ OC.L10N.register(
"You do not have permission to create a file at the specified location" : "Nincs jogosultsága fájl létrehozására a megadott helyen",
"The file could not be converted." : "A fájl nem alakítható át.",
"Could not get relative path to converted file" : "Nem sikerült lekérni az átalakított fájl relatív elérési útját",
"Limit must be a positive integer." : "A korlátnak pozitív egésznek kell lennie.",
"The replacement character may only be a single character." : "A cserekarakter csak egyetlen karakter lehet.",
"Filename sanitization already started." : "A fájlnévtisztítás más elindult.",
"No filename sanitization in progress." : "Nincs folyamatban fájlnévtisztítás.",
"Favorite files" : "Kedvenc fájlok",
"No favorites" : "Nincsenek kedvencek",
"More favorites" : "További kedvencek",
@@ -120,6 +124,8 @@ OC.L10N.register(
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.",
"File not found" : "A fájl nem található",
"_{count} selected_::_{count} selected_" : ["{count} kijelölve","{count} kijelölve"],
"Search everywhere …" : "Keresés mindenhol…",
"Search here …" : "Keresés itt…",
"Search scope options" : "Keresési hatókör beállításai",
"Search here" : "Keresés itt",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
@@ -134,9 +140,26 @@ OC.L10N.register(
"This name is already in use." : "Ez a név már foglalt.",
"Create" : "Létrehozás",
"Files starting with a dot are hidden by default" : "A ponttal kezdődő fájlok alapértelmezetten el vannak rejtve",
"Failed to start filename sanitization." : "Nem sikerült a fájlnévtisztítás elindítása.",
"Failed to refresh filename sanitization status." : "Nem sikerült a fájlnévtisztítás állapotának frissítése.",
"Filename sanitization in progress." : "Fájlnévtisztítás folyamatban.",
"Currently {processedUsers} of {totalUsers} accounts are already processed." : "Jelenleg {processedUsers} / {totalUsers} fiók van már feldolgozva.",
"Preparing …" : "Előkészítés…",
"Refresh" : "Frissítés",
"All files have been santized for Windows filename support." : "Az összes fájlnév meg lett tisztítva a windowsos fájlnevek támogatásához.",
"Some files could not be sanitized, please check your logs." : "Egyes fájlok tisztítása nem sikerült, ellenőrizze a naplókat.",
"Sanitization errors" : "Tisztítási hibák",
"Not sanitized filenames" : "Nem megtisztított fájlnevek",
"Windows filename support has been enabled." : "A windowsos fájlnevek támogatása engedélyezve lett.",
"While this blocks users from creating new files with unsupported filenames, existing files are not yet renamed and thus still may break sync on Windows." : "Bár ez megtiltja, hogy a felhasználók nem támogatott nevű fájlokat hozzanak létre, a meglévő fájlok nem lesznek átnevezve, így Windowson továbbra is hibás lehet a szinkronizálás.",
"You can trigger a rename of files with invalid filenames, this will be done in the background and may take some time." : "Átneveztetheti az érvénytelen fájlnevű fájlokat, ez egy háttérfeladatban lesz végrehajtva, és eltarthat egy ideig.",
"Please note that this may cause high workload on the sync clients." : "Vegye figyelembe, hogy ez magas terhelést okozhat a szinkronizálási klienseken.",
"Limit" : "Korlát",
"This allows to configure how many users should be processed in one background job run." : "Ez lehetővé teszi, hogy beállítsa, hány felhasználó legyen feldolgozva egyetlen háttérfeladatban.",
"Sanitize filenames" : "Fájlnevek tisztítása",
"(starting)" : "(indítás)",
"Fill template fields" : "Töltse ki a sablon mezőit",
"Submitting fields …" : "Mezők beküldése…",
"Submit" : "Beküldés",
"Choose a file or folder to transfer" : "Válassz egy átruházandó fájlt vagy mappát",
"Transfer" : "Átruházás",
@@ -239,6 +262,7 @@ OC.L10N.register(
"Search for files" : "Fájlok keresése",
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Fájlnevek korlátozásának engedélyezése, amely biztosítja, hogy a fájlok szinkronizálhatók legyenek az összes klienssel. Alapállapotban az összes fájlnév engedélyezett, amely a POSIX (mint a Linux vagy a macOS) rendszereken érvényes.",
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új fájlnevekre.",
"Failed to toggle Windows filename support" : "Nem sikerült a windowsos fájlnevek támogatásának átkapcsolása.",
"Files compatibility" : "Fájlok kompatibilitása",
"Enforce Windows compatibility" : "Windows-kompatibilitás kényszerítése",
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ez megakadályozza a Windows rendszereken érvénytelen fájlneveket, mint például a foglalt neveket vagy a speciális karaktereket. De ez nem fogja érvényesíteni a kis- és nagybetűk egyezőnek tekintését.",
@@ -248,16 +272,19 @@ OC.L10N.register(
"Create a new file with the selected template" : "Új fájl létrehozása a kiválasztott sablonnal",
"Creating file" : "Fájl létrehozása",
"Save as {displayName}" : "Mentés mint {displayName}",
"Failed to convert files: {message}" : "A fájlok átalakítása sikertelen: {message}",
"Save as …" : "Mentés másként…",
"Converting files …" : "Fájlok átalakítása…",
"Failed to convert files: {message}" : "Nem sikerült a fájlok átalakítása: {message}",
"All files failed to be converted" : "Az összes fájl átalakítása sikertelen",
"One file could not be converted: {message}" : "Egy fájl nem alakítható át: {message}",
"_One file could not be converted_::_%n files could not be converted_" : ["Egy fájl nem alakítható át","%n fájl nem alakítható át"],
"_One file successfully converted_::_%n files successfully converted_" : ["Egy fájl sikeresen átalakítva","%n fájl sikeresen átalakítva"],
"Files successfully converted" : "Fájlok sikeresen átalakítva",
"Failed to convert files" : "A fájlok átalakítása sikertelen",
"Failed to convert files" : "Nem sikerült a fájlok átalakítása",
"Converting file …" : "Fájl átalakítása…",
"File successfully converted" : "Fájl sikeresen átalakítva",
"Failed to convert file: {message}" : "A fájl átalakítása sikertelen: {message}",
"Failed to convert file" : "A fájl átalakítása sikertelen",
"Failed to convert file: {message}" : "Nem sikerült a fájl átalakítása: {message}",
"Failed to convert file" : "Nem sikerült a fájl átalakítása",
"Leave this share" : "Megosztás elhagyása",
"Leave these shares" : "Megosztások elhagyása",
"Disconnect storage" : "Tároló leválasztása",
@@ -273,6 +300,10 @@ OC.L10N.register(
"Confirm deletion" : "Törlés megerősítése",
"Cancel" : "Mégse",
"Download" : "Letöltés",
"The requested file is not available." : "A kért fájl nem érhető el.",
"The requested files are not available." : "A kért fájlok nem érhetőek el.",
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
"Destination is not a folder" : "A cél nem mappa",
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
@@ -285,7 +316,7 @@ OC.L10N.register(
"Copy to {target}" : "Másolás ide: {target}",
"Move to {target}" : "Áthelyezés ide: {target}",
"Move" : "Áthelyezés",
"Move or copy operation failed" : "Az áthelyezés vagy a másolás művelet sikertelen",
"Move or copy operation failed" : "Nem sikerült az áthelyezés vagy a másolás",
"Move or copy" : "Áthelyezés vagy másolás",
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
"Open in Files" : "Megnyitás a Fájlokban",
@@ -368,9 +399,9 @@ OC.L10N.register(
"Upload (max. %s)" : "Feltöltés (legfeljebb %s)",
"After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új nevekre.",
"It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Továbbá lehetséges a fájlok automatikus átköltöztetése is a beállítás engedélyezése után, kövesse az occ parancs dokumentációját.",
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” egyes elemeken nem sikerült",
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” művelet egyes elemeken nem sikerült",
"\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet nem sikerült",
"Submitting fields …" : "Mezők beküldése…",
"\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
"Filter file names …" : "Fájlnevek szűrése…",
@@ -414,6 +445,7 @@ OC.L10N.register(
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem érhető el, nézze meg a naplófájlokat vagy lépjen kapcsolatba az adminisztrátorral",
"All folders" : "Összes mappa",
"Search everywhere …" : "Keresés mindenhol…",
"Search here …" : "Keresés itt…"
"Search here …" : "Keresés itt…",
"Preparing …" : "Előkészítés…"
},
"nplurals=2; plural=(n != 1);");
+40 -8
View File
@@ -49,6 +49,10 @@
"You do not have permission to create a file at the specified location" : "Nincs jogosultsága fájl létrehozására a megadott helyen",
"The file could not be converted." : "A fájl nem alakítható át.",
"Could not get relative path to converted file" : "Nem sikerült lekérni az átalakított fájl relatív elérési útját",
"Limit must be a positive integer." : "A korlátnak pozitív egésznek kell lennie.",
"The replacement character may only be a single character." : "A cserekarakter csak egyetlen karakter lehet.",
"Filename sanitization already started." : "A fájlnévtisztítás más elindult.",
"No filename sanitization in progress." : "Nincs folyamatban fájlnévtisztítás.",
"Favorite files" : "Kedvenc fájlok",
"No favorites" : "Nincsenek kedvencek",
"More favorites" : "További kedvencek",
@@ -118,6 +122,8 @@
"This list is not fully rendered for performance reasons. The files will be rendered as you navigate through the list." : "Ez a lista teljesítménybeli okokból nincs teljes egészében megjelenítve. A fájlok a listában navigálás során jelennek meg.",
"File not found" : "A fájl nem található",
"_{count} selected_::_{count} selected_" : ["{count} kijelölve","{count} kijelölve"],
"Search everywhere …" : "Keresés mindenhol…",
"Search here …" : "Keresés itt…",
"Search scope options" : "Keresési hatókör beállításai",
"Search here" : "Keresés itt",
"{usedQuotaByte} used" : "{usedQuotaByte} felhasználva",
@@ -132,9 +138,26 @@
"This name is already in use." : "Ez a név már foglalt.",
"Create" : "Létrehozás",
"Files starting with a dot are hidden by default" : "A ponttal kezdődő fájlok alapértelmezetten el vannak rejtve",
"Failed to start filename sanitization." : "Nem sikerült a fájlnévtisztítás elindítása.",
"Failed to refresh filename sanitization status." : "Nem sikerült a fájlnévtisztítás állapotának frissítése.",
"Filename sanitization in progress." : "Fájlnévtisztítás folyamatban.",
"Currently {processedUsers} of {totalUsers} accounts are already processed." : "Jelenleg {processedUsers} / {totalUsers} fiók van már feldolgozva.",
"Preparing …" : "Előkészítés…",
"Refresh" : "Frissítés",
"All files have been santized for Windows filename support." : "Az összes fájlnév meg lett tisztítva a windowsos fájlnevek támogatásához.",
"Some files could not be sanitized, please check your logs." : "Egyes fájlok tisztítása nem sikerült, ellenőrizze a naplókat.",
"Sanitization errors" : "Tisztítási hibák",
"Not sanitized filenames" : "Nem megtisztított fájlnevek",
"Windows filename support has been enabled." : "A windowsos fájlnevek támogatása engedélyezve lett.",
"While this blocks users from creating new files with unsupported filenames, existing files are not yet renamed and thus still may break sync on Windows." : "Bár ez megtiltja, hogy a felhasználók nem támogatott nevű fájlokat hozzanak létre, a meglévő fájlok nem lesznek átnevezve, így Windowson továbbra is hibás lehet a szinkronizálás.",
"You can trigger a rename of files with invalid filenames, this will be done in the background and may take some time." : "Átneveztetheti az érvénytelen fájlnevű fájlokat, ez egy háttérfeladatban lesz végrehajtva, és eltarthat egy ideig.",
"Please note that this may cause high workload on the sync clients." : "Vegye figyelembe, hogy ez magas terhelést okozhat a szinkronizálási klienseken.",
"Limit" : "Korlát",
"This allows to configure how many users should be processed in one background job run." : "Ez lehetővé teszi, hogy beállítsa, hány felhasználó legyen feldolgozva egyetlen háttérfeladatban.",
"Sanitize filenames" : "Fájlnevek tisztítása",
"(starting)" : "(indítás)",
"Fill template fields" : "Töltse ki a sablon mezőit",
"Submitting fields …" : "Mezők beküldése…",
"Submit" : "Beküldés",
"Choose a file or folder to transfer" : "Válassz egy átruházandó fájlt vagy mappát",
"Transfer" : "Átruházás",
@@ -237,6 +260,7 @@
"Search for files" : "Fájlok keresése",
"Allow to restrict filenames to ensure files can be synced with all clients. By default all filenames valid on POSIX (e.g. Linux or macOS) are allowed." : "Fájlnevek korlátozásának engedélyezése, amely biztosítja, hogy a fájlok szinkronizálhatók legyenek az összes klienssel. Alapállapotban az összes fájlnév engedélyezett, amely a POSIX (mint a Linux vagy a macOS) rendszereken érvényes.",
"After enabling the Windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új fájlnevekre.",
"Failed to toggle Windows filename support" : "Nem sikerült a windowsos fájlnevek támogatásának átkapcsolása.",
"Files compatibility" : "Fájlok kompatibilitása",
"Enforce Windows compatibility" : "Windows-kompatibilitás kényszerítése",
"This will block filenames not valid on Windows systems, like using reserved names or special characters. But this will not enforce compatibility of case sensitivity." : "Ez megakadályozza a Windows rendszereken érvénytelen fájlneveket, mint például a foglalt neveket vagy a speciális karaktereket. De ez nem fogja érvényesíteni a kis- és nagybetűk egyezőnek tekintését.",
@@ -246,16 +270,19 @@
"Create a new file with the selected template" : "Új fájl létrehozása a kiválasztott sablonnal",
"Creating file" : "Fájl létrehozása",
"Save as {displayName}" : "Mentés mint {displayName}",
"Failed to convert files: {message}" : "A fájlok átalakítása sikertelen: {message}",
"Save as …" : "Mentés másként…",
"Converting files …" : "Fájlok átalakítása…",
"Failed to convert files: {message}" : "Nem sikerült a fájlok átalakítása: {message}",
"All files failed to be converted" : "Az összes fájl átalakítása sikertelen",
"One file could not be converted: {message}" : "Egy fájl nem alakítható át: {message}",
"_One file could not be converted_::_%n files could not be converted_" : ["Egy fájl nem alakítható át","%n fájl nem alakítható át"],
"_One file successfully converted_::_%n files successfully converted_" : ["Egy fájl sikeresen átalakítva","%n fájl sikeresen átalakítva"],
"Files successfully converted" : "Fájlok sikeresen átalakítva",
"Failed to convert files" : "A fájlok átalakítása sikertelen",
"Failed to convert files" : "Nem sikerült a fájlok átalakítása",
"Converting file …" : "Fájl átalakítása…",
"File successfully converted" : "Fájl sikeresen átalakítva",
"Failed to convert file: {message}" : "A fájl átalakítása sikertelen: {message}",
"Failed to convert file" : "A fájl átalakítása sikertelen",
"Failed to convert file: {message}" : "Nem sikerült a fájl átalakítása: {message}",
"Failed to convert file" : "Nem sikerült a fájl átalakítása",
"Leave this share" : "Megosztás elhagyása",
"Leave these shares" : "Megosztások elhagyása",
"Disconnect storage" : "Tároló leválasztása",
@@ -271,6 +298,10 @@
"Confirm deletion" : "Törlés megerősítése",
"Cancel" : "Mégse",
"Download" : "Letöltés",
"The requested file is not available." : "A kért fájl nem érhető el.",
"The requested files are not available." : "A kért fájlok nem érhetőek el.",
"Moving \"{source}\" to \"{destination}\" …" : "A(z) „{source}” áthelyezése ide: „{destination}”…",
"Copying \"{source}\" to \"{destination}\" …" : "A(z) „{source}” másolása ide: „{destination}”…",
"Destination is not a folder" : "A cél nem mappa",
"This file/folder is already in that directory" : "Ez a fájl/mappa már létezik a mappában",
"You cannot move a file/folder onto itself or into a subfolder of itself" : "A fájl/mappa önmagába, vagy saját almappájába áthelyezése nem lehetséges",
@@ -283,7 +314,7 @@
"Copy to {target}" : "Másolás ide: {target}",
"Move to {target}" : "Áthelyezés ide: {target}",
"Move" : "Áthelyezés",
"Move or copy operation failed" : "Az áthelyezés vagy a másolás művelet sikertelen",
"Move or copy operation failed" : "Nem sikerült az áthelyezés vagy a másolás",
"Move or copy" : "Áthelyezés vagy másolás",
"Open folder {displayName}" : "A(z) {displayName} mappa megnyitása",
"Open in Files" : "Megnyitás a Fájlokban",
@@ -366,9 +397,9 @@
"Upload (max. %s)" : "Feltöltés (legfeljebb %s)",
"After enabling the windows compatible filenames, existing files cannot be modified anymore but can be renamed to valid new names by their owner." : "A Windows-kompatibilis fájlnevek engedélyezése után a meglévő fájlok már nem módosíthatóak, de a tulajdonosaik átnevezhetik őket érvényes új nevekre.",
"It is also possible to migrate files automatically after enabling this setting, please refer to the documentation about the occ command." : "Továbbá lehetséges a fájlok automatikus átköltöztetése is a beállítás engedélyezése után, kövesse az occ parancs dokumentációját.",
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” egyes elemeken nem sikerült",
"\"{displayName}\" failed on some elements" : "A(z) „{displayName}” művelet egyes elemeken nem sikerült",
"\"{displayName}\" batch action executed successfully" : "A(z) „{displayName}” tömeges művelet sikeresen végrehajtva",
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet sikertelen",
"\"{displayName}\" action failed" : "A(z) „{displayName}” művelet nem sikerült",
"Submitting fields …" : "Mezők beküldése…",
"\"{displayName}\" action executed successfully" : "A(z) „{displayName}” művelet sikeresen végrehajtva",
"Filter file names …" : "Fájlnevek szűrése…",
@@ -412,6 +443,7 @@
"This directory is unavailable, please check the logs or contact the administrator" : "Ez a könyvtár nem érhető el, nézze meg a naplófájlokat vagy lépjen kapcsolatba az adminisztrátorral",
"All folders" : "Összes mappa",
"Search everywhere …" : "Keresés mindenhol…",
"Search here …" : "Keresés itt…"
"Search here …" : "Keresés itt…",
"Preparing …" : "Előkészítés…"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}
+1
View File
@@ -129,6 +129,7 @@ OC.L10N.register(
"Via “{folder}”" : "Чрез “{folder}”",
"Unshare" : "Прекрати споделянето",
"Cannot copy, please copy the link manually" : "Не може да се копира, моля, копирайте връзката ръчно",
"Copy internal link" : "Копиране на вътрешна връзка",
"Internal link" : "Вътрешна връзка",
"{shareWith} by {initiator}" : "{shareWith} чрез {initiator}",
"Shared via link by {initiator}" : "Споделено чрез връзка от {initiator}",
+1
View File
@@ -127,6 +127,7 @@
"Via “{folder}”" : "Чрез “{folder}”",
"Unshare" : "Прекрати споделянето",
"Cannot copy, please copy the link manually" : "Не може да се копира, моля, копирайте връзката ръчно",
"Copy internal link" : "Копиране на вътрешна връзка",
"Internal link" : "Вътрешна връзка",
"{shareWith} by {initiator}" : "{shareWith} чрез {initiator}",
"Shared via link by {initiator}" : "Споделено чрез връзка от {initiator}",
@@ -132,7 +132,7 @@ class PublicPreviewController extends PublicShareController {
return $response;
} catch (NotFoundException $e) {
// If we have no preview enabled, we can redirect to the mime icon if any
if ($mimeFallback) {
if ($file instanceof \OCP\Files\File && $mimeFallback) {
if ($url = $this->mimeIconProvider->getMimeIconUrl($file->getMimeType())) {
return new RedirectResponse($url);
}
@@ -132,6 +132,7 @@ return array(
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => $baseDir . '/../lib/SetupChecks/ReadOnlyConfig.php',
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => $baseDir . '/../lib/SetupChecks/SchedulingTableSize.php',
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => $baseDir . '/../lib/SetupChecks/SecurityHeaders.php',
'OCA\\Settings\\SetupChecks\\ServerIdConfig' => $baseDir . '/../lib/SetupChecks/ServerIdConfig.php',
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => $baseDir . '/../lib/SetupChecks/SupportedDatabase.php',
'OCA\\Settings\\SetupChecks\\SystemIs64bit' => $baseDir . '/../lib/SetupChecks/SystemIs64bit.php',
'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => $baseDir . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php',
@@ -147,6 +147,7 @@ class ComposerStaticInitSettings
'OCA\\Settings\\SetupChecks\\ReadOnlyConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ReadOnlyConfig.php',
'OCA\\Settings\\SetupChecks\\SchedulingTableSize' => __DIR__ . '/..' . '/../lib/SetupChecks/SchedulingTableSize.php',
'OCA\\Settings\\SetupChecks\\SecurityHeaders' => __DIR__ . '/..' . '/../lib/SetupChecks/SecurityHeaders.php',
'OCA\\Settings\\SetupChecks\\ServerIdConfig' => __DIR__ . '/..' . '/../lib/SetupChecks/ServerIdConfig.php',
'OCA\\Settings\\SetupChecks\\SupportedDatabase' => __DIR__ . '/..' . '/../lib/SetupChecks/SupportedDatabase.php',
'OCA\\Settings\\SetupChecks\\SystemIs64bit' => __DIR__ . '/..' . '/../lib/SetupChecks/SystemIs64bit.php',
'OCA\\Settings\\SetupChecks\\TaskProcessingPickupSpeed' => __DIR__ . '/..' . '/../lib/SetupChecks/TaskProcessingPickupSpeed.php',
+2 -2
View File
@@ -35,8 +35,8 @@ OC.L10N.register(
"You granted filesystem access to app password \"{token}\"" : "Sa lubasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
"You revoked filesystem access from app password \"{token}\"" : "Sa keelasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
"Security" : "Turvalisus",
"You successfully logged in using two-factor authentication (%1$s)" : "Logisid edukalt sisse, kasutades kaheastmelist autentimiset (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)",
"You successfully logged in using two-factor authentication (%1$s)" : "Kasutades kaheastmelist autentimist sisselogimine õnnestus (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ei õnnestunud (%1$s)",
"Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s",
"Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud",
+2 -2
View File
@@ -33,8 +33,8 @@
"You granted filesystem access to app password \"{token}\"" : "Sa lubasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
"You revoked filesystem access from app password \"{token}\"" : "Sa keelasid failisüsteemi ligipääsu rakenduse salasõnale „{token}“",
"Security" : "Turvalisus",
"You successfully logged in using two-factor authentication (%1$s)" : "Logisid edukalt sisse, kasutades kaheastmelist autentimiset (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ebaõnnestus (%1$s)",
"You successfully logged in using two-factor authentication (%1$s)" : "Kasutades kaheastmelist autentimist sisselogimine õnnestus (%1$s)",
"A login attempt using two-factor authentication failed (%1$s)" : "Sisselogimiskatse kaheastmelise autentimisega ei õnnestunud (%1$s)",
"Remote wipe was started on %1$s" : "Kaugkustutamine algas: %1$s",
"Remote wipe has finished on %1$s" : "Kaugkustutamine lõppes: %1$s",
"Your <strong>password</strong> or <strong>email</strong> was modified" : "Sinu <strong>salasõna</strong> või <strong>e-posti aadress</strong> on muudetud",
+1 -1
View File
@@ -299,7 +299,7 @@ OC.L10N.register(
"- The `Strict-Transport-Security` HTTP header is not set (should be at least `%d` seconds). For enhanced security, it is recommended to enable HSTS." : "- A cabeceira HTTP «Strict-Transport-Security» non está definida (debe ser polo menos «%d» segundos). Para mellorar a seguridade, recoméndase activar HSTS.",
"Some headers are not set correctly on your instance" : "Algunhas cabeceiras non están definidas correctamente na súa instancia",
"Could not check that your web server serves security headers correctly. Please check manually." : "Non foi posíbel comprobar que o seu servidor web serve as cabeceiras de seguranza correctamente. Compróbeo manualmente.",
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non foi posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non foi posíbel consultar «%s»",
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non é posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non é posíbel consultar «%s»",
"Your server is correctly configured to send security headers." : "O seu servidor está configurado correctamente para enviar cabeceiras de seguranza.",
"Database version" : "Versión da base de datos",
"MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Detectouse a versión 10.3 de MariaDB, esta versión está ao final da súa vida útil e só se admite como parte de Ubuntu 20.04. Suxírese MariaDB >=%1$s e <=%2$s para obter mellor rendemento, estabilidade e funcionalidade con esta versión de Nextcloud.",
+1 -1
View File
@@ -297,7 +297,7 @@
"- The `Strict-Transport-Security` HTTP header is not set (should be at least `%d` seconds). For enhanced security, it is recommended to enable HSTS." : "- A cabeceira HTTP «Strict-Transport-Security» non está definida (debe ser polo menos «%d» segundos). Para mellorar a seguridade, recoméndase activar HSTS.",
"Some headers are not set correctly on your instance" : "Algunhas cabeceiras non están definidas correctamente na súa instancia",
"Could not check that your web server serves security headers correctly. Please check manually." : "Non foi posíbel comprobar que o seu servidor web serve as cabeceiras de seguranza correctamente. Compróbeo manualmente.",
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non foi posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non foi posíbel consultar «%s»",
"Could not check that your web server serves security headers correctly, unable to query `%s`" : "Non é posíbel comprobar que o seu servidor web serve correctamente as cabeceiras de seguranza, non é posíbel consultar «%s»",
"Your server is correctly configured to send security headers." : "O seu servidor está configurado correctamente para enviar cabeceiras de seguranza.",
"Database version" : "Versión da base de datos",
"MariaDB version 10.3 detected, this version is end-of-life and only supported as part of Ubuntu 20.04. MariaDB >=%1$s and <=%2$s is suggested for best performance, stability and functionality with this version of Nextcloud." : "Detectouse a versión 10.3 de MariaDB, esta versión está ao final da súa vida útil e só se admite como parte de Ubuntu 20.04. Suxírese MariaDB >=%1$s e <=%2$s para obter mellor rendemento, estabilidade e funcionalidade con esta versión de Nextcloud.",
+6
View File
@@ -312,6 +312,11 @@ OC.L10N.register(
"64-bit" : "64ビット",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!",
"Task Processing pickup speed" : "タスク処理のピックアップ速度",
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["過去%n日間にスケジュールされたタスクはありません。"],
"_The task pickup speed has been ok in the last day._::_The task pickup speed has been ok in the last %n days._" : ["タスクのピックアップ速度は、過去%n日間正常でした。"],
"_The task pickup speed has been slow in the last day. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n days. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n日間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
"_Most tasks were successful in the last day._::_Most tasks were successful in the last %n days._" : ["ほとんどのタスクは過去%n日間に成功しました。"],
"_A lot of tasks failed in the last day. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._::_A lot of tasks failed in the last %n days. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._" : ["過去%n日間に多くのタスクが失敗しました。nextcloudログでエラーを確認し、AIプロバイダーアプリが正しく設定されているかどうかを調査することを検討してください。"],
"Temporary space available" : "テンポラリ領域が利用可能です",
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "PHP のテンポラリパスのチェック中にエラーが発生しました - ディレクトリが正しく設定されていませんでした。返された値:%s",
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "PHPの関数 \"disk_free_space\"が無効になっており、一時的なディレクトリに十分な空き容量があるかどうかをチェックできません。",
@@ -946,6 +951,7 @@ OC.L10N.register(
"_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["直近の%n時間に予定されたタスクはありません。"],
"_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["タスクのピックアップ速度は、過去%n時間に問題ありませんでした。"],
"_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n時間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
"Also allow autocompletion on full match of the user id" : "また、ユーザーIDが完全に一致した場合にオートコンプリートを許可する",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud の最小バージョンが指定されていません.将来、エラーが発生する可能性があります.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
"Loading accounts …" : "アカウントを読み込み中 ...",
+6
View File
@@ -310,6 +310,11 @@
"64-bit" : "64ビット",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "このシステムは32ビット版のPHPで動いているようです。Nextcloudを正常に動かすには64ビット版が必要です。OSとPHPを64ビット版にアップグレードしてください!",
"Task Processing pickup speed" : "タスク処理のピックアップ速度",
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["過去%n日間にスケジュールされたタスクはありません。"],
"_The task pickup speed has been ok in the last day._::_The task pickup speed has been ok in the last %n days._" : ["タスクのピックアップ速度は、過去%n日間正常でした。"],
"_The task pickup speed has been slow in the last day. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n days. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n日間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
"_Most tasks were successful in the last day._::_Most tasks were successful in the last %n days._" : ["ほとんどのタスクは過去%n日間に成功しました。"],
"_A lot of tasks failed in the last day. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._::_A lot of tasks failed in the last %n days. Consider checking the nextcloud log for errors and investigating whether the AI provider apps have been set up correctly._" : ["過去%n日間に多くのタスクが失敗しました。nextcloudログでエラーを確認し、AIプロバイダーアプリが正しく設定されているかどうかを調査することを検討してください。"],
"Temporary space available" : "テンポラリ領域が利用可能です",
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "PHP のテンポラリパスのチェック中にエラーが発生しました - ディレクトリが正しく設定されていませんでした。返された値:%s",
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "PHPの関数 \"disk_free_space\"が無効になっており、一時的なディレクトリに十分な空き容量があるかどうかをチェックできません。",
@@ -944,6 +949,7 @@
"_No scheduled tasks in the last %n hour._::_No scheduled tasks in the last %n hours._" : ["直近の%n時間に予定されたタスクはありません。"],
"_The task pickup speed has been ok in the last %n hour._::_The task pickup speed has been ok in the last %n hours._" : ["タスクのピックアップ速度は、過去%n時間に問題ありませんでした。"],
"_The task pickup speed has been slow in the last %n hour. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._::_The task pickup speed has been slow in the last %n hours. Many tasks took longer than 4 minutes to be picked up. Consider setting up a worker to process tasks in the background._" : ["過去%n時間タスクのピックアップ速度が遅くなっています。多くのタスクが取得に4分以上かかりました。バックグラウンドでタスクを処理するようにワーカーを設定することを検討してください。"],
"Also allow autocompletion on full match of the user id" : "また、ユーザーIDが完全に一致した場合にオートコンプリートを許可する",
"This app has no minimum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud の最小バージョンが指定されていません.将来、エラーが発生する可能性があります.",
"This app has no maximum Nextcloud version assigned. This will be an error in the future." : "このアプリは Nextcloud バージョンの上限が指定されていません.将来、エラーが発生する可能性があります.",
"Loading accounts …" : "アカウントを読み込み中 ...",
+15
View File
@@ -48,7 +48,9 @@ OC.L10N.register(
"Saved" : "Зачувано",
"Unable to change password. Password too long." : "Неможе да се промени лозинката. Лозинката е премногу долга.",
"Authentication error" : "Грешка во автентикација",
"Please provide an admin recovery password; otherwise, all account data will be lost." : "Ве молам дадете лозинка за поврат на администраторот; во спротивно, сите кориснички податоци ќе бидат изгубени.",
"Wrong admin recovery password. Please check the password and try again." : "Погрешна лозинка за поврат на администраторот. Ве молам проверете ја лозинката и пробајте повторно.",
"Backend does not support password change, but the encryption of the account key was updated." : "Позадината не подржува промена на лозинката, но корисничкиот клуч за енкрипција е ажуриран.",
"Administrator documentation" : "Документација за администратор",
"User documentation" : "Документација за корисник",
"Invalid SMTP password." : "Грешна SMTP лозинка.",
@@ -143,7 +145,10 @@ OC.L10N.register(
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "PHP функцијата \"set_time_limit\" не е достапна. Ова може да резултира со запирање на скриптите во извршувањето, и грешки во вашата инсталација. Овозможувањето на оваа функција е препорачлива.",
"Supported" : "Поддржано",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP се чини дека не е правилно поставена за да испраќа барања до променливите на околината на системот. Тестот со getenv(\"PATH\") враќа само празен одговор.",
"PHP opcache" : "PHP opcache",
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "PHP модулот OPcache не е вчитан. За да имате подобри перформанси е препорачливо да го вчитате во вашата PHP инсталација.",
"OPcache is disabled. For better performance, it is recommended to apply \"opcache.enable=1\" to your PHP configuration." : "OPcache модулот е оневозможен. За подобри перформанси препорачливо е да го овозможите \"opcache.enable=1\" во вашата PHP конфигурација.",
"OPcache is configured to remove code comments. With OPcache enabled, \"opcache.save_comments=1\" must be set for Nextcloud to function." : "OPcache е конфигуриран за да ги брише коментарите во кодовите. Со овозможен OPcache, \"opcache.save_comments=1\" мора да се постави за да функционира Nextcloud.",
"PHP version" : "PHP верзија",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Антивирана е конфигурација која е само за чирање. Ова спречува поставување на некои конфигурации преку веб-интерфејсот. Понатаму, датотеката треба да се пребрише рачно за секое ажурирање.",
"Architecture" : "Архитектура",
@@ -202,6 +207,8 @@ OC.L10N.register(
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
"Creating group…" : "Се создава група...",
"Create group" : "Креирај група",
"Group name" : "Име на група",
"Nothing to show" : "Нема што да се прикаже",
"Loading" : "Се вчитува",
@@ -286,6 +293,7 @@ OC.L10N.register(
"Be aware that encryption always increases the file size." : "Бидете свесни дека енкрипцијата секогаш ја зголемува големината на датотеката.",
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Секогаш е добро да создавате редовни резервни кории на вашите податоци, во случај на енкрипција, осигурајте се да ги зачувате и клучевите за шифрирање заедно со вашите податоци.",
"This is the final warning: Do you really want to enable encryption?" : "Ова е последно предупредување: Дали навистина сакате да овозможите енкрипција?",
"You are about to delete the group \"{group}\". The accounts will NOT be deleted." : "Ќе ја отстраните групата {group}. Корисниците во неа НЕМА да бидат избришани.",
"Submit" : "Испрати",
"Rename group" : "Преименувај група",
"Current password" : "Моментална лозинка",
@@ -414,6 +422,7 @@ OC.L10N.register(
"Visibility" : "Видливост",
"Show language" : "Прикажи јазик",
"Show storage path" : "Прикажи патека на складиште",
"Show first login" : "Прикажи прво најавување",
"Show last login" : "Прикажи последно најавување",
"Sorting" : "Сортирање",
"By name" : "По име",
@@ -426,6 +435,7 @@ OC.L10N.register(
"Passwordless authentication requires a secure connection." : "За најавување без лозинка потребно е да се користи безбедна врска.",
"Add WebAuthn device" : "Додади WebAuthn уред",
"Please authorize your WebAuthn device." : "Авторизирајте го вашиот WebAuthn уред.",
"Adding your device …" : "Додавање на вашиот уред …",
"Unnamed device" : "Уреди без име",
"Passwordless Authentication" : "Најавување без лозинка",
"Set up your account for passwordless authentication following the FIDO2 standard." : "Поставете ја вашата сметка за најавување без лозинка притоа следете ги FIDO2 стандардите.",
@@ -433,12 +443,15 @@ OC.L10N.register(
"The following devices are configured for your account:" : "Следниве уреди се конфигурирани за вашата сметка:",
"Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.",
"Security & setup warnings" : "Предупредувања за сигурност & параметри",
"Checking your server …" : "Проверка на вашиот сервер …",
"Try again" : "Обиди се повторно",
"All checks passed." : "Сите проверки се поминати.",
"There are some errors regarding your setup." : "Постојат некои грешки во врска со инсталацијата.",
"There are some warnings regarding your setup." : "Постојат некои предупредувања во врска со инсталацијата.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.",
"You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.",
"Loading categories" : "Вчитување категории",
"Developer documentation ↗" : "Документација за програмери ↗",
"Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценца",
"Version {version}" : "Верзија {version}",
"Apply" : "Примени",
@@ -483,6 +496,8 @@ OC.L10N.register(
"Show to everyone" : "Прикажи на сите",
"Show to logged in accounts only" : "Прикажи само на најавени корисници",
"Hide" : "Сокриј",
"{progress}% Deploying …" : "{progress}% Распоредување …",
"{progress}% Initializing …" : "{progress}% Иницијализирање …",
"Health checking" : "Здравствена проверка",
"Deploy and Enable" : "Распореди и овозможи",
"Download and enable" : "Преземи и овозможи",
+15
View File
@@ -46,7 +46,9 @@
"Saved" : "Зачувано",
"Unable to change password. Password too long." : "Неможе да се промени лозинката. Лозинката е премногу долга.",
"Authentication error" : "Грешка во автентикација",
"Please provide an admin recovery password; otherwise, all account data will be lost." : "Ве молам дадете лозинка за поврат на администраторот; во спротивно, сите кориснички податоци ќе бидат изгубени.",
"Wrong admin recovery password. Please check the password and try again." : "Погрешна лозинка за поврат на администраторот. Ве молам проверете ја лозинката и пробајте повторно.",
"Backend does not support password change, but the encryption of the account key was updated." : "Позадината не подржува промена на лозинката, но корисничкиот клуч за енкрипција е ажуриран.",
"Administrator documentation" : "Документација за администратор",
"User documentation" : "Документација за корисник",
"Invalid SMTP password." : "Грешна SMTP лозинка.",
@@ -141,7 +143,10 @@
"The PHP function \"set_time_limit\" is not available. This could result in scripts being halted mid-execution, breaking your installation. Enabling this function is strongly recommended." : "PHP функцијата \"set_time_limit\" не е достапна. Ова може да резултира со запирање на скриптите во извршувањето, и грешки во вашата инсталација. Овозможувањето на оваа функција е препорачлива.",
"Supported" : "Поддржано",
"PHP does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP се чини дека не е правилно поставена за да испраќа барања до променливите на околината на системот. Тестот со getenv(\"PATH\") враќа само празен одговор.",
"PHP opcache" : "PHP opcache",
"The PHP OPcache module is not loaded. For better performance it is recommended to load it into your PHP installation." : "PHP модулот OPcache не е вчитан. За да имате подобри перформанси е препорачливо да го вчитате во вашата PHP инсталација.",
"OPcache is disabled. For better performance, it is recommended to apply \"opcache.enable=1\" to your PHP configuration." : "OPcache модулот е оневозможен. За подобри перформанси препорачливо е да го овозможите \"opcache.enable=1\" во вашата PHP конфигурација.",
"OPcache is configured to remove code comments. With OPcache enabled, \"opcache.save_comments=1\" must be set for Nextcloud to function." : "OPcache е конфигуриран за да ги брише коментарите во кодовите. Со овозможен OPcache, \"opcache.save_comments=1\" мора да се постави за да функционира Nextcloud.",
"PHP version" : "PHP верзија",
"The read-only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Антивирана е конфигурација која е само за чирање. Ова спречува поставување на некои конфигурации преку веб-интерфејсот. Понатаму, датотеката треба да се пребрише рачно за секое ажурирање.",
"Architecture" : "Архитектура",
@@ -200,6 +205,8 @@
"No apps found for your version" : "За вашата верзија не се пронајдени апликации",
"_%n app has an update available_::_%n apps have an update available_" : ["За %n апликација има достапно ажурирање","За %n апликации има достапно ажурирање"],
"_Update_::_Update all_" : ["Ажурирај","Ажурирај ги сите"],
"Creating group…" : "Се создава група...",
"Create group" : "Креирај група",
"Group name" : "Име на група",
"Nothing to show" : "Нема што да се прикаже",
"Loading" : "Се вчитува",
@@ -284,6 +291,7 @@
"Be aware that encryption always increases the file size." : "Бидете свесни дека енкрипцијата секогаш ја зголемува големината на датотеката.",
"It is always good to create regular backups of your data, in case of encryption make sure to backup the encryption keys along with your data." : "Секогаш е добро да создавате редовни резервни кории на вашите податоци, во случај на енкрипција, осигурајте се да ги зачувате и клучевите за шифрирање заедно со вашите податоци.",
"This is the final warning: Do you really want to enable encryption?" : "Ова е последно предупредување: Дали навистина сакате да овозможите енкрипција?",
"You are about to delete the group \"{group}\". The accounts will NOT be deleted." : "Ќе ја отстраните групата {group}. Корисниците во неа НЕМА да бидат избришани.",
"Submit" : "Испрати",
"Rename group" : "Преименувај група",
"Current password" : "Моментална лозинка",
@@ -412,6 +420,7 @@
"Visibility" : "Видливост",
"Show language" : "Прикажи јазик",
"Show storage path" : "Прикажи патека на складиште",
"Show first login" : "Прикажи прво најавување",
"Show last login" : "Прикажи последно најавување",
"Sorting" : "Сортирање",
"By name" : "По име",
@@ -424,6 +433,7 @@
"Passwordless authentication requires a secure connection." : "За најавување без лозинка потребно е да се користи безбедна врска.",
"Add WebAuthn device" : "Додади WebAuthn уред",
"Please authorize your WebAuthn device." : "Авторизирајте го вашиот WebAuthn уред.",
"Adding your device …" : "Додавање на вашиот уред …",
"Unnamed device" : "Уреди без име",
"Passwordless Authentication" : "Најавување без лозинка",
"Set up your account for passwordless authentication following the FIDO2 standard." : "Поставете ја вашата сметка за најавување без лозинка притоа следете ги FIDO2 стандардите.",
@@ -431,12 +441,15 @@
"The following devices are configured for your account:" : "Следниве уреди се конфигурирани за вашата сметка:",
"Your browser does not support WebAuthn." : "Вашиот прелистувач не поддржува WebAuthn.",
"Security & setup warnings" : "Предупредувања за сигурност & параметри",
"Checking your server …" : "Проверка на вашиот сервер …",
"Try again" : "Обиди се повторно",
"All checks passed." : "Сите проверки се поминати.",
"There are some errors regarding your setup." : "Постојат некои грешки во врска со инсталацијата.",
"There are some warnings regarding your setup." : "Постојат некои предупредувања во врска со инсталацијата.",
"As admin you can fine-tune the sharing behavior. Please see the documentation for more information." : "Како администратор, можете детално да го прилагодите однесувањето на споделувањето. Погледнете ја документацијата за повеќе информации.",
"You need to enable the File sharing App." : "Треба да ја овозможите апликацијата Споделување на датотеки.",
"Loading categories" : "Вчитување категории",
"Developer documentation ↗" : "Документација за програмери ↗",
"Version {version}, {license}-licensed" : "Верзија {version}, {license}-лиценца",
"Version {version}" : "Верзија {version}",
"Apply" : "Примени",
@@ -481,6 +494,8 @@
"Show to everyone" : "Прикажи на сите",
"Show to logged in accounts only" : "Прикажи само на најавени корисници",
"Hide" : "Сокриј",
"{progress}% Deploying …" : "{progress}% Распоредување …",
"{progress}% Initializing …" : "{progress}% Иницијализирање …",
"Health checking" : "Здравствена проверка",
"Deploy and Enable" : "Распореди и овозможи",
"Download and enable" : "Преземи и овозможи",
+1
View File
@@ -312,6 +312,7 @@ OC.L10N.register(
"64-bit" : "64-bit",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud wymaga wersji 64-bitowej do poprawnego działania. Zaktualizuj proszę swój system i PHP do wersji 64-bitowych!",
"Task Processing pickup speed" : "Prędkość pobierania zadań do przetworzenia",
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["Brak zaplanowanych zadań w ciągu ostatniego dnia.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni."],
"Temporary space available" : "Dostępna przestrzeń tymczasowa",
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "Błąd podczas sprawdzania tymczasowej ścieżki PHP - nie została ona poprawnie ustawiona na katalog. Wartość zwrócona: %s",
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "Funkcja PHP „disk_free_space” jest wyłączona, co uniemożliwia sprawdzenie wystarczającej ilości miejsca w katalogach tymczasowych.",
+1
View File
@@ -310,6 +310,7 @@
"64-bit" : "64-bit",
"It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit!" : "Wygląda na to, że korzystasz z 32-bitowej wersji PHP. Nextcloud wymaga wersji 64-bitowej do poprawnego działania. Zaktualizuj proszę swój system i PHP do wersji 64-bitowych!",
"Task Processing pickup speed" : "Prędkość pobierania zadań do przetworzenia",
"_No scheduled tasks in the last day._::_No scheduled tasks in the last %n days._" : ["Brak zaplanowanych zadań w ciągu ostatniego dnia.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni.","Brak zaplanowanych zadań w ciągu ostatnich %n dni."],
"Temporary space available" : "Dostępna przestrzeń tymczasowa",
"Error while checking the temporary PHP path - it was not properly set to a directory. Returned value: %s" : "Błąd podczas sprawdzania tymczasowej ścieżki PHP - nie została ona poprawnie ustawiona na katalog. Wartość zwrócona: %s",
"The PHP function \"disk_free_space\" is disabled, which prevents the check for enough space in the temporary directories." : "Funkcja PHP „disk_free_space” jest wyłączona, co uniemożliwia sprawdzenie wystarczającej ilości miejsca w katalogach tymczasowych.",
+1
View File
@@ -407,6 +407,7 @@ OC.L10N.register(
"Full match autocompletion restrictions" : "Restrições de preenchimento automático de correspondência completa",
"Also allow autocompletion on full match of the user ID" : "Permitir também o preenchimento automático em caso de correspondência completa do ID do usuário",
"Also allow autocompletion on full match of the user email" : "Permitir também o preenchimento automático em caso de correspondência completa do e-mail do usuário.",
"Do not use second user displayname for full match" : "Não utilize o segundo nome de exibição do usuário para correspondência completa.",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto do aviso legal na página de upload do link público (somente mostrado quando a lista de arquivos está oculta).",
"Disclaimer text" : "Texto do aviso legal",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de upload do link público quando a lista de arquivos está oculta.",
+1
View File
@@ -405,6 +405,7 @@
"Full match autocompletion restrictions" : "Restrições de preenchimento automático de correspondência completa",
"Also allow autocompletion on full match of the user ID" : "Permitir também o preenchimento automático em caso de correspondência completa do ID do usuário",
"Also allow autocompletion on full match of the user email" : "Permitir também o preenchimento automático em caso de correspondência completa do e-mail do usuário.",
"Do not use second user displayname for full match" : "Não utilize o segundo nome de exibição do usuário para correspondência completa.",
"Show disclaimer text on the public link upload page (only shown when the file list is hidden)" : "Exibir o texto do aviso legal na página de upload do link público (somente mostrado quando a lista de arquivos está oculta).",
"Disclaimer text" : "Texto do aviso legal",
"This text will be shown on the public link upload page when the file list is hidden." : "Este texto será mostrado na página de upload do link público quando a lista de arquivos está oculta.",
@@ -69,6 +69,7 @@ use OCA\Settings\SetupChecks\RandomnessSecure;
use OCA\Settings\SetupChecks\ReadOnlyConfig;
use OCA\Settings\SetupChecks\SchedulingTableSize;
use OCA\Settings\SetupChecks\SecurityHeaders;
use OCA\Settings\SetupChecks\ServerIdConfig;
use OCA\Settings\SetupChecks\SupportedDatabase;
use OCA\Settings\SetupChecks\SystemIs64bit;
use OCA\Settings\SetupChecks\TaskProcessingPickupSpeed;
@@ -207,6 +208,7 @@ class Application extends App implements IBootstrap {
$context->registerSetupCheck(RandomnessSecure::class);
$context->registerSetupCheck(ReadOnlyConfig::class);
$context->registerSetupCheck(SecurityHeaders::class);
$context->registerSetupCheck(ServerIdConfig::class);
$context->registerSetupCheck(SchedulingTableSize::class);
$context->registerSetupCheck(SupportedDatabase::class);
$context->registerSetupCheck(SystemIs64bit::class);
@@ -0,0 +1,57 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Settings\SetupChecks;
use OCP\IConfig;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\SetupCheck\ISetupCheck;
use OCP\SetupCheck\SetupResult;
use Override;
final class ServerIdConfig implements ISetupCheck {
public function __construct(
private readonly IL10N $l10n,
private readonly IConfig $config,
private readonly IURLGenerator $urlGenerator,
) {
}
#[Override]
public function getName(): string {
return $this->l10n->t('Configuration server ID');
}
#[Override]
public function getCategory(): string {
return 'config';
}
#[Override]
public function run(): SetupResult {
$serverid = $this->config->getSystemValueInt('serverid', PHP_INT_MIN);
$linkToDoc = $this->urlGenerator->linkToDocs('admin-update');
if ($serverid === PHP_INT_MIN) {
return SetupResult::info(
$this->l10n->t('server identifier isnt configured. It is recommended if your Nextcloud instance is running on several PHP servers. Add a serverid in your configuration.'),
$linkToDoc,
);
}
if ($serverid < 0 || $serverid > 1023) {
return SetupResult::error(
$this->l10n->t('"%d" is not a valid server identifier. It must be between 0 and 1023.', [$serverid]),
$linkToDoc,
);
}
return SetupResult::success($this->l10n->t('server identifier is configured and valid.'));
}
}
@@ -20,8 +20,8 @@ class SupportedDatabase implements ISetupCheck {
private const MAX_MARIADB = '11.8';
private const MIN_MYSQL = '8.0';
private const MAX_MYSQL = '8.4';
private const MIN_POSTGRES = '13';
private const MAX_POSTGRES = '17';
private const MIN_POSTGRES = '14';
private const MAX_POSTGRES = '18';
public function __construct(
private IL10N $l10n,
@@ -10,6 +10,7 @@ return array(
'OCA\\Theming\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Theming\\Capabilities' => $baseDir . '/../lib/Capabilities.php',
'OCA\\Theming\\Command\\UpdateConfig' => $baseDir . '/../lib/Command/UpdateConfig.php',
'OCA\\Theming\\ConfigLexicon' => $baseDir . '/../lib/ConfigLexicon.php',
'OCA\\Theming\\Controller\\IconController' => $baseDir . '/../lib/Controller/IconController.php',
'OCA\\Theming\\Controller\\ThemingController' => $baseDir . '/../lib/Controller/ThemingController.php',
'OCA\\Theming\\Controller\\UserThemeController' => $baseDir . '/../lib/Controller/UserThemeController.php',
@@ -25,6 +25,7 @@ class ComposerStaticInitTheming
'OCA\\Theming\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Theming\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php',
'OCA\\Theming\\Command\\UpdateConfig' => __DIR__ . '/..' . '/../lib/Command/UpdateConfig.php',
'OCA\\Theming\\ConfigLexicon' => __DIR__ . '/..' . '/../lib/ConfigLexicon.php',
'OCA\\Theming\\Controller\\IconController' => __DIR__ . '/..' . '/../lib/Controller/IconController.php',
'OCA\\Theming\\Controller\\ThemingController' => __DIR__ . '/..' . '/../lib/Controller/ThemingController.php',
'OCA\\Theming\\Controller\\UserThemeController' => __DIR__ . '/..' . '/../lib/Controller/UserThemeController.php',
+13 -1
View File
@@ -10,7 +10,11 @@ OC.L10N.register(
"The given privacy policy address is not a valid URL" : "Зададената URL адреса за политика за приватност не е валидна",
"The given slogan is too long" : "Зададениот слоган е премногу долг",
"The given color is invalid" : "Зададената боја не е валидна",
"Disable-user-theming should be true or false" : "Disable-user-theming треба да биде true или false",
"Saved" : "Зачувано",
"Invalid app given" : "Невалидна апликација е дадена",
"Invalid type for setting \"defaultApp\" given" : "Даден е невалиден тип за поставката \"defaultApp\"",
"Invalid setting key" : "Невалиден клуч за поставка",
"The file was uploaded" : "Датотеката е прикачена",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше специфицирана во HTML формата",
@@ -23,6 +27,9 @@ OC.L10N.register(
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Веќе користите сопствена тема. Апликацијата за сопствена тема може да ја пребрише истата.",
"Theming" : "Теми",
"Appearance and accessibility" : "Изглед и пристапност",
"PHP Imagick module" : "PHP Imagick модул",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "PHP модулот \"imagick\" не е овозможен иако апликацијата за теми е активна. За правилно генерирање на favicon, треба да го инсталираш и овозможиш овој модул.",
"The PHP module \"imagick\" in this instance has no SVG support. For better compatibility it is recommended to install it." : "PHP модулот \"imagick\" во оваа инстанца нема поддршка за SVG. За подобра компатибилност се препорачува да се инсталира.",
"Dark theme with high contrast mode" : "Темна тема со режим на висок контраст",
"Enable dark high contrast mode" : "Овозможи темен режим со висок контраст",
"Similar to the high contrast mode, but with dark colours." : "Слично на режимот со висок контраст, но со темни бои.",
@@ -49,6 +56,7 @@ OC.L10N.register(
"a safe home for all your data" : "безбеден дом за сите ваши податоци",
"Slogan" : "Слоган",
"Primary color" : "Примарна боја",
"The primary color is used for highlighting elements like important buttons. It might get slightly adjusted depending on the current color schema." : "Примарната боја се користи за истакнување на елементи како важни копчиња. Може да биде малку прилагодена во зависност од моменталната шема на бои.",
"Legal notice link" : "Правно известување",
"Privacy policy link" : "Политика за приватност",
"Header logo" : "Лого на заглавие",
@@ -59,6 +67,7 @@ OC.L10N.register(
"Disable user theming" : "Оневозможи кориснички теми",
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Иако можете да изберете и да ја прилагодите вашата истанца, корисниците можат да ја менуваат нивната позадина и бои. Ако сакате да го наметнете вашето прилагодување, можете да го вклучите ова.",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Темата овозможува можно полесно прилагодување на изгледот и чувството на вашите истанци и поддржани клиенти. Ова ќе биде видливо за сите корисници.",
"Instead of a background image you can also configure a plain background color. If you use a background image changing this color will influence the color of the app menu icons." : "Наместо позадинска слика, можеш да конфигурираш обична позадинска боја. Ако користиш позадинска слика, менувањето на оваа боја ќе влијае на бојата на иконите во менито на апликациите.",
"Background color" : "Боја на позадина",
"Upload new logo" : "Прикачи ново лого",
"Logo" : "Лого",
@@ -68,6 +77,7 @@ OC.L10N.register(
"Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирај ImageMagick додаток за PHP со што ќе се овозможи поддршка за SVG сликите автоматски да генерираат Фавикон базирано на прикаченото лого и боја.",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {linkstart}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {linkstart} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Доколку наидете на некој проблем, не се двоумете и пријавете го на {issuetracker} {linkend}. И доколку сакате можете да се приклучите кон нашиот дизајнерски тим{designteam} {linkend}!",
"Unable to apply the setting." : "Не може да се примени поставката.",
"Appearance and accessibility settings" : "Поставки за изглед и пристапност",
"Misc accessibility options" : "Разни опции за пристапност",
"Enable blur background filter (may increase GPU load)" : "Овозможи филтер за замаглување на позадината (може да го зголеми оптоварувањето на графичкиот процесор)",
@@ -78,6 +88,7 @@ OC.L10N.register(
"Keyboard shortcuts" : "Кратенки преку тастатура",
"In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Во некои случаи, кратенките на тастатурата може да се мешаат со алатките за пристапност. За да овозможите правилно фокусирање на вашата алатка, можете да ги оневозможите сите кратенки на тастатурата овде. Ова исто така ќе ги оневозможи сите достапни кратенки во апликациите.",
"Disable all keyboard shortcuts" : "Оневозможи ги сите кратенки преку тастатурата",
"Current selected app: {app}, position {position} of {total}" : "Моментално избрана апликација: {app}, позиција {position} од {total}.",
"Move up" : "Помести горе",
"Move down" : "Помести доле",
"Select a background from your files" : "Избери позадина од датотеките",
@@ -108,6 +119,7 @@ OC.L10N.register(
"Reset to default" : "Ресетирај на стандардно",
"Upload" : "Прикачи",
"Remove background image" : "Избриши ја позадинската слика",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА."
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
". Unable to apply the setting." : "Не може да се примени поставката."
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
+13 -1
View File
@@ -8,7 +8,11 @@
"The given privacy policy address is not a valid URL" : "Зададената URL адреса за политика за приватност не е валидна",
"The given slogan is too long" : "Зададениот слоган е премногу долг",
"The given color is invalid" : "Зададената боја не е валидна",
"Disable-user-theming should be true or false" : "Disable-user-theming треба да биде true или false",
"Saved" : "Зачувано",
"Invalid app given" : "Невалидна апликација е дадена",
"Invalid type for setting \"defaultApp\" given" : "Даден е невалиден тип за поставката \"defaultApp\"",
"Invalid setting key" : "Невалиден клуч за поставка",
"The file was uploaded" : "Датотеката е прикачена",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Подигнатата датотека ја надминува upload_max_filesize директивата во php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Големината на датотеката ја надминува MAX_FILE_SIZE директивата која беше специфицирана во HTML формата",
@@ -21,6 +25,9 @@
"You are already using a custom theme. Theming app settings might be overwritten by that." : "Веќе користите сопствена тема. Апликацијата за сопствена тема може да ја пребрише истата.",
"Theming" : "Теми",
"Appearance and accessibility" : "Изглед и пристапност",
"PHP Imagick module" : "PHP Imagick модул",
"The PHP module \"imagick\" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module." : "PHP модулот \"imagick\" не е овозможен иако апликацијата за теми е активна. За правилно генерирање на favicon, треба да го инсталираш и овозможиш овој модул.",
"The PHP module \"imagick\" in this instance has no SVG support. For better compatibility it is recommended to install it." : "PHP модулот \"imagick\" во оваа инстанца нема поддршка за SVG. За подобра компатибилност се препорачува да се инсталира.",
"Dark theme with high contrast mode" : "Темна тема со режим на висок контраст",
"Enable dark high contrast mode" : "Овозможи темен режим со висок контраст",
"Similar to the high contrast mode, but with dark colours." : "Слично на режимот со висок контраст, но со темни бои.",
@@ -47,6 +54,7 @@
"a safe home for all your data" : "безбеден дом за сите ваши податоци",
"Slogan" : "Слоган",
"Primary color" : "Примарна боја",
"The primary color is used for highlighting elements like important buttons. It might get slightly adjusted depending on the current color schema." : "Примарната боја се користи за истакнување на елементи како важни копчиња. Може да биде малку прилагодена во зависност од моменталната шема на бои.",
"Legal notice link" : "Правно известување",
"Privacy policy link" : "Политика за приватност",
"Header logo" : "Лого на заглавие",
@@ -57,6 +65,7 @@
"Disable user theming" : "Оневозможи кориснички теми",
"Although you can select and customize your instance, users can change their background and colors. If you want to enforce your customization, you can toggle this on." : "Иако можете да изберете и да ја прилагодите вашата истанца, корисниците можат да ја менуваат нивната позадина и бои. Ако сакате да го наметнете вашето прилагодување, можете да го вклучите ова.",
"Theming makes it possible to easily customize the look and feel of your instance and supported clients. This will be visible for all users." : "Темата овозможува можно полесно прилагодување на изгледот и чувството на вашите истанци и поддржани клиенти. Ова ќе биде видливо за сите корисници.",
"Instead of a background image you can also configure a plain background color. If you use a background image changing this color will influence the color of the app menu icons." : "Наместо позадинска слика, можеш да конфигурираш обична позадинска боја. Ако користиш позадинска слика, менувањето на оваа боја ќе влијае на бојата на иконите во менито на апликациите.",
"Background color" : "Боја на позадина",
"Upload new logo" : "Прикачи ново лого",
"Logo" : "Лого",
@@ -66,6 +75,7 @@
"Install the ImageMagick PHP extension with support for SVG images to automatically generate favicons based on the uploaded logo and color." : "Инсталирај ImageMagick додаток за PHP со што ќе се овозможи поддршка за SVG сликите автоматски да генерираат Фавикон базирано на прикаченото лого и боја.",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {linkstart}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {linkstart} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
"If you find any issues, do not hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Доколку наидете на некој проблем, не се двоумете и пријавете го на {issuetracker} {linkend}. И доколку сакате можете да се приклучите кон нашиот дизајнерски тим{designteam} {linkend}!",
"Unable to apply the setting." : "Не може да се примени поставката.",
"Appearance and accessibility settings" : "Поставки за изглед и пристапност",
"Misc accessibility options" : "Разни опции за пристапност",
"Enable blur background filter (may increase GPU load)" : "Овозможи филтер за замаглување на позадината (може да го зголеми оптоварувањето на графичкиот процесор)",
@@ -76,6 +86,7 @@
"Keyboard shortcuts" : "Кратенки преку тастатура",
"In some cases keyboard shortcuts can interfere with accessibility tools. In order to allow focusing on your tool correctly you can disable all keyboard shortcuts here. This will also disable all available shortcuts in apps." : "Во некои случаи, кратенките на тастатурата може да се мешаат со алатките за пристапност. За да овозможите правилно фокусирање на вашата алатка, можете да ги оневозможите сите кратенки на тастатурата овде. Ова исто така ќе ги оневозможи сите достапни кратенки во апликациите.",
"Disable all keyboard shortcuts" : "Оневозможи ги сите кратенки преку тастатурата",
"Current selected app: {app}, position {position} of {total}" : "Моментално избрана апликација: {app}, позиција {position} од {total}.",
"Move up" : "Помести горе",
"Move down" : "Помести доле",
"Select a background from your files" : "Избери позадина од датотеките",
@@ -106,6 +117,7 @@
"Reset to default" : "Ресетирај на стандардно",
"Upload" : "Прикачи",
"Remove background image" : "Избриши ја позадинската слика",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА."
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Универзалниот пристап е многу важен за нас. Ние ги следиме веб-стандардите и ги имплементираме за да го направиме користењето попристапно, како користење без маус, и помошни апликации за читање на екранот. Наша цел е да бидеме во согласност со {guidelines} Упатства за пристапност до веб-содржина{linkend}2.1 на ниво АА, со висока контрастна тема дури и на ниво на ААА.",
". Unable to apply the setting." : "Не може да се примени поставката."
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
}
+116
View File
@@ -0,0 +1,116 @@
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\Theming;
use OCP\Config\Lexicon\Entry;
use OCP\Config\Lexicon\ILexicon;
use OCP\Config\Lexicon\Strictness;
use OCP\Config\ValueType;
/**
* Config Lexicon for theming.
*
* Please Add & Manage your Config Keys in that file and keep the Lexicon up to date!
*
* {@see ILexicon}
*/
class ConfigLexicon implements ILexicon {
/** The cache buster index */
public const CACHE_BUSTER = 'cachebuster';
public const USER_THEMING_DISABLED = 'disable-user-theming';
/** Name of the software running on this instance (usually "Nextcloud") */
public const PRODUCT_NAME = 'productName';
/** Short name of this instance */
public const INSTANCE_NAME = 'name';
/** Slogan of this instance */
public const INSTANCE_SLOGAN = 'slogan';
/** Imprint URL of this instance */
public const INSTANCE_IMPRINT_URL = 'imprintUrl';
/** Privacy URL of this instance */
public const INSTANCE_PRIVACY_URL = 'privacyUrl';
// legacy theming
/** Base URL of this instance */
public const BASE_URL = 'url';
/** Base URL for documentation */
public const DOC_BASE_URL = 'docBaseUrl';
public function getStrictness(): Strictness {
return Strictness::NOTICE;
}
public function getAppConfigs(): array {
return [
// internals
new Entry(
self::CACHE_BUSTER,
ValueType::INT,
defaultRaw: 0,
definition: 'The current cache buster key for theming assets.',
),
new Entry(
self::USER_THEMING_DISABLED,
ValueType::BOOL,
defaultRaw: false,
definition: 'Whether user theming is disabled.',
),
// instance theming
new Entry(
self::PRODUCT_NAME,
ValueType::STRING,
defaultRaw: 'Nextcloud',
definition: 'The name of the software running on this instance (usually "Nextcloud").',
),
new Entry(
self::INSTANCE_NAME,
ValueType::STRING,
defaultRaw: '',
definition: 'Short name of this instance.',
),
new Entry(
self::INSTANCE_SLOGAN,
ValueType::STRING,
defaultRaw: '',
definition: 'Slogan of this instance.',
),
new Entry(
self::INSTANCE_IMPRINT_URL,
ValueType::STRING,
defaultRaw: '',
definition: 'Imprint URL of this instance.',
),
new Entry(
self::INSTANCE_PRIVACY_URL,
ValueType::STRING,
defaultRaw: '',
definition: 'Privacy URL of this instance.',
),
// legacy theming
new Entry(
self::BASE_URL,
ValueType::STRING,
defaultRaw: '',
definition: 'Base URL of this instance.',
),
new Entry(
self::DOC_BASE_URL,
ValueType::STRING,
defaultRaw: '',
definition: 'Base URL for documentation.',
),
];
}
public function getUserConfigs(): array {
return [];
}
}
+54 -45
View File
@@ -10,9 +10,9 @@ use OCA\Theming\AppInfo\Application;
use OCA\Theming\Service\BackgroundService;
use OCP\App\AppPathNotFoundException;
use OCP\App\IAppManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Files\NotFoundException;
use OCP\Files\SimpleFS\ISimpleFile;
use OCP\IAppConfig;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IL10N;
@@ -69,27 +69,27 @@ class ThemingDefaults extends \OC_Defaults {
}
public function getName() {
return strip_tags($this->config->getAppValue('theming', 'name', $this->name));
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name));
}
public function getHTMLName() {
return $this->config->getAppValue('theming', 'name', $this->name);
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->name);
}
public function getTitle() {
return strip_tags($this->config->getAppValue('theming', 'name', $this->title));
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->title));
}
public function getEntity() {
return strip_tags($this->config->getAppValue('theming', 'name', $this->entity));
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_NAME, $this->entity));
}
public function getProductName() {
return strip_tags($this->config->getAppValue('theming', 'productName', $this->productName));
return strip_tags($this->appConfig->getAppValueString(ConfigLexicon::PRODUCT_NAME, $this->productName));
}
public function getBaseUrl() {
return $this->config->getAppValue('theming', 'url', $this->url);
return $this->appConfig->getAppValueString(ConfigLexicon::BASE_URL, $this->url);
}
/**
@@ -97,20 +97,20 @@ class ThemingDefaults extends \OC_Defaults {
* @psalm-suppress InvalidReturnStatement
* @psalm-suppress InvalidReturnType
*/
public function getSlogan(?string $lang = null) {
return \OCP\Util::sanitizeHTML($this->config->getAppValue('theming', 'slogan', parent::getSlogan($lang)));
public function getSlogan(?string $lang = null): string {
return \OCP\Util::sanitizeHTML($this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_SLOGAN, parent::getSlogan($lang)));
}
public function getImprintUrl() {
return (string)$this->config->getAppValue('theming', 'imprintUrl', '');
public function getImprintUrl(): string {
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_IMPRINT_URL, '');
}
public function getPrivacyUrl() {
return (string)$this->config->getAppValue('theming', 'privacyUrl', '');
public function getPrivacyUrl(): string {
return $this->appConfig->getAppValueString(ConfigLexicon::INSTANCE_PRIVACY_URL, '');
}
public function getDocBaseUrl() {
return (string)$this->config->getAppValue('theming', 'docBaseUrl', $this->docBaseUrl);
public function getDocBaseUrl(): string {
return $this->appConfig->getAppValueString(ConfigLexicon::DOC_BASE_URL, $this->docBaseUrl);
}
public function getShortFooter() {
@@ -132,11 +132,11 @@ class ThemingDefaults extends \OC_Defaults {
$links = [
[
'text' => $this->l->t('Legal notice'),
'url' => (string)$this->getImprintUrl()
'url' => $this->getImprintUrl()
],
[
'text' => $this->l->t('Privacy policy'),
'url' => (string)$this->getPrivacyUrl()
'url' => $this->getPrivacyUrl()
],
];
@@ -224,7 +224,7 @@ class ThemingDefaults extends \OC_Defaults {
*/
public function getDefaultColorPrimary(): string {
// try admin color
$defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'primary_color', '');
$defaultColor = $this->appConfig->getAppValueString('primary_color', '');
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
return $defaultColor;
}
@@ -237,7 +237,7 @@ class ThemingDefaults extends \OC_Defaults {
* Default background color only taking admin setting into account
*/
public function getDefaultColorBackground(): string {
$defaultColor = $this->appConfig->getValueString(Application::APP_ID, 'background_color');
$defaultColor = $this->appConfig->getAppValueString('background_color');
if (preg_match('/^\#([0-9a-f]{3}|[0-9a-f]{6})$/i', $defaultColor)) {
return $defaultColor;
}
@@ -252,14 +252,14 @@ class ThemingDefaults extends \OC_Defaults {
* @return string
*/
public function getLogo($useSvg = true): string {
$logo = $this->config->getAppValue('theming', 'logoMime', '');
$logo = $this->appConfig->getAppValueString('logoMime', '');
// short cut to avoid setting up the filesystem just to check if the logo is there
//
// explanation: if an SVG is requested and the app config value for logoMime is set then the logo is there.
// otherwise we need to check it and maybe also generate a PNG from the SVG (that's done in getImage() which
// needs to be called then)
if ($useSvg === true && $logo !== false) {
if ($useSvg === true && $logo !== '') {
$logoExists = true;
} else {
try {
@@ -270,8 +270,7 @@ class ThemingDefaults extends \OC_Defaults {
}
}
$cacheBusterCounter = $this->config->getAppValue('theming', 'cachebuster', '0');
$cacheBusterCounter = (string)$this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
if (!$logo || !$logoExists) {
if ($useSvg) {
$logo = $this->urlGenerator->imagePath('core', 'logo/logo.svg');
@@ -298,28 +297,28 @@ class ThemingDefaults extends \OC_Defaults {
* @return string
*/
public function getiTunesAppId() {
return $this->config->getAppValue('theming', 'iTunesAppId', $this->iTunesAppId);
return $this->appConfig->getAppValueString('iTunesAppId', $this->iTunesAppId);
}
/**
* @return string
*/
public function getiOSClientUrl() {
return $this->config->getAppValue('theming', 'iOSClientUrl', $this->iOSClientUrl);
return $this->appConfig->getAppValueString('iOSClientUrl', $this->iOSClientUrl);
}
/**
* @return string
*/
public function getAndroidClientUrl() {
return $this->config->getAppValue('theming', 'AndroidClientUrl', $this->AndroidClientUrl);
return $this->appConfig->getAppValueString('AndroidClientUrl', $this->AndroidClientUrl);
}
/**
* @return string
*/
public function getFDroidClientUrl() {
return $this->config->getAppValue('theming', 'FDroidClientUrl', $this->FDroidClientUrl);
return $this->appConfig->getAppValueString('FDroidClientUrl', $this->FDroidClientUrl);
}
/**
@@ -327,18 +326,18 @@ class ThemingDefaults extends \OC_Defaults {
* @deprecated since Nextcloud 22 - https://github.com/nextcloud/server/issues/9940
*/
public function getScssVariables() {
$cacheBuster = $this->config->getAppValue('theming', 'cachebuster', '0');
$cache = $this->cacheFactory->createDistributed('theming-' . $cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
$cacheBuster = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
$cache = $this->cacheFactory->createDistributed('theming-' . (string)$cacheBuster . '-' . $this->urlGenerator->getBaseUrl());
if ($value = $cache->get('getScssVariables')) {
return $value;
}
$variables = [
'theming-cachebuster' => "'" . $cacheBuster . "'",
'theming-logo-mime' => "'" . $this->config->getAppValue('theming', 'logoMime') . "'",
'theming-background-mime' => "'" . $this->config->getAppValue('theming', 'backgroundMime') . "'",
'theming-logoheader-mime' => "'" . $this->config->getAppValue('theming', 'logoheaderMime') . "'",
'theming-favicon-mime' => "'" . $this->config->getAppValue('theming', 'faviconMime') . "'"
'theming-logo-mime' => "'" . $this->appConfig->getAppValueString('logoMime') . "'",
'theming-background-mime' => "'" . $this->appConfig->getAppValueString('backgroundMime') . "'",
'theming-logoheader-mime' => "'" . $this->appConfig->getAppValueString('logoheaderMime') . "'",
'theming-favicon-mime' => "'" . $this->appConfig->getAppValueString('faviconMime') . "'"
];
$variables['image-logo'] = "url('" . $this->imageManager->getImageUrl('logo') . "')";
@@ -347,13 +346,13 @@ class ThemingDefaults extends \OC_Defaults {
$variables['image-login-background'] = "url('" . $this->imageManager->getImageUrl('background') . "')";
$variables['image-login-plain'] = 'false';
if ($this->appConfig->getValueString(Application::APP_ID, 'primary_color', '') !== '') {
if ($this->appConfig->getAppValueString('primary_color', '') !== '') {
$variables['color-primary'] = $this->getColorPrimary();
$variables['color-primary-text'] = $this->getTextColorPrimary();
$variables['color-primary-element'] = $this->util->elementColor($this->getColorPrimary());
}
if ($this->config->getAppValue('theming', 'backgroundMime', '') === 'backgroundColor') {
if ($this->appConfig->getAppValueString('backgroundMime', '') === 'backgroundColor') {
$variables['image-login-plain'] = 'true';
}
@@ -378,7 +377,6 @@ class ThemingDefaults extends \OC_Defaults {
if ($app === '' || $app === 'files_sharing') {
$app = 'core';
}
$cacheBusterValue = $this->config->getAppValue('theming', 'cachebuster', '0');
$route = false;
if ($image === 'favicon.ico' && ($this->imageManager->shouldReplaceIcons() || $this->getCustomFavicon() !== null)) {
@@ -420,8 +418,8 @@ class ThemingDefaults extends \OC_Defaults {
* Increases the cache buster key
*/
public function increaseCacheBuster(): void {
$cacheBusterKey = (int)$this->config->getAppValue('theming', 'cachebuster', '0');
$this->config->setAppValue('theming', 'cachebuster', (string)($cacheBusterKey + 1));
$cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey + 1);
$this->cacheFactory->createDistributed('theming-')->clear();
$this->cacheFactory->createDistributed('imagePath')->clear();
}
@@ -433,7 +431,18 @@ class ThemingDefaults extends \OC_Defaults {
* @param string $value
*/
public function set($setting, $value): void {
$this->appConfig->setValueString('theming', $setting, $value);
switch ($value) {
case ConfigLexicon::CACHE_BUSTER:
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, (int)$value);
break;
case ConfigLexicon::USER_THEMING_DISABLED:
$value = $value === 'true' || $value === 'yes' || $value === '1';
$this->appConfig->setAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, $value);
break;
default:
$this->appConfig->setAppValueString($setting, $value);
break;
}
$this->increaseCacheBuster();
}
@@ -443,9 +452,9 @@ class ThemingDefaults extends \OC_Defaults {
public function undoAll(): void {
// Remember the current cachebuster value, as we do not want to reset this value
// Otherwise this can lead to caching issues as the value might be known to a browser already
$cacheBusterKey = $this->config->getAppValue('theming', 'cachebuster', '0');
$this->config->deleteAppValues('theming');
$this->config->setAppValue('theming', 'cachebuster', $cacheBusterKey);
$cacheBusterKey = $this->appConfig->getAppValueInt(ConfigLexicon::CACHE_BUSTER);
$this->appConfig->deleteAppValues();
$this->appConfig->setAppValueInt(ConfigLexicon::CACHE_BUSTER, $cacheBusterKey);
$this->increaseCacheBuster();
}
@@ -456,7 +465,7 @@ class ThemingDefaults extends \OC_Defaults {
* @return string default value
*/
public function undo($setting): string {
$this->config->deleteAppValue('theming', $setting);
$this->appConfig->deleteAppValue($setting);
$this->increaseCacheBuster();
$returnValue = '';
@@ -485,7 +494,7 @@ class ThemingDefaults extends \OC_Defaults {
case 'background':
case 'favicon':
$this->imageManager->delete($setting);
$this->config->deleteAppValue('theming', $setting . 'Mime');
$this->appConfig->deleteAppValue($setting . 'Mime');
break;
}
@@ -523,6 +532,6 @@ class ThemingDefaults extends \OC_Defaults {
* Has the admin disabled user customization
*/
public function isUserThemingDisabled(): bool {
return $this->appConfig->getValueBool(Application::APP_ID, 'disable-user-theming');
return $this->appConfig->getAppValueBool(ConfigLexicon::USER_THEMING_DISABLED, false);
}
}
+247 -229
View File
@@ -12,8 +12,8 @@ use OCA\Theming\Service\BackgroundService;
use OCA\Theming\ThemingDefaults;
use OCA\Theming\Util;
use OCP\App\IAppManager;
use OCP\AppFramework\Services\IAppConfig;
use OCP\Files\NotFoundException;
use OCP\IAppConfig;
use OCP\ICache;
use OCP\ICacheFactory;
use OCP\IConfig;
@@ -28,8 +28,7 @@ use Test\TestCase;
class ThemingDefaultsTest extends TestCase {
private IAppConfig&MockObject $appConfig;
private IConfig&MockObject $config;
private \OC_Defaults $defaults;
private IL10N|MockObject $l10n;
private IL10N&MockObject $l10n;
private IUserSession&MockObject $userSession;
private IURLGenerator&MockObject $urlGenerator;
private ICacheFactory&MockObject $cacheFactory;
@@ -39,6 +38,8 @@ class ThemingDefaultsTest extends TestCase {
private ImageManager&MockObject $imageManager;
private INavigationManager&MockObject $navigationManager;
private BackgroundService&MockObject $backgroundService;
private \OC_Defaults $defaults;
private ThemingDefaults $template;
protected function setUp(): void {
@@ -76,60 +77,60 @@ class ThemingDefaultsTest extends TestCase {
}
public function testGetNameWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getName());
}
public function testGetNameWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getName());
}
public function testGetHTMLNameWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getHTMLName());
}
public function testGetHTMLNameWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getHTMLName());
}
public function testGetTitleWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getTitle());
}
public function testGetTitleWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getTitle());
@@ -137,40 +138,40 @@ class ThemingDefaultsTest extends TestCase {
public function testGetEntityWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->assertEquals('Nextcloud', $this->template->getEntity());
}
public function testGetEntityWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'name', 'Nextcloud')
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('MyCustomCloud');
$this->assertEquals('MyCustomCloud', $this->template->getEntity());
}
public function testGetBaseUrlWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'url', $this->defaults->getBaseUrl())
->method('getAppValueString')
->with('url', $this->defaults->getBaseUrl())
->willReturn($this->defaults->getBaseUrl());
$this->assertEquals($this->defaults->getBaseUrl(), $this->template->getBaseUrl());
}
public function testGetBaseUrlWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'url', $this->defaults->getBaseUrl())
->method('getAppValueString')
->with('url', $this->defaults->getBaseUrl())
->willReturn('https://example.com/');
$this->assertEquals('https://example.com/', $this->template->getBaseUrl());
@@ -185,10 +186,10 @@ class ThemingDefaultsTest extends TestCase {
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
public function testGetImprintURL(string $imprintUrl): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'imprintUrl', '')
->method('getAppValueString')
->with('imprintUrl', '')
->willReturn($imprintUrl);
$this->assertEquals($imprintUrl, $this->template->getImprintUrl());
@@ -196,45 +197,45 @@ class ThemingDefaultsTest extends TestCase {
#[\PHPUnit\Framework\Attributes\DataProvider('legalUrlProvider')]
public function testGetPrivacyURL(string $privacyUrl): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'privacyUrl', '')
->method('getAppValueString')
->with('privacyUrl', '')
->willReturn($privacyUrl);
$this->assertEquals($privacyUrl, $this->template->getPrivacyUrl());
}
public function testGetSloganWithDefault(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'slogan', $this->defaults->getSlogan())
->method('getAppValueString')
->with('slogan', $this->defaults->getSlogan())
->willReturn($this->defaults->getSlogan());
$this->assertEquals($this->defaults->getSlogan(), $this->template->getSlogan());
}
public function testGetSloganWithCustom(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'slogan', $this->defaults->getSlogan())
->method('getAppValueString')
->with('slogan', $this->defaults->getSlogan())
->willReturn('My custom Slogan');
$this->assertEquals('My custom Slogan', $this->template->getSlogan());
}
public function testGetShortFooter(): void {
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', ''],
['theming', 'privacyUrl', '', ''],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', ''],
['privacyUrl', '', ''],
]);
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> Slogan', $this->template->getShortFooter());
@@ -242,15 +243,15 @@ class ThemingDefaultsTest extends TestCase {
public function testGetShortFooterEmptyUrl(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), ''],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', ''],
['theming', 'privacyUrl', '', ''],
['url', $this->defaults->getBaseUrl(), ''],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', ''],
['privacyUrl', '', ''],
]);
$this->assertEquals('<span class="entity-name">Name</span> Slogan', $this->template->getShortFooter());
@@ -258,15 +259,15 @@ class ThemingDefaultsTest extends TestCase {
public function testGetShortFooterEmptySlogan(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), ''],
['theming', 'imprintUrl', '', ''],
['theming', 'privacyUrl', '', ''],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), ''],
['imprintUrl', '', ''],
['privacyUrl', '', ''],
]);
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a>', $this->template->getShortFooter());
@@ -274,15 +275,15 @@ class ThemingDefaultsTest extends TestCase {
public function testGetShortFooterImprint(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', 'https://example.com/imprint'],
['theming', 'privacyUrl', '', ''],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', 'https://example.com/imprint'],
['privacyUrl', '', ''],
]);
$this->l10n
@@ -295,15 +296,15 @@ class ThemingDefaultsTest extends TestCase {
public function testGetShortFooterPrivacy(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', ''],
['theming', 'privacyUrl', '', 'https://example.com/privacy'],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', ''],
['privacyUrl', '', 'https://example.com/privacy'],
]);
$this->l10n
@@ -316,15 +317,15 @@ class ThemingDefaultsTest extends TestCase {
public function testGetShortFooterAllLegalLinks(): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', 'https://example.com/imprint'],
['theming', 'privacyUrl', '', 'https://example.com/privacy'],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', 'https://example.com/imprint'],
['privacyUrl', '', 'https://example.com/privacy'],
]);
$this->l10n
@@ -345,15 +346,15 @@ class ThemingDefaultsTest extends TestCase {
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
public function testGetShortFooterInvalidImprint(string $invalidImprintUrl): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', $invalidImprintUrl],
['theming', 'privacyUrl', '', ''],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', $invalidImprintUrl],
['privacyUrl', '', ''],
]);
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> Slogan', $this->template->getShortFooter());
@@ -362,15 +363,15 @@ class ThemingDefaultsTest extends TestCase {
#[\PHPUnit\Framework\Attributes\DataProvider('invalidLegalUrlProvider')]
public function testGetShortFooterInvalidPrivacy(string $invalidPrivacyUrl): void {
$this->navigationManager->expects($this->once())->method('getAll')->with(INavigationManager::TYPE_GUEST)->willReturn([]);
$this->config
$this->appConfig
->expects($this->exactly(5))
->method('getAppValue')
->method('getAppValueString')
->willReturnMap([
['theming', 'url', $this->defaults->getBaseUrl(), 'url'],
['theming', 'name', 'Nextcloud', 'Name'],
['theming', 'slogan', $this->defaults->getSlogan(), 'Slogan'],
['theming', 'imprintUrl', '', ''],
['theming', 'privacyUrl', '', $invalidPrivacyUrl],
['url', $this->defaults->getBaseUrl(), 'url'],
['name', 'Nextcloud', 'Name'],
['slogan', $this->defaults->getSlogan(), 'Slogan'],
['imprintUrl', '', ''],
['privacyUrl', '', $invalidPrivacyUrl],
]);
$this->assertEquals('<a href="url" target="_blank" rel="noreferrer noopener" class="entity-name">Name</a> Slogan', $this->template->getShortFooter());
@@ -379,13 +380,13 @@ class ThemingDefaultsTest extends TestCase {
public function testGetColorPrimaryWithDefault(): void {
$this->appConfig
->expects(self::once())
->method('getValueBool')
->with('theming', 'disable-user-theming')
->method('getAppValueBool')
->with('disable-user-theming')
->willReturn(false);
$this->appConfig
->expects(self::once())
->method('getValueString')
->with('theming', 'primary_color', '')
->method('getAppValueString')
->with('primary_color', '')
->willReturn($this->defaults->getColorPrimary());
$this->assertEquals($this->defaults->getColorPrimary(), $this->template->getColorPrimary());
@@ -394,13 +395,13 @@ class ThemingDefaultsTest extends TestCase {
public function testGetColorPrimaryWithCustom(): void {
$this->appConfig
->expects(self::once())
->method('getValueBool')
->with('theming', 'disable-user-theming')
->method('getAppValueBool')
->with('disable-user-theming')
->willReturn(false);
$this->appConfig
->expects(self::once())
->method('getValueString')
->with('theming', 'primary_color', '')
->method('getAppValueString')
->with('primary_color', '')
->willReturn('#fff');
$this->assertEquals('#fff', $this->template->getColorPrimary());
@@ -458,13 +459,13 @@ class ThemingDefaultsTest extends TestCase {
->willReturn('user');
$this->appConfig
->expects(self::any())
->method('getValueBool')
->with('theming', 'disable-user-theming')
->method('getAppValueBool')
->with('disable-user-theming')
->willReturn($disableTheming);
$this->appConfig
->expects(self::any())
->method('getValueString')
->with('theming', 'primary_color', '')
->method('getAppValueString')
->with('primary_color', '')
->willReturn($primaryColor);
$this->config
->expects($this->any())
@@ -476,19 +477,19 @@ class ThemingDefaultsTest extends TestCase {
}
public function testSet(): void {
$this->config
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
$this->appConfig
->expects($this->once())
->method('setValueString')
->with('theming', 'MySetting', 'MyValue');
$this->config
->method('setAppValueInt')
->with('cachebuster', 16);
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'cachebuster', '0')
->willReturn('15');
->method('setAppValueString')
->with('MySetting', 'MyValue');
$this->appConfig
->expects($this->once())
->method('getAppValueInt')
->with('cachebuster')
->willReturn(15);
$this->cacheFactory
->expects($this->exactly(2))
->method('createDistributed')
@@ -504,97 +505,106 @@ class ThemingDefaultsTest extends TestCase {
}
public function testUndoName(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('deleteAppValue')
->with('theming', 'name');
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->willReturnMap([
['theming', 'cachebuster', '0', '15'],
['theming', 'name', 'Nextcloud', 'Nextcloud'],
]);
$this->config
->with('name');
$this->appConfig
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
->method('getAppValueInt')
->with('cachebuster')
->willReturn(15);
$this->appConfig
->expects($this->once())
->method('getAppValueString')
->with('name', 'Nextcloud')
->willReturn('Nextcloud');
$this->appConfig
->expects($this->once())
->method('setAppValueInt')
->with('cachebuster', 16);
$this->assertSame('Nextcloud', $this->template->undo('name'));
}
public function testUndoBaseUrl(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('deleteAppValue')
->with('theming', 'url');
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->willReturnMap([
['theming', 'cachebuster', '0', '15'],
['theming', 'url', $this->defaults->getBaseUrl(), $this->defaults->getBaseUrl()],
]);
$this->config
->with('url');
$this->appConfig
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
->method('getAppValueInt')
->with('cachebuster')
->willReturn(15);
$this->appConfig
->expects($this->once())
->method('getAppValueString')
->with('url', $this->defaults->getBaseUrl())
->willReturn($this->defaults->getBaseUrl());
$this->appConfig
->expects($this->once())
->method('setAppValueInt')
->with('cachebuster', 16);
$this->assertSame($this->defaults->getBaseUrl(), $this->template->undo('url'));
}
public function testUndoSlogan(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('deleteAppValue')
->with('theming', 'slogan');
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->willReturnMap([
['theming', 'cachebuster', '0', '15'],
['theming', 'slogan', $this->defaults->getSlogan(), $this->defaults->getSlogan()],
]);
$this->config
->with('slogan');
$this->appConfig
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
->method('getAppValueInt')
->with('cachebuster')
->willReturn(15);
$this->appConfig
->expects($this->once())
->method('getAppValueString')
->with('slogan', $this->defaults->getSlogan())
->willReturn($this->defaults->getSlogan());
$this->appConfig
->expects($this->once())
->method('setAppValueInt')
->with('cachebuster', 16);
$this->assertSame($this->defaults->getSlogan(), $this->template->undo('slogan'));
}
public function testUndoPrimaryColor(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('deleteAppValue')
->with('theming', 'primary_color');
$this->config
->with('primary_color');
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'cachebuster', '0')
->willReturn('15');
$this->config
->method('getAppValueInt')
->with('cachebuster')
->willReturn(15);
$this->appConfig
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
->method('setAppValueInt')
->with('cachebuster', 16);
$this->assertSame($this->defaults->getColorPrimary(), $this->template->undo('primary_color'));
}
public function testUndoDefaultAction(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('deleteAppValue')
->with('theming', 'defaultitem');
$this->config
->with('defaultitem');
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'cachebuster', '0')
->willReturn('15');
$this->config
->method('getAppValueInt')
->with('cachebuster', '0')
->willReturn(15);
$this->appConfig
->expects($this->once())
->method('setAppValue')
->with('theming', 'cachebuster', 16);
->method('setAppValueInt')
->with('cachebuster', 16);
$this->assertSame('', $this->template->undo('defaultitem'));
}
@@ -613,13 +623,16 @@ class ThemingDefaultsTest extends TestCase {
->method('getImage')
->with('logo')
->willThrowException(new NotFoundException());
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->willReturnMap([
['theming', 'logoMime', '', ''],
['theming', 'cachebuster', '0', '0'],
]);
$this->appConfig
->expects($this->once())
->method('getAppValueString')
->with('logoMime', '')
->willReturn('');
$this->appConfig
->expects($this->once())
->method('getAppValueInt')
->with('cachebuster')
->willReturn(0);
$this->urlGenerator->expects($this->once())
->method('imagePath')
->with('core', $withName)
@@ -636,13 +649,16 @@ class ThemingDefaultsTest extends TestCase {
}
public function testGetLogoCustom(): void {
$this->config
->expects($this->exactly(2))
->method('getAppValue')
->willReturnMap([
['theming', 'logoMime', '', 'image/svg+xml'],
['theming', 'cachebuster', '0', '0'],
]);
$this->appConfig
->expects($this->once())
->method('getAppValueString')
->with('logoMime', '')
->willReturn('image/svg+xml');
$this->appConfig
->expects($this->once())
->method('getAppValueInt')
->with('cachebuster')
->willReturn(0);
$this->urlGenerator->expects($this->once())
->method('linkToRoute')
->with('theming.Theming.getImage')
@@ -651,7 +667,10 @@ class ThemingDefaultsTest extends TestCase {
}
public function testGetScssVariablesCached(): void {
$this->config->expects($this->any())->method('getAppValue')->with('theming', 'cachebuster', '0')->willReturn('1');
$this->appConfig->expects($this->any())
->method('getAppValueInt')
->with('cachebuster')
->willReturn(1);
$this->cacheFactory->expects($this->once())
->method('createDistributed')
->with('theming-1-')
@@ -661,23 +680,22 @@ class ThemingDefaultsTest extends TestCase {
}
public function testGetScssVariables(): void {
$this->config
->expects($this->any())
->method('getAppValue')
->willReturnMap([
['theming', 'cachebuster', '0', '0'],
['theming', 'logoMime', '', 'jpeg'],
['theming', 'backgroundMime', '', 'jpeg'],
['theming', 'logoheaderMime', '', 'jpeg'],
['theming', 'faviconMime', '', 'jpeg'],
]);
$this->appConfig->expects($this->any())
->method('getAppValueInt')
->with('cachebuster')
->willReturn(0);
$this->appConfig
->expects(self::atLeastOnce())
->method('getValueString')
->expects($this->any())
->method('getAppValueString')
->willReturnMap([
['theming', 'primary_color', '', false, $this->defaults->getColorPrimary()],
['theming', 'primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
['imprintUrl', '', ''],
['privacyUrl', '', ''],
['logoMime', '', 'jpeg'],
['backgroundMime', '', 'jpeg'],
['logoheaderMime', '', 'jpeg'],
['faviconMime', '', 'jpeg'],
['primary_color', '', false, $this->defaults->getColorPrimary()],
['primary_color', $this->defaults->getColorPrimary(), false, $this->defaults->getColorPrimary()],
]);
$this->util->expects($this->any())->method('invertTextColor')->with($this->defaults->getColorPrimary())->willReturn(false);
@@ -716,60 +734,60 @@ class ThemingDefaultsTest extends TestCase {
}
public function testGetDefaultAndroidURL(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->method('getAppValueString')
->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->willReturn('https://play.google.com/store/apps/details?id=com.nextcloud.client');
$this->assertEquals('https://play.google.com/store/apps/details?id=com.nextcloud.client', $this->template->getAndroidClientUrl());
}
public function testGetCustomAndroidURL(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->method('getAppValueString')
->with('AndroidClientUrl', 'https://play.google.com/store/apps/details?id=com.nextcloud.client')
->willReturn('https://play.google.com/store/apps/details?id=com.mycloud.client');
$this->assertEquals('https://play.google.com/store/apps/details?id=com.mycloud.client', $this->template->getAndroidClientUrl());
}
public function testGetDefaultiOSURL(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->method('getAppValueString')
->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8');
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8', $this->template->getiOSClientUrl());
}
public function testGetCustomiOSURL(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->method('getAppValueString')
->with('iOSClientUrl', 'https://geo.itunes.apple.com/us/app/nextcloud/id1125420102?mt=8')
->willReturn('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8');
$this->assertEquals('https://geo.itunes.apple.com/us/app/nextcloud/id1234567890?mt=8', $this->template->getiOSClientUrl());
}
public function testGetDefaultiTunesAppId(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'iTunesAppId', '1125420102')
->method('getAppValueString')
->with('iTunesAppId', '1125420102')
->willReturn('1125420102');
$this->assertEquals('1125420102', $this->template->getiTunesAppId());
}
public function testGetCustomiTunesAppId(): void {
$this->config
$this->appConfig
->expects($this->once())
->method('getAppValue')
->with('theming', 'iTunesAppId', '1125420102')
->method('getAppValueString')
->with('iTunesAppId', '1125420102')
->willReturn('1234567890');
$this->assertEquals('1234567890', $this->template->getiTunesAppId());
@@ -790,11 +808,11 @@ class ThemingDefaultsTest extends TestCase {
->method('get')
->with('shouldReplaceIcons')
->willReturn(true);
$this->config
$this->appConfig
->expects($this->any())
->method('getAppValue')
->with('theming', 'cachebuster', '0')
->willReturn('0');
->method('getAppValueInt')
->with('cachebuster')
->willReturn(0);
$this->urlGenerator
->expects($this->any())
->method('linkToRoute')
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Gebruik rugsteunkode",
"Two factor backup codes" : "Tweefaktorrugsteunkodes",
"An error occurred while generating your backup codes" : "n fout het voorgekom tydens generering van u rugsteunkodes",
"Save backup codes" : "Bewaar rugsteunkodes",
"Print backup codes" : "Druk rugsteunkodes",
"Regenerate backup codes" : "Hergenereer rugsteunkodes",
"Print backup codes" : "Druk rugsteunkodes",
"Save backup codes" : "Bewaar rugsteunkodes",
"If you regenerate backup codes, you automatically invalidate old codes." : "Indien u rugsteunkodes hergenereer maak u outomaties die ou kodes ongeldig.",
"Submit" : "Dien in"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Gebruik rugsteunkode",
"Two factor backup codes" : "Tweefaktorrugsteunkodes",
"An error occurred while generating your backup codes" : "n fout het voorgekom tydens generering van u rugsteunkodes",
"Save backup codes" : "Bewaar rugsteunkodes",
"Print backup codes" : "Druk rugsteunkodes",
"Regenerate backup codes" : "Hergenereer rugsteunkodes",
"Print backup codes" : "Druk rugsteunkodes",
"Save backup codes" : "Bewaar rugsteunkodes",
"If you regenerate backup codes, you automatically invalidate old codes." : "Indien u rugsteunkodes hergenereer maak u outomaties die ou kodes ongeldig.",
"Submit" : "Dien in"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "حدث خطأ عند توليد أكوادك الاحتياطية",
"Backup codes have been generated. {used} of {total} codes have been used." : "تمّ توليد الأكواد الاحتياطية. {used} من {total} تمّ استخدامها.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "هذه هي الرموز الاحتياطية الخاصة بك. يرجى حفظها و/أو طباعتها لأنك لن تتمكن من قراءة الرموز لاحقًا.",
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
"Print backup codes" : "طباعة الرموز الإحتياطية",
"Regenerate backup codes" : "إعادة توليد رموز الإسترجاع الإحتياطية",
"Print backup codes" : "طباعة الرموز الإحتياطية",
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
"If you regenerate backup codes, you automatically invalidate old codes." : "عندما تقوم بتوليد أكواد احتياطية جديدة، فإن الأكواد القديمة تفقد صلاحيتها تلقائيّتاً.",
"{name} backup codes" : "{name} أكواد احتياطية",
"Use one of the backup codes you saved when setting up two-factor authentication." : "استخدم واحداً من الأكواد الاحتياطية التي سبق و أن خزنتها عند تجهيز إعدادات التحقق ثنائي العوامل من الهويّة.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "حدث خطأ عند توليد أكوادك الاحتياطية",
"Backup codes have been generated. {used} of {total} codes have been used." : "تمّ توليد الأكواد الاحتياطية. {used} من {total} تمّ استخدامها.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "هذه هي الرموز الاحتياطية الخاصة بك. يرجى حفظها و/أو طباعتها لأنك لن تتمكن من قراءة الرموز لاحقًا.",
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
"Print backup codes" : "طباعة الرموز الإحتياطية",
"Regenerate backup codes" : "إعادة توليد رموز الإسترجاع الإحتياطية",
"Print backup codes" : "طباعة الرموز الإحتياطية",
"Save backup codes" : "الإحتفاظ بالرموز الإحتياطية",
"If you regenerate backup codes, you automatically invalidate old codes." : "عندما تقوم بتوليد أكواد احتياطية جديدة، فإن الأكواد القديمة تفقد صلاحيتها تلقائيّتاً.",
"{name} backup codes" : "{name} أكواد احتياطية",
"Use one of the backup codes you saved when setting up two-factor authentication." : "استخدم واحداً من الأكواد الاحتياطية التي سبق و أن خزنتها عند تجهيز إعدادات التحقق ثنائي العوامل من الهويّة.",
+2 -2
View File
@@ -11,9 +11,9 @@ OC.L10N.register(
"A two-factor auth backup codes provider" : "Un fornidor de códigos de recuperación pa l'autenticación en dos pasos",
"An error occurred while generating your backup codes" : "Prodúxose un error mentanto se xeneraben los códigos de recuperación",
"Backup codes have been generated. {used} of {total} codes have been used." : "Xeneráronse los códigos de recuperación y usáronse {used} de {total} códigos.",
"Save backup codes" : "Guardar los códigos de recuperación",
"Print backup codes" : "Imprentar los códigos de recuperación",
"Regenerate backup codes" : "Volver xenerar los códigos de recuperación",
"Print backup codes" : "Imprentar los códigos de recuperación",
"Save backup codes" : "Guardar los códigos de recuperación",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vuelves xenerar los códigos de recuperación, anules automáticamente los antiguos.",
"{name} backup codes" : "Códigos de recuperación de: {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Usa unu de los códigos de recuperación que guardesti cuando configuresti l'autenticación en dos pasos.",
+2 -2
View File
@@ -9,9 +9,9 @@
"A two-factor auth backup codes provider" : "Un fornidor de códigos de recuperación pa l'autenticación en dos pasos",
"An error occurred while generating your backup codes" : "Prodúxose un error mentanto se xeneraben los códigos de recuperación",
"Backup codes have been generated. {used} of {total} codes have been used." : "Xeneráronse los códigos de recuperación y usáronse {used} de {total} códigos.",
"Save backup codes" : "Guardar los códigos de recuperación",
"Print backup codes" : "Imprentar los códigos de recuperación",
"Regenerate backup codes" : "Volver xenerar los códigos de recuperación",
"Print backup codes" : "Imprentar los códigos de recuperación",
"Save backup codes" : "Guardar los códigos de recuperación",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vuelves xenerar los códigos de recuperación, anules automáticamente los antiguos.",
"{name} backup codes" : "Códigos de recuperación de: {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Usa unu de los códigos de recuperación que guardesti cuando configuresti l'autenticación en dos pasos.",
+2 -2
View File
@@ -11,9 +11,9 @@ OC.L10N.register(
"A two-factor auth backup codes provider" : "Доставчик на двустепенни резервни кодове за удостоверяване",
"An error occurred while generating your backup codes" : "Възникна грешка при генерирането на резервния код",
"Backup codes have been generated. {used} of {total} codes have been used." : "Резервен код е бил генериран. Използвани са {used} от {total} кода.",
"Save backup codes" : "Записване на резервния код",
"Print backup codes" : "Принтиране на резервния код",
"Regenerate backup codes" : "Регенериране на резервния код",
"Print backup codes" : "Принтиране на резервния код",
"Save backup codes" : "Записване на резервния код",
"If you regenerate backup codes, you automatically invalidate old codes." : "При регенерирането на резервния код, стария код автоматично бива анулиран.",
"{name} backup codes" : "{name} резервни кодове",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Използвайте един от резервните кодове, които сте запазили, когато настройвате двустепенно удостоверяване.",
+2 -2
View File
@@ -9,9 +9,9 @@
"A two-factor auth backup codes provider" : "Доставчик на двустепенни резервни кодове за удостоверяване",
"An error occurred while generating your backup codes" : "Възникна грешка при генерирането на резервния код",
"Backup codes have been generated. {used} of {total} codes have been used." : "Резервен код е бил генериран. Използвани са {used} от {total} кода.",
"Save backup codes" : "Записване на резервния код",
"Print backup codes" : "Принтиране на резервния код",
"Regenerate backup codes" : "Регенериране на резервния код",
"Print backup codes" : "Принтиране на резервния код",
"Save backup codes" : "Записване на резервния код",
"If you regenerate backup codes, you automatically invalidate old codes." : "При регенерирането на резервния код, стария код автоматично бива анулиран.",
"{name} backup codes" : "{name} резервни кодове",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Използвайте един от резервните кодове, които сте запазили, когато настройвате двустепенно удостоверяване.",
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de reserva",
"Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de reserva. Heu utilitzat {used} de {total} codis.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Aquests són els vostres codis de reserva. Deseu-los o imprimiu-los, ja que no podreu tornar-los a consultar més tard.",
"Save backup codes" : "Desa els codis de reserva",
"Print backup codes" : "Imprimeix els codis de reserva",
"Regenerate backup codes" : "Torna a generar els codis de reserva",
"Print backup codes" : "Imprimeix els codis de reserva",
"Save backup codes" : "Desa els codis de reserva",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si torneu a generar els codis de reserva, anul·lareu automàticament els codis antics.",
"{name} backup codes" : "Codis de seguretat per a {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilitzeu un dels codis de reserva que vau desar en configurar l'autenticació de dos factors.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "S'ha produït un error en generar els codis de reserva",
"Backup codes have been generated. {used} of {total} codes have been used." : "S'han generat els codis de reserva. Heu utilitzat {used} de {total} codis.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Aquests són els vostres codis de reserva. Deseu-los o imprimiu-los, ja que no podreu tornar-los a consultar més tard.",
"Save backup codes" : "Desa els codis de reserva",
"Print backup codes" : "Imprimeix els codis de reserva",
"Regenerate backup codes" : "Torna a generar els codis de reserva",
"Print backup codes" : "Imprimeix els codis de reserva",
"Save backup codes" : "Desa els codis de reserva",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si torneu a generar els codis de reserva, anul·lareu automàticament els codis antics.",
"{name} backup codes" : "Codis de seguretat per a {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilitzeu un dels codis de reserva que vau desar en configurar l'autenticació de dos factors.",
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Záložní kódy byly vytvořeny. Využito {used} z {total} kódů.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Zde jsou vaše záložní kódy. Kódy si uložte a/nebo vytiskněte, protože už je nebude možné zobrazit znovu.",
"Save backup codes" : "Uložit záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Save backup codes" : "Uložit záložní kódy",
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud necháte vytvořit nové záložní kódy, staré budou automaticky zneplatněny.",
"{name} backup codes" : "{name} záložní kódy",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Použijte jeden ze svých záložních kódů které jste si uložili při nastavování dvoufázového ověřování.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "Při pokusu o vytvoření záložních kódů nastala chyba.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Záložní kódy byly vytvořeny. Využito {used} z {total} kódů.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Zde jsou vaše záložní kódy. Kódy si uložte a/nebo vytiskněte, protože už je nebude možné zobrazit znovu.",
"Save backup codes" : "Uložit záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Regenerate backup codes" : "Vytvořit nové záložní kódy",
"Print backup codes" : "Vytisknout záložní kódy",
"Save backup codes" : "Uložit záložní kódy",
"If you regenerate backup codes, you automatically invalidate old codes." : "Pokud necháte vytvořit nové záložní kódy, staré budou automaticky zneplatněny.",
"{name} backup codes" : "{name} záložní kódy",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Použijte jeden ze svých záložních kódů které jste si uložili při nastavování dvoufázového ověřování.",
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Der opstod en fejl under genereringen af dine backup-koder",
"Backup codes have been generated. {used} of {total} codes have been used." : "Sikkerhedskopieringskoder er blevet genereret. {used} af {total} koder er blevet brugt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dette er dine backup-koder. Gem og/eller udskriv dem, da du ikke vil kunne se koderne igen senere.",
"Save backup codes" : "Gem backup-koder",
"Print backup codes" : "Print backup-koder",
"Regenerate backup codes" : "Regenerer backup-koder",
"Print backup codes" : "Print backup-koder",
"Save backup codes" : "Gem backup-koder",
"If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du genererer nye backupkoder, så vil de gamle koder blive ubrugelige.",
"{name} backup codes" : "{name} backup-koder",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Brug en af de backupkoder, du har gemt, når du konfigurerer to-faktor-godkendelse.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "Der opstod en fejl under genereringen af dine backup-koder",
"Backup codes have been generated. {used} of {total} codes have been used." : "Sikkerhedskopieringskoder er blevet genereret. {used} af {total} koder er blevet brugt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dette er dine backup-koder. Gem og/eller udskriv dem, da du ikke vil kunne se koderne igen senere.",
"Save backup codes" : "Gem backup-koder",
"Print backup codes" : "Print backup-koder",
"Regenerate backup codes" : "Regenerer backup-koder",
"Print backup codes" : "Print backup-koder",
"Save backup codes" : "Gem backup-koder",
"If you regenerate backup codes, you automatically invalidate old codes." : "Hvis du genererer nye backupkoder, så vil de gamle koder blive ubrugelige.",
"{name} backup codes" : "{name} backup-koder",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Brug en af de backupkoder, du har gemt, når du konfigurerer to-faktor-godkendelse.",
+4 -2
View File
@@ -12,11 +12,13 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen deiner Backup-Codes aufgetreten",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da du die Codes später nicht mehr abrufen kannst.",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"List of backup codes" : "Liste der Backup-Codes",
"Regenerate backup codes" : "Backup-Codes erneuern",
"Print backup codes" : "Backup-Codes drucken",
"Save backup codes" : "Backup-Codes speichern",
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn du Backup-Codes erneuerst, werden alte automatisch ungültig.",
"{name} backup codes" : "{name} Backup-Codes",
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwende einen der Backup-Codes, den du bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert hast.",
"Submit" : "Übermitteln"
},
+4 -2
View File
@@ -10,11 +10,13 @@
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen deiner Backup-Codes aufgetreten",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind deine Backup-Codes. Bitte speichere und/oder drucke diese aus, da du die Codes später nicht mehr abrufen kannst.",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"List of backup codes" : "Liste der Backup-Codes",
"Regenerate backup codes" : "Backup-Codes erneuern",
"Print backup codes" : "Backup-Codes drucken",
"Save backup codes" : "Backup-Codes speichern",
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn du Backup-Codes erneuerst, werden alte automatisch ungültig.",
"{name} backup codes" : "{name} Backup-Codes",
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwende einen der Backup-Codes, den du bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert hast.",
"Submit" : "Übermitteln"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+4 -2
View File
@@ -12,11 +12,13 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen Ihrer Backup-Codes aufgetreten",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese aus, da Sie die Codes später nicht mehr abrufen können.",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"List of backup codes" : "Liste der Backup-Codes",
"Regenerate backup codes" : "Backup-Codes erneuern",
"Print backup codes" : "Backup-Codes drucken",
"Save backup codes" : "Backup-Codes speichern",
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.",
"{name} backup codes" : "{name} Backup-Codes",
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwenden Sie einen der Backup-Codes, den Sie bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert haben.",
"Submit" : "Übermitteln"
},
+4 -2
View File
@@ -10,11 +10,13 @@
"An error occurred while generating your backup codes" : "Es ist ein Fehler beim Erstellen Ihrer Backup-Codes aufgetreten",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup-Codes wurden erzeugt. {used} von {total} Codes wurden benutzt.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Dies sind Ihre Backup-Codes. Bitte speichern und/oder drucken Sie diese aus, da Sie die Codes später nicht mehr abrufen können.",
"Save backup codes" : "Backup-Codes speichern",
"Print backup codes" : "Backup-Codes drucken",
"List of backup codes" : "Liste der Backup-Codes",
"Regenerate backup codes" : "Backup-Codes erneuern",
"Print backup codes" : "Backup-Codes drucken",
"Save backup codes" : "Backup-Codes speichern",
"If you regenerate backup codes, you automatically invalidate old codes." : "Wenn Sie die Backup-Codes erneuern, werden die alten Codes automatisch ungültig.",
"{name} backup codes" : "{name} Backup-Codes",
"Unable to open a new tab for printing" : "Ein neuer Tab zum Drucken kann nicht geöffnet werden",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Verwenden Sie einen der Backup-Codes, den Sie bei der Einrichtung der Zwei-Faktor-Authentifizierung gespeichert haben.",
"Submit" : "Übermitteln"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Δημιουργήθηκαν εφεδρικοί κωδικοί. Χρησιμοποιήθηκαν {used} από {total} κωδικοί.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Αυτοί είναι οι εφεδρικοί σας κωδικοί. Παρακαλώ αποθηκεύστε και/ή εκτυπώστε τους καθώς δεν θα μπορείτε να διαβάσετε τους κωδικούς ξανά αργότερα.",
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
"Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
"If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
"{name} backup codes" : "{name} εφεδρικοί κωδικοί",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Χρησιμοποιήστε έναν από τους εφεδρικούς κωδικούς που αποθηκεύσατε όταν ρυθμίζετε τον έλεγχο ταυτότητας δύο παραγόντων.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "Ένα σφάλμα προέκυψε κατά τη δημιουργία των εφεδρικών κωδικών.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Δημιουργήθηκαν εφεδρικοί κωδικοί. Χρησιμοποιήθηκαν {used} από {total} κωδικοί.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Αυτοί είναι οι εφεδρικοί σας κωδικοί. Παρακαλώ αποθηκεύστε και/ή εκτυπώστε τους καθώς δεν θα μπορείτε να διαβάσετε τους κωδικούς ξανά αργότερα.",
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
"Regenerate backup codes" : "Δημιουργία εφεδρικών κωδικών",
"Print backup codes" : "Εκτύπωση εφεδρικών κωδικών",
"Save backup codes" : "Αποθήκευση εφεδρικών κωδικών",
"If you regenerate backup codes, you automatically invalidate old codes." : "Εάν αναδημιουργήσετε εφεδρικούς κωδικούς, οι παλιοί κωδικοί ακυρώνονται αυτόματα.",
"{name} backup codes" : "{name} εφεδρικοί κωδικοί",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Χρησιμοποιήστε έναν από τους εφεδρικούς κωδικούς που αποθηκεύσατε όταν ρυθμίζετε τον έλεγχο ταυτότητας δύο παραγόντων.",
+4 -2
View File
@@ -12,11 +12,13 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "An error occurred while generating your backup codes",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup codes have been generated. {used} of {total} codes have been used.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later.",
"Save backup codes" : "Save backup codes",
"Print backup codes" : "Print backup codes",
"List of backup codes" : "List of backup codes",
"Regenerate backup codes" : "Regenerate backup codes",
"Print backup codes" : "Print backup codes",
"Save backup codes" : "Save backup codes",
"If you regenerate backup codes, you automatically invalidate old codes." : "If you regenerate backup codes, you automatically invalidate old codes.",
"{name} backup codes" : "{name} backup codes",
"Unable to open a new tab for printing" : "Unable to open a new tab for printing",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use one of the backup codes you saved when setting up two-factor authentication.",
"Submit" : "Submit"
},
+4 -2
View File
@@ -10,11 +10,13 @@
"An error occurred while generating your backup codes" : "An error occurred while generating your backup codes",
"Backup codes have been generated. {used} of {total} codes have been used." : "Backup codes have been generated. {used} of {total} codes have been used.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "These are your backup codes. Please save and/or print them as you will not be able to read the codes again later.",
"Save backup codes" : "Save backup codes",
"Print backup codes" : "Print backup codes",
"List of backup codes" : "List of backup codes",
"Regenerate backup codes" : "Regenerate backup codes",
"Print backup codes" : "Print backup codes",
"Save backup codes" : "Save backup codes",
"If you regenerate backup codes, you automatically invalidate old codes." : "If you regenerate backup codes, you automatically invalidate old codes.",
"{name} backup codes" : "{name} backup codes",
"Unable to open a new tab for printing" : "Unable to open a new tab for printing",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use one of the backup codes you saved when setting up two-factor authentication.",
"Submit" : "Submit"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
+2 -2
View File
@@ -11,9 +11,9 @@ OC.L10N.register(
"A two-factor auth backup codes provider" : "Provizanto de rezervkodoj por dufaza aŭtentigo",
"An error occurred while generating your backup codes" : "Eraro okazis dum generado de viaj rezervkodoj",
"Backup codes have been generated. {used} of {total} codes have been used." : "Rezervkodoj generiĝis. {used} kodoj el {total} uziĝis.",
"Save backup codes" : "Konservi la rezervkodojn",
"Print backup codes" : "Presi la rezervkodojn",
"Regenerate backup codes" : "Regeneri rezervkodojn",
"Print backup codes" : "Presi la rezervkodojn",
"Save backup codes" : "Konservi la rezervkodojn",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vi regeneras rezervkodojn, vi aŭtomate senvalidigas la antaŭajn.",
"{name} backup codes" : "{name} rezervkodoj",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Uzu unu el viaj rezervkodoj, kiujn vi konservis dum agordo de dufaza aŭtentigo.",
+2 -2
View File
@@ -9,9 +9,9 @@
"A two-factor auth backup codes provider" : "Provizanto de rezervkodoj por dufaza aŭtentigo",
"An error occurred while generating your backup codes" : "Eraro okazis dum generado de viaj rezervkodoj",
"Backup codes have been generated. {used} of {total} codes have been used." : "Rezervkodoj generiĝis. {used} kodoj el {total} uziĝis.",
"Save backup codes" : "Konservi la rezervkodojn",
"Print backup codes" : "Presi la rezervkodojn",
"Regenerate backup codes" : "Regeneri rezervkodojn",
"Print backup codes" : "Presi la rezervkodojn",
"Save backup codes" : "Konservi la rezervkodojn",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si vi regeneras rezervkodojn, vi aŭtomate senvalidigas la antaŭajn.",
"{name} backup codes" : "{name} rezervkodoj",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Uzu unu el viaj rezervkodoj, kiujn vi konservis dum agordo de dufaza aŭtentigo.",
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.",
"{name} backup codes" : "Códigos de respaldo {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "Ha ocurrido un error mientras se generaban sus códigos de respaldo.",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han usado {used} de {total} códigos.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor, guárdelos y/o imprima los mismos, ya que no podrá volver a verlos más tarde.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regenera los códigos de respaldo, automáticamente invalidará los antiguos.",
"{name} backup codes" : "Códigos de respaldo {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Use uno de los códigos de respaldo que guardó cuando activó la autenticación de dos factores.",
+2 -2
View File
@@ -7,9 +7,9 @@ OC.L10N.register(
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -5,9 +5,9 @@
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Use el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Use el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar sus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si usted regenera los códigos de respaldo, automáticamente invalidará los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -11,9 +11,9 @@ OC.L10N.register(
"A two-factor auth backup codes provider" : "Un proveedor de códigos de respaldo para autenticación de dos factores.",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han utilizado {used} de {total} códigos.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"{name} backup codes" : "Códigos de respaldo de {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utiliza uno de los códigos de respaldo que guardaste al configurar la autenticación de dos factores.",
+2 -2
View File
@@ -9,9 +9,9 @@
"A two-factor auth backup codes provider" : "Un proveedor de códigos de respaldo para autenticación de dos factores.",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se han generado códigos de respaldo. Se han utilizado {used} de {total} códigos.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"{name} backup codes" : "Códigos de respaldo de {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utiliza uno de los códigos de respaldo que guardaste al configurar la autenticación de dos factores.",
+2 -2
View File
@@ -8,9 +8,9 @@ OC.L10N.register(
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -6,9 +6,9 @@
"Use backup code" : "Usa el código de respaldo",
"Two factor backup codes" : "Códigos de respaldo de dos factores",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -7,9 +7,9 @@ OC.L10N.register(
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -5,9 +5,9 @@
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -12,9 +12,9 @@ OC.L10N.register(
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se generaron los códigos de respaldo. Se han utilizado {used} de {total} códigos.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor guárdelos y/o imprímalos ya que no podrá leerlos después.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"{name} backup codes" : "Códigos de respaldo {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilice uno de los códigos de respaldo que guardó al configurar la autentificación de dos factores.",
+2 -2
View File
@@ -10,9 +10,9 @@
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Backup codes have been generated. {used} of {total} codes have been used." : "Se generaron los códigos de respaldo. Se han utilizado {used} de {total} códigos.",
"These are your backup codes. Please save and/or print them as you will not be able to read the codes again later." : "Estos son sus códigos de respaldo. Por favor guárdelos y/o imprímalos ya que no podrá leerlos después.",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"{name} backup codes" : "Códigos de respaldo {name}",
"Use one of the backup codes you saved when setting up two-factor authentication." : "Utilice uno de los códigos de respaldo que guardó al configurar la autentificación de dos factores.",
+2 -2
View File
@@ -7,9 +7,9 @@ OC.L10N.register(
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -5,9 +5,9 @@
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -7,9 +7,9 @@ OC.L10N.register(
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -5,9 +5,9 @@
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+2 -2
View File
@@ -7,9 +7,9 @@ OC.L10N.register(
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},
+2 -2
View File
@@ -5,9 +5,9 @@
"Backup code" : "Código de respaldo",
"Use backup code" : "Usa el código de respaldo",
"An error occurred while generating your backup codes" : "Se presentó un error al generar tus códigos de respaldo. ",
"Save backup codes" : "Guardar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Regenerate backup codes" : "Regenerar códigos de respaldo",
"Print backup codes" : "Imprimir códigos de respaldo",
"Save backup codes" : "Guardar códigos de respaldo",
"If you regenerate backup codes, you automatically invalidate old codes." : "Si regeneras los códigos de respaldo, automáticamente invalidarás los anteriores. ",
"Submit" : "Enviar"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

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