aboutsummaryrefslogtreecommitdiffstats
path: root/apps/workflowengine
diff options
context:
space:
mode:
Diffstat (limited to 'apps/workflowengine')
-rw-r--r--apps/workflowengine/.l10nignore3
-rw-r--r--apps/workflowengine/.noopenapi0
-rw-r--r--apps/workflowengine/appinfo/app.php23
-rw-r--r--apps/workflowengine/appinfo/database.xml90
-rw-r--r--apps/workflowengine/appinfo/info.xml47
-rw-r--r--apps/workflowengine/appinfo/routes.php31
-rw-r--r--apps/workflowengine/composer/autoload.php25
-rw-r--r--apps/workflowengine/composer/composer.json13
-rw-r--r--apps/workflowengine/composer/composer.lock18
-rw-r--r--apps/workflowengine/composer/composer/ClassLoader.php579
-rw-r--r--apps/workflowengine/composer/composer/InstalledVersions.php359
-rw-r--r--apps/workflowengine/composer/composer/LICENSE21
-rw-r--r--apps/workflowengine/composer/composer/autoload_classmap.php42
-rw-r--r--apps/workflowengine/composer/composer/autoload_namespaces.php9
-rw-r--r--apps/workflowengine/composer/composer/autoload_psr4.php10
-rw-r--r--apps/workflowengine/composer/composer/autoload_real.php37
-rw-r--r--apps/workflowengine/composer/composer/autoload_static.php68
-rw-r--r--apps/workflowengine/composer/composer/installed.json5
-rw-r--r--apps/workflowengine/composer/composer/installed.php23
-rw-r--r--apps/workflowengine/css/admin.css58
-rw-r--r--apps/workflowengine/img/app-dark.svg1
-rw-r--r--apps/workflowengine/img/app.svg1
-rw-r--r--apps/workflowengine/img/workflow-off.svg4
-rw-r--r--apps/workflowengine/js/admin.js369
-rw-r--r--apps/workflowengine/js/filemimetypeplugin.js72
-rw-r--r--apps/workflowengine/js/filesizeplugin.js56
-rw-r--r--apps/workflowengine/js/filesystemtagsplugin.js76
-rw-r--r--apps/workflowengine/js/requestremoteaddressplugin.js83
-rw-r--r--apps/workflowengine/js/requesttimeplugin.js196
-rw-r--r--apps/workflowengine/js/requesturlplugin.js117
-rw-r--r--apps/workflowengine/js/requestuseragentplugin.js118
-rw-r--r--apps/workflowengine/js/usergroupmembershipplugin.js95
-rw-r--r--apps/workflowengine/l10n/ar.js123
-rw-r--r--apps/workflowengine/l10n/ar.json121
-rw-r--r--apps/workflowengine/l10n/ast.js118
-rw-r--r--apps/workflowengine/l10n/ast.json118
-rw-r--r--apps/workflowengine/l10n/bg.js146
-rw-r--r--apps/workflowengine/l10n/bg.json146
-rw-r--r--apps/workflowengine/l10n/bg_BG.js70
-rw-r--r--apps/workflowengine/l10n/bg_BG.json68
-rw-r--r--apps/workflowengine/l10n/ca.js150
-rw-r--r--apps/workflowengine/l10n/ca.json150
-rw-r--r--apps/workflowengine/l10n/cs.js154
-rw-r--r--apps/workflowengine/l10n/cs.json154
-rw-r--r--apps/workflowengine/l10n/cs_CZ.js71
-rw-r--r--apps/workflowengine/l10n/cs_CZ.json69
-rw-r--r--apps/workflowengine/l10n/da.js94
-rw-r--r--apps/workflowengine/l10n/da.json94
-rw-r--r--apps/workflowengine/l10n/de.js152
-rw-r--r--apps/workflowengine/l10n/de.json152
-rw-r--r--apps/workflowengine/l10n/de_DE.js152
-rw-r--r--apps/workflowengine/l10n/de_DE.json152
-rw-r--r--apps/workflowengine/l10n/el.js143
-rw-r--r--apps/workflowengine/l10n/el.json143
-rw-r--r--apps/workflowengine/l10n/en_GB.js150
-rw-r--r--apps/workflowengine/l10n/en_GB.json150
-rw-r--r--apps/workflowengine/l10n/eo.js92
-rw-r--r--apps/workflowengine/l10n/eo.json90
-rw-r--r--apps/workflowengine/l10n/es.js156
-rw-r--r--apps/workflowengine/l10n/es.json156
-rw-r--r--apps/workflowengine/l10n/es_419.js73
-rw-r--r--apps/workflowengine/l10n/es_419.json71
-rw-r--r--apps/workflowengine/l10n/es_AR.js73
-rw-r--r--apps/workflowengine/l10n/es_AR.json71
-rw-r--r--apps/workflowengine/l10n/es_CL.js73
-rw-r--r--apps/workflowengine/l10n/es_CL.json71
-rw-r--r--apps/workflowengine/l10n/es_CO.js73
-rw-r--r--apps/workflowengine/l10n/es_CO.json71
-rw-r--r--apps/workflowengine/l10n/es_CR.js73
-rw-r--r--apps/workflowengine/l10n/es_CR.json71
-rw-r--r--apps/workflowengine/l10n/es_DO.js73
-rw-r--r--apps/workflowengine/l10n/es_DO.json71
-rw-r--r--apps/workflowengine/l10n/es_EC.js147
-rw-r--r--apps/workflowengine/l10n/es_EC.json147
-rw-r--r--apps/workflowengine/l10n/es_GT.js73
-rw-r--r--apps/workflowengine/l10n/es_GT.json71
-rw-r--r--apps/workflowengine/l10n/es_HN.js73
-rw-r--r--apps/workflowengine/l10n/es_HN.json71
-rw-r--r--apps/workflowengine/l10n/es_MX.js152
-rw-r--r--apps/workflowengine/l10n/es_MX.json152
-rw-r--r--apps/workflowengine/l10n/es_NI.js73
-rw-r--r--apps/workflowengine/l10n/es_NI.json71
-rw-r--r--apps/workflowengine/l10n/es_PA.js73
-rw-r--r--apps/workflowengine/l10n/es_PA.json71
-rw-r--r--apps/workflowengine/l10n/es_PE.js73
-rw-r--r--apps/workflowengine/l10n/es_PE.json71
-rw-r--r--apps/workflowengine/l10n/es_PR.js73
-rw-r--r--apps/workflowengine/l10n/es_PR.json71
-rw-r--r--apps/workflowengine/l10n/es_PY.js73
-rw-r--r--apps/workflowengine/l10n/es_PY.json71
-rw-r--r--apps/workflowengine/l10n/es_SV.js73
-rw-r--r--apps/workflowengine/l10n/es_SV.json71
-rw-r--r--apps/workflowengine/l10n/es_UY.js73
-rw-r--r--apps/workflowengine/l10n/es_UY.json71
-rw-r--r--apps/workflowengine/l10n/et_EE.js149
-rw-r--r--apps/workflowengine/l10n/et_EE.json149
-rw-r--r--apps/workflowengine/l10n/eu.js118
-rw-r--r--apps/workflowengine/l10n/eu.json116
-rw-r--r--apps/workflowengine/l10n/fa.js147
-rw-r--r--apps/workflowengine/l10n/fa.json147
-rw-r--r--apps/workflowengine/l10n/fi.js113
-rw-r--r--apps/workflowengine/l10n/fi.json113
-rw-r--r--apps/workflowengine/l10n/fr.js162
-rw-r--r--apps/workflowengine/l10n/fr.json162
-rw-r--r--apps/workflowengine/l10n/ga.js123
-rw-r--r--apps/workflowengine/l10n/ga.json121
-rw-r--r--apps/workflowengine/l10n/gl.js160
-rw-r--r--apps/workflowengine/l10n/gl.json160
-rw-r--r--apps/workflowengine/l10n/he.js104
-rw-r--r--apps/workflowengine/l10n/he.json102
-rw-r--r--apps/workflowengine/l10n/hr.js114
-rw-r--r--apps/workflowengine/l10n/hr.json112
-rw-r--r--apps/workflowengine/l10n/hu.js160
-rw-r--r--apps/workflowengine/l10n/hu.json160
-rw-r--r--apps/workflowengine/l10n/hu_HU.js71
-rw-r--r--apps/workflowengine/l10n/hu_HU.json69
-rw-r--r--apps/workflowengine/l10n/id.js73
-rw-r--r--apps/workflowengine/l10n/id.json71
-rw-r--r--apps/workflowengine/l10n/is.js100
-rw-r--r--apps/workflowengine/l10n/is.json100
-rw-r--r--apps/workflowengine/l10n/it.js149
-rw-r--r--apps/workflowengine/l10n/it.json149
-rw-r--r--apps/workflowengine/l10n/ja.js150
-rw-r--r--apps/workflowengine/l10n/ja.json150
-rw-r--r--apps/workflowengine/l10n/ka.js121
-rw-r--r--apps/workflowengine/l10n/ka.json119
-rw-r--r--apps/workflowengine/l10n/ka_GE.js73
-rw-r--r--apps/workflowengine/l10n/ka_GE.json71
-rw-r--r--apps/workflowengine/l10n/ko.js134
-rw-r--r--apps/workflowengine/l10n/ko.json134
-rw-r--r--apps/workflowengine/l10n/lt_LT.js153
-rw-r--r--apps/workflowengine/l10n/lt_LT.json153
-rw-r--r--apps/workflowengine/l10n/lv.js101
-rw-r--r--apps/workflowengine/l10n/lv.json101
-rw-r--r--apps/workflowengine/l10n/mk.js100
-rw-r--r--apps/workflowengine/l10n/mk.json98
-rw-r--r--apps/workflowengine/l10n/mn.js66
-rw-r--r--apps/workflowengine/l10n/mn.json64
-rw-r--r--apps/workflowengine/l10n/nb.js150
-rw-r--r--apps/workflowengine/l10n/nb.json150
-rw-r--r--apps/workflowengine/l10n/nb_NO.js71
-rw-r--r--apps/workflowengine/l10n/nb_NO.json69
-rw-r--r--apps/workflowengine/l10n/nl.js150
-rw-r--r--apps/workflowengine/l10n/nl.json150
-rw-r--r--apps/workflowengine/l10n/pl.js145
-rw-r--r--apps/workflowengine/l10n/pl.json145
-rw-r--r--apps/workflowengine/l10n/pt_BR.js152
-rw-r--r--apps/workflowengine/l10n/pt_BR.json152
-rw-r--r--apps/workflowengine/l10n/pt_PT.js86
-rw-r--r--apps/workflowengine/l10n/pt_PT.json84
-rw-r--r--apps/workflowengine/l10n/ru.js150
-rw-r--r--apps/workflowengine/l10n/ru.json150
-rw-r--r--apps/workflowengine/l10n/sc.js115
-rw-r--r--apps/workflowengine/l10n/sc.json113
-rw-r--r--apps/workflowengine/l10n/sk.js152
-rw-r--r--apps/workflowengine/l10n/sk.json152
-rw-r--r--apps/workflowengine/l10n/sk_SK.js58
-rw-r--r--apps/workflowengine/l10n/sk_SK.json56
-rw-r--r--apps/workflowengine/l10n/sl.js119
-rw-r--r--apps/workflowengine/l10n/sl.json117
-rw-r--r--apps/workflowengine/l10n/sq.js73
-rw-r--r--apps/workflowengine/l10n/sq.json71
-rw-r--r--apps/workflowengine/l10n/sr.js150
-rw-r--r--apps/workflowengine/l10n/sr.json150
-rw-r--r--apps/workflowengine/l10n/sv.js150
-rw-r--r--apps/workflowengine/l10n/sv.json150
-rw-r--r--apps/workflowengine/l10n/sw.js123
-rw-r--r--apps/workflowengine/l10n/sw.json121
-rw-r--r--apps/workflowengine/l10n/tr.js152
-rw-r--r--apps/workflowengine/l10n/tr.json152
-rw-r--r--apps/workflowengine/l10n/ug.js123
-rw-r--r--apps/workflowengine/l10n/ug.json121
-rw-r--r--apps/workflowengine/l10n/uk.js123
-rw-r--r--apps/workflowengine/l10n/uk.json121
-rw-r--r--apps/workflowengine/l10n/zh_CN.js156
-rw-r--r--apps/workflowengine/l10n/zh_CN.json156
-rw-r--r--apps/workflowengine/l10n/zh_HK.js123
-rw-r--r--apps/workflowengine/l10n/zh_HK.json121
-rw-r--r--apps/workflowengine/l10n/zh_TW.js162
-rw-r--r--apps/workflowengine/l10n/zh_TW.json162
-rw-r--r--apps/workflowengine/lib/AppInfo/Application.php149
-rw-r--r--apps/workflowengine/lib/BackgroundJobs/Rotate.php40
-rw-r--r--apps/workflowengine/lib/Check/AbstractStringCheck.php58
-rw-r--r--apps/workflowengine/lib/Check/FileMimeType.php212
-rw-r--r--apps/workflowengine/lib/Check/FileName.php75
-rw-r--r--apps/workflowengine/lib/Check/FileSize.php52
-rw-r--r--apps/workflowengine/lib/Check/FileSystemTags.php112
-rw-r--r--apps/workflowengine/lib/Check/RequestRemoteAddress.php84
-rw-r--r--apps/workflowengine/lib/Check/RequestTime.php75
-rw-r--r--apps/workflowengine/lib/Check/RequestURL.php58
-rw-r--r--apps/workflowengine/lib/Check/RequestUserAgent.php49
-rw-r--r--apps/workflowengine/lib/Check/TFileCheck.php55
-rw-r--r--apps/workflowengine/lib/Check/UserGroupMembership.php60
-rw-r--r--apps/workflowengine/lib/Command/Index.php63
-rw-r--r--apps/workflowengine/lib/Controller/AWorkflowController.php151
-rw-r--r--apps/workflowengine/lib/Controller/FlowOperations.php128
-rw-r--r--apps/workflowengine/lib/Controller/GlobalWorkflowsController.php25
-rw-r--r--apps/workflowengine/lib/Controller/RequestTime.php52
-rw-r--r--apps/workflowengine/lib/Controller/RequestTimeController.php37
-rw-r--r--apps/workflowengine/lib/Controller/UserWorkflowsController.php101
-rw-r--r--apps/workflowengine/lib/Entity/File.php256
-rw-r--r--apps/workflowengine/lib/Helper/LogContext.php79
-rw-r--r--apps/workflowengine/lib/Helper/ScopeContext.php61
-rw-r--r--apps/workflowengine/lib/Listener/LoadAdditionalSettingsScriptsListener.php26
-rw-r--r--apps/workflowengine/lib/Manager.php637
-rw-r--r--apps/workflowengine/lib/Migration/PopulateNewlyIntroducedDatabaseFields.php59
-rw-r--r--apps/workflowengine/lib/Migration/Version2000Date20190808074233.php134
-rw-r--r--apps/workflowengine/lib/Migration/Version2200Date20210805101925.php37
-rw-r--r--apps/workflowengine/lib/Service/Logger.php152
-rw-r--r--apps/workflowengine/lib/Service/RuleMatcher.php211
-rw-r--r--apps/workflowengine/lib/Settings/ASettings.php155
-rw-r--r--apps/workflowengine/lib/Settings/Admin.php17
-rw-r--r--apps/workflowengine/lib/Settings/Personal.php21
-rw-r--r--apps/workflowengine/lib/Settings/Section.php40
-rw-r--r--apps/workflowengine/src/components/Check.vue229
-rw-r--r--apps/workflowengine/src/components/Checks/FileMimeType.vue172
-rw-r--r--apps/workflowengine/src/components/Checks/FileSystemTag.vue54
-rw-r--r--apps/workflowengine/src/components/Checks/RequestTime.vue139
-rw-r--r--apps/workflowengine/src/components/Checks/RequestURL.vue151
-rw-r--r--apps/workflowengine/src/components/Checks/RequestUserAgent.vue141
-rw-r--r--apps/workflowengine/src/components/Checks/RequestUserGroup.vue156
-rw-r--r--apps/workflowengine/src/components/Checks/file.js88
-rw-r--r--apps/workflowengine/src/components/Checks/index.js9
-rw-r--r--apps/workflowengine/src/components/Checks/request.js55
-rw-r--r--apps/workflowengine/src/components/Event.vue118
-rw-r--r--apps/workflowengine/src/components/Operation.vue44
-rw-r--r--apps/workflowengine/src/components/Rule.vue306
-rw-r--r--apps/workflowengine/src/components/Workflow.vue209
-rw-r--r--apps/workflowengine/src/helpers/api.js17
-rw-r--r--apps/workflowengine/src/helpers/validators.js38
-rw-r--r--apps/workflowengine/src/helpers/window.js30
-rw-r--r--apps/workflowengine/src/mixins/valueMixin.js24
-rw-r--r--apps/workflowengine/src/store.js164
-rw-r--r--apps/workflowengine/src/styles/operation.scss87
-rw-r--r--apps/workflowengine/src/workflowengine.js92
-rw-r--r--apps/workflowengine/templates/admin.php94
-rw-r--r--apps/workflowengine/templates/settings.php11
-rw-r--r--apps/workflowengine/tests/Check/AbstractStringCheckTest.php93
-rw-r--r--apps/workflowengine/tests/Check/FileMimeTypeTest.php177
-rw-r--r--apps/workflowengine/tests/Check/RequestRemoteAddressTest.php90
-rw-r--r--apps/workflowengine/tests/Check/RequestTimeTest.php95
-rw-r--r--apps/workflowengine/tests/Check/RequestUserAgentTest.php94
-rw-r--r--apps/workflowengine/tests/ManagerTest.php776
243 files changed, 17282 insertions, 9541 deletions
diff --git a/apps/workflowengine/.l10nignore b/apps/workflowengine/.l10nignore
new file mode 100644
index 00000000000..4ba3b9cfa0f
--- /dev/null
+++ b/apps/workflowengine/.l10nignore
@@ -0,0 +1,3 @@
+# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+# SPDX-License-Identifier: AGPL-3.0-or-later
+js/
diff --git a/apps/workflowengine/.noopenapi b/apps/workflowengine/.noopenapi
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/apps/workflowengine/.noopenapi
diff --git a/apps/workflowengine/appinfo/app.php b/apps/workflowengine/appinfo/app.php
deleted file mode 100644
index f6f22ce9488..00000000000
--- a/apps/workflowengine/appinfo/app.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-$application = new \OCA\WorkflowEngine\AppInfo\Application();
-$application->registerHooksAndListeners();
diff --git a/apps/workflowengine/appinfo/database.xml b/apps/workflowengine/appinfo/database.xml
deleted file mode 100644
index b67a41faed2..00000000000
--- a/apps/workflowengine/appinfo/database.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<database>
- <name>*dbname*</name>
- <create>true</create>
- <overwrite>false</overwrite>
- <charset>utf8</charset>
-
- <table>
- <name>*dbprefix*flow_checks</name>
- <declaration>
- <field>
- <name>id</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <autoincrement>1</autoincrement>
- <length>4</length>
- </field>
-
- <field>
- <name>class</name>
- <type>text</type>
- <notnull>true</notnull>
- <length>256</length>
- </field>
- <field>
- <name>operator</name>
- <type>text</type>
- <notnull>true</notnull>
- <length>16</length>
- </field>
- <field>
- <name>value</name>
- <type>clob</type>
- <notnull>false</notnull>
- </field>
- <field>
- <name>hash</name>
- <type>text</type>
- <notnull>true</notnull>
- <length>32</length>
- </field>
-
- <index>
- <name>flow_unique_hash</name>
- <unique>true</unique>
- <field>
- <name>hash</name>
- </field>
- </index>
- </declaration>
- </table>
-
- <table>
- <name>*dbprefix*flow_operations</name>
- <declaration>
- <field>
- <name>id</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <autoincrement>1</autoincrement>
- <length>4</length>
- </field>
-
- <field>
- <name>class</name>
- <type>text</type>
- <notnull>true</notnull>
- <length>256</length>
- </field>
- <field>
- <name>name</name>
- <type>text</type>
- <notnull>true</notnull>
- <length>256</length>
- </field>
- <field>
- <name>checks</name>
- <type>clob</type>
- <notnull>false</notnull>
- </field>
- <field>
- <name>operation</name>
- <type>clob</type>
- <notnull>false</notnull>
- </field>
- </declaration>
- </table>
-</database>
diff --git a/apps/workflowengine/appinfo/info.xml b/apps/workflowengine/appinfo/info.xml
index 5d51333f750..ebbfb57e822 100644
--- a/apps/workflowengine/appinfo/info.xml
+++ b/apps/workflowengine/appinfo/info.xml
@@ -1,27 +1,52 @@
<?xml version="1.0"?>
-<info>
+<!--
+ - SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>workflowengine</id>
- <name>Files workflow engine</name>
- <description></description>
- <licence>AGPL</licence>
+ <name>Nextcloud workflow engine</name>
+ <summary>Nextcloud workflow engine</summary>
+ <description>Nextcloud workflow engine</description>
+ <version>2.14.0</version>
+ <licence>agpl</licence>
+ <author>Arthur Schiwon</author>
+ <author>Julius Härtl</author>
<author>Morris Jobke</author>
- <version>1.4.0</version>
<namespace>WorkflowEngine</namespace>
- <category>other</category>
- <website>https://github.com/nextcloud/server</website>
- <bugs>https://github.com/nextcloud/server/issues</bugs>
- <repository type="git">https://github.com/nextcloud/server.git</repository>
-
<types>
<filesystem/>
</types>
+ <category>files</category>
+ <website>https://github.com/nextcloud/server</website>
+ <bugs>https://github.com/nextcloud/server/issues</bugs>
+ <repository>https://github.com/nextcloud/server.git</repository>
+
<dependencies>
- <nextcloud min-version="14" max-version="14" />
+ <nextcloud min-version="32" max-version="32"/>
</dependencies>
+ <background-jobs>
+ <job>OCA\WorkflowEngine\BackgroundJobs\Rotate</job>
+ </background-jobs>
+
+ <repair-steps>
+ <post-migration>
+ <step>OCA\WorkflowEngine\Migration\PopulateNewlyIntroducedDatabaseFields</step>
+ </post-migration>
+ </repair-steps>
+
+ <commands>
+ <command>OCA\WorkflowEngine\Command\Index</command>
+ </commands>
+
<settings>
+ <admin>OCA\WorkflowEngine\Settings\Admin</admin>
<admin-section>OCA\WorkflowEngine\Settings\Section</admin-section>
+ <personal>OCA\WorkflowEngine\Settings\Personal</personal>
+ <personal-section>OCA\WorkflowEngine\Settings\Section</personal-section>
</settings>
</info>
diff --git a/apps/workflowengine/appinfo/routes.php b/apps/workflowengine/appinfo/routes.php
index 5ae74bcafc3..48e5ed2ef4e 100644
--- a/apps/workflowengine/appinfo/routes.php
+++ b/apps/workflowengine/appinfo/routes.php
@@ -1,30 +1,15 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
return [
'routes' => [
- ['name' => 'flowOperations#getOperations', 'url' => '/operations', 'verb' => 'GET'],
- ['name' => 'flowOperations#addOperation', 'url' => '/operations', 'verb' => 'POST'],
- ['name' => 'flowOperations#updateOperation', 'url' => '/operations/{id}', 'verb' => 'PUT'],
- ['name' => 'flowOperations#deleteOperation', 'url' => '/operations/{id}', 'verb' => 'DELETE'],
['name' => 'requestTime#getTimezones', 'url' => '/timezones', 'verb' => 'GET'],
- ]
+ ],
+ 'ocs-resources' => [
+ 'global_workflows' => ['url' => '/api/v1/workflows/global'],
+ 'user_workflows' => ['url' => '/api/v1/workflows/user'],
+ ],
];
diff --git a/apps/workflowengine/composer/autoload.php b/apps/workflowengine/composer/autoload.php
new file mode 100644
index 00000000000..30ca414ea55
--- /dev/null
+++ b/apps/workflowengine/composer/autoload.php
@@ -0,0 +1,25 @@
+<?php
+
+// autoload.php @generated by Composer
+
+if (PHP_VERSION_ID < 50600) {
+ if (!headers_sent()) {
+ header('HTTP/1.1 500 Internal Server Error');
+ }
+ $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
+ if (!ini_get('display_errors')) {
+ if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
+ fwrite(STDERR, $err);
+ } elseif (!headers_sent()) {
+ echo $err;
+ }
+ }
+ trigger_error(
+ $err,
+ E_USER_ERROR
+ );
+}
+
+require_once __DIR__ . '/composer/autoload_real.php';
+
+return ComposerAutoloaderInitWorkflowEngine::getLoader();
diff --git a/apps/workflowengine/composer/composer.json b/apps/workflowengine/composer/composer.json
new file mode 100644
index 00000000000..9d0b615ce6b
--- /dev/null
+++ b/apps/workflowengine/composer/composer.json
@@ -0,0 +1,13 @@
+{
+ "config" : {
+ "vendor-dir": ".",
+ "optimize-autoloader": true,
+ "classmap-authoritative": true,
+ "autoloader-suffix": "WorkflowEngine"
+ },
+ "autoload" : {
+ "psr-4": {
+ "OCA\\WorkflowEngine\\": "../lib/"
+ }
+ }
+}
diff --git a/apps/workflowengine/composer/composer.lock b/apps/workflowengine/composer/composer.lock
new file mode 100644
index 00000000000..fd0bcbcb753
--- /dev/null
+++ b/apps/workflowengine/composer/composer.lock
@@ -0,0 +1,18 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "d751713988987e9331980363e24189ce",
+ "packages": [],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": [],
+ "platform-dev": [],
+ "plugin-api-version": "2.1.0"
+}
diff --git a/apps/workflowengine/composer/composer/ClassLoader.php b/apps/workflowengine/composer/composer/ClassLoader.php
new file mode 100644
index 00000000000..7824d8f7eaf
--- /dev/null
+++ b/apps/workflowengine/composer/composer/ClassLoader.php
@@ -0,0 +1,579 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Autoload;
+
+/**
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
+ *
+ * $loader = new \Composer\Autoload\ClassLoader();
+ *
+ * // register classes with namespaces
+ * $loader->add('Symfony\Component', __DIR__.'/component');
+ * $loader->add('Symfony', __DIR__.'/framework');
+ *
+ * // activate the autoloader
+ * $loader->register();
+ *
+ * // to enable searching the include path (eg. for PEAR packages)
+ * $loader->setUseIncludePath(true);
+ *
+ * In this example, if you try to use a class in the Symfony\Component
+ * namespace or one of its children (Symfony\Component\Console for instance),
+ * the autoloader will first look for the class under the component/
+ * directory, and it will then fallback to the framework/ directory if not
+ * found before giving up.
+ *
+ * This class is loosely based on the Symfony UniversalClassLoader.
+ *
+ * @author Fabien Potencier <fabien@symfony.com>
+ * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @see https://www.php-fig.org/psr/psr-0/
+ * @see https://www.php-fig.org/psr/psr-4/
+ */
+class ClassLoader
+{
+ /** @var \Closure(string):void */
+ private static $includeFile;
+
+ /** @var string|null */
+ private $vendorDir;
+
+ // PSR-4
+ /**
+ * @var array<string, array<string, int>>
+ */
+ private $prefixLengthsPsr4 = array();
+ /**
+ * @var array<string, list<string>>
+ */
+ private $prefixDirsPsr4 = array();
+ /**
+ * @var list<string>
+ */
+ private $fallbackDirsPsr4 = array();
+
+ // PSR-0
+ /**
+ * List of PSR-0 prefixes
+ *
+ * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
+ *
+ * @var array<string, array<string, list<string>>>
+ */
+ private $prefixesPsr0 = array();
+ /**
+ * @var list<string>
+ */
+ private $fallbackDirsPsr0 = array();
+
+ /** @var bool */
+ private $useIncludePath = false;
+
+ /**
+ * @var array<string, string>
+ */
+ private $classMap = array();
+
+ /** @var bool */
+ private $classMapAuthoritative = false;
+
+ /**
+ * @var array<string, bool>
+ */
+ private $missingClasses = array();
+
+ /** @var string|null */
+ private $apcuPrefix;
+
+ /**
+ * @var array<string, self>
+ */
+ private static $registeredLoaders = array();
+
+ /**
+ * @param string|null $vendorDir
+ */
+ public function __construct($vendorDir = null)
+ {
+ $this->vendorDir = $vendorDir;
+ self::initializeIncludeClosure();
+ }
+
+ /**
+ * @return array<string, list<string>>
+ */
+ public function getPrefixes()
+ {
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
+ }
+
+ return array();
+ }
+
+ /**
+ * @return array<string, list<string>>
+ */
+ public function getPrefixesPsr4()
+ {
+ return $this->prefixDirsPsr4;
+ }
+
+ /**
+ * @return list<string>
+ */
+ public function getFallbackDirs()
+ {
+ return $this->fallbackDirsPsr0;
+ }
+
+ /**
+ * @return list<string>
+ */
+ public function getFallbackDirsPsr4()
+ {
+ return $this->fallbackDirsPsr4;
+ }
+
+ /**
+ * @return array<string, string> Array of classname => path
+ */
+ public function getClassMap()
+ {
+ return $this->classMap;
+ }
+
+ /**
+ * @param array<string, string> $classMap Class to filename map
+ *
+ * @return void
+ */
+ public function addClassMap(array $classMap)
+ {
+ if ($this->classMap) {
+ $this->classMap = array_merge($this->classMap, $classMap);
+ } else {
+ $this->classMap = $classMap;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix, either
+ * appending or prepending to the ones previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param list<string>|string $paths The PSR-0 root directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @return void
+ */
+ public function add($prefix, $paths, $prepend = false)
+ {
+ $paths = (array) $paths;
+ if (!$prefix) {
+ if ($prepend) {
+ $this->fallbackDirsPsr0 = array_merge(
+ $paths,
+ $this->fallbackDirsPsr0
+ );
+ } else {
+ $this->fallbackDirsPsr0 = array_merge(
+ $this->fallbackDirsPsr0,
+ $paths
+ );
+ }
+
+ return;
+ }
+
+ $first = $prefix[0];
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
+ $this->prefixesPsr0[$first][$prefix] = $paths;
+
+ return;
+ }
+ if ($prepend) {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $paths,
+ $this->prefixesPsr0[$first][$prefix]
+ );
+ } else {
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
+ $this->prefixesPsr0[$first][$prefix],
+ $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace, either
+ * appending or prepending to the ones previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param list<string>|string $paths The PSR-4 base directories
+ * @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function addPsr4($prefix, $paths, $prepend = false)
+ {
+ $paths = (array) $paths;
+ if (!$prefix) {
+ // Register directories for the root namespace.
+ if ($prepend) {
+ $this->fallbackDirsPsr4 = array_merge(
+ $paths,
+ $this->fallbackDirsPsr4
+ );
+ } else {
+ $this->fallbackDirsPsr4 = array_merge(
+ $this->fallbackDirsPsr4,
+ $paths
+ );
+ }
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
+ // Register directories for a new namespace.
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = $paths;
+ } elseif ($prepend) {
+ // Prepend directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $paths,
+ $this->prefixDirsPsr4[$prefix]
+ );
+ } else {
+ // Append directories for an already registered namespace.
+ $this->prefixDirsPsr4[$prefix] = array_merge(
+ $this->prefixDirsPsr4[$prefix],
+ $paths
+ );
+ }
+ }
+
+ /**
+ * Registers a set of PSR-0 directories for a given prefix,
+ * replacing any others previously set for this prefix.
+ *
+ * @param string $prefix The prefix
+ * @param list<string>|string $paths The PSR-0 base directories
+ *
+ * @return void
+ */
+ public function set($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr0 = (array) $paths;
+ } else {
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Registers a set of PSR-4 directories for a given namespace,
+ * replacing any others previously set for this namespace.
+ *
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param list<string>|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
+ *
+ * @return void
+ */
+ public function setPsr4($prefix, $paths)
+ {
+ if (!$prefix) {
+ $this->fallbackDirsPsr4 = (array) $paths;
+ } else {
+ $length = strlen($prefix);
+ if ('\\' !== $prefix[$length - 1]) {
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
+ }
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
+ }
+ }
+
+ /**
+ * Turns on searching the include path for class files.
+ *
+ * @param bool $useIncludePath
+ *
+ * @return void
+ */
+ public function setUseIncludePath($useIncludePath)
+ {
+ $this->useIncludePath = $useIncludePath;
+ }
+
+ /**
+ * Can be used to check if the autoloader uses the include path to check
+ * for classes.
+ *
+ * @return bool
+ */
+ public function getUseIncludePath()
+ {
+ return $this->useIncludePath;
+ }
+
+ /**
+ * Turns off searching the prefix and fallback directories for classes
+ * that have not been registered with the class map.
+ *
+ * @param bool $classMapAuthoritative
+ *
+ * @return void
+ */
+ public function setClassMapAuthoritative($classMapAuthoritative)
+ {
+ $this->classMapAuthoritative = $classMapAuthoritative;
+ }
+
+ /**
+ * Should class lookup fail if not found in the current class map?
+ *
+ * @return bool
+ */
+ public function isClassMapAuthoritative()
+ {
+ return $this->classMapAuthoritative;
+ }
+
+ /**
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
+ *
+ * @param string|null $apcuPrefix
+ *
+ * @return void
+ */
+ public function setApcuPrefix($apcuPrefix)
+ {
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
+ }
+
+ /**
+ * The APCu prefix in use, or null if APCu caching is not enabled.
+ *
+ * @return string|null
+ */
+ public function getApcuPrefix()
+ {
+ return $this->apcuPrefix;
+ }
+
+ /**
+ * Registers this instance as an autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not
+ *
+ * @return void
+ */
+ public function register($prepend = false)
+ {
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
+
+ if (null === $this->vendorDir) {
+ return;
+ }
+
+ if ($prepend) {
+ self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
+ } else {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ self::$registeredLoaders[$this->vendorDir] = $this;
+ }
+ }
+
+ /**
+ * Unregisters this instance as an autoloader.
+ *
+ * @return void
+ */
+ public function unregister()
+ {
+ spl_autoload_unregister(array($this, 'loadClass'));
+
+ if (null !== $this->vendorDir) {
+ unset(self::$registeredLoaders[$this->vendorDir]);
+ }
+ }
+
+ /**
+ * Loads the given class or interface.
+ *
+ * @param string $class The name of the class
+ * @return true|null True if loaded, null otherwise
+ */
+ public function loadClass($class)
+ {
+ if ($file = $this->findFile($class)) {
+ $includeFile = self::$includeFile;
+ $includeFile($file);
+
+ return true;
+ }
+
+ return null;
+ }
+
+ /**
+ * Finds the path to the file where the class is defined.
+ *
+ * @param string $class The name of the class
+ *
+ * @return string|false The path if found, false otherwise
+ */
+ public function findFile($class)
+ {
+ // class map lookup
+ if (isset($this->classMap[$class])) {
+ return $this->classMap[$class];
+ }
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
+ return false;
+ }
+ if (null !== $this->apcuPrefix) {
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
+ if ($hit) {
+ return $file;
+ }
+ }
+
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if (false === $file && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if (null !== $this->apcuPrefix) {
+ apcu_add($this->apcuPrefix.$class, $file);
+ }
+
+ if (false === $file) {
+ // Remember that this class does not exist.
+ $this->missingClasses[$class] = true;
+ }
+
+ return $file;
+ }
+
+ /**
+ * Returns the currently registered loaders keyed by their corresponding vendor directories.
+ *
+ * @return array<string, self>
+ */
+ public static function getRegisteredLoaders()
+ {
+ return self::$registeredLoaders;
+ }
+
+ /**
+ * @param string $class
+ * @param string $ext
+ * @return string|false
+ */
+ private function findFileWithExtension($class, $ext)
+ {
+ // PSR-4 lookup
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
+
+ $first = $class[0];
+ if (isset($this->prefixLengthsPsr4[$first])) {
+ $subPath = $class;
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
+ $subPath = substr($subPath, 0, $lastPos);
+ $search = $subPath . '\\';
+ if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
+ if (file_exists($file = $dir . $pathEnd)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-4 fallback dirs
+ foreach ($this->fallbackDirsPsr4 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 lookup
+ if (false !== $pos = strrpos($class, '\\')) {
+ // namespaced class name
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
+ } else {
+ // PEAR-like class name
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
+ }
+
+ if (isset($this->prefixesPsr0[$first])) {
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
+ if (0 === strpos($class, $prefix)) {
+ foreach ($dirs as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+ }
+ }
+ }
+
+ // PSR-0 fallback dirs
+ foreach ($this->fallbackDirsPsr0 as $dir) {
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+ return $file;
+ }
+ }
+
+ // PSR-0 include paths.
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
+ return $file;
+ }
+
+ return false;
+ }
+
+ /**
+ * @return void
+ */
+ private static function initializeIncludeClosure()
+ {
+ if (self::$includeFile !== null) {
+ return;
+ }
+
+ /**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ */
+ self::$includeFile = \Closure::bind(static function($file) {
+ include $file;
+ }, null, null);
+ }
+}
diff --git a/apps/workflowengine/composer/composer/InstalledVersions.php b/apps/workflowengine/composer/composer/InstalledVersions.php
new file mode 100644
index 00000000000..51e734a774b
--- /dev/null
+++ b/apps/workflowengine/composer/composer/InstalledVersions.php
@@ -0,0 +1,359 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ * Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer;
+
+use Composer\Autoload\ClassLoader;
+use Composer\Semver\VersionParser;
+
+/**
+ * This class is copied in every Composer installed project and available to all
+ *
+ * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
+ *
+ * To require its presence, you can require `composer-runtime-api ^2.0`
+ *
+ * @final
+ */
+class InstalledVersions
+{
+ /**
+ * @var mixed[]|null
+ * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
+ */
+ private static $installed;
+
+ /**
+ * @var bool|null
+ */
+ private static $canGetVendors;
+
+ /**
+ * @var array[]
+ * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+ */
+ private static $installedByVendor = array();
+
+ /**
+ * Returns a list of all package names which are present, either by being installed, replaced or provided
+ *
+ * @return string[]
+ * @psalm-return list<string>
+ */
+ public static function getInstalledPackages()
+ {
+ $packages = array();
+ foreach (self::getInstalled() as $installed) {
+ $packages[] = array_keys($installed['versions']);
+ }
+
+ if (1 === \count($packages)) {
+ return $packages[0];
+ }
+
+ return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
+ }
+
+ /**
+ * Returns a list of all package names with a specific type e.g. 'library'
+ *
+ * @param string $type
+ * @return string[]
+ * @psalm-return list<string>
+ */
+ public static function getInstalledPackagesByType($type)
+ {
+ $packagesByType = array();
+
+ foreach (self::getInstalled() as $installed) {
+ foreach ($installed['versions'] as $name => $package) {
+ if (isset($package['type']) && $package['type'] === $type) {
+ $packagesByType[] = $name;
+ }
+ }
+ }
+
+ return $packagesByType;
+ }
+
+ /**
+ * Checks whether the given package is installed
+ *
+ * This also returns true if the package name is provided or replaced by another package
+ *
+ * @param string $packageName
+ * @param bool $includeDevRequirements
+ * @return bool
+ */
+ public static function isInstalled($packageName, $includeDevRequirements = true)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (isset($installed['versions'][$packageName])) {
+ return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Checks whether the given package satisfies a version constraint
+ *
+ * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
+ *
+ * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
+ *
+ * @param VersionParser $parser Install composer/semver to have access to this class and functionality
+ * @param string $packageName
+ * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
+ * @return bool
+ */
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
+ {
+ $constraint = $parser->parseConstraints((string) $constraint);
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
+
+ return $provided->matches($constraint);
+ }
+
+ /**
+ * Returns a version constraint representing all the range(s) which are installed for a given package
+ *
+ * It is easier to use this via isInstalled() with the $constraint argument if you need to check
+ * whether a given version of a package is installed, and not just whether it exists
+ *
+ * @param string $packageName
+ * @return string Version constraint usable with composer/semver
+ */
+ public static function getVersionRanges($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ $ranges = array();
+ if (isset($installed['versions'][$packageName]['pretty_version'])) {
+ $ranges[] = $installed['versions'][$packageName]['pretty_version'];
+ }
+ if (array_key_exists('aliases', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
+ }
+ if (array_key_exists('replaced', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
+ }
+ if (array_key_exists('provided', $installed['versions'][$packageName])) {
+ $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
+ }
+
+ return implode(' || ', $ranges);
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
+ */
+ public static function getPrettyVersion($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['pretty_version'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['pretty_version'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
+ */
+ public static function getReference($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ if (!isset($installed['versions'][$packageName]['reference'])) {
+ return null;
+ }
+
+ return $installed['versions'][$packageName]['reference'];
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @param string $packageName
+ * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
+ */
+ public static function getInstallPath($packageName)
+ {
+ foreach (self::getInstalled() as $installed) {
+ if (!isset($installed['versions'][$packageName])) {
+ continue;
+ }
+
+ return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
+ }
+
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
+ }
+
+ /**
+ * @return array
+ * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
+ */
+ public static function getRootPackage()
+ {
+ $installed = self::getInstalled();
+
+ return $installed[0]['root'];
+ }
+
+ /**
+ * Returns the raw installed.php data for custom implementations
+ *
+ * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
+ * @return array[]
+ * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
+ */
+ public static function getRawData()
+ {
+ @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ self::$installed = include __DIR__ . '/installed.php';
+ } else {
+ self::$installed = array();
+ }
+ }
+
+ return self::$installed;
+ }
+
+ /**
+ * Returns the raw data of all installed.php which are currently loaded for custom implementations
+ *
+ * @return array[]
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+ */
+ public static function getAllRawData()
+ {
+ return self::getInstalled();
+ }
+
+ /**
+ * Lets you reload the static array from another file
+ *
+ * This is only useful for complex integrations in which a project needs to use
+ * this class but then also needs to execute another project's autoloader in process,
+ * and wants to ensure both projects have access to their version of installed.php.
+ *
+ * A typical case would be PHPUnit, where it would need to make sure it reads all
+ * the data it needs from this class, then call reload() with
+ * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
+ * the project in which it runs can then also use this class safely, without
+ * interference between PHPUnit's dependencies and the project's dependencies.
+ *
+ * @param array[] $data A vendor/composer/installed.php data set
+ * @return void
+ *
+ * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
+ */
+ public static function reload($data)
+ {
+ self::$installed = $data;
+ self::$installedByVendor = array();
+ }
+
+ /**
+ * @return array[]
+ * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
+ */
+ private static function getInstalled()
+ {
+ if (null === self::$canGetVendors) {
+ self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
+ }
+
+ $installed = array();
+
+ if (self::$canGetVendors) {
+ foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
+ if (isset(self::$installedByVendor[$vendorDir])) {
+ $installed[] = self::$installedByVendor[$vendorDir];
+ } elseif (is_file($vendorDir.'/composer/installed.php')) {
+ /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
+ $required = require $vendorDir.'/composer/installed.php';
+ $installed[] = self::$installedByVendor[$vendorDir] = $required;
+ if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
+ self::$installed = $installed[count($installed) - 1];
+ }
+ }
+ }
+ }
+
+ if (null === self::$installed) {
+ // only require the installed.php file if this file is loaded from its dumped location,
+ // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
+ if (substr(__DIR__, -8, 1) !== 'C') {
+ /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
+ $required = require __DIR__ . '/installed.php';
+ self::$installed = $required;
+ } else {
+ self::$installed = array();
+ }
+ }
+
+ if (self::$installed !== array()) {
+ $installed[] = self::$installed;
+ }
+
+ return $installed;
+ }
+}
diff --git a/apps/workflowengine/composer/composer/LICENSE b/apps/workflowengine/composer/composer/LICENSE
new file mode 100644
index 00000000000..f27399a042d
--- /dev/null
+++ b/apps/workflowengine/composer/composer/LICENSE
@@ -0,0 +1,21 @@
+
+Copyright (c) Nils Adermann, Jordi Boggiano
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
diff --git a/apps/workflowengine/composer/composer/autoload_classmap.php b/apps/workflowengine/composer/composer/autoload_classmap.php
new file mode 100644
index 00000000000..0444cce13e7
--- /dev/null
+++ b/apps/workflowengine/composer/composer/autoload_classmap.php
@@ -0,0 +1,42 @@
+<?php
+
+// autoload_classmap.php @generated by Composer
+
+$vendorDir = dirname(__DIR__);
+$baseDir = $vendorDir;
+
+return array(
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
+ 'OCA\\WorkflowEngine\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
+ 'OCA\\WorkflowEngine\\BackgroundJobs\\Rotate' => $baseDir . '/../lib/BackgroundJobs/Rotate.php',
+ 'OCA\\WorkflowEngine\\Check\\AbstractStringCheck' => $baseDir . '/../lib/Check/AbstractStringCheck.php',
+ 'OCA\\WorkflowEngine\\Check\\FileMimeType' => $baseDir . '/../lib/Check/FileMimeType.php',
+ 'OCA\\WorkflowEngine\\Check\\FileName' => $baseDir . '/../lib/Check/FileName.php',
+ 'OCA\\WorkflowEngine\\Check\\FileSize' => $baseDir . '/../lib/Check/FileSize.php',
+ 'OCA\\WorkflowEngine\\Check\\FileSystemTags' => $baseDir . '/../lib/Check/FileSystemTags.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress' => $baseDir . '/../lib/Check/RequestRemoteAddress.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestTime' => $baseDir . '/../lib/Check/RequestTime.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestURL' => $baseDir . '/../lib/Check/RequestURL.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestUserAgent' => $baseDir . '/../lib/Check/RequestUserAgent.php',
+ 'OCA\\WorkflowEngine\\Check\\TFileCheck' => $baseDir . '/../lib/Check/TFileCheck.php',
+ 'OCA\\WorkflowEngine\\Check\\UserGroupMembership' => $baseDir . '/../lib/Check/UserGroupMembership.php',
+ 'OCA\\WorkflowEngine\\Command\\Index' => $baseDir . '/../lib/Command/Index.php',
+ 'OCA\\WorkflowEngine\\Controller\\AWorkflowController' => $baseDir . '/../lib/Controller/AWorkflowController.php',
+ 'OCA\\WorkflowEngine\\Controller\\GlobalWorkflowsController' => $baseDir . '/../lib/Controller/GlobalWorkflowsController.php',
+ 'OCA\\WorkflowEngine\\Controller\\RequestTimeController' => $baseDir . '/../lib/Controller/RequestTimeController.php',
+ 'OCA\\WorkflowEngine\\Controller\\UserWorkflowsController' => $baseDir . '/../lib/Controller/UserWorkflowsController.php',
+ 'OCA\\WorkflowEngine\\Entity\\File' => $baseDir . '/../lib/Entity/File.php',
+ 'OCA\\WorkflowEngine\\Helper\\LogContext' => $baseDir . '/../lib/Helper/LogContext.php',
+ 'OCA\\WorkflowEngine\\Helper\\ScopeContext' => $baseDir . '/../lib/Helper/ScopeContext.php',
+ 'OCA\\WorkflowEngine\\Listener\\LoadAdditionalSettingsScriptsListener' => $baseDir . '/../lib/Listener/LoadAdditionalSettingsScriptsListener.php',
+ 'OCA\\WorkflowEngine\\Manager' => $baseDir . '/../lib/Manager.php',
+ 'OCA\\WorkflowEngine\\Migration\\PopulateNewlyIntroducedDatabaseFields' => $baseDir . '/../lib/Migration/PopulateNewlyIntroducedDatabaseFields.php',
+ 'OCA\\WorkflowEngine\\Migration\\Version2000Date20190808074233' => $baseDir . '/../lib/Migration/Version2000Date20190808074233.php',
+ 'OCA\\WorkflowEngine\\Migration\\Version2200Date20210805101925' => $baseDir . '/../lib/Migration/Version2200Date20210805101925.php',
+ 'OCA\\WorkflowEngine\\Service\\Logger' => $baseDir . '/../lib/Service/Logger.php',
+ 'OCA\\WorkflowEngine\\Service\\RuleMatcher' => $baseDir . '/../lib/Service/RuleMatcher.php',
+ 'OCA\\WorkflowEngine\\Settings\\ASettings' => $baseDir . '/../lib/Settings/ASettings.php',
+ 'OCA\\WorkflowEngine\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php',
+ 'OCA\\WorkflowEngine\\Settings\\Personal' => $baseDir . '/../lib/Settings/Personal.php',
+ 'OCA\\WorkflowEngine\\Settings\\Section' => $baseDir . '/../lib/Settings/Section.php',
+);
diff --git a/apps/workflowengine/composer/composer/autoload_namespaces.php b/apps/workflowengine/composer/composer/autoload_namespaces.php
new file mode 100644
index 00000000000..3f5c9296251
--- /dev/null
+++ b/apps/workflowengine/composer/composer/autoload_namespaces.php
@@ -0,0 +1,9 @@
+<?php
+
+// autoload_namespaces.php @generated by Composer
+
+$vendorDir = dirname(__DIR__);
+$baseDir = $vendorDir;
+
+return array(
+);
diff --git a/apps/workflowengine/composer/composer/autoload_psr4.php b/apps/workflowengine/composer/composer/autoload_psr4.php
new file mode 100644
index 00000000000..3bbfbe5e4b9
--- /dev/null
+++ b/apps/workflowengine/composer/composer/autoload_psr4.php
@@ -0,0 +1,10 @@
+<?php
+
+// autoload_psr4.php @generated by Composer
+
+$vendorDir = dirname(__DIR__);
+$baseDir = $vendorDir;
+
+return array(
+ 'OCA\\WorkflowEngine\\' => array($baseDir . '/../lib'),
+);
diff --git a/apps/workflowengine/composer/composer/autoload_real.php b/apps/workflowengine/composer/composer/autoload_real.php
new file mode 100644
index 00000000000..cdc2b8a55b4
--- /dev/null
+++ b/apps/workflowengine/composer/composer/autoload_real.php
@@ -0,0 +1,37 @@
+<?php
+
+// autoload_real.php @generated by Composer
+
+class ComposerAutoloaderInitWorkflowEngine
+{
+ private static $loader;
+
+ public static function loadClassLoader($class)
+ {
+ if ('Composer\Autoload\ClassLoader' === $class) {
+ require __DIR__ . '/ClassLoader.php';
+ }
+ }
+
+ /**
+ * @return \Composer\Autoload\ClassLoader
+ */
+ public static function getLoader()
+ {
+ if (null !== self::$loader) {
+ return self::$loader;
+ }
+
+ spl_autoload_register(array('ComposerAutoloaderInitWorkflowEngine', 'loadClassLoader'), true, true);
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
+ spl_autoload_unregister(array('ComposerAutoloaderInitWorkflowEngine', 'loadClassLoader'));
+
+ require __DIR__ . '/autoload_static.php';
+ call_user_func(\Composer\Autoload\ComposerStaticInitWorkflowEngine::getInitializer($loader));
+
+ $loader->setClassMapAuthoritative(true);
+ $loader->register(true);
+
+ return $loader;
+ }
+}
diff --git a/apps/workflowengine/composer/composer/autoload_static.php b/apps/workflowengine/composer/composer/autoload_static.php
new file mode 100644
index 00000000000..0b9ac89ae30
--- /dev/null
+++ b/apps/workflowengine/composer/composer/autoload_static.php
@@ -0,0 +1,68 @@
+<?php
+
+// autoload_static.php @generated by Composer
+
+namespace Composer\Autoload;
+
+class ComposerStaticInitWorkflowEngine
+{
+ public static $prefixLengthsPsr4 = array (
+ 'O' =>
+ array (
+ 'OCA\\WorkflowEngine\\' => 19,
+ ),
+ );
+
+ public static $prefixDirsPsr4 = array (
+ 'OCA\\WorkflowEngine\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/../lib',
+ ),
+ );
+
+ public static $classMap = array (
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
+ 'OCA\\WorkflowEngine\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
+ 'OCA\\WorkflowEngine\\BackgroundJobs\\Rotate' => __DIR__ . '/..' . '/../lib/BackgroundJobs/Rotate.php',
+ 'OCA\\WorkflowEngine\\Check\\AbstractStringCheck' => __DIR__ . '/..' . '/../lib/Check/AbstractStringCheck.php',
+ 'OCA\\WorkflowEngine\\Check\\FileMimeType' => __DIR__ . '/..' . '/../lib/Check/FileMimeType.php',
+ 'OCA\\WorkflowEngine\\Check\\FileName' => __DIR__ . '/..' . '/../lib/Check/FileName.php',
+ 'OCA\\WorkflowEngine\\Check\\FileSize' => __DIR__ . '/..' . '/../lib/Check/FileSize.php',
+ 'OCA\\WorkflowEngine\\Check\\FileSystemTags' => __DIR__ . '/..' . '/../lib/Check/FileSystemTags.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress' => __DIR__ . '/..' . '/../lib/Check/RequestRemoteAddress.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestTime' => __DIR__ . '/..' . '/../lib/Check/RequestTime.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestURL' => __DIR__ . '/..' . '/../lib/Check/RequestURL.php',
+ 'OCA\\WorkflowEngine\\Check\\RequestUserAgent' => __DIR__ . '/..' . '/../lib/Check/RequestUserAgent.php',
+ 'OCA\\WorkflowEngine\\Check\\TFileCheck' => __DIR__ . '/..' . '/../lib/Check/TFileCheck.php',
+ 'OCA\\WorkflowEngine\\Check\\UserGroupMembership' => __DIR__ . '/..' . '/../lib/Check/UserGroupMembership.php',
+ 'OCA\\WorkflowEngine\\Command\\Index' => __DIR__ . '/..' . '/../lib/Command/Index.php',
+ 'OCA\\WorkflowEngine\\Controller\\AWorkflowController' => __DIR__ . '/..' . '/../lib/Controller/AWorkflowController.php',
+ 'OCA\\WorkflowEngine\\Controller\\GlobalWorkflowsController' => __DIR__ . '/..' . '/../lib/Controller/GlobalWorkflowsController.php',
+ 'OCA\\WorkflowEngine\\Controller\\RequestTimeController' => __DIR__ . '/..' . '/../lib/Controller/RequestTimeController.php',
+ 'OCA\\WorkflowEngine\\Controller\\UserWorkflowsController' => __DIR__ . '/..' . '/../lib/Controller/UserWorkflowsController.php',
+ 'OCA\\WorkflowEngine\\Entity\\File' => __DIR__ . '/..' . '/../lib/Entity/File.php',
+ 'OCA\\WorkflowEngine\\Helper\\LogContext' => __DIR__ . '/..' . '/../lib/Helper/LogContext.php',
+ 'OCA\\WorkflowEngine\\Helper\\ScopeContext' => __DIR__ . '/..' . '/../lib/Helper/ScopeContext.php',
+ 'OCA\\WorkflowEngine\\Listener\\LoadAdditionalSettingsScriptsListener' => __DIR__ . '/..' . '/../lib/Listener/LoadAdditionalSettingsScriptsListener.php',
+ 'OCA\\WorkflowEngine\\Manager' => __DIR__ . '/..' . '/../lib/Manager.php',
+ 'OCA\\WorkflowEngine\\Migration\\PopulateNewlyIntroducedDatabaseFields' => __DIR__ . '/..' . '/../lib/Migration/PopulateNewlyIntroducedDatabaseFields.php',
+ 'OCA\\WorkflowEngine\\Migration\\Version2000Date20190808074233' => __DIR__ . '/..' . '/../lib/Migration/Version2000Date20190808074233.php',
+ 'OCA\\WorkflowEngine\\Migration\\Version2200Date20210805101925' => __DIR__ . '/..' . '/../lib/Migration/Version2200Date20210805101925.php',
+ 'OCA\\WorkflowEngine\\Service\\Logger' => __DIR__ . '/..' . '/../lib/Service/Logger.php',
+ 'OCA\\WorkflowEngine\\Service\\RuleMatcher' => __DIR__ . '/..' . '/../lib/Service/RuleMatcher.php',
+ 'OCA\\WorkflowEngine\\Settings\\ASettings' => __DIR__ . '/..' . '/../lib/Settings/ASettings.php',
+ 'OCA\\WorkflowEngine\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php',
+ 'OCA\\WorkflowEngine\\Settings\\Personal' => __DIR__ . '/..' . '/../lib/Settings/Personal.php',
+ 'OCA\\WorkflowEngine\\Settings\\Section' => __DIR__ . '/..' . '/../lib/Settings/Section.php',
+ );
+
+ public static function getInitializer(ClassLoader $loader)
+ {
+ return \Closure::bind(function () use ($loader) {
+ $loader->prefixLengthsPsr4 = ComposerStaticInitWorkflowEngine::$prefixLengthsPsr4;
+ $loader->prefixDirsPsr4 = ComposerStaticInitWorkflowEngine::$prefixDirsPsr4;
+ $loader->classMap = ComposerStaticInitWorkflowEngine::$classMap;
+
+ }, null, ClassLoader::class);
+ }
+}
diff --git a/apps/workflowengine/composer/composer/installed.json b/apps/workflowengine/composer/composer/installed.json
new file mode 100644
index 00000000000..f20a6c47c6d
--- /dev/null
+++ b/apps/workflowengine/composer/composer/installed.json
@@ -0,0 +1,5 @@
+{
+ "packages": [],
+ "dev": false,
+ "dev-package-names": []
+}
diff --git a/apps/workflowengine/composer/composer/installed.php b/apps/workflowengine/composer/composer/installed.php
new file mode 100644
index 00000000000..1a66c7f2416
--- /dev/null
+++ b/apps/workflowengine/composer/composer/installed.php
@@ -0,0 +1,23 @@
+<?php return array(
+ 'root' => array(
+ 'name' => '__root__',
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../',
+ 'aliases' => array(),
+ 'dev' => false,
+ ),
+ 'versions' => array(
+ '__root__' => array(
+ 'pretty_version' => 'dev-master',
+ 'version' => 'dev-master',
+ 'reference' => 'b1797842784b250fb01ed5e3bf130705eb94751b',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ ),
+);
diff --git a/apps/workflowengine/css/admin.css b/apps/workflowengine/css/admin.css
deleted file mode 100644
index 5494b35ce69..00000000000
--- a/apps/workflowengine/css/admin.css
+++ /dev/null
@@ -1,58 +0,0 @@
-.workflowengine .operation {
- padding: 5px;
- padding-bottom: 20px;
- margin-bottom: 20px;
- border-bottom: #eee 1px solid;
- border-left: rgba(0,0,0,0) 1px solid;
-}
-.workflowengine .operation.modified {
- border-left: rgb(255, 94, 32) 1px solid;
-}
-.workflowengine .operation button {
- margin-bottom: 0;
-}
-.workflowengine .operation span.info {
- padding: 7px;
- color: #eee;
-}
-.workflowengine .rules .operation:nth-last-child(2) {
- margin-bottom: 5px;
-}
-
-.workflowengine .pull-right {
- float: right
-}
-
-.workflowengine .operation .msg {
- border-radius: 3px;
- margin: 3px 3px 3px 0;
- padding: 5px;
- transition: opacity .5s;
-}
-
-.workflowengine .operation .check:hover {
- background-color: #f8f8f8;
-}
-
-.workflowengine .operation .button-delete,
-.workflowengine .operation .button-delete-check {
- opacity: 0.5;
- padding: 7px;
-}
-.workflowengine .operation .button-delete:hover,
-.workflowengine .operation .button-delete:focus,
-.workflowengine .operation .button-delete-check:hover,
-.workflowengine .operation .button-delete-check:focus {
- opacity: 1;
- cursor: pointer;
-}
-
-.workflowengine .rules .icon-loading-small {
- display: inline-block;
- margin-right: 5px;
-}
-
-.workflowengine .invalid-input {
- border-color: #aa0000;
-}
-
diff --git a/apps/workflowengine/img/app-dark.svg b/apps/workflowengine/img/app-dark.svg
new file mode 100644
index 00000000000..148495ade91
--- /dev/null
+++ b/apps/workflowengine/img/app-dark.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m3.084 3c-1.0027 0-1.834 0.83129-1.834 1.834v2.166h-0.23633c-1.3523-0.019125-1.3523 2.0191 0 2h0.23633v2.166c0 1.0027 0.83129 1.834 1.834 1.834h4.332c1.0027 0 1.834-0.83129 1.834-1.834v-2.166h3.3359l-1.7832 1.7832c-0.98163 0.94251 0.47151 2.3957 1.4141 1.4141l3.4902-3.4902c0.387-0.3878 0.391-1.0229 0-1.4141l-3.4902-3.4902c-0.1883-0.1935-0.4468-0.30271-0.7168-0.30273-0.8974 0-1.3404 1.0909-0.69727 1.7168l1.7832 1.7832h-3.3359v-2.166c0-1.0027-0.83129-1.834-1.834-1.834h-4.332zm0 1.5h4.332c0.19764 0 0.33398 0.13634 0.33398 0.33398v6.332c0 0.19764-0.13634 0.33398-0.33398 0.33398h-4.332c-0.19764 0-0.33398-0.13634-0.33398-0.33398v-6.332c0-0.19764 0.13634-0.33398 0.33398-0.33398z"/></svg>
diff --git a/apps/workflowengine/img/app.svg b/apps/workflowengine/img/app.svg
new file mode 100644
index 00000000000..8d98fac4b69
--- /dev/null
+++ b/apps/workflowengine/img/app.svg
@@ -0,0 +1 @@
+<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m3.084 3c-1.0027 0-1.834 0.83129-1.834 1.834v2.166h-0.23633c-1.3523-0.019125-1.3523 2.0191 0 2h0.23633v2.166c0 1.0027 0.83129 1.834 1.834 1.834h4.332c1.0027 0 1.834-0.83129 1.834-1.834v-2.166h3.3359l-1.7832 1.7832c-0.98163 0.94251 0.47151 2.3957 1.4141 1.4141l3.4902-3.4902c0.387-0.3878 0.391-1.0229 0-1.4141l-3.4902-3.4902c-0.1883-0.1935-0.4468-0.30271-0.7168-0.30273-0.8974 0-1.3404 1.0909-0.69727 1.7168l1.7832 1.7832h-3.3359v-2.166c0-1.0027-0.83129-1.834-1.834-1.834h-4.332zm0 1.5h4.332c0.19764 0 0.33398 0.13634 0.33398 0.33398v6.332c0 0.19764-0.13634 0.33398-0.33398 0.33398h-4.332c-0.19764 0-0.33398-0.13634-0.33398-0.33398v-6.332c0-0.19764 0.13634-0.33398 0.33398-0.33398z" fill="#fff"/></svg>
diff --git a/apps/workflowengine/img/workflow-off.svg b/apps/workflowengine/img/workflow-off.svg
new file mode 100644
index 00000000000..d6018ca17f6
--- /dev/null
+++ b/apps/workflowengine/img/workflow-off.svg
@@ -0,0 +1,4 @@
+<svg width="16" height="16" version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+ <path d="M 3.0839844 3 C 2.0812854 3 1.25 3.8312754 1.25 4.8339844 L 1.25 7 L 1.0136719 7 C -0.33862677 6.980875 -0.33862677 9.0191 1.0136719 9 L 1.25 9 L 1.25 11.166016 C 1.25 12.168715 2.0812754 13 3.0839844 13 L 7.4160156 13 C 8.4187146 13 9.25 12.168725 9.25 11.166016 L 9.25 9 L 10.060547 9 L 7.75 6.6894531 L 7.75 11.166016 C 7.75 11.363655 7.6136554 11.5 7.4160156 11.5 L 3.0839844 11.5 C 2.8863446 11.5 2.75 11.363655 2.75 11.166016 L 2.75 4.8339844 C 2.75 4.6363446 2.8863446 4.5 3.0839844 4.5 L 5.5605469 4.5 L 4.0605469 3 L 3.0839844 3 z M 6.1816406 3 L 9.25 6.0683594 L 9.25 4.8339844 C 9.25 3.8312854 8.4187246 3 7.4160156 3 L 6.1816406 3 z M 11.5 3.5 C 10.602601 3.5 10.159605 4.5908975 10.802734 5.2167969 L 12.585938 7 L 10.181641 7 L 12.181641 9 L 12.585938 9 L 12.382812 9.203125 L 13.796875 10.617188 L 15.707031 8.7070312 C 16.094031 8.3192316 16.098031 7.6841684 15.707031 7.2929688 L 12.216797 3.8027344 C 12.028497 3.6092346 11.77 3.50002 11.5 3.5 z M 11.324219 10.261719 L 10.802734 10.783203 C 9.8211054 11.725712 11.274208 13.178865 12.216797 12.197266 L 12.738281 11.675781 L 11.324219 10.261719 z " />
+ <path d="M 0,1.0606601 1.06066,0 16.00033,14.93967 14.93967,16.00033 Z" />
+</svg>
diff --git a/apps/workflowengine/js/admin.js b/apps/workflowengine/js/admin.js
deleted file mode 100644
index ab122a8cd65..00000000000
--- a/apps/workflowengine/js/admin.js
+++ /dev/null
@@ -1,369 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
- Handlebars.registerHelper('selectItem', function(currentValue, itemValue) {
- if(currentValue === itemValue) {
- return 'selected="selected"';
- }
-
- return "";
- });
-
- Handlebars.registerHelper('getOperators', function(classname) {
- var check = OCA.WorkflowEngine.getCheckByClass(classname);
- if (!_.isUndefined(check)) {
- return check['operators'];
- }
- return [];
- });
-
- OCA.WorkflowEngine = _.extend(OCA.WorkflowEngine || {}, {
- availablePlugins: [],
- availableChecks: [],
-
- getCheckByClass: function(className) {
- var length = OCA.WorkflowEngine.availableChecks.length;
- for (var i = 0; i < length; i++) {
- if (OCA.WorkflowEngine.availableChecks[i]['class'] === className) {
- return OCA.WorkflowEngine.availableChecks[i];
- }
- }
- return undefined;
- }
- });
-
- /**
- * 888b d888 888 888
- * 8888b d8888 888 888
- * 88888b.d88888 888 888
- * 888Y88888P888 .d88b. .d88888 .d88b. 888 .d8888b
- * 888 Y888P 888 d88""88b d88" 888 d8P Y8b 888 88K
- * 888 Y8P 888 888 888 888 888 88888888 888 "Y8888b.
- * 888 " 888 Y88..88P Y88b 888 Y8b. 888 X88
- * 888 888 "Y88P" "Y88888 "Y8888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.Operation
- */
- OCA.WorkflowEngine.Operation =
- OC.Backbone.Model.extend({
- defaults: {
- 'class': 'OCA\\WorkflowEngine\\Operation',
- 'name': '',
- 'checks': [],
- 'operation': ''
- }
- });
-
- /**
- * .d8888b. 888 888 888 d8b
- * d88P Y88b 888 888 888 Y8P
- * 888 888 888 888 888
- * 888 .d88b. 888 888 .d88b. .d8888b 888888 888 .d88b. 88888b. .d8888b
- * 888 d88""88b 888 888 d8P Y8b d88P" 888 888 d88""88b 888 "88b 88K
- * 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 "Y8888b.
- * Y88b d88P Y88..88P 888 888 Y8b. Y88b. Y88b. 888 Y88..88P 888 888 X88
- * "Y8888P" "Y88P" 888 888 "Y8888 "Y8888P "Y888 888 "Y88P" 888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.OperationsCollection
- *
- * collection for all configurated operations
- */
- OCA.WorkflowEngine.OperationsCollection =
- OC.Backbone.Collection.extend({
- model: OCA.WorkflowEngine.Operation,
- url: OC.generateUrl('apps/workflowengine/operations')
- });
-
- /**
- * 888 888 d8b
- * 888 888 Y8P
- * 888 888
- * Y88b d88P 888 .d88b. 888 888 888 .d8888b
- * Y88b d88P 888 d8P Y8b 888 888 888 88K
- * Y88o88P 888 88888888 888 888 888 "Y8888b.
- * Y888P 888 Y8b. Y88b 888 d88P X88
- * Y8P 888 "Y8888 "Y8888888P" 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.TemplateView
- *
- * a generic template that handles the Handlebars template compile step
- * in a method called "template()"
- */
- OCA.WorkflowEngine.TemplateView =
- OC.Backbone.View.extend({
- _template: null,
- template: function(vars) {
- if (!this._template) {
- this._template = Handlebars.compile($(this.templateId).html());
- }
- return this._template(vars);
- }
- });
-
- /**
- * @class OCA.WorkflowEngine.OperationView
- *
- * this creates the view for a single operation
- */
- OCA.WorkflowEngine.OperationView =
- OCA.WorkflowEngine.TemplateView.extend({
- templateId: '#operation-template',
- events: {
- 'change .check-class': 'checkChanged',
- 'change .check-operator': 'checkChanged',
- 'change .check-value': 'checkChanged',
- 'change .operation-name': 'operationChanged',
- 'change .operation-operation': 'operationChanged',
- 'click .button-reset': 'reset',
- 'click .button-save': 'save',
- 'click .button-add': 'add',
- 'click .button-delete': 'delete',
- 'click .button-delete-check': 'deleteCheck'
- },
- originalModel: null,
- hasChanged: false,
- message: '',
- errorMessage: '',
- saving: false,
- initialize: function() {
- // this creates a new copy of the object to definitely have a new reference and being able to reset the model
- this.originalModel = JSON.parse(JSON.stringify(this.model));
- this.model.on('change', function(){
- console.log('model changed');
- this.hasChanged = true;
- this.render();
- }, this);
-
- if (this.model.get('id') === undefined) {
- this.hasChanged = true;
- }
- },
- delete: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.delete, this));
- return;
- }
-
- this.model.destroy();
- this.remove();
- },
- reset: function() {
- this.hasChanged = false;
- // silent is need to not trigger the change event which resets the hasChanged attribute
- this.model.set(this.originalModel, {silent: true});
- this.render();
- },
- save: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.save, this));
- return;
- }
-
- var success = function(model, response, options) {
- this.saving = false;
- this.originalModel = JSON.parse(JSON.stringify(this.model));
-
- this.message = t('workflowengine', 'Saved');
- this.errorMessage = '';
- this.render();
- };
- var error = function(model, response, options) {
- this.saving = false;
- this.hasChanged = true;
-
- this.message = t('workflowengine', 'Saving failed:');
- this.errorMessage = response.responseText;
- this.render();
- };
- this.hasChanged = false;
- this.saving = true;
- this.render();
- this.model.save(null, {success: success, error: error, context: this});
- },
- add: function() {
- var checks = _.clone(this.model.get('checks')),
- classname = OCA.WorkflowEngine.availableChecks[0]['class'],
- operators = OCA.WorkflowEngine.availableChecks[0]['operators'];
-
- checks.push({
- 'class': classname,
- 'operator': operators[0]['operator'],
- 'value': ''
- });
- this.model.set({'checks': checks});
- },
- checkChanged: function(event) {
- var value = event.target.value,
- id = $(event.target.parentElement).data('id'),
- // this creates a new copy of the object to definitely have a new reference
- checks = JSON.parse(JSON.stringify(this.model.get('checks'))),
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'check-'.length) === 'check-') {
- key = className.substr('check-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('checkChanged triggered but element doesn\'t have any "check-" class');
- return;
- }
-
- if (!_.has(checks[id], key)) {
- console.warn('key "' + key + '" is not available in check', check);
- return;
- }
-
- checks[id][key] = value;
- // if the class is changed most likely also the operators have changed
- // with this we set the operator to the first possible operator
- if (key === 'class') {
- var check = OCA.WorkflowEngine.getCheckByClass(value);
- if (!_.isUndefined(check)) {
- checks[id]['operator'] = check['operators'][0]['operator'];
- }
- }
- // model change will trigger render
- this.model.set({'checks': checks});
- },
- deleteCheck: function(event) {
- console.log(arguments);
- var id = $(event.target.parentElement).data('id'),
- checks = JSON.parse(JSON.stringify(this.model.get('checks')));
-
- // splice removes 1 element at index `id`
- checks.splice(id, 1);
- // model change will trigger render
- this.model.set({'checks': checks});
- },
- operationChanged: function(event) {
- var value = event.target.value,
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'operation-'.length) === 'operation-') {
- key = className.substr('operation-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('operationChanged triggered but element doesn\'t have any "operation-" class');
- return;
- }
-
- if (key !== 'name' && key !== 'operation') {
- console.warn('key "' + key + '" is no valid attribute');
- return;
- }
-
- // model change will trigger render
- this.model.set(key, value);
- },
- render: function() {
- this.$el.html(this.template({
- operation: this.model.toJSON(),
- classes: OCA.WorkflowEngine.availableChecks,
- hasChanged: this.hasChanged,
- message: this.message,
- errorMessage: this.errorMessage,
- saving: this.saving
- }));
-
- var checks = this.model.get('checks');
- _.each(this.$el.find('.check'), function(element){
- var $element = $(element),
- id = $element.data('id'),
- check = checks[id],
- valueElement = $element.find('.check-value').first();
-
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.render)) {
- plugin.render(valueElement, check);
- }
- });
- }, this);
-
- if (this.message !== '') {
- // hide success messages after some time
- _.delay(function(elements){
- $(elements).css('opacity', 0);
- }, 7000, this.$el.find('.msg.success'));
- this.message = '';
- }
-
- return this.$el;
- }
- });
-
- /**
- * @class OCA.WorkflowEngine.OperationsView
- *
- * this creates the view for configured operations
- */
- OCA.WorkflowEngine.OperationsView =
- OCA.WorkflowEngine.TemplateView.extend({
- templateId: '#operations-template',
- collection: null,
- $el: null,
- events: {
- 'click .button-add-operation': 'add'
- },
- initialize: function(classname) {
- if (!OCA.WorkflowEngine.availablePlugins.length) {
- OCA.WorkflowEngine.availablePlugins = OC.Plugins.getPlugins('OCA.WorkflowEngine.CheckPlugins');
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.getCheck)) {
- OCA.WorkflowEngine.availableChecks.push(plugin.getCheck(classname));
- }
- });
- }
-
- this.collection.fetch({data: {
- 'class': classname
- }});
- this.collection.once('sync', this.render, this);
- },
- add: function() {
- var operation = this.collection.create();
- this.renderOperation(operation);
- },
- renderOperation: function(subView){
- var operationsElement = this.$el.find('.operations');
- operationsElement.append(subView.$el);
- subView.render();
- },
- render: function() {
- this.$el.html(this.template());
- this.collection.each(this.renderOperation, this);
- }
- });
-})();
diff --git a/apps/workflowengine/js/filemimetypeplugin.js b/apps/workflowengine/js/filemimetypeplugin.js
deleted file mode 100644
index 17c092d209f..00000000000
--- a/apps/workflowengine/js/filemimetypeplugin.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.FileMimeTypePlugin = {
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\FileMimeType',
- 'name': t('workflowengine', 'File MIME type'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is')},
- {'operator': '!is', 'name': t('workflowengine', 'is not')},
- {'operator': 'matches', 'name': t('workflowengine', 'matches')},
- {'operator': '!matches', 'name': t('workflowengine', 'does not match')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileMimeType') {
- return;
- }
-
- var placeholder = 'text/plain';
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^text\\/(plain|html)$/i';
-
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
- } else {
- $(element).addClass('invalid-input');
- }
- }
-
- $(element).css('width', '250px')
- .attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- });
- },
-
- _validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileMimeTypePlugin);
diff --git a/apps/workflowengine/js/filesizeplugin.js b/apps/workflowengine/js/filesizeplugin.js
deleted file mode 100644
index 0efa9d00edf..00000000000
--- a/apps/workflowengine/js/filesizeplugin.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.FileSizePlugin = {
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\FileSize',
- 'name': t('workflowengine', 'File size (upload)'),
- 'operators': [
- {'operator': 'less', 'name': t('workflowengine', 'less')},
- {'operator': '!greater', 'name': t('workflowengine', 'less or equals')},
- {'operator': '!less', 'name': t('workflowengine', 'greater or equals')},
- {'operator': 'greater', 'name': t('workflowengine', 'greater')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSize') {
- return;
- }
-
- var placeholder = '12 MB'; // Do not translate!!!
- $(element).css('width', '250px')
- .attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- });
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSizePlugin);
diff --git a/apps/workflowengine/js/filesystemtagsplugin.js b/apps/workflowengine/js/filesystemtagsplugin.js
deleted file mode 100644
index dc6f608d85a..00000000000
--- a/apps/workflowengine/js/filesystemtagsplugin.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin = {
- getCheck: function() {
- this.collection = OC.SystemTags.collection;
-
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\FileSystemTags',
- 'name': t('workflowengine', 'File system tag'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is tagged with')},
- {'operator': '!is', 'name': t('workflowengine', 'is not tagged with')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSystemTags') {
- return;
- }
-
- $(element).css('width', '400px');
-
- $(element).select2({
- allowClear: false,
- multiple: false,
- placeholder: t('workflowengine', 'Select tag…'),
- query: _.debounce(function(query) {
- query.callback({
- results: OC.SystemTags.collection.filterByName(query.term)
- });
- }, 100, true),
- id: function(element) {
- return element.get('id');
- },
- initSelection: function(element, callback) {
- callback($(element).val());
- },
- formatResult: function (tag) {
- return OC.SystemTags.getDescriptiveTag(tag);
- },
- formatSelection: function (tagId) {
- var tag = OC.SystemTags.collection.get(tagId);
- return OC.SystemTags.getDescriptiveTag(tag);
- },
- escapeMarkup: function(m) {
- return m;
- }
- });
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin);
diff --git a/apps/workflowengine/js/requestremoteaddressplugin.js b/apps/workflowengine/js/requestremoteaddressplugin.js
deleted file mode 100644
index a66d6f51f0f..00000000000
--- a/apps/workflowengine/js/requestremoteaddressplugin.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin = {
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress',
- 'name': t('workflowengine', 'Request remote address'),
- 'operators': [
- {'operator': 'matchesIPv4', 'name': t('workflowengine', 'matches IPv4')},
- {'operator': '!matchesIPv4', 'name': t('workflowengine', 'does not match IPv4')},
- {'operator': 'matchesIPv6', 'name': t('workflowengine', 'matches IPv6')},
- {'operator': '!matchesIPv6', 'name': t('workflowengine', 'does not match IPv6')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress') {
- return;
- }
-
- var placeholder = '127.0.0.1/32'; // Do not translate!!!
- if (check['operator'] === 'matchesIPv6' || check['operator'] === '!matchesIPv6') {
- placeholder = '::1/128'; // Do not translate!!!
- if (this._validateIPv6(check['value'])) {
- $(element).removeClass('invalid-input');
- } else {
- $(element).addClass('invalid-input');
- }
- } else {
- if (this._validateIPv4(check['value'])) {
- $(element).removeClass('invalid-input');
- } else {
- $(element).addClass('invalid-input');
- }
- }
-
- $(element).css('width', '300px')
- .attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- });
- },
-
- _validateIPv4: function(string) {
- var regexRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,
- result = regexRegex.exec(string);
- return result !== null;
- },
-
- _validateIPv6: function(string) {
- var regexRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,
- result = regexRegex.exec(string);
- return result !== null;
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin);
diff --git a/apps/workflowengine/js/requesttimeplugin.js b/apps/workflowengine/js/requesttimeplugin.js
deleted file mode 100644
index 111b2bb7437..00000000000
--- a/apps/workflowengine/js/requesttimeplugin.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.RequestTimePlugin = {
- timezones: [
- "Europe/Berlin",
- "Europe/London"
- ],
- _$element: null,
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestTime',
- 'name': t('workflowengine', 'Request time'),
- 'operators': [
- {'operator': 'in', 'name': t('workflowengine', 'between')},
- {'operator': '!in', 'name': t('workflowengine', 'not between')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestTime') {
- return;
- }
-
- var startTime = '09:00',
- endTime = '18:00',
- timezone = jstz.determine().name(),
- $element = $(element);
-
- if (_.isString(check['value']) && check['value'] !== '') {
- var value = JSON.parse(check['value']),
- splittedStart = value[0].split(' ', 2),
- splittedEnd = value[1].split(' ', 2);
-
- startTime = splittedStart[0];
- endTime = splittedEnd[0];
- timezone = splittedStart[1];
- }
-
- var valueJSON = JSON.stringify([startTime + ' ' + timezone, endTime + ' ' + timezone]);
- if (check['value'] !== valueJSON) {
- check['value'] = valueJSON;
- $element.val(valueJSON);
- }
-
- $element.css('display', 'none');
-
- $('<input>')
- .attr('type', 'text')
- .attr('placeholder', t('workflowengine', 'Start'))
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- })
- .addClass('start')
- .val(startTime)
- .insertBefore($element);
- $('<input>')
- .attr('type', 'text')
- .attr('placeholder', t('workflowengine', 'End'))
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- })
- .addClass('end')
- .val(endTime)
- .insertBefore($element);
-
- var timezoneInput = $('<input>')
- .attr('type', 'hidden')
- .css('width', '250px')
- .insertBefore($element)
- .val(timezone);
-
- timezoneInput.select2({
- allowClear: false,
- multiple: false,
- placeholder: t('workflowengine', 'Select timezone…'),
- ajax: {
- url: OC.generateUrl('apps/workflowengine/timezones'),
- dataType: 'json',
- quietMillis: 100,
- data: function (term) {
- if (term === '') {
- // Default search in the same continent...
- term = jstz.determine().name().split('/');
- term = term[0];
- }
- return {
- search: term
- };
- },
- results: function (response) {
- var results = [];
- $.each(response, function(timezone) {
- results.push({ id: timezone });
- });
-
- return {
- results: results,
- more: false
- };
- }
- },
- initSelection: function (element, callback) {
- callback(element.val());
- },
- formatResult: function (element) {
- return '<span>' + element.id + '</span>';
- },
- formatSelection: function (element) {
- if (!_.isUndefined(element.id)) {
- element = element.id;
- }
- return '<span>' + element + '</span>';
- }
- });
-
- // Has to be added after select2 for `event.target.classList`
- timezoneInput.addClass('timezone');
-
- $element.parent()
- .on('change', '.start', _.bind(this.update, this))
- .on('change', '.end', _.bind(this.update, this))
- .on('change', '.timezone', _.bind(this.update, this));
-
- this._$element = $element;
- },
- update: function(event) {
- var value = event.target.value,
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- key = event.target.classList[i];
- }
-
- if (key === null) {
- console.warn('update triggered but element doesn\'t have any class');
- return;
- }
-
- var data = JSON.parse(this._$element.val()),
- startTime = moment(data[0].split(' ', 2)[0], 'H:m Z'),
- endTime = moment(data[1].split(' ', 2)[0], 'H:m Z'),
- timezone = data[0].split(' ', 2)[1];
-
- if (key === 'start' || key === 'end') {
- var parsedDate = moment(value, ['H:m', 'h:m a'], true).format('HH:mm');
-
- if (parsedDate === 'Invalid date') {
- return;
- }
-
- var indexValue = 0;
- if (key === 'end') {
- indexValue = 1;
- }
- data[indexValue] = parsedDate + ' ' + timezone;
- }
-
- if (key === 'timezone') {
- data[0] = startTime.format('HH:mm') + ' ' + value;
- data[1] = endTime.format('HH:mm') + ' ' + value;
- }
-
- this._$element.val(JSON.stringify(data));
- this._$element.trigger('change');
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestTimePlugin);
diff --git a/apps/workflowengine/js/requesturlplugin.js b/apps/workflowengine/js/requesturlplugin.js
deleted file mode 100644
index 7c81deaaf33..00000000000
--- a/apps/workflowengine/js/requesturlplugin.js
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.RequestURLPlugin = {
- predefinedValues: ['webdav'],
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestURL',
- 'name': t('workflowengine', 'Request URL'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is')},
- {'operator': '!is', 'name': t('workflowengine', 'is not')},
- {'operator': 'matches', 'name': t('workflowengine', 'matches')},
- {'operator': '!matches', 'name': t('workflowengine', 'does not match')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestURL') {
- return;
- }
-
- var placeholder = 'https://localhost/index.php';
-
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^https\\:\\/\\/localhost\\/index\\.php$/i';
- }
-
- $(element).css('width', '250px')
- .attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- });
-
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
- } else {
- $(element).addClass('invalid-input');
- }
- } else {
- var self = this,
- data = [
- {
- text: t('workflowengine', 'Predefined URLs'),
- children: [
- {id: 'webdav', text: t('workflowengine', 'Files WebDAV')}
- ]
- }
- ];
- if (this.predefinedValues.indexOf(check['value']) === -1) {
- data.unshift({
- id: check['value'],
- text: check['value']
- })
- }
-
-
- $(element).select2({
- data: data,
- createSearchChoice: function(term) {
- if (self.predefinedValues.indexOf(check['value']) === -1) {
- return {
- id: term,
- text: term
- };
- }
- },
- id: function(element) {
- return element.id;
- },
- formatResult: function (tag) {
- return tag.text;
- },
- formatSelection: function (tag) {
- return tag.text;
- },
- escapeMarkup: function(m) {
- return m;
- }
- })
- }
- },
-
- _validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestURLPlugin);
diff --git a/apps/workflowengine/js/requestuseragentplugin.js b/apps/workflowengine/js/requestuseragentplugin.js
deleted file mode 100644
index 42e3f6b13d2..00000000000
--- a/apps/workflowengine/js/requestuseragentplugin.js
+++ /dev/null
@@ -1,118 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin = {
- predefinedValues: ['android', 'ios', 'desktop'],
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestUserAgent',
- 'name': t('workflowengine', 'Request user agent'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is')},
- {'operator': '!is', 'name': t('workflowengine', 'is not')},
- {'operator': 'matches', 'name': t('workflowengine', 'matches')},
- {'operator': '!matches', 'name': t('workflowengine', 'does not match')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestUserAgent') {
- return;
- }
-
- var placeholder = 'Mozilla/5.0 User Agent';
-
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^Mozilla\\/5\\.0 (.?)$/i';
- }
-
- $(element).css('width', '250px')
- .attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
- .addClass('has-tooltip')
- .tooltip({
- placement: 'bottom'
- });
-
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
- } else {
- $(element).addClass('invalid-input');
- }
- } else {
- var self = this,
- data = [
- {
- text: t('workflowengine', 'Sync clients'),
- children: [
- {id: 'android', text: t('workflowengine', 'Android client')},
- {id: 'ios', text: t('workflowengine', 'iOS client')},
- {id: 'desktop', text: t('workflowengine', 'Desktop client')}
- ]
- }
- ];
- if (this.predefinedValues.indexOf(check['value']) === -1) {
- data.unshift({
- id: check['value'],
- text: check['value']
- })
- }
-
- $(element).select2({
- data: data,
- createSearchChoice: function(term) {
- if (self.predefinedValues.indexOf(check['value']) === -1) {
- return {
- id: term,
- text: term
- };
- }
- },
- id: function(element) {
- return element.id;
- },
- formatResult: function (tag) {
- return tag.text;
- },
- formatSelection: function (tag) {
- return tag.text;
- },
- escapeMarkup: function(m) {
- return m;
- }
- })
- }
- },
-
- _validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin);
diff --git a/apps/workflowengine/js/usergroupmembershipplugin.js b/apps/workflowengine/js/usergroupmembershipplugin.js
deleted file mode 100644
index 1c09e7d5ccd..00000000000
--- a/apps/workflowengine/js/usergroupmembershipplugin.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-(function() {
-
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
-
- OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin = {
- getCheck: function() {
- return {
- 'class': 'OCA\\WorkflowEngine\\Check\\UserGroupMembership',
- 'name': t('workflowengine', 'User group membership'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is member of')},
- {'operator': '!is', 'name': t('workflowengine', 'is not member of')}
- ]
- };
- },
- render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\UserGroupMembership') {
- return;
- }
-
- $(element).css('width', '400px');
-
- $(element).select2({
- ajax: {
- url: OC.generateUrl('settings/users/groups'),
- dataType: 'json',
- quietMillis: 100,
- data: function (term) {
- return {
- pattern: term, //search term
- filterGroups: true,
- sortGroups: 2 // by groupname
- };
- },
- results: function (response) {
- // TODO improve error case
- if (response.data === undefined) {
- console.error('Failure happened', response);
- return;
- }
-
- var results = [];
-
- // add admin groups
- $.each(response.data.adminGroups, function(id, group) {
- results.push({ id: group.id });
- });
- // add groups
- $.each(response.data.groups, function(id, group) {
- results.push({ id: group.id });
- });
-
- // TODO once limit and offset is implemented for groups we should paginate the search results
- return {
- results: results,
- more: false
- };
- }
- },
- initSelection: function (element, callback) {
- callback({id: element.val()});
- },
- formatResult: function (element) {
- return '<span>' + escapeHTML(element.id) + '</span>';
- },
- formatSelection: function (element) {
- return '<span title="'+escapeHTML(element.id)+'">'+escapeHTML(element.id)+'</span>';
- }
- });
- }
- };
-})();
-
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin);
diff --git a/apps/workflowengine/l10n/ar.js b/apps/workflowengine/l10n/ar.js
new file mode 100644
index 00000000000..1ba492d4ba0
--- /dev/null
+++ b/apps/workflowengine/l10n/ar.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "المُعامل المُعطى غير مقبول",
+ "The given regular expression is invalid" : "التعبير النمطي Regex المدخل غير صالح",
+ "The given file size is invalid" : "حجم الملف المُعطى غير مقبول",
+ "The given tag id is invalid" : "الوسم المعطى غير مقبول",
+ "The given IP range is invalid" : "نطاق العنوان IP المُعطى غير مقبول.",
+ "The given IP range is not valid for IPv4" : "نطاق العنوان IP المُعطى غير مقبول بالنسبة لـ IPv4.",
+ "The given IP range is not valid for IPv6" : "نطاق العنوان IP المُعطى غير مقبول بالنسبة لـ IPv6.",
+ "The given time span is invalid" : "الفترة الزمنية المُعطاة غير مقبولة",
+ "The given start time is invalid" : "وقت البداية المُعطى غير مقبول.",
+ "The given end time is invalid" : "وقت النهاية المُعطى غير مقبول.",
+ "The given group does not exist" : "المجموعة المُعطاة غير موجودة.",
+ "File" : "ملف",
+ "File created" : "عند إنشاء ملف",
+ "File updated" : "عند تحديث ملف",
+ "File renamed" : "عند إعادة تسمية ملف",
+ "File deleted" : "عند حذف ملف",
+ "File accessed" : "عند الوصول إلى الملف",
+ "File copied" : "عند نسخ ملف",
+ "Tag assigned" : "وسم تم تعيينه",
+ "Someone" : "شخصٌ ما",
+ "%s created %s" : "%s مُنشأ %s",
+ "%s modified %s" : "%s مُعدّل %s",
+ "%s deleted %s" : "%s مُلغىً %s",
+ "%s accessed %s" : "%s تم الوصول إليه %s",
+ "%s renamed %s" : "%s مُعاد تسميته %s",
+ "%s copied %s" : "%s منسوخ %s",
+ "%s assigned %s to %s" : "%s مُسند %s إلى %s",
+ "Operation #%s does not exist" : "العملية #%s غير موجودة",
+ "Entity %s does not exist" : "الكيان %s غير موجود",
+ "Entity %s is invalid" : "الكيان %s غير مقبول",
+ "No events are chosen." : "لم يتم اختيار أي أحدث.",
+ "Entity %s has no event %s" : "الكيان %s ليس له أحداث %s",
+ "Operation %s does not exist" : "العملية %s غير موجودة",
+ "Operation %s is invalid" : "العملية%sغير موجودة",
+ "At least one check needs to be provided" : "يجب تقديم اختيار واحد على الأقل",
+ "The provided operation data is too long" : "تشغيل البيانات المطلوب كبير جدا",
+ "Invalid check provided" : "الاختيار المقدم غير صالح",
+ "Check %s does not exist" : "تحقق من%s غير موجود",
+ "Check %s is invalid" : "تحقق من%sغير صالح",
+ "Check %s is not allowed with this entity" : "التحقق من %s غير مسموح به مع هذا الكيان",
+ "The provided check value is too long" : "قيمة التحقق المقدمة طويلة جدًا",
+ "Check #%s does not exist" : "تحقق من#%s غير موجود",
+ "Check %s is invalid or does not exist" : "التحقق من %s فهو غير صالح أو غير موجود",
+ "Flow" : "أتمتة سير العمل",
+ "Nextcloud workflow engine" : "محرك أتمتة سير العمل لنكست كلاود",
+ "Select a filter" : "اختر عامل تصفية",
+ "Select a comparator" : "اختر أساس المقارنة",
+ "Remove filter" : "إزالة عامل التصفية",
+ "Folder" : "مجلد",
+ "Images" : "صور",
+ "Office documents" : "مستندات المكتب",
+ "PDF documents" : "مستندات PDF",
+ "Custom MIME type" : "نوع MIME مخصص",
+ "Custom mimetype" : "أنواع ملفات مخصصة",
+ "Select a file type" : "اختر نوع الملف",
+ "e.g. httpd/unix-directory" : "على سبيل المثال httpd/unix-directory",
+ "Please enter a valid time span" : "الرجاء إدخال نطاق زمني صالح",
+ "Files WebDAV" : "ملفات WebDAV",
+ "Custom URL" : "عنوان URL مخصص",
+ "Select a request URL" : "حدد عنوان URL الخاص بالطلب",
+ "Android client" : "عميل أندرويد",
+ "iOS client" : "عميل نظام التشغيل iOS",
+ "Desktop client" : "تطبيق سطح المكتب",
+ "Thunderbird & Outlook addons" : "إضافات ثندربيرد و أوت لوك",
+ "Custom user agent" : "وكيل مستخدم مخصص",
+ "Select a user agent" : "اختر وكيل مستخدم",
+ "Select groups" : "إختَر مجموعةً",
+ "Groups" : "المجموعات",
+ "Type to search for group …" : "أُكتُب اسم المجموعة التي تبحث عنها ...",
+ "Select a trigger" : "حدد مشغل",
+ "At least one event must be selected" : "يجب اختيار حدث واحد على الأقل",
+ "Add new flow" : "إضافة أتمتة سير عمل جديد",
+ "The configuration is invalid" : "التكوين غير صالح",
+ "Active" : "فعال",
+ "Save" : "حفظ",
+ "When" : "متى",
+ "and" : "و",
+ "Add a new filter" : "إضافة عامل تصفية جديد",
+ "Cancel" : "إلغاء",
+ "Delete" : "حذف ",
+ "Available flows" : "أتمتة سير العمل المتاحة",
+ "For details on how to write your own flow, check out the development documentation." : "للحصول على تفاصيل حول كيفية تطوير أتمتة سير العمل الخاص بك، تحقق من وثائق التطوير.",
+ "No flows installed" : "لم يتم تثبيت أي أتمتة لسير العمل",
+ "Ask your administrator to install new flows." : "أطلب من مسؤول النظام تثبيت أتمتة سير عمل جديدة .",
+ "More flows" : "المزيد من أتمتة سير العمل",
+ "Browse the App Store" : "إستعرض متجر التطبيقات",
+ "Show less" : "عرض أقل",
+ "Show more" : "عرض المزيد",
+ "Configured flows" : "أتمتة سير العمل المضافة",
+ "Your flows" : "أتمتة سير العمل الخاص بك",
+ "No flows configured" : "لم تتم تهيئة أي أتمتة لسير العمل",
+ "matches" : "متوافق",
+ "does not match" : "غير متوافق",
+ "is" : "يكون",
+ "is not" : "ليس",
+ "File name" : "اسم ملف",
+ "File MIME type" : "ملف من النوع MIME",
+ "File size (upload)" : "حجم الملف (الرفع)",
+ "less" : "أقل",
+ "less or equals" : "أقل من أو يساوي",
+ "greater or equals" : "أكبر أو يساوي",
+ "greater" : "أكبر من",
+ "Request remote address" : "العنوان البعيد الخاص بالطلب",
+ "matches IPv4" : "متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv4\"",
+ "does not match IPv4" : "غير متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv4\"",
+ "matches IPv6" : "متوافق مع بروتوكول الانترنت الاصدار السادس \"IPv6\"",
+ "does not match IPv6" : "غير متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv6\"",
+ "File system tag" : "وسم ملف النظام",
+ "is tagged with" : "موسوم بـ",
+ "is not tagged with" : "غير موسوم بـ",
+ "Request URL" : "عنوان محدد موقع الموارد المُوحّد \"URL\" الخاص بالطلب",
+ "Request time" : "وقت الطلب",
+ "between" : "بين",
+ "not between" : "ليس بين",
+ "Request user agent" : "وكيل المستخدم الخاص بالطلب",
+ "Group membership" : "عضوية المجموعة",
+ "is member of" : "عضو فى",
+ "is not member of" : "ليس عضو فى"
+},
+"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");
diff --git a/apps/workflowengine/l10n/ar.json b/apps/workflowengine/l10n/ar.json
new file mode 100644
index 00000000000..12ea595f30b
--- /dev/null
+++ b/apps/workflowengine/l10n/ar.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "المُعامل المُعطى غير مقبول",
+ "The given regular expression is invalid" : "التعبير النمطي Regex المدخل غير صالح",
+ "The given file size is invalid" : "حجم الملف المُعطى غير مقبول",
+ "The given tag id is invalid" : "الوسم المعطى غير مقبول",
+ "The given IP range is invalid" : "نطاق العنوان IP المُعطى غير مقبول.",
+ "The given IP range is not valid for IPv4" : "نطاق العنوان IP المُعطى غير مقبول بالنسبة لـ IPv4.",
+ "The given IP range is not valid for IPv6" : "نطاق العنوان IP المُعطى غير مقبول بالنسبة لـ IPv6.",
+ "The given time span is invalid" : "الفترة الزمنية المُعطاة غير مقبولة",
+ "The given start time is invalid" : "وقت البداية المُعطى غير مقبول.",
+ "The given end time is invalid" : "وقت النهاية المُعطى غير مقبول.",
+ "The given group does not exist" : "المجموعة المُعطاة غير موجودة.",
+ "File" : "ملف",
+ "File created" : "عند إنشاء ملف",
+ "File updated" : "عند تحديث ملف",
+ "File renamed" : "عند إعادة تسمية ملف",
+ "File deleted" : "عند حذف ملف",
+ "File accessed" : "عند الوصول إلى الملف",
+ "File copied" : "عند نسخ ملف",
+ "Tag assigned" : "وسم تم تعيينه",
+ "Someone" : "شخصٌ ما",
+ "%s created %s" : "%s مُنشأ %s",
+ "%s modified %s" : "%s مُعدّل %s",
+ "%s deleted %s" : "%s مُلغىً %s",
+ "%s accessed %s" : "%s تم الوصول إليه %s",
+ "%s renamed %s" : "%s مُعاد تسميته %s",
+ "%s copied %s" : "%s منسوخ %s",
+ "%s assigned %s to %s" : "%s مُسند %s إلى %s",
+ "Operation #%s does not exist" : "العملية #%s غير موجودة",
+ "Entity %s does not exist" : "الكيان %s غير موجود",
+ "Entity %s is invalid" : "الكيان %s غير مقبول",
+ "No events are chosen." : "لم يتم اختيار أي أحدث.",
+ "Entity %s has no event %s" : "الكيان %s ليس له أحداث %s",
+ "Operation %s does not exist" : "العملية %s غير موجودة",
+ "Operation %s is invalid" : "العملية%sغير موجودة",
+ "At least one check needs to be provided" : "يجب تقديم اختيار واحد على الأقل",
+ "The provided operation data is too long" : "تشغيل البيانات المطلوب كبير جدا",
+ "Invalid check provided" : "الاختيار المقدم غير صالح",
+ "Check %s does not exist" : "تحقق من%s غير موجود",
+ "Check %s is invalid" : "تحقق من%sغير صالح",
+ "Check %s is not allowed with this entity" : "التحقق من %s غير مسموح به مع هذا الكيان",
+ "The provided check value is too long" : "قيمة التحقق المقدمة طويلة جدًا",
+ "Check #%s does not exist" : "تحقق من#%s غير موجود",
+ "Check %s is invalid or does not exist" : "التحقق من %s فهو غير صالح أو غير موجود",
+ "Flow" : "أتمتة سير العمل",
+ "Nextcloud workflow engine" : "محرك أتمتة سير العمل لنكست كلاود",
+ "Select a filter" : "اختر عامل تصفية",
+ "Select a comparator" : "اختر أساس المقارنة",
+ "Remove filter" : "إزالة عامل التصفية",
+ "Folder" : "مجلد",
+ "Images" : "صور",
+ "Office documents" : "مستندات المكتب",
+ "PDF documents" : "مستندات PDF",
+ "Custom MIME type" : "نوع MIME مخصص",
+ "Custom mimetype" : "أنواع ملفات مخصصة",
+ "Select a file type" : "اختر نوع الملف",
+ "e.g. httpd/unix-directory" : "على سبيل المثال httpd/unix-directory",
+ "Please enter a valid time span" : "الرجاء إدخال نطاق زمني صالح",
+ "Files WebDAV" : "ملفات WebDAV",
+ "Custom URL" : "عنوان URL مخصص",
+ "Select a request URL" : "حدد عنوان URL الخاص بالطلب",
+ "Android client" : "عميل أندرويد",
+ "iOS client" : "عميل نظام التشغيل iOS",
+ "Desktop client" : "تطبيق سطح المكتب",
+ "Thunderbird & Outlook addons" : "إضافات ثندربيرد و أوت لوك",
+ "Custom user agent" : "وكيل مستخدم مخصص",
+ "Select a user agent" : "اختر وكيل مستخدم",
+ "Select groups" : "إختَر مجموعةً",
+ "Groups" : "المجموعات",
+ "Type to search for group …" : "أُكتُب اسم المجموعة التي تبحث عنها ...",
+ "Select a trigger" : "حدد مشغل",
+ "At least one event must be selected" : "يجب اختيار حدث واحد على الأقل",
+ "Add new flow" : "إضافة أتمتة سير عمل جديد",
+ "The configuration is invalid" : "التكوين غير صالح",
+ "Active" : "فعال",
+ "Save" : "حفظ",
+ "When" : "متى",
+ "and" : "و",
+ "Add a new filter" : "إضافة عامل تصفية جديد",
+ "Cancel" : "إلغاء",
+ "Delete" : "حذف ",
+ "Available flows" : "أتمتة سير العمل المتاحة",
+ "For details on how to write your own flow, check out the development documentation." : "للحصول على تفاصيل حول كيفية تطوير أتمتة سير العمل الخاص بك، تحقق من وثائق التطوير.",
+ "No flows installed" : "لم يتم تثبيت أي أتمتة لسير العمل",
+ "Ask your administrator to install new flows." : "أطلب من مسؤول النظام تثبيت أتمتة سير عمل جديدة .",
+ "More flows" : "المزيد من أتمتة سير العمل",
+ "Browse the App Store" : "إستعرض متجر التطبيقات",
+ "Show less" : "عرض أقل",
+ "Show more" : "عرض المزيد",
+ "Configured flows" : "أتمتة سير العمل المضافة",
+ "Your flows" : "أتمتة سير العمل الخاص بك",
+ "No flows configured" : "لم تتم تهيئة أي أتمتة لسير العمل",
+ "matches" : "متوافق",
+ "does not match" : "غير متوافق",
+ "is" : "يكون",
+ "is not" : "ليس",
+ "File name" : "اسم ملف",
+ "File MIME type" : "ملف من النوع MIME",
+ "File size (upload)" : "حجم الملف (الرفع)",
+ "less" : "أقل",
+ "less or equals" : "أقل من أو يساوي",
+ "greater or equals" : "أكبر أو يساوي",
+ "greater" : "أكبر من",
+ "Request remote address" : "العنوان البعيد الخاص بالطلب",
+ "matches IPv4" : "متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv4\"",
+ "does not match IPv4" : "غير متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv4\"",
+ "matches IPv6" : "متوافق مع بروتوكول الانترنت الاصدار السادس \"IPv6\"",
+ "does not match IPv6" : "غير متوافق مع بروتوكول الانترنت الاصدار الرابع \"IPv6\"",
+ "File system tag" : "وسم ملف النظام",
+ "is tagged with" : "موسوم بـ",
+ "is not tagged with" : "غير موسوم بـ",
+ "Request URL" : "عنوان محدد موقع الموارد المُوحّد \"URL\" الخاص بالطلب",
+ "Request time" : "وقت الطلب",
+ "between" : "بين",
+ "not between" : "ليس بين",
+ "Request user agent" : "وكيل المستخدم الخاص بالطلب",
+ "Group membership" : "عضوية المجموعة",
+ "is member of" : "عضو فى",
+ "is not member of" : "ليس عضو فى"
+},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ast.js b/apps/workflowengine/l10n/ast.js
index 3ce0f9a8b0b..cc24b48c02c 100644
--- a/apps/workflowengine/l10n/ast.js
+++ b/apps/workflowengine/l10n/ast.js
@@ -1,56 +1,76 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Guardóse",
- "Saving failed:" : "Falló'l guardáu:",
- "File MIME type" : "Triba MIME de ficheru",
- "is" : "ye",
- "is not" : "nun ye",
- "matches" : "concasa con",
- "does not match" : "nun concasa con",
- "Example: {placeholder}" : "Exemplu: {placeholder}",
- "File size (upload)" : "Tamañu de ficheru (xuba)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de ficheros",
- "is tagged with" : "etiquetóse con",
- "is not tagged with" : "nun s'etiquetó con",
- "Select tag…" : "Esbillar etiqueta...",
- "Request remote address" : "Solicitar direición remot",
- "between" : "ente",
- "not between" : "distintu de",
- "Start" : "Aniciu",
- "End" : "Fin",
- "Select timezone…" : "Esbillar fusu horariu...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefiníes",
- "Files WebDAV" : "Ficheros WebDAV",
- "Request user agent" : "Solicitar axente d'usuariu",
- "Sync clients" : "Sincronizar veceros",
- "Android client" : "Veceru d'Android",
- "iOS client" : "Veceru d'iOS",
- "Desktop client" : "Veceru d'escritoriu",
- "is member of" : "ye miembru de",
- "is not member of" : "nun ye miembru de",
- "The given operator is invalid" : "L'operador dau nun ye válidu",
- "The given regular expression is invalid" : "La espresión regular dada nun ye válida",
- "The given file size is invalid" : "El tamañu del ficheru dau nun ye válidu",
- "The given tag id is invalid" : "La ID de la etiqueta dada nun ye válida",
- "The given IP range is invalid" : "El rangu IP dau nun ye válidu",
- "The given group does not exist" : "Nun esiste'l grupu dau",
+ "The given operator is invalid" : "L'operador apurríu ye inválidu",
+ "The given regular expression is invalid" : "La espresión regular apurrida ye inválida",
+ "The given file size is invalid" : "El tamañu del ficheru apurríu ye inválidu",
+ "The given tag id is invalid" : "La ID d'etiqueta apurrida ye inválida",
+ "The given IP range is invalid" : "L'intervalu d'IPs ye inválida",
+ "The given IP range is not valid for IPv4" : "L'intervalu d'IPs nun ye válidu pa IPv4",
+ "The given IP range is not valid for IPv6" : "L'intervalu d'IPs nun ye válidu pa IPv6",
+ "The given time span is invalid" : "L'intervalu de tiempu apurríu nun ye válidu",
+ "The given start time is invalid" : "La hora de comienzu ye inválida",
+ "The given end time is invalid" : "La hora de fin ye inválida",
+ "The given group does not exist" : "El grupu apurríu nun esiste",
+ "File" : "Ficheru",
+ "File created" : "Creóse'l ficheru",
+ "File updated" : "Anovóse'l ficheru",
+ "File renamed" : "Renomóse'l ficheru",
+ "File deleted" : "Desanicióse'l ficheru",
+ "File accessed" : "Accedióse al ficheru",
+ "File copied" : "Copióse'l ficheru",
+ "Tag assigned" : "Asignóse la etiqueta",
+ "Someone" : "Daquień",
+ "%s created %s" : "%s creó «%s»",
+ "%s modified %s" : "%s modificó «%s»",
+ "%s deleted %s" : "%s desanició «%s»",
+ "%s accessed %s" : "%s accedió a «%s»",
+ "%s renamed %s" : "%s renomó «%s»",
+ "%s copied %s" : "%s copió «%s»",
+ "%s assigned %s to %s" : "%s asignó «%s» a %s",
"Operation #%s does not exist" : "La operación #%s nun esiste",
- "Operation %s does not exist" : "La operación %s nun esiste",
- "Operation %s is invalid" : "La operación %s nun ye válida",
- "Workflow" : "Fluxu de trabayu",
- "Open documentation" : "Abrir documentación",
- "Short rule description" : "Descipción curtia de la regla",
- "Add rule" : "Amestar regla",
+ "Entity %s does not exist" : "La entidá «%s» nun esiste",
+ "Entity %s is invalid" : "La entidá «%s» ye inválida",
+ "No events are chosen." : "Nun s'escoyó nengún eventu.",
+ "Entity %s has no event %s" : "La entidá «%s» nun tien nengún eventu «%s»",
+ "Operation %s does not exist" : "La operación «%s» nun esiste",
+ "Operation %s is invalid" : "La operación «%s» ye inválida",
+ "Invalid check provided" : "Fornióse una comprobación inválida",
+ "Check %s does not exist" : "La comprobación «%s» nun esiste",
+ "Check %s is invalid" : "La comprobación «%s» ye inválida",
+ "Check %s is not allowed with this entity" : "La comprobación «%s» nun ta permitida con esta entidá",
+ "Check #%s does not exist" : "La comprobación #%s nun esiste",
+ "Check %s is invalid or does not exist" : "La comprobación «%s» ye inválida o nun esiste",
+ "Flow" : "Fluxu",
+ "Remove filter" : "Quitar la peñera",
+ "Folder" : "Carpeta",
+ "Images" : "Imáxenes",
+ "Office documents" : "Documentos ofimáticos",
+ "PDF documents" : "Documentos PDF",
+ "Android client" : "Veceru p'Android",
+ "iOS client" : "Veceru pa iOS",
+ "Desktop client" : "Veceru pa ordenadores",
+ "Select groups" : "Seleicionar grupos",
+ "Groups" : "Grupos",
+ "The configuration is invalid" : "La configuración ye inválida",
+ "Active" : "Activa",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardóse con ésitu",
- "File mime type" : "Triba MIME de ficheru"
+ "and" : "y",
+ "Cancel" : "Encaboxar",
+ "Delete" : "Desaniciar",
+ "Available flows" : "Fluxos disponibles",
+ "No flows installed" : "Nun s'instaló nengún fluxu",
+ "Ask your administrator to install new flows." : "Pidi a la alministración qu'instale fluxos nuevos.",
+ "More flows" : "Más fluxos",
+ "Show less" : "Amosar menos",
+ "Show more" : "Amosar más",
+ "Configured flows" : "Fluxos configuraos",
+ "No flows configured" : "Nun se configuró nengún fluxu",
+ "matches" : "concasa",
+ "does not match" : "nun concasa",
+ "is" : "ye",
+ "is not" : "nun ye",
+ "File name" : "Nome del ficheru",
+ "between" : "ente"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/ast.json b/apps/workflowengine/l10n/ast.json
index fa0fb0921b4..a4c32aa8f34 100644
--- a/apps/workflowengine/l10n/ast.json
+++ b/apps/workflowengine/l10n/ast.json
@@ -1,54 +1,74 @@
{ "translations": {
- "Saved" : "Guardóse",
- "Saving failed:" : "Falló'l guardáu:",
- "File MIME type" : "Triba MIME de ficheru",
- "is" : "ye",
- "is not" : "nun ye",
- "matches" : "concasa con",
- "does not match" : "nun concasa con",
- "Example: {placeholder}" : "Exemplu: {placeholder}",
- "File size (upload)" : "Tamañu de ficheru (xuba)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de ficheros",
- "is tagged with" : "etiquetóse con",
- "is not tagged with" : "nun s'etiquetó con",
- "Select tag…" : "Esbillar etiqueta...",
- "Request remote address" : "Solicitar direición remot",
- "between" : "ente",
- "not between" : "distintu de",
- "Start" : "Aniciu",
- "End" : "Fin",
- "Select timezone…" : "Esbillar fusu horariu...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefiníes",
- "Files WebDAV" : "Ficheros WebDAV",
- "Request user agent" : "Solicitar axente d'usuariu",
- "Sync clients" : "Sincronizar veceros",
- "Android client" : "Veceru d'Android",
- "iOS client" : "Veceru d'iOS",
- "Desktop client" : "Veceru d'escritoriu",
- "is member of" : "ye miembru de",
- "is not member of" : "nun ye miembru de",
- "The given operator is invalid" : "L'operador dau nun ye válidu",
- "The given regular expression is invalid" : "La espresión regular dada nun ye válida",
- "The given file size is invalid" : "El tamañu del ficheru dau nun ye válidu",
- "The given tag id is invalid" : "La ID de la etiqueta dada nun ye válida",
- "The given IP range is invalid" : "El rangu IP dau nun ye válidu",
- "The given group does not exist" : "Nun esiste'l grupu dau",
+ "The given operator is invalid" : "L'operador apurríu ye inválidu",
+ "The given regular expression is invalid" : "La espresión regular apurrida ye inválida",
+ "The given file size is invalid" : "El tamañu del ficheru apurríu ye inválidu",
+ "The given tag id is invalid" : "La ID d'etiqueta apurrida ye inválida",
+ "The given IP range is invalid" : "L'intervalu d'IPs ye inválida",
+ "The given IP range is not valid for IPv4" : "L'intervalu d'IPs nun ye válidu pa IPv4",
+ "The given IP range is not valid for IPv6" : "L'intervalu d'IPs nun ye válidu pa IPv6",
+ "The given time span is invalid" : "L'intervalu de tiempu apurríu nun ye válidu",
+ "The given start time is invalid" : "La hora de comienzu ye inválida",
+ "The given end time is invalid" : "La hora de fin ye inválida",
+ "The given group does not exist" : "El grupu apurríu nun esiste",
+ "File" : "Ficheru",
+ "File created" : "Creóse'l ficheru",
+ "File updated" : "Anovóse'l ficheru",
+ "File renamed" : "Renomóse'l ficheru",
+ "File deleted" : "Desanicióse'l ficheru",
+ "File accessed" : "Accedióse al ficheru",
+ "File copied" : "Copióse'l ficheru",
+ "Tag assigned" : "Asignóse la etiqueta",
+ "Someone" : "Daquień",
+ "%s created %s" : "%s creó «%s»",
+ "%s modified %s" : "%s modificó «%s»",
+ "%s deleted %s" : "%s desanició «%s»",
+ "%s accessed %s" : "%s accedió a «%s»",
+ "%s renamed %s" : "%s renomó «%s»",
+ "%s copied %s" : "%s copió «%s»",
+ "%s assigned %s to %s" : "%s asignó «%s» a %s",
"Operation #%s does not exist" : "La operación #%s nun esiste",
- "Operation %s does not exist" : "La operación %s nun esiste",
- "Operation %s is invalid" : "La operación %s nun ye válida",
- "Workflow" : "Fluxu de trabayu",
- "Open documentation" : "Abrir documentación",
- "Short rule description" : "Descipción curtia de la regla",
- "Add rule" : "Amestar regla",
+ "Entity %s does not exist" : "La entidá «%s» nun esiste",
+ "Entity %s is invalid" : "La entidá «%s» ye inválida",
+ "No events are chosen." : "Nun s'escoyó nengún eventu.",
+ "Entity %s has no event %s" : "La entidá «%s» nun tien nengún eventu «%s»",
+ "Operation %s does not exist" : "La operación «%s» nun esiste",
+ "Operation %s is invalid" : "La operación «%s» ye inválida",
+ "Invalid check provided" : "Fornióse una comprobación inválida",
+ "Check %s does not exist" : "La comprobación «%s» nun esiste",
+ "Check %s is invalid" : "La comprobación «%s» ye inválida",
+ "Check %s is not allowed with this entity" : "La comprobación «%s» nun ta permitida con esta entidá",
+ "Check #%s does not exist" : "La comprobación #%s nun esiste",
+ "Check %s is invalid or does not exist" : "La comprobación «%s» ye inválida o nun esiste",
+ "Flow" : "Fluxu",
+ "Remove filter" : "Quitar la peñera",
+ "Folder" : "Carpeta",
+ "Images" : "Imáxenes",
+ "Office documents" : "Documentos ofimáticos",
+ "PDF documents" : "Documentos PDF",
+ "Android client" : "Veceru p'Android",
+ "iOS client" : "Veceru pa iOS",
+ "Desktop client" : "Veceru pa ordenadores",
+ "Select groups" : "Seleicionar grupos",
+ "Groups" : "Grupos",
+ "The configuration is invalid" : "La configuración ye inválida",
+ "Active" : "Activa",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardóse con ésitu",
- "File mime type" : "Triba MIME de ficheru"
+ "and" : "y",
+ "Cancel" : "Encaboxar",
+ "Delete" : "Desaniciar",
+ "Available flows" : "Fluxos disponibles",
+ "No flows installed" : "Nun s'instaló nengún fluxu",
+ "Ask your administrator to install new flows." : "Pidi a la alministración qu'instale fluxos nuevos.",
+ "More flows" : "Más fluxos",
+ "Show less" : "Amosar menos",
+ "Show more" : "Amosar más",
+ "Configured flows" : "Fluxos configuraos",
+ "No flows configured" : "Nun se configuró nengún fluxu",
+ "matches" : "concasa",
+ "does not match" : "nun concasa",
+ "is" : "ye",
+ "is not" : "nun ye",
+ "File name" : "Nome del ficheru",
+ "between" : "ente"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/bg.js b/apps/workflowengine/l10n/bg.js
index 7646f36302c..ab2ed6cb1a4 100644
--- a/apps/workflowengine/l10n/bg.js
+++ b/apps/workflowengine/l10n/bg.js
@@ -1,47 +1,10 @@
OC.L10N.register(
"workflowengine",
{
- "Saving failed:" : "Запазването се провали:",
- "is" : "е",
- "is not" : "не е",
- "matches" : "съвпадения",
- "does not match" : "не съвпада",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Големина на файл (качване)",
- "less" : "по-малко",
- "less or equals" : "по-малко или равно",
- "greater or equals" : "по-голямо или равно",
- "greater" : "по-голям",
- "File system tag" : "Таг на файлова система",
- "is tagged with" : "е тагнат с",
- "is not tagged with" : "не е тагнат с",
- "Select tag…" : "Избери таг...",
- "Request remote address" : "Искане на отдалечен адрес",
- "matches IPv4" : "съвпада IPv4",
- "does not match IPv4" : "не съвпада IPv4",
- "matches IPv6" : "съвпада IPv6",
- "does not match IPv6" : "не съвпада IPv6",
- "Request time" : "Врене ба заявка",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Край",
- "Select timezone…" : "Изберете часови пояс...",
- "Request URL" : "URL на заявка",
- "Predefined URLs" : "Предефинирани URL-и",
- "Files WebDAV" : "Файлове WebDAV",
- "Request user agent" : "Потребителски агент на заявка",
- "Sync clients" : "Синхронизиране на клиенти",
- "Android client" : "Android клиент",
- "iOS client" : "iOS клиент",
- "Desktop client" : "Клиент за настолен компютър",
- "User group membership" : "Членство към потребителска група",
- "is member of" : "е член на",
- "is not member of" : "не е член на",
"The given operator is invalid" : "Даденият оператор е невалиден",
"The given regular expression is invalid" : "Даденият израз е невалиден",
"The given file size is invalid" : "Даденият размер на файла не е валиден",
- "The given tag id is invalid" : "Даденият таг код не е валиден",
+ "The given tag id is invalid" : "Даденият етикет не е валиден",
"The given IP range is invalid" : "Даденият IP диапазон е невалиден",
"The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
"The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
@@ -49,23 +12,108 @@ OC.L10N.register(
"The given start time is invalid" : "Даденият начален час е невалиден",
"The given end time is invalid" : "Даденият краен час е невалиден",
"The given group does not exist" : "Дадената група не съществува",
- "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "File" : "Файл",
+ "File created" : "Файлът е създаден",
+ "File updated" : "Файлът е актуализиран",
+ "File renamed" : "Файлът е преименуван",
+ "File deleted" : "Файлът е изтрит",
+ "File accessed" : "Достъпен е файл",
+ "File copied" : "Файлът е копиран",
+ "Tag assigned" : "Присвоен е етикет",
+ "Someone" : "Някой",
+ "%s created %s" : "%s създаде %s",
+ "%s modified %s" : "%s промени %s",
+ "%s deleted %s" : "%s изтри %s",
+ "%s accessed %s" : "%s достъпи %s",
+ "%s renamed %s" : "%s преименува %s",
+ "%s copied %s" : "%s копира %s",
+ "%s assigned %s to %s" : "%s присвои %s на %s",
"Operation #%s does not exist" : "Операция #%s не съществува",
+ "Entity %s does not exist" : "Обект %s не съществува",
+ "Entity %s is invalid" : "Обект %s е невалиден",
+ "No events are chosen." : "Не са избрани събития.",
+ "Entity %s has no event %s" : "Обект %s няма събитие %s",
"Operation %s does not exist" : "Операция %s не съществува",
"Operation %s is invalid" : "Операция %s е невалидна",
+ "At least one check needs to be provided" : "Трябва да се предостави поне една проверка",
+ "The provided operation data is too long" : "Предоставените оперативни данни са твърде дълги",
+ "Invalid check provided" : "Предоставена е невалидна проверка",
"Check %s does not exist" : "Проверка %s не съществува",
"Check %s is invalid" : "Проверка %s е невалидна",
+ "Check %s is not allowed with this entity" : "Не е позволена %s проверка с този обект",
+ "The provided check value is too long" : "Предоставената стойност за проверка е твърде дълга",
"Check #%s does not exist" : "Проверка #%s не съществува",
- "Workflow" : "Работен процес",
- "Open documentation" : "Отвори документация",
- "Add rule group" : "Добави група правила",
- "Short rule description" : "Кратко описание на правило",
- "Add rule" : "Добави правило",
- "Reset" : "Възстанови",
+ "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "Flow" : "Автоматизация",
+ "Nextcloud workflow engine" : "Система на работния поток на Nextcloud",
+ "Select a filter" : "Избор на филтър",
+ "Select a comparator" : "Избор на инструмент за сравняване",
+ "Remove filter" : "Премахни филтър",
+ "Folder" : "Папка",
+ "Images" : "Изображения",
+ "Office documents" : "Офис документи",
+ "PDF documents" : "PDF документи",
+ "Custom MIME type" : "Персонализиран файл тип MIME",
+ "Custom mimetype" : "Персонализиран mimetype",
+ "Select a file type" : "Избор на тип файл",
+ "e.g. httpd/unix-directory" : "напр. httpd/unix-directory",
+ "Please enter a valid time span" : "Моля, въведете валиден период от време",
+ "Files WebDAV" : "Файлове WebDAV",
+ "Custom URL" : "Персонализиран URL адрес",
+ "Select a request URL" : "Избор на URL адрес за заявка",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за настолен компютър",
+ "Thunderbird & Outlook addons" : "Добавки на Thunderbird и Outlook",
+ "Custom user agent" : "Персонализиран потребителски агент",
+ "Select a user agent" : "Избор на потребителски агент",
+ "Select groups" : "Избери Групи",
+ "Groups" : "Групи",
+ "At least one event must be selected" : "Трябва да бъде избрано поне едно събитие",
+ "Add new flow" : "Добавяне на нова автоматизация",
+ "The configuration is invalid" : "Конфигурацията е невалидна",
+ "Active" : "Активен",
"Save" : "Запази",
- "Saving…" : "Запазване...",
- "Loading…" : "Зареждане...",
- "Successfully saved" : "Успешно запазен",
- "File mime type" : "Разширения"
+ "When" : "Кога",
+ "and" : "и",
+ "Cancel" : "Отказ",
+ "Delete" : "Изтриване",
+ "Available flows" : "Налични автоматизации",
+ "For details on how to write your own flow, check out the development documentation." : "За подробности как да напишете свой собствен поток, вижте документацията за разработка.",
+ "No flows installed" : "Няма инсталирани автоматизации",
+ "Ask your administrator to install new flows." : "Помолете системния администратор да инсталира нови автоматизации",
+ "More flows" : "Още поточни автоматизации",
+ "Browse the App Store" : "Преглед на магазина за приложения /App Store/",
+ "Show less" : "Покажи по-малко",
+ "Show more" : "Покажи повече",
+ "Configured flows" : "Конфигурирани поточни автоматизации",
+ "Your flows" : "Вашите автоматизации",
+ "No flows configured" : "Няма конфигурирани автоматизации",
+ "matches" : "съвпадения",
+ "does not match" : "не съвпада",
+ "is" : "е",
+ "is not" : "не е",
+ "File name" : "Име на файл",
+ "File MIME type" : "Тип MIME файл",
+ "File size (upload)" : "Големина на файл (качване)",
+ "less" : "по-малко",
+ "less or equals" : "по-малко или равно",
+ "greater or equals" : "по-голямо или равно",
+ "greater" : "по-голям",
+ "Request remote address" : "Искане на отдалечен адрес",
+ "matches IPv4" : "съвпада IPv4",
+ "does not match IPv4" : "не съвпада IPv4",
+ "matches IPv6" : "съвпада IPv6",
+ "does not match IPv6" : "не съвпада IPv6",
+ "File system tag" : "Етикет на файлова система",
+ "is tagged with" : "има етикет",
+ "is not tagged with" : "няма етикет",
+ "Request URL" : "URL на заявка",
+ "Request time" : "Врене ба заявка",
+ "between" : "между",
+ "not between" : "не между",
+ "Request user agent" : "Потребителски агент на заявка",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/bg.json b/apps/workflowengine/l10n/bg.json
index 4788e40881d..44c7d29a6f5 100644
--- a/apps/workflowengine/l10n/bg.json
+++ b/apps/workflowengine/l10n/bg.json
@@ -1,45 +1,8 @@
{ "translations": {
- "Saving failed:" : "Запазването се провали:",
- "is" : "е",
- "is not" : "не е",
- "matches" : "съвпадения",
- "does not match" : "не съвпада",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Големина на файл (качване)",
- "less" : "по-малко",
- "less or equals" : "по-малко или равно",
- "greater or equals" : "по-голямо или равно",
- "greater" : "по-голям",
- "File system tag" : "Таг на файлова система",
- "is tagged with" : "е тагнат с",
- "is not tagged with" : "не е тагнат с",
- "Select tag…" : "Избери таг...",
- "Request remote address" : "Искане на отдалечен адрес",
- "matches IPv4" : "съвпада IPv4",
- "does not match IPv4" : "не съвпада IPv4",
- "matches IPv6" : "съвпада IPv6",
- "does not match IPv6" : "не съвпада IPv6",
- "Request time" : "Врене ба заявка",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Край",
- "Select timezone…" : "Изберете часови пояс...",
- "Request URL" : "URL на заявка",
- "Predefined URLs" : "Предефинирани URL-и",
- "Files WebDAV" : "Файлове WebDAV",
- "Request user agent" : "Потребителски агент на заявка",
- "Sync clients" : "Синхронизиране на клиенти",
- "Android client" : "Android клиент",
- "iOS client" : "iOS клиент",
- "Desktop client" : "Клиент за настолен компютър",
- "User group membership" : "Членство към потребителска група",
- "is member of" : "е член на",
- "is not member of" : "не е член на",
"The given operator is invalid" : "Даденият оператор е невалиден",
"The given regular expression is invalid" : "Даденият израз е невалиден",
"The given file size is invalid" : "Даденият размер на файла не е валиден",
- "The given tag id is invalid" : "Даденият таг код не е валиден",
+ "The given tag id is invalid" : "Даденият етикет не е валиден",
"The given IP range is invalid" : "Даденият IP диапазон е невалиден",
"The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
"The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
@@ -47,23 +10,108 @@
"The given start time is invalid" : "Даденият начален час е невалиден",
"The given end time is invalid" : "Даденият краен час е невалиден",
"The given group does not exist" : "Дадената група не съществува",
- "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "File" : "Файл",
+ "File created" : "Файлът е създаден",
+ "File updated" : "Файлът е актуализиран",
+ "File renamed" : "Файлът е преименуван",
+ "File deleted" : "Файлът е изтрит",
+ "File accessed" : "Достъпен е файл",
+ "File copied" : "Файлът е копиран",
+ "Tag assigned" : "Присвоен е етикет",
+ "Someone" : "Някой",
+ "%s created %s" : "%s създаде %s",
+ "%s modified %s" : "%s промени %s",
+ "%s deleted %s" : "%s изтри %s",
+ "%s accessed %s" : "%s достъпи %s",
+ "%s renamed %s" : "%s преименува %s",
+ "%s copied %s" : "%s копира %s",
+ "%s assigned %s to %s" : "%s присвои %s на %s",
"Operation #%s does not exist" : "Операция #%s не съществува",
+ "Entity %s does not exist" : "Обект %s не съществува",
+ "Entity %s is invalid" : "Обект %s е невалиден",
+ "No events are chosen." : "Не са избрани събития.",
+ "Entity %s has no event %s" : "Обект %s няма събитие %s",
"Operation %s does not exist" : "Операция %s не съществува",
"Operation %s is invalid" : "Операция %s е невалидна",
+ "At least one check needs to be provided" : "Трябва да се предостави поне една проверка",
+ "The provided operation data is too long" : "Предоставените оперативни данни са твърде дълги",
+ "Invalid check provided" : "Предоставена е невалидна проверка",
"Check %s does not exist" : "Проверка %s не съществува",
"Check %s is invalid" : "Проверка %s е невалидна",
+ "Check %s is not allowed with this entity" : "Не е позволена %s проверка с този обект",
+ "The provided check value is too long" : "Предоставената стойност за проверка е твърде дълга",
"Check #%s does not exist" : "Проверка #%s не съществува",
- "Workflow" : "Работен процес",
- "Open documentation" : "Отвори документация",
- "Add rule group" : "Добави група правила",
- "Short rule description" : "Кратко описание на правило",
- "Add rule" : "Добави правило",
- "Reset" : "Възстанови",
+ "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
+ "Flow" : "Автоматизация",
+ "Nextcloud workflow engine" : "Система на работния поток на Nextcloud",
+ "Select a filter" : "Избор на филтър",
+ "Select a comparator" : "Избор на инструмент за сравняване",
+ "Remove filter" : "Премахни филтър",
+ "Folder" : "Папка",
+ "Images" : "Изображения",
+ "Office documents" : "Офис документи",
+ "PDF documents" : "PDF документи",
+ "Custom MIME type" : "Персонализиран файл тип MIME",
+ "Custom mimetype" : "Персонализиран mimetype",
+ "Select a file type" : "Избор на тип файл",
+ "e.g. httpd/unix-directory" : "напр. httpd/unix-directory",
+ "Please enter a valid time span" : "Моля, въведете валиден период от време",
+ "Files WebDAV" : "Файлове WebDAV",
+ "Custom URL" : "Персонализиран URL адрес",
+ "Select a request URL" : "Избор на URL адрес за заявка",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за настолен компютър",
+ "Thunderbird & Outlook addons" : "Добавки на Thunderbird и Outlook",
+ "Custom user agent" : "Персонализиран потребителски агент",
+ "Select a user agent" : "Избор на потребителски агент",
+ "Select groups" : "Избери Групи",
+ "Groups" : "Групи",
+ "At least one event must be selected" : "Трябва да бъде избрано поне едно събитие",
+ "Add new flow" : "Добавяне на нова автоматизация",
+ "The configuration is invalid" : "Конфигурацията е невалидна",
+ "Active" : "Активен",
"Save" : "Запази",
- "Saving…" : "Запазване...",
- "Loading…" : "Зареждане...",
- "Successfully saved" : "Успешно запазен",
- "File mime type" : "Разширения"
+ "When" : "Кога",
+ "and" : "и",
+ "Cancel" : "Отказ",
+ "Delete" : "Изтриване",
+ "Available flows" : "Налични автоматизации",
+ "For details on how to write your own flow, check out the development documentation." : "За подробности как да напишете свой собствен поток, вижте документацията за разработка.",
+ "No flows installed" : "Няма инсталирани автоматизации",
+ "Ask your administrator to install new flows." : "Помолете системния администратор да инсталира нови автоматизации",
+ "More flows" : "Още поточни автоматизации",
+ "Browse the App Store" : "Преглед на магазина за приложения /App Store/",
+ "Show less" : "Покажи по-малко",
+ "Show more" : "Покажи повече",
+ "Configured flows" : "Конфигурирани поточни автоматизации",
+ "Your flows" : "Вашите автоматизации",
+ "No flows configured" : "Няма конфигурирани автоматизации",
+ "matches" : "съвпадения",
+ "does not match" : "не съвпада",
+ "is" : "е",
+ "is not" : "не е",
+ "File name" : "Име на файл",
+ "File MIME type" : "Тип MIME файл",
+ "File size (upload)" : "Големина на файл (качване)",
+ "less" : "по-малко",
+ "less or equals" : "по-малко или равно",
+ "greater or equals" : "по-голямо или равно",
+ "greater" : "по-голям",
+ "Request remote address" : "Искане на отдалечен адрес",
+ "matches IPv4" : "съвпада IPv4",
+ "does not match IPv4" : "не съвпада IPv4",
+ "matches IPv6" : "съвпада IPv6",
+ "does not match IPv6" : "не съвпада IPv6",
+ "File system tag" : "Етикет на файлова система",
+ "is tagged with" : "има етикет",
+ "is not tagged with" : "няма етикет",
+ "Request URL" : "URL на заявка",
+ "Request time" : "Врене ба заявка",
+ "between" : "между",
+ "not between" : "не между",
+ "Request user agent" : "Потребителски агент на заявка",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/bg_BG.js b/apps/workflowengine/l10n/bg_BG.js
deleted file mode 100644
index ec24d4f01ae..00000000000
--- a/apps/workflowengine/l10n/bg_BG.js
+++ /dev/null
@@ -1,70 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Successfully saved" : "Успешно запазен",
- "Saving failed:" : "Запазването се провали:",
- "File mime type" : "Разширения",
- "is" : "е",
- "is not" : "не е",
- "matches" : "съвпадения",
- "does not match" : "не съвпада",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Големина на файл (качване)",
- "less" : "по-малко",
- "less or equals" : "по-малко или равно",
- "greater or equals" : "по-голямо или равно",
- "File system tag" : "Таг на файлова система",
- "is tagged with" : "е тагнат с",
- "is not tagged with" : "не е тагнат с",
- "Select tag…" : "Избери таг...",
- "Request remote address" : "Искане на отдалечен адрес",
- "matches IPv4" : "съвпада IPv4",
- "does not match IPv4" : "не съвпада IPv4",
- "matches IPv6" : "съвпада IPv6",
- "does not match IPv6" : "не съвпада IPv6",
- "Request time" : "Врене ба заявка",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Край",
- "Select timezone…" : "Изберете часови пояс...",
- "Request URL" : "URL на заявка",
- "Predefined URLs" : "Предефинирани URL-и",
- "Files WebDAV" : "Файлове WebDAV",
- "Request user agent" : "Потребителски агент на заявка",
- "Sync clients" : "Синхронизиране на клиенти",
- "Android client" : "Android клиент",
- "iOS client" : "iOS клиент",
- "Desktop client" : "Клиент за настолен компютър",
- "User group membership" : "Членство към потребителска група",
- "is member of" : "е член на",
- "is not member of" : "не е член на",
- "The given operator is invalid" : "Даденият оператор е невалиден",
- "The given regular expression is invalid" : "Даденият израз е невалиден",
- "The given file size is invalid" : "Даденият размер на файла не е валиден",
- "The given tag id is invalid" : "Даденият таг код не е валиден",
- "The given IP range is invalid" : "Даденият IP диапазон е невалиден",
- "The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
- "The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
- "The given time span is invalid" : "Даденият период е невалиден",
- "The given start time is invalid" : "Даденият начален час е невалиден",
- "The given end time is invalid" : "Даденият краен час е невалиден",
- "The given group does not exist" : "Дадената група не съществува",
- "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
- "Operation #%s does not exist" : "Операция #%s не съществува",
- "Operation %s does not exist" : "Операция %s не съществува",
- "Operation %s is invalid" : "Операция %s е невалидна",
- "Check %s does not exist" : "Проверка %s не съществува",
- "Check %s is invalid" : "Проверка %s е невалидна",
- "Check #%s does not exist" : "Проверка #%s не съществува",
- "Workflow" : "Работен процес",
- "Open documentation" : "Отвори документация",
- "Add rule group" : "Добави група правила",
- "Short rule description" : "Кратко описание на правило",
- "Add rule" : "Добави правило",
- "Reset" : "Възстанови",
- "Save" : "Запази",
- "Saving…" : "Запазване...",
- "Loading…" : "Зареждане..."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/bg_BG.json b/apps/workflowengine/l10n/bg_BG.json
deleted file mode 100644
index 492410c9bf4..00000000000
--- a/apps/workflowengine/l10n/bg_BG.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{ "translations": {
- "Successfully saved" : "Успешно запазен",
- "Saving failed:" : "Запазването се провали:",
- "File mime type" : "Разширения",
- "is" : "е",
- "is not" : "не е",
- "matches" : "съвпадения",
- "does not match" : "не съвпада",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Големина на файл (качване)",
- "less" : "по-малко",
- "less or equals" : "по-малко или равно",
- "greater or equals" : "по-голямо или равно",
- "File system tag" : "Таг на файлова система",
- "is tagged with" : "е тагнат с",
- "is not tagged with" : "не е тагнат с",
- "Select tag…" : "Избери таг...",
- "Request remote address" : "Искане на отдалечен адрес",
- "matches IPv4" : "съвпада IPv4",
- "does not match IPv4" : "не съвпада IPv4",
- "matches IPv6" : "съвпада IPv6",
- "does not match IPv6" : "не съвпада IPv6",
- "Request time" : "Врене ба заявка",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Край",
- "Select timezone…" : "Изберете часови пояс...",
- "Request URL" : "URL на заявка",
- "Predefined URLs" : "Предефинирани URL-и",
- "Files WebDAV" : "Файлове WebDAV",
- "Request user agent" : "Потребителски агент на заявка",
- "Sync clients" : "Синхронизиране на клиенти",
- "Android client" : "Android клиент",
- "iOS client" : "iOS клиент",
- "Desktop client" : "Клиент за настолен компютър",
- "User group membership" : "Членство към потребителска група",
- "is member of" : "е член на",
- "is not member of" : "не е член на",
- "The given operator is invalid" : "Даденият оператор е невалиден",
- "The given regular expression is invalid" : "Даденият израз е невалиден",
- "The given file size is invalid" : "Даденият размер на файла не е валиден",
- "The given tag id is invalid" : "Даденият таг код не е валиден",
- "The given IP range is invalid" : "Даденият IP диапазон е невалиден",
- "The given IP range is not valid for IPv4" : "Даденият IP диапазон не е валиден за IPv4",
- "The given IP range is not valid for IPv6" : "Даденият IP диапазон не е валиден за IPv6",
- "The given time span is invalid" : "Даденият период е невалиден",
- "The given start time is invalid" : "Даденият начален час е невалиден",
- "The given end time is invalid" : "Даденият краен час е невалиден",
- "The given group does not exist" : "Дадената група не съществува",
- "Check %s is invalid or does not exist" : "Проверка %s не е валидна или несъществува",
- "Operation #%s does not exist" : "Операция #%s не съществува",
- "Operation %s does not exist" : "Операция %s не съществува",
- "Operation %s is invalid" : "Операция %s е невалидна",
- "Check %s does not exist" : "Проверка %s не съществува",
- "Check %s is invalid" : "Проверка %s е невалидна",
- "Check #%s does not exist" : "Проверка #%s не съществува",
- "Workflow" : "Работен процес",
- "Open documentation" : "Отвори документация",
- "Add rule group" : "Добави група правила",
- "Short rule description" : "Кратко описание на правило",
- "Add rule" : "Добави правило",
- "Reset" : "Възстанови",
- "Save" : "Запази",
- "Saving…" : "Запазване...",
- "Loading…" : "Зареждане..."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ca.js b/apps/workflowengine/l10n/ca.js
index c8de2819b34..39238b81afb 100644
--- a/apps/workflowengine/l10n/ca.js
+++ b/apps/workflowengine/l10n/ca.js
@@ -1,73 +1,113 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Desat",
- "Saving failed:" : "Error al desar",
- "File MIME type" : "Tipus MIME d\\'arxiu",
+ "The given operator is invalid" : "L'operador donat no és vàlid",
+ "The given regular expression is invalid" : "L'expressió regular donada no és vàlida",
+ "The given file size is invalid" : "La mida de fitxer donat no és vàlid",
+ "The given tag id is invalid" : "L'Id d'etiqueta donat no és vàlid",
+ "The given IP range is invalid" : "El rang d'IPs donat no és vàlid",
+ "The given IP range is not valid for IPv4" : "El rang d'IP donat no és vàlid per IPv4",
+ "The given IP range is not valid for IPv6" : "El rang d'IP donat no és vàlid per IPv6",
+ "The given time span is invalid" : "El rang de temps donat no és vàlid",
+ "The given start time is invalid" : "El temps d'inici donat no és vàlid",
+ "The given end time is invalid" : "El temps de finalització donat no és vàlid",
+ "The given group does not exist" : "El grup donat no existeix",
+ "File" : "Fitxer",
+ "File created" : "Fitxer creat",
+ "File updated" : "Fitxer actualitzat",
+ "File renamed" : "Fitxer reanomenat",
+ "File deleted" : "Fitxer suprimit",
+ "File accessed" : "Fitxer accedit",
+ "File copied" : "Fitxer copiat",
+ "Tag assigned" : "Etiqueta assignada",
+ "Someone" : "Algú",
+ "%s created %s" : "%s ha creat %s",
+ "%s modified %s" : "%s ha modificat %s",
+ "%s deleted %s" : "%s ha eliminat %s",
+ "%s accessed %s" : "%s ha accedit %s",
+ "%s renamed %s" : "%s ha renombrat %s",
+ "%s copied %s" : "%s ha copiat %s",
+ "%s assigned %s to %s" : "%s ha assignat %s a %s",
+ "Operation #%s does not exist" : "L'operació #%s no existeix",
+ "Entity %s does not exist" : "L'entitat %s no existeix",
+ "Entity %s is invalid" : "L'entitat %s no és vàlida",
+ "No events are chosen." : "No s'ha triat cap esdeveniment.",
+ "Entity %s has no event %s" : "L'entitat %s no té cap esdeveniment %s",
+ "Operation %s does not exist" : "L'operació %s no existeix",
+ "Operation %s is invalid" : "L'operació %s no és vàlida",
+ "At least one check needs to be provided" : "S'ha de proporcionar almenys una comprovació",
+ "Invalid check provided" : "Comprovació no vàlida proporcionada",
+ "Check %s does not exist" : "Comprovació %s no existeix",
+ "Check %s is invalid" : "Comprovació %s no és vàlid",
+ "Check %s is not allowed with this entity" : "La comprovació de %s no es permet amb aquesta entitat",
+ "Check #%s does not exist" : "Comprovació #%s no existeix",
+ "Check %s is invalid or does not exist" : "Comprovació %s no és vàlida o no existeix",
+ "Flow" : "Flux",
+ "Nextcloud workflow engine" : "Motor de flux de treball de Nextcloud",
+ "Select a filter" : "Seleccioneu un filtre",
+ "Select a comparator" : "Seleccioneu un comparador",
+ "Remove filter" : "Suprimeix el filtre",
+ "Folder" : "Carpeta",
+ "Images" : "Imatges",
+ "Office documents" : "Documents d'oficina",
+ "PDF documents" : "Documents PDF",
+ "Custom mimetype" : "Tipus mime personalitzat",
+ "Select a file type" : "Seleccioneu un tipus de fitxer",
+ "e.g. httpd/unix-directory" : "p. ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Introduïu un interval de temps vàlid",
+ "Files WebDAV" : "Fitxers WebDAV",
+ "Custom URL" : "URL personalitzat",
+ "Select a request URL" : "Seleccioneu un URL de petició",
+ "Android client" : "Client android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client d'escriptori",
+ "Thunderbird & Outlook addons" : "Complements de Thunderbird i Outlook",
+ "Custom user agent" : "Agent d'usuari personalitzat",
+ "Select a user agent" : "Seleccioneu un agent d'usuari",
+ "Select groups" : "Selecciona els grups",
+ "Groups" : "Grups",
+ "At least one event must be selected" : "Com a mínim s'ha de seleccionar un esdeveniment",
+ "Add new flow" : "Afegeix un flux nou",
+ "The configuration is invalid" : "La configuració no és vàlida",
+ "Active" : "Actiu",
+ "Save" : "Desa",
+ "When" : "Quan",
+ "and" : "i",
+ "Cancel" : "Cancel·la",
+ "Delete" : "Eliminar",
+ "Available flows" : "Fluxos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Per obtenir més informació sobre com escriure el seu propi flux, feu un cop d'ulls a la documentació de desenvolupament.",
+ "More flows" : "Més fluxos",
+ "Browse the App Store" : "Navegueu per la botiga d’aplicacions",
+ "Show less" : "Mostra'n menys",
+ "Show more" : "Mostra'n més",
+ "Configured flows" : "Fluxos configurats",
+ "Your flows" : "Els seus fluxos",
+ "matches" : "coincidències",
+ "does not match" : "no encaixa",
"is" : "és",
"is not" : "no és",
- "matches" : "coincidències",
- "does not match" : "No hi ha coincidències",
- "Example: {placeholder}" : "Exemple: {placeholder}",
- "File size (upload)" : "Mida d\\'arxiu (pujar)",
+ "File name" : "Nom del fitxer",
+ "File MIME type" : "Tipus MIME del fitxer",
+ "File size (upload)" : "Mida del fitxer (carrega)",
"less" : "menys",
"less or equals" : "menor o igual",
"greater or equals" : "major o igual",
"greater" : "superior",
+ "Request remote address" : "Demana adreça remota",
+ "matches IPv4" : "coincideix amb IPv4",
+ "does not match IPv4" : "no encaixa amb IPv4",
+ "matches IPv6" : "encaixa amb IPv6",
+ "does not match IPv6" : "no encaixa amb IPv6",
"File system tag" : "Etiqueta del sistema de fitxers",
"is tagged with" : "està estiquetat amb",
"is not tagged with" : "no està etiquetat amb",
- "Select tag…" : "Selecciona etiqueta...",
- "Request remote address" : "Demanar adreça remota",
- "matches IPv4" : "coincidències IPv4",
- "does not match IPv4" : "No hi ha coincidencies IPv4",
- "matches IPv6" : "Coincidències IPv6",
- "does not match IPv6" : "No hi ha coincidències IPv6",
+ "Request URL" : "URL de sol·licitud",
"Request time" : "Temps d'espera",
"between" : "entre",
"not between" : "no entre",
- "Start" : "Comença",
- "End" : "Finalitza",
- "Select timezone…" : "Selecciona zona horaria",
- "Request URL" : "URL de la petició",
- "Predefined URLs" : "URLs predefinits",
- "Files WebDAV" : "Arxius WebDAV",
- "Request user agent" : "Agent d\\'usuari de la petició",
- "Sync clients" : "Sincronitzar clients",
- "Android client" : "Client android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client d'escriptori",
- "User group membership" : "Pertinença a grup d'usuaris",
+ "Request user agent" : "Sol·licita agent d'usuari",
"is member of" : "és membre de",
- "is not member of" : "no és membre de",
- "The given operator is invalid" : "L\\'operador donat no és vàlid",
- "The given regular expression is invalid" : "L\\'expresió regular donada no és vàlida",
- "The given file size is invalid" : "El tamany de fitxer donat no és vàlid",
- "The given tag id is invalid" : "L\\'Id d'etiqueta donat no és vàlid",
- "The given IP range is invalid" : "El rang d\\'IPs donat no és vàlid",
- "The given IP range is not valid for IPv4" : "El rang d\\'IP donat no és vàlid per IPv4",
- "The given IP range is not valid for IPv6" : "El rang d\\'IP donat no és vàlid per IPv6",
- "The given time span is invalid" : "El rang de temps donat no és vàlid",
- "The given start time is invalid" : "El temps d\\'inici donat no és vàlid",
- "The given end time is invalid" : "El temps de finalització donat no és vàlid",
- "The given group does not exist" : "El grup donat no existeix",
- "Check %s is invalid or does not exist" : "Comprovació %s no és vàlida o no existeix",
- "Operation #%s does not exist" : "L\\'operació #%s no existeix",
- "Operation %s does not exist" : "L\\'operació %s no existeix",
- "Operation %s is invalid" : "L\\'operació %s no és vàlida",
- "Check %s does not exist" : "Comprovació %s no existeix",
- "Check %s is invalid" : "Comprovació %s no és vàlid",
- "Check #%s does not exist" : "Comprovació #%s no existeix",
- "Workflow" : "Flux de treball",
- "Open documentation" : "Obrir documentació",
- "Add rule group" : "Afegeix una regla de grup",
- "Short rule description" : "Descripció breu de regla",
- "Add rule" : "Afegir regla",
- "Reset" : "Resetejar",
- "Save" : "Desa",
- "Saving…" : "Desant...",
- "Loading…" : "Carregant...",
- "Successfully saved" : "S\\'ha desat correctament",
- "File mime type" : "Tipus mime de l\\'arxiu"
+ "is not member of" : "no és membre de"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/ca.json b/apps/workflowengine/l10n/ca.json
index d142823c0bb..c1d91fc010e 100644
--- a/apps/workflowengine/l10n/ca.json
+++ b/apps/workflowengine/l10n/ca.json
@@ -1,71 +1,111 @@
{ "translations": {
- "Saved" : "Desat",
- "Saving failed:" : "Error al desar",
- "File MIME type" : "Tipus MIME d\\'arxiu",
+ "The given operator is invalid" : "L'operador donat no és vàlid",
+ "The given regular expression is invalid" : "L'expressió regular donada no és vàlida",
+ "The given file size is invalid" : "La mida de fitxer donat no és vàlid",
+ "The given tag id is invalid" : "L'Id d'etiqueta donat no és vàlid",
+ "The given IP range is invalid" : "El rang d'IPs donat no és vàlid",
+ "The given IP range is not valid for IPv4" : "El rang d'IP donat no és vàlid per IPv4",
+ "The given IP range is not valid for IPv6" : "El rang d'IP donat no és vàlid per IPv6",
+ "The given time span is invalid" : "El rang de temps donat no és vàlid",
+ "The given start time is invalid" : "El temps d'inici donat no és vàlid",
+ "The given end time is invalid" : "El temps de finalització donat no és vàlid",
+ "The given group does not exist" : "El grup donat no existeix",
+ "File" : "Fitxer",
+ "File created" : "Fitxer creat",
+ "File updated" : "Fitxer actualitzat",
+ "File renamed" : "Fitxer reanomenat",
+ "File deleted" : "Fitxer suprimit",
+ "File accessed" : "Fitxer accedit",
+ "File copied" : "Fitxer copiat",
+ "Tag assigned" : "Etiqueta assignada",
+ "Someone" : "Algú",
+ "%s created %s" : "%s ha creat %s",
+ "%s modified %s" : "%s ha modificat %s",
+ "%s deleted %s" : "%s ha eliminat %s",
+ "%s accessed %s" : "%s ha accedit %s",
+ "%s renamed %s" : "%s ha renombrat %s",
+ "%s copied %s" : "%s ha copiat %s",
+ "%s assigned %s to %s" : "%s ha assignat %s a %s",
+ "Operation #%s does not exist" : "L'operació #%s no existeix",
+ "Entity %s does not exist" : "L'entitat %s no existeix",
+ "Entity %s is invalid" : "L'entitat %s no és vàlida",
+ "No events are chosen." : "No s'ha triat cap esdeveniment.",
+ "Entity %s has no event %s" : "L'entitat %s no té cap esdeveniment %s",
+ "Operation %s does not exist" : "L'operació %s no existeix",
+ "Operation %s is invalid" : "L'operació %s no és vàlida",
+ "At least one check needs to be provided" : "S'ha de proporcionar almenys una comprovació",
+ "Invalid check provided" : "Comprovació no vàlida proporcionada",
+ "Check %s does not exist" : "Comprovació %s no existeix",
+ "Check %s is invalid" : "Comprovació %s no és vàlid",
+ "Check %s is not allowed with this entity" : "La comprovació de %s no es permet amb aquesta entitat",
+ "Check #%s does not exist" : "Comprovació #%s no existeix",
+ "Check %s is invalid or does not exist" : "Comprovació %s no és vàlida o no existeix",
+ "Flow" : "Flux",
+ "Nextcloud workflow engine" : "Motor de flux de treball de Nextcloud",
+ "Select a filter" : "Seleccioneu un filtre",
+ "Select a comparator" : "Seleccioneu un comparador",
+ "Remove filter" : "Suprimeix el filtre",
+ "Folder" : "Carpeta",
+ "Images" : "Imatges",
+ "Office documents" : "Documents d'oficina",
+ "PDF documents" : "Documents PDF",
+ "Custom mimetype" : "Tipus mime personalitzat",
+ "Select a file type" : "Seleccioneu un tipus de fitxer",
+ "e.g. httpd/unix-directory" : "p. ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Introduïu un interval de temps vàlid",
+ "Files WebDAV" : "Fitxers WebDAV",
+ "Custom URL" : "URL personalitzat",
+ "Select a request URL" : "Seleccioneu un URL de petició",
+ "Android client" : "Client android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client d'escriptori",
+ "Thunderbird & Outlook addons" : "Complements de Thunderbird i Outlook",
+ "Custom user agent" : "Agent d'usuari personalitzat",
+ "Select a user agent" : "Seleccioneu un agent d'usuari",
+ "Select groups" : "Selecciona els grups",
+ "Groups" : "Grups",
+ "At least one event must be selected" : "Com a mínim s'ha de seleccionar un esdeveniment",
+ "Add new flow" : "Afegeix un flux nou",
+ "The configuration is invalid" : "La configuració no és vàlida",
+ "Active" : "Actiu",
+ "Save" : "Desa",
+ "When" : "Quan",
+ "and" : "i",
+ "Cancel" : "Cancel·la",
+ "Delete" : "Eliminar",
+ "Available flows" : "Fluxos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Per obtenir més informació sobre com escriure el seu propi flux, feu un cop d'ulls a la documentació de desenvolupament.",
+ "More flows" : "Més fluxos",
+ "Browse the App Store" : "Navegueu per la botiga d’aplicacions",
+ "Show less" : "Mostra'n menys",
+ "Show more" : "Mostra'n més",
+ "Configured flows" : "Fluxos configurats",
+ "Your flows" : "Els seus fluxos",
+ "matches" : "coincidències",
+ "does not match" : "no encaixa",
"is" : "és",
"is not" : "no és",
- "matches" : "coincidències",
- "does not match" : "No hi ha coincidències",
- "Example: {placeholder}" : "Exemple: {placeholder}",
- "File size (upload)" : "Mida d\\'arxiu (pujar)",
+ "File name" : "Nom del fitxer",
+ "File MIME type" : "Tipus MIME del fitxer",
+ "File size (upload)" : "Mida del fitxer (carrega)",
"less" : "menys",
"less or equals" : "menor o igual",
"greater or equals" : "major o igual",
"greater" : "superior",
+ "Request remote address" : "Demana adreça remota",
+ "matches IPv4" : "coincideix amb IPv4",
+ "does not match IPv4" : "no encaixa amb IPv4",
+ "matches IPv6" : "encaixa amb IPv6",
+ "does not match IPv6" : "no encaixa amb IPv6",
"File system tag" : "Etiqueta del sistema de fitxers",
"is tagged with" : "està estiquetat amb",
"is not tagged with" : "no està etiquetat amb",
- "Select tag…" : "Selecciona etiqueta...",
- "Request remote address" : "Demanar adreça remota",
- "matches IPv4" : "coincidències IPv4",
- "does not match IPv4" : "No hi ha coincidencies IPv4",
- "matches IPv6" : "Coincidències IPv6",
- "does not match IPv6" : "No hi ha coincidències IPv6",
+ "Request URL" : "URL de sol·licitud",
"Request time" : "Temps d'espera",
"between" : "entre",
"not between" : "no entre",
- "Start" : "Comença",
- "End" : "Finalitza",
- "Select timezone…" : "Selecciona zona horaria",
- "Request URL" : "URL de la petició",
- "Predefined URLs" : "URLs predefinits",
- "Files WebDAV" : "Arxius WebDAV",
- "Request user agent" : "Agent d\\'usuari de la petició",
- "Sync clients" : "Sincronitzar clients",
- "Android client" : "Client android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client d'escriptori",
- "User group membership" : "Pertinença a grup d'usuaris",
+ "Request user agent" : "Sol·licita agent d'usuari",
"is member of" : "és membre de",
- "is not member of" : "no és membre de",
- "The given operator is invalid" : "L\\'operador donat no és vàlid",
- "The given regular expression is invalid" : "L\\'expresió regular donada no és vàlida",
- "The given file size is invalid" : "El tamany de fitxer donat no és vàlid",
- "The given tag id is invalid" : "L\\'Id d'etiqueta donat no és vàlid",
- "The given IP range is invalid" : "El rang d\\'IPs donat no és vàlid",
- "The given IP range is not valid for IPv4" : "El rang d\\'IP donat no és vàlid per IPv4",
- "The given IP range is not valid for IPv6" : "El rang d\\'IP donat no és vàlid per IPv6",
- "The given time span is invalid" : "El rang de temps donat no és vàlid",
- "The given start time is invalid" : "El temps d\\'inici donat no és vàlid",
- "The given end time is invalid" : "El temps de finalització donat no és vàlid",
- "The given group does not exist" : "El grup donat no existeix",
- "Check %s is invalid or does not exist" : "Comprovació %s no és vàlida o no existeix",
- "Operation #%s does not exist" : "L\\'operació #%s no existeix",
- "Operation %s does not exist" : "L\\'operació %s no existeix",
- "Operation %s is invalid" : "L\\'operació %s no és vàlida",
- "Check %s does not exist" : "Comprovació %s no existeix",
- "Check %s is invalid" : "Comprovació %s no és vàlid",
- "Check #%s does not exist" : "Comprovació #%s no existeix",
- "Workflow" : "Flux de treball",
- "Open documentation" : "Obrir documentació",
- "Add rule group" : "Afegeix una regla de grup",
- "Short rule description" : "Descripció breu de regla",
- "Add rule" : "Afegir regla",
- "Reset" : "Resetejar",
- "Save" : "Desa",
- "Saving…" : "Desant...",
- "Loading…" : "Carregant...",
- "Successfully saved" : "S\\'ha desat correctament",
- "File mime type" : "Tipus mime de l\\'arxiu"
+ "is not member of" : "no és membre de"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/cs.js b/apps/workflowengine/l10n/cs.js
index 50cf2affb0b..3c189dc2c53 100644
--- a/apps/workflowengine/l10n/cs.js
+++ b/apps/workflowengine/l10n/cs.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Uloženo",
- "Saving failed:" : "Ukládání selhalo:",
- "File MIME type" : "MIME typ souboru",
- "is" : "je",
- "is not" : "není",
+ "The given operator is invalid" : "Zadaný operátor není platný",
+ "The given regular expression is invalid" : "Zadaný regulární výraz není platný",
+ "The given file size is invalid" : "Zadaná velikost souboru není platná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku není platný",
+ "The given IP range is invalid" : "Zadaný rozsah IP adres není platný",
+ "The given IP range is not valid for IPv4" : "Zadaný rozsah IP adres není pro IPv4 platný",
+ "The given IP range is not valid for IPv6" : "Zadaný rozsah IP adres není pro IPv6 platný",
+ "The given time span is invalid" : "Zadaný časový rozsah není platný",
+ "The given start time is invalid" : "Zadaný počáteční čas není platný",
+ "The given end time is invalid" : "Zadaný koncový čas není platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "File" : "Soubor",
+ "File created" : "Soubor vytvořen",
+ "File updated" : "Soubor aktualizován",
+ "File renamed" : "Soubor přejmenován",
+ "File deleted" : "Soubor smazán",
+ "File accessed" : "K souboru přistoupeno",
+ "File copied" : "Soubor zkopírován",
+ "Tag assigned" : "Štítek přiřazen",
+ "Someone" : "Někdo",
+ "%s created %s" : "%s vytvořeno %s",
+ "%s modified %s" : "%s změněno %s",
+ "%s deleted %s" : "%s smazáno %s",
+ "%s accessed %s" : "%s přistoupeno k %s",
+ "%s renamed %s" : "%s přejmenováno %s",
+ "%s copied %s" : "%s zkopírováno %s",
+ "%s assigned %s to %s" : "%s přiřazeno %s k %s",
+ "Operation #%s does not exist" : "Operace č. %s neexistuje",
+ "Entity %s does not exist" : "Entita %s neexistuje",
+ "Entity %s is invalid" : "Entita %s není platná",
+ "No events are chosen." : "Nejsou zvolené žádné události",
+ "Entity %s has no event %s" : "Entita %s nemá žádnou událost %s",
+ "Operation %s does not exist" : "Operace %s neexistuje",
+ "Operation %s is invalid" : "Operace %s není platná",
+ "At least one check needs to be provided" : "Je třeba poskytnou alespoň jednu kontrolu",
+ "The provided operation data is too long" : "Data zadané operace jsou příliš objemná",
+ "Invalid check provided" : "Zadána neplatná kontrola",
+ "Check %s does not exist" : "Kontrola %s neexistuje",
+ "Check %s is invalid" : "Kontrola %s není platná",
+ "Check %s is not allowed with this entity" : "Zaškrtnutí %s není u této entity povoleno",
+ "The provided check value is too long" : "Zadaná hodnota kontroly je příliš dlouhá",
+ "Check #%s does not exist" : "Kontrola č. %s neexistuje",
+ "Check %s is invalid or does not exist" : "Kontrola %s není platná, nebo neexistuje",
+ "Flow" : "Tok",
+ "Nextcloud workflow engine" : "Nextcloud engine pro pracovní postupy",
+ "Select a filter" : "Vybrat filtr",
+ "Select a comparator" : "Vyberte porovnání",
+ "Remove filter" : "Odebrat filtr",
+ "Folder" : "Složka",
+ "Images" : "Obrázky",
+ "Office documents" : "Kancelářské dokumenty",
+ "PDF documents" : "PDF dokumenty",
+ "Custom MIME type" : "Uživatelsky určený MIME typ",
+ "Custom mimetype" : "Uživatelsky určený mimetyp",
+ "Select a file type" : "Vybrat typ souboru",
+ "e.g. httpd/unix-directory" : "např. httpd/unix-directory",
+ "Please enter a valid time span" : "Zadejte platné časové rozmezí",
+ "Files WebDAV" : "Soubory WebDAV",
+ "Custom URL" : "Uživatelsky určená URL",
+ "Select a request URL" : "Vyberte URL požadavku",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Klient pro počítač",
+ "Thunderbird & Outlook addons" : "Doplňky pro Thunderbird a Outlook",
+ "Custom user agent" : "Uživatelem určený user agent",
+ "Select a user agent" : "Vyberte user agent",
+ "Select groups" : "Vybrat skupiny",
+ "Groups" : "Skupiny",
+ "Type to search for group …" : "Skupinu vyhledáte psaním…",
+ "Select a trigger" : "Vybrat spouštěč",
+ "At least one event must be selected" : "Je třeba vybrat alespoň jednu událost",
+ "Add new flow" : "Přidat nový tok",
+ "The configuration is invalid" : "Nastavení není platné",
+ "Active" : "Aktivní",
+ "Save" : "Uložit",
+ "When" : "Kdy",
+ "and" : "a",
+ "Add a new filter" : "Přidat nový filtr",
+ "Cancel" : "Storno",
+ "Delete" : "Smazat",
+ "Available flows" : "Toky k dispozici",
+ "For details on how to write your own flow, check out the development documentation." : "Podrobnosti o tom, jak vytvářet toky naleznete v dokumentaci pro vývojáře.",
+ "No flows installed" : "Nenaistalované žádné toky",
+ "Ask your administrator to install new flows." : "Požádejte správce vámi využívané instance o instalaci nových toků.",
+ "More flows" : "Další toky",
+ "Browse the App Store" : "Procházet katalog aplikací",
+ "Show less" : "Zobrazit méně",
+ "Show more" : "Zobrazit více",
+ "Configured flows" : "Nastavené toky",
+ "Your flows" : "Vaše toky",
+ "No flows configured" : "Nenastaveny žádné toky",
"matches" : "odpovídá",
"does not match" : "neodpovídá",
- "Example: {placeholder}" : "Příklad: {placeholder}",
+ "is" : "je",
+ "is not" : "není",
+ "File name" : "Název souboru",
+ "File MIME type" : "MIME typ souboru",
"File size (upload)" : "Velikost souboru (nahráno)",
"less" : "menší",
"less or equals" : "menší nebo rovno",
"greater or equals" : "větší nebo rovno",
"greater" : "větší",
- "File system tag" : "Štítek souborového systému",
- "is tagged with" : "je označen",
- "is not tagged with" : "není označen",
- "Select tag…" : "vybrat značku…",
"Request remote address" : "Vzdálená adresa požadavku",
"matches IPv4" : "odpovídá IPv4",
"does not match IPv4" : "neodpovídá IPv4",
"matches IPv6" : "odpovídá IPv6",
"does not match IPv6" : "neodpovídá IPv6",
+ "File system tag" : "Štítek souborového systému",
+ "is tagged with" : "je označeno štítkem",
+ "is not tagged with" : "není označeno štítkem",
+ "Request URL" : "URL požadavku",
"Request time" : "Čas požadavku",
"between" : "mezi",
"not between" : "není mezi",
- "Start" : "Začátek",
- "End" : "Konec",
- "Select timezone…" : "Vybrat časové pásmo…",
- "Request URL" : "URL požadavku",
- "Predefined URLs" : "Předdefinované URL",
- "Files WebDAV" : "Soubory WebDAV",
"Request user agent" : "User agent požadavku",
- "Sync clients" : "Synchronizační klienti",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členství ve skupině uživatelů",
+ "Group membership" : "Členství ve skupinách",
"is member of" : "je členem",
- "is not member of" : "není členem",
- "The given operator is invalid" : "Zadaný operátor je neplatný",
- "The given regular expression is invalid" : "Zadaný regulární výraz je neplatný",
- "The given file size is invalid" : "Zadaná velikost souboru je neplatná",
- "The given tag id is invalid" : "Zadané id značky je neplatné",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný rozsah IP je pro IPv4 neplatný",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah není pro IPv6 platný",
- "The given time span is invalid" : "Zadaný časový rozsah je neplatný",
- "The given start time is invalid" : "Zadaný počáteční čas je neplatný",
- "The given end time is invalid" : "Zadaný koncový čas je neplatný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná, nebo neexistuje",
- "Operation #%s does not exist" : "Operace #%s neexistuje",
- "Operation %s does not exist" : "Operace %s neexistuje",
- "Operation %s is invalid" : "Operace %s je neplatná",
- "Check %s does not exist" : "Kontrola %s neexistuje",
- "Check %s is invalid" : "Kontrola %s je neplatná",
- "Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Postup práce",
- "Open documentation" : "Otevřít dokumentaci",
- "Add rule group" : "Přidat skupinu pravidel",
- "Short rule description" : "Krátký popis pravidla",
- "Add rule" : "Přidat pravidlo",
- "Reset" : "Obnovit",
- "Save" : "Uložit",
- "Saving…" : "Ukládání…",
- "Loading…" : "Načítání…",
- "Successfully saved" : "Úspěšně uloženo",
- "File mime type" : "Mime typ souboru"
+ "is not member of" : "není členem"
},
-"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
+"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");
diff --git a/apps/workflowengine/l10n/cs.json b/apps/workflowengine/l10n/cs.json
index 82ba8a80639..1c3dee3c231 100644
--- a/apps/workflowengine/l10n/cs.json
+++ b/apps/workflowengine/l10n/cs.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "Uloženo",
- "Saving failed:" : "Ukládání selhalo:",
- "File MIME type" : "MIME typ souboru",
- "is" : "je",
- "is not" : "není",
+ "The given operator is invalid" : "Zadaný operátor není platný",
+ "The given regular expression is invalid" : "Zadaný regulární výraz není platný",
+ "The given file size is invalid" : "Zadaná velikost souboru není platná",
+ "The given tag id is invalid" : "Zadaný identifikátor štítku není platný",
+ "The given IP range is invalid" : "Zadaný rozsah IP adres není platný",
+ "The given IP range is not valid for IPv4" : "Zadaný rozsah IP adres není pro IPv4 platný",
+ "The given IP range is not valid for IPv6" : "Zadaný rozsah IP adres není pro IPv6 platný",
+ "The given time span is invalid" : "Zadaný časový rozsah není platný",
+ "The given start time is invalid" : "Zadaný počáteční čas není platný",
+ "The given end time is invalid" : "Zadaný koncový čas není platný",
+ "The given group does not exist" : "Zadaná skupina neexistuje",
+ "File" : "Soubor",
+ "File created" : "Soubor vytvořen",
+ "File updated" : "Soubor aktualizován",
+ "File renamed" : "Soubor přejmenován",
+ "File deleted" : "Soubor smazán",
+ "File accessed" : "K souboru přistoupeno",
+ "File copied" : "Soubor zkopírován",
+ "Tag assigned" : "Štítek přiřazen",
+ "Someone" : "Někdo",
+ "%s created %s" : "%s vytvořeno %s",
+ "%s modified %s" : "%s změněno %s",
+ "%s deleted %s" : "%s smazáno %s",
+ "%s accessed %s" : "%s přistoupeno k %s",
+ "%s renamed %s" : "%s přejmenováno %s",
+ "%s copied %s" : "%s zkopírováno %s",
+ "%s assigned %s to %s" : "%s přiřazeno %s k %s",
+ "Operation #%s does not exist" : "Operace č. %s neexistuje",
+ "Entity %s does not exist" : "Entita %s neexistuje",
+ "Entity %s is invalid" : "Entita %s není platná",
+ "No events are chosen." : "Nejsou zvolené žádné události",
+ "Entity %s has no event %s" : "Entita %s nemá žádnou událost %s",
+ "Operation %s does not exist" : "Operace %s neexistuje",
+ "Operation %s is invalid" : "Operace %s není platná",
+ "At least one check needs to be provided" : "Je třeba poskytnou alespoň jednu kontrolu",
+ "The provided operation data is too long" : "Data zadané operace jsou příliš objemná",
+ "Invalid check provided" : "Zadána neplatná kontrola",
+ "Check %s does not exist" : "Kontrola %s neexistuje",
+ "Check %s is invalid" : "Kontrola %s není platná",
+ "Check %s is not allowed with this entity" : "Zaškrtnutí %s není u této entity povoleno",
+ "The provided check value is too long" : "Zadaná hodnota kontroly je příliš dlouhá",
+ "Check #%s does not exist" : "Kontrola č. %s neexistuje",
+ "Check %s is invalid or does not exist" : "Kontrola %s není platná, nebo neexistuje",
+ "Flow" : "Tok",
+ "Nextcloud workflow engine" : "Nextcloud engine pro pracovní postupy",
+ "Select a filter" : "Vybrat filtr",
+ "Select a comparator" : "Vyberte porovnání",
+ "Remove filter" : "Odebrat filtr",
+ "Folder" : "Složka",
+ "Images" : "Obrázky",
+ "Office documents" : "Kancelářské dokumenty",
+ "PDF documents" : "PDF dokumenty",
+ "Custom MIME type" : "Uživatelsky určený MIME typ",
+ "Custom mimetype" : "Uživatelsky určený mimetyp",
+ "Select a file type" : "Vybrat typ souboru",
+ "e.g. httpd/unix-directory" : "např. httpd/unix-directory",
+ "Please enter a valid time span" : "Zadejte platné časové rozmezí",
+ "Files WebDAV" : "Soubory WebDAV",
+ "Custom URL" : "Uživatelsky určená URL",
+ "Select a request URL" : "Vyberte URL požadavku",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Klient pro počítač",
+ "Thunderbird & Outlook addons" : "Doplňky pro Thunderbird a Outlook",
+ "Custom user agent" : "Uživatelem určený user agent",
+ "Select a user agent" : "Vyberte user agent",
+ "Select groups" : "Vybrat skupiny",
+ "Groups" : "Skupiny",
+ "Type to search for group …" : "Skupinu vyhledáte psaním…",
+ "Select a trigger" : "Vybrat spouštěč",
+ "At least one event must be selected" : "Je třeba vybrat alespoň jednu událost",
+ "Add new flow" : "Přidat nový tok",
+ "The configuration is invalid" : "Nastavení není platné",
+ "Active" : "Aktivní",
+ "Save" : "Uložit",
+ "When" : "Kdy",
+ "and" : "a",
+ "Add a new filter" : "Přidat nový filtr",
+ "Cancel" : "Storno",
+ "Delete" : "Smazat",
+ "Available flows" : "Toky k dispozici",
+ "For details on how to write your own flow, check out the development documentation." : "Podrobnosti o tom, jak vytvářet toky naleznete v dokumentaci pro vývojáře.",
+ "No flows installed" : "Nenaistalované žádné toky",
+ "Ask your administrator to install new flows." : "Požádejte správce vámi využívané instance o instalaci nových toků.",
+ "More flows" : "Další toky",
+ "Browse the App Store" : "Procházet katalog aplikací",
+ "Show less" : "Zobrazit méně",
+ "Show more" : "Zobrazit více",
+ "Configured flows" : "Nastavené toky",
+ "Your flows" : "Vaše toky",
+ "No flows configured" : "Nenastaveny žádné toky",
"matches" : "odpovídá",
"does not match" : "neodpovídá",
- "Example: {placeholder}" : "Příklad: {placeholder}",
+ "is" : "je",
+ "is not" : "není",
+ "File name" : "Název souboru",
+ "File MIME type" : "MIME typ souboru",
"File size (upload)" : "Velikost souboru (nahráno)",
"less" : "menší",
"less or equals" : "menší nebo rovno",
"greater or equals" : "větší nebo rovno",
"greater" : "větší",
- "File system tag" : "Štítek souborového systému",
- "is tagged with" : "je označen",
- "is not tagged with" : "není označen",
- "Select tag…" : "vybrat značku…",
"Request remote address" : "Vzdálená adresa požadavku",
"matches IPv4" : "odpovídá IPv4",
"does not match IPv4" : "neodpovídá IPv4",
"matches IPv6" : "odpovídá IPv6",
"does not match IPv6" : "neodpovídá IPv6",
+ "File system tag" : "Štítek souborového systému",
+ "is tagged with" : "je označeno štítkem",
+ "is not tagged with" : "není označeno štítkem",
+ "Request URL" : "URL požadavku",
"Request time" : "Čas požadavku",
"between" : "mezi",
"not between" : "není mezi",
- "Start" : "Začátek",
- "End" : "Konec",
- "Select timezone…" : "Vybrat časové pásmo…",
- "Request URL" : "URL požadavku",
- "Predefined URLs" : "Předdefinované URL",
- "Files WebDAV" : "Soubory WebDAV",
"Request user agent" : "User agent požadavku",
- "Sync clients" : "Synchronizační klienti",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členství ve skupině uživatelů",
+ "Group membership" : "Členství ve skupinách",
"is member of" : "je členem",
- "is not member of" : "není členem",
- "The given operator is invalid" : "Zadaný operátor je neplatný",
- "The given regular expression is invalid" : "Zadaný regulární výraz je neplatný",
- "The given file size is invalid" : "Zadaná velikost souboru je neplatná",
- "The given tag id is invalid" : "Zadané id značky je neplatné",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný rozsah IP je pro IPv4 neplatný",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah není pro IPv6 platný",
- "The given time span is invalid" : "Zadaný časový rozsah je neplatný",
- "The given start time is invalid" : "Zadaný počáteční čas je neplatný",
- "The given end time is invalid" : "Zadaný koncový čas je neplatný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná, nebo neexistuje",
- "Operation #%s does not exist" : "Operace #%s neexistuje",
- "Operation %s does not exist" : "Operace %s neexistuje",
- "Operation %s is invalid" : "Operace %s je neplatná",
- "Check %s does not exist" : "Kontrola %s neexistuje",
- "Check %s is invalid" : "Kontrola %s je neplatná",
- "Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Postup práce",
- "Open documentation" : "Otevřít dokumentaci",
- "Add rule group" : "Přidat skupinu pravidel",
- "Short rule description" : "Krátký popis pravidla",
- "Add rule" : "Přidat pravidlo",
- "Reset" : "Obnovit",
- "Save" : "Uložit",
- "Saving…" : "Ukládání…",
- "Loading…" : "Načítání…",
- "Successfully saved" : "Úspěšně uloženo",
- "File mime type" : "Mime typ souboru"
-},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+ "is not member of" : "není členem"
+},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/cs_CZ.js b/apps/workflowengine/l10n/cs_CZ.js
deleted file mode 100644
index 68c6e7225d9..00000000000
--- a/apps/workflowengine/l10n/cs_CZ.js
+++ /dev/null
@@ -1,71 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Successfully saved" : "Úspěšně uloženo",
- "Saving failed:" : "Ukládání selhalo:",
- "File mime type" : "Mime typ souboru",
- "is" : "je",
- "is not" : "není",
- "matches" : "odpovídá",
- "does not match" : "neodpovídá",
- "Example: {placeholder}" : "Příklad: {placeholder}",
- "File size (upload)" : "Velikost souboru (nahráno)",
- "less" : "menší",
- "less or equals" : "menší nebo rovno",
- "greater or equals" : "větší nebo rovno",
- "greater" : "větší",
- "File system tag" : "Štítek souborového systému",
- "is tagged with" : "je označen",
- "is not tagged with" : "není označen",
- "Select tag…" : "vybrat značku…",
- "Request remote address" : "Vzdálená adresa požadavku",
- "matches IPv4" : "odpovídá IPv4",
- "does not match IPv4" : "neodpovídá IPv4",
- "matches IPv6" : "odpovídá IPv6",
- "does not match IPv6" : "neodpovídá IPv6",
- "Request time" : "Čas požadavku",
- "between" : "mezi",
- "not between" : "není mezi",
- "Start" : "Začátek",
- "End" : "Konec",
- "Select timezone…" : "Vybrat časové pásmo…",
- "Request URL" : "URL požadavku",
- "Predefined URLs" : "Předdefinované URL",
- "Files WebDAV" : "Soubory WebDAV",
- "Request user agent" : "User agent požadavku",
- "Sync clients" : "Synchronizační klienti",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členství ve skupině uživatelů",
- "is member of" : "je členem",
- "is not member of" : "není členem",
- "The given operator is invalid" : "Zadaný operátor je neplatný",
- "The given regular expression is invalid" : "Zadaný regulární výraz je neplatný",
- "The given file size is invalid" : "Zadaná velikost souboru je neplatná",
- "The given tag id is invalid" : "Zadané id značky je neplatné",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný rozsah IP je pro IPv4 neplatný",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah není pro IPv6 platný",
- "The given time span is invalid" : "Zadaný časový rozsah je neplatný",
- "The given start time is invalid" : "Zadaný počáteční čas je neplatný",
- "The given end time is invalid" : "Zadaný koncový čas je neplatný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná, nebo neexistuje",
- "Operation #%s does not exist" : "Operace #%s neexistuje",
- "Operation %s does not exist" : "Operace %s neexistuje",
- "Operation %s is invalid" : "Operace %s je neplatná",
- "Check %s does not exist" : "Kontrola %s neexistuje",
- "Check %s is invalid" : "Kontrola %s je neplatná",
- "Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Postup práce",
- "Open documentation" : "Otevřít dokumentaci",
- "Add rule group" : "Přidat skupinu pravidel",
- "Short rule description" : "Krátký popis pravidla",
- "Add rule" : "Přidat pravidlo",
- "Reset" : "Obnovit",
- "Save" : "Uložit",
- "Saving…" : "Ukládání…",
- "Loading…" : "Načítání…"
-},
-"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/cs_CZ.json b/apps/workflowengine/l10n/cs_CZ.json
deleted file mode 100644
index ea8b33d1ca6..00000000000
--- a/apps/workflowengine/l10n/cs_CZ.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{ "translations": {
- "Successfully saved" : "Úspěšně uloženo",
- "Saving failed:" : "Ukládání selhalo:",
- "File mime type" : "Mime typ souboru",
- "is" : "je",
- "is not" : "není",
- "matches" : "odpovídá",
- "does not match" : "neodpovídá",
- "Example: {placeholder}" : "Příklad: {placeholder}",
- "File size (upload)" : "Velikost souboru (nahráno)",
- "less" : "menší",
- "less or equals" : "menší nebo rovno",
- "greater or equals" : "větší nebo rovno",
- "greater" : "větší",
- "File system tag" : "Štítek souborového systému",
- "is tagged with" : "je označen",
- "is not tagged with" : "není označen",
- "Select tag…" : "vybrat značku…",
- "Request remote address" : "Vzdálená adresa požadavku",
- "matches IPv4" : "odpovídá IPv4",
- "does not match IPv4" : "neodpovídá IPv4",
- "matches IPv6" : "odpovídá IPv6",
- "does not match IPv6" : "neodpovídá IPv6",
- "Request time" : "Čas požadavku",
- "between" : "mezi",
- "not between" : "není mezi",
- "Start" : "Začátek",
- "End" : "Konec",
- "Select timezone…" : "Vybrat časové pásmo…",
- "Request URL" : "URL požadavku",
- "Predefined URLs" : "Předdefinované URL",
- "Files WebDAV" : "Soubory WebDAV",
- "Request user agent" : "User agent požadavku",
- "Sync clients" : "Synchronizační klienti",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členství ve skupině uživatelů",
- "is member of" : "je členem",
- "is not member of" : "není členem",
- "The given operator is invalid" : "Zadaný operátor je neplatný",
- "The given regular expression is invalid" : "Zadaný regulární výraz je neplatný",
- "The given file size is invalid" : "Zadaná velikost souboru je neplatná",
- "The given tag id is invalid" : "Zadané id značky je neplatné",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný rozsah IP je pro IPv4 neplatný",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah není pro IPv6 platný",
- "The given time span is invalid" : "Zadaný časový rozsah je neplatný",
- "The given start time is invalid" : "Zadaný počáteční čas je neplatný",
- "The given end time is invalid" : "Zadaný koncový čas je neplatný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná, nebo neexistuje",
- "Operation #%s does not exist" : "Operace #%s neexistuje",
- "Operation %s does not exist" : "Operace %s neexistuje",
- "Operation %s is invalid" : "Operace %s je neplatná",
- "Check %s does not exist" : "Kontrola %s neexistuje",
- "Check %s is invalid" : "Kontrola %s je neplatná",
- "Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Postup práce",
- "Open documentation" : "Otevřít dokumentaci",
- "Add rule group" : "Přidat skupinu pravidel",
- "Short rule description" : "Krátký popis pravidla",
- "Add rule" : "Přidat pravidlo",
- "Reset" : "Obnovit",
- "Save" : "Uložit",
- "Saving…" : "Ukládání…",
- "Loading…" : "Načítání…"
-},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/da.js b/apps/workflowengine/l10n/da.js
index 5fa32d9b6fa..aa280fbe2a6 100644
--- a/apps/workflowengine/l10n/da.js
+++ b/apps/workflowengine/l10n/da.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Gemt",
- "Saving failed:" : "Kunne ikke gemme:",
- "File MIME type" : "Fil MIME type",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "er lig med",
- "does not match" : "er ikke lig med",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (upload)",
- "less" : "mindre",
- "less or equals" : "mindre eller lig med",
- "greater or equals" : "større eller lig med",
- "greater" : "større",
- "File system tag" : "Filsystem markering",
- "is tagged with" : "er markeret med",
- "is not tagged with" : "er ikke markeret med",
- "Select tag…" : "Vælg markering",
- "Request remote address" : "Forespørg bruger adresse",
- "matches IPv4" : "er lig med IPv4",
- "does not match IPv4" : "er ikke lig med IPv4",
- "matches IPv6" : "er lig med IPv6",
- "does not match IPv6" : "er ikke lig med IPv6",
- "Request time" : "Kald tid",
- "between" : "mellem",
- "not between" : "ikke mellem",
- "Start" : "Start",
- "End" : "Stop",
- "Select timezone…" : "Vælg tidszone...",
- "Request URL" : "Forespurgt URL",
- "Predefined URLs" : "Foruddefineret URLer",
- "Files WebDAV" : "Fil WebDAV",
- "Request user agent" : "Bruger \"user agent\"",
- "Sync clients" : "Synkronisering klienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Dekstop klient",
- "User group membership" : "Brugers gruppemedlemsskab",
- "is member of" : "er medlem af",
- "is not member of" : "er ikke medlem af",
"The given operator is invalid" : "Den givne operator er invalid",
"The given regular expression is invalid" : "Det givne regulære udtryk er invalidt",
"The given file size is invalid" : "Den givne filstørrelse er invalid",
@@ -51,23 +12,56 @@ OC.L10N.register(
"The given start time is invalid" : "Den givne starttid er invalid",
"The given end time is invalid" : "Den givne sluttid er invalid",
"The given group does not exist" : "Den givne gruppe eksisterer ikke",
- "Check %s is invalid or does not exist" : "Tjek %s er invalid eller eksisterer ikke",
+ "File" : "Fil",
"Operation #%s does not exist" : "Operation #%s eksisterer ikke",
"Operation %s does not exist" : "Operation %s eksisterer ikke",
"Operation %s is invalid" : "Operation %s er invalid",
"Check %s does not exist" : "Tjek %s eksisterer ikke",
"Check %s is invalid" : "Tjek %s er invalid",
"Check #%s does not exist" : "Tjek #%s eksisterer",
- "Workflow" : "Workflow",
- "Open documentation" : "Åben dokumentationen",
- "Add rule group" : "Tilføj regelgruppe",
- "Short rule description" : "Kort regelbeskrivelse",
- "Add rule" : "Tilføj regel",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Tjek %s er invalid eller eksisterer ikke",
+ "Flow" : "Flow",
+ "Remove filter" : "Fjern filter",
+ "Folder" : "Mappe",
+ "Images" : "Billeder",
+ "Files WebDAV" : "Fil WebDAV",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Dekstop klient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook tilføjelser",
+ "Select groups" : "Vælg grupper",
+ "Groups" : "Grupper",
"Save" : "Gem",
- "Saving…" : "Gemmer...",
- "Loading…" : "Indlæser...",
- "Successfully saved" : "Succesfuld gemt ",
- "File mime type" : "Fil MIME type"
+ "and" : "og",
+ "Cancel" : "Annuller",
+ "Delete" : "Slet",
+ "Browse the App Store" : "Gennemse App Store",
+ "Show less" : "Vis mindre",
+ "matches" : "er lig med",
+ "does not match" : "er ikke lig med",
+ "is" : "er",
+ "is not" : "er ikke",
+ "File name" : "Filnavn",
+ "File MIME type" : "Fil MIME type",
+ "File size (upload)" : "Filstørrelse (upload)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller lig med",
+ "greater or equals" : "større eller lig med",
+ "greater" : "større",
+ "Request remote address" : "Forespørg bruger adresse",
+ "matches IPv4" : "er lig med IPv4",
+ "does not match IPv4" : "er ikke lig med IPv4",
+ "matches IPv6" : "er lig med IPv6",
+ "does not match IPv6" : "er ikke lig med IPv6",
+ "File system tag" : "Filsystem markering",
+ "is tagged with" : "er markeret med",
+ "is not tagged with" : "er ikke markeret med",
+ "Request URL" : "Forespurgt URL",
+ "Request time" : "Kald tid",
+ "between" : "mellem",
+ "not between" : "ikke mellem",
+ "Request user agent" : "Bruger \"user agent\"",
+ "is member of" : "er medlem af",
+ "is not member of" : "er ikke medlem af"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/da.json b/apps/workflowengine/l10n/da.json
index afc9bc2ec30..4a1c48b870f 100644
--- a/apps/workflowengine/l10n/da.json
+++ b/apps/workflowengine/l10n/da.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Gemt",
- "Saving failed:" : "Kunne ikke gemme:",
- "File MIME type" : "Fil MIME type",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "er lig med",
- "does not match" : "er ikke lig med",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (upload)",
- "less" : "mindre",
- "less or equals" : "mindre eller lig med",
- "greater or equals" : "større eller lig med",
- "greater" : "større",
- "File system tag" : "Filsystem markering",
- "is tagged with" : "er markeret med",
- "is not tagged with" : "er ikke markeret med",
- "Select tag…" : "Vælg markering",
- "Request remote address" : "Forespørg bruger adresse",
- "matches IPv4" : "er lig med IPv4",
- "does not match IPv4" : "er ikke lig med IPv4",
- "matches IPv6" : "er lig med IPv6",
- "does not match IPv6" : "er ikke lig med IPv6",
- "Request time" : "Kald tid",
- "between" : "mellem",
- "not between" : "ikke mellem",
- "Start" : "Start",
- "End" : "Stop",
- "Select timezone…" : "Vælg tidszone...",
- "Request URL" : "Forespurgt URL",
- "Predefined URLs" : "Foruddefineret URLer",
- "Files WebDAV" : "Fil WebDAV",
- "Request user agent" : "Bruger \"user agent\"",
- "Sync clients" : "Synkronisering klienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Dekstop klient",
- "User group membership" : "Brugers gruppemedlemsskab",
- "is member of" : "er medlem af",
- "is not member of" : "er ikke medlem af",
"The given operator is invalid" : "Den givne operator er invalid",
"The given regular expression is invalid" : "Det givne regulære udtryk er invalidt",
"The given file size is invalid" : "Den givne filstørrelse er invalid",
@@ -49,23 +10,56 @@
"The given start time is invalid" : "Den givne starttid er invalid",
"The given end time is invalid" : "Den givne sluttid er invalid",
"The given group does not exist" : "Den givne gruppe eksisterer ikke",
- "Check %s is invalid or does not exist" : "Tjek %s er invalid eller eksisterer ikke",
+ "File" : "Fil",
"Operation #%s does not exist" : "Operation #%s eksisterer ikke",
"Operation %s does not exist" : "Operation %s eksisterer ikke",
"Operation %s is invalid" : "Operation %s er invalid",
"Check %s does not exist" : "Tjek %s eksisterer ikke",
"Check %s is invalid" : "Tjek %s er invalid",
"Check #%s does not exist" : "Tjek #%s eksisterer",
- "Workflow" : "Workflow",
- "Open documentation" : "Åben dokumentationen",
- "Add rule group" : "Tilføj regelgruppe",
- "Short rule description" : "Kort regelbeskrivelse",
- "Add rule" : "Tilføj regel",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Tjek %s er invalid eller eksisterer ikke",
+ "Flow" : "Flow",
+ "Remove filter" : "Fjern filter",
+ "Folder" : "Mappe",
+ "Images" : "Billeder",
+ "Files WebDAV" : "Fil WebDAV",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Dekstop klient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook tilføjelser",
+ "Select groups" : "Vælg grupper",
+ "Groups" : "Grupper",
"Save" : "Gem",
- "Saving…" : "Gemmer...",
- "Loading…" : "Indlæser...",
- "Successfully saved" : "Succesfuld gemt ",
- "File mime type" : "Fil MIME type"
+ "and" : "og",
+ "Cancel" : "Annuller",
+ "Delete" : "Slet",
+ "Browse the App Store" : "Gennemse App Store",
+ "Show less" : "Vis mindre",
+ "matches" : "er lig med",
+ "does not match" : "er ikke lig med",
+ "is" : "er",
+ "is not" : "er ikke",
+ "File name" : "Filnavn",
+ "File MIME type" : "Fil MIME type",
+ "File size (upload)" : "Filstørrelse (upload)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller lig med",
+ "greater or equals" : "større eller lig med",
+ "greater" : "større",
+ "Request remote address" : "Forespørg bruger adresse",
+ "matches IPv4" : "er lig med IPv4",
+ "does not match IPv4" : "er ikke lig med IPv4",
+ "matches IPv6" : "er lig med IPv6",
+ "does not match IPv6" : "er ikke lig med IPv6",
+ "File system tag" : "Filsystem markering",
+ "is tagged with" : "er markeret med",
+ "is not tagged with" : "er ikke markeret med",
+ "Request URL" : "Forespurgt URL",
+ "Request time" : "Kald tid",
+ "between" : "mellem",
+ "not between" : "ikke mellem",
+ "Request user agent" : "Bruger \"user agent\"",
+ "is member of" : "er medlem af",
+ "is not member of" : "er ikke medlem af"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/de.js b/apps/workflowengine/l10n/de.js
index a5bc99a1f70..761beaa28d9 100644
--- a/apps/workflowengine/l10n/de.js
+++ b/apps/workflowengine/l10n/de.js
@@ -1,49 +1,10 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Gespeichert",
- "Saving failed:" : "Speichern fehlgeschlagen:",
- "File MIME type" : "Datei MIME-Typ",
- "is" : "ist",
- "is not" : "ist nicht",
- "matches" : "entspricht",
- "does not match" : "entspricht nicht",
- "Example: {placeholder}" : "Beispiel: {placeholder}",
- "File size (upload)" : "Dateigröße (beim Hochladen)",
- "less" : "weniger",
- "less or equals" : "weniger oder gleich",
- "greater or equals" : "größer oder gleich",
- "greater" : "größer",
- "File system tag" : "Dateisystem-Tag",
- "is tagged with" : "hat den Tag",
- "is not tagged with" : "hat nicht den Tag",
- "Select tag…" : "Wähle einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
- "matches IPv4" : "entspricht IPv4",
- "does not match IPv4" : "entspricht nicht IPv4",
- "matches IPv6" : "entspricht IPv6",
- "does not match IPv6" : "entspricht nicht IPv6",
- "Request time" : "Anfrage-Zeitpunkt",
- "between" : "zwischen",
- "not between" : "nicht zwischen",
- "Start" : "Start",
- "End" : "Ende",
- "Select timezone…" : "Wähle eine Zeitzone…",
- "Request URL" : "Anfrage-URL",
- "Predefined URLs" : "Vordefinierte URLs",
- "Files WebDAV" : "WebDAV für Dateien",
- "Request user agent" : "User-Agent",
- "Sync clients" : "Sync-Clients",
- "Android client" : "Android-Client",
- "iOS client" : "iOS-Client",
- "Desktop client" : "Desktop-Client",
- "User group membership" : "Benutzergruppen-Mitgliedschaft",
- "is member of" : "ist Mitglied von",
- "is not member of" : "ist kein Mitglied von",
"The given operator is invalid" : "Der angegebene Operator ist ungültig",
"The given regular expression is invalid" : "Der angegebene Reguläre Ausdruck ist ungültig",
"The given file size is invalid" : "Die angegebene Dateigröße ist ungültig",
- "The given tag id is invalid" : "Die angegebene Tag ID ist ungültig",
+ "The given tag id is invalid" : "Die angegebene Tag-ID ist ungültig",
"The given IP range is invalid" : "Der angegebene IP-Bereich ist ungültig",
"The given IP range is not valid for IPv4" : "Der angegebene IP-Bereich ist ungültig für IPv4",
"The given IP range is not valid for IPv6" : "Der angegebene IP-Bereich ist ungültig für IPv6",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Die angegebene Anfangszeit ist ungültig",
"The given end time is invalid" : "Die angegebene Endzeit ist ungültig",
"The given group does not exist" : "Die angegebene Gruppe existiert nicht",
- "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "File" : "Datei",
+ "File created" : "Datei erstellt",
+ "File updated" : "Datei aktualisiert",
+ "File renamed" : "Datei umbenannt",
+ "File deleted" : "Datei gelöscht",
+ "File accessed" : "Auf Datei zugegriffen",
+ "File copied" : "Datei kopiert",
+ "Tag assigned" : "Schlagwort zugewiesen",
+ "Someone" : "Irgendjemand",
+ "%s created %s" : "%s hat %s erstellt",
+ "%s modified %s" : "%s hat %s geändert",
+ "%s deleted %s" : "%s hat %s gelöscht",
+ "%s accessed %s" : "%s hat auf %s zugegriffen ",
+ "%s renamed %s" : "%s hat %s umbenannt",
+ "%s copied %s" : "%s hat %s kopiert",
+ "%s assigned %s to %s" : "%s hat %s zugewiesen an %s",
"Operation #%s does not exist" : "Operation #%s existert nicht",
+ "Entity %s does not exist" : "Entität %s existiert nicht",
+ "Entity %s is invalid" : "Entität %s ist ungültig",
+ "No events are chosen." : "Kein Ereignis ausgewählt.",
+ "Entity %s has no event %s" : "Die Entität %s hat kein Ereignis %s",
"Operation %s does not exist" : "Operation %s existert nicht",
"Operation %s is invalid" : "Operation %s ist ungültig",
+ "At least one check needs to be provided" : "Mindestens ein Test muss bereitgestellt werden",
+ "The provided operation data is too long" : "Die bereitgestellten Betriebsdaten sind zu lang",
+ "Invalid check provided" : "Ungültiger Test bereitgestellt",
"Check %s does not exist" : "Die Prüfung %s existiert nicht",
"Check %s is invalid" : "Die Prüfung %s ist ungültig",
+ "Check %s is not allowed with this entity" : "Die Prüfung %s ist mit dieser Entität unzulässig",
+ "The provided check value is too long" : "Der bereitgestellte Prüfwert ist zu lang",
"Check #%s does not exist" : "Die Prüfung #%s existiert nicht",
- "Workflow" : "Workflow",
- "Open documentation" : "Dokumentation öffnen",
- "Add rule group" : "Regelgruppe hinzufügen",
- "Short rule description" : "Kurze Regelbeschreibung",
- "Add rule" : "Regel hinzufügen",
- "Reset" : "Zurücksetzen",
+ "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "Flow" : "Ablauf",
+ "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine",
+ "Select a filter" : "Filter auswählen",
+ "Select a comparator" : "Wähle einen Komparator",
+ "Remove filter" : "Filter entfernen",
+ "Folder" : "Ordner",
+ "Images" : "Bilder",
+ "Office documents" : "Office Dokumente",
+ "PDF documents" : "PDF-Dokumente",
+ "Custom MIME type" : "Benutzerdefinierter MIME Typ",
+ "Custom mimetype" : "Benutzerdefinierter Mime-Typ",
+ "Select a file type" : "Dateityp auswählen",
+ "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory",
+ "Please enter a valid time span" : "Bitte einen gültigen Zeitraum angeben",
+ "Files WebDAV" : "WebDAV für Dateien",
+ "Custom URL" : "Benutzerdefinierte URL",
+ "Select a request URL" : "Wähle eine Anforderungs-URL aus",
+ "Android client" : "Android-Client",
+ "iOS client" : "iOS-Client",
+ "Desktop client" : "Desktop-Client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook Add-ons",
+ "Custom user agent" : "Benutzerdefinierter User-Agent",
+ "Select a user agent" : "User-Agenten auswählen",
+ "Select groups" : "Gruppen auswählen",
+ "Groups" : "Gruppen",
+ "Type to search for group …" : "Tippen um nach einer Gruppe zu suchen …",
+ "Select a trigger" : "Einen Auslöser auswählen",
+ "At least one event must be selected" : "Mindestens ein Ereignis muss ausgewählt werden",
+ "Add new flow" : "Neuen Ablauf hinzufügen",
+ "The configuration is invalid" : "Die Konfiguration ist ungültig",
+ "Active" : "Aktiv",
"Save" : "Speichern",
- "Saving…" : "Speichern…",
- "Loading…" : "Laden…",
- "Successfully saved" : "Erfolgreich gespeichert",
- "File mime type" : "Datei MIME-Typ"
+ "When" : "Wenn",
+ "and" : "und",
+ "Add a new filter" : "Neuen Filter hinzufügen",
+ "Cancel" : "Abbrechen",
+ "Delete" : "Löschen",
+ "Available flows" : "Verfügbare Abläufe",
+ "For details on how to write your own flow, check out the development documentation." : "Informationen zur Erstellung eigener Abläufe finden sich in der Entwickler-Dokumentation.",
+ "No flows installed" : "Keine Abläufe installiert",
+ "Ask your administrator to install new flows." : "Bitte deine Administration, neue Abläufe zu installieren.",
+ "More flows" : "Weitere Abläufe",
+ "Browse the App Store" : "App-Store durchsuchen",
+ "Show less" : "Weniger anzeigen",
+ "Show more" : "Mehr anzeigen",
+ "Configured flows" : "Konfigurierte Abläufe",
+ "Your flows" : "Deine Abläufe",
+ "No flows configured" : "Keine Abläufe eingerichtet",
+ "matches" : "entspricht",
+ "does not match" : "entspricht nicht",
+ "is" : "ist",
+ "is not" : "ist nicht",
+ "File name" : "Dateiname",
+ "File MIME type" : "Datei MIME-Typ",
+ "File size (upload)" : "Dateigröße (beim Hochladen)",
+ "less" : "weniger",
+ "less or equals" : "weniger oder gleich",
+ "greater or equals" : "größer oder gleich",
+ "greater" : "größer",
+ "Request remote address" : "IP Adresse der Anfrage",
+ "matches IPv4" : "entspricht IPv4",
+ "does not match IPv4" : "entspricht nicht IPv4",
+ "matches IPv6" : "entspricht IPv6",
+ "does not match IPv6" : "entspricht nicht IPv6",
+ "File system tag" : "Kollaborativer Tag an Datei",
+ "is tagged with" : "ist getaggt mit",
+ "is not tagged with" : "ist nicht getaggt mit",
+ "Request URL" : "Anfrage-URL",
+ "Request time" : "Anfrage-Zeitpunkt",
+ "between" : "zwischen",
+ "not between" : "nicht zwischen",
+ "Request user agent" : "User-Agent",
+ "Group membership" : "Gruppenmitgliedschaft",
+ "is member of" : "ist Mitglied von",
+ "is not member of" : "ist kein Mitglied von"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/de.json b/apps/workflowengine/l10n/de.json
index 90e91ab1197..eca78d35353 100644
--- a/apps/workflowengine/l10n/de.json
+++ b/apps/workflowengine/l10n/de.json
@@ -1,47 +1,8 @@
{ "translations": {
- "Saved" : "Gespeichert",
- "Saving failed:" : "Speichern fehlgeschlagen:",
- "File MIME type" : "Datei MIME-Typ",
- "is" : "ist",
- "is not" : "ist nicht",
- "matches" : "entspricht",
- "does not match" : "entspricht nicht",
- "Example: {placeholder}" : "Beispiel: {placeholder}",
- "File size (upload)" : "Dateigröße (beim Hochladen)",
- "less" : "weniger",
- "less or equals" : "weniger oder gleich",
- "greater or equals" : "größer oder gleich",
- "greater" : "größer",
- "File system tag" : "Dateisystem-Tag",
- "is tagged with" : "hat den Tag",
- "is not tagged with" : "hat nicht den Tag",
- "Select tag…" : "Wähle einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
- "matches IPv4" : "entspricht IPv4",
- "does not match IPv4" : "entspricht nicht IPv4",
- "matches IPv6" : "entspricht IPv6",
- "does not match IPv6" : "entspricht nicht IPv6",
- "Request time" : "Anfrage-Zeitpunkt",
- "between" : "zwischen",
- "not between" : "nicht zwischen",
- "Start" : "Start",
- "End" : "Ende",
- "Select timezone…" : "Wähle eine Zeitzone…",
- "Request URL" : "Anfrage-URL",
- "Predefined URLs" : "Vordefinierte URLs",
- "Files WebDAV" : "WebDAV für Dateien",
- "Request user agent" : "User-Agent",
- "Sync clients" : "Sync-Clients",
- "Android client" : "Android-Client",
- "iOS client" : "iOS-Client",
- "Desktop client" : "Desktop-Client",
- "User group membership" : "Benutzergruppen-Mitgliedschaft",
- "is member of" : "ist Mitglied von",
- "is not member of" : "ist kein Mitglied von",
"The given operator is invalid" : "Der angegebene Operator ist ungültig",
"The given regular expression is invalid" : "Der angegebene Reguläre Ausdruck ist ungültig",
"The given file size is invalid" : "Die angegebene Dateigröße ist ungültig",
- "The given tag id is invalid" : "Die angegebene Tag ID ist ungültig",
+ "The given tag id is invalid" : "Die angegebene Tag-ID ist ungültig",
"The given IP range is invalid" : "Der angegebene IP-Bereich ist ungültig",
"The given IP range is not valid for IPv4" : "Der angegebene IP-Bereich ist ungültig für IPv4",
"The given IP range is not valid for IPv6" : "Der angegebene IP-Bereich ist ungültig für IPv6",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Die angegebene Anfangszeit ist ungültig",
"The given end time is invalid" : "Die angegebene Endzeit ist ungültig",
"The given group does not exist" : "Die angegebene Gruppe existiert nicht",
- "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "File" : "Datei",
+ "File created" : "Datei erstellt",
+ "File updated" : "Datei aktualisiert",
+ "File renamed" : "Datei umbenannt",
+ "File deleted" : "Datei gelöscht",
+ "File accessed" : "Auf Datei zugegriffen",
+ "File copied" : "Datei kopiert",
+ "Tag assigned" : "Schlagwort zugewiesen",
+ "Someone" : "Irgendjemand",
+ "%s created %s" : "%s hat %s erstellt",
+ "%s modified %s" : "%s hat %s geändert",
+ "%s deleted %s" : "%s hat %s gelöscht",
+ "%s accessed %s" : "%s hat auf %s zugegriffen ",
+ "%s renamed %s" : "%s hat %s umbenannt",
+ "%s copied %s" : "%s hat %s kopiert",
+ "%s assigned %s to %s" : "%s hat %s zugewiesen an %s",
"Operation #%s does not exist" : "Operation #%s existert nicht",
+ "Entity %s does not exist" : "Entität %s existiert nicht",
+ "Entity %s is invalid" : "Entität %s ist ungültig",
+ "No events are chosen." : "Kein Ereignis ausgewählt.",
+ "Entity %s has no event %s" : "Die Entität %s hat kein Ereignis %s",
"Operation %s does not exist" : "Operation %s existert nicht",
"Operation %s is invalid" : "Operation %s ist ungültig",
+ "At least one check needs to be provided" : "Mindestens ein Test muss bereitgestellt werden",
+ "The provided operation data is too long" : "Die bereitgestellten Betriebsdaten sind zu lang",
+ "Invalid check provided" : "Ungültiger Test bereitgestellt",
"Check %s does not exist" : "Die Prüfung %s existiert nicht",
"Check %s is invalid" : "Die Prüfung %s ist ungültig",
+ "Check %s is not allowed with this entity" : "Die Prüfung %s ist mit dieser Entität unzulässig",
+ "The provided check value is too long" : "Der bereitgestellte Prüfwert ist zu lang",
"Check #%s does not exist" : "Die Prüfung #%s existiert nicht",
- "Workflow" : "Workflow",
- "Open documentation" : "Dokumentation öffnen",
- "Add rule group" : "Regelgruppe hinzufügen",
- "Short rule description" : "Kurze Regelbeschreibung",
- "Add rule" : "Regel hinzufügen",
- "Reset" : "Zurücksetzen",
+ "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "Flow" : "Ablauf",
+ "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine",
+ "Select a filter" : "Filter auswählen",
+ "Select a comparator" : "Wähle einen Komparator",
+ "Remove filter" : "Filter entfernen",
+ "Folder" : "Ordner",
+ "Images" : "Bilder",
+ "Office documents" : "Office Dokumente",
+ "PDF documents" : "PDF-Dokumente",
+ "Custom MIME type" : "Benutzerdefinierter MIME Typ",
+ "Custom mimetype" : "Benutzerdefinierter Mime-Typ",
+ "Select a file type" : "Dateityp auswählen",
+ "e.g. httpd/unix-directory" : "z. B. httpd/unix-directory",
+ "Please enter a valid time span" : "Bitte einen gültigen Zeitraum angeben",
+ "Files WebDAV" : "WebDAV für Dateien",
+ "Custom URL" : "Benutzerdefinierte URL",
+ "Select a request URL" : "Wähle eine Anforderungs-URL aus",
+ "Android client" : "Android-Client",
+ "iOS client" : "iOS-Client",
+ "Desktop client" : "Desktop-Client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook Add-ons",
+ "Custom user agent" : "Benutzerdefinierter User-Agent",
+ "Select a user agent" : "User-Agenten auswählen",
+ "Select groups" : "Gruppen auswählen",
+ "Groups" : "Gruppen",
+ "Type to search for group …" : "Tippen um nach einer Gruppe zu suchen …",
+ "Select a trigger" : "Einen Auslöser auswählen",
+ "At least one event must be selected" : "Mindestens ein Ereignis muss ausgewählt werden",
+ "Add new flow" : "Neuen Ablauf hinzufügen",
+ "The configuration is invalid" : "Die Konfiguration ist ungültig",
+ "Active" : "Aktiv",
"Save" : "Speichern",
- "Saving…" : "Speichern…",
- "Loading…" : "Laden…",
- "Successfully saved" : "Erfolgreich gespeichert",
- "File mime type" : "Datei MIME-Typ"
+ "When" : "Wenn",
+ "and" : "und",
+ "Add a new filter" : "Neuen Filter hinzufügen",
+ "Cancel" : "Abbrechen",
+ "Delete" : "Löschen",
+ "Available flows" : "Verfügbare Abläufe",
+ "For details on how to write your own flow, check out the development documentation." : "Informationen zur Erstellung eigener Abläufe finden sich in der Entwickler-Dokumentation.",
+ "No flows installed" : "Keine Abläufe installiert",
+ "Ask your administrator to install new flows." : "Bitte deine Administration, neue Abläufe zu installieren.",
+ "More flows" : "Weitere Abläufe",
+ "Browse the App Store" : "App-Store durchsuchen",
+ "Show less" : "Weniger anzeigen",
+ "Show more" : "Mehr anzeigen",
+ "Configured flows" : "Konfigurierte Abläufe",
+ "Your flows" : "Deine Abläufe",
+ "No flows configured" : "Keine Abläufe eingerichtet",
+ "matches" : "entspricht",
+ "does not match" : "entspricht nicht",
+ "is" : "ist",
+ "is not" : "ist nicht",
+ "File name" : "Dateiname",
+ "File MIME type" : "Datei MIME-Typ",
+ "File size (upload)" : "Dateigröße (beim Hochladen)",
+ "less" : "weniger",
+ "less or equals" : "weniger oder gleich",
+ "greater or equals" : "größer oder gleich",
+ "greater" : "größer",
+ "Request remote address" : "IP Adresse der Anfrage",
+ "matches IPv4" : "entspricht IPv4",
+ "does not match IPv4" : "entspricht nicht IPv4",
+ "matches IPv6" : "entspricht IPv6",
+ "does not match IPv6" : "entspricht nicht IPv6",
+ "File system tag" : "Kollaborativer Tag an Datei",
+ "is tagged with" : "ist getaggt mit",
+ "is not tagged with" : "ist nicht getaggt mit",
+ "Request URL" : "Anfrage-URL",
+ "Request time" : "Anfrage-Zeitpunkt",
+ "between" : "zwischen",
+ "not between" : "nicht zwischen",
+ "Request user agent" : "User-Agent",
+ "Group membership" : "Gruppenmitgliedschaft",
+ "is member of" : "ist Mitglied von",
+ "is not member of" : "ist kein Mitglied von"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/de_DE.js b/apps/workflowengine/l10n/de_DE.js
index b667ea12e4f..882d975e932 100644
--- a/apps/workflowengine/l10n/de_DE.js
+++ b/apps/workflowengine/l10n/de_DE.js
@@ -1,49 +1,10 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Gespeichert",
- "Saving failed:" : "Speichern fehlgeschlagen:",
- "File MIME type" : "Datei MIME-Typ",
- "is" : "ist",
- "is not" : "ist nicht",
- "matches" : "entspricht",
- "does not match" : "entspricht nicht",
- "Example: {placeholder}" : "Beispiel: {placeholder}",
- "File size (upload)" : "Dateigröße (beim Hochladen)",
- "less" : "weniger",
- "less or equals" : "weniger oder gleich",
- "greater or equals" : "größer oder gleich",
- "greater" : "größer",
- "File system tag" : "Dateisystem-Tag",
- "is tagged with" : "hat den Tag",
- "is not tagged with" : "hat nicht den Tag",
- "Select tag…" : "Wählen Sie einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
- "matches IPv4" : "entspricht IPv4",
- "does not match IPv4" : "entspricht nicht IPv4",
- "matches IPv6" : "entspricht IPv6",
- "does not match IPv6" : "entspricht nicht IPv6",
- "Request time" : "Anfrage-Zeitpunkt",
- "between" : "zwischen",
- "not between" : "nicht zwischen",
- "Start" : "Start",
- "End" : "Ende",
- "Select timezone…" : "Wählen Sie die Zeitzone…",
- "Request URL" : "Anfrage-URL",
- "Predefined URLs" : "Vordefinierte URLs",
- "Files WebDAV" : "WebDAV für Dateien",
- "Request user agent" : "User-Agent",
- "Sync clients" : "Sync-Clients",
- "Android client" : "Android-Client",
- "iOS client" : "iOS-Client",
- "Desktop client" : "Desktop-Client",
- "User group membership" : "Benutzergruppen-Mitgliedschaft",
- "is member of" : "Ist Mitglied von",
- "is not member of" : "Ist kein Mitglied von",
"The given operator is invalid" : "Der angegebene Operator ist falsch",
"The given regular expression is invalid" : "Der angegebene reguläre Ausdruck ist falsch",
"The given file size is invalid" : "Die angegebene Dateigröße ist ungültig",
- "The given tag id is invalid" : "Die angegebene Tag-ID ist ungültig",
+ "The given tag id is invalid" : "Die angegebene Schlagwort-ID ist ungültig",
"The given IP range is invalid" : "Der angegebene IP-Bereich ist falsch",
"The given IP range is not valid for IPv4" : "Der angegebene IP-Bereich ist für IPv4 ungültig",
"The given IP range is not valid for IPv6" : "Der angegebene IP-Bereich ist für IPv6 ungültig",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Die angegebene Startzeit ist ungültig",
"The given end time is invalid" : "Die angegebene Endzeit ist ungültig",
"The given group does not exist" : "Die angegebene Gruppe existiert nicht",
- "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "File" : "Datei",
+ "File created" : "Datei erstellt",
+ "File updated" : "Datei aktualisiert",
+ "File renamed" : "Datei umbenannt",
+ "File deleted" : "Datei gelöscht",
+ "File accessed" : "Auf Datei zugegriffen",
+ "File copied" : "Datei kopiert",
+ "Tag assigned" : "Schlagwort zugewiesen",
+ "Someone" : "Irgendjemand",
+ "%s created %s" : "%s hat %s erstellt",
+ "%s modified %s" : "%shat %s geändert",
+ "%s deleted %s" : "%s hat %s gelöscht",
+ "%s accessed %s" : "%s hat auf %s zugegriffen",
+ "%s renamed %s" : "%shat %s umbenannt",
+ "%s copied %s" : "%s hat %s kopiert",
+ "%s assigned %s to %s" : "%s hat %s zugewiesen an %s",
"Operation #%s does not exist" : "Operation #%s existiert nicht",
+ "Entity %s does not exist" : "Entität %s existiert nicht",
+ "Entity %s is invalid" : "Entität %s ist ungültig",
+ "No events are chosen." : "Keine Ereignisse ausgewählt.",
+ "Entity %s has no event %s" : "Die Entität %s hat kein Ereignis %s",
"Operation %s does not exist" : "Operation %s existiert nicht",
"Operation %s is invalid" : "Operation %s ist ungültig",
+ "At least one check needs to be provided" : "Mindestens ein Test muss bereitgestellt werden",
+ "The provided operation data is too long" : "Die bereitgestellten Betriebsdaten sind zu lang",
+ "Invalid check provided" : "Ungültiger Test bereitgestellt",
"Check %s does not exist" : "Die Prüfung %s existiert nicht",
"Check %s is invalid" : "Die Prüfung %s ist ungültig",
+ "Check %s is not allowed with this entity" : "Die Prüfung %s ist mit dieser Entität unzulässig",
+ "The provided check value is too long" : "Der bereitgestellte Prüfwert ist zu lang",
"Check #%s does not exist" : "Die Prüfung #%s existiert nicht",
- "Workflow" : "Workflow",
- "Open documentation" : "Dokumentation öffnen",
- "Add rule group" : "Regelgruppe hinzufügen",
- "Short rule description" : "Kurze Regelbeschreibung",
- "Add rule" : "Regel hinzufügen",
- "Reset" : "Zurücksetzen",
+ "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "Flow" : "Ablauf",
+ "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine",
+ "Select a filter" : "Filter wählen",
+ "Select a comparator" : "Wählen Sie einen Komparator",
+ "Remove filter" : "Filter entfernen",
+ "Folder" : "Ordner",
+ "Images" : "Bilder",
+ "Office documents" : "Office-Dokumente",
+ "PDF documents" : "PDF-Dokumente",
+ "Custom MIME type" : "Benutzerdefinierter MIME Typ",
+ "Custom mimetype" : "Benutzerdefinierter MIME-Typ",
+ "Select a file type" : "Dateityp auswählen",
+ "e.g. httpd/unix-directory" : "z.B. httpd/unix-directory",
+ "Please enter a valid time span" : "Bitte einen gültigen Zeitraum angeben",
+ "Files WebDAV" : "WebDAV für Dateien",
+ "Custom URL" : "Benutzerdefinierte URL",
+ "Select a request URL" : "Wählen Sie eine Anforderungs-URL aus",
+ "Android client" : "Android-Client",
+ "iOS client" : "iOS-Client",
+ "Desktop client" : "Desktop-Client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook Addons",
+ "Custom user agent" : "Benutzerdefinierter User-Agent",
+ "Select a user agent" : "User-Agenten wählen",
+ "Select groups" : "Gruppen auswählen",
+ "Groups" : "Gruppen",
+ "Type to search for group …" : "Tippen um nach einer Gruppe zu suchen …",
+ "Select a trigger" : "Einen Auslöser auswählen",
+ "At least one event must be selected" : "Mindestens ein Termin muss ausgewählt werden",
+ "Add new flow" : "Neuen Ablauf hinzufügen",
+ "The configuration is invalid" : "Die Konfiguration ist ungültig",
+ "Active" : "Aktiv",
"Save" : "Speichern",
- "Saving…" : "Speichern…",
- "Loading…" : "Laden…",
- "Successfully saved" : "Erfolgreich gespeichert",
- "File mime type" : "Datei MIME-Typ"
+ "When" : "Wenn",
+ "and" : "und",
+ "Add a new filter" : "Neuen Filter hinzufügen",
+ "Cancel" : "Abbrechen",
+ "Delete" : "Löschen",
+ "Available flows" : "Verfügbare Abläufe",
+ "For details on how to write your own flow, check out the development documentation." : "Informationen wie eigene Abläufe erstellt werden, finden Sie in der Entwickler-Dokumentation.",
+ "No flows installed" : "Keine Abläufe installiert",
+ "Ask your administrator to install new flows." : "Bitten Sie Ihre Administration, neue Abläufe zu installieren.",
+ "More flows" : "Weitere Abläufe",
+ "Browse the App Store" : "App-Store durchsuchen",
+ "Show less" : "Weniger anzeigen",
+ "Show more" : "Mehr anzeigen",
+ "Configured flows" : "Konfigurierte Abläufe",
+ "Your flows" : "Ihre Abläufe",
+ "No flows configured" : "Keine Abläufe eingerichtet",
+ "matches" : "entspricht",
+ "does not match" : "entspricht nicht",
+ "is" : "ist",
+ "is not" : "ist nicht",
+ "File name" : "Dateiname",
+ "File MIME type" : "Datei MIME-Typ",
+ "File size (upload)" : "Dateigröße (beim Hochladen)",
+ "less" : "weniger",
+ "less or equals" : "weniger oder gleich",
+ "greater or equals" : "größer oder gleich",
+ "greater" : "größer",
+ "Request remote address" : "Entfernte Adresse der Anfrage",
+ "matches IPv4" : "entspricht IPv4",
+ "does not match IPv4" : "entspricht nicht IPv4",
+ "matches IPv6" : "entspricht IPv6",
+ "does not match IPv6" : "entspricht nicht IPv6",
+ "File system tag" : "Kollaboratives Schlagwort an Datei",
+ "is tagged with" : "ist getaggt mit",
+ "is not tagged with" : "ist nicht getaggt mit",
+ "Request URL" : "Anfrage-URL",
+ "Request time" : "Anfrage-Zeitpunkt",
+ "between" : "zwischen",
+ "not between" : "nicht zwischen",
+ "Request user agent" : "User-Agent anfragen",
+ "Group membership" : "Gruppenmitgliedschaft",
+ "is member of" : "Ist Mitglied von",
+ "is not member of" : "Ist kein Mitglied von"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/de_DE.json b/apps/workflowengine/l10n/de_DE.json
index 1d10e018e57..26b952586ba 100644
--- a/apps/workflowengine/l10n/de_DE.json
+++ b/apps/workflowengine/l10n/de_DE.json
@@ -1,47 +1,8 @@
{ "translations": {
- "Saved" : "Gespeichert",
- "Saving failed:" : "Speichern fehlgeschlagen:",
- "File MIME type" : "Datei MIME-Typ",
- "is" : "ist",
- "is not" : "ist nicht",
- "matches" : "entspricht",
- "does not match" : "entspricht nicht",
- "Example: {placeholder}" : "Beispiel: {placeholder}",
- "File size (upload)" : "Dateigröße (beim Hochladen)",
- "less" : "weniger",
- "less or equals" : "weniger oder gleich",
- "greater or equals" : "größer oder gleich",
- "greater" : "größer",
- "File system tag" : "Dateisystem-Tag",
- "is tagged with" : "hat den Tag",
- "is not tagged with" : "hat nicht den Tag",
- "Select tag…" : "Wählen Sie einen Tag…",
- "Request remote address" : "Entfernte Adresse anfordern",
- "matches IPv4" : "entspricht IPv4",
- "does not match IPv4" : "entspricht nicht IPv4",
- "matches IPv6" : "entspricht IPv6",
- "does not match IPv6" : "entspricht nicht IPv6",
- "Request time" : "Anfrage-Zeitpunkt",
- "between" : "zwischen",
- "not between" : "nicht zwischen",
- "Start" : "Start",
- "End" : "Ende",
- "Select timezone…" : "Wählen Sie die Zeitzone…",
- "Request URL" : "Anfrage-URL",
- "Predefined URLs" : "Vordefinierte URLs",
- "Files WebDAV" : "WebDAV für Dateien",
- "Request user agent" : "User-Agent",
- "Sync clients" : "Sync-Clients",
- "Android client" : "Android-Client",
- "iOS client" : "iOS-Client",
- "Desktop client" : "Desktop-Client",
- "User group membership" : "Benutzergruppen-Mitgliedschaft",
- "is member of" : "Ist Mitglied von",
- "is not member of" : "Ist kein Mitglied von",
"The given operator is invalid" : "Der angegebene Operator ist falsch",
"The given regular expression is invalid" : "Der angegebene reguläre Ausdruck ist falsch",
"The given file size is invalid" : "Die angegebene Dateigröße ist ungültig",
- "The given tag id is invalid" : "Die angegebene Tag-ID ist ungültig",
+ "The given tag id is invalid" : "Die angegebene Schlagwort-ID ist ungültig",
"The given IP range is invalid" : "Der angegebene IP-Bereich ist falsch",
"The given IP range is not valid for IPv4" : "Der angegebene IP-Bereich ist für IPv4 ungültig",
"The given IP range is not valid for IPv6" : "Der angegebene IP-Bereich ist für IPv6 ungültig",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Die angegebene Startzeit ist ungültig",
"The given end time is invalid" : "Die angegebene Endzeit ist ungültig",
"The given group does not exist" : "Die angegebene Gruppe existiert nicht",
- "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "File" : "Datei",
+ "File created" : "Datei erstellt",
+ "File updated" : "Datei aktualisiert",
+ "File renamed" : "Datei umbenannt",
+ "File deleted" : "Datei gelöscht",
+ "File accessed" : "Auf Datei zugegriffen",
+ "File copied" : "Datei kopiert",
+ "Tag assigned" : "Schlagwort zugewiesen",
+ "Someone" : "Irgendjemand",
+ "%s created %s" : "%s hat %s erstellt",
+ "%s modified %s" : "%shat %s geändert",
+ "%s deleted %s" : "%s hat %s gelöscht",
+ "%s accessed %s" : "%s hat auf %s zugegriffen",
+ "%s renamed %s" : "%shat %s umbenannt",
+ "%s copied %s" : "%s hat %s kopiert",
+ "%s assigned %s to %s" : "%s hat %s zugewiesen an %s",
"Operation #%s does not exist" : "Operation #%s existiert nicht",
+ "Entity %s does not exist" : "Entität %s existiert nicht",
+ "Entity %s is invalid" : "Entität %s ist ungültig",
+ "No events are chosen." : "Keine Ereignisse ausgewählt.",
+ "Entity %s has no event %s" : "Die Entität %s hat kein Ereignis %s",
"Operation %s does not exist" : "Operation %s existiert nicht",
"Operation %s is invalid" : "Operation %s ist ungültig",
+ "At least one check needs to be provided" : "Mindestens ein Test muss bereitgestellt werden",
+ "The provided operation data is too long" : "Die bereitgestellten Betriebsdaten sind zu lang",
+ "Invalid check provided" : "Ungültiger Test bereitgestellt",
"Check %s does not exist" : "Die Prüfung %s existiert nicht",
"Check %s is invalid" : "Die Prüfung %s ist ungültig",
+ "Check %s is not allowed with this entity" : "Die Prüfung %s ist mit dieser Entität unzulässig",
+ "The provided check value is too long" : "Der bereitgestellte Prüfwert ist zu lang",
"Check #%s does not exist" : "Die Prüfung #%s existiert nicht",
- "Workflow" : "Workflow",
- "Open documentation" : "Dokumentation öffnen",
- "Add rule group" : "Regelgruppe hinzufügen",
- "Short rule description" : "Kurze Regelbeschreibung",
- "Add rule" : "Regel hinzufügen",
- "Reset" : "Zurücksetzen",
+ "Check %s is invalid or does not exist" : "Die Prüfung %s ist ungültig ist oder nicht existiert",
+ "Flow" : "Ablauf",
+ "Nextcloud workflow engine" : "Nextcloud Arbeitsablauf-Engine",
+ "Select a filter" : "Filter wählen",
+ "Select a comparator" : "Wählen Sie einen Komparator",
+ "Remove filter" : "Filter entfernen",
+ "Folder" : "Ordner",
+ "Images" : "Bilder",
+ "Office documents" : "Office-Dokumente",
+ "PDF documents" : "PDF-Dokumente",
+ "Custom MIME type" : "Benutzerdefinierter MIME Typ",
+ "Custom mimetype" : "Benutzerdefinierter MIME-Typ",
+ "Select a file type" : "Dateityp auswählen",
+ "e.g. httpd/unix-directory" : "z.B. httpd/unix-directory",
+ "Please enter a valid time span" : "Bitte einen gültigen Zeitraum angeben",
+ "Files WebDAV" : "WebDAV für Dateien",
+ "Custom URL" : "Benutzerdefinierte URL",
+ "Select a request URL" : "Wählen Sie eine Anforderungs-URL aus",
+ "Android client" : "Android-Client",
+ "iOS client" : "iOS-Client",
+ "Desktop client" : "Desktop-Client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook Addons",
+ "Custom user agent" : "Benutzerdefinierter User-Agent",
+ "Select a user agent" : "User-Agenten wählen",
+ "Select groups" : "Gruppen auswählen",
+ "Groups" : "Gruppen",
+ "Type to search for group …" : "Tippen um nach einer Gruppe zu suchen …",
+ "Select a trigger" : "Einen Auslöser auswählen",
+ "At least one event must be selected" : "Mindestens ein Termin muss ausgewählt werden",
+ "Add new flow" : "Neuen Ablauf hinzufügen",
+ "The configuration is invalid" : "Die Konfiguration ist ungültig",
+ "Active" : "Aktiv",
"Save" : "Speichern",
- "Saving…" : "Speichern…",
- "Loading…" : "Laden…",
- "Successfully saved" : "Erfolgreich gespeichert",
- "File mime type" : "Datei MIME-Typ"
+ "When" : "Wenn",
+ "and" : "und",
+ "Add a new filter" : "Neuen Filter hinzufügen",
+ "Cancel" : "Abbrechen",
+ "Delete" : "Löschen",
+ "Available flows" : "Verfügbare Abläufe",
+ "For details on how to write your own flow, check out the development documentation." : "Informationen wie eigene Abläufe erstellt werden, finden Sie in der Entwickler-Dokumentation.",
+ "No flows installed" : "Keine Abläufe installiert",
+ "Ask your administrator to install new flows." : "Bitten Sie Ihre Administration, neue Abläufe zu installieren.",
+ "More flows" : "Weitere Abläufe",
+ "Browse the App Store" : "App-Store durchsuchen",
+ "Show less" : "Weniger anzeigen",
+ "Show more" : "Mehr anzeigen",
+ "Configured flows" : "Konfigurierte Abläufe",
+ "Your flows" : "Ihre Abläufe",
+ "No flows configured" : "Keine Abläufe eingerichtet",
+ "matches" : "entspricht",
+ "does not match" : "entspricht nicht",
+ "is" : "ist",
+ "is not" : "ist nicht",
+ "File name" : "Dateiname",
+ "File MIME type" : "Datei MIME-Typ",
+ "File size (upload)" : "Dateigröße (beim Hochladen)",
+ "less" : "weniger",
+ "less or equals" : "weniger oder gleich",
+ "greater or equals" : "größer oder gleich",
+ "greater" : "größer",
+ "Request remote address" : "Entfernte Adresse der Anfrage",
+ "matches IPv4" : "entspricht IPv4",
+ "does not match IPv4" : "entspricht nicht IPv4",
+ "matches IPv6" : "entspricht IPv6",
+ "does not match IPv6" : "entspricht nicht IPv6",
+ "File system tag" : "Kollaboratives Schlagwort an Datei",
+ "is tagged with" : "ist getaggt mit",
+ "is not tagged with" : "ist nicht getaggt mit",
+ "Request URL" : "Anfrage-URL",
+ "Request time" : "Anfrage-Zeitpunkt",
+ "between" : "zwischen",
+ "not between" : "nicht zwischen",
+ "Request user agent" : "User-Agent anfragen",
+ "Group membership" : "Gruppenmitgliedschaft",
+ "is member of" : "Ist Mitglied von",
+ "is not member of" : "Ist kein Mitglied von"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/el.js b/apps/workflowengine/l10n/el.js
index 994332bdc37..2f79bd897ba 100644
--- a/apps/workflowengine/l10n/el.js
+++ b/apps/workflowengine/l10n/el.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Αποθηκεύτηκε",
- "Saving failed:" : "Απέτυχε η αποθήκευση:",
- "File MIME type" : "Τύπος αρχείου MIME",
- "is" : "είναι",
- "is not" : "δεν είναι",
- "matches" : "ταιριάζει",
- "does not match" : "δεν ταιριάζει",
- "Example: {placeholder}" : "Παράδειγμα: {placeholder}",
- "File size (upload)" : "Μέγεθος αρχείου (μεταφόρτωση)",
- "less" : "Λιγότερα",
- "less or equals" : "Λιγότερο ή ίσον",
- "greater or equals" : "είναι μεγαλύτερο ή ίσο",
- "greater" : "μεγαλύτερος",
- "File system tag" : "Ετικέτα συστήματος αρχείου",
- "is tagged with" : "έχει σημειωθεί με",
- "is not tagged with" : "δεν έχει σημειωθεί με",
- "Select tag…" : "Επιλέξτε ετικέτα...",
- "Request remote address" : "Αιτηθείτε απομακρυσμένη διέυθυνση",
- "matches IPv4" : "ταιριάζει IPv4",
- "does not match IPv4" : "δεν ταιριάζει IPv4",
- "matches IPv6" : "ταιριάζει με IPv6",
- "does not match IPv6" : "δεν ταιριάζει με IPv6",
- "Request time" : "Αιτηθείτε χρόνο",
- "between" : "μεταξύ",
- "not between" : "όχι μεταξύ",
- "Start" : "Έναρξη",
- "End" : "Λήξη",
- "Select timezone…" : "Επιλογή ζώνης ώρας...",
- "Request URL" : "Αιτηθείτε URL",
- "Predefined URLs" : "Προορισμένα URLs",
- "Files WebDAV" : "Αρχεία WebDAV",
- "Request user agent" : "Αιτηθείτε αντιπρόσωπο χρήστη",
- "Sync clients" : "Συγχρονίστε χρήστες",
- "Android client" : "Πελάτης Android",
- "iOS client" : "Πελάτης iOS",
- "Desktop client" : "Πελάτης σταθερού υπολογιστή",
- "User group membership" : "Συμμετοχή σε ομάδα χρηστών",
- "is member of" : "είναι μέλος του",
- "is not member of" : "δεν είναι μέλος του",
"The given operator is invalid" : "Ο δοσμένος πάροχος δεν είναι έγκυρος",
"The given regular expression is invalid" : "Η δοθείσα κανονική έκφραση δεν είναι έγκυρη",
"The given file size is invalid" : "Το δοσμένο μέγεθος αρχείου δεν είναι έγκυρο",
@@ -51,23 +12,105 @@ OC.L10N.register(
"The given start time is invalid" : "Ο δοσμένος χρόνος έναρξης δεν είναι έγκυρος",
"The given end time is invalid" : "Ο δοσμένος χρόνος λήξης δεν είναι έγκυρος",
"The given group does not exist" : "Η δοσμένη ομάδα δεν υπάρχει",
- "Check %s is invalid or does not exist" : "Έλεγχος %s δεν είναι έγκυρος ή δεν υπάρχει",
+ "File" : "Αρχείο",
+ "File created" : "Το αρχείο δημιουργήθηκε",
+ "File updated" : "Το αρχείο ενημερώθηκε",
+ "File renamed" : "Το αρχείο μετονομάστηκε",
+ "File deleted" : "Το αρχείο διαγράφηκε",
+ "File accessed" : "Προσβάσιμο αρχείο",
+ "File copied" : "Το αρχείο αντιγράφηκε",
+ "Tag assigned" : "Ορίστηκε ετικέτα",
+ "Someone" : "Κάποιος",
+ "%s created %s" : "%s δημιουργήθηκε %s",
+ "%s modified %s" : "%s τροποποιήθηκε %s",
+ "%s deleted %s" : "%s διαγράφηκε %s",
+ "%s accessed %s" : "%s πρόσβαση %s",
+ "%s renamed %s" : "%s μετονομάστηκε%s",
+ "%s copied %s" : "%s αντιγράφηκε%s",
+ "%s assigned %s to %s" : "%s ορίστηκε %s σε %s",
"Operation #%s does not exist" : "Λειτουργία #%s δεν υπάρχει",
+ "Entity %s does not exist" : "Η οντότητα %s δεν υπάρχει",
+ "Entity %s is invalid" : "Η οντότητα %s δεν είναι έγκυρη",
+ "No events are chosen." : "Κανένα γεγονός δεν επιλέχθηκε.",
+ "Entity %s has no event %s" : "Η οντότητα %s δεν έχει γεγονότα %s",
"Operation %s does not exist" : "Λειτουργία %s δεν υπάρχει",
"Operation %s is invalid" : "Λειτουργία %s δεν είναι έγκυρη",
+ "At least one check needs to be provided" : "Χρειάζεται τουλάχιστο μία επιλογή",
+ "The provided operation data is too long" : "Τα παρεχόμενα δεδομένα λειτουργίας είναι πολύ μεγάλα",
+ "Invalid check provided" : "Έχει δοθεί λάθος επιλογή",
"Check %s does not exist" : "Έλεγχος %s δεν υπάρχει",
"Check %s is invalid" : "Έλεγχος %s δεν είναι έγκυρος",
+ "Check %s is not allowed with this entity" : "Η επιλογή %s δεν επιτρέπεται για αυτή την οντότητα",
+ "The provided check value is too long" : "Η παρεχόμενη τιμή ελέγχου είναι πολύ μεγάλη",
"Check #%s does not exist" : "Έλεγχος #%s δεν υπάρχει",
- "Workflow" : "Ροή εργασίας",
- "Open documentation" : "Άνοιγμ τεκμηρίωσης",
- "Add rule group" : "Προσθέστε κανόνα ομάδας",
- "Short rule description" : "Μικρή περιγραφή κανόνα",
- "Add rule" : "Προσθέστε κανόνα",
- "Reset" : "Επαναφορά",
+ "Check %s is invalid or does not exist" : "Έλεγχος %s δεν είναι έγκυρος ή δεν υπάρχει",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Σύστημα ροής εργασιών Nextcloud",
+ "Select a filter" : "Επιλογή φίλτρου",
+ "Select a comparator" : "Επιλέξτε για σύγκριση",
+ "Remove filter" : "Αφαίρεση φίλτρου",
+ "Folder" : "Φάκελος",
+ "Images" : "Εικόνες",
+ "Office documents" : "Έγγραφα γραφείου",
+ "PDF documents" : "Έγγραφα PDF",
+ "Custom MIME type" : "Προσαρμοσμένος τύπος MIME",
+ "Custom mimetype" : "Προσαρμοσμένος τύπος mime",
+ "Select a file type" : "Επιλέξτε τύπο αρχείου",
+ "e.g. httpd/unix-directory" : "π.χ. httpd/unix-directory",
+ "Please enter a valid time span" : "Εισαγάγετε έγκυρο χρονικό διάστημα",
+ "Files WebDAV" : "Αρχεία WebDAV",
+ "Custom URL" : "Προσαρμοσμένο URL",
+ "Select a request URL" : "Επιλέξτε μια διεύθυνση URL αιτήματος",
+ "Android client" : "Πελάτης Android",
+ "iOS client" : "Πελάτης iOS",
+ "Desktop client" : "Πελάτης σταθερού υπολογιστή",
+ "Thunderbird & Outlook addons" : "Πρόσθετα των Thunderbird & Outlook",
+ "Custom user agent" : "Προσαρμοσμένο πρόγραμμα χρήστη",
+ "Select a user agent" : "Επιλογή προγράμματος χρήστη",
+ "Select groups" : "Επιλέξτε ομάδες",
+ "Groups" : "Ομάδες",
+ "At least one event must be selected" : "Τουλάχιστον ένα γεγονός πρέπει να επιλεγεί",
+ "Add new flow" : "Προσθήκη νέας ροής",
+ "The configuration is invalid" : "Μή έγκυρη ρύθμιση",
+ "Active" : "Ενεργό",
"Save" : "Αποθήκευση",
- "Saving…" : "Αποθηκεύεται...",
- "Loading…" : "Φορτώνει...",
- "Successfully saved" : "Επιτυχημένη αποθήκευση",
- "File mime type" : "Αρχεία τύπου mime"
+ "When" : "Πότε",
+ "and" : "και",
+ "Cancel" : "Ακύρωση",
+ "Delete" : "Διαγραφή",
+ "Available flows" : "Διαθέσιμες ροές",
+ "For details on how to write your own flow, check out the development documentation." : "Για λεπτομέρεις πως μπορείτε να συντάξετε δική σας ροή, δείτε στην τεκμηρίωση προγραμματιστών.",
+ "More flows" : "Περισσότερες ροές",
+ "Browse the App Store" : "Εξερευνήστε την Αγορά εφαρμογών",
+ "Show less" : "Εμφάνιση λιγότερων",
+ "Show more" : "Εμφάνιση περισσότερων",
+ "Configured flows" : "Ρύθμιση ροών",
+ "Your flows" : "Οι ροές σας",
+ "matches" : "ταιριάζει",
+ "does not match" : "δεν ταιριάζει",
+ "is" : "είναι",
+ "is not" : "δεν είναι",
+ "File name" : "Όνομα αρχείου",
+ "File MIME type" : "Τύπος αρχείου MIME",
+ "File size (upload)" : "Μέγεθος αρχείου (μεταφόρτωση)",
+ "less" : "Λιγότερα",
+ "less or equals" : "Λιγότερο ή ίσον",
+ "greater or equals" : "είναι μεγαλύτερο ή ίσο",
+ "greater" : "μεγαλύτερος",
+ "Request remote address" : "Αιτηθείτε απομακρυσμένη διέυθυνση",
+ "matches IPv4" : "ταιριάζει IPv4",
+ "does not match IPv4" : "δεν ταιριάζει IPv4",
+ "matches IPv6" : "ταιριάζει με IPv6",
+ "does not match IPv6" : "δεν ταιριάζει με IPv6",
+ "File system tag" : "Ετικέτα συστήματος αρχείου",
+ "is tagged with" : "έχει σημειωθεί με",
+ "is not tagged with" : "δεν έχει σημειωθεί με",
+ "Request URL" : "Αιτηθείτε URL",
+ "Request time" : "Αιτηθείτε χρόνο",
+ "between" : "μεταξύ",
+ "not between" : "όχι μεταξύ",
+ "Request user agent" : "Αιτηθείτε αντιπρόσωπο χρήστη",
+ "is member of" : "είναι μέλος του",
+ "is not member of" : "δεν είναι μέλος του"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/el.json b/apps/workflowengine/l10n/el.json
index 3942c93a057..7cf1e71a7ba 100644
--- a/apps/workflowengine/l10n/el.json
+++ b/apps/workflowengine/l10n/el.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Αποθηκεύτηκε",
- "Saving failed:" : "Απέτυχε η αποθήκευση:",
- "File MIME type" : "Τύπος αρχείου MIME",
- "is" : "είναι",
- "is not" : "δεν είναι",
- "matches" : "ταιριάζει",
- "does not match" : "δεν ταιριάζει",
- "Example: {placeholder}" : "Παράδειγμα: {placeholder}",
- "File size (upload)" : "Μέγεθος αρχείου (μεταφόρτωση)",
- "less" : "Λιγότερα",
- "less or equals" : "Λιγότερο ή ίσον",
- "greater or equals" : "είναι μεγαλύτερο ή ίσο",
- "greater" : "μεγαλύτερος",
- "File system tag" : "Ετικέτα συστήματος αρχείου",
- "is tagged with" : "έχει σημειωθεί με",
- "is not tagged with" : "δεν έχει σημειωθεί με",
- "Select tag…" : "Επιλέξτε ετικέτα...",
- "Request remote address" : "Αιτηθείτε απομακρυσμένη διέυθυνση",
- "matches IPv4" : "ταιριάζει IPv4",
- "does not match IPv4" : "δεν ταιριάζει IPv4",
- "matches IPv6" : "ταιριάζει με IPv6",
- "does not match IPv6" : "δεν ταιριάζει με IPv6",
- "Request time" : "Αιτηθείτε χρόνο",
- "between" : "μεταξύ",
- "not between" : "όχι μεταξύ",
- "Start" : "Έναρξη",
- "End" : "Λήξη",
- "Select timezone…" : "Επιλογή ζώνης ώρας...",
- "Request URL" : "Αιτηθείτε URL",
- "Predefined URLs" : "Προορισμένα URLs",
- "Files WebDAV" : "Αρχεία WebDAV",
- "Request user agent" : "Αιτηθείτε αντιπρόσωπο χρήστη",
- "Sync clients" : "Συγχρονίστε χρήστες",
- "Android client" : "Πελάτης Android",
- "iOS client" : "Πελάτης iOS",
- "Desktop client" : "Πελάτης σταθερού υπολογιστή",
- "User group membership" : "Συμμετοχή σε ομάδα χρηστών",
- "is member of" : "είναι μέλος του",
- "is not member of" : "δεν είναι μέλος του",
"The given operator is invalid" : "Ο δοσμένος πάροχος δεν είναι έγκυρος",
"The given regular expression is invalid" : "Η δοθείσα κανονική έκφραση δεν είναι έγκυρη",
"The given file size is invalid" : "Το δοσμένο μέγεθος αρχείου δεν είναι έγκυρο",
@@ -49,23 +10,105 @@
"The given start time is invalid" : "Ο δοσμένος χρόνος έναρξης δεν είναι έγκυρος",
"The given end time is invalid" : "Ο δοσμένος χρόνος λήξης δεν είναι έγκυρος",
"The given group does not exist" : "Η δοσμένη ομάδα δεν υπάρχει",
- "Check %s is invalid or does not exist" : "Έλεγχος %s δεν είναι έγκυρος ή δεν υπάρχει",
+ "File" : "Αρχείο",
+ "File created" : "Το αρχείο δημιουργήθηκε",
+ "File updated" : "Το αρχείο ενημερώθηκε",
+ "File renamed" : "Το αρχείο μετονομάστηκε",
+ "File deleted" : "Το αρχείο διαγράφηκε",
+ "File accessed" : "Προσβάσιμο αρχείο",
+ "File copied" : "Το αρχείο αντιγράφηκε",
+ "Tag assigned" : "Ορίστηκε ετικέτα",
+ "Someone" : "Κάποιος",
+ "%s created %s" : "%s δημιουργήθηκε %s",
+ "%s modified %s" : "%s τροποποιήθηκε %s",
+ "%s deleted %s" : "%s διαγράφηκε %s",
+ "%s accessed %s" : "%s πρόσβαση %s",
+ "%s renamed %s" : "%s μετονομάστηκε%s",
+ "%s copied %s" : "%s αντιγράφηκε%s",
+ "%s assigned %s to %s" : "%s ορίστηκε %s σε %s",
"Operation #%s does not exist" : "Λειτουργία #%s δεν υπάρχει",
+ "Entity %s does not exist" : "Η οντότητα %s δεν υπάρχει",
+ "Entity %s is invalid" : "Η οντότητα %s δεν είναι έγκυρη",
+ "No events are chosen." : "Κανένα γεγονός δεν επιλέχθηκε.",
+ "Entity %s has no event %s" : "Η οντότητα %s δεν έχει γεγονότα %s",
"Operation %s does not exist" : "Λειτουργία %s δεν υπάρχει",
"Operation %s is invalid" : "Λειτουργία %s δεν είναι έγκυρη",
+ "At least one check needs to be provided" : "Χρειάζεται τουλάχιστο μία επιλογή",
+ "The provided operation data is too long" : "Τα παρεχόμενα δεδομένα λειτουργίας είναι πολύ μεγάλα",
+ "Invalid check provided" : "Έχει δοθεί λάθος επιλογή",
"Check %s does not exist" : "Έλεγχος %s δεν υπάρχει",
"Check %s is invalid" : "Έλεγχος %s δεν είναι έγκυρος",
+ "Check %s is not allowed with this entity" : "Η επιλογή %s δεν επιτρέπεται για αυτή την οντότητα",
+ "The provided check value is too long" : "Η παρεχόμενη τιμή ελέγχου είναι πολύ μεγάλη",
"Check #%s does not exist" : "Έλεγχος #%s δεν υπάρχει",
- "Workflow" : "Ροή εργασίας",
- "Open documentation" : "Άνοιγμ τεκμηρίωσης",
- "Add rule group" : "Προσθέστε κανόνα ομάδας",
- "Short rule description" : "Μικρή περιγραφή κανόνα",
- "Add rule" : "Προσθέστε κανόνα",
- "Reset" : "Επαναφορά",
+ "Check %s is invalid or does not exist" : "Έλεγχος %s δεν είναι έγκυρος ή δεν υπάρχει",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Σύστημα ροής εργασιών Nextcloud",
+ "Select a filter" : "Επιλογή φίλτρου",
+ "Select a comparator" : "Επιλέξτε για σύγκριση",
+ "Remove filter" : "Αφαίρεση φίλτρου",
+ "Folder" : "Φάκελος",
+ "Images" : "Εικόνες",
+ "Office documents" : "Έγγραφα γραφείου",
+ "PDF documents" : "Έγγραφα PDF",
+ "Custom MIME type" : "Προσαρμοσμένος τύπος MIME",
+ "Custom mimetype" : "Προσαρμοσμένος τύπος mime",
+ "Select a file type" : "Επιλέξτε τύπο αρχείου",
+ "e.g. httpd/unix-directory" : "π.χ. httpd/unix-directory",
+ "Please enter a valid time span" : "Εισαγάγετε έγκυρο χρονικό διάστημα",
+ "Files WebDAV" : "Αρχεία WebDAV",
+ "Custom URL" : "Προσαρμοσμένο URL",
+ "Select a request URL" : "Επιλέξτε μια διεύθυνση URL αιτήματος",
+ "Android client" : "Πελάτης Android",
+ "iOS client" : "Πελάτης iOS",
+ "Desktop client" : "Πελάτης σταθερού υπολογιστή",
+ "Thunderbird & Outlook addons" : "Πρόσθετα των Thunderbird & Outlook",
+ "Custom user agent" : "Προσαρμοσμένο πρόγραμμα χρήστη",
+ "Select a user agent" : "Επιλογή προγράμματος χρήστη",
+ "Select groups" : "Επιλέξτε ομάδες",
+ "Groups" : "Ομάδες",
+ "At least one event must be selected" : "Τουλάχιστον ένα γεγονός πρέπει να επιλεγεί",
+ "Add new flow" : "Προσθήκη νέας ροής",
+ "The configuration is invalid" : "Μή έγκυρη ρύθμιση",
+ "Active" : "Ενεργό",
"Save" : "Αποθήκευση",
- "Saving…" : "Αποθηκεύεται...",
- "Loading…" : "Φορτώνει...",
- "Successfully saved" : "Επιτυχημένη αποθήκευση",
- "File mime type" : "Αρχεία τύπου mime"
+ "When" : "Πότε",
+ "and" : "και",
+ "Cancel" : "Ακύρωση",
+ "Delete" : "Διαγραφή",
+ "Available flows" : "Διαθέσιμες ροές",
+ "For details on how to write your own flow, check out the development documentation." : "Για λεπτομέρεις πως μπορείτε να συντάξετε δική σας ροή, δείτε στην τεκμηρίωση προγραμματιστών.",
+ "More flows" : "Περισσότερες ροές",
+ "Browse the App Store" : "Εξερευνήστε την Αγορά εφαρμογών",
+ "Show less" : "Εμφάνιση λιγότερων",
+ "Show more" : "Εμφάνιση περισσότερων",
+ "Configured flows" : "Ρύθμιση ροών",
+ "Your flows" : "Οι ροές σας",
+ "matches" : "ταιριάζει",
+ "does not match" : "δεν ταιριάζει",
+ "is" : "είναι",
+ "is not" : "δεν είναι",
+ "File name" : "Όνομα αρχείου",
+ "File MIME type" : "Τύπος αρχείου MIME",
+ "File size (upload)" : "Μέγεθος αρχείου (μεταφόρτωση)",
+ "less" : "Λιγότερα",
+ "less or equals" : "Λιγότερο ή ίσον",
+ "greater or equals" : "είναι μεγαλύτερο ή ίσο",
+ "greater" : "μεγαλύτερος",
+ "Request remote address" : "Αιτηθείτε απομακρυσμένη διέυθυνση",
+ "matches IPv4" : "ταιριάζει IPv4",
+ "does not match IPv4" : "δεν ταιριάζει IPv4",
+ "matches IPv6" : "ταιριάζει με IPv6",
+ "does not match IPv6" : "δεν ταιριάζει με IPv6",
+ "File system tag" : "Ετικέτα συστήματος αρχείου",
+ "is tagged with" : "έχει σημειωθεί με",
+ "is not tagged with" : "δεν έχει σημειωθεί με",
+ "Request URL" : "Αιτηθείτε URL",
+ "Request time" : "Αιτηθείτε χρόνο",
+ "between" : "μεταξύ",
+ "not between" : "όχι μεταξύ",
+ "Request user agent" : "Αιτηθείτε αντιπρόσωπο χρήστη",
+ "is member of" : "είναι μέλος του",
+ "is not member of" : "δεν είναι μέλος του"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/en_GB.js b/apps/workflowengine/l10n/en_GB.js
index 82df35215d1..971aa8d6415 100644
--- a/apps/workflowengine/l10n/en_GB.js
+++ b/apps/workflowengine/l10n/en_GB.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Saved",
- "Saving failed:" : "Saving failed:",
- "File MIME type" : "File MIME type",
- "is" : "is",
- "is not" : "is not",
- "matches" : "matches",
- "does not match" : "does not match",
- "Example: {placeholder}" : "Example: {placeholder}",
- "File size (upload)" : "File size (upload)",
- "less" : "less",
- "less or equals" : "less or equals",
- "greater or equals" : "greater or equals",
- "greater" : "greater",
- "File system tag" : "File system tag",
- "is tagged with" : "is tagged with",
- "is not tagged with" : "is not tagged with",
- "Select tag…" : "Select tag…",
- "Request remote address" : "Request remote address",
- "matches IPv4" : "matches IPv4",
- "does not match IPv4" : "does not match IPv4",
- "matches IPv6" : "matches IPv6",
- "does not match IPv6" : "does not match IPv6",
- "Request time" : "Request time",
- "between" : "between",
- "not between" : "not between",
- "Start" : "Start",
- "End" : "End",
- "Select timezone…" : "Select timezone…",
- "Request URL" : "Request URL",
- "Predefined URLs" : "Predefined URLs",
- "Files WebDAV" : "Files WebDAV",
- "Request user agent" : "Request user agent",
- "Sync clients" : "Sync clients",
- "Android client" : "Android client",
- "iOS client" : "iOS client",
- "Desktop client" : "Desktop client",
- "User group membership" : "User group membership",
- "is member of" : "is member of",
- "is not member of" : "is not member of",
"The given operator is invalid" : "The given operator is invalid",
"The given regular expression is invalid" : "The given regular expression is invalid",
"The given file size is invalid" : "The given file size is invalid",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "The given start time is invalid",
"The given end time is invalid" : "The given end time is invalid",
"The given group does not exist" : "The given group does not exist",
- "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
"Operation #%s does not exist" : "Operation #%s does not exist",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
"Operation %s does not exist" : "Operation %s does not exist",
"Operation %s is invalid" : "Operation %s is invalid",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
"Check %s does not exist" : "Check %s does not exist",
"Check %s is invalid" : "Check %s is invalid",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
"Check #%s does not exist" : "Check #%s does not exist",
- "Workflow" : "Workflow",
- "Open documentation" : "Open documentation",
- "Add rule group" : "Add rule group",
- "Short rule description" : "Short rule description",
- "Add rule" : "Add rule",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "Folder",
+ "Images" : "Images",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "Files WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "Select groups",
+ "Groups" : "Groups",
+ "Type to search for group …" : "Type to search for group …",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "Active",
"Save" : "Save",
- "Saving…" : "Saving…",
- "Loading…" : "Loading…",
- "Successfully saved" : "Successfully saved",
- "File mime type" : "File mime type"
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "Cancel",
+ "Delete" : "Delete",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "No flows installed" : "No flows installed",
+ "Ask your administrator to install new flows." : "Ask your administrator to install new flows.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "No flows configured" : "No flows configured",
+ "matches" : "matches",
+ "does not match" : "does not match",
+ "is" : "is",
+ "is not" : "is not",
+ "File name" : "File name",
+ "File MIME type" : "File MIME type",
+ "File size (upload)" : "File size (upload)",
+ "less" : "less",
+ "less or equals" : "less or equals",
+ "greater or equals" : "greater or equals",
+ "greater" : "greater",
+ "Request remote address" : "Request remote address",
+ "matches IPv4" : "matches IPv4",
+ "does not match IPv4" : "does not match IPv4",
+ "matches IPv6" : "matches IPv6",
+ "does not match IPv6" : "does not match IPv6",
+ "File system tag" : "File system tag",
+ "is tagged with" : "is tagged with",
+ "is not tagged with" : "is not tagged with",
+ "Request URL" : "Request URL",
+ "Request time" : "Request time",
+ "between" : "between",
+ "not between" : "not between",
+ "Request user agent" : "Request user agent",
+ "Group membership" : "Group membership",
+ "is member of" : "is member of",
+ "is not member of" : "is not member of"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/en_GB.json b/apps/workflowengine/l10n/en_GB.json
index b7faf6f2323..b4591846e96 100644
--- a/apps/workflowengine/l10n/en_GB.json
+++ b/apps/workflowengine/l10n/en_GB.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Saved",
- "Saving failed:" : "Saving failed:",
- "File MIME type" : "File MIME type",
- "is" : "is",
- "is not" : "is not",
- "matches" : "matches",
- "does not match" : "does not match",
- "Example: {placeholder}" : "Example: {placeholder}",
- "File size (upload)" : "File size (upload)",
- "less" : "less",
- "less or equals" : "less or equals",
- "greater or equals" : "greater or equals",
- "greater" : "greater",
- "File system tag" : "File system tag",
- "is tagged with" : "is tagged with",
- "is not tagged with" : "is not tagged with",
- "Select tag…" : "Select tag…",
- "Request remote address" : "Request remote address",
- "matches IPv4" : "matches IPv4",
- "does not match IPv4" : "does not match IPv4",
- "matches IPv6" : "matches IPv6",
- "does not match IPv6" : "does not match IPv6",
- "Request time" : "Request time",
- "between" : "between",
- "not between" : "not between",
- "Start" : "Start",
- "End" : "End",
- "Select timezone…" : "Select timezone…",
- "Request URL" : "Request URL",
- "Predefined URLs" : "Predefined URLs",
- "Files WebDAV" : "Files WebDAV",
- "Request user agent" : "Request user agent",
- "Sync clients" : "Sync clients",
- "Android client" : "Android client",
- "iOS client" : "iOS client",
- "Desktop client" : "Desktop client",
- "User group membership" : "User group membership",
- "is member of" : "is member of",
- "is not member of" : "is not member of",
"The given operator is invalid" : "The given operator is invalid",
"The given regular expression is invalid" : "The given regular expression is invalid",
"The given file size is invalid" : "The given file size is invalid",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "The given start time is invalid",
"The given end time is invalid" : "The given end time is invalid",
"The given group does not exist" : "The given group does not exist",
- "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
"Operation #%s does not exist" : "Operation #%s does not exist",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
"Operation %s does not exist" : "Operation %s does not exist",
"Operation %s is invalid" : "Operation %s is invalid",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
"Check %s does not exist" : "Check %s does not exist",
"Check %s is invalid" : "Check %s is invalid",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
"Check #%s does not exist" : "Check #%s does not exist",
- "Workflow" : "Workflow",
- "Open documentation" : "Open documentation",
- "Add rule group" : "Add rule group",
- "Short rule description" : "Short rule description",
- "Add rule" : "Add rule",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "Folder",
+ "Images" : "Images",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "Files WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "Select groups",
+ "Groups" : "Groups",
+ "Type to search for group …" : "Type to search for group …",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "Active",
"Save" : "Save",
- "Saving…" : "Saving…",
- "Loading…" : "Loading…",
- "Successfully saved" : "Successfully saved",
- "File mime type" : "File mime type"
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "Cancel",
+ "Delete" : "Delete",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "No flows installed" : "No flows installed",
+ "Ask your administrator to install new flows." : "Ask your administrator to install new flows.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "No flows configured" : "No flows configured",
+ "matches" : "matches",
+ "does not match" : "does not match",
+ "is" : "is",
+ "is not" : "is not",
+ "File name" : "File name",
+ "File MIME type" : "File MIME type",
+ "File size (upload)" : "File size (upload)",
+ "less" : "less",
+ "less or equals" : "less or equals",
+ "greater or equals" : "greater or equals",
+ "greater" : "greater",
+ "Request remote address" : "Request remote address",
+ "matches IPv4" : "matches IPv4",
+ "does not match IPv4" : "does not match IPv4",
+ "matches IPv6" : "matches IPv6",
+ "does not match IPv6" : "does not match IPv6",
+ "File system tag" : "File system tag",
+ "is tagged with" : "is tagged with",
+ "is not tagged with" : "is not tagged with",
+ "Request URL" : "Request URL",
+ "Request time" : "Request time",
+ "between" : "between",
+ "not between" : "not between",
+ "Request user agent" : "Request user agent",
+ "Group membership" : "Group membership",
+ "is member of" : "is member of",
+ "is not member of" : "is not member of"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/eo.js b/apps/workflowengine/l10n/eo.js
new file mode 100644
index 00000000000..26b48e500a2
--- /dev/null
+++ b/apps/workflowengine/l10n/eo.js
@@ -0,0 +1,92 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Tiu operaciilo ne eblas",
+ "The given regular expression is invalid" : "Tiu regulesprimo ne validas",
+ "The given file size is invalid" : "Tiu dosiergrando ne validas",
+ "The given tag id is invalid" : "Tiu etikeda identigilo ne validas",
+ "The given IP range is invalid" : "Tiu IP-intervalo ne validas",
+ "The given IP range is not valid for IPv4" : "Tiu IP-intervalo ne validas rilate al IPv4",
+ "The given IP range is not valid for IPv6" : "Tiu IP-intervalo ne validas rilate al IPv6",
+ "The given time span is invalid" : "Tiu hora intervalo ne validas",
+ "The given start time is invalid" : "Tiu komenca horo ne validas",
+ "The given end time is invalid" : "Tiu fina horo ne validas",
+ "The given group does not exist" : "Tiu grupo ne ekzistas",
+ "File" : "Dosiero",
+ "File created" : "Dosiero kreita",
+ "File updated" : "Dosiero ĝisdatigita",
+ "File renamed" : "Dosiero alinomita",
+ "File deleted" : "Dosiero forigita",
+ "File accessed" : "Dosiero atingita",
+ "File copied" : "Dosiero kopiita",
+ "Tag assigned" : "Etikedo atribuita",
+ "Operation #%s does not exist" : "Operacio n-ro %s ne ekzistas",
+ "Entity %s does not exist" : "Ento %s ne ekzistas",
+ "Entity %s is invalid" : "Ento %s ne validas",
+ "No events are chosen." : "Neniu okazaĵo elektita.",
+ "Entity %s has no event %s" : "Ento %s ne havas okazaĵon %s",
+ "Operation %s does not exist" : "Operacio %s ne ekzistas",
+ "Operation %s is invalid" : "Operacio %s ne validas",
+ "Check %s does not exist" : "Kontrolo %s ne ekzistas",
+ "Check %s is invalid" : "Kontrolo %s ne validas",
+ "Check %s is not allowed with this entity" : "La kontrolo %s ne estas permesita kun tiu ento",
+ "Check #%s does not exist" : "Kontrolo n-ro %s ne ekzistas",
+ "Check %s is invalid or does not exist" : "La kontrolo %s ne validas aŭ ne ekzistas",
+ "Nextcloud workflow engine" : "Modulo de laborfluo de Nextcloud",
+ "Select a filter" : "Elekti filtrilon",
+ "Select a comparator" : "Elekti komparilon",
+ "Folder" : "Dosierujo",
+ "Images" : "Bildoj",
+ "Office documents" : "Oficejaj dokumentoj",
+ "PDF documents" : "PDF-dokumentoj",
+ "Custom mimetype" : "Propra MIME-tipo",
+ "Select a file type" : "Elekti dosierformon",
+ "e.g. httpd/unix-directory" : "ekz. httpd/unix-directory",
+ "Please enter a valid time span" : "Entajpu validan intertempon",
+ "Files WebDAV" : "Dosieroj WebDAV",
+ "Custom URL" : "Propra retadreso",
+ "Select a request URL" : "Elekti petan retadreson",
+ "Android client" : "Androida kliento",
+ "iOS client" : "iOS-a kliento",
+ "Desktop client" : "Labortabla kliento",
+ "Thunderbird & Outlook addons" : "Thunderbird-a kaj Outlook-a aldonaĵo",
+ "Custom user agent" : "Propra retumil-identigilo („user-agent“)",
+ "Select a user agent" : "Elekti retumil-identigilo („user-agent“)",
+ "Select groups" : "Elekti grupojn",
+ "Groups" : "Grupoj",
+ "The configuration is invalid" : "La agordo ne validas",
+ "Save" : "Konservi",
+ "When" : "Kiam",
+ "and" : "kaj",
+ "Cancel" : "Nuligi",
+ "Delete" : "Forigi",
+ "Show less" : "Montri malpli",
+ "Show more" : "Montri pli",
+ "matches" : "kongruas kun",
+ "does not match" : "ne kongruas kun",
+ "is" : "estas",
+ "is not" : "ne estas",
+ "File name" : "Dosiernomo",
+ "File MIME type" : "Dosiera MIME-tipo",
+ "File size (upload)" : "Dosiergrando (alŝuto)",
+ "less" : "malpli",
+ "less or equals" : "malpli aŭ egalas al",
+ "greater or equals" : "pli aŭ egalas al",
+ "greater" : "pli",
+ "Request remote address" : "Fora adreso de la peto",
+ "matches IPv4" : "kongruas kun IPv4",
+ "does not match IPv4" : "ne kongruas kun IPv4",
+ "matches IPv6" : "kongruas kun IPv6",
+ "does not match IPv6" : "ne kongruas kun IPv6",
+ "File system tag" : "Dosiersistema etikedo",
+ "is tagged with" : "estas etikedita per",
+ "is not tagged with" : "ne estas etikedita per",
+ "Request URL" : "Retadreso („URL“) de la peto",
+ "Request time" : "Horo de la peto",
+ "between" : "inter",
+ "not between" : "ne inter",
+ "Request user agent" : "Retumil-identigilo („user-agent“)",
+ "is member of" : "estas membro de",
+ "is not member of" : "ne estas membro de"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/eo.json b/apps/workflowengine/l10n/eo.json
new file mode 100644
index 00000000000..2ac663789b2
--- /dev/null
+++ b/apps/workflowengine/l10n/eo.json
@@ -0,0 +1,90 @@
+{ "translations": {
+ "The given operator is invalid" : "Tiu operaciilo ne eblas",
+ "The given regular expression is invalid" : "Tiu regulesprimo ne validas",
+ "The given file size is invalid" : "Tiu dosiergrando ne validas",
+ "The given tag id is invalid" : "Tiu etikeda identigilo ne validas",
+ "The given IP range is invalid" : "Tiu IP-intervalo ne validas",
+ "The given IP range is not valid for IPv4" : "Tiu IP-intervalo ne validas rilate al IPv4",
+ "The given IP range is not valid for IPv6" : "Tiu IP-intervalo ne validas rilate al IPv6",
+ "The given time span is invalid" : "Tiu hora intervalo ne validas",
+ "The given start time is invalid" : "Tiu komenca horo ne validas",
+ "The given end time is invalid" : "Tiu fina horo ne validas",
+ "The given group does not exist" : "Tiu grupo ne ekzistas",
+ "File" : "Dosiero",
+ "File created" : "Dosiero kreita",
+ "File updated" : "Dosiero ĝisdatigita",
+ "File renamed" : "Dosiero alinomita",
+ "File deleted" : "Dosiero forigita",
+ "File accessed" : "Dosiero atingita",
+ "File copied" : "Dosiero kopiita",
+ "Tag assigned" : "Etikedo atribuita",
+ "Operation #%s does not exist" : "Operacio n-ro %s ne ekzistas",
+ "Entity %s does not exist" : "Ento %s ne ekzistas",
+ "Entity %s is invalid" : "Ento %s ne validas",
+ "No events are chosen." : "Neniu okazaĵo elektita.",
+ "Entity %s has no event %s" : "Ento %s ne havas okazaĵon %s",
+ "Operation %s does not exist" : "Operacio %s ne ekzistas",
+ "Operation %s is invalid" : "Operacio %s ne validas",
+ "Check %s does not exist" : "Kontrolo %s ne ekzistas",
+ "Check %s is invalid" : "Kontrolo %s ne validas",
+ "Check %s is not allowed with this entity" : "La kontrolo %s ne estas permesita kun tiu ento",
+ "Check #%s does not exist" : "Kontrolo n-ro %s ne ekzistas",
+ "Check %s is invalid or does not exist" : "La kontrolo %s ne validas aŭ ne ekzistas",
+ "Nextcloud workflow engine" : "Modulo de laborfluo de Nextcloud",
+ "Select a filter" : "Elekti filtrilon",
+ "Select a comparator" : "Elekti komparilon",
+ "Folder" : "Dosierujo",
+ "Images" : "Bildoj",
+ "Office documents" : "Oficejaj dokumentoj",
+ "PDF documents" : "PDF-dokumentoj",
+ "Custom mimetype" : "Propra MIME-tipo",
+ "Select a file type" : "Elekti dosierformon",
+ "e.g. httpd/unix-directory" : "ekz. httpd/unix-directory",
+ "Please enter a valid time span" : "Entajpu validan intertempon",
+ "Files WebDAV" : "Dosieroj WebDAV",
+ "Custom URL" : "Propra retadreso",
+ "Select a request URL" : "Elekti petan retadreson",
+ "Android client" : "Androida kliento",
+ "iOS client" : "iOS-a kliento",
+ "Desktop client" : "Labortabla kliento",
+ "Thunderbird & Outlook addons" : "Thunderbird-a kaj Outlook-a aldonaĵo",
+ "Custom user agent" : "Propra retumil-identigilo („user-agent“)",
+ "Select a user agent" : "Elekti retumil-identigilo („user-agent“)",
+ "Select groups" : "Elekti grupojn",
+ "Groups" : "Grupoj",
+ "The configuration is invalid" : "La agordo ne validas",
+ "Save" : "Konservi",
+ "When" : "Kiam",
+ "and" : "kaj",
+ "Cancel" : "Nuligi",
+ "Delete" : "Forigi",
+ "Show less" : "Montri malpli",
+ "Show more" : "Montri pli",
+ "matches" : "kongruas kun",
+ "does not match" : "ne kongruas kun",
+ "is" : "estas",
+ "is not" : "ne estas",
+ "File name" : "Dosiernomo",
+ "File MIME type" : "Dosiera MIME-tipo",
+ "File size (upload)" : "Dosiergrando (alŝuto)",
+ "less" : "malpli",
+ "less or equals" : "malpli aŭ egalas al",
+ "greater or equals" : "pli aŭ egalas al",
+ "greater" : "pli",
+ "Request remote address" : "Fora adreso de la peto",
+ "matches IPv4" : "kongruas kun IPv4",
+ "does not match IPv4" : "ne kongruas kun IPv4",
+ "matches IPv6" : "kongruas kun IPv6",
+ "does not match IPv6" : "ne kongruas kun IPv6",
+ "File system tag" : "Dosiersistema etikedo",
+ "is tagged with" : "estas etikedita per",
+ "is not tagged with" : "ne estas etikedita per",
+ "Request URL" : "Retadreso („URL“) de la peto",
+ "Request time" : "Horo de la peto",
+ "between" : "inter",
+ "not between" : "ne inter",
+ "Request user agent" : "Retumil-identigilo („user-agent“)",
+ "is member of" : "estas membro de",
+ "is not member of" : "ne estas membro de"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es.js b/apps/workflowengine/l10n/es.js
index a2ada331453..4dec679ca90 100644
--- a/apps/workflowengine/l10n/es.js
+++ b/apps/workflowengine/l10n/es.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Guardado",
- "Saving failed:" : "Guardado fallido:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es/esta",
- "is not" : "no es/esta",
- "matches" : "coincidencias",
- "does not match" : "no coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (para subir)",
- "less" : "menos",
- "less or equals" : "menor o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta de archivo de sistema",
- "is tagged with" : "esta etiquetado con",
- "is not tagged with" : "no esta etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "IPv4 coincidencias",
- "does not match IPv4" : "IPv4 sin coincidencias",
- "matches IPv6" : "IPv6 coincidencias",
- "does not match IPv6" : "IPv6 sin coincidencias",
- "Request time" : "Tiempo de espero",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Final",
- "Select timezone…" : "Seleccionar zona horaria...",
- "Request URL" : "URL de solicitud",
- "Predefined URLs" : "URLs predefinidas",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitud del agente usuario ",
- "Sync clients" : "Clientes de sincronización",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Pertenencia a un grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "La operación dada no es valida",
"The given regular expression is invalid" : "La expresión regular dada no es valida",
"The given file size is invalid" : "El tamaño del archivo dado no es válido ",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "La hora de inicio dada no es válida",
"The given end time is invalid" : "El tiempo final no es valido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "Chequeo %s no es valido o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s ha creado %s",
+ "%s modified %s" : "%s ha modificado %s",
+ "%s deleted %s" : "%s ha eliminado %s",
+ "%s accessed %s" : "%s ha accedido a %s",
+ "%s renamed %s" : "%s ha renombrado %s",
+ "%s copied %s" : "%s ha copiado %s",
+ "%s assigned %s to %s" : "%s ha asignado %s a %s",
"Operation #%s does not exist" : "Operación #%s no existe",
+ "Entity %s does not exist" : "Entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es valida",
+ "No events are chosen." : "No se ha elegido ningún evento.",
+ "Entity %s has no event %s" : "La entidad %s no tiene eventos %s",
"Operation %s does not exist" : "Operación %s no existe",
"Operation %s is invalid" : "Operación %s no es valida",
- "Check %s does not exist" : "Chequeo %s no existe",
- "Check %s is invalid" : "Chequeo %s no es valido",
+ "At least one check needs to be provided" : "Has de seleccionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de la operación son demasiado largos",
+ "Invalid check provided" : "La comprobación proporcionada no es válida",
+ "Check %s does not exist" : "La comprobación %s no existe",
+ "Check %s is invalid" : "La comprobación %s no es válida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no se permite con esta entidad",
+ "The provided check value is too long" : "El valor de la comprobación es demasiado grande",
"Check #%s does not exist" : "El chequeo #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Documentación abierta",
- "Add rule group" : "Añadir regla al grupo",
- "Short rule description" : "Descripción de la regla corta",
- "Add rule" : "Añadir regla",
- "Reset" : "Reiniciar",
+ "Check %s is invalid or does not exist" : "Comprueba %s no es valido o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccione un filtro",
+ "Select a comparator" : "Seleccione un comparador",
+ "Remove filter" : "Quitar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Tipo MIME (mimetype) personalizado",
+ "Select a file type" : "Selecciona un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p.ej.: httpd/carpeta-unix",
+ "Please enter a valid time span" : "Por favor especifique un intervalo de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Selecciona una URL de petición",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Selecciona un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Teclee para buscar un grupo …",
+ "Select a trigger" : "Seleccione un disparador",
+ "At least one event must be selected" : "Has de seleccionar al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración es incorrecta",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado con éxito",
- "File mime type" : "Tipo MIME del archivo"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para detalles acerca de cómo escribir su propio flujo, mire la documentación dedesarrollo.",
+ "No flows installed" : "No hay flujos instalados",
+ "Ask your administrator to install new flows." : "Pida a su administrador instalar nuevos flujos.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Explorar la App Store",
+ "Show less" : "Ver menos",
+ "Show more" : "Ver más",
+ "Configured flows" : "Configurar flujos",
+ "Your flows" : "Sus flujos",
+ "No flows configured" : "No hay flujos configurados",
+ "matches" : "coincidencias",
+ "does not match" : "no coincide",
+ "is" : "es/esta",
+ "is not" : "no es/esta",
+ "File name" : "Nombre del archivo",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (para subir)",
+ "less" : "menos",
+ "less or equals" : "menor o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "IPv4 coincidencias",
+ "does not match IPv4" : "IPv4 sin coincidencias",
+ "matches IPv6" : "IPv6 coincidencias",
+ "does not match IPv6" : "IPv6 sin coincidencias",
+ "File system tag" : "Etiqueta de archivo de sistema",
+ "is tagged with" : "esta etiquetado con",
+ "is not tagged with" : "no esta etiquetado con",
+ "Request URL" : "URL de solicitud",
+ "Request time" : "Tiempo de espera",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitud del agente usuario ",
+ "Group membership" : "Membresía a grupos",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
},
-"nplurals=2; plural=(n != 1);");
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/es.json b/apps/workflowengine/l10n/es.json
index d6a9bb79e9b..f25a5a8014b 100644
--- a/apps/workflowengine/l10n/es.json
+++ b/apps/workflowengine/l10n/es.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Guardado fallido:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es/esta",
- "is not" : "no es/esta",
- "matches" : "coincidencias",
- "does not match" : "no coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (para subir)",
- "less" : "menos",
- "less or equals" : "menor o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta de archivo de sistema",
- "is tagged with" : "esta etiquetado con",
- "is not tagged with" : "no esta etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "IPv4 coincidencias",
- "does not match IPv4" : "IPv4 sin coincidencias",
- "matches IPv6" : "IPv6 coincidencias",
- "does not match IPv6" : "IPv6 sin coincidencias",
- "Request time" : "Tiempo de espero",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Final",
- "Select timezone…" : "Seleccionar zona horaria...",
- "Request URL" : "URL de solicitud",
- "Predefined URLs" : "URLs predefinidas",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitud del agente usuario ",
- "Sync clients" : "Clientes de sincronización",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Pertenencia a un grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "La operación dada no es valida",
"The given regular expression is invalid" : "La expresión regular dada no es valida",
"The given file size is invalid" : "El tamaño del archivo dado no es válido ",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "La hora de inicio dada no es válida",
"The given end time is invalid" : "El tiempo final no es valido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "Chequeo %s no es valido o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s ha creado %s",
+ "%s modified %s" : "%s ha modificado %s",
+ "%s deleted %s" : "%s ha eliminado %s",
+ "%s accessed %s" : "%s ha accedido a %s",
+ "%s renamed %s" : "%s ha renombrado %s",
+ "%s copied %s" : "%s ha copiado %s",
+ "%s assigned %s to %s" : "%s ha asignado %s a %s",
"Operation #%s does not exist" : "Operación #%s no existe",
+ "Entity %s does not exist" : "Entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es valida",
+ "No events are chosen." : "No se ha elegido ningún evento.",
+ "Entity %s has no event %s" : "La entidad %s no tiene eventos %s",
"Operation %s does not exist" : "Operación %s no existe",
"Operation %s is invalid" : "Operación %s no es valida",
- "Check %s does not exist" : "Chequeo %s no existe",
- "Check %s is invalid" : "Chequeo %s no es valido",
+ "At least one check needs to be provided" : "Has de seleccionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de la operación son demasiado largos",
+ "Invalid check provided" : "La comprobación proporcionada no es válida",
+ "Check %s does not exist" : "La comprobación %s no existe",
+ "Check %s is invalid" : "La comprobación %s no es válida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no se permite con esta entidad",
+ "The provided check value is too long" : "El valor de la comprobación es demasiado grande",
"Check #%s does not exist" : "El chequeo #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Documentación abierta",
- "Add rule group" : "Añadir regla al grupo",
- "Short rule description" : "Descripción de la regla corta",
- "Add rule" : "Añadir regla",
- "Reset" : "Reiniciar",
+ "Check %s is invalid or does not exist" : "Comprueba %s no es valido o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccione un filtro",
+ "Select a comparator" : "Seleccione un comparador",
+ "Remove filter" : "Quitar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Tipo MIME (mimetype) personalizado",
+ "Select a file type" : "Selecciona un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p.ej.: httpd/carpeta-unix",
+ "Please enter a valid time span" : "Por favor especifique un intervalo de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Selecciona una URL de petición",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Selecciona un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Teclee para buscar un grupo …",
+ "Select a trigger" : "Seleccione un disparador",
+ "At least one event must be selected" : "Has de seleccionar al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración es incorrecta",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado con éxito",
- "File mime type" : "Tipo MIME del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para detalles acerca de cómo escribir su propio flujo, mire la documentación dedesarrollo.",
+ "No flows installed" : "No hay flujos instalados",
+ "Ask your administrator to install new flows." : "Pida a su administrador instalar nuevos flujos.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Explorar la App Store",
+ "Show less" : "Ver menos",
+ "Show more" : "Ver más",
+ "Configured flows" : "Configurar flujos",
+ "Your flows" : "Sus flujos",
+ "No flows configured" : "No hay flujos configurados",
+ "matches" : "coincidencias",
+ "does not match" : "no coincide",
+ "is" : "es/esta",
+ "is not" : "no es/esta",
+ "File name" : "Nombre del archivo",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (para subir)",
+ "less" : "menos",
+ "less or equals" : "menor o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "IPv4 coincidencias",
+ "does not match IPv4" : "IPv4 sin coincidencias",
+ "matches IPv6" : "IPv6 coincidencias",
+ "does not match IPv6" : "IPv6 sin coincidencias",
+ "File system tag" : "Etiqueta de archivo de sistema",
+ "is tagged with" : "esta etiquetado con",
+ "is not tagged with" : "no esta etiquetado con",
+ "Request URL" : "URL de solicitud",
+ "Request time" : "Tiempo de espera",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitud del agente usuario ",
+ "Group membership" : "Membresía a grupos",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_419.js b/apps/workflowengine/l10n/es_419.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_419.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_419.json b/apps/workflowengine/l10n/es_419.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_419.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_AR.js b/apps/workflowengine/l10n/es_AR.js
deleted file mode 100644
index 373275c6b7c..00000000000
--- a/apps/workflowengine/l10n/es_AR.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menor",
- "less or equals" : "menor o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Seleccionar zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos en WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_AR.json b/apps/workflowengine/l10n/es_AR.json
deleted file mode 100644
index b18acc97396..00000000000
--- a/apps/workflowengine/l10n/es_AR.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menor",
- "less or equals" : "menor o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Seleccionar zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos en WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_CL.js b/apps/workflowengine/l10n/es_CL.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_CL.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_CL.json b/apps/workflowengine/l10n/es_CL.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_CL.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_CO.js b/apps/workflowengine/l10n/es_CO.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_CO.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_CO.json b/apps/workflowengine/l10n/es_CO.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_CO.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_CR.js b/apps/workflowengine/l10n/es_CR.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_CR.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_CR.json b/apps/workflowengine/l10n/es_CR.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_CR.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_DO.js b/apps/workflowengine/l10n/es_DO.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_DO.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_DO.json b/apps/workflowengine/l10n/es_DO.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_DO.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_EC.js b/apps/workflowengine/l10n/es_EC.js
index a67dbc8472f..336a4b3c7e0 100644
--- a/apps/workflowengine/l10n/es_EC.js
+++ b/apps/workflowengine/l10n/es_EC.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
@@ -51,23 +12,107 @@ OC.L10N.register(
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s creó %s",
+ "%s modified %s" : "%s modificó %s",
+ "%s deleted %s" : "%s eliminó %s",
+ "%s accessed %s" : "%s accedió a %s",
+ "%s renamed %s" : "%s renombró %s",
+ "%s copied %s" : "%s copió %s",
+ "%s assigned %s to %s" : "%s asignó %s a %s",
"Operation #%s does not exist" : "La operación #%s no existe",
+ "Entity %s does not exist" : "La entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es válida",
+ "No events are chosen." : "No se han elegido eventos.",
+ "Entity %s has no event %s" : "La entidad %s no tiene el evento %s",
"Operation %s does not exist" : "La operación %s no existe",
"Operation %s is invalid" : "La operación %s es inválida",
+ "At least one check needs to be provided" : "Se debe proporcionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de operación proporcionados son demasiado largos",
+ "Invalid check provided" : "Comprobación no válida proporcionada",
"Check %s does not exist" : "La validación %s no existe",
"Check %s is invalid" : "La validación %s no es inválida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no está permitida con esta entidad",
+ "The provided check value is too long" : "El valor de comprobación proporcionado es demasiado largo",
"Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccionar un filtro",
+ "Select a comparator" : "Seleccionar un comparador",
+ "Remove filter" : "Eliminar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo de MIME personalizado",
+ "Custom mimetype" : "Tipo de MIME personalizado",
+ "Select a file type" : "Seleccionar un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p. ej. httpd/unix-directory",
+ "Please enter a valid time span" : "Por favor, introduce un período de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Seleccionar una URL de solicitud",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Select a trigger" : "Seleccionar un desencadenante",
+ "At least one event must be selected" : "Debe seleccionarse al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración no es válida",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Borrar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para obtener detalles sobre cómo escribir tu propio flujo, consulta la documentación de desarrollo.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Navega por la Tienda de aplicaciones",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar más",
+ "Configured flows" : "Flujos configurados",
+ "Your flows" : "Tus flujos",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "is" : "es",
+ "is not" : "no es",
+ "File name" : "Nombre de archivo.",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitar agente de usuario",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
},
-"nplurals=2; plural=(n != 1);");
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/es_EC.json b/apps/workflowengine/l10n/es_EC.json
index 1ae425f4e19..c28e5a50fdd 100644
--- a/apps/workflowengine/l10n/es_EC.json
+++ b/apps/workflowengine/l10n/es_EC.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
@@ -49,23 +10,107 @@
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s creó %s",
+ "%s modified %s" : "%s modificó %s",
+ "%s deleted %s" : "%s eliminó %s",
+ "%s accessed %s" : "%s accedió a %s",
+ "%s renamed %s" : "%s renombró %s",
+ "%s copied %s" : "%s copió %s",
+ "%s assigned %s to %s" : "%s asignó %s a %s",
"Operation #%s does not exist" : "La operación #%s no existe",
+ "Entity %s does not exist" : "La entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es válida",
+ "No events are chosen." : "No se han elegido eventos.",
+ "Entity %s has no event %s" : "La entidad %s no tiene el evento %s",
"Operation %s does not exist" : "La operación %s no existe",
"Operation %s is invalid" : "La operación %s es inválida",
+ "At least one check needs to be provided" : "Se debe proporcionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de operación proporcionados son demasiado largos",
+ "Invalid check provided" : "Comprobación no válida proporcionada",
"Check %s does not exist" : "La validación %s no existe",
"Check %s is invalid" : "La validación %s no es inválida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no está permitida con esta entidad",
+ "The provided check value is too long" : "El valor de comprobación proporcionado es demasiado largo",
"Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccionar un filtro",
+ "Select a comparator" : "Seleccionar un comparador",
+ "Remove filter" : "Eliminar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo de MIME personalizado",
+ "Custom mimetype" : "Tipo de MIME personalizado",
+ "Select a file type" : "Seleccionar un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p. ej. httpd/unix-directory",
+ "Please enter a valid time span" : "Por favor, introduce un período de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Seleccionar una URL de solicitud",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Select a trigger" : "Seleccionar un desencadenante",
+ "At least one event must be selected" : "Debe seleccionarse al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración no es válida",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Borrar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para obtener detalles sobre cómo escribir tu propio flujo, consulta la documentación de desarrollo.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Navega por la Tienda de aplicaciones",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar más",
+ "Configured flows" : "Flujos configurados",
+ "Your flows" : "Tus flujos",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "is" : "es",
+ "is not" : "no es",
+ "File name" : "Nombre de archivo.",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitar agente de usuario",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_GT.js b/apps/workflowengine/l10n/es_GT.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_GT.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_GT.json b/apps/workflowengine/l10n/es_GT.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_GT.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_HN.js b/apps/workflowengine/l10n/es_HN.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_HN.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_HN.json b/apps/workflowengine/l10n/es_HN.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_HN.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_MX.js b/apps/workflowengine/l10n/es_MX.js
index a67dbc8472f..811647603b5 100644
--- a/apps/workflowengine/l10n/es_MX.js
+++ b/apps/workflowengine/l10n/es_MX.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s ha creado %s",
+ "%s modified %s" : "%s ha modificado %s",
+ "%s deleted %s" : "%s ha eliminado %s",
+ "%s accessed %s" : "%s ha accedido a %s",
+ "%s renamed %s" : "%s ha renombrado %s",
+ "%s copied %s" : "%s ha copiado %s",
+ "%s assigned %s to %s" : "%s ha asignado %s a %s",
"Operation #%s does not exist" : "La operación #%s no existe",
+ "Entity %s does not exist" : "La entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es válida",
+ "No events are chosen." : "No se han elegido eventos.",
+ "Entity %s has no event %s" : "La entidad %s no tiene evento %s",
"Operation %s does not exist" : "La operación %s no existe",
"Operation %s is invalid" : "La operación %s es inválida",
+ "At least one check needs to be provided" : "Se debe proporcionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de operación proporcionados son demasiado largos",
+ "Invalid check provided" : "La comprobación proporcionada no es válida",
"Check %s does not exist" : "La validación %s no existe",
"Check %s is invalid" : "La validación %s no es inválida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no se permite con esta entidad",
+ "The provided check value is too long" : "El valor de comprobación proporcionado es demasiado largo",
"Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccionar un filtro",
+ "Select a comparator" : "Seleccionar un comparador",
+ "Remove filter" : "Quitar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo de MIME personalizado",
+ "Custom mimetype" : "mimetype personalizado",
+ "Select a file type" : "Seleccionar un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p. ej. httpd/unix-directory",
+ "Please enter a valid time span" : "Por favor introduzca un período de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Seleccionar una URL de solicitud",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Escriba para seleccionar un grupo...",
+ "Select a trigger" : "Seleccionar un desencadenante",
+ "At least one event must be selected" : "Debe seleccionar al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración no es válida",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para obtener detalles sobre cómo escribir su propio flujo, consulte la documentación de desarrollo.",
+ "No flows installed" : "No hay flujos instalados",
+ "Ask your administrator to install new flows." : "Pida a su administrador instalar nuevos flujos.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Explorar la tienda de aplicaciones",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar más",
+ "Configured flows" : "Flujos configurados",
+ "Your flows" : "Sus flujos",
+ "No flows configured" : "No hay flujos configurados",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "is" : "es",
+ "is not" : "no es",
+ "File name" : "Nombre de archivo",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Group membership" : "Membresía a grupos",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
},
-"nplurals=2; plural=(n != 1);");
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/es_MX.json b/apps/workflowengine/l10n/es_MX.json
index 1ae425f4e19..3823a56aed4 100644
--- a/apps/workflowengine/l10n/es_MX.json
+++ b/apps/workflowengine/l10n/es_MX.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
"The given operator is invalid" : "El operador indicado es inválido",
"The given regular expression is invalid" : "La expresión regular indicada es inválida",
"The given file size is invalid" : "El tamaño de archivo indicado es inválido",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "El tiempo inicial dado no es válido",
"The given end time is invalid" : "El tiempo final dado no es válido",
"The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "File" : "Archivo",
+ "File created" : "Archivo creado",
+ "File updated" : "Archivo actualizado",
+ "File renamed" : "Archivo renombrado",
+ "File deleted" : "Archivo eliminado",
+ "File accessed" : "Archivo accedido",
+ "File copied" : "Archivo copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Alguien",
+ "%s created %s" : "%s ha creado %s",
+ "%s modified %s" : "%s ha modificado %s",
+ "%s deleted %s" : "%s ha eliminado %s",
+ "%s accessed %s" : "%s ha accedido a %s",
+ "%s renamed %s" : "%s ha renombrado %s",
+ "%s copied %s" : "%s ha copiado %s",
+ "%s assigned %s to %s" : "%s ha asignado %s a %s",
"Operation #%s does not exist" : "La operación #%s no existe",
+ "Entity %s does not exist" : "La entidad %s no existe",
+ "Entity %s is invalid" : "La entidad %s no es válida",
+ "No events are chosen." : "No se han elegido eventos.",
+ "Entity %s has no event %s" : "La entidad %s no tiene evento %s",
"Operation %s does not exist" : "La operación %s no existe",
"Operation %s is invalid" : "La operación %s es inválida",
+ "At least one check needs to be provided" : "Se debe proporcionar al menos una comprobación",
+ "The provided operation data is too long" : "Los datos de operación proporcionados son demasiado largos",
+ "Invalid check provided" : "La comprobación proporcionada no es válida",
"Check %s does not exist" : "La validación %s no existe",
"Check %s is invalid" : "La validación %s no es inválida",
+ "Check %s is not allowed with this entity" : "La comprobación %s no se permite con esta entidad",
+ "The provided check value is too long" : "El valor de comprobación proporcionado es demasiado largo",
"Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
+ "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
+ "Flow" : "Flujo",
+ "Nextcloud workflow engine" : "Motor de flujo de trabajo de Nextcloud",
+ "Select a filter" : "Seleccionar un filtro",
+ "Select a comparator" : "Seleccionar un comparador",
+ "Remove filter" : "Quitar filtro",
+ "Folder" : "Carpeta",
+ "Images" : "Imágenes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo de MIME personalizado",
+ "Custom mimetype" : "mimetype personalizado",
+ "Select a file type" : "Seleccionar un tipo de archivo",
+ "e.g. httpd/unix-directory" : "p. ej. httpd/unix-directory",
+ "Please enter a valid time span" : "Por favor introduzca un período de tiempo válido",
+ "Files WebDAV" : "Archivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Seleccionar una URL de solicitud",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos de Thunderbird y Outlook",
+ "Custom user agent" : "Agente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un agente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Escriba para seleccionar un grupo...",
+ "Select a trigger" : "Seleccionar un desencadenante",
+ "At least one event must be selected" : "Debe seleccionar al menos un evento",
+ "Add new flow" : "Añadir nuevo flujo",
+ "The configuration is invalid" : "La configuración no es válida",
+ "Active" : "Activo",
"Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
+ "When" : "Cuando",
+ "and" : "y",
+ "Add a new filter" : "Añadir un nuevo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Flujos disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Para obtener detalles sobre cómo escribir su propio flujo, consulte la documentación de desarrollo.",
+ "No flows installed" : "No hay flujos instalados",
+ "Ask your administrator to install new flows." : "Pida a su administrador instalar nuevos flujos.",
+ "More flows" : "Más flujos",
+ "Browse the App Store" : "Explorar la tienda de aplicaciones",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar más",
+ "Configured flows" : "Flujos configurados",
+ "Your flows" : "Sus flujos",
+ "No flows configured" : "No hay flujos configurados",
+ "matches" : "coincide",
+ "does not match" : "No coincide",
+ "is" : "es",
+ "is not" : "no es",
+ "File name" : "Nombre de archivo",
+ "File MIME type" : "Tipo MIME del archivo",
+ "File size (upload)" : "Tamaño del archivo (carga)",
+ "less" : "menos",
+ "less or equals" : "menos o igual",
+ "greater or equals" : "mayor o igual",
+ "greater" : "mayor",
+ "Request remote address" : "Solicitar dirección remota",
+ "matches IPv4" : "coincide con IPv4",
+ "does not match IPv4" : "no coincide con IPv4",
+ "matches IPv6" : "coincide con IPv6",
+ "does not match IPv6" : "no coincide con IPv6",
+ "File system tag" : "Etiqueta del sistema de archivos",
+ "is tagged with" : "está etiquetado con",
+ "is not tagged with" : "no está etiquetado con",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tiempo de la solicitud",
+ "between" : "entre",
+ "not between" : "no entre",
+ "Request user agent" : "Solicitar agente de usuario",
+ "Group membership" : "Membresía a grupos",
+ "is member of" : "es miembro de",
+ "is not member of" : "no es miembro de"
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_NI.js b/apps/workflowengine/l10n/es_NI.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_NI.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_NI.json b/apps/workflowengine/l10n/es_NI.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_NI.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_PA.js b/apps/workflowengine/l10n/es_PA.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_PA.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_PA.json b/apps/workflowengine/l10n/es_PA.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_PA.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_PE.js b/apps/workflowengine/l10n/es_PE.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_PE.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_PE.json b/apps/workflowengine/l10n/es_PE.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_PE.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_PR.js b/apps/workflowengine/l10n/es_PR.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_PR.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_PR.json b/apps/workflowengine/l10n/es_PR.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_PR.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_PY.js b/apps/workflowengine/l10n/es_PY.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_PY.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_PY.json b/apps/workflowengine/l10n/es_PY.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_PY.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_SV.js b/apps/workflowengine/l10n/es_SV.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_SV.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_SV.json b/apps/workflowengine/l10n/es_SV.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_SV.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/es_UY.js b/apps/workflowengine/l10n/es_UY.js
deleted file mode 100644
index a67dbc8472f..00000000000
--- a/apps/workflowengine/l10n/es_UY.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/es_UY.json b/apps/workflowengine/l10n/es_UY.json
deleted file mode 100644
index 1ae425f4e19..00000000000
--- a/apps/workflowengine/l10n/es_UY.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Guardado",
- "Saving failed:" : "Falla al guardar:",
- "File MIME type" : "Tipo MIME del archivo",
- "is" : "es",
- "is not" : "no es",
- "matches" : "coincide",
- "does not match" : "No coincide",
- "Example: {placeholder}" : "Ejemplo: {placeholder}",
- "File size (upload)" : "Tamaño del archivo (carga)",
- "less" : "menos",
- "less or equals" : "menos o igual",
- "greater or equals" : "mayor o igual",
- "greater" : "mayor",
- "File system tag" : "Etiqueta del sistema de archivos",
- "is tagged with" : "está etiquetado con",
- "is not tagged with" : "no está etiquetado con",
- "Select tag…" : "Seleccionar etiqueta...",
- "Request remote address" : "Solicitar dirección remota",
- "matches IPv4" : "coincide con IPv4",
- "does not match IPv4" : "no coincide con IPv4",
- "matches IPv6" : "coincide con IPv6",
- "does not match IPv6" : "no coincide con IPv6",
- "Request time" : "Tiempo de la solicitud",
- "between" : "entre",
- "not between" : "no entre",
- "Start" : "Inicio",
- "End" : "Fin",
- "Select timezone…" : "Selecciona la zona horaria...",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URLs predefinidos",
- "Files WebDAV" : "Archivos WebDAV",
- "Request user agent" : "Solicitar agente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Membresia al grupo de usuarios",
- "is member of" : "es miembro de",
- "is not member of" : "no es miembro de",
- "The given operator is invalid" : "El operador indicado es inválido",
- "The given regular expression is invalid" : "La expresión regular indicada es inválida",
- "The given file size is invalid" : "El tamaño de archivo indicado es inválido",
- "The given tag id is invalid" : "El id de la etiqueta es inválido",
- "The given IP range is invalid" : "El rango de IP's es inválido",
- "The given IP range is not valid for IPv4" : "El rango de IPs dado no es válido para IPv4",
- "The given IP range is not valid for IPv6" : "El rango de IPs dado no es válido para IPv6",
- "The given time span is invalid" : "El espacio de tiempo dado es inválido",
- "The given start time is invalid" : "El tiempo inicial dado no es válido",
- "The given end time is invalid" : "El tiempo final dado no es válido",
- "The given group does not exist" : "El grupo dado no existe",
- "Check %s is invalid or does not exist" : "La validación %s es inválida o no existe",
- "Operation #%s does not exist" : "La operación #%s no existe",
- "Operation %s does not exist" : "La operación %s no existe",
- "Operation %s is invalid" : "La operación %s es inválida",
- "Check %s does not exist" : "La validación %s no existe",
- "Check %s is invalid" : "La validación %s no es inválida",
- "Check #%s does not exist" : "La validación #%s no existe",
- "Workflow" : "Flujo de trabajo",
- "Open documentation" : "Abrir la documentación",
- "Add rule group" : "Agregar regla de grupo",
- "Short rule description" : "Descripción corta de la regla",
- "Add rule" : "Agregar regla",
- "Reset" : "Restablecer",
- "Save" : "Guardar",
- "Saving…" : "Guardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Guardado exitosamente",
- "File mime type" : "Tipo mime del archivo"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/et_EE.js b/apps/workflowengine/l10n/et_EE.js
index a35458ac2e1..a6dd9bd897e 100644
--- a/apps/workflowengine/l10n/et_EE.js
+++ b/apps/workflowengine/l10n/et_EE.js
@@ -1,68 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Salvestatud",
- "Saving failed:" : "Salvestamine ebaõnnestus:",
- "File MIME type" : "Faili MIME tüüp",
- "is" : "on",
- "is not" : "ei ole",
+ "The given operator is invalid" : "Antud operaator/tehtemärk on vigane",
+ "The given regular expression is invalid" : "Antud regulaaravaldis on vigane",
+ "The given file size is invalid" : "Antud faili suurus on vigane",
+ "The given tag id is invalid" : "Antud sildi tunnus on vigane",
+ "The given IP range is invalid" : "Antud IP-aadresside vahemik on vigane",
+ "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta",
+ "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta",
+ "The given time span is invalid" : "Antud ajavahemik on vigane",
+ "The given start time is invalid" : "Antud algusaeg on vigane",
+ "The given end time is invalid" : "Antud lõppaeg on vigane",
+ "The given group does not exist" : "Antud gruppi ei leitud",
+ "File" : "Fail",
+ "File created" : "Fail on loodud",
+ "File updated" : "Fail on uuendatud",
+ "File renamed" : "Faili nimi on muudetud",
+ "File deleted" : "Fail on kustutatud",
+ "File accessed" : "Faili on kasutatud",
+ "File copied" : "Fail on kopeeritud",
+ "Tag assigned" : "Silt on lisatud",
+ "Someone" : "Keegi",
+ "%s created %s" : "%s lõi %s",
+ "%s modified %s" : "%s muutis %s",
+ "%s deleted %s" : "%s kustutas %s",
+ "%s accessed %s" : "%s kasutas töövoogu %s",
+ "%s renamed %s" : "%s muutis %s nime",
+ "%s copied %s" : "%s kopeeris %s",
+ "%s assigned %s to %s" : "%s määras %s kasutajale %s",
+ "Operation #%s does not exist" : "Tegevus # %s ei leitud",
+ "Entity %s does not exist" : "%s objekti pole olemas",
+ "Entity %s is invalid" : "%s objekt on vigane",
+ "No events are chosen." : "Ühtegi sündmust pole valitud.",
+ "Entity %s has no event %s" : "%s objektil pole %s sündmust",
+ "Operation %s does not exist" : "%s tegevust pole olemas",
+ "Operation %s is invalid" : " %s tegevus on vigane",
+ "At least one check needs to be provided" : "Pead lisama vähemalt ühe kontrolli",
+ "The provided operation data is too long" : "Lisatud tegevuse andmed on liiga mahukad",
+ "Invalid check provided" : "Oled lisanud vigase kontrolli",
+ "Check %s does not exist" : "%s kontrolli pole olemas",
+ "Check %s is invalid" : "%s kontroll on vigane",
+ "Check %s is not allowed with this entity" : "Selle objekti puhul ei saa kasutada seda kontrolli: %s",
+ "The provided check value is too long" : "Lisatud kontrolli väärtus on liiga pikk",
+ "Check #%s does not exist" : "Kontrolli #%s pole olemas",
+ "Check %s is invalid or does not exist" : "%s kontroll on vigane või pole teda olemas",
+ "Flow" : "Töövoog",
+ "Nextcloud workflow engine" : "Nextcloudi töövoogude mootor",
+ "Select a filter" : "Vali filter",
+ "Select a comparator" : "Vali võrdleja",
+ "Remove filter" : "Eemalda filter",
+ "Folder" : "Kaust",
+ "Images" : "Pildid",
+ "Office documents" : "Kontroritarkvara dokumendid",
+ "PDF documents" : "PDF-dokumendid",
+ "Custom MIME type" : "Sinu määratud MIME-tüüp",
+ "Custom mimetype" : "Sinu määratud MIME-tüüp",
+ "Select a file type" : "Vali failitüüp",
+ "e.g. httpd/unix-directory" : "nt. httpd/unix-directory",
+ "Please enter a valid time span" : "Palun sisesta korrektne ajavahemik",
+ "Files WebDAV" : "WebDAV-i failid",
+ "Custom URL" : "Sinu määratud võrguaadress",
+ "Select a request URL" : "Vali päringu võrguaadress",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS-i klient",
+ "Desktop client" : "Töölaua klient",
+ "Thunderbird & Outlook addons" : "Thunderbirdi ja Outlooki lisad",
+ "Custom user agent" : "Sinu määratud rakenduse tunnus",
+ "Select a user agent" : "Vali rakenduse tunnus",
+ "Select groups" : "Vali grupid",
+ "Groups" : "Grupid",
+ "Type to search for group …" : "Grupi otsimiseks kirjuta midagi…",
+ "Select a trigger" : "Vali päästik",
+ "At least one event must be selected" : "Palun valitud vähemalt üks sündmus",
+ "Add new flow" : "Lisa uus töövoog",
+ "The configuration is invalid" : "Seadistus on vigane",
+ "Active" : "Aktiivne",
+ "Save" : "Salvesta",
+ "When" : "Millal",
+ "and" : "ja",
+ "Add a new filter" : "Lisa uus filter",
+ "Cancel" : "Loobu",
+ "Delete" : "Kustuta",
+ "Available flows" : "Saadaval töövood",
+ "For details on how to write your own flow, check out the development documentation." : "Lisateavet oma töövoogude kirjutamiseks leiad dokumentatsioonist arendajatele.",
+ "No flows installed" : "Ühtegi töövoogu pole paigaldatud",
+ "Ask your administrator to install new flows." : "Palu oma serveri haldajat, et ta paigaldaks uusi töövooge.",
+ "More flows" : "Veel töövooge",
+ "Browse the App Store" : "Sirvi rakendustepoodi",
+ "Show less" : "Näita vähem",
+ "Show more" : "Näita rohkem",
+ "Configured flows" : "Seadistatud töövood",
+ "Your flows" : "Sinu töövood",
+ "No flows configured" : "Ühtegi töövoogu pole seadistatud",
"matches" : "kattub",
"does not match" : "ei kattu",
- "Example: {placeholder}" : "Näide: {placeholder}",
+ "is" : "on",
+ "is not" : "ei ole",
+ "File name" : "Failinimi",
+ "File MIME type" : "Faili MIME-tüüp",
"File size (upload)" : "Faili suurus (üleslaadimine)",
"less" : "väiksem",
"less or equals" : "väiksem või võrdne",
"greater or equals" : "suurem või võrdne",
"greater" : "suurem",
- "File system tag" : "Faili süsteemi silt",
- "is tagged with" : "on sildiga",
- "is not tagged with" : "ei ole sildiga",
- "Select tag…" : "Vali silt...",
"Request remote address" : "Päringu kaugaadress",
"matches IPv4" : "kattub IPv4 aadressiga",
"does not match IPv4" : "Ei kattu IPv4 aadressiga",
"matches IPv6" : "kattub IPv6 aadressiga",
"does not match IPv6" : "Ei kattu IPv6 aadressiga",
+ "File system tag" : "Failisüsteemi silt",
+ "is tagged with" : "on sildiga",
+ "is not tagged with" : "ei ole märgitud sildiga",
+ "Request URL" : "Päringu võrguaadress",
"Request time" : "Päringu aeg",
"between" : "vahemikus",
"not between" : "ei ole vahemikus",
- "Start" : "Algus",
- "End" : "Lõpp",
- "Select timezone…" : "Vali ajavöönd",
- "Request URL" : "Päringu URL",
- "Predefined URLs" : "Eelmääratletud URL-id",
- "Files WebDAV" : "WebDAV failid",
- "Request user agent" : "Päringu \"user agent\"",
- "Sync clients" : "Kliendiprogrammid",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Töölaua klient",
- "User group membership" : "Kasutajagrupi liige",
+ "Request user agent" : "Päri rakenduse tunnust",
+ "Group membership" : "Grupi liikmelisus",
"is member of" : "on liige",
- "is not member of" : "ei ole liige",
- "The given regular expression is invalid" : "Antud regulaaravaldis on vigane",
- "The given file size is invalid" : "Antud faili suurus on vigane",
- "The given tag id is invalid" : "Antud sildi ID on vigane",
- "The given IP range is invalid" : "Antud IP vahemik on vigane",
- "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta",
- "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta",
- "The given time span is invalid" : "Antud ajavahemik on vigane",
- "The given start time is invalid" : "Antud algusaeg on vigane",
- "The given end time is invalid" : "Antud lõppaeg on vigane",
- "The given group does not exist" : "Antud gruppi ei leitud",
- "Operation #%s does not exist" : "Tegevus # %s ei leitud",
- "Operation %s does not exist" : "Tegevust %s ei leitud",
- "Operation %s is invalid" : "Tegevus %s on vigane",
- "Workflow" : "Töövoog",
- "Open documentation" : "Ava dokumentatsioon",
- "Add rule group" : "Lisa reegligrupp",
- "Short rule description" : "Reegli lühikirjeldus",
- "Add rule" : "Lisa reegel",
- "Reset" : "Lähtesta",
- "Save" : "Salvesta",
- "Saving…" : "Salvestamine...",
- "Loading…" : "Laadimine...",
- "Successfully saved" : "Edukalt salvestatud",
- "File mime type" : "Faili MIME tüüp"
+ "is not member of" : "ei ole liige"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/et_EE.json b/apps/workflowengine/l10n/et_EE.json
index 65067361a14..3da17c5756d 100644
--- a/apps/workflowengine/l10n/et_EE.json
+++ b/apps/workflowengine/l10n/et_EE.json
@@ -1,66 +1,121 @@
{ "translations": {
- "Saved" : "Salvestatud",
- "Saving failed:" : "Salvestamine ebaõnnestus:",
- "File MIME type" : "Faili MIME tüüp",
- "is" : "on",
- "is not" : "ei ole",
+ "The given operator is invalid" : "Antud operaator/tehtemärk on vigane",
+ "The given regular expression is invalid" : "Antud regulaaravaldis on vigane",
+ "The given file size is invalid" : "Antud faili suurus on vigane",
+ "The given tag id is invalid" : "Antud sildi tunnus on vigane",
+ "The given IP range is invalid" : "Antud IP-aadresside vahemik on vigane",
+ "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta",
+ "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta",
+ "The given time span is invalid" : "Antud ajavahemik on vigane",
+ "The given start time is invalid" : "Antud algusaeg on vigane",
+ "The given end time is invalid" : "Antud lõppaeg on vigane",
+ "The given group does not exist" : "Antud gruppi ei leitud",
+ "File" : "Fail",
+ "File created" : "Fail on loodud",
+ "File updated" : "Fail on uuendatud",
+ "File renamed" : "Faili nimi on muudetud",
+ "File deleted" : "Fail on kustutatud",
+ "File accessed" : "Faili on kasutatud",
+ "File copied" : "Fail on kopeeritud",
+ "Tag assigned" : "Silt on lisatud",
+ "Someone" : "Keegi",
+ "%s created %s" : "%s lõi %s",
+ "%s modified %s" : "%s muutis %s",
+ "%s deleted %s" : "%s kustutas %s",
+ "%s accessed %s" : "%s kasutas töövoogu %s",
+ "%s renamed %s" : "%s muutis %s nime",
+ "%s copied %s" : "%s kopeeris %s",
+ "%s assigned %s to %s" : "%s määras %s kasutajale %s",
+ "Operation #%s does not exist" : "Tegevus # %s ei leitud",
+ "Entity %s does not exist" : "%s objekti pole olemas",
+ "Entity %s is invalid" : "%s objekt on vigane",
+ "No events are chosen." : "Ühtegi sündmust pole valitud.",
+ "Entity %s has no event %s" : "%s objektil pole %s sündmust",
+ "Operation %s does not exist" : "%s tegevust pole olemas",
+ "Operation %s is invalid" : " %s tegevus on vigane",
+ "At least one check needs to be provided" : "Pead lisama vähemalt ühe kontrolli",
+ "The provided operation data is too long" : "Lisatud tegevuse andmed on liiga mahukad",
+ "Invalid check provided" : "Oled lisanud vigase kontrolli",
+ "Check %s does not exist" : "%s kontrolli pole olemas",
+ "Check %s is invalid" : "%s kontroll on vigane",
+ "Check %s is not allowed with this entity" : "Selle objekti puhul ei saa kasutada seda kontrolli: %s",
+ "The provided check value is too long" : "Lisatud kontrolli väärtus on liiga pikk",
+ "Check #%s does not exist" : "Kontrolli #%s pole olemas",
+ "Check %s is invalid or does not exist" : "%s kontroll on vigane või pole teda olemas",
+ "Flow" : "Töövoog",
+ "Nextcloud workflow engine" : "Nextcloudi töövoogude mootor",
+ "Select a filter" : "Vali filter",
+ "Select a comparator" : "Vali võrdleja",
+ "Remove filter" : "Eemalda filter",
+ "Folder" : "Kaust",
+ "Images" : "Pildid",
+ "Office documents" : "Kontroritarkvara dokumendid",
+ "PDF documents" : "PDF-dokumendid",
+ "Custom MIME type" : "Sinu määratud MIME-tüüp",
+ "Custom mimetype" : "Sinu määratud MIME-tüüp",
+ "Select a file type" : "Vali failitüüp",
+ "e.g. httpd/unix-directory" : "nt. httpd/unix-directory",
+ "Please enter a valid time span" : "Palun sisesta korrektne ajavahemik",
+ "Files WebDAV" : "WebDAV-i failid",
+ "Custom URL" : "Sinu määratud võrguaadress",
+ "Select a request URL" : "Vali päringu võrguaadress",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS-i klient",
+ "Desktop client" : "Töölaua klient",
+ "Thunderbird & Outlook addons" : "Thunderbirdi ja Outlooki lisad",
+ "Custom user agent" : "Sinu määratud rakenduse tunnus",
+ "Select a user agent" : "Vali rakenduse tunnus",
+ "Select groups" : "Vali grupid",
+ "Groups" : "Grupid",
+ "Type to search for group …" : "Grupi otsimiseks kirjuta midagi…",
+ "Select a trigger" : "Vali päästik",
+ "At least one event must be selected" : "Palun valitud vähemalt üks sündmus",
+ "Add new flow" : "Lisa uus töövoog",
+ "The configuration is invalid" : "Seadistus on vigane",
+ "Active" : "Aktiivne",
+ "Save" : "Salvesta",
+ "When" : "Millal",
+ "and" : "ja",
+ "Add a new filter" : "Lisa uus filter",
+ "Cancel" : "Loobu",
+ "Delete" : "Kustuta",
+ "Available flows" : "Saadaval töövood",
+ "For details on how to write your own flow, check out the development documentation." : "Lisateavet oma töövoogude kirjutamiseks leiad dokumentatsioonist arendajatele.",
+ "No flows installed" : "Ühtegi töövoogu pole paigaldatud",
+ "Ask your administrator to install new flows." : "Palu oma serveri haldajat, et ta paigaldaks uusi töövooge.",
+ "More flows" : "Veel töövooge",
+ "Browse the App Store" : "Sirvi rakendustepoodi",
+ "Show less" : "Näita vähem",
+ "Show more" : "Näita rohkem",
+ "Configured flows" : "Seadistatud töövood",
+ "Your flows" : "Sinu töövood",
+ "No flows configured" : "Ühtegi töövoogu pole seadistatud",
"matches" : "kattub",
"does not match" : "ei kattu",
- "Example: {placeholder}" : "Näide: {placeholder}",
+ "is" : "on",
+ "is not" : "ei ole",
+ "File name" : "Failinimi",
+ "File MIME type" : "Faili MIME-tüüp",
"File size (upload)" : "Faili suurus (üleslaadimine)",
"less" : "väiksem",
"less or equals" : "väiksem või võrdne",
"greater or equals" : "suurem või võrdne",
"greater" : "suurem",
- "File system tag" : "Faili süsteemi silt",
- "is tagged with" : "on sildiga",
- "is not tagged with" : "ei ole sildiga",
- "Select tag…" : "Vali silt...",
"Request remote address" : "Päringu kaugaadress",
"matches IPv4" : "kattub IPv4 aadressiga",
"does not match IPv4" : "Ei kattu IPv4 aadressiga",
"matches IPv6" : "kattub IPv6 aadressiga",
"does not match IPv6" : "Ei kattu IPv6 aadressiga",
+ "File system tag" : "Failisüsteemi silt",
+ "is tagged with" : "on sildiga",
+ "is not tagged with" : "ei ole märgitud sildiga",
+ "Request URL" : "Päringu võrguaadress",
"Request time" : "Päringu aeg",
"between" : "vahemikus",
"not between" : "ei ole vahemikus",
- "Start" : "Algus",
- "End" : "Lõpp",
- "Select timezone…" : "Vali ajavöönd",
- "Request URL" : "Päringu URL",
- "Predefined URLs" : "Eelmääratletud URL-id",
- "Files WebDAV" : "WebDAV failid",
- "Request user agent" : "Päringu \"user agent\"",
- "Sync clients" : "Kliendiprogrammid",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Töölaua klient",
- "User group membership" : "Kasutajagrupi liige",
+ "Request user agent" : "Päri rakenduse tunnust",
+ "Group membership" : "Grupi liikmelisus",
"is member of" : "on liige",
- "is not member of" : "ei ole liige",
- "The given regular expression is invalid" : "Antud regulaaravaldis on vigane",
- "The given file size is invalid" : "Antud faili suurus on vigane",
- "The given tag id is invalid" : "Antud sildi ID on vigane",
- "The given IP range is invalid" : "Antud IP vahemik on vigane",
- "The given IP range is not valid for IPv4" : "Antud IP vahemik ei kehti IPv4 kohta",
- "The given IP range is not valid for IPv6" : "Antud IP vahemik ei kehti IPv6 kohta",
- "The given time span is invalid" : "Antud ajavahemik on vigane",
- "The given start time is invalid" : "Antud algusaeg on vigane",
- "The given end time is invalid" : "Antud lõppaeg on vigane",
- "The given group does not exist" : "Antud gruppi ei leitud",
- "Operation #%s does not exist" : "Tegevus # %s ei leitud",
- "Operation %s does not exist" : "Tegevust %s ei leitud",
- "Operation %s is invalid" : "Tegevus %s on vigane",
- "Workflow" : "Töövoog",
- "Open documentation" : "Ava dokumentatsioon",
- "Add rule group" : "Lisa reegligrupp",
- "Short rule description" : "Reegli lühikirjeldus",
- "Add rule" : "Lisa reegel",
- "Reset" : "Lähtesta",
- "Save" : "Salvesta",
- "Saving…" : "Salvestamine...",
- "Loading…" : "Laadimine...",
- "Successfully saved" : "Edukalt salvestatud",
- "File mime type" : "Faili MIME tüüp"
+ "is not member of" : "ei ole liige"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/eu.js b/apps/workflowengine/l10n/eu.js
new file mode 100644
index 00000000000..4f995c0244e
--- /dev/null
+++ b/apps/workflowengine/l10n/eu.js
@@ -0,0 +1,118 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Zehaztutako eragilea baliogabea da",
+ "The given regular expression is invalid" : "Zehaztutako adierazpen erregularra baliogabea da",
+ "The given file size is invalid" : "Zehaztutako fitxategi tamaina baliogabea da",
+ "The given tag id is invalid" : "Zehaztutako etiketa baliogabea da",
+ "The given IP range is invalid" : "Zehaztutako IP barrutia baliogabea da",
+ "The given IP range is not valid for IPv4" : "Zehaztutako IP barrutia baliogabea da IPv4rako",
+ "The given IP range is not valid for IPv6" : "Zehaztutako IP barrutia baliogabea da IPv6rako",
+ "The given time span is invalid" : "Zehaztutako denbora tartea baliogabea da",
+ "The given start time is invalid" : "Zehaztutako hasiera-ordua baliogabea da",
+ "The given end time is invalid" : "Zehaztutako amaiera-ordua baliogabea da",
+ "The given group does not exist" : "Ez dago zehaztutako talde hori",
+ "File" : "Fitxategia",
+ "File created" : "Fitxategia sortu da",
+ "File updated" : "Fitxategia eguneratuta",
+ "File renamed" : "Fitxategiaren izena aldatu da",
+ "File deleted" : "Fitxategia ezabatuta",
+ "File accessed" : "Fitxategia atzituta",
+ "File copied" : "Fitxategia kopiatu da",
+ "Tag assigned" : "Etiketa esleitu da",
+ "Someone" : "Norbait",
+ "%s created %s" : "%s(e)k %s sortu du",
+ "%s modified %s" : "%s(e)k %s aldatu du",
+ "%s deleted %s" : "%s(e)k %s ezabatu du",
+ "%s accessed %s" : "%s(e)k %s atzitu du",
+ "%s renamed %s" : "%s(e)k %s izenez aldatu du",
+ "%s copied %s" : "%s(e)k %s kopiatu du",
+ "%s assigned %s to %s" : "%s(e)k %s esleitu dio %s(r)i",
+ "Operation #%s does not exist" : "Ez dago #%s eragiketarik",
+ "Entity %s does not exist" : "Ez dago %s entitaterik",
+ "Entity %s is invalid" : "%s entitatea baliogabea da",
+ "No events are chosen." : "Ez da gertaerarik aukeratu.",
+ "Entity %s has no event %s" : "%s entitateak ez du %s gertaerarik",
+ "Operation %s does not exist" : "Ez dago %s eragiketarik",
+ "Operation %s is invalid" : "%seragiketa baliogabea da",
+ "At least one check needs to be provided" : "Gutxienez egiaztapen bat eman behar da",
+ "The provided operation data is too long" : "Emandako eragiketa datuak luzeegiak dira.",
+ "Invalid check provided" : "Baliogabeko egiaztapena eman da",
+ "Check %s does not exist" : "%segiaztapena ez dago",
+ "Check %s is invalid" : "%segiaztapena baliogabea da",
+ "Check %s is not allowed with this entity" : "%segiaztapena ez da onartzen entitate honekin",
+ "The provided check value is too long" : "Emandako egiaztatze balioa luzeegia da.",
+ "Check #%s does not exist" : "#%s egiaztapena ez dago",
+ "Check %s is invalid or does not exist" : "%s egiaztapena baliogabea da edo ez dago",
+ "Flow" : "Fluxua",
+ "Nextcloud workflow engine" : "Nextcloud lan-fluxu motorra",
+ "Select a filter" : "Hautatu iragazki bat",
+ "Select a comparator" : "Hautatu konparatzailea",
+ "Remove filter" : "Kendu iragazkia",
+ "Folder" : "Karpeta",
+ "Images" : "Irudiak",
+ "Office documents" : "Office dokumentuak",
+ "PDF documents" : "PDF dokumentuak",
+ "Custom MIME type" : "MIME mota pertsonalizatua",
+ "Custom mimetype" : "Mime mota pertsonalizatua",
+ "Select a file type" : "Hautatu fitxategi mota bat",
+ "e.g. httpd/unix-directory" : "adib. httpd/unix-direktorioa",
+ "Please enter a valid time span" : "Sartu baliozko denbora tarte bat",
+ "Files WebDAV" : "WebDAV fitxategiak",
+ "Custom URL" : "URL pertsonalizatua",
+ "Select a request URL" : "Hautatu eskaera URL bat",
+ "Android client" : "Android bezeroa",
+ "iOS client" : "iOS bezeroa",
+ "Desktop client" : "Mahaigaineko bezeroa",
+ "Thunderbird & Outlook addons" : "Thunderbird eta Outlook gehigarriak",
+ "Custom user agent" : "Erabiltzaile-agente pertsonalizatua",
+ "Select a user agent" : "Hautatu erabiltzaile-agentea",
+ "Select groups" : "Hautatu taldeak",
+ "Groups" : "Taldeak",
+ "At least one event must be selected" : "Gutxienez gertaera bat hautatu behar da",
+ "Add new flow" : "Gehitu fluxu berria",
+ "The configuration is invalid" : "Konfigurazioa baliogabea da",
+ "Active" : "Aktiboa",
+ "Save" : "Gorde",
+ "When" : "Noiz",
+ "and" : "eta",
+ "Add a new filter" : "Gehitu iragazki berri bat",
+ "Cancel" : "Utzi",
+ "Delete" : "Ezabatu",
+ "Available flows" : "Fluxu erabilgarriak",
+ "For details on how to write your own flow, check out the development documentation." : "Zeure fluxua idazten jakiteko informazioa lortzeko, begiratu garatzaileen dokumentazioa.",
+ "More flows" : "Fluxu gehiago",
+ "Browse the App Store" : "Arakatu aplikazio biltegia",
+ "Show less" : "Erakutsi gutxiago",
+ "Show more" : "Erakutsi gehiago",
+ "Configured flows" : "Konfiguratutako fluxuak",
+ "Your flows" : "Zure fluxuak",
+ "matches" : "bat dator",
+ "does not match" : "ez dator bat",
+ "is" : "da",
+ "is not" : "ez da",
+ "File name" : "Fitxategi-izena",
+ "File MIME type" : "Fitxategiaren MIME mota",
+ "File size (upload)" : "Fitxategiaren tamaina (igoera)",
+ "less" : "gutxiago",
+ "less or equals" : "gutxiago edo berdin",
+ "greater or equals" : "handiagoa edo berdina",
+ "greater" : "handiagoa ",
+ "Request remote address" : "Eskatu urruneko helbidea",
+ "matches IPv4" : "bat dator IPv4rekin",
+ "does not match IPv4" : "ez dator bat IPv4rekin",
+ "matches IPv6" : "bat dator IPv6rekin",
+ "does not match IPv6" : "ez dator bat IPv6rekin",
+ "File system tag" : "Fitxategi-sistemako etiketa",
+ "is tagged with" : "honela etiketatuta dago:",
+ "is not tagged with" : "ez dago honela etiketatuta:",
+ "Request URL" : "Eskaera-URLa",
+ "Request time" : "Eskaera-denbora",
+ "between" : "bitarte honetan",
+ "not between" : "ez dago bitarte honetan",
+ "Request user agent" : "Eskatu erabiltzaile-agentea",
+ "Group membership" : "Taldearen kidetza",
+ "is member of" : "hemengo kide da:",
+ "is not member of" : "ez da hemengo kide:"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/eu.json b/apps/workflowengine/l10n/eu.json
new file mode 100644
index 00000000000..589cc5cdc33
--- /dev/null
+++ b/apps/workflowengine/l10n/eu.json
@@ -0,0 +1,116 @@
+{ "translations": {
+ "The given operator is invalid" : "Zehaztutako eragilea baliogabea da",
+ "The given regular expression is invalid" : "Zehaztutako adierazpen erregularra baliogabea da",
+ "The given file size is invalid" : "Zehaztutako fitxategi tamaina baliogabea da",
+ "The given tag id is invalid" : "Zehaztutako etiketa baliogabea da",
+ "The given IP range is invalid" : "Zehaztutako IP barrutia baliogabea da",
+ "The given IP range is not valid for IPv4" : "Zehaztutako IP barrutia baliogabea da IPv4rako",
+ "The given IP range is not valid for IPv6" : "Zehaztutako IP barrutia baliogabea da IPv6rako",
+ "The given time span is invalid" : "Zehaztutako denbora tartea baliogabea da",
+ "The given start time is invalid" : "Zehaztutako hasiera-ordua baliogabea da",
+ "The given end time is invalid" : "Zehaztutako amaiera-ordua baliogabea da",
+ "The given group does not exist" : "Ez dago zehaztutako talde hori",
+ "File" : "Fitxategia",
+ "File created" : "Fitxategia sortu da",
+ "File updated" : "Fitxategia eguneratuta",
+ "File renamed" : "Fitxategiaren izena aldatu da",
+ "File deleted" : "Fitxategia ezabatuta",
+ "File accessed" : "Fitxategia atzituta",
+ "File copied" : "Fitxategia kopiatu da",
+ "Tag assigned" : "Etiketa esleitu da",
+ "Someone" : "Norbait",
+ "%s created %s" : "%s(e)k %s sortu du",
+ "%s modified %s" : "%s(e)k %s aldatu du",
+ "%s deleted %s" : "%s(e)k %s ezabatu du",
+ "%s accessed %s" : "%s(e)k %s atzitu du",
+ "%s renamed %s" : "%s(e)k %s izenez aldatu du",
+ "%s copied %s" : "%s(e)k %s kopiatu du",
+ "%s assigned %s to %s" : "%s(e)k %s esleitu dio %s(r)i",
+ "Operation #%s does not exist" : "Ez dago #%s eragiketarik",
+ "Entity %s does not exist" : "Ez dago %s entitaterik",
+ "Entity %s is invalid" : "%s entitatea baliogabea da",
+ "No events are chosen." : "Ez da gertaerarik aukeratu.",
+ "Entity %s has no event %s" : "%s entitateak ez du %s gertaerarik",
+ "Operation %s does not exist" : "Ez dago %s eragiketarik",
+ "Operation %s is invalid" : "%seragiketa baliogabea da",
+ "At least one check needs to be provided" : "Gutxienez egiaztapen bat eman behar da",
+ "The provided operation data is too long" : "Emandako eragiketa datuak luzeegiak dira.",
+ "Invalid check provided" : "Baliogabeko egiaztapena eman da",
+ "Check %s does not exist" : "%segiaztapena ez dago",
+ "Check %s is invalid" : "%segiaztapena baliogabea da",
+ "Check %s is not allowed with this entity" : "%segiaztapena ez da onartzen entitate honekin",
+ "The provided check value is too long" : "Emandako egiaztatze balioa luzeegia da.",
+ "Check #%s does not exist" : "#%s egiaztapena ez dago",
+ "Check %s is invalid or does not exist" : "%s egiaztapena baliogabea da edo ez dago",
+ "Flow" : "Fluxua",
+ "Nextcloud workflow engine" : "Nextcloud lan-fluxu motorra",
+ "Select a filter" : "Hautatu iragazki bat",
+ "Select a comparator" : "Hautatu konparatzailea",
+ "Remove filter" : "Kendu iragazkia",
+ "Folder" : "Karpeta",
+ "Images" : "Irudiak",
+ "Office documents" : "Office dokumentuak",
+ "PDF documents" : "PDF dokumentuak",
+ "Custom MIME type" : "MIME mota pertsonalizatua",
+ "Custom mimetype" : "Mime mota pertsonalizatua",
+ "Select a file type" : "Hautatu fitxategi mota bat",
+ "e.g. httpd/unix-directory" : "adib. httpd/unix-direktorioa",
+ "Please enter a valid time span" : "Sartu baliozko denbora tarte bat",
+ "Files WebDAV" : "WebDAV fitxategiak",
+ "Custom URL" : "URL pertsonalizatua",
+ "Select a request URL" : "Hautatu eskaera URL bat",
+ "Android client" : "Android bezeroa",
+ "iOS client" : "iOS bezeroa",
+ "Desktop client" : "Mahaigaineko bezeroa",
+ "Thunderbird & Outlook addons" : "Thunderbird eta Outlook gehigarriak",
+ "Custom user agent" : "Erabiltzaile-agente pertsonalizatua",
+ "Select a user agent" : "Hautatu erabiltzaile-agentea",
+ "Select groups" : "Hautatu taldeak",
+ "Groups" : "Taldeak",
+ "At least one event must be selected" : "Gutxienez gertaera bat hautatu behar da",
+ "Add new flow" : "Gehitu fluxu berria",
+ "The configuration is invalid" : "Konfigurazioa baliogabea da",
+ "Active" : "Aktiboa",
+ "Save" : "Gorde",
+ "When" : "Noiz",
+ "and" : "eta",
+ "Add a new filter" : "Gehitu iragazki berri bat",
+ "Cancel" : "Utzi",
+ "Delete" : "Ezabatu",
+ "Available flows" : "Fluxu erabilgarriak",
+ "For details on how to write your own flow, check out the development documentation." : "Zeure fluxua idazten jakiteko informazioa lortzeko, begiratu garatzaileen dokumentazioa.",
+ "More flows" : "Fluxu gehiago",
+ "Browse the App Store" : "Arakatu aplikazio biltegia",
+ "Show less" : "Erakutsi gutxiago",
+ "Show more" : "Erakutsi gehiago",
+ "Configured flows" : "Konfiguratutako fluxuak",
+ "Your flows" : "Zure fluxuak",
+ "matches" : "bat dator",
+ "does not match" : "ez dator bat",
+ "is" : "da",
+ "is not" : "ez da",
+ "File name" : "Fitxategi-izena",
+ "File MIME type" : "Fitxategiaren MIME mota",
+ "File size (upload)" : "Fitxategiaren tamaina (igoera)",
+ "less" : "gutxiago",
+ "less or equals" : "gutxiago edo berdin",
+ "greater or equals" : "handiagoa edo berdina",
+ "greater" : "handiagoa ",
+ "Request remote address" : "Eskatu urruneko helbidea",
+ "matches IPv4" : "bat dator IPv4rekin",
+ "does not match IPv4" : "ez dator bat IPv4rekin",
+ "matches IPv6" : "bat dator IPv6rekin",
+ "does not match IPv6" : "ez dator bat IPv6rekin",
+ "File system tag" : "Fitxategi-sistemako etiketa",
+ "is tagged with" : "honela etiketatuta dago:",
+ "is not tagged with" : "ez dago honela etiketatuta:",
+ "Request URL" : "Eskaera-URLa",
+ "Request time" : "Eskaera-denbora",
+ "between" : "bitarte honetan",
+ "not between" : "ez dago bitarte honetan",
+ "Request user agent" : "Eskatu erabiltzaile-agentea",
+ "Group membership" : "Taldearen kidetza",
+ "is member of" : "hemengo kide da:",
+ "is not member of" : "ez da hemengo kide:"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/fa.js b/apps/workflowengine/l10n/fa.js
index 7ffe079982e..ffca2f79b24 100644
--- a/apps/workflowengine/l10n/fa.js
+++ b/apps/workflowengine/l10n/fa.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "ذخیره شده ",
- "Saving failed:" : "ذخیره فایل با خطا مواجه شد.",
- "File MIME type" : "فایل از نوع MIME",
- "is" : "هست ",
- "is not" : "نیست",
- "matches" : "مطابق است",
- "does not match" : "مطابق نیست",
- "Example: {placeholder}" : "برای مثال {جای قرار دادن }",
- "File size (upload)" : "حجم فایل (بارگزاری شده )",
- "less" : "کمتر",
- "less or equals" : "کمتر یا مساوی ",
- "greater or equals" : "بزرگتر یا مساوی",
- "greater" : "بزرگتر",
- "File system tag" : "برچسب فایل های سیستمی ",
- "is tagged with" : "برچسب خورده با ",
- "is not tagged with" : "برچسب نخورده با ",
- "Select tag…" : "انتخاب برچسب",
- "Request remote address" : "درخواست آدرس ریموت",
- "matches IPv4" : "مطابق با آی پی ورژن 4",
- "does not match IPv4" : "مطابق نیست با آی پی ورژن 4",
- "matches IPv6" : "مطابق با آی پی ورژن 6 ",
- "does not match IPv6" : "مطابق نیست با آی پی ورژن 6 ",
- "Request time" : "زمان درخواست ",
- "between" : "بین ",
- "not between" : "نیست بین",
- "Start" : "شروع",
- "End" : "پایان ",
- "Select timezone…" : "انتخاب منطقه زمانی ",
- "Request URL" : "درخواست URL",
- "Predefined URLs" : "URL از پیش تعریف شده ",
- "Files WebDAV" : "فایل های WebDAV",
- "Request user agent" : "درخواست سفیر کاربر",
- "Sync clients" : "دستگاه های همگام ",
- "Android client" : "دستگاه های اندروید ",
- "iOS client" : "دستگاه های IOS",
- "Desktop client" : "دستگاه دسکتاپ",
- "User group membership" : "عضویت کاربر در گروه",
- "is member of" : "عضو است در ",
- "is not member of" : "عضو نیست در ",
"The given operator is invalid" : "اپراتور گرفته شده بی اعتبار است ",
"The given regular expression is invalid" : "عبارت منظم گرفته شده معتبر نیست ",
"The given file size is invalid" : "حجم فایل معتبر نیست",
@@ -51,23 +12,107 @@ OC.L10N.register(
"The given start time is invalid" : "تاریخ شروع معتبر نیست",
"The given end time is invalid" : "تاریخ پایان معتبر نیست ",
"The given group does not exist" : "گروه گرفته شده معتبر نیست",
- "Check %s is invalid or does not exist" : "%s یا وجود ندارد یا معتبر نیست",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
"Operation #%s does not exist" : "عمل %s وجود ندارد",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
"Operation %s does not exist" : "عمل %s وجود ندارد ",
"Operation %s is invalid" : "عمل %s معتبر نیست",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
"Check %s does not exist" : "%s را چک کنید وجود ندارد",
"Check %s is invalid" : "%s را چک کنید معتبر نیست",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
"Check #%s does not exist" : "%s را چک کنید وجود ندارد ",
- "Workflow" : "جریان کاری",
- "Open documentation" : "مستندات باز",
- "Add rule group" : "اضافه کردن قوانین گروه",
- "Short rule description" : "توضیحات مختصر درباره قوانین ",
- "Add rule" : "اضافه کردن قوانین ",
- "Reset" : "ریست",
+ "Check %s is invalid or does not exist" : "%s یا وجود ندارد یا معتبر نیست",
+ "Flow" : "جریان",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "پوشه",
+ "Images" : "عکسها",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "فایل های WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "دستگاه های اندروید ",
+ "iOS client" : "دستگاه های IOS",
+ "Desktop client" : "دستگاه دسکتاپ",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "انتخاب گروه‌ها",
+ "Groups" : "گروه ها",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "فعال کردن",
"Save" : "ذخیره",
- "Saving…" : "در حال ذخیره",
- "Loading…" : "در حال بار گزاری",
- "Successfully saved" : "با موفقیت ذخیره شد ",
- "File mime type" : "نوع فایل "
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "لغو",
+ "Delete" : "حذف",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "matches" : "مطابق است",
+ "does not match" : "مطابق نیست",
+ "is" : "هست ",
+ "is not" : "نیست",
+ "File name" : "نام فایل",
+ "File MIME type" : "فایل از نوع MIME",
+ "File size (upload)" : "حجم فایل (بارگزاری شده )",
+ "less" : "کمتر",
+ "less or equals" : "کمتر یا مساوی ",
+ "greater or equals" : "بزرگتر یا مساوی",
+ "greater" : "بزرگتر",
+ "Request remote address" : "درخواست آدرس ریموت",
+ "matches IPv4" : "مطابق با آی پی ورژن 4",
+ "does not match IPv4" : "مطابق نیست با آی پی ورژن 4",
+ "matches IPv6" : "مطابق با آی پی ورژن 6 ",
+ "does not match IPv6" : "مطابق نیست با آی پی ورژن 6 ",
+ "File system tag" : "برچسب فایل های سیستمی ",
+ "is tagged with" : "برچسب خورده با ",
+ "is not tagged with" : "برچسب نخورده با ",
+ "Request URL" : "درخواست URL",
+ "Request time" : "زمان درخواست ",
+ "between" : "بین ",
+ "not between" : "نیست بین",
+ "Request user agent" : "درخواست سفیر کاربر",
+ "is member of" : "عضو است در ",
+ "is not member of" : "عضو نیست در "
},
-"nplurals=1; plural=0;");
+"nplurals=2; plural=(n > 1);");
diff --git a/apps/workflowengine/l10n/fa.json b/apps/workflowengine/l10n/fa.json
index 4d5a50082ad..57f0c4a21a4 100644
--- a/apps/workflowengine/l10n/fa.json
+++ b/apps/workflowengine/l10n/fa.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "ذخیره شده ",
- "Saving failed:" : "ذخیره فایل با خطا مواجه شد.",
- "File MIME type" : "فایل از نوع MIME",
- "is" : "هست ",
- "is not" : "نیست",
- "matches" : "مطابق است",
- "does not match" : "مطابق نیست",
- "Example: {placeholder}" : "برای مثال {جای قرار دادن }",
- "File size (upload)" : "حجم فایل (بارگزاری شده )",
- "less" : "کمتر",
- "less or equals" : "کمتر یا مساوی ",
- "greater or equals" : "بزرگتر یا مساوی",
- "greater" : "بزرگتر",
- "File system tag" : "برچسب فایل های سیستمی ",
- "is tagged with" : "برچسب خورده با ",
- "is not tagged with" : "برچسب نخورده با ",
- "Select tag…" : "انتخاب برچسب",
- "Request remote address" : "درخواست آدرس ریموت",
- "matches IPv4" : "مطابق با آی پی ورژن 4",
- "does not match IPv4" : "مطابق نیست با آی پی ورژن 4",
- "matches IPv6" : "مطابق با آی پی ورژن 6 ",
- "does not match IPv6" : "مطابق نیست با آی پی ورژن 6 ",
- "Request time" : "زمان درخواست ",
- "between" : "بین ",
- "not between" : "نیست بین",
- "Start" : "شروع",
- "End" : "پایان ",
- "Select timezone…" : "انتخاب منطقه زمانی ",
- "Request URL" : "درخواست URL",
- "Predefined URLs" : "URL از پیش تعریف شده ",
- "Files WebDAV" : "فایل های WebDAV",
- "Request user agent" : "درخواست سفیر کاربر",
- "Sync clients" : "دستگاه های همگام ",
- "Android client" : "دستگاه های اندروید ",
- "iOS client" : "دستگاه های IOS",
- "Desktop client" : "دستگاه دسکتاپ",
- "User group membership" : "عضویت کاربر در گروه",
- "is member of" : "عضو است در ",
- "is not member of" : "عضو نیست در ",
"The given operator is invalid" : "اپراتور گرفته شده بی اعتبار است ",
"The given regular expression is invalid" : "عبارت منظم گرفته شده معتبر نیست ",
"The given file size is invalid" : "حجم فایل معتبر نیست",
@@ -49,23 +10,107 @@
"The given start time is invalid" : "تاریخ شروع معتبر نیست",
"The given end time is invalid" : "تاریخ پایان معتبر نیست ",
"The given group does not exist" : "گروه گرفته شده معتبر نیست",
- "Check %s is invalid or does not exist" : "%s یا وجود ندارد یا معتبر نیست",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
"Operation #%s does not exist" : "عمل %s وجود ندارد",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
"Operation %s does not exist" : "عمل %s وجود ندارد ",
"Operation %s is invalid" : "عمل %s معتبر نیست",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
"Check %s does not exist" : "%s را چک کنید وجود ندارد",
"Check %s is invalid" : "%s را چک کنید معتبر نیست",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
"Check #%s does not exist" : "%s را چک کنید وجود ندارد ",
- "Workflow" : "جریان کاری",
- "Open documentation" : "مستندات باز",
- "Add rule group" : "اضافه کردن قوانین گروه",
- "Short rule description" : "توضیحات مختصر درباره قوانین ",
- "Add rule" : "اضافه کردن قوانین ",
- "Reset" : "ریست",
+ "Check %s is invalid or does not exist" : "%s یا وجود ندارد یا معتبر نیست",
+ "Flow" : "جریان",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "پوشه",
+ "Images" : "عکسها",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "فایل های WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "دستگاه های اندروید ",
+ "iOS client" : "دستگاه های IOS",
+ "Desktop client" : "دستگاه دسکتاپ",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "انتخاب گروه‌ها",
+ "Groups" : "گروه ها",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "فعال کردن",
"Save" : "ذخیره",
- "Saving…" : "در حال ذخیره",
- "Loading…" : "در حال بار گزاری",
- "Successfully saved" : "با موفقیت ذخیره شد ",
- "File mime type" : "نوع فایل "
-},"pluralForm" :"nplurals=1; plural=0;"
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "لغو",
+ "Delete" : "حذف",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "matches" : "مطابق است",
+ "does not match" : "مطابق نیست",
+ "is" : "هست ",
+ "is not" : "نیست",
+ "File name" : "نام فایل",
+ "File MIME type" : "فایل از نوع MIME",
+ "File size (upload)" : "حجم فایل (بارگزاری شده )",
+ "less" : "کمتر",
+ "less or equals" : "کمتر یا مساوی ",
+ "greater or equals" : "بزرگتر یا مساوی",
+ "greater" : "بزرگتر",
+ "Request remote address" : "درخواست آدرس ریموت",
+ "matches IPv4" : "مطابق با آی پی ورژن 4",
+ "does not match IPv4" : "مطابق نیست با آی پی ورژن 4",
+ "matches IPv6" : "مطابق با آی پی ورژن 6 ",
+ "does not match IPv6" : "مطابق نیست با آی پی ورژن 6 ",
+ "File system tag" : "برچسب فایل های سیستمی ",
+ "is tagged with" : "برچسب خورده با ",
+ "is not tagged with" : "برچسب نخورده با ",
+ "Request URL" : "درخواست URL",
+ "Request time" : "زمان درخواست ",
+ "between" : "بین ",
+ "not between" : "نیست بین",
+ "Request user agent" : "درخواست سفیر کاربر",
+ "is member of" : "عضو است در ",
+ "is not member of" : "عضو نیست در "
+},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/fi.js b/apps/workflowengine/l10n/fi.js
index e01c67c7aa0..ddd3e78801c 100644
--- a/apps/workflowengine/l10n/fi.js
+++ b/apps/workflowengine/l10n/fi.js
@@ -1,65 +1,92 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Tallennettu",
- "Saving failed:" : "Tallennus epäonnistui:",
- "File MIME type" : "Tiedoston MIME-tyyppi",
- "is" : "on",
- "is not" : "ei ole",
+ "The given operator is invalid" : "Annettu operaattori on virheellinen",
+ "The given regular expression is invalid" : "Määritetty säännöllinen lauseke on virheellinen",
+ "The given file size is invalid" : "Annettu tiedoston koko on virheellinen",
+ "The given tag id is invalid" : "Annettu tag id on virheellinen",
+ "The given IP range is invalid" : "Annetut IP-arvot ovat virheelliset",
+ "The given IP range is not valid for IPv4" : "Annetut IP-arvot eivät käy IPv4-osoitteisiin",
+ "The given IP range is not valid for IPv6" : "Annetut IP-arvot eivät käy IPv6-osoitteisiin",
+ "The given time span is invalid" : "Annettu aikaväli on virheellinen",
+ "The given start time is invalid" : "Annettu aloitusaika on virheellinen",
+ "The given end time is invalid" : "Annettu päättymisaika on virheellinen",
+ "The given group does not exist" : "Annettua ryhmää ei ole",
+ "File" : "Tiedosto",
+ "File created" : "Tiedosto luotu",
+ "File updated" : "Tiedosto päivitetty",
+ "File renamed" : "Tiedosto nimetty uudelleen",
+ "File deleted" : "Tiedosto poistettu",
+ "File accessed" : "Tiedostoa käytetty",
+ "File copied" : "Tiedosto kopioitu",
+ "Tag assigned" : "Tunniste asetettu",
+ "Someone" : "Joku",
+ "%s created %s" : "%s loi %s",
+ "%s modified %s" : "%s muokkasi %s",
+ "%s deleted %s" : "%s poisti %s",
+ "%s accessed %s" : "%s käytti %s",
+ "%s renamed %s" : "%s nimesi uudelleen %s",
+ "%s copied %s" : "%s kopioi %s",
+ "Operation #%s does not exist" : "Toimenpidettä #%s ei ole olemassa",
+ "Entity %s does not exist" : "Entiteettiä %s ei ole olemassa",
+ "Entity %s is invalid" : "Entiteetti %s on virheellinen",
+ "No events are chosen." : "Tapahtumia ei ole valittu.",
+ "Entity %s has no event %s" : "Entiteetillä %s ei ole tapahtumaa %s",
+ "Operation %s does not exist" : "Toimenpidettä %s ei ole olemassa",
+ "Operation %s is invalid" : "Toimenpide %s on virheellinen",
+ "Check %s does not exist" : "Tarkistusta %s ei ole olemassa",
+ "Check %s is invalid" : "Tarkistus %s on virheellinen",
+ "Check #%s does not exist" : "Tarkistusta #%s ei ole olemassa",
+ "Check %s is invalid or does not exist" : "Tarkistus %s on virheellinen tai sitä ei ole olemassa",
+ "Flow" : "Kulku",
+ "Nextcloud workflow engine" : "Nextcloudin työnkulkumoottori",
+ "Remove filter" : "Poista suodatin",
+ "Folder" : "Kansio",
+ "Images" : "Kuvat",
+ "Office documents" : "Toimisto-ohjelmistojen asiakirjat",
+ "PDF documents" : "PDF-asiakirjat",
+ "Custom mimetype" : "Mukautettu MIME-tyyppi",
+ "Select a file type" : "Valitse tiedostotyyppi",
+ "Files WebDAV" : "Tiedostot WebDAV",
+ "Android client" : "Android-sovellus",
+ "iOS client" : "iOS-sovellus",
+ "Desktop client" : "Työpöytäsovellus",
+ "Thunderbird & Outlook addons" : "Thunderbird- & Outlook-lisäosat",
+ "Select groups" : "Valitse ryhmät",
+ "Groups" : "Ryhmät",
+ "Active" : "Aktiivinen",
+ "Save" : "Tallenna",
+ "and" : "ja",
+ "Cancel" : "Peruuta",
+ "Delete" : "Poista",
+ "Browse the App Store" : "Selaa Sovelluskauppaa",
+ "Show less" : "Näytä vähemmän",
+ "Show more" : "Näytä enemmän",
"matches" : "täsmää",
"does not match" : "ei täsmää",
- "Example: {placeholder}" : "Esimerkki: {placeholder}",
+ "is" : "on",
+ "is not" : "ei ole",
+ "File name" : "Tiedostonimi",
+ "File MIME type" : "Tiedoston MIME-tyyppi",
"File size (upload)" : "Tiedostokoko (lähetys)",
"less" : "pienempi",
"less or equals" : "pienempi tai yhtä suuri kuin",
"greater or equals" : "suurempi tai yhtä suuri kuin",
"greater" : "suurempi",
- "File system tag" : "Järjestelmätunniste",
- "is tagged with" : "on merkitty tunnisteella",
- "is not tagged with" : "ei ole merkitty tunnisteella",
- "Select tag…" : "Valitse tunniste…",
"Request remote address" : "Pyynnön etäosoite",
"matches IPv4" : "täsmää IPv4-osoitteeseen",
"does not match IPv4" : "ei täsmää IPv4-osoitteeseen",
"matches IPv6" : "täsmää IPv6-osoitteeseen",
"does not match IPv6" : "ei täsmää IPv6-osoitteeseen",
+ "File system tag" : "Järjestelmätunniste",
+ "is tagged with" : "on merkitty tunnisteella",
+ "is not tagged with" : "ei ole merkitty tunnisteella",
+ "Request URL" : "Pyynnön URL-osoite",
"Request time" : "Pyynnön aika",
"between" : "välillä",
"not between" : "ei välillä",
- "Start" : "Alku",
- "End" : "Loppu",
- "Select timezone…" : "Valitse aikavyöhyke...",
- "Request URL" : "Pyynnön URL-osoite",
- "Predefined URLs" : "Ennalta määritellyt URL-osoitteet",
- "Files WebDAV" : "Tiedostot WebDAV",
"Request user agent" : "Pyynnön user agent",
- "Sync clients" : "Synkronointisovellukset",
- "Android client" : "Android-sovellus",
- "iOS client" : "iOS-sovellus",
- "Desktop client" : "Työpöytäsovellus",
- "User group membership" : "Käyttäjäryhmä jäsenyys",
"is member of" : "on jäsen",
- "is not member of" : "ei ole jäsen",
- "The given operator is invalid" : "Annettu operaattori on virheellinen",
- "The given file size is invalid" : "Annettu tiedoston koko on virheellinen",
- "The given tag id is invalid" : "Annettu tag id on virheellinen",
- "The given IP range is invalid" : "Annetut IP arvot ovat virheelliset",
- "The given IP range is not valid for IPv4" : "Annetut IP arvot eivät käy IPv4 osoitteisiin",
- "The given IP range is not valid for IPv6" : "Annetut IP arvot eivät käy IPv6 osoitteisiin",
- "The given time span is invalid" : "Annettu aikaväli on virheellinen",
- "The given start time is invalid" : "Annettu aloitusaika on virheellinen",
- "The given end time is invalid" : "Annettu päättymisaika on virheellinen",
- "The given group does not exist" : "Annettua ryhmää ei ole",
- "Workflow" : "Työnkulku",
- "Open documentation" : "Avaa dokumentaatio",
- "Add rule group" : "Lisää sääntöryhmä",
- "Short rule description" : "Lyhyt sääntökuvaus",
- "Add rule" : "Lisää sääntö",
- "Reset" : "Palauta",
- "Save" : "Tallenna",
- "Saving…" : "Tallennetaan...",
- "Loading…" : "Ladataan…",
- "Successfully saved" : "Tallennettu onnistuneesti",
- "File mime type" : "Tiedoston mediatyyppi"
+ "is not member of" : "ei ole jäsen"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/fi.json b/apps/workflowengine/l10n/fi.json
index 3d9007cf7e5..c7faee559c1 100644
--- a/apps/workflowengine/l10n/fi.json
+++ b/apps/workflowengine/l10n/fi.json
@@ -1,63 +1,90 @@
{ "translations": {
- "Saved" : "Tallennettu",
- "Saving failed:" : "Tallennus epäonnistui:",
- "File MIME type" : "Tiedoston MIME-tyyppi",
- "is" : "on",
- "is not" : "ei ole",
+ "The given operator is invalid" : "Annettu operaattori on virheellinen",
+ "The given regular expression is invalid" : "Määritetty säännöllinen lauseke on virheellinen",
+ "The given file size is invalid" : "Annettu tiedoston koko on virheellinen",
+ "The given tag id is invalid" : "Annettu tag id on virheellinen",
+ "The given IP range is invalid" : "Annetut IP-arvot ovat virheelliset",
+ "The given IP range is not valid for IPv4" : "Annetut IP-arvot eivät käy IPv4-osoitteisiin",
+ "The given IP range is not valid for IPv6" : "Annetut IP-arvot eivät käy IPv6-osoitteisiin",
+ "The given time span is invalid" : "Annettu aikaväli on virheellinen",
+ "The given start time is invalid" : "Annettu aloitusaika on virheellinen",
+ "The given end time is invalid" : "Annettu päättymisaika on virheellinen",
+ "The given group does not exist" : "Annettua ryhmää ei ole",
+ "File" : "Tiedosto",
+ "File created" : "Tiedosto luotu",
+ "File updated" : "Tiedosto päivitetty",
+ "File renamed" : "Tiedosto nimetty uudelleen",
+ "File deleted" : "Tiedosto poistettu",
+ "File accessed" : "Tiedostoa käytetty",
+ "File copied" : "Tiedosto kopioitu",
+ "Tag assigned" : "Tunniste asetettu",
+ "Someone" : "Joku",
+ "%s created %s" : "%s loi %s",
+ "%s modified %s" : "%s muokkasi %s",
+ "%s deleted %s" : "%s poisti %s",
+ "%s accessed %s" : "%s käytti %s",
+ "%s renamed %s" : "%s nimesi uudelleen %s",
+ "%s copied %s" : "%s kopioi %s",
+ "Operation #%s does not exist" : "Toimenpidettä #%s ei ole olemassa",
+ "Entity %s does not exist" : "Entiteettiä %s ei ole olemassa",
+ "Entity %s is invalid" : "Entiteetti %s on virheellinen",
+ "No events are chosen." : "Tapahtumia ei ole valittu.",
+ "Entity %s has no event %s" : "Entiteetillä %s ei ole tapahtumaa %s",
+ "Operation %s does not exist" : "Toimenpidettä %s ei ole olemassa",
+ "Operation %s is invalid" : "Toimenpide %s on virheellinen",
+ "Check %s does not exist" : "Tarkistusta %s ei ole olemassa",
+ "Check %s is invalid" : "Tarkistus %s on virheellinen",
+ "Check #%s does not exist" : "Tarkistusta #%s ei ole olemassa",
+ "Check %s is invalid or does not exist" : "Tarkistus %s on virheellinen tai sitä ei ole olemassa",
+ "Flow" : "Kulku",
+ "Nextcloud workflow engine" : "Nextcloudin työnkulkumoottori",
+ "Remove filter" : "Poista suodatin",
+ "Folder" : "Kansio",
+ "Images" : "Kuvat",
+ "Office documents" : "Toimisto-ohjelmistojen asiakirjat",
+ "PDF documents" : "PDF-asiakirjat",
+ "Custom mimetype" : "Mukautettu MIME-tyyppi",
+ "Select a file type" : "Valitse tiedostotyyppi",
+ "Files WebDAV" : "Tiedostot WebDAV",
+ "Android client" : "Android-sovellus",
+ "iOS client" : "iOS-sovellus",
+ "Desktop client" : "Työpöytäsovellus",
+ "Thunderbird & Outlook addons" : "Thunderbird- & Outlook-lisäosat",
+ "Select groups" : "Valitse ryhmät",
+ "Groups" : "Ryhmät",
+ "Active" : "Aktiivinen",
+ "Save" : "Tallenna",
+ "and" : "ja",
+ "Cancel" : "Peruuta",
+ "Delete" : "Poista",
+ "Browse the App Store" : "Selaa Sovelluskauppaa",
+ "Show less" : "Näytä vähemmän",
+ "Show more" : "Näytä enemmän",
"matches" : "täsmää",
"does not match" : "ei täsmää",
- "Example: {placeholder}" : "Esimerkki: {placeholder}",
+ "is" : "on",
+ "is not" : "ei ole",
+ "File name" : "Tiedostonimi",
+ "File MIME type" : "Tiedoston MIME-tyyppi",
"File size (upload)" : "Tiedostokoko (lähetys)",
"less" : "pienempi",
"less or equals" : "pienempi tai yhtä suuri kuin",
"greater or equals" : "suurempi tai yhtä suuri kuin",
"greater" : "suurempi",
- "File system tag" : "Järjestelmätunniste",
- "is tagged with" : "on merkitty tunnisteella",
- "is not tagged with" : "ei ole merkitty tunnisteella",
- "Select tag…" : "Valitse tunniste…",
"Request remote address" : "Pyynnön etäosoite",
"matches IPv4" : "täsmää IPv4-osoitteeseen",
"does not match IPv4" : "ei täsmää IPv4-osoitteeseen",
"matches IPv6" : "täsmää IPv6-osoitteeseen",
"does not match IPv6" : "ei täsmää IPv6-osoitteeseen",
+ "File system tag" : "Järjestelmätunniste",
+ "is tagged with" : "on merkitty tunnisteella",
+ "is not tagged with" : "ei ole merkitty tunnisteella",
+ "Request URL" : "Pyynnön URL-osoite",
"Request time" : "Pyynnön aika",
"between" : "välillä",
"not between" : "ei välillä",
- "Start" : "Alku",
- "End" : "Loppu",
- "Select timezone…" : "Valitse aikavyöhyke...",
- "Request URL" : "Pyynnön URL-osoite",
- "Predefined URLs" : "Ennalta määritellyt URL-osoitteet",
- "Files WebDAV" : "Tiedostot WebDAV",
"Request user agent" : "Pyynnön user agent",
- "Sync clients" : "Synkronointisovellukset",
- "Android client" : "Android-sovellus",
- "iOS client" : "iOS-sovellus",
- "Desktop client" : "Työpöytäsovellus",
- "User group membership" : "Käyttäjäryhmä jäsenyys",
"is member of" : "on jäsen",
- "is not member of" : "ei ole jäsen",
- "The given operator is invalid" : "Annettu operaattori on virheellinen",
- "The given file size is invalid" : "Annettu tiedoston koko on virheellinen",
- "The given tag id is invalid" : "Annettu tag id on virheellinen",
- "The given IP range is invalid" : "Annetut IP arvot ovat virheelliset",
- "The given IP range is not valid for IPv4" : "Annetut IP arvot eivät käy IPv4 osoitteisiin",
- "The given IP range is not valid for IPv6" : "Annetut IP arvot eivät käy IPv6 osoitteisiin",
- "The given time span is invalid" : "Annettu aikaväli on virheellinen",
- "The given start time is invalid" : "Annettu aloitusaika on virheellinen",
- "The given end time is invalid" : "Annettu päättymisaika on virheellinen",
- "The given group does not exist" : "Annettua ryhmää ei ole",
- "Workflow" : "Työnkulku",
- "Open documentation" : "Avaa dokumentaatio",
- "Add rule group" : "Lisää sääntöryhmä",
- "Short rule description" : "Lyhyt sääntökuvaus",
- "Add rule" : "Lisää sääntö",
- "Reset" : "Palauta",
- "Save" : "Tallenna",
- "Saving…" : "Tallennetaan...",
- "Loading…" : "Ladataan…",
- "Successfully saved" : "Tallennettu onnistuneesti",
- "File mime type" : "Tiedoston mediatyyppi"
+ "is not member of" : "ei ole jäsen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/fr.js b/apps/workflowengine/l10n/fr.js
index 5fb2ff3f410..1e50fd144ef 100644
--- a/apps/workflowengine/l10n/fr.js
+++ b/apps/workflowengine/l10n/fr.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Sauvegardé",
- "Saving failed:" : "L'enregistrement a échoué:",
- "File MIME type" : "Type MIME du fichier",
- "is" : "est",
- "is not" : "n'est pas",
+ "The given operator is invalid" : "L'opérateur donné est invalide",
+ "The given regular expression is invalid" : "L’expression régulière donnée est invalide",
+ "The given file size is invalid" : "La taille du fichier donnée est invalide",
+ "The given tag id is invalid" : "L’identifiant de l'étiquette donné est invalide",
+ "The given IP range is invalid" : "La plage d’adresses IP donnée est invalide",
+ "The given IP range is not valid for IPv4" : "La plage d’adresses IP donnée n’est pas valide pour l’IPv4",
+ "The given IP range is not valid for IPv6" : "La plage d’adresses IP donnée n’est pas valide pour l’IPv6",
+ "The given time span is invalid" : "La durée est invalide",
+ "The given start time is invalid" : "La date de début est invalide",
+ "The given end time is invalid" : "La date de fin est invalide",
+ "The given group does not exist" : "Le groupe donné n'existe pas",
+ "File" : "Fichier",
+ "File created" : "Fichier créé",
+ "File updated" : "Fichier mis à jour",
+ "File renamed" : "Fichier renommé",
+ "File deleted" : "Fichier supprimé",
+ "File accessed" : "Fichier accédé",
+ "File copied" : "Fichier copié",
+ "Tag assigned" : "Étiquette assignée",
+ "Someone" : "Quelqu'un",
+ "%s created %s" : "%s créé %s",
+ "%s modified %s" : "%s modifié %s",
+ "%s deleted %s" : "%s supprimé %s",
+ "%s accessed %s" : "%sa accédé à %s",
+ "%s renamed %s" : "%s renommé %s",
+ "%s copied %s" : "%s copié %s",
+ "%s assigned %s to %s" : "%s a assigné %sà %s",
+ "Operation #%s does not exist" : "L’opération #%s n’existe pas",
+ "Entity %s does not exist" : "L'entité %sn'existe pas",
+ "Entity %s is invalid" : "L'entité %s est non valide",
+ "No events are chosen." : "Aucun évènement a été choisi.",
+ "Entity %s has no event %s" : "L'entité %sn'a aucun évènement %s",
+ "Operation %s does not exist" : "L’opération %s n’existe pas",
+ "Operation %s is invalid" : "L’opération %s est invalide",
+ "At least one check needs to be provided" : "Au moins une condition doit être fournie",
+ "The provided operation data is too long" : "Les données d’opération fournies sont trop longues",
+ "Invalid check provided" : "Condition proposée invalide",
+ "Check %s does not exist" : "La condition %s n'existe pas",
+ "Check %s is invalid" : "La condition %s est invalide",
+ "Check %s is not allowed with this entity" : "La condition %s n'est pas autorisée avec cette entité",
+ "The provided check value is too long" : "La valeur de la condition fournie est trop longue",
+ "Check #%s does not exist" : "La condition #%s n'existe pas",
+ "Check %s is invalid or does not exist" : "La condition %s est invalide ou n'existe pas",
+ "Flow" : "Flux",
+ "Nextcloud workflow engine" : "Moteur de workflow Nextcloud",
+ "Select a filter" : "Sélectionner un filtre",
+ "Select a comparator" : "Sélectionnez un comparateur",
+ "Remove filter" : "Retirer le filtre",
+ "Folder" : "Dossier",
+ "Images" : "Images",
+ "Office documents" : "Documents Office",
+ "PDF documents" : "Documents PDF",
+ "Custom MIME type" : "Type MIME personnalisé",
+ "Custom mimetype" : "mimetype personnalisé",
+ "Select a file type" : "Sélectionnez un type de fichier",
+ "e.g. httpd/unix-directory" : "par exemple httpd/unix-directory",
+ "Please enter a valid time span" : "Merci de saisir une période de temps valide",
+ "Files WebDAV" : "Fichiers WebDAV",
+ "Custom URL" : "URL personnalisée",
+ "Select a request URL" : "Sélectionnez une requête URL",
+ "Android client" : "Client Android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client de bureau",
+ "Thunderbird & Outlook addons" : "Modules complémentaires Thunderbird & Outlook",
+ "Custom user agent" : "Autre client",
+ "Select a user agent" : "Sélectionner un client",
+ "Select groups" : "Sélectionnez les groupes",
+ "Groups" : "Groupes",
+ "Type to search for group …" : "Tapez pour rechercher un groupe…",
+ "Select a trigger" : "Sélectionner un déclencheur",
+ "At least one event must be selected" : "Au moins un événement doit être sélectionné",
+ "Add new flow" : "Ajouter un nouveau flux",
+ "The configuration is invalid" : "Configuration non valide",
+ "Active" : "Actif",
+ "Save" : "Enregistrer",
+ "When" : "Quand",
+ "and" : "et",
+ "Add a new filter" : "Ajouter une condition",
+ "Cancel" : "Annuler",
+ "Delete" : "Supprimer",
+ "Available flows" : "Flux disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Pour savoir comment rédiger votre propre flux, consultez la documentation sur le développement.",
+ "No flows installed" : "Aucun flux n’est installé",
+ "Ask your administrator to install new flows." : "Demandez à votre administrateur d'installer de nouveaux flux.",
+ "More flows" : "Plus de flux",
+ "Browse the App Store" : "Parcourir le magasin d'applications",
+ "Show less" : "Afficher moins",
+ "Show more" : "Afficher plus",
+ "Configured flows" : "Flux configurés",
+ "Your flows" : "Vos flux",
+ "No flows configured" : "Aucun flux n’est configuré",
"matches" : "correspond",
"does not match" : "ne correspond pas",
- "Example: {placeholder}" : "Exemple: {placeholder}",
- "File size (upload)" : "Taille du fichier ( à télécharger )",
+ "is" : "est",
+ "is not" : "n’est pas",
+ "File name" : "Nom du fichier",
+ "File MIME type" : "Type MIME du fichier",
+ "File size (upload)" : "Taille du fichier (à téléverser)",
"less" : "moins",
"less or equals" : "inférieur ou égal",
"greater or equals" : "supérieur ou égal",
"greater" : "plus grand que",
- "File system tag" : "Étiquette collaborative du fichier",
- "is tagged with" : "est étiqueté avec",
- "is not tagged with" : "n'est pas étiqueté avec",
- "Select tag…" : "Sélectionner une étiquette...",
- "Request remote address" : "Demander une adresse distante",
+ "Request remote address" : "Adresse IP de la requête",
"matches IPv4" : "correspond à une adresse IPv4",
"does not match IPv4" : "ne correspond pas à une adresse IPv4",
"matches IPv6" : "correspond à une adresse IPv6",
"does not match IPv6" : "ne correspond pas à une adresse IPv6",
- "Request time" : "Temps de requête",
+ "File system tag" : "Étiquette collaborative du fichier",
+ "is tagged with" : "est étiqueté avec",
+ "is not tagged with" : "n'est pas étiqueté avec",
+ "Request URL" : "Demande d’URL",
+ "Request time" : "Horaire de l'événement",
"between" : "entre",
"not between" : "en dehors de",
- "Start" : "Démarrer",
- "End" : "Fin",
- "Select timezone…" : "Sélectionner le fuseau horaire...",
- "Request URL" : "Demande d'URL",
- "Predefined URLs" : "URL prédéfinis",
- "Files WebDAV" : "Fichiers WebDAV",
- "Request user agent" : "Agent utilisateur requis",
- "Sync clients" : "Clients de synchronisation",
- "Android client" : "Client Android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client de bureau",
- "User group membership" : "Membre du groupe d'utilisateur",
+ "Request user agent" : "Client utilisé pour la requête",
+ "Group membership" : "Membre du groupe",
"is member of" : "est membre de",
- "is not member of" : "n'est pas membre de",
- "The given operator is invalid" : "L'opérateur donné est invalide",
- "The given regular expression is invalid" : "L'expression régulière donnée est invalide",
- "The given file size is invalid" : "La taille du fichier donné est invalide",
- "The given tag id is invalid" : "L’identifiant de l'étiquette donné est invalide",
- "The given IP range is invalid" : "La plage d'adresse IP donnée est invalide",
- "The given IP range is not valid for IPv4" : "La plage d'adresse IP donnée n'est pas valide pour l'IPv4",
- "The given IP range is not valid for IPv6" : "La plage d'adresse IP donnée n'est pas valide pour l'IPv6",
- "The given time span is invalid" : "La durée est invalide",
- "The given start time is invalid" : "La date de début est invalide",
- "The given end time is invalid" : "La date de fin est invalide",
- "The given group does not exist" : "Le groupe donné n'existe pas",
- "Check %s is invalid or does not exist" : "Vérifiez si %s est invalide ou n'existe pas",
- "Operation #%s does not exist" : "L'opération #%s n'existe pas",
- "Operation %s does not exist" : "L'opération %s n'existe pas",
- "Operation %s is invalid" : "L'opération %s est invalide",
- "Check %s does not exist" : "Vérifiez si %s n'existe pas",
- "Check %s is invalid" : "Vérifiez si %s est invalide",
- "Check #%s does not exist" : "Vérifiez si #%s n'existe pas",
- "Workflow" : "Flux d'activités",
- "Open documentation" : "Voir la documentation",
- "Add rule group" : "Ajouter une règle de groupe",
- "Short rule description" : "Trier par description de règle",
- "Add rule" : "Ajouter règle",
- "Reset" : "Réinitialiser",
- "Save" : "Enregistrer",
- "Saving…" : "Enregistrement...",
- "Loading…" : "Chargement...",
- "Successfully saved" : "Enregistré avec succès",
- "File mime type" : "Type MIME du fichier"
+ "is not member of" : "n’est pas membre de"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/fr.json b/apps/workflowengine/l10n/fr.json
index cdf39458889..e302d66d128 100644
--- a/apps/workflowengine/l10n/fr.json
+++ b/apps/workflowengine/l10n/fr.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "Sauvegardé",
- "Saving failed:" : "L'enregistrement a échoué:",
- "File MIME type" : "Type MIME du fichier",
- "is" : "est",
- "is not" : "n'est pas",
+ "The given operator is invalid" : "L'opérateur donné est invalide",
+ "The given regular expression is invalid" : "L’expression régulière donnée est invalide",
+ "The given file size is invalid" : "La taille du fichier donnée est invalide",
+ "The given tag id is invalid" : "L’identifiant de l'étiquette donné est invalide",
+ "The given IP range is invalid" : "La plage d’adresses IP donnée est invalide",
+ "The given IP range is not valid for IPv4" : "La plage d’adresses IP donnée n’est pas valide pour l’IPv4",
+ "The given IP range is not valid for IPv6" : "La plage d’adresses IP donnée n’est pas valide pour l’IPv6",
+ "The given time span is invalid" : "La durée est invalide",
+ "The given start time is invalid" : "La date de début est invalide",
+ "The given end time is invalid" : "La date de fin est invalide",
+ "The given group does not exist" : "Le groupe donné n'existe pas",
+ "File" : "Fichier",
+ "File created" : "Fichier créé",
+ "File updated" : "Fichier mis à jour",
+ "File renamed" : "Fichier renommé",
+ "File deleted" : "Fichier supprimé",
+ "File accessed" : "Fichier accédé",
+ "File copied" : "Fichier copié",
+ "Tag assigned" : "Étiquette assignée",
+ "Someone" : "Quelqu'un",
+ "%s created %s" : "%s créé %s",
+ "%s modified %s" : "%s modifié %s",
+ "%s deleted %s" : "%s supprimé %s",
+ "%s accessed %s" : "%sa accédé à %s",
+ "%s renamed %s" : "%s renommé %s",
+ "%s copied %s" : "%s copié %s",
+ "%s assigned %s to %s" : "%s a assigné %sà %s",
+ "Operation #%s does not exist" : "L’opération #%s n’existe pas",
+ "Entity %s does not exist" : "L'entité %sn'existe pas",
+ "Entity %s is invalid" : "L'entité %s est non valide",
+ "No events are chosen." : "Aucun évènement a été choisi.",
+ "Entity %s has no event %s" : "L'entité %sn'a aucun évènement %s",
+ "Operation %s does not exist" : "L’opération %s n’existe pas",
+ "Operation %s is invalid" : "L’opération %s est invalide",
+ "At least one check needs to be provided" : "Au moins une condition doit être fournie",
+ "The provided operation data is too long" : "Les données d’opération fournies sont trop longues",
+ "Invalid check provided" : "Condition proposée invalide",
+ "Check %s does not exist" : "La condition %s n'existe pas",
+ "Check %s is invalid" : "La condition %s est invalide",
+ "Check %s is not allowed with this entity" : "La condition %s n'est pas autorisée avec cette entité",
+ "The provided check value is too long" : "La valeur de la condition fournie est trop longue",
+ "Check #%s does not exist" : "La condition #%s n'existe pas",
+ "Check %s is invalid or does not exist" : "La condition %s est invalide ou n'existe pas",
+ "Flow" : "Flux",
+ "Nextcloud workflow engine" : "Moteur de workflow Nextcloud",
+ "Select a filter" : "Sélectionner un filtre",
+ "Select a comparator" : "Sélectionnez un comparateur",
+ "Remove filter" : "Retirer le filtre",
+ "Folder" : "Dossier",
+ "Images" : "Images",
+ "Office documents" : "Documents Office",
+ "PDF documents" : "Documents PDF",
+ "Custom MIME type" : "Type MIME personnalisé",
+ "Custom mimetype" : "mimetype personnalisé",
+ "Select a file type" : "Sélectionnez un type de fichier",
+ "e.g. httpd/unix-directory" : "par exemple httpd/unix-directory",
+ "Please enter a valid time span" : "Merci de saisir une période de temps valide",
+ "Files WebDAV" : "Fichiers WebDAV",
+ "Custom URL" : "URL personnalisée",
+ "Select a request URL" : "Sélectionnez une requête URL",
+ "Android client" : "Client Android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client de bureau",
+ "Thunderbird & Outlook addons" : "Modules complémentaires Thunderbird & Outlook",
+ "Custom user agent" : "Autre client",
+ "Select a user agent" : "Sélectionner un client",
+ "Select groups" : "Sélectionnez les groupes",
+ "Groups" : "Groupes",
+ "Type to search for group …" : "Tapez pour rechercher un groupe…",
+ "Select a trigger" : "Sélectionner un déclencheur",
+ "At least one event must be selected" : "Au moins un événement doit être sélectionné",
+ "Add new flow" : "Ajouter un nouveau flux",
+ "The configuration is invalid" : "Configuration non valide",
+ "Active" : "Actif",
+ "Save" : "Enregistrer",
+ "When" : "Quand",
+ "and" : "et",
+ "Add a new filter" : "Ajouter une condition",
+ "Cancel" : "Annuler",
+ "Delete" : "Supprimer",
+ "Available flows" : "Flux disponibles",
+ "For details on how to write your own flow, check out the development documentation." : "Pour savoir comment rédiger votre propre flux, consultez la documentation sur le développement.",
+ "No flows installed" : "Aucun flux n’est installé",
+ "Ask your administrator to install new flows." : "Demandez à votre administrateur d'installer de nouveaux flux.",
+ "More flows" : "Plus de flux",
+ "Browse the App Store" : "Parcourir le magasin d'applications",
+ "Show less" : "Afficher moins",
+ "Show more" : "Afficher plus",
+ "Configured flows" : "Flux configurés",
+ "Your flows" : "Vos flux",
+ "No flows configured" : "Aucun flux n’est configuré",
"matches" : "correspond",
"does not match" : "ne correspond pas",
- "Example: {placeholder}" : "Exemple: {placeholder}",
- "File size (upload)" : "Taille du fichier ( à télécharger )",
+ "is" : "est",
+ "is not" : "n’est pas",
+ "File name" : "Nom du fichier",
+ "File MIME type" : "Type MIME du fichier",
+ "File size (upload)" : "Taille du fichier (à téléverser)",
"less" : "moins",
"less or equals" : "inférieur ou égal",
"greater or equals" : "supérieur ou égal",
"greater" : "plus grand que",
- "File system tag" : "Étiquette collaborative du fichier",
- "is tagged with" : "est étiqueté avec",
- "is not tagged with" : "n'est pas étiqueté avec",
- "Select tag…" : "Sélectionner une étiquette...",
- "Request remote address" : "Demander une adresse distante",
+ "Request remote address" : "Adresse IP de la requête",
"matches IPv4" : "correspond à une adresse IPv4",
"does not match IPv4" : "ne correspond pas à une adresse IPv4",
"matches IPv6" : "correspond à une adresse IPv6",
"does not match IPv6" : "ne correspond pas à une adresse IPv6",
- "Request time" : "Temps de requête",
+ "File system tag" : "Étiquette collaborative du fichier",
+ "is tagged with" : "est étiqueté avec",
+ "is not tagged with" : "n'est pas étiqueté avec",
+ "Request URL" : "Demande d’URL",
+ "Request time" : "Horaire de l'événement",
"between" : "entre",
"not between" : "en dehors de",
- "Start" : "Démarrer",
- "End" : "Fin",
- "Select timezone…" : "Sélectionner le fuseau horaire...",
- "Request URL" : "Demande d'URL",
- "Predefined URLs" : "URL prédéfinis",
- "Files WebDAV" : "Fichiers WebDAV",
- "Request user agent" : "Agent utilisateur requis",
- "Sync clients" : "Clients de synchronisation",
- "Android client" : "Client Android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client de bureau",
- "User group membership" : "Membre du groupe d'utilisateur",
+ "Request user agent" : "Client utilisé pour la requête",
+ "Group membership" : "Membre du groupe",
"is member of" : "est membre de",
- "is not member of" : "n'est pas membre de",
- "The given operator is invalid" : "L'opérateur donné est invalide",
- "The given regular expression is invalid" : "L'expression régulière donnée est invalide",
- "The given file size is invalid" : "La taille du fichier donné est invalide",
- "The given tag id is invalid" : "L’identifiant de l'étiquette donné est invalide",
- "The given IP range is invalid" : "La plage d'adresse IP donnée est invalide",
- "The given IP range is not valid for IPv4" : "La plage d'adresse IP donnée n'est pas valide pour l'IPv4",
- "The given IP range is not valid for IPv6" : "La plage d'adresse IP donnée n'est pas valide pour l'IPv6",
- "The given time span is invalid" : "La durée est invalide",
- "The given start time is invalid" : "La date de début est invalide",
- "The given end time is invalid" : "La date de fin est invalide",
- "The given group does not exist" : "Le groupe donné n'existe pas",
- "Check %s is invalid or does not exist" : "Vérifiez si %s est invalide ou n'existe pas",
- "Operation #%s does not exist" : "L'opération #%s n'existe pas",
- "Operation %s does not exist" : "L'opération %s n'existe pas",
- "Operation %s is invalid" : "L'opération %s est invalide",
- "Check %s does not exist" : "Vérifiez si %s n'existe pas",
- "Check %s is invalid" : "Vérifiez si %s est invalide",
- "Check #%s does not exist" : "Vérifiez si #%s n'existe pas",
- "Workflow" : "Flux d'activités",
- "Open documentation" : "Voir la documentation",
- "Add rule group" : "Ajouter une règle de groupe",
- "Short rule description" : "Trier par description de règle",
- "Add rule" : "Ajouter règle",
- "Reset" : "Réinitialiser",
- "Save" : "Enregistrer",
- "Saving…" : "Enregistrement...",
- "Loading…" : "Chargement...",
- "Successfully saved" : "Enregistré avec succès",
- "File mime type" : "Type MIME du fichier"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+ "is not member of" : "n’est pas membre de"
+},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ga.js b/apps/workflowengine/l10n/ga.js
new file mode 100644
index 00000000000..0c61ee9b09d
--- /dev/null
+++ b/apps/workflowengine/l10n/ga.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Tá an t-oibreoir tugtha neamhbhailí",
+ "The given regular expression is invalid" : "Tá an slonn rialta a thugtar neamhbhailí",
+ "The given file size is invalid" : "Tá méid an chomhaid tugtha neamhbhailí",
+ "The given tag id is invalid" : "Tá an t-aitheantas clibe tugtha neamhbhailí",
+ "The given IP range is invalid" : "Tá an raon IP a thugtar neamhbhailí",
+ "The given IP range is not valid for IPv4" : "Níl an raon IP tugtha bailí do IPv4",
+ "The given IP range is not valid for IPv6" : "Níl an raon IP tugtha bailí do IPv6",
+ "The given time span is invalid" : "Tá an tréimhse ama a thugtar neamhbhailí",
+ "The given start time is invalid" : "Tá an t-am tosaithe tugtha neamhbhailí",
+ "The given end time is invalid" : "Tá an t-am críochnaithe a thugtar neamhbhailí",
+ "The given group does not exist" : "Níl an grúpa tugtha ann",
+ "File" : "Comhad",
+ "File created" : "Comhad cruthaithe",
+ "File updated" : "Nuashonraíodh an comhad",
+ "File renamed" : "Athainmníodh an comhad",
+ "File deleted" : "Scriosadh an comhad",
+ "File accessed" : "Teacht ar an gcomhad",
+ "File copied" : "Cóipeáladh an comhad",
+ "Tag assigned" : "Clib sannta",
+ "Someone" : "Duine éigin",
+ "%s created %s" : "%s cruthaithe %s",
+ "%s modified %s" : "%s modhnaithe %s",
+ "%s deleted %s" : "%s scriosta %s",
+ "%s accessed %s" : "%s rochtain %s",
+ "%s renamed %s" : "%s athainmnithe %s",
+ "%s copied %s" : "%s chóipeáil %s",
+ "%s assigned %s to %s" : "%s sannta %s do %s",
+ "Operation #%s does not exist" : "Níl oibríocht # %s ann",
+ "Entity %s does not exist" : "Níl aonán %s ann",
+ "Entity %s is invalid" : "Tá aonán %s neamhbhailí",
+ "No events are chosen." : "Ní roghnaítear aon imeachtaí.",
+ "Entity %s has no event %s" : "Níl imeacht %s ag eintiteas %s",
+ "Operation %s does not exist" : "Níl oibríocht %s ann",
+ "Operation %s is invalid" : "Tá oibríocht %s neamhbhailí",
+ "At least one check needs to be provided" : "Ní mór seiceáil amháin ar a laghad a sholáthar",
+ "The provided operation data is too long" : "Tá na sonraí oibríochta a chuirtear ar fáil ró-fhada",
+ "Invalid check provided" : "Cuireadh seiceáil neamhbhailí ar fáil",
+ "Check %s does not exist" : "Seiceáil nach bhfuil %s ann",
+ "Check %s is invalid" : "Seiceáil go bhfuil %s neamhbhailí",
+ "Check %s is not allowed with this entity" : "Seiceáil nach bhfuil %s ceadaithe leis an eintiteas seo",
+ "The provided check value is too long" : "Tá an luach seiceála a chuirtear ar fáil ró-fhada",
+ "Check #%s does not exist" : "Seiceáil nach bhfuil # %s ann",
+ "Check %s is invalid or does not exist" : "Seiceáil go bhfuil %s neamhbhailí nó níl sé ann",
+ "Flow" : "Sreabhadh",
+ "Nextcloud workflow engine" : "Inneall sreabhadh oibre Nextcloud",
+ "Select a filter" : "Roghnaigh scagaire",
+ "Select a comparator" : "Roghnaigh comparadóir",
+ "Remove filter" : "Bain an scagaire",
+ "Folder" : "Fillteán",
+ "Images" : "Íomhánna",
+ "Office documents" : "Doiciméid oifige",
+ "PDF documents" : "Doiciméid PDF",
+ "Custom MIME type" : "Cineál MIME saincheaptha",
+ "Custom mimetype" : "Cineál MIME saincheaptha",
+ "Select a file type" : "Roghnaigh cineál comhaid",
+ "e.g. httpd/unix-directory" : "m.sh. httpd/unix-directory",
+ "Please enter a valid time span" : "Cuir isteach réise ama bailí le do thoil",
+ "Files WebDAV" : "Comhaid WebDAV",
+ "Custom URL" : "URL saincheaptha",
+ "Select a request URL" : "Roghnaigh URL iarratais",
+ "Android client" : "Cliant Android",
+ "iOS client" : "Cliant iOS",
+ "Desktop client" : "Cliant deisce",
+ "Thunderbird & Outlook addons" : "Breiseáin Thunderbird agus Outlook",
+ "Custom user agent" : "Gníomhaire úsáideora saincheaptha",
+ "Select a user agent" : "Roghnaigh gníomhaire úsáideora",
+ "Select groups" : "Roghnaigh grúpaí",
+ "Groups" : "Grúpaí",
+ "Type to search for group …" : "Clóscríobh chun grúpa a chuardach…",
+ "Select a trigger" : "Roghnaigh truicear",
+ "At least one event must be selected" : "Ní mór imeacht amháin ar a laghad a roghnú",
+ "Add new flow" : "Cuir sreabhadh nua leis",
+ "The configuration is invalid" : "Tá an chumraíocht neamhbhailí",
+ "Active" : "Gníomhach",
+ "Save" : "Sábháil",
+ "When" : "Cathain",
+ "and" : "agus",
+ "Add a new filter" : "Cuir scagaire nua leis",
+ "Cancel" : "Cealaigh",
+ "Delete" : "Scrios",
+ "Available flows" : "Sreafaí ar fáil",
+ "For details on how to write your own flow, check out the development documentation." : "Le sonraí a fháil faoi conas do shreabhadh féin a scríobh, seiceáil na doiciméid forbartha.",
+ "No flows installed" : "Níl aon sreabhadh suiteáilte",
+ "Ask your administrator to install new flows." : "Iarr ar do riarthóir sreafaí nua a shuiteáil.",
+ "More flows" : "Níos mó sreafaí",
+ "Browse the App Store" : "Brabhsáil an Siopa Aip",
+ "Show less" : "Taispeáin níos lú",
+ "Show more" : "Taispeáin níos mó",
+ "Configured flows" : "Sreafaí cumraithe",
+ "Your flows" : "Do shreabhadh",
+ "No flows configured" : "Níl aon sreafaí cumraithe",
+ "matches" : "oireann",
+ "does not match" : "ní oireann",
+ "is" : "tá",
+ "is not" : "níl",
+ "File name" : "Ainm comhaid",
+ "File MIME type" : "Cineál comhaid MIME",
+ "File size (upload)" : "Méid comhaid (uaslódáil)",
+ "less" : "níos lú",
+ "less or equals" : "níos lú nó comhionann",
+ "greater or equals" : "níos mó nó comhionann",
+ "greater" : "mó",
+ "Request remote address" : "Iarr seoladh cianda",
+ "matches IPv4" : "oireann IPv4",
+ "does not match IPv4" : "ní mheaitseálann IPv4",
+ "matches IPv6" : "meaitseálann IPv6",
+ "does not match IPv6" : "Ní mheaitseálann IPv6",
+ "File system tag" : "Clib córas comhaid",
+ "is tagged with" : "Tá clib le",
+ "is not tagged with" : "nach bhfuil clib le",
+ "Request URL" : "Iarr URL",
+ "Request time" : "Iarr am",
+ "between" : "idir",
+ "not between" : "ní idir",
+ "Request user agent" : "Iarr gníomhaire úsáideora",
+ "Group membership" : "Ballraíocht ghrúpa",
+ "is member of" : "ina bhall de",
+ "is not member of" : "nach ball de"
+},
+"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);");
diff --git a/apps/workflowengine/l10n/ga.json b/apps/workflowengine/l10n/ga.json
new file mode 100644
index 00000000000..46ee7bd06a9
--- /dev/null
+++ b/apps/workflowengine/l10n/ga.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "Tá an t-oibreoir tugtha neamhbhailí",
+ "The given regular expression is invalid" : "Tá an slonn rialta a thugtar neamhbhailí",
+ "The given file size is invalid" : "Tá méid an chomhaid tugtha neamhbhailí",
+ "The given tag id is invalid" : "Tá an t-aitheantas clibe tugtha neamhbhailí",
+ "The given IP range is invalid" : "Tá an raon IP a thugtar neamhbhailí",
+ "The given IP range is not valid for IPv4" : "Níl an raon IP tugtha bailí do IPv4",
+ "The given IP range is not valid for IPv6" : "Níl an raon IP tugtha bailí do IPv6",
+ "The given time span is invalid" : "Tá an tréimhse ama a thugtar neamhbhailí",
+ "The given start time is invalid" : "Tá an t-am tosaithe tugtha neamhbhailí",
+ "The given end time is invalid" : "Tá an t-am críochnaithe a thugtar neamhbhailí",
+ "The given group does not exist" : "Níl an grúpa tugtha ann",
+ "File" : "Comhad",
+ "File created" : "Comhad cruthaithe",
+ "File updated" : "Nuashonraíodh an comhad",
+ "File renamed" : "Athainmníodh an comhad",
+ "File deleted" : "Scriosadh an comhad",
+ "File accessed" : "Teacht ar an gcomhad",
+ "File copied" : "Cóipeáladh an comhad",
+ "Tag assigned" : "Clib sannta",
+ "Someone" : "Duine éigin",
+ "%s created %s" : "%s cruthaithe %s",
+ "%s modified %s" : "%s modhnaithe %s",
+ "%s deleted %s" : "%s scriosta %s",
+ "%s accessed %s" : "%s rochtain %s",
+ "%s renamed %s" : "%s athainmnithe %s",
+ "%s copied %s" : "%s chóipeáil %s",
+ "%s assigned %s to %s" : "%s sannta %s do %s",
+ "Operation #%s does not exist" : "Níl oibríocht # %s ann",
+ "Entity %s does not exist" : "Níl aonán %s ann",
+ "Entity %s is invalid" : "Tá aonán %s neamhbhailí",
+ "No events are chosen." : "Ní roghnaítear aon imeachtaí.",
+ "Entity %s has no event %s" : "Níl imeacht %s ag eintiteas %s",
+ "Operation %s does not exist" : "Níl oibríocht %s ann",
+ "Operation %s is invalid" : "Tá oibríocht %s neamhbhailí",
+ "At least one check needs to be provided" : "Ní mór seiceáil amháin ar a laghad a sholáthar",
+ "The provided operation data is too long" : "Tá na sonraí oibríochta a chuirtear ar fáil ró-fhada",
+ "Invalid check provided" : "Cuireadh seiceáil neamhbhailí ar fáil",
+ "Check %s does not exist" : "Seiceáil nach bhfuil %s ann",
+ "Check %s is invalid" : "Seiceáil go bhfuil %s neamhbhailí",
+ "Check %s is not allowed with this entity" : "Seiceáil nach bhfuil %s ceadaithe leis an eintiteas seo",
+ "The provided check value is too long" : "Tá an luach seiceála a chuirtear ar fáil ró-fhada",
+ "Check #%s does not exist" : "Seiceáil nach bhfuil # %s ann",
+ "Check %s is invalid or does not exist" : "Seiceáil go bhfuil %s neamhbhailí nó níl sé ann",
+ "Flow" : "Sreabhadh",
+ "Nextcloud workflow engine" : "Inneall sreabhadh oibre Nextcloud",
+ "Select a filter" : "Roghnaigh scagaire",
+ "Select a comparator" : "Roghnaigh comparadóir",
+ "Remove filter" : "Bain an scagaire",
+ "Folder" : "Fillteán",
+ "Images" : "Íomhánna",
+ "Office documents" : "Doiciméid oifige",
+ "PDF documents" : "Doiciméid PDF",
+ "Custom MIME type" : "Cineál MIME saincheaptha",
+ "Custom mimetype" : "Cineál MIME saincheaptha",
+ "Select a file type" : "Roghnaigh cineál comhaid",
+ "e.g. httpd/unix-directory" : "m.sh. httpd/unix-directory",
+ "Please enter a valid time span" : "Cuir isteach réise ama bailí le do thoil",
+ "Files WebDAV" : "Comhaid WebDAV",
+ "Custom URL" : "URL saincheaptha",
+ "Select a request URL" : "Roghnaigh URL iarratais",
+ "Android client" : "Cliant Android",
+ "iOS client" : "Cliant iOS",
+ "Desktop client" : "Cliant deisce",
+ "Thunderbird & Outlook addons" : "Breiseáin Thunderbird agus Outlook",
+ "Custom user agent" : "Gníomhaire úsáideora saincheaptha",
+ "Select a user agent" : "Roghnaigh gníomhaire úsáideora",
+ "Select groups" : "Roghnaigh grúpaí",
+ "Groups" : "Grúpaí",
+ "Type to search for group …" : "Clóscríobh chun grúpa a chuardach…",
+ "Select a trigger" : "Roghnaigh truicear",
+ "At least one event must be selected" : "Ní mór imeacht amháin ar a laghad a roghnú",
+ "Add new flow" : "Cuir sreabhadh nua leis",
+ "The configuration is invalid" : "Tá an chumraíocht neamhbhailí",
+ "Active" : "Gníomhach",
+ "Save" : "Sábháil",
+ "When" : "Cathain",
+ "and" : "agus",
+ "Add a new filter" : "Cuir scagaire nua leis",
+ "Cancel" : "Cealaigh",
+ "Delete" : "Scrios",
+ "Available flows" : "Sreafaí ar fáil",
+ "For details on how to write your own flow, check out the development documentation." : "Le sonraí a fháil faoi conas do shreabhadh féin a scríobh, seiceáil na doiciméid forbartha.",
+ "No flows installed" : "Níl aon sreabhadh suiteáilte",
+ "Ask your administrator to install new flows." : "Iarr ar do riarthóir sreafaí nua a shuiteáil.",
+ "More flows" : "Níos mó sreafaí",
+ "Browse the App Store" : "Brabhsáil an Siopa Aip",
+ "Show less" : "Taispeáin níos lú",
+ "Show more" : "Taispeáin níos mó",
+ "Configured flows" : "Sreafaí cumraithe",
+ "Your flows" : "Do shreabhadh",
+ "No flows configured" : "Níl aon sreafaí cumraithe",
+ "matches" : "oireann",
+ "does not match" : "ní oireann",
+ "is" : "tá",
+ "is not" : "níl",
+ "File name" : "Ainm comhaid",
+ "File MIME type" : "Cineál comhaid MIME",
+ "File size (upload)" : "Méid comhaid (uaslódáil)",
+ "less" : "níos lú",
+ "less or equals" : "níos lú nó comhionann",
+ "greater or equals" : "níos mó nó comhionann",
+ "greater" : "mó",
+ "Request remote address" : "Iarr seoladh cianda",
+ "matches IPv4" : "oireann IPv4",
+ "does not match IPv4" : "ní mheaitseálann IPv4",
+ "matches IPv6" : "meaitseálann IPv6",
+ "does not match IPv6" : "Ní mheaitseálann IPv6",
+ "File system tag" : "Clib córas comhaid",
+ "is tagged with" : "Tá clib le",
+ "is not tagged with" : "nach bhfuil clib le",
+ "Request URL" : "Iarr URL",
+ "Request time" : "Iarr am",
+ "between" : "idir",
+ "not between" : "ní idir",
+ "Request user agent" : "Iarr gníomhaire úsáideora",
+ "Group membership" : "Ballraíocht ghrúpa",
+ "is member of" : "ina bhall de",
+ "is not member of" : "nach ball de"
+},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/gl.js b/apps/workflowengine/l10n/gl.js
index 6431721d729..73e1664730a 100644
--- a/apps/workflowengine/l10n/gl.js
+++ b/apps/workflowengine/l10n/gl.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Gardado",
- "Saving failed:" : "Erro gardando:",
- "File MIME type" : "Tipo MIME do ficheiro",
+ "The given operator is invalid" : "O operador indicado é incorrecto",
+ "The given regular expression is invalid" : "A expresión regular indicada é incorrecta",
+ "The given file size is invalid" : "O tamaño do ficheiro indicado é incorrecto",
+ "The given tag id is invalid" : "A etiqueta indicada é incorrecta",
+ "The given IP range is invalid" : "O intervalo de IP indicado é incorrecto",
+ "The given IP range is not valid for IPv4" : "O intervalo de IP indicado é incorrecto para IPv4",
+ "The given IP range is not valid for IPv6" : "O intervalo de IP indicado é incorrecto para IPv6",
+ "The given time span is invalid" : "O intervalo temporal indicado é incorrecto",
+ "The given start time is invalid" : "A hora de inicio indicada é incorrecta",
+ "The given end time is invalid" : "A hora final indicada é incorrecta",
+ "The given group does not exist" : "O grupo indicado non existe",
+ "File" : "Ficheiro",
+ "File created" : "Ficheiro creado",
+ "File updated" : "Ficheiro actualizado",
+ "File renamed" : "Ficheiro renomeado",
+ "File deleted" : "Ficheiro eliminado",
+ "File accessed" : "Ficheiro accedido",
+ "File copied" : "Ficheiro copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Someone",
+ "%s created %s" : "%s creado %s",
+ "%s modified %s" : "%s modificado %s",
+ "%s deleted %s" : "%s eliminado %s",
+ "%s accessed %s" : "%s accedido %s",
+ "%s renamed %s" : "%s renomeado %s",
+ "%s copied %s" : "%s copiado %s",
+ "%s assigned %s to %s" : "%s asignado %s a %s",
+ "Operation #%s does not exist" : "Non existe a operación nº %s ",
+ "Entity %s does not exist" : "Non existe a entidade %s",
+ "Entity %s is invalid" : "A entidade %s é incorrecta",
+ "No events are chosen." : "Non foi escollido ningún evento.",
+ "Entity %s has no event %s" : "A entidade %s non ten ningún evento %s",
+ "Operation %s does not exist" : "Non existe a operación %s",
+ "Operation %s is invalid" : "A operación %s é incorrecta",
+ "At least one check needs to be provided" : "É necesario fornecer polo menos unha comprobación",
+ "The provided operation data is too long" : "Os datos de operación fornecidos son demasiado longos",
+ "Invalid check provided" : "Forneceuse unha confirmación incorrecta",
+ "Check %s does not exist" : "Non existe a proba %s",
+ "Check %s is invalid" : "A proba %s é incorrecta",
+ "Check %s is not allowed with this entity" : "A proba %s non está permitida con esta entidade",
+ "The provided check value is too long" : "O valor de comprobación fornecido é demasiado longo",
+ "Check #%s does not exist" : "Non existe a proba nº %s ",
+ "Check %s is invalid or does not exist" : "A proba %s é incorrecta ou non existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Motor de fluxo de traballo de Nextcloud",
+ "Select a filter" : "Seleccione un filtro",
+ "Select a comparator" : "Seleccione un comparador",
+ "Remove filter" : "Retirar o filtro",
+ "Folder" : "Cartafol",
+ "Images" : "Imaxes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Tipo MIME personalizado",
+ "Select a file type" : "Seleccione un tipo de ficheiro",
+ "e.g. httpd/unix-directory" : "p. ex.: httpd/unix-directory",
+ "Please enter a valid time span" : "Introduza un intervalo de tempo válido",
+ "Files WebDAV" : "Ficheiros WebDAV",
+ "Custom URL" : "URL personalizado",
+ "Select a request URL" : "Seleccione un URL de solicitude",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos do Thunderbird e do Outlook",
+ "Custom user agent" : "Axente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un axente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Escriba para buscar por grupo…",
+ "Select a trigger" : "Seleccione un activador",
+ "At least one event must be selected" : "Ten que seleccionar polo menos un evento",
+ "Add new flow" : "Engadir un novo fluxo",
+ "The configuration is invalid" : "A configuración é incorrecta",
+ "Active" : "Activo",
+ "Save" : "Gardar",
+ "When" : "Cando",
+ "and" : "e",
+ "Add a new filter" : "Engadir un novo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Fluxos dispoñíbeis",
+ "For details on how to write your own flow, check out the development documentation." : "Para obter máis detalles sobre como escribir o seu propio fluxo, consulte a documentación de desenvolvemento.",
+ "No flows installed" : "Non hai ningún fluxo instalado",
+ "Ask your administrator to install new flows." : "Pídalle á administración do sitio que instale novos fluxos.",
+ "More flows" : "Máis fluxos",
+ "Browse the App Store" : "Navega pola Tenda de Aplicacións",
+ "Show less" : "Amosar menos",
+ "Show more" : "Amosar máis",
+ "Configured flows" : "Fluxos configurados",
+ "Your flows" : "Os seus fluxos",
+ "No flows configured" : "Non hai ningún fluxo configurado",
+ "matches" : "coincidencias",
+ "does not match" : "non coinciden",
"is" : "é",
"is not" : "non é",
- "matches" : "coincidencias",
- "does not match" : "non coincide",
- "Example: {placeholder}" : "Exemplo: {placeholder}",
+ "File name" : "Nome de ficheiro",
+ "File MIME type" : "Tipo MIME do ficheiro",
"File size (upload)" : "Tamaño do ficheiro (envío)",
"less" : "menor",
"less or equals" : "menor ou igual",
"greater or equals" : "maior ou igual",
"greater" : "maior",
+ "Request remote address" : "Enderezo da solicitude remota",
+ "matches IPv4" : "coincidencias IPv4",
+ "does not match IPv4" : "sen coincidencias IPv4",
+ "matches IPv6" : "coincidencias IPv6",
+ "does not match IPv6" : "sen coincidencias IPv6",
"File system tag" : "Etiqueta do sistema de ficheiros",
"is tagged with" : "está etiquetado con",
"is not tagged with" : "non está etiquetado con",
- "Select tag…" : "Escolla a etiqueta...",
- "Request remote address" : "Solicitar o enderezo remoto",
- "matches IPv4" : "concorda con IPv4",
- "does not match IPv4" : "non concorda con IPv4",
- "matches IPv6" : "concorda con IPv6",
- "does not match IPv6" : "non concorda con IPv6",
- "Request time" : "Tempo da solicitude",
+ "Request URL" : "URL da solicitude",
+ "Request time" : "Momento da solicitude",
"between" : "entre",
"not between" : "non entre",
- "Start" : "Comezo",
- "End" : "Final",
- "Select timezone…" : "Seleccionar o fuso horario…",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URL predefinidas",
- "Files WebDAV" : "Arquiva en WebDAV",
- "Request user agent" : "Solicitar axente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Pertencia a un grupo de usuarios",
+ "Request user agent" : "Cliente usado para a solicitude",
+ "Group membership" : "Pertenza ao grupo",
"is member of" : "é membro de",
- "is not member of" : "non é membro de",
- "The given operator is invalid" : "O operador indicado é incorrecto",
- "The given regular expression is invalid" : "A expresión regular indicada é incorrecta",
- "The given file size is invalid" : "O tamaño do ficheiro indicado é incorrecto",
- "The given tag id is invalid" : "A etiqueta indicada é incorrecta",
- "The given IP range is invalid" : "O intervalo de IPs indicado é incorrecto",
- "The given IP range is not valid for IPv4" : "O intervalo de IPs indicado é incorrecto para IPv4",
- "The given IP range is not valid for IPv6" : "O intervalo de IPs indicado é incorrecto para IPv6",
- "The given time span is invalid" : "O intervalo temporal indicado é incorrecto",
- "The given start time is invalid" : "O tempo de comezo indicado é incorrecto",
- "The given end time is invalid" : "O tempo final indicado é incorrecto",
- "The given group does not exist" : "O grupo indicado non existe",
- "Check %s is invalid or does not exist" : "A proba %s é incorrecta ou non existe",
- "Operation #%s does not exist" : "Non existe a operación num. %s ",
- "Operation %s does not exist" : "Non existe a operación %s",
- "Operation %s is invalid" : "A operación %s é incorrecta",
- "Check %s does not exist" : "Non existe a proba %s",
- "Check %s is invalid" : "A proba %s é incorrecta",
- "Check #%s does not exist" : "Non existe a proba num. %s ",
- "Workflow" : "Fluxo de traballo",
- "Open documentation" : "Documentación aberta",
- "Add rule group" : "Engadir unha regra de grupo",
- "Short rule description" : "Breve descrición da regra",
- "Add rule" : "Engadir regra",
- "Reset" : "Restabelecer",
- "Save" : "Gardar",
- "Saving…" : "Gardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Gardado satisfactoriamente",
- "File mime type" : "Tipo MIME do ficheiro"
+ "is not member of" : "non é membro de"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/gl.json b/apps/workflowengine/l10n/gl.json
index b662e4afebd..1d0fe95d463 100644
--- a/apps/workflowengine/l10n/gl.json
+++ b/apps/workflowengine/l10n/gl.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "Gardado",
- "Saving failed:" : "Erro gardando:",
- "File MIME type" : "Tipo MIME do ficheiro",
+ "The given operator is invalid" : "O operador indicado é incorrecto",
+ "The given regular expression is invalid" : "A expresión regular indicada é incorrecta",
+ "The given file size is invalid" : "O tamaño do ficheiro indicado é incorrecto",
+ "The given tag id is invalid" : "A etiqueta indicada é incorrecta",
+ "The given IP range is invalid" : "O intervalo de IP indicado é incorrecto",
+ "The given IP range is not valid for IPv4" : "O intervalo de IP indicado é incorrecto para IPv4",
+ "The given IP range is not valid for IPv6" : "O intervalo de IP indicado é incorrecto para IPv6",
+ "The given time span is invalid" : "O intervalo temporal indicado é incorrecto",
+ "The given start time is invalid" : "A hora de inicio indicada é incorrecta",
+ "The given end time is invalid" : "A hora final indicada é incorrecta",
+ "The given group does not exist" : "O grupo indicado non existe",
+ "File" : "Ficheiro",
+ "File created" : "Ficheiro creado",
+ "File updated" : "Ficheiro actualizado",
+ "File renamed" : "Ficheiro renomeado",
+ "File deleted" : "Ficheiro eliminado",
+ "File accessed" : "Ficheiro accedido",
+ "File copied" : "Ficheiro copiado",
+ "Tag assigned" : "Etiqueta asignada",
+ "Someone" : "Someone",
+ "%s created %s" : "%s creado %s",
+ "%s modified %s" : "%s modificado %s",
+ "%s deleted %s" : "%s eliminado %s",
+ "%s accessed %s" : "%s accedido %s",
+ "%s renamed %s" : "%s renomeado %s",
+ "%s copied %s" : "%s copiado %s",
+ "%s assigned %s to %s" : "%s asignado %s a %s",
+ "Operation #%s does not exist" : "Non existe a operación nº %s ",
+ "Entity %s does not exist" : "Non existe a entidade %s",
+ "Entity %s is invalid" : "A entidade %s é incorrecta",
+ "No events are chosen." : "Non foi escollido ningún evento.",
+ "Entity %s has no event %s" : "A entidade %s non ten ningún evento %s",
+ "Operation %s does not exist" : "Non existe a operación %s",
+ "Operation %s is invalid" : "A operación %s é incorrecta",
+ "At least one check needs to be provided" : "É necesario fornecer polo menos unha comprobación",
+ "The provided operation data is too long" : "Os datos de operación fornecidos son demasiado longos",
+ "Invalid check provided" : "Forneceuse unha confirmación incorrecta",
+ "Check %s does not exist" : "Non existe a proba %s",
+ "Check %s is invalid" : "A proba %s é incorrecta",
+ "Check %s is not allowed with this entity" : "A proba %s non está permitida con esta entidade",
+ "The provided check value is too long" : "O valor de comprobación fornecido é demasiado longo",
+ "Check #%s does not exist" : "Non existe a proba nº %s ",
+ "Check %s is invalid or does not exist" : "A proba %s é incorrecta ou non existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Motor de fluxo de traballo de Nextcloud",
+ "Select a filter" : "Seleccione un filtro",
+ "Select a comparator" : "Seleccione un comparador",
+ "Remove filter" : "Retirar o filtro",
+ "Folder" : "Cartafol",
+ "Images" : "Imaxes",
+ "Office documents" : "Documentos de oficina",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Tipo MIME personalizado",
+ "Select a file type" : "Seleccione un tipo de ficheiro",
+ "e.g. httpd/unix-directory" : "p. ex.: httpd/unix-directory",
+ "Please enter a valid time span" : "Introduza un intervalo de tempo válido",
+ "Files WebDAV" : "Ficheiros WebDAV",
+ "Custom URL" : "URL personalizado",
+ "Select a request URL" : "Seleccione un URL de solicitude",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de escritorio",
+ "Thunderbird & Outlook addons" : "Complementos do Thunderbird e do Outlook",
+ "Custom user agent" : "Axente de usuario personalizado",
+ "Select a user agent" : "Seleccionar un axente de usuario",
+ "Select groups" : "Seleccionar grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Escriba para buscar por grupo…",
+ "Select a trigger" : "Seleccione un activador",
+ "At least one event must be selected" : "Ten que seleccionar polo menos un evento",
+ "Add new flow" : "Engadir un novo fluxo",
+ "The configuration is invalid" : "A configuración é incorrecta",
+ "Active" : "Activo",
+ "Save" : "Gardar",
+ "When" : "Cando",
+ "and" : "e",
+ "Add a new filter" : "Engadir un novo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Eliminar",
+ "Available flows" : "Fluxos dispoñíbeis",
+ "For details on how to write your own flow, check out the development documentation." : "Para obter máis detalles sobre como escribir o seu propio fluxo, consulte a documentación de desenvolvemento.",
+ "No flows installed" : "Non hai ningún fluxo instalado",
+ "Ask your administrator to install new flows." : "Pídalle á administración do sitio que instale novos fluxos.",
+ "More flows" : "Máis fluxos",
+ "Browse the App Store" : "Navega pola Tenda de Aplicacións",
+ "Show less" : "Amosar menos",
+ "Show more" : "Amosar máis",
+ "Configured flows" : "Fluxos configurados",
+ "Your flows" : "Os seus fluxos",
+ "No flows configured" : "Non hai ningún fluxo configurado",
+ "matches" : "coincidencias",
+ "does not match" : "non coinciden",
"is" : "é",
"is not" : "non é",
- "matches" : "coincidencias",
- "does not match" : "non coincide",
- "Example: {placeholder}" : "Exemplo: {placeholder}",
+ "File name" : "Nome de ficheiro",
+ "File MIME type" : "Tipo MIME do ficheiro",
"File size (upload)" : "Tamaño do ficheiro (envío)",
"less" : "menor",
"less or equals" : "menor ou igual",
"greater or equals" : "maior ou igual",
"greater" : "maior",
+ "Request remote address" : "Enderezo da solicitude remota",
+ "matches IPv4" : "coincidencias IPv4",
+ "does not match IPv4" : "sen coincidencias IPv4",
+ "matches IPv6" : "coincidencias IPv6",
+ "does not match IPv6" : "sen coincidencias IPv6",
"File system tag" : "Etiqueta do sistema de ficheiros",
"is tagged with" : "está etiquetado con",
"is not tagged with" : "non está etiquetado con",
- "Select tag…" : "Escolla a etiqueta...",
- "Request remote address" : "Solicitar o enderezo remoto",
- "matches IPv4" : "concorda con IPv4",
- "does not match IPv4" : "non concorda con IPv4",
- "matches IPv6" : "concorda con IPv6",
- "does not match IPv6" : "non concorda con IPv6",
- "Request time" : "Tempo da solicitude",
+ "Request URL" : "URL da solicitude",
+ "Request time" : "Momento da solicitude",
"between" : "entre",
"not between" : "non entre",
- "Start" : "Comezo",
- "End" : "Final",
- "Select timezone…" : "Seleccionar o fuso horario…",
- "Request URL" : "Solicitar URL",
- "Predefined URLs" : "URL predefinidas",
- "Files WebDAV" : "Arquiva en WebDAV",
- "Request user agent" : "Solicitar axente de usuario",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de escritorio",
- "User group membership" : "Pertencia a un grupo de usuarios",
+ "Request user agent" : "Cliente usado para a solicitude",
+ "Group membership" : "Pertenza ao grupo",
"is member of" : "é membro de",
- "is not member of" : "non é membro de",
- "The given operator is invalid" : "O operador indicado é incorrecto",
- "The given regular expression is invalid" : "A expresión regular indicada é incorrecta",
- "The given file size is invalid" : "O tamaño do ficheiro indicado é incorrecto",
- "The given tag id is invalid" : "A etiqueta indicada é incorrecta",
- "The given IP range is invalid" : "O intervalo de IPs indicado é incorrecto",
- "The given IP range is not valid for IPv4" : "O intervalo de IPs indicado é incorrecto para IPv4",
- "The given IP range is not valid for IPv6" : "O intervalo de IPs indicado é incorrecto para IPv6",
- "The given time span is invalid" : "O intervalo temporal indicado é incorrecto",
- "The given start time is invalid" : "O tempo de comezo indicado é incorrecto",
- "The given end time is invalid" : "O tempo final indicado é incorrecto",
- "The given group does not exist" : "O grupo indicado non existe",
- "Check %s is invalid or does not exist" : "A proba %s é incorrecta ou non existe",
- "Operation #%s does not exist" : "Non existe a operación num. %s ",
- "Operation %s does not exist" : "Non existe a operación %s",
- "Operation %s is invalid" : "A operación %s é incorrecta",
- "Check %s does not exist" : "Non existe a proba %s",
- "Check %s is invalid" : "A proba %s é incorrecta",
- "Check #%s does not exist" : "Non existe a proba num. %s ",
- "Workflow" : "Fluxo de traballo",
- "Open documentation" : "Documentación aberta",
- "Add rule group" : "Engadir unha regra de grupo",
- "Short rule description" : "Breve descrición da regra",
- "Add rule" : "Engadir regra",
- "Reset" : "Restabelecer",
- "Save" : "Gardar",
- "Saving…" : "Gardando...",
- "Loading…" : "Cargando...",
- "Successfully saved" : "Gardado satisfactoriamente",
- "File mime type" : "Tipo MIME do ficheiro"
+ "is not member of" : "non é membro de"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/he.js b/apps/workflowengine/l10n/he.js
new file mode 100644
index 00000000000..368337c5a05
--- /dev/null
+++ b/apps/workflowengine/l10n/he.js
@@ -0,0 +1,104 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "הפעולה שצוינה שגויה",
+ "The given regular expression is invalid" : "הביטוי הרגולרי שצוין שגוי",
+ "The given file size is invalid" : "גודל הקובץ שצוין שגוי",
+ "The given tag id is invalid" : "התגית שצוינה שגויה",
+ "The given IP range is invalid" : "טווח כתובות ה־IP שצוין שגוי",
+ "The given IP range is not valid for IPv4" : "טווח כתובות ה־IP שצוין אינו תקף ל־IPv4",
+ "The given IP range is not valid for IPv6" : "טווח כתובות ה־IP שצוין אינו תקף ל־IPv6",
+ "The given time span is invalid" : "טווח הזמן שצוין שגוי",
+ "The given start time is invalid" : "מועד ההתחלה שצוין שגוי",
+ "The given end time is invalid" : "מועד הסיום שצוין שגוי",
+ "The given group does not exist" : "הקבוצה שצוינה אינה קיימת",
+ "File" : "קובץ",
+ "File created" : "נוצר קובץ",
+ "File updated" : "עודכן קובץ",
+ "File renamed" : "שונה שם קובץ",
+ "File deleted" : "מחק קובץ",
+ "File accessed" : "הייתה גישה לקובץ",
+ "File copied" : "הועתק קובץ",
+ "Tag assigned" : "הוקצתה תגית",
+ "Someone" : "מישהו",
+ "Operation #%s does not exist" : "פעולה מס׳ %s לא קיימת",
+ "Entity %s does not exist" : "היישות %s לא קיימת",
+ "Entity %s is invalid" : "היישות %s שגויה",
+ "No events are chosen." : "לא נבחרו אירועים.",
+ "Entity %s has no event %s" : "ליישות %s אין אירוע %s",
+ "Operation %s does not exist" : "הפעולה %s לא קיימת",
+ "Operation %s is invalid" : "הפעולה %s שגויה",
+ "At least one check needs to be provided" : "יש לספק לפחות בדיקה אחת",
+ "Invalid check provided" : "סופקה בדיקה שגויה",
+ "Check %s does not exist" : "הבדיקה %s לא קיימת",
+ "Check %s is invalid" : "הבדיקה %s שגויה",
+ "Check %s is not allowed with this entity" : "הבדיקה %s אסורה ביישות הזאת",
+ "Check #%s does not exist" : "בדיקה מס׳ %s לא קיימת",
+ "Check %s is invalid or does not exist" : "הבדיקה %s שגויה או שאינה קיימת",
+ "Flow" : "רצף",
+ "Nextcloud workflow engine" : "מנגנון רצף הפעילות של Nextcloud",
+ "Select a filter" : "נא לבחור מסנן",
+ "Select a comparator" : "נא לבחור משווה",
+ "Folder" : "תיקייה",
+ "Images" : "תמונות",
+ "Office documents" : "מסמכי אופיס (Office)",
+ "PDF documents" : "מסמכי RDF",
+ "Custom mimetype" : "נא לבחור טיפוס MIME",
+ "Select a file type" : "נא לבחור סוג קובץ",
+ "e.g. httpd/unix-directory" : "למשל: httpd/unix-directory",
+ "Please enter a valid time span" : "נא למלא טווח זמן תקין",
+ "Files WebDAV" : "WebDAV קבצים",
+ "Custom URL" : "כתובת מותאמת אישית",
+ "Select a request URL" : "נא לבחור את כתובת הבקשה",
+ "Android client" : "לקוח Android",
+ "iOS client" : "לקוח iOS",
+ "Desktop client" : "לקוח שולחן עבודה",
+ "Thunderbird & Outlook addons" : "תוספות ל־Thunderbird ול־Outlook",
+ "Custom user agent" : "סוכן משתמש מותאם אישית",
+ "Select a user agent" : "נא לבחור סוכן משתמש",
+ "Select groups" : "בחירת קבוצות",
+ "Groups" : "קבוצות",
+ "At least one event must be selected" : "יש לבחור באירוע אחד לפחות",
+ "Add new flow" : "הוספת רצף חדש",
+ "The configuration is invalid" : "ההגדרות שגויות",
+ "Active" : "פעיל",
+ "Save" : "שמירה",
+ "When" : "מתי",
+ "and" : "וגם",
+ "Cancel" : "ביטול",
+ "Delete" : "מחיקה",
+ "Available flows" : "רצפים זמינים",
+ "For details on how to write your own flow, check out the development documentation." : "לפרטים על כתיבת רצף משלך, יש לפנות אל התיעוד למפתחים.",
+ "More flows" : "רצפים נוספים",
+ "Show less" : "להציג פחות",
+ "Show more" : "להציג יותר",
+ "Configured flows" : "רצפים מוגדרים",
+ "Your flows" : "הרצפים שלך",
+ "matches" : "תואם",
+ "does not match" : "אינו תואם",
+ "is" : "הוא",
+ "is not" : "אינו",
+ "File name" : "שם קובץ",
+ "File MIME type" : "סוג ה־MIME של הקובץ",
+ "File size (upload)" : "גודל קובץ (העלאה)",
+ "less" : "פחות",
+ "less or equals" : "פחות או שווה",
+ "greater or equals" : "גדול או שווה",
+ "greater" : "גדול",
+ "Request remote address" : "בקשת כתובת מרוחקת",
+ "matches IPv4" : "התאמת IPv4",
+ "does not match IPv4" : "ללא התאמת IPv4",
+ "matches IPv6" : "התאמת IPv6",
+ "does not match IPv6" : "ללא התאמת IPv6",
+ "File system tag" : "תגית מערכת קבצים",
+ "is tagged with" : "עם התגית",
+ "is not tagged with" : "ללא התגית",
+ "Request URL" : "כתובת בקשה",
+ "Request time" : "זמן בקשה",
+ "between" : "בין",
+ "not between" : "לא בין",
+ "Request user agent" : "סוכן משתמש הבקשה",
+ "is member of" : "חבר בקבוצה",
+ "is not member of" : "לא חבר בקבוצה"
+},
+"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;");
diff --git a/apps/workflowengine/l10n/he.json b/apps/workflowengine/l10n/he.json
new file mode 100644
index 00000000000..306a2929e39
--- /dev/null
+++ b/apps/workflowengine/l10n/he.json
@@ -0,0 +1,102 @@
+{ "translations": {
+ "The given operator is invalid" : "הפעולה שצוינה שגויה",
+ "The given regular expression is invalid" : "הביטוי הרגולרי שצוין שגוי",
+ "The given file size is invalid" : "גודל הקובץ שצוין שגוי",
+ "The given tag id is invalid" : "התגית שצוינה שגויה",
+ "The given IP range is invalid" : "טווח כתובות ה־IP שצוין שגוי",
+ "The given IP range is not valid for IPv4" : "טווח כתובות ה־IP שצוין אינו תקף ל־IPv4",
+ "The given IP range is not valid for IPv6" : "טווח כתובות ה־IP שצוין אינו תקף ל־IPv6",
+ "The given time span is invalid" : "טווח הזמן שצוין שגוי",
+ "The given start time is invalid" : "מועד ההתחלה שצוין שגוי",
+ "The given end time is invalid" : "מועד הסיום שצוין שגוי",
+ "The given group does not exist" : "הקבוצה שצוינה אינה קיימת",
+ "File" : "קובץ",
+ "File created" : "נוצר קובץ",
+ "File updated" : "עודכן קובץ",
+ "File renamed" : "שונה שם קובץ",
+ "File deleted" : "מחק קובץ",
+ "File accessed" : "הייתה גישה לקובץ",
+ "File copied" : "הועתק קובץ",
+ "Tag assigned" : "הוקצתה תגית",
+ "Someone" : "מישהו",
+ "Operation #%s does not exist" : "פעולה מס׳ %s לא קיימת",
+ "Entity %s does not exist" : "היישות %s לא קיימת",
+ "Entity %s is invalid" : "היישות %s שגויה",
+ "No events are chosen." : "לא נבחרו אירועים.",
+ "Entity %s has no event %s" : "ליישות %s אין אירוע %s",
+ "Operation %s does not exist" : "הפעולה %s לא קיימת",
+ "Operation %s is invalid" : "הפעולה %s שגויה",
+ "At least one check needs to be provided" : "יש לספק לפחות בדיקה אחת",
+ "Invalid check provided" : "סופקה בדיקה שגויה",
+ "Check %s does not exist" : "הבדיקה %s לא קיימת",
+ "Check %s is invalid" : "הבדיקה %s שגויה",
+ "Check %s is not allowed with this entity" : "הבדיקה %s אסורה ביישות הזאת",
+ "Check #%s does not exist" : "בדיקה מס׳ %s לא קיימת",
+ "Check %s is invalid or does not exist" : "הבדיקה %s שגויה או שאינה קיימת",
+ "Flow" : "רצף",
+ "Nextcloud workflow engine" : "מנגנון רצף הפעילות של Nextcloud",
+ "Select a filter" : "נא לבחור מסנן",
+ "Select a comparator" : "נא לבחור משווה",
+ "Folder" : "תיקייה",
+ "Images" : "תמונות",
+ "Office documents" : "מסמכי אופיס (Office)",
+ "PDF documents" : "מסמכי RDF",
+ "Custom mimetype" : "נא לבחור טיפוס MIME",
+ "Select a file type" : "נא לבחור סוג קובץ",
+ "e.g. httpd/unix-directory" : "למשל: httpd/unix-directory",
+ "Please enter a valid time span" : "נא למלא טווח זמן תקין",
+ "Files WebDAV" : "WebDAV קבצים",
+ "Custom URL" : "כתובת מותאמת אישית",
+ "Select a request URL" : "נא לבחור את כתובת הבקשה",
+ "Android client" : "לקוח Android",
+ "iOS client" : "לקוח iOS",
+ "Desktop client" : "לקוח שולחן עבודה",
+ "Thunderbird & Outlook addons" : "תוספות ל־Thunderbird ול־Outlook",
+ "Custom user agent" : "סוכן משתמש מותאם אישית",
+ "Select a user agent" : "נא לבחור סוכן משתמש",
+ "Select groups" : "בחירת קבוצות",
+ "Groups" : "קבוצות",
+ "At least one event must be selected" : "יש לבחור באירוע אחד לפחות",
+ "Add new flow" : "הוספת רצף חדש",
+ "The configuration is invalid" : "ההגדרות שגויות",
+ "Active" : "פעיל",
+ "Save" : "שמירה",
+ "When" : "מתי",
+ "and" : "וגם",
+ "Cancel" : "ביטול",
+ "Delete" : "מחיקה",
+ "Available flows" : "רצפים זמינים",
+ "For details on how to write your own flow, check out the development documentation." : "לפרטים על כתיבת רצף משלך, יש לפנות אל התיעוד למפתחים.",
+ "More flows" : "רצפים נוספים",
+ "Show less" : "להציג פחות",
+ "Show more" : "להציג יותר",
+ "Configured flows" : "רצפים מוגדרים",
+ "Your flows" : "הרצפים שלך",
+ "matches" : "תואם",
+ "does not match" : "אינו תואם",
+ "is" : "הוא",
+ "is not" : "אינו",
+ "File name" : "שם קובץ",
+ "File MIME type" : "סוג ה־MIME של הקובץ",
+ "File size (upload)" : "גודל קובץ (העלאה)",
+ "less" : "פחות",
+ "less or equals" : "פחות או שווה",
+ "greater or equals" : "גדול או שווה",
+ "greater" : "גדול",
+ "Request remote address" : "בקשת כתובת מרוחקת",
+ "matches IPv4" : "התאמת IPv4",
+ "does not match IPv4" : "ללא התאמת IPv4",
+ "matches IPv6" : "התאמת IPv6",
+ "does not match IPv6" : "ללא התאמת IPv6",
+ "File system tag" : "תגית מערכת קבצים",
+ "is tagged with" : "עם התגית",
+ "is not tagged with" : "ללא התגית",
+ "Request URL" : "כתובת בקשה",
+ "Request time" : "זמן בקשה",
+ "between" : "בין",
+ "not between" : "לא בין",
+ "Request user agent" : "סוכן משתמש הבקשה",
+ "is member of" : "חבר בקבוצה",
+ "is not member of" : "לא חבר בקבוצה"
+},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/hr.js b/apps/workflowengine/l10n/hr.js
new file mode 100644
index 00000000000..8d38ce74c38
--- /dev/null
+++ b/apps/workflowengine/l10n/hr.js
@@ -0,0 +1,114 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Navedeni operater nije važeći",
+ "The given regular expression is invalid" : "Navedeni regularni izraz nije važeći",
+ "The given file size is invalid" : "Navedena veličina datoteke nije važeća",
+ "The given tag id is invalid" : "Navedeni ID oznake nije važeći",
+ "The given IP range is invalid" : "Navedeni raspon IP adresa nije važeći",
+ "The given IP range is not valid for IPv4" : "Navedeni raspon IP adresa ne vrijedi za IPv4",
+ "The given IP range is not valid for IPv6" : "Navedeni raspon IP adresa ne vrijedi za IPv6",
+ "The given time span is invalid" : "Navedeno vremensko razdoblje nije važeće",
+ "The given start time is invalid" : "Navedeno vrijeme početka nije važeće",
+ "The given end time is invalid" : "Navedeno vrijeme završetka nije važeće",
+ "The given group does not exist" : "Navedena grupa ne postoji",
+ "File" : "Datoteka",
+ "File created" : "Datoteka je stvorena",
+ "File updated" : "Datoteka je ažurirana",
+ "File renamed" : "Datoteka je preimenovana",
+ "File deleted" : "Datoteka je izbrisana",
+ "File accessed" : "Datoteci je pristupljeno",
+ "File copied" : "Datoteka je kopirana",
+ "Tag assigned" : "Dodijeljena oznaka",
+ "Someone" : "Netko",
+ "%s created %s" : "%s je stvorio %s",
+ "%s modified %s" : "%s je izmijenio %s",
+ "%s deleted %s" : "%s je izbrisao %s",
+ "%s accessed %s" : "%s je pristupio %s",
+ "%s renamed %s" : "%s je preimenovao %s",
+ "%s copied %s" : "%s je kopirao %s",
+ "%s assigned %s to %s" : "%s je dodijelio %s %s",
+ "Operation #%s does not exist" : "Radnja #%s ne postoji",
+ "Entity %s does not exist" : "Entitet %s ne postoji",
+ "Entity %s is invalid" : "Entitet %s nije valjan",
+ "No events are chosen." : "Nema odabranih događaja.",
+ "Entity %s has no event %s" : "Entitet %s nema događaja %s",
+ "Operation %s does not exist" : "Radnja %s ne postoji",
+ "Operation %s is invalid" : "Radnja %s nije važeća",
+ "At least one check needs to be provided" : "Morate odabrati barem jednu od ponuđenih mogućnosti",
+ "The provided operation data is too long" : "Pruženi podaci o radnji su predugački",
+ "Invalid check provided" : "Odabrana je nevažeća mogućnost",
+ "Check %s does not exist" : "Provjera %s ne postoji",
+ "Check %s is invalid" : "Provjera %s nije važeća",
+ "Check %s is not allowed with this entity" : "Provjera %s nije dopuštena s ovim entitetom",
+ "The provided check value is too long" : "Pružena vrijednost provjere je predugačka",
+ "Check #%s does not exist" : "Provjera #%s ne postoji",
+ "Check %s is invalid or does not exist" : "Provjera %s nije važeća ili ne postoji",
+ "Flow" : "Tijek",
+ "Nextcloud workflow engine" : "Upravljački program tijeka rada Nextclouda",
+ "Select a filter" : "Odaberi filtar",
+ "Select a comparator" : "Odaberi usporednik",
+ "Folder" : "Mapa",
+ "Images" : "Slike",
+ "Office documents" : "Dokumenti paketa Office",
+ "PDF documents" : "Dokumenti PDF",
+ "Custom mimetype" : "Prilagođeni mimetype",
+ "Select a file type" : "Odaberi vrstu datoteke",
+ "e.g. httpd/unix-directory" : "npr. httpd/unix-directory",
+ "Please enter a valid time span" : "Unesite valjani vremenski raspon",
+ "Files WebDAV" : "Datoteke WebDAV",
+ "Custom URL" : "Prilagođeni URL",
+ "Select a request URL" : "Odaberi URL zahtjeva",
+ "Android client" : "Klijent za Android",
+ "iOS client" : "Klijent za iOS",
+ "Desktop client" : "Klijent za stolna računala",
+ "Thunderbird & Outlook addons" : "Dodaci za Thunderbird i Outlook",
+ "Custom user agent" : "Prilagođeni korisnički agent",
+ "Select a user agent" : "Odaberi korisničkog agenta",
+ "Select groups" : "Označi grupe",
+ "Groups" : "Grupe",
+ "At least one event must be selected" : "Morate odabrati barem jedan događaj",
+ "Add new flow" : "Dodaj novi tijek",
+ "The configuration is invalid" : "Konfiguracija nije valjana",
+ "Active" : "Aktivan",
+ "Save" : "Spremi",
+ "When" : "Kada",
+ "and" : "i",
+ "Cancel" : "Odustani",
+ "Delete" : "Izbriši",
+ "Available flows" : "Dostupni tijekovi",
+ "For details on how to write your own flow, check out the development documentation." : "Više informacija o pisanju vlastitog tijeka možete pronaći u razvojnoj dokumentaciji.",
+ "More flows" : "Više tijekova",
+ "Browse the App Store" : "Pretraži trgovinu aplikacijama",
+ "Show less" : "Prikaži manje",
+ "Show more" : "Prikaži više",
+ "Configured flows" : "Konfigurirani tijekovi",
+ "Your flows" : "Vaši tijekovi",
+ "matches" : "podudara se",
+ "does not match" : "ne podudara se",
+ "is" : "je",
+ "is not" : "nije",
+ "File name" : "Naziv datoteke",
+ "File MIME type" : "Vrsta MIME datoteke",
+ "File size (upload)" : "Veličina datoteke (otprema)",
+ "less" : "manje",
+ "less or equals" : "manje ili jednako",
+ "greater or equals" : "veće ili jednako",
+ "greater" : "veće",
+ "Request remote address" : "Zatraži udaljenu adresu",
+ "matches IPv4" : "odgovara IPv4",
+ "does not match IPv4" : "ne odgovara IPv4",
+ "matches IPv6" : "odgovara IPv6",
+ "does not match IPv6" : "ne odgovara IPv6",
+ "File system tag" : "Oznaka datotečnog sustava",
+ "is tagged with" : "označeno je sa",
+ "is not tagged with" : "nije označeno sa",
+ "Request URL" : "Zatraži URL",
+ "Request time" : "Zatraži vrijeme",
+ "between" : "između",
+ "not between" : "nije između",
+ "Request user agent" : "Zatraži korisničkog agenta",
+ "is member of" : "je član",
+ "is not member of" : "nije član"
+},
+"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/hr.json b/apps/workflowengine/l10n/hr.json
new file mode 100644
index 00000000000..00efcad1738
--- /dev/null
+++ b/apps/workflowengine/l10n/hr.json
@@ -0,0 +1,112 @@
+{ "translations": {
+ "The given operator is invalid" : "Navedeni operater nije važeći",
+ "The given regular expression is invalid" : "Navedeni regularni izraz nije važeći",
+ "The given file size is invalid" : "Navedena veličina datoteke nije važeća",
+ "The given tag id is invalid" : "Navedeni ID oznake nije važeći",
+ "The given IP range is invalid" : "Navedeni raspon IP adresa nije važeći",
+ "The given IP range is not valid for IPv4" : "Navedeni raspon IP adresa ne vrijedi za IPv4",
+ "The given IP range is not valid for IPv6" : "Navedeni raspon IP adresa ne vrijedi za IPv6",
+ "The given time span is invalid" : "Navedeno vremensko razdoblje nije važeće",
+ "The given start time is invalid" : "Navedeno vrijeme početka nije važeće",
+ "The given end time is invalid" : "Navedeno vrijeme završetka nije važeće",
+ "The given group does not exist" : "Navedena grupa ne postoji",
+ "File" : "Datoteka",
+ "File created" : "Datoteka je stvorena",
+ "File updated" : "Datoteka je ažurirana",
+ "File renamed" : "Datoteka je preimenovana",
+ "File deleted" : "Datoteka je izbrisana",
+ "File accessed" : "Datoteci je pristupljeno",
+ "File copied" : "Datoteka je kopirana",
+ "Tag assigned" : "Dodijeljena oznaka",
+ "Someone" : "Netko",
+ "%s created %s" : "%s je stvorio %s",
+ "%s modified %s" : "%s je izmijenio %s",
+ "%s deleted %s" : "%s je izbrisao %s",
+ "%s accessed %s" : "%s je pristupio %s",
+ "%s renamed %s" : "%s je preimenovao %s",
+ "%s copied %s" : "%s je kopirao %s",
+ "%s assigned %s to %s" : "%s je dodijelio %s %s",
+ "Operation #%s does not exist" : "Radnja #%s ne postoji",
+ "Entity %s does not exist" : "Entitet %s ne postoji",
+ "Entity %s is invalid" : "Entitet %s nije valjan",
+ "No events are chosen." : "Nema odabranih događaja.",
+ "Entity %s has no event %s" : "Entitet %s nema događaja %s",
+ "Operation %s does not exist" : "Radnja %s ne postoji",
+ "Operation %s is invalid" : "Radnja %s nije važeća",
+ "At least one check needs to be provided" : "Morate odabrati barem jednu od ponuđenih mogućnosti",
+ "The provided operation data is too long" : "Pruženi podaci o radnji su predugački",
+ "Invalid check provided" : "Odabrana je nevažeća mogućnost",
+ "Check %s does not exist" : "Provjera %s ne postoji",
+ "Check %s is invalid" : "Provjera %s nije važeća",
+ "Check %s is not allowed with this entity" : "Provjera %s nije dopuštena s ovim entitetom",
+ "The provided check value is too long" : "Pružena vrijednost provjere je predugačka",
+ "Check #%s does not exist" : "Provjera #%s ne postoji",
+ "Check %s is invalid or does not exist" : "Provjera %s nije važeća ili ne postoji",
+ "Flow" : "Tijek",
+ "Nextcloud workflow engine" : "Upravljački program tijeka rada Nextclouda",
+ "Select a filter" : "Odaberi filtar",
+ "Select a comparator" : "Odaberi usporednik",
+ "Folder" : "Mapa",
+ "Images" : "Slike",
+ "Office documents" : "Dokumenti paketa Office",
+ "PDF documents" : "Dokumenti PDF",
+ "Custom mimetype" : "Prilagođeni mimetype",
+ "Select a file type" : "Odaberi vrstu datoteke",
+ "e.g. httpd/unix-directory" : "npr. httpd/unix-directory",
+ "Please enter a valid time span" : "Unesite valjani vremenski raspon",
+ "Files WebDAV" : "Datoteke WebDAV",
+ "Custom URL" : "Prilagođeni URL",
+ "Select a request URL" : "Odaberi URL zahtjeva",
+ "Android client" : "Klijent za Android",
+ "iOS client" : "Klijent za iOS",
+ "Desktop client" : "Klijent za stolna računala",
+ "Thunderbird & Outlook addons" : "Dodaci za Thunderbird i Outlook",
+ "Custom user agent" : "Prilagođeni korisnički agent",
+ "Select a user agent" : "Odaberi korisničkog agenta",
+ "Select groups" : "Označi grupe",
+ "Groups" : "Grupe",
+ "At least one event must be selected" : "Morate odabrati barem jedan događaj",
+ "Add new flow" : "Dodaj novi tijek",
+ "The configuration is invalid" : "Konfiguracija nije valjana",
+ "Active" : "Aktivan",
+ "Save" : "Spremi",
+ "When" : "Kada",
+ "and" : "i",
+ "Cancel" : "Odustani",
+ "Delete" : "Izbriši",
+ "Available flows" : "Dostupni tijekovi",
+ "For details on how to write your own flow, check out the development documentation." : "Više informacija o pisanju vlastitog tijeka možete pronaći u razvojnoj dokumentaciji.",
+ "More flows" : "Više tijekova",
+ "Browse the App Store" : "Pretraži trgovinu aplikacijama",
+ "Show less" : "Prikaži manje",
+ "Show more" : "Prikaži više",
+ "Configured flows" : "Konfigurirani tijekovi",
+ "Your flows" : "Vaši tijekovi",
+ "matches" : "podudara se",
+ "does not match" : "ne podudara se",
+ "is" : "je",
+ "is not" : "nije",
+ "File name" : "Naziv datoteke",
+ "File MIME type" : "Vrsta MIME datoteke",
+ "File size (upload)" : "Veličina datoteke (otprema)",
+ "less" : "manje",
+ "less or equals" : "manje ili jednako",
+ "greater or equals" : "veće ili jednako",
+ "greater" : "veće",
+ "Request remote address" : "Zatraži udaljenu adresu",
+ "matches IPv4" : "odgovara IPv4",
+ "does not match IPv4" : "ne odgovara IPv4",
+ "matches IPv6" : "odgovara IPv6",
+ "does not match IPv6" : "ne odgovara IPv6",
+ "File system tag" : "Oznaka datotečnog sustava",
+ "is tagged with" : "označeno je sa",
+ "is not tagged with" : "nije označeno sa",
+ "Request URL" : "Zatraži URL",
+ "Request time" : "Zatraži vrijeme",
+ "between" : "između",
+ "not between" : "nije između",
+ "Request user agent" : "Zatraži korisničkog agenta",
+ "is member of" : "je član",
+ "is not member of" : "nije član"
+},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/hu.js b/apps/workflowengine/l10n/hu.js
index 3ca2b526c40..14a69b268d1 100644
--- a/apps/workflowengine/l10n/hu.js
+++ b/apps/workflowengine/l10n/hu.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Elmentve",
- "Saving failed:" : "Mentés sikertelen:",
- "File MIME type" : "Fájl MIME típus",
- "is" : "ez",
- "is not" : "nem ez",
+ "The given operator is invalid" : "A megadott operátor érvénytelen",
+ "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
+ "The given file size is invalid" : "A megadott fájlméret érvénytelen",
+ "The given tag id is invalid" : "A megadott címkeazonosító érvénytelen",
+ "The given IP range is invalid" : "A megadott IP-tartomány érvénytelen",
+ "The given IP range is not valid for IPv4" : "A megadott IPv4-tartomány érvénytelen",
+ "The given IP range is not valid for IPv6" : "A megadott IPv6-tartomány érvénytelen",
+ "The given time span is invalid" : "A megadott időtartam érvénytelen",
+ "The given start time is invalid" : "A megadott kezdési idő érvénytelen",
+ "The given end time is invalid" : "A megadott befejezési idő érvénytelen",
+ "The given group does not exist" : "A megadott csoport nem létezik",
+ "File" : "Fájl",
+ "File created" : "A fájl létrehozva",
+ "File updated" : "A fájl frissítve",
+ "File renamed" : "A fájl átnevezve",
+ "File deleted" : "A fájl törölve",
+ "File accessed" : "Hozzáférés a fájlhoz",
+ "File copied" : "A fájl másolva",
+ "Tag assigned" : "Címke hozzárendelve",
+ "Someone" : "Valaki",
+ "%s created %s" : "%s létrehozta a következőt: %s",
+ "%s modified %s" : "%s módosította a következőt: %s",
+ "%s deleted %s" : "%s törölte a következőt: %s",
+ "%s accessed %s" : "%s hozzáfért a következőhöz: %s",
+ "%s renamed %s" : "%s átnevezte a következőt: %s",
+ "%s copied %s" : "%s átmásolta a következőt: %s",
+ "%s assigned %s to %s" : "%s hozzárendelte a következőt: %s, hozzá: %s",
+ "Operation #%s does not exist" : "A(z) #%s művelet nem létezik",
+ "Entity %s does not exist" : "A(z) %s entitás nem létezik",
+ "Entity %s is invalid" : "A(z) %s entitás érvénytelen",
+ "No events are chosen." : "Nincs kiválasztva esemény.",
+ "Entity %s has no event %s" : "A(z) %s entitásnak nincs eseménye %s",
+ "Operation %s does not exist" : "A(z) %s művelet nem létezik",
+ "Operation %s is invalid" : "A(z) #%s művelet érvénytelen",
+ "At least one check needs to be provided" : "Legalább egy ellenőrzést meg kell adni",
+ "The provided operation data is too long" : "A megadott műveleti adatok túl hosszúak",
+ "Invalid check provided" : "Érvénytelen ellenőrzést adott meg",
+ "Check %s does not exist" : "A(z) %s nem létezik, ellenőrizze",
+ "Check %s is invalid" : "A(z) %s érvénytelen, ellenőrizze",
+ "Check %s is not allowed with this entity" : "A(z) %s ellenőrzés nem engedélyezett ezzel az entitással",
+ "The provided check value is too long" : "A megadott ellenőrzési érték túl hosszú",
+ "Check #%s does not exist" : "A(z) #%s nem létezik, ellenőrizze",
+ "Check %s is invalid or does not exist" : "A(z) %s érvénytelen vagy nem létezik, ellenőrizze",
+ "Flow" : "Folyamat",
+ "Nextcloud workflow engine" : "Nextcloud munkafolyamat-motor",
+ "Select a filter" : "Válasszon szűrőt",
+ "Select a comparator" : "Válasszon összehasonlítót",
+ "Remove filter" : "Szűrő eltávolítása",
+ "Folder" : "Mappa",
+ "Images" : "Képek",
+ "Office documents" : "Irodai dokumentumok",
+ "PDF documents" : "PDF-dokumentumok",
+ "Custom MIME type" : "Egyéni MIME-típus",
+ "Custom mimetype" : "Egyéni MIME-típus",
+ "Select a file type" : "Válasszon fájltípust",
+ "e.g. httpd/unix-directory" : "például httpd/unix-directory",
+ "Please enter a valid time span" : "Érvényes időtartamot adjon meg",
+ "Files WebDAV" : "WebDAV-fájlok",
+ "Custom URL" : "Egyéni URL",
+ "Select a request URL" : "Válassza ki a kérés URL-jét",
+ "Android client" : "Android kliens",
+ "iOS client" : "iOS klens",
+ "Desktop client" : "Asztali kliens",
+ "Thunderbird & Outlook addons" : "Thunderbird és Outlook kiegészítők",
+ "Custom user agent" : "Egyéni felhasználói ügynök",
+ "Select a user agent" : "Válasszon felhasználói ügynököt",
+ "Select groups" : "Csoportok kiválasztása",
+ "Groups" : "Csoportok",
+ "Type to search for group …" : "Gépeljen az csoport kereséséhez…",
+ "Select a trigger" : "Válasszon feltételt",
+ "At least one event must be selected" : "Legalább egy eseményt ki kell választani",
+ "Add new flow" : "Új folyamat hozzáadása",
+ "The configuration is invalid" : "A konfiguráció érvénytelen",
+ "Active" : "Aktív",
+ "Save" : "Mentés",
+ "When" : "Mikor",
+ "and" : "és",
+ "Add a new filter" : "Új szűrő hozzáadása",
+ "Cancel" : "Mégse",
+ "Delete" : "Törlés",
+ "Available flows" : "Rendelkezésre álló folyamatok",
+ "For details on how to write your own flow, check out the development documentation." : "A saját folyamatának megírásának részleteiért lásd a fejlesztési dokumentációt.",
+ "No flows installed" : "Nincsenek telepített folyamatok",
+ "Ask your administrator to install new flows." : "Kérje meg a rendszergazdát, hogy telepítsen új folyamatokat.",
+ "More flows" : "Több folyamat",
+ "Browse the App Store" : "Alkalmazástár böngészése",
+ "Show less" : "Kevesebb megjelenítése",
+ "Show more" : "Több megjelenítése",
+ "Configured flows" : "Beállított folyamatok",
+ "Your flows" : "Az Ön folyamatai",
+ "No flows configured" : "Nincsenek beállított folyamatok",
"matches" : "egyezik",
"does not match" : "nem egyezik",
- "Example: {placeholder}" : "Például: {placeholder}",
- "File size (upload)" : "Fájl méret (feltöltés)",
+ "is" : "ez",
+ "is not" : "nem ez",
+ "File name" : "Fájlnév",
+ "File MIME type" : "Fájl MIME-típusa",
+ "File size (upload)" : "Fájlméret (feltöltés)",
"less" : "kisebb",
"less or equals" : "kisebb vagy egyenlő",
"greater or equals" : "nagyobb vagy egyenlő",
"greater" : "nagyobb",
- "File system tag" : "Fájlrendszer címke",
- "is tagged with" : "címkézve ezzel",
- "is not tagged with" : "nem címkézve ezzel",
- "Select tag…" : "Címke választás...",
- "Request remote address" : "Távoli cím kérés",
+ "Request remote address" : "Távoli cím kérése",
"matches IPv4" : "IPv4 egyezik",
"does not match IPv4" : "IPv4 nem egyezik",
"matches IPv6" : "IPv6 egyezik",
"does not match IPv6" : "IPv6 nem egyezik",
- "Request time" : "Idő kérés",
+ "File system tag" : "Fájlrendszercímke",
+ "is tagged with" : "címkézve ezzel",
+ "is not tagged with" : "nincs címkézve ezzel",
+ "Request URL" : "Kérés URL-je",
+ "Request time" : "Kérés ideje",
"between" : "közötte",
"not between" : "nincs közötte",
- "Start" : "Kezdet",
- "End" : "Vég",
- "Select timezone…" : "Időzóna választás...",
- "Request URL" : "URL kérés",
- "Predefined URLs" : "Elődefiniált URL-ek",
- "Files WebDAV" : "WebDAV fálok",
- "Request user agent" : "Böngésző kérés",
- "Sync clients" : "Szinkron kliensek",
- "Android client" : "Android kliens",
- "iOS client" : "iOS klens",
- "Desktop client" : "Asztali kliens",
- "User group membership" : "Felhasználói csoport tagság",
+ "Request user agent" : "Kérés felhasználói ügynöke",
+ "Group membership" : "Csoporttagság",
"is member of" : "tagja ennek",
- "is not member of" : "nem tagja ennek",
- "The given operator is invalid" : "A megadott operátor érvénytelen",
- "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
- "The given file size is invalid" : "A megadott fájlméret érvénytelen",
- "The given tag id is invalid" : "A megadott címe azonosító érvénytelen",
- "The given IP range is invalid" : "A megadott IP tartomány érvénytelen",
- "The given IP range is not valid for IPv4" : "A megadott IPv4 tartomány nem érvényes",
- "The given IP range is not valid for IPv6" : "A megadott IPv6 tartomány nem érvényes",
- "The given time span is invalid" : "A megadott időtartam nem érvényes",
- "The given start time is invalid" : "A megadott kezdő idő nem érvényes",
- "The given end time is invalid" : "A megadott vég idő nem érvényes",
- "The given group does not exist" : "A megadott csoport nem létezik",
- "Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
- "Operation #%s does not exist" : "#%s művelet nem létezik",
- "Operation %s does not exist" : "%s művelet nem létezik",
- "Operation %s is invalid" : "#%s művelet érvénytelen",
- "Check %s does not exist" : "%s nem létezik, ellenőrizd",
- "Check %s is invalid" : "%s érvénytelen, ellenőrizd",
- "Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
- "Workflow" : "Munkafolyamat",
- "Open documentation" : "Dokumentáció megnyitása",
- "Add rule group" : "Szabály csoport hozzáadás",
- "Short rule description" : "A szabály rövid leírása",
- "Add rule" : "Szabály hozzáadás",
- "Reset" : "Visszaállítás",
- "Save" : "Mentés",
- "Saving…" : "Mentés...",
- "Loading…" : "Betöltés...",
- "Successfully saved" : "Sikeresen mentve",
- "File mime type" : "Fájl mime típus"
+ "is not member of" : "nem tagja ennek"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/hu.json b/apps/workflowengine/l10n/hu.json
index 94da5a4a06c..b0b0ccee6a4 100644
--- a/apps/workflowengine/l10n/hu.json
+++ b/apps/workflowengine/l10n/hu.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "Elmentve",
- "Saving failed:" : "Mentés sikertelen:",
- "File MIME type" : "Fájl MIME típus",
- "is" : "ez",
- "is not" : "nem ez",
+ "The given operator is invalid" : "A megadott operátor érvénytelen",
+ "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
+ "The given file size is invalid" : "A megadott fájlméret érvénytelen",
+ "The given tag id is invalid" : "A megadott címkeazonosító érvénytelen",
+ "The given IP range is invalid" : "A megadott IP-tartomány érvénytelen",
+ "The given IP range is not valid for IPv4" : "A megadott IPv4-tartomány érvénytelen",
+ "The given IP range is not valid for IPv6" : "A megadott IPv6-tartomány érvénytelen",
+ "The given time span is invalid" : "A megadott időtartam érvénytelen",
+ "The given start time is invalid" : "A megadott kezdési idő érvénytelen",
+ "The given end time is invalid" : "A megadott befejezési idő érvénytelen",
+ "The given group does not exist" : "A megadott csoport nem létezik",
+ "File" : "Fájl",
+ "File created" : "A fájl létrehozva",
+ "File updated" : "A fájl frissítve",
+ "File renamed" : "A fájl átnevezve",
+ "File deleted" : "A fájl törölve",
+ "File accessed" : "Hozzáférés a fájlhoz",
+ "File copied" : "A fájl másolva",
+ "Tag assigned" : "Címke hozzárendelve",
+ "Someone" : "Valaki",
+ "%s created %s" : "%s létrehozta a következőt: %s",
+ "%s modified %s" : "%s módosította a következőt: %s",
+ "%s deleted %s" : "%s törölte a következőt: %s",
+ "%s accessed %s" : "%s hozzáfért a következőhöz: %s",
+ "%s renamed %s" : "%s átnevezte a következőt: %s",
+ "%s copied %s" : "%s átmásolta a következőt: %s",
+ "%s assigned %s to %s" : "%s hozzárendelte a következőt: %s, hozzá: %s",
+ "Operation #%s does not exist" : "A(z) #%s művelet nem létezik",
+ "Entity %s does not exist" : "A(z) %s entitás nem létezik",
+ "Entity %s is invalid" : "A(z) %s entitás érvénytelen",
+ "No events are chosen." : "Nincs kiválasztva esemény.",
+ "Entity %s has no event %s" : "A(z) %s entitásnak nincs eseménye %s",
+ "Operation %s does not exist" : "A(z) %s művelet nem létezik",
+ "Operation %s is invalid" : "A(z) #%s művelet érvénytelen",
+ "At least one check needs to be provided" : "Legalább egy ellenőrzést meg kell adni",
+ "The provided operation data is too long" : "A megadott műveleti adatok túl hosszúak",
+ "Invalid check provided" : "Érvénytelen ellenőrzést adott meg",
+ "Check %s does not exist" : "A(z) %s nem létezik, ellenőrizze",
+ "Check %s is invalid" : "A(z) %s érvénytelen, ellenőrizze",
+ "Check %s is not allowed with this entity" : "A(z) %s ellenőrzés nem engedélyezett ezzel az entitással",
+ "The provided check value is too long" : "A megadott ellenőrzési érték túl hosszú",
+ "Check #%s does not exist" : "A(z) #%s nem létezik, ellenőrizze",
+ "Check %s is invalid or does not exist" : "A(z) %s érvénytelen vagy nem létezik, ellenőrizze",
+ "Flow" : "Folyamat",
+ "Nextcloud workflow engine" : "Nextcloud munkafolyamat-motor",
+ "Select a filter" : "Válasszon szűrőt",
+ "Select a comparator" : "Válasszon összehasonlítót",
+ "Remove filter" : "Szűrő eltávolítása",
+ "Folder" : "Mappa",
+ "Images" : "Képek",
+ "Office documents" : "Irodai dokumentumok",
+ "PDF documents" : "PDF-dokumentumok",
+ "Custom MIME type" : "Egyéni MIME-típus",
+ "Custom mimetype" : "Egyéni MIME-típus",
+ "Select a file type" : "Válasszon fájltípust",
+ "e.g. httpd/unix-directory" : "például httpd/unix-directory",
+ "Please enter a valid time span" : "Érvényes időtartamot adjon meg",
+ "Files WebDAV" : "WebDAV-fájlok",
+ "Custom URL" : "Egyéni URL",
+ "Select a request URL" : "Válassza ki a kérés URL-jét",
+ "Android client" : "Android kliens",
+ "iOS client" : "iOS klens",
+ "Desktop client" : "Asztali kliens",
+ "Thunderbird & Outlook addons" : "Thunderbird és Outlook kiegészítők",
+ "Custom user agent" : "Egyéni felhasználói ügynök",
+ "Select a user agent" : "Válasszon felhasználói ügynököt",
+ "Select groups" : "Csoportok kiválasztása",
+ "Groups" : "Csoportok",
+ "Type to search for group …" : "Gépeljen az csoport kereséséhez…",
+ "Select a trigger" : "Válasszon feltételt",
+ "At least one event must be selected" : "Legalább egy eseményt ki kell választani",
+ "Add new flow" : "Új folyamat hozzáadása",
+ "The configuration is invalid" : "A konfiguráció érvénytelen",
+ "Active" : "Aktív",
+ "Save" : "Mentés",
+ "When" : "Mikor",
+ "and" : "és",
+ "Add a new filter" : "Új szűrő hozzáadása",
+ "Cancel" : "Mégse",
+ "Delete" : "Törlés",
+ "Available flows" : "Rendelkezésre álló folyamatok",
+ "For details on how to write your own flow, check out the development documentation." : "A saját folyamatának megírásának részleteiért lásd a fejlesztési dokumentációt.",
+ "No flows installed" : "Nincsenek telepített folyamatok",
+ "Ask your administrator to install new flows." : "Kérje meg a rendszergazdát, hogy telepítsen új folyamatokat.",
+ "More flows" : "Több folyamat",
+ "Browse the App Store" : "Alkalmazástár böngészése",
+ "Show less" : "Kevesebb megjelenítése",
+ "Show more" : "Több megjelenítése",
+ "Configured flows" : "Beállított folyamatok",
+ "Your flows" : "Az Ön folyamatai",
+ "No flows configured" : "Nincsenek beállított folyamatok",
"matches" : "egyezik",
"does not match" : "nem egyezik",
- "Example: {placeholder}" : "Például: {placeholder}",
- "File size (upload)" : "Fájl méret (feltöltés)",
+ "is" : "ez",
+ "is not" : "nem ez",
+ "File name" : "Fájlnév",
+ "File MIME type" : "Fájl MIME-típusa",
+ "File size (upload)" : "Fájlméret (feltöltés)",
"less" : "kisebb",
"less or equals" : "kisebb vagy egyenlő",
"greater or equals" : "nagyobb vagy egyenlő",
"greater" : "nagyobb",
- "File system tag" : "Fájlrendszer címke",
- "is tagged with" : "címkézve ezzel",
- "is not tagged with" : "nem címkézve ezzel",
- "Select tag…" : "Címke választás...",
- "Request remote address" : "Távoli cím kérés",
+ "Request remote address" : "Távoli cím kérése",
"matches IPv4" : "IPv4 egyezik",
"does not match IPv4" : "IPv4 nem egyezik",
"matches IPv6" : "IPv6 egyezik",
"does not match IPv6" : "IPv6 nem egyezik",
- "Request time" : "Idő kérés",
+ "File system tag" : "Fájlrendszercímke",
+ "is tagged with" : "címkézve ezzel",
+ "is not tagged with" : "nincs címkézve ezzel",
+ "Request URL" : "Kérés URL-je",
+ "Request time" : "Kérés ideje",
"between" : "közötte",
"not between" : "nincs közötte",
- "Start" : "Kezdet",
- "End" : "Vég",
- "Select timezone…" : "Időzóna választás...",
- "Request URL" : "URL kérés",
- "Predefined URLs" : "Elődefiniált URL-ek",
- "Files WebDAV" : "WebDAV fálok",
- "Request user agent" : "Böngésző kérés",
- "Sync clients" : "Szinkron kliensek",
- "Android client" : "Android kliens",
- "iOS client" : "iOS klens",
- "Desktop client" : "Asztali kliens",
- "User group membership" : "Felhasználói csoport tagság",
+ "Request user agent" : "Kérés felhasználói ügynöke",
+ "Group membership" : "Csoporttagság",
"is member of" : "tagja ennek",
- "is not member of" : "nem tagja ennek",
- "The given operator is invalid" : "A megadott operátor érvénytelen",
- "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
- "The given file size is invalid" : "A megadott fájlméret érvénytelen",
- "The given tag id is invalid" : "A megadott címe azonosító érvénytelen",
- "The given IP range is invalid" : "A megadott IP tartomány érvénytelen",
- "The given IP range is not valid for IPv4" : "A megadott IPv4 tartomány nem érvényes",
- "The given IP range is not valid for IPv6" : "A megadott IPv6 tartomány nem érvényes",
- "The given time span is invalid" : "A megadott időtartam nem érvényes",
- "The given start time is invalid" : "A megadott kezdő idő nem érvényes",
- "The given end time is invalid" : "A megadott vég idő nem érvényes",
- "The given group does not exist" : "A megadott csoport nem létezik",
- "Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
- "Operation #%s does not exist" : "#%s művelet nem létezik",
- "Operation %s does not exist" : "%s művelet nem létezik",
- "Operation %s is invalid" : "#%s művelet érvénytelen",
- "Check %s does not exist" : "%s nem létezik, ellenőrizd",
- "Check %s is invalid" : "%s érvénytelen, ellenőrizd",
- "Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
- "Workflow" : "Munkafolyamat",
- "Open documentation" : "Dokumentáció megnyitása",
- "Add rule group" : "Szabály csoport hozzáadás",
- "Short rule description" : "A szabály rövid leírása",
- "Add rule" : "Szabály hozzáadás",
- "Reset" : "Visszaállítás",
- "Save" : "Mentés",
- "Saving…" : "Mentés...",
- "Loading…" : "Betöltés...",
- "Successfully saved" : "Sikeresen mentve",
- "File mime type" : "Fájl mime típus"
+ "is not member of" : "nem tagja ennek"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/hu_HU.js b/apps/workflowengine/l10n/hu_HU.js
deleted file mode 100644
index b1d92e87617..00000000000
--- a/apps/workflowengine/l10n/hu_HU.js
+++ /dev/null
@@ -1,71 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Successfully saved" : "Sikeresen mentve",
- "Saving failed:" : "Mentés sikertelen:",
- "File mime type" : "Fájl mime típus",
- "is" : "ez",
- "is not" : "nem ez",
- "matches" : "egyezik",
- "does not match" : "nem egyezik",
- "Example: {placeholder}" : "Például: {placeholder}",
- "File size (upload)" : "Fájl méret (feltöltés)",
- "less" : "kisebb",
- "less or equals" : "kisebb vagy egyenlő",
- "greater or equals" : "nagyobb vagy egyenlő",
- "greater" : "nagyobb",
- "File system tag" : "Fájlrendszer címke",
- "is tagged with" : "címkézve ezzel",
- "is not tagged with" : "nem címkézve ezzel",
- "Select tag…" : "Címke választás...",
- "Request remote address" : "Távoli cím kérés",
- "matches IPv4" : "IPv4 egyezik",
- "does not match IPv4" : "IPv4 nem egyezik",
- "matches IPv6" : "IPv6 egyezik",
- "does not match IPv6" : "IPv6 nem egyezik",
- "Request time" : "Idő kérés",
- "between" : "közötte",
- "not between" : "nincs közötte",
- "Start" : "Kezdet",
- "End" : "Vég",
- "Select timezone…" : "Időzóna választás...",
- "Request URL" : "URL kérés",
- "Predefined URLs" : "Elődefiniált URL-ek",
- "Files WebDAV" : "WebDAV fálok",
- "Request user agent" : "Böngésző kérés",
- "Sync clients" : "Szinkron kliensek",
- "Android client" : "Android kliens",
- "iOS client" : "iOS klens",
- "Desktop client" : "Asztali kliens",
- "User group membership" : "Felhasználói csoport tagság",
- "is member of" : "tagja ennek",
- "is not member of" : "nem tagja ennek",
- "The given operator is invalid" : "A megadott operátor érvénytelen",
- "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
- "The given file size is invalid" : "A megadott fájlméret érvénytelen",
- "The given tag id is invalid" : "A megadott címe azonosító érvénytelen",
- "The given IP range is invalid" : "A megadott IP tartomány érvénytelen",
- "The given IP range is not valid for IPv4" : "A megadott IPv4 tartomány nem érvényes",
- "The given IP range is not valid for IPv6" : "A megadott IPv6 tartomány nem érvényes",
- "The given time span is invalid" : "A megadott időtartam nem érvényes",
- "The given start time is invalid" : "A megadott kezdő idő nem érvényes",
- "The given end time is invalid" : "A megadott vég idő nem érvényes",
- "The given group does not exist" : "A megadott csoport nem létezik",
- "Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
- "Operation #%s does not exist" : "#%s művelet nem létezik",
- "Operation %s does not exist" : "%s művelet nem létezik",
- "Operation %s is invalid" : "#%s művelet érvénytelen",
- "Check %s does not exist" : "%s nem létezik, ellenőrizd",
- "Check %s is invalid" : "%s érvénytelen, ellenőrizd",
- "Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
- "Workflow" : "Munkafolyamat",
- "Open documentation" : "Dokumentáció megnyitása",
- "Add rule group" : "Szabály csoport hozzáadás",
- "Short rule description" : "A szabály rövid leírása",
- "Add rule" : "Szabály hozzáadás",
- "Reset" : "Visszaállítás",
- "Save" : "Mentés",
- "Saving…" : "Mentés...",
- "Loading…" : "Betöltés..."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/hu_HU.json b/apps/workflowengine/l10n/hu_HU.json
deleted file mode 100644
index 9b8755a118e..00000000000
--- a/apps/workflowengine/l10n/hu_HU.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{ "translations": {
- "Successfully saved" : "Sikeresen mentve",
- "Saving failed:" : "Mentés sikertelen:",
- "File mime type" : "Fájl mime típus",
- "is" : "ez",
- "is not" : "nem ez",
- "matches" : "egyezik",
- "does not match" : "nem egyezik",
- "Example: {placeholder}" : "Például: {placeholder}",
- "File size (upload)" : "Fájl méret (feltöltés)",
- "less" : "kisebb",
- "less or equals" : "kisebb vagy egyenlő",
- "greater or equals" : "nagyobb vagy egyenlő",
- "greater" : "nagyobb",
- "File system tag" : "Fájlrendszer címke",
- "is tagged with" : "címkézve ezzel",
- "is not tagged with" : "nem címkézve ezzel",
- "Select tag…" : "Címke választás...",
- "Request remote address" : "Távoli cím kérés",
- "matches IPv4" : "IPv4 egyezik",
- "does not match IPv4" : "IPv4 nem egyezik",
- "matches IPv6" : "IPv6 egyezik",
- "does not match IPv6" : "IPv6 nem egyezik",
- "Request time" : "Idő kérés",
- "between" : "közötte",
- "not between" : "nincs közötte",
- "Start" : "Kezdet",
- "End" : "Vég",
- "Select timezone…" : "Időzóna választás...",
- "Request URL" : "URL kérés",
- "Predefined URLs" : "Elődefiniált URL-ek",
- "Files WebDAV" : "WebDAV fálok",
- "Request user agent" : "Böngésző kérés",
- "Sync clients" : "Szinkron kliensek",
- "Android client" : "Android kliens",
- "iOS client" : "iOS klens",
- "Desktop client" : "Asztali kliens",
- "User group membership" : "Felhasználói csoport tagság",
- "is member of" : "tagja ennek",
- "is not member of" : "nem tagja ennek",
- "The given operator is invalid" : "A megadott operátor érvénytelen",
- "The given regular expression is invalid" : "A megadott reguláris kifejezés érvénytelen",
- "The given file size is invalid" : "A megadott fájlméret érvénytelen",
- "The given tag id is invalid" : "A megadott címe azonosító érvénytelen",
- "The given IP range is invalid" : "A megadott IP tartomány érvénytelen",
- "The given IP range is not valid for IPv4" : "A megadott IPv4 tartomány nem érvényes",
- "The given IP range is not valid for IPv6" : "A megadott IPv6 tartomány nem érvényes",
- "The given time span is invalid" : "A megadott időtartam nem érvényes",
- "The given start time is invalid" : "A megadott kezdő idő nem érvényes",
- "The given end time is invalid" : "A megadott vég idő nem érvényes",
- "The given group does not exist" : "A megadott csoport nem létezik",
- "Check %s is invalid or does not exist" : "%s érvénytelen vagy nem létezik, ellenőrizd",
- "Operation #%s does not exist" : "#%s művelet nem létezik",
- "Operation %s does not exist" : "%s művelet nem létezik",
- "Operation %s is invalid" : "#%s művelet érvénytelen",
- "Check %s does not exist" : "%s nem létezik, ellenőrizd",
- "Check %s is invalid" : "%s érvénytelen, ellenőrizd",
- "Check #%s does not exist" : "#%s nem létezik, ellenőrizd",
- "Workflow" : "Munkafolyamat",
- "Open documentation" : "Dokumentáció megnyitása",
- "Add rule group" : "Szabály csoport hozzáadás",
- "Short rule description" : "A szabály rövid leírása",
- "Add rule" : "Szabály hozzáadás",
- "Reset" : "Visszaállítás",
- "Save" : "Mentés",
- "Saving…" : "Mentés...",
- "Loading…" : "Betöltés..."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/id.js b/apps/workflowengine/l10n/id.js
deleted file mode 100644
index 2e22dd57a98..00000000000
--- a/apps/workflowengine/l10n/id.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Disimpan",
- "Saving failed:" : "Penyimpanan gagal:",
- "File MIME type" : "Berkas tipe MIME",
- "is" : "adalah",
- "is not" : "bukan",
- "matches" : "cocok dengan",
- "does not match" : "tidak cocok dengan",
- "Example: {placeholder}" : "Contoh: {placeholder}",
- "File size (upload)" : "Ukuran berkas (unggah)",
- "less" : "kurang dari",
- "less or equals" : "kurang dari atau sama dengan",
- "greater or equals" : "lebih dari atau sama dengan",
- "greater" : "lebih dari",
- "File system tag" : "Tag sistem berkas",
- "is tagged with" : "di tag dengan",
- "is not tagged with" : "tidak di tag dengan",
- "Select tag…" : "Pilih tag...",
- "Request remote address" : "Minta alamat remote",
- "matches IPv4" : "cocok dengan IPv4",
- "does not match IPv4" : "tidak cocok dengan IPv4",
- "matches IPv6" : "cocok dengan IPv6",
- "does not match IPv6" : "tidak cocok dengan IPv6",
- "Request time" : "Waktu permintaan",
- "between" : "diantara",
- "not between" : "tidak diantara",
- "Start" : "Mulai",
- "End" : "Selesai",
- "Select timezone…" : "Pilih zona waktu...",
- "Request URL" : "Minta URL",
- "Predefined URLs" : "URL terdefinisi",
- "Files WebDAV" : "Berkas WebDAV",
- "Request user agent" : "Minta user agent",
- "Sync clients" : "Klien sync",
- "Android client" : "Klien Android",
- "iOS client" : "Klien iOS",
- "Desktop client" : "Klien desktop",
- "User group membership" : "Keanggotaan grup pengguna",
- "is member of" : "anggota dari",
- "is not member of" : "bukan anggota dari",
- "The given operator is invalid" : "Operator yang diberikan tidak sah",
- "The given regular expression is invalid" : "Regular expression yang diberikan tidak sah",
- "The given file size is invalid" : "Ukuran berkas yang diberikan tidak sah",
- "The given tag id is invalid" : "Tag ID yang diberikan tidak sah",
- "The given IP range is invalid" : "Rentang IP yang diberikan tidak sah",
- "The given IP range is not valid for IPv4" : "Rentang IP yang diberikan tidak sah untuk IPv4",
- "The given IP range is not valid for IPv6" : "Rentang IP yang diberikan tidak sah untuk IPv6",
- "The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
- "The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
- "The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada",
- "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
- "Operation #%s does not exist" : "Operasi #%s tidak ada",
- "Operation %s does not exist" : "Operasi %s tidak ada",
- "Operation %s is invalid" : "Operasi %s tidak valid",
- "Check %s does not exist" : "Cek %s tidak ada",
- "Check %s is invalid" : "Cek %s tidak valid",
- "Check #%s does not exist" : "Cek #%s tidak ada",
- "Workflow" : "Alur kerja",
- "Open documentation" : "Buka dokumentasi",
- "Add rule group" : "Tambahkan aturan grup ",
- "Short rule description" : "Deskripsi aturan singkat",
- "Add rule" : "Tambahkan aturan",
- "Reset" : "Setel ulang",
- "Save" : "Simpan",
- "Saving…" : "Menyimpan...",
- "Loading…" : "Memuat...",
- "Successfully saved" : "Berhasil disimpan",
- "File mime type" : "Tipe MIME berkas"
-},
-"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/id.json b/apps/workflowengine/l10n/id.json
deleted file mode 100644
index 319caa1ba6e..00000000000
--- a/apps/workflowengine/l10n/id.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "Disimpan",
- "Saving failed:" : "Penyimpanan gagal:",
- "File MIME type" : "Berkas tipe MIME",
- "is" : "adalah",
- "is not" : "bukan",
- "matches" : "cocok dengan",
- "does not match" : "tidak cocok dengan",
- "Example: {placeholder}" : "Contoh: {placeholder}",
- "File size (upload)" : "Ukuran berkas (unggah)",
- "less" : "kurang dari",
- "less or equals" : "kurang dari atau sama dengan",
- "greater or equals" : "lebih dari atau sama dengan",
- "greater" : "lebih dari",
- "File system tag" : "Tag sistem berkas",
- "is tagged with" : "di tag dengan",
- "is not tagged with" : "tidak di tag dengan",
- "Select tag…" : "Pilih tag...",
- "Request remote address" : "Minta alamat remote",
- "matches IPv4" : "cocok dengan IPv4",
- "does not match IPv4" : "tidak cocok dengan IPv4",
- "matches IPv6" : "cocok dengan IPv6",
- "does not match IPv6" : "tidak cocok dengan IPv6",
- "Request time" : "Waktu permintaan",
- "between" : "diantara",
- "not between" : "tidak diantara",
- "Start" : "Mulai",
- "End" : "Selesai",
- "Select timezone…" : "Pilih zona waktu...",
- "Request URL" : "Minta URL",
- "Predefined URLs" : "URL terdefinisi",
- "Files WebDAV" : "Berkas WebDAV",
- "Request user agent" : "Minta user agent",
- "Sync clients" : "Klien sync",
- "Android client" : "Klien Android",
- "iOS client" : "Klien iOS",
- "Desktop client" : "Klien desktop",
- "User group membership" : "Keanggotaan grup pengguna",
- "is member of" : "anggota dari",
- "is not member of" : "bukan anggota dari",
- "The given operator is invalid" : "Operator yang diberikan tidak sah",
- "The given regular expression is invalid" : "Regular expression yang diberikan tidak sah",
- "The given file size is invalid" : "Ukuran berkas yang diberikan tidak sah",
- "The given tag id is invalid" : "Tag ID yang diberikan tidak sah",
- "The given IP range is invalid" : "Rentang IP yang diberikan tidak sah",
- "The given IP range is not valid for IPv4" : "Rentang IP yang diberikan tidak sah untuk IPv4",
- "The given IP range is not valid for IPv6" : "Rentang IP yang diberikan tidak sah untuk IPv6",
- "The given time span is invalid" : "Rentang waktu yang diberikan tidak sah",
- "The given start time is invalid" : "Waktu mulai yang diberikan tidak sah",
- "The given end time is invalid" : "Waktu selesai yang diberikan tidak sah",
- "The given group does not exist" : "Grup yang diberikan tidak ada",
- "Check %s is invalid or does not exist" : "Cek %s tidak valid atau tidak ada",
- "Operation #%s does not exist" : "Operasi #%s tidak ada",
- "Operation %s does not exist" : "Operasi %s tidak ada",
- "Operation %s is invalid" : "Operasi %s tidak valid",
- "Check %s does not exist" : "Cek %s tidak ada",
- "Check %s is invalid" : "Cek %s tidak valid",
- "Check #%s does not exist" : "Cek #%s tidak ada",
- "Workflow" : "Alur kerja",
- "Open documentation" : "Buka dokumentasi",
- "Add rule group" : "Tambahkan aturan grup ",
- "Short rule description" : "Deskripsi aturan singkat",
- "Add rule" : "Tambahkan aturan",
- "Reset" : "Setel ulang",
- "Save" : "Simpan",
- "Saving…" : "Menyimpan...",
- "Loading…" : "Memuat...",
- "Successfully saved" : "Berhasil disimpan",
- "File mime type" : "Tipe MIME berkas"
-},"pluralForm" :"nplurals=1; plural=0;"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/is.js b/apps/workflowengine/l10n/is.js
index bd58e51965c..f7fcd35e233 100644
--- a/apps/workflowengine/l10n/is.js
+++ b/apps/workflowengine/l10n/is.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Vistað",
- "Saving failed:" : "Vistun mistókst:",
- "File MIME type" : "MIME-skráartegund",
- "is" : "er",
- "is not" : "er ekki",
- "matches" : "samsvarar",
- "does not match" : "samsvarar ekki",
- "Example: {placeholder}" : "Dæmi: {placeholder}",
- "File size (upload)" : "Skráarstærð (innsending)",
- "less" : "minna en",
- "less or equals" : "minna eða jafnt",
- "greater or equals" : "stærra eða jafnt",
- "greater" : "meira en",
- "File system tag" : "Skráakerfismerki",
- "is tagged with" : "er merkt með",
- "is not tagged with" : "er ekki merkt með",
- "Select tag…" : "Veldu merki...",
- "Request remote address" : "Biðja um fjartengt vistfang",
- "matches IPv4" : "samsvarar IPv4",
- "does not match IPv4" : "samsvarar ekki IPv4",
- "matches IPv6" : "samsvarar IPv6",
- "does not match IPv6" : "samsvarar ekki IPv6",
- "Request time" : "Tími beiðnar",
- "between" : "á milli",
- "not between" : "er ekki á milli",
- "Start" : "Byrjun",
- "End" : "Endar",
- "Select timezone…" : "Veldu tímabelti…",
- "Request URL" : "Slóð á beiðni",
- "Predefined URLs" : "Forákvarðaðar slóðir",
- "Files WebDAV" : "WebDAV skráa",
- "Request user agent" : "Biðja um notandaforrit",
- "Sync clients" : "Samstilla biðlara",
- "Android client" : "Android-biðlari",
- "iOS client" : "iOS-biðlari",
- "Desktop client" : "Skjáborðsforrit",
- "User group membership" : "Notandi er meðlimur í hópum",
- "is member of" : "er meðlimur í ",
- "is not member of" : "er ekki meðlimur í",
"The given operator is invalid" : "Uppgefinn virki er ógildur",
"The given regular expression is invalid" : "Uppgefin regluleg segð er ógild",
"The given file size is invalid" : "Uppgefin stærð er ógild",
@@ -51,23 +12,62 @@ OC.L10N.register(
"The given start time is invalid" : "Uppgefinn upphafstími er ógildur",
"The given end time is invalid" : "Uppgefinn lokatími er ógildur",
"The given group does not exist" : "Uppgefinn hópur er ekki til",
- "Check %s is invalid or does not exist" : "Athugunin %s er ógild eða er ekki til",
+ "File" : "Skrá",
"Operation #%s does not exist" : "Aðgerðin #%s er ekki til",
"Operation %s does not exist" : "Aðgerðin %s er ekki til",
"Operation %s is invalid" : "Aðgerðin %s er ógild",
"Check %s does not exist" : "Athugunin %s er ekki til",
"Check %s is invalid" : "Athugunin %s er ógild",
"Check #%s does not exist" : "Athugunin #%s er ekki til",
- "Workflow" : "Vinnuferli",
- "Open documentation" : "Opna hjálparskjöl",
- "Add rule group" : "Bæta við regluhópi",
- "Short rule description" : "Stutt lýsing á reglu",
- "Add rule" : "Bæta við reglu",
- "Reset" : "Endurstilla",
+ "Check %s is invalid or does not exist" : "Athugunin %s er ógild eða er ekki til",
+ "Flow" : "Flæði",
+ "Remove filter" : "Fjarlægja síu",
+ "Folder" : "Mappa",
+ "Images" : "Myndir",
+ "Files WebDAV" : "WebDAV skráa",
+ "Android client" : "Android-biðlari",
+ "iOS client" : "iOS-biðlari",
+ "Desktop client" : "Skjáborðsforrit",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook viðbætur",
+ "Select groups" : "Veldu hópa",
+ "Groups" : "Hópar",
+ "Add new flow" : "Bæta við nýju flæði",
+ "Active" : "Virkt",
"Save" : "Vista",
- "Saving…" : "Vista…",
- "Loading…" : "Hleð inn...",
- "Successfully saved" : "Tókst að vista",
- "File mime type" : "Skráartegund"
+ "Cancel" : "Hætta við",
+ "Delete" : "Eyða",
+ "Available flows" : "Tiltæk flæði",
+ "More flows" : "Fleiri flæði",
+ "Browse the App Store" : "Flakka um forritasafnið",
+ "Show less" : "Birta minna",
+ "Show more" : "Birta meira",
+ "Configured flows" : "Uppsett flæði",
+ "Your flows" : "Flæðin þín",
+ "matches" : "samsvarar",
+ "does not match" : "samsvarar ekki",
+ "is" : "er",
+ "is not" : "er ekki",
+ "File name" : "Skráarheiti",
+ "File MIME type" : "MIME-skráartegund",
+ "File size (upload)" : "Skráarstærð (innsending)",
+ "less" : "minna en",
+ "less or equals" : "minna eða jafnt",
+ "greater or equals" : "stærra eða jafnt",
+ "greater" : "meira en",
+ "Request remote address" : "Biðja um fjartengt vistfang",
+ "matches IPv4" : "samsvarar IPv4",
+ "does not match IPv4" : "samsvarar ekki IPv4",
+ "matches IPv6" : "samsvarar IPv6",
+ "does not match IPv6" : "samsvarar ekki IPv6",
+ "File system tag" : "Skráakerfismerki",
+ "is tagged with" : "er merkt með",
+ "is not tagged with" : "er ekki merkt með",
+ "Request URL" : "Slóð á beiðni",
+ "Request time" : "Tími beiðnar",
+ "between" : "á milli",
+ "not between" : "er ekki á milli",
+ "Request user agent" : "Biðja um notandaforrit",
+ "is member of" : "er meðlimur í ",
+ "is not member of" : "er ekki meðlimur í"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");
diff --git a/apps/workflowengine/l10n/is.json b/apps/workflowengine/l10n/is.json
index 3dd3ee9304b..bfb8d269725 100644
--- a/apps/workflowengine/l10n/is.json
+++ b/apps/workflowengine/l10n/is.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Vistað",
- "Saving failed:" : "Vistun mistókst:",
- "File MIME type" : "MIME-skráartegund",
- "is" : "er",
- "is not" : "er ekki",
- "matches" : "samsvarar",
- "does not match" : "samsvarar ekki",
- "Example: {placeholder}" : "Dæmi: {placeholder}",
- "File size (upload)" : "Skráarstærð (innsending)",
- "less" : "minna en",
- "less or equals" : "minna eða jafnt",
- "greater or equals" : "stærra eða jafnt",
- "greater" : "meira en",
- "File system tag" : "Skráakerfismerki",
- "is tagged with" : "er merkt með",
- "is not tagged with" : "er ekki merkt með",
- "Select tag…" : "Veldu merki...",
- "Request remote address" : "Biðja um fjartengt vistfang",
- "matches IPv4" : "samsvarar IPv4",
- "does not match IPv4" : "samsvarar ekki IPv4",
- "matches IPv6" : "samsvarar IPv6",
- "does not match IPv6" : "samsvarar ekki IPv6",
- "Request time" : "Tími beiðnar",
- "between" : "á milli",
- "not between" : "er ekki á milli",
- "Start" : "Byrjun",
- "End" : "Endar",
- "Select timezone…" : "Veldu tímabelti…",
- "Request URL" : "Slóð á beiðni",
- "Predefined URLs" : "Forákvarðaðar slóðir",
- "Files WebDAV" : "WebDAV skráa",
- "Request user agent" : "Biðja um notandaforrit",
- "Sync clients" : "Samstilla biðlara",
- "Android client" : "Android-biðlari",
- "iOS client" : "iOS-biðlari",
- "Desktop client" : "Skjáborðsforrit",
- "User group membership" : "Notandi er meðlimur í hópum",
- "is member of" : "er meðlimur í ",
- "is not member of" : "er ekki meðlimur í",
"The given operator is invalid" : "Uppgefinn virki er ógildur",
"The given regular expression is invalid" : "Uppgefin regluleg segð er ógild",
"The given file size is invalid" : "Uppgefin stærð er ógild",
@@ -49,23 +10,62 @@
"The given start time is invalid" : "Uppgefinn upphafstími er ógildur",
"The given end time is invalid" : "Uppgefinn lokatími er ógildur",
"The given group does not exist" : "Uppgefinn hópur er ekki til",
- "Check %s is invalid or does not exist" : "Athugunin %s er ógild eða er ekki til",
+ "File" : "Skrá",
"Operation #%s does not exist" : "Aðgerðin #%s er ekki til",
"Operation %s does not exist" : "Aðgerðin %s er ekki til",
"Operation %s is invalid" : "Aðgerðin %s er ógild",
"Check %s does not exist" : "Athugunin %s er ekki til",
"Check %s is invalid" : "Athugunin %s er ógild",
"Check #%s does not exist" : "Athugunin #%s er ekki til",
- "Workflow" : "Vinnuferli",
- "Open documentation" : "Opna hjálparskjöl",
- "Add rule group" : "Bæta við regluhópi",
- "Short rule description" : "Stutt lýsing á reglu",
- "Add rule" : "Bæta við reglu",
- "Reset" : "Endurstilla",
+ "Check %s is invalid or does not exist" : "Athugunin %s er ógild eða er ekki til",
+ "Flow" : "Flæði",
+ "Remove filter" : "Fjarlægja síu",
+ "Folder" : "Mappa",
+ "Images" : "Myndir",
+ "Files WebDAV" : "WebDAV skráa",
+ "Android client" : "Android-biðlari",
+ "iOS client" : "iOS-biðlari",
+ "Desktop client" : "Skjáborðsforrit",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook viðbætur",
+ "Select groups" : "Veldu hópa",
+ "Groups" : "Hópar",
+ "Add new flow" : "Bæta við nýju flæði",
+ "Active" : "Virkt",
"Save" : "Vista",
- "Saving…" : "Vista…",
- "Loading…" : "Hleð inn...",
- "Successfully saved" : "Tókst að vista",
- "File mime type" : "Skráartegund"
+ "Cancel" : "Hætta við",
+ "Delete" : "Eyða",
+ "Available flows" : "Tiltæk flæði",
+ "More flows" : "Fleiri flæði",
+ "Browse the App Store" : "Flakka um forritasafnið",
+ "Show less" : "Birta minna",
+ "Show more" : "Birta meira",
+ "Configured flows" : "Uppsett flæði",
+ "Your flows" : "Flæðin þín",
+ "matches" : "samsvarar",
+ "does not match" : "samsvarar ekki",
+ "is" : "er",
+ "is not" : "er ekki",
+ "File name" : "Skráarheiti",
+ "File MIME type" : "MIME-skráartegund",
+ "File size (upload)" : "Skráarstærð (innsending)",
+ "less" : "minna en",
+ "less or equals" : "minna eða jafnt",
+ "greater or equals" : "stærra eða jafnt",
+ "greater" : "meira en",
+ "Request remote address" : "Biðja um fjartengt vistfang",
+ "matches IPv4" : "samsvarar IPv4",
+ "does not match IPv4" : "samsvarar ekki IPv4",
+ "matches IPv6" : "samsvarar IPv6",
+ "does not match IPv6" : "samsvarar ekki IPv6",
+ "File system tag" : "Skráakerfismerki",
+ "is tagged with" : "er merkt með",
+ "is not tagged with" : "er ekki merkt með",
+ "Request URL" : "Slóð á beiðni",
+ "Request time" : "Tími beiðnar",
+ "between" : "á milli",
+ "not between" : "er ekki á milli",
+ "Request user agent" : "Biðja um notandaforrit",
+ "is member of" : "er meðlimur í ",
+ "is not member of" : "er ekki meðlimur í"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/it.js b/apps/workflowengine/l10n/it.js
index 86a912cdf9a..d07b059622a 100644
--- a/apps/workflowengine/l10n/it.js
+++ b/apps/workflowengine/l10n/it.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Salvato",
- "Saving failed:" : "Salvataggio non riuscito:",
- "File MIME type" : "Tipo MIME del file",
- "is" : "è",
- "is not" : "non è",
- "matches" : "corrisponde",
- "does not match" : "non corrisponde",
- "Example: {placeholder}" : "Esempio: {placeholder}",
- "File size (upload)" : "Dimensione file (caricamento)",
- "less" : "minore",
- "less or equals" : "minore o uguale",
- "greater or equals" : "maggiore o uguale",
- "greater" : "maggiore",
- "File system tag" : "Etichetta del file system",
- "is tagged with" : "è etichettato con",
- "is not tagged with" : "non è etichettato con",
- "Select tag…" : "Seleziona etichetta...",
- "Request remote address" : "Indirizzo remoto della richiesta",
- "matches IPv4" : "corrisponde a IPv4",
- "does not match IPv4" : "non corrisponde a IPv4",
- "matches IPv6" : "corrisponde a IPv6",
- "does not match IPv6" : "non corrisponde a IPv6",
- "Request time" : "Ora della richiesta",
- "between" : "compreso",
- "not between" : "non compreso",
- "Start" : "Inizio",
- "End" : "Fine",
- "Select timezone…" : "Seleziona fuso orario...",
- "Request URL" : "URL della richiesta",
- "Predefined URLs" : "URL predefiniti",
- "Files WebDAV" : "File WebDAV",
- "Request user agent" : "User agent della richiesta",
- "Sync clients" : "Client di sincronizzazione",
- "Android client" : "Client Android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client desktop",
- "User group membership" : "Appartenenza ai gruppi degli utenti",
- "is member of" : "è membro di",
- "is not member of" : "non è membro di",
"The given operator is invalid" : "L'operatore specificato non è valido",
"The given regular expression is invalid" : "L'espressione regolare specificata non è valida",
"The given file size is invalid" : "La dimensione del file specificata non è valida",
@@ -51,23 +12,109 @@ OC.L10N.register(
"The given start time is invalid" : "L'ora di inizio specificata non è valida",
"The given end time is invalid" : "L'ora di fine specificata non è valida",
"The given group does not exist" : "Il gruppo specificato non esiste",
- "Check %s is invalid or does not exist" : "Il controllo %s non è valido o non esiste",
+ "File" : "File",
+ "File created" : "File creato",
+ "File updated" : "File aggiornato",
+ "File renamed" : "File rinominato",
+ "File deleted" : "File eliminato",
+ "File accessed" : "File acceduto",
+ "File copied" : "File copiato",
+ "Tag assigned" : "Etichetta assegnata",
+ "Someone" : "Qualcuno",
+ "%s created %s" : "%s ha creato %s",
+ "%s modified %s" : "%s ha modificato %s",
+ "%s deleted %s" : "%s ha eliminato %s",
+ "%s accessed %s" : "%s ha eseguito l'accesso a %s",
+ "%s renamed %s" : "%s ha rinominato %s",
+ "%s copied %s" : "%s ha copiato %s",
+ "%s assigned %s to %s" : "%s ha assegnato %s a %s",
"Operation #%s does not exist" : "L'operazione #%s non esiste",
+ "Entity %s does not exist" : "L'entità %s non esiste",
+ "Entity %s is invalid" : "L'entità %s non è valida",
+ "No events are chosen." : "Nessun evento è stato scelto.",
+ "Entity %s has no event %s" : "L'entità %s non ha eventi %s",
"Operation %s does not exist" : "L'operazione %s non esiste",
"Operation %s is invalid" : "L'operazione %s non è valida",
+ "At least one check needs to be provided" : "Deve essere fornito almeno un controllo",
+ "The provided operation data is too long" : "I dati operativi forniti sono troppo lunghi",
+ "Invalid check provided" : "Controllo fornito non valido ",
"Check %s does not exist" : "Il controllo %s non esiste",
"Check %s is invalid" : "Il controllo %s non è valido",
+ "Check %s is not allowed with this entity" : "Il controllo di %s non è consentito con questa entità",
+ "The provided check value is too long" : "Il valore di controllo fornito è troppo lungo",
"Check #%s does not exist" : "Il controllo #%s non esiste",
- "Workflow" : "Flusso di lavoro",
- "Open documentation" : "Apri documentazione",
- "Add rule group" : "Aggiungi gruppo di regole",
- "Short rule description" : "Descrizione breve della regola",
- "Add rule" : "Aggiungi regola",
- "Reset" : "Ripristina",
+ "Check %s is invalid or does not exist" : "Il controllo %s non è valido o non esiste",
+ "Flow" : "Flusso",
+ "Nextcloud workflow engine" : "Motore flussi di lavoro di Nextcloud",
+ "Select a filter" : "Seleziona un filtro",
+ "Select a comparator" : "Seleziona un comparatore",
+ "Remove filter" : "Rimuovi filtro",
+ "Folder" : "Cartella",
+ "Images" : "Immagini",
+ "Office documents" : "Documenti di Office",
+ "PDF documents" : "Documenti PDF",
+ "Custom MIME type" : "Tipo MIME personalizzato",
+ "Custom mimetype" : "Tipo MIME personalizzato",
+ "Select a file type" : "Seleziona un tipo di file",
+ "e.g. httpd/unix-directory" : "ad es. httpd/unix-directory",
+ "Please enter a valid time span" : "Digita un intervallo temporale valido",
+ "Files WebDAV" : "File WebDAV",
+ "Custom URL" : "URL personalizzato",
+ "Select a request URL" : "Seleziona un URL di richiesta",
+ "Android client" : "Client Android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client desktop",
+ "Thunderbird & Outlook addons" : "Componenti aggiuntivi di Outlook e Thunderbird",
+ "Custom user agent" : "User agent personalizzato",
+ "Select a user agent" : "Seleziona user agent",
+ "Select groups" : "Seleziona gruppi",
+ "Groups" : "Gruppi",
+ "At least one event must be selected" : "Deve essere selezionato almeno un evento",
+ "Add new flow" : "Aggiungi nuovo flusso",
+ "The configuration is invalid" : "La configurazione non è valida",
+ "Active" : "Attivo",
"Save" : "Salva",
- "Saving…" : "Salvataggio in corso...",
- "Loading…" : "Caricamento in corso...",
- "Successfully saved" : "Salvato correttamente",
- "File mime type" : "Tipo MIME del file"
+ "When" : "Quando",
+ "and" : "e",
+ "Add a new filter" : "Aggiungi un nuovo filtro",
+ "Cancel" : "Annulla",
+ "Delete" : "Elimina",
+ "Available flows" : "Flussi disponibili",
+ "For details on how to write your own flow, check out the development documentation." : "Per dettagli su come scrivere il tuo flusso, controlla la documentazione di sviluppo.",
+ "No flows installed" : "Nessun flusso installato",
+ "Ask your administrator to install new flows." : "Chiedi al tuo amministratore di installare nuovi flussi.",
+ "More flows" : "Altri flussi",
+ "Browse the App Store" : "Sfoglia il negozio delle applicazioni",
+ "Show less" : "Mostra meno",
+ "Show more" : "Mostra più",
+ "Configured flows" : "Flussi configurati",
+ "Your flows" : "I tuoi flussi",
+ "No flows configured" : "Nessun flusso configurato",
+ "matches" : "corrisponde",
+ "does not match" : "non corrisponde",
+ "is" : "è",
+ "is not" : "non è",
+ "File name" : "Nome file",
+ "File MIME type" : "Tipo MIME del file",
+ "File size (upload)" : "Dimensione file (caricamento)",
+ "less" : "minore",
+ "less or equals" : "minore o uguale",
+ "greater or equals" : "maggiore o uguale",
+ "greater" : "maggiore",
+ "Request remote address" : "Indirizzo remoto della richiesta",
+ "matches IPv4" : "corrisponde a IPv4",
+ "does not match IPv4" : "non corrisponde a IPv4",
+ "matches IPv6" : "corrisponde a IPv6",
+ "does not match IPv6" : "non corrisponde a IPv6",
+ "File system tag" : "Etichetta del file system",
+ "is tagged with" : "è etichettato con",
+ "is not tagged with" : "non è etichettato con",
+ "Request URL" : "URL della richiesta",
+ "Request time" : "Ora della richiesta",
+ "between" : "compreso",
+ "not between" : "non compreso",
+ "Request user agent" : "User agent della richiesta",
+ "is member of" : "è membro di",
+ "is not member of" : "non è membro di"
},
-"nplurals=2; plural=(n != 1);");
+"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/it.json b/apps/workflowengine/l10n/it.json
index 9d6b50647f3..e093c15a0c8 100644
--- a/apps/workflowengine/l10n/it.json
+++ b/apps/workflowengine/l10n/it.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Salvato",
- "Saving failed:" : "Salvataggio non riuscito:",
- "File MIME type" : "Tipo MIME del file",
- "is" : "è",
- "is not" : "non è",
- "matches" : "corrisponde",
- "does not match" : "non corrisponde",
- "Example: {placeholder}" : "Esempio: {placeholder}",
- "File size (upload)" : "Dimensione file (caricamento)",
- "less" : "minore",
- "less or equals" : "minore o uguale",
- "greater or equals" : "maggiore o uguale",
- "greater" : "maggiore",
- "File system tag" : "Etichetta del file system",
- "is tagged with" : "è etichettato con",
- "is not tagged with" : "non è etichettato con",
- "Select tag…" : "Seleziona etichetta...",
- "Request remote address" : "Indirizzo remoto della richiesta",
- "matches IPv4" : "corrisponde a IPv4",
- "does not match IPv4" : "non corrisponde a IPv4",
- "matches IPv6" : "corrisponde a IPv6",
- "does not match IPv6" : "non corrisponde a IPv6",
- "Request time" : "Ora della richiesta",
- "between" : "compreso",
- "not between" : "non compreso",
- "Start" : "Inizio",
- "End" : "Fine",
- "Select timezone…" : "Seleziona fuso orario...",
- "Request URL" : "URL della richiesta",
- "Predefined URLs" : "URL predefiniti",
- "Files WebDAV" : "File WebDAV",
- "Request user agent" : "User agent della richiesta",
- "Sync clients" : "Client di sincronizzazione",
- "Android client" : "Client Android",
- "iOS client" : "Client iOS",
- "Desktop client" : "Client desktop",
- "User group membership" : "Appartenenza ai gruppi degli utenti",
- "is member of" : "è membro di",
- "is not member of" : "non è membro di",
"The given operator is invalid" : "L'operatore specificato non è valido",
"The given regular expression is invalid" : "L'espressione regolare specificata non è valida",
"The given file size is invalid" : "La dimensione del file specificata non è valida",
@@ -49,23 +10,109 @@
"The given start time is invalid" : "L'ora di inizio specificata non è valida",
"The given end time is invalid" : "L'ora di fine specificata non è valida",
"The given group does not exist" : "Il gruppo specificato non esiste",
- "Check %s is invalid or does not exist" : "Il controllo %s non è valido o non esiste",
+ "File" : "File",
+ "File created" : "File creato",
+ "File updated" : "File aggiornato",
+ "File renamed" : "File rinominato",
+ "File deleted" : "File eliminato",
+ "File accessed" : "File acceduto",
+ "File copied" : "File copiato",
+ "Tag assigned" : "Etichetta assegnata",
+ "Someone" : "Qualcuno",
+ "%s created %s" : "%s ha creato %s",
+ "%s modified %s" : "%s ha modificato %s",
+ "%s deleted %s" : "%s ha eliminato %s",
+ "%s accessed %s" : "%s ha eseguito l'accesso a %s",
+ "%s renamed %s" : "%s ha rinominato %s",
+ "%s copied %s" : "%s ha copiato %s",
+ "%s assigned %s to %s" : "%s ha assegnato %s a %s",
"Operation #%s does not exist" : "L'operazione #%s non esiste",
+ "Entity %s does not exist" : "L'entità %s non esiste",
+ "Entity %s is invalid" : "L'entità %s non è valida",
+ "No events are chosen." : "Nessun evento è stato scelto.",
+ "Entity %s has no event %s" : "L'entità %s non ha eventi %s",
"Operation %s does not exist" : "L'operazione %s non esiste",
"Operation %s is invalid" : "L'operazione %s non è valida",
+ "At least one check needs to be provided" : "Deve essere fornito almeno un controllo",
+ "The provided operation data is too long" : "I dati operativi forniti sono troppo lunghi",
+ "Invalid check provided" : "Controllo fornito non valido ",
"Check %s does not exist" : "Il controllo %s non esiste",
"Check %s is invalid" : "Il controllo %s non è valido",
+ "Check %s is not allowed with this entity" : "Il controllo di %s non è consentito con questa entità",
+ "The provided check value is too long" : "Il valore di controllo fornito è troppo lungo",
"Check #%s does not exist" : "Il controllo #%s non esiste",
- "Workflow" : "Flusso di lavoro",
- "Open documentation" : "Apri documentazione",
- "Add rule group" : "Aggiungi gruppo di regole",
- "Short rule description" : "Descrizione breve della regola",
- "Add rule" : "Aggiungi regola",
- "Reset" : "Ripristina",
+ "Check %s is invalid or does not exist" : "Il controllo %s non è valido o non esiste",
+ "Flow" : "Flusso",
+ "Nextcloud workflow engine" : "Motore flussi di lavoro di Nextcloud",
+ "Select a filter" : "Seleziona un filtro",
+ "Select a comparator" : "Seleziona un comparatore",
+ "Remove filter" : "Rimuovi filtro",
+ "Folder" : "Cartella",
+ "Images" : "Immagini",
+ "Office documents" : "Documenti di Office",
+ "PDF documents" : "Documenti PDF",
+ "Custom MIME type" : "Tipo MIME personalizzato",
+ "Custom mimetype" : "Tipo MIME personalizzato",
+ "Select a file type" : "Seleziona un tipo di file",
+ "e.g. httpd/unix-directory" : "ad es. httpd/unix-directory",
+ "Please enter a valid time span" : "Digita un intervallo temporale valido",
+ "Files WebDAV" : "File WebDAV",
+ "Custom URL" : "URL personalizzato",
+ "Select a request URL" : "Seleziona un URL di richiesta",
+ "Android client" : "Client Android",
+ "iOS client" : "Client iOS",
+ "Desktop client" : "Client desktop",
+ "Thunderbird & Outlook addons" : "Componenti aggiuntivi di Outlook e Thunderbird",
+ "Custom user agent" : "User agent personalizzato",
+ "Select a user agent" : "Seleziona user agent",
+ "Select groups" : "Seleziona gruppi",
+ "Groups" : "Gruppi",
+ "At least one event must be selected" : "Deve essere selezionato almeno un evento",
+ "Add new flow" : "Aggiungi nuovo flusso",
+ "The configuration is invalid" : "La configurazione non è valida",
+ "Active" : "Attivo",
"Save" : "Salva",
- "Saving…" : "Salvataggio in corso...",
- "Loading…" : "Caricamento in corso...",
- "Successfully saved" : "Salvato correttamente",
- "File mime type" : "Tipo MIME del file"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
+ "When" : "Quando",
+ "and" : "e",
+ "Add a new filter" : "Aggiungi un nuovo filtro",
+ "Cancel" : "Annulla",
+ "Delete" : "Elimina",
+ "Available flows" : "Flussi disponibili",
+ "For details on how to write your own flow, check out the development documentation." : "Per dettagli su come scrivere il tuo flusso, controlla la documentazione di sviluppo.",
+ "No flows installed" : "Nessun flusso installato",
+ "Ask your administrator to install new flows." : "Chiedi al tuo amministratore di installare nuovi flussi.",
+ "More flows" : "Altri flussi",
+ "Browse the App Store" : "Sfoglia il negozio delle applicazioni",
+ "Show less" : "Mostra meno",
+ "Show more" : "Mostra più",
+ "Configured flows" : "Flussi configurati",
+ "Your flows" : "I tuoi flussi",
+ "No flows configured" : "Nessun flusso configurato",
+ "matches" : "corrisponde",
+ "does not match" : "non corrisponde",
+ "is" : "è",
+ "is not" : "non è",
+ "File name" : "Nome file",
+ "File MIME type" : "Tipo MIME del file",
+ "File size (upload)" : "Dimensione file (caricamento)",
+ "less" : "minore",
+ "less or equals" : "minore o uguale",
+ "greater or equals" : "maggiore o uguale",
+ "greater" : "maggiore",
+ "Request remote address" : "Indirizzo remoto della richiesta",
+ "matches IPv4" : "corrisponde a IPv4",
+ "does not match IPv4" : "non corrisponde a IPv4",
+ "matches IPv6" : "corrisponde a IPv6",
+ "does not match IPv6" : "non corrisponde a IPv6",
+ "File system tag" : "Etichetta del file system",
+ "is tagged with" : "è etichettato con",
+ "is not tagged with" : "non è etichettato con",
+ "Request URL" : "URL della richiesta",
+ "Request time" : "Ora della richiesta",
+ "between" : "compreso",
+ "not between" : "non compreso",
+ "Request user agent" : "User agent della richiesta",
+ "is member of" : "è membro di",
+ "is not member of" : "non è membro di"
+},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ja.js b/apps/workflowengine/l10n/ja.js
index 90f7cf1b932..82e789eeed1 100644
--- a/apps/workflowengine/l10n/ja.js
+++ b/apps/workflowengine/l10n/ja.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "保存されました",
- "Saving failed:" : "保存に失敗しました:",
- "File MIME type" : "ファイルMIMEタイプ",
- "is" : "は",
- "is not" : "は異なる",
- "matches" : "合致",
- "does not match" : "合致しない",
- "Example: {placeholder}" : "例: {プレースホルダー}",
- "File size (upload)" : "ファイルサイズ(アップロード)",
- "less" : "より小さい",
- "less or equals" : "より小さいか等しい",
- "greater or equals" : "大きいか等しい",
- "greater" : "大きい",
- "File system tag" : "ファイルシステムタグ",
- "is tagged with" : "に次のタグが付いている",
- "is not tagged with" : "に次のタグが付いていない",
- "Select tag…" : "タグを選択...",
- "Request remote address" : "リクエスト リモートアドレス",
- "matches IPv4" : "次の IPv4アドレスに合致",
- "does not match IPv4" : "次の IPv4アドレスに合致しない",
- "matches IPv6" : "次の IPv6アドレスに合致",
- "does not match IPv6" : "次の IPv6アドレスに合致しない",
- "Request time" : "ルール適用の時刻",
- "between" : "間",
- "not between" : "間ではない",
- "Start" : "開始",
- "End" : "終了",
- "Select timezone…" : "タイムゾーンを選択...",
- "Request URL" : "呼びだしたURL",
- "Predefined URLs" : "定義済みのURL",
- "Files WebDAV" : "ファイルWebDAV",
- "Request user agent" : "リクエスト時のユーザーエージェント",
- "Sync clients" : "同期クライアントタイプ",
- "Android client" : "アンドロイドクライアント",
- "iOS client" : "iOSクライアント",
- "Desktop client" : "デスクトップクライアント",
- "User group membership" : "ユーザーがグループのメンバーかどうか",
- "is member of" : "が次のグループのメンバーである",
- "is not member of" : "が次のグループのメンバーではない",
"The given operator is invalid" : "指定された演算子は無効",
"The given regular expression is invalid" : "指定の正規表現は無効",
"The given file size is invalid" : "指定されたファイルサイズは無効",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "指定された開始時刻は無効です",
"The given end time is invalid" : "指定された終了時刻は無効です",
"The given group does not exist" : "指定されたグループは存在しません",
- "Check %s is invalid or does not exist" : "%sのチェックは無効か存在しません",
+ "File" : "ファイル",
+ "File created" : "ファイル作成時",
+ "File updated" : "ファイル更新時",
+ "File renamed" : "ファイル名変更時",
+ "File deleted" : "ファイル削除時",
+ "File accessed" : "ファイルアクセス時",
+ "File copied" : "ファイル複製時",
+ "Tag assigned" : "タグ割り当て時",
+ "Someone" : "誰か",
+ "%s created %s" : "%s が %s を作成",
+ "%s modified %s" : "%s が %s を更新",
+ "%s deleted %s" : "%s が %s を削除",
+ "%s accessed %s" : "%s が %s にアクセス",
+ "%s renamed %s" : "%s が %s をリネーム",
+ "%s copied %s" : "%s を %s に複製",
+ "%s assigned %s to %s" : "%s が %s を %s に割り当て",
"Operation #%s does not exist" : "#%s 操作は存在しません",
+ "Entity %s does not exist" : "エンティティー %s がありません",
+ "Entity %s is invalid" : "エンティティー %s が間違っています",
+ "No events are chosen." : "イベントが選択されていません。",
+ "Entity %s has no event %s" : "エンティティー %s には %s のイベントはありません",
"Operation %s does not exist" : "%s 操作は存在しません",
"Operation %s is invalid" : "%s 操作は無効です",
+ "At least one check needs to be provided" : "少なくともチェックを一つ設定してください",
+ "The provided operation data is too long" : "提供された操作データが長すぎます",
+ "Invalid check provided" : "チェック設定が正しくありません",
"Check %s does not exist" : "チェック %s は存在しません",
"Check %s is invalid" : "チェック %s は無効です",
+ "Check %s is not allowed with this entity" : " チェック%s はこのエンティティーでは利用できません",
+ "The provided check value is too long" : "提供されたチェック値が長すぎます",
"Check #%s does not exist" : "チェック #%s は存在しません",
- "Workflow" : "ワークフロー",
- "Open documentation" : "ドキュメントを開く",
- "Add rule group" : "ルールグループを追加する",
- "Short rule description" : "ルールの簡潔な説明",
- "Add rule" : "ルールを追加",
- "Reset" : "リセット",
+ "Check %s is invalid or does not exist" : "%sのチェックは無効か存在しません",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud ワークフローエンジン",
+ "Select a filter" : "フィルターを選択",
+ "Select a comparator" : "比較演算子を指定",
+ "Remove filter" : "フィルターを削除",
+ "Folder" : "フォルダー",
+ "Images" : "画像",
+ "Office documents" : "Officeドキュメント",
+ "PDF documents" : "PDFドキュメント",
+ "Custom MIME type" : "カスタムMIMEタイプ",
+ "Custom mimetype" : "カスタムMIMEタイプ",
+ "Select a file type" : "ファイルタイプを指定",
+ "e.g. httpd/unix-directory" : "例: httpd/unix-directory",
+ "Please enter a valid time span" : "正しい間隔を指定してください",
+ "Files WebDAV" : "ファイルWebDAV",
+ "Custom URL" : "カスタムURL",
+ "Select a request URL" : "リクエストURLを選択",
+ "Android client" : "アンドロイドクライアント",
+ "iOS client" : "iOSクライアント",
+ "Desktop client" : "デスクトップクライアント",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook アドオン",
+ "Custom user agent" : "カスタムユーザーエージェント",
+ "Select a user agent" : "ユーザーエージェントを選択",
+ "Select groups" : "グループを選択",
+ "Groups" : "グループ",
+ "Type to search for group …" : "グループを検索するためのタイプ",
+ "Select a trigger" : "トリガーを選択",
+ "At least one event must be selected" : "少なくともイベントを一つ指定してください",
+ "Add new flow" : "新しいフローを追加",
+ "The configuration is invalid" : "設定が正しくありません",
+ "Active" : "アクティブ化",
"Save" : "保存",
- "Saving…" : "保存中...",
- "Loading…" : "読み込み中...",
- "Successfully saved" : "保存しました",
- "File mime type" : "ファイルMIMEタイプ"
+ "When" : "いつ",
+ "and" : "かつ",
+ "Add a new filter" : "新しいフィルターを追加",
+ "Cancel" : "キャンセル",
+ "Delete" : "削除",
+ "Available flows" : "利用可能なフロー",
+ "For details on how to write your own flow, check out the development documentation." : "独自のフローを作成する方法の詳細については、開発ドキュメントを参照してください。",
+ "No flows installed" : "フローがインストールされていません",
+ "Ask your administrator to install new flows." : "あなたの管理者に新しいフローのインストールを依頼してください。",
+ "More flows" : "その他のフロー",
+ "Browse the App Store" : "AppStoreをブラウザーでみる",
+ "Show less" : "表示を減らす",
+ "Show more" : "表示を増やす",
+ "Configured flows" : "設定済みフロー",
+ "Your flows" : "作成したフロー",
+ "No flows configured" : "設定済みのフローはありません。",
+ "matches" : "一致",
+ "does not match" : "一致しない",
+ "is" : "は",
+ "is not" : "は異なる",
+ "File name" : "ファイル名",
+ "File MIME type" : "ファイルMIMEタイプ",
+ "File size (upload)" : "ファイルサイズ(アップロード)",
+ "less" : "より小さい",
+ "less or equals" : "より小さいか等しい",
+ "greater or equals" : "大きいか等しい",
+ "greater" : "大きい",
+ "Request remote address" : "リクエスト リモートアドレス",
+ "matches IPv4" : "次の IPv4アドレスに合致",
+ "does not match IPv4" : "次の IPv4アドレスに合致しない",
+ "matches IPv6" : "次の IPv6アドレスに合致",
+ "does not match IPv6" : "次の IPv6アドレスに合致しない",
+ "File system tag" : "ファイルシステムタグ",
+ "is tagged with" : "に次のタグが付いている",
+ "is not tagged with" : "に次のタグが付いていない",
+ "Request URL" : "呼びだしたURL",
+ "Request time" : "ルール適用の時刻",
+ "between" : "間",
+ "not between" : "間ではない",
+ "Request user agent" : "リクエスト時のユーザーエージェント",
+ "Group membership" : "グループメンバー",
+ "is member of" : "が次のグループのメンバーである",
+ "is not member of" : "が次のグループのメンバーではない"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/ja.json b/apps/workflowengine/l10n/ja.json
index 7c90834dcee..e479bf4090a 100644
--- a/apps/workflowengine/l10n/ja.json
+++ b/apps/workflowengine/l10n/ja.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "保存されました",
- "Saving failed:" : "保存に失敗しました:",
- "File MIME type" : "ファイルMIMEタイプ",
- "is" : "は",
- "is not" : "は異なる",
- "matches" : "合致",
- "does not match" : "合致しない",
- "Example: {placeholder}" : "例: {プレースホルダー}",
- "File size (upload)" : "ファイルサイズ(アップロード)",
- "less" : "より小さい",
- "less or equals" : "より小さいか等しい",
- "greater or equals" : "大きいか等しい",
- "greater" : "大きい",
- "File system tag" : "ファイルシステムタグ",
- "is tagged with" : "に次のタグが付いている",
- "is not tagged with" : "に次のタグが付いていない",
- "Select tag…" : "タグを選択...",
- "Request remote address" : "リクエスト リモートアドレス",
- "matches IPv4" : "次の IPv4アドレスに合致",
- "does not match IPv4" : "次の IPv4アドレスに合致しない",
- "matches IPv6" : "次の IPv6アドレスに合致",
- "does not match IPv6" : "次の IPv6アドレスに合致しない",
- "Request time" : "ルール適用の時刻",
- "between" : "間",
- "not between" : "間ではない",
- "Start" : "開始",
- "End" : "終了",
- "Select timezone…" : "タイムゾーンを選択...",
- "Request URL" : "呼びだしたURL",
- "Predefined URLs" : "定義済みのURL",
- "Files WebDAV" : "ファイルWebDAV",
- "Request user agent" : "リクエスト時のユーザーエージェント",
- "Sync clients" : "同期クライアントタイプ",
- "Android client" : "アンドロイドクライアント",
- "iOS client" : "iOSクライアント",
- "Desktop client" : "デスクトップクライアント",
- "User group membership" : "ユーザーがグループのメンバーかどうか",
- "is member of" : "が次のグループのメンバーである",
- "is not member of" : "が次のグループのメンバーではない",
"The given operator is invalid" : "指定された演算子は無効",
"The given regular expression is invalid" : "指定の正規表現は無効",
"The given file size is invalid" : "指定されたファイルサイズは無効",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "指定された開始時刻は無効です",
"The given end time is invalid" : "指定された終了時刻は無効です",
"The given group does not exist" : "指定されたグループは存在しません",
- "Check %s is invalid or does not exist" : "%sのチェックは無効か存在しません",
+ "File" : "ファイル",
+ "File created" : "ファイル作成時",
+ "File updated" : "ファイル更新時",
+ "File renamed" : "ファイル名変更時",
+ "File deleted" : "ファイル削除時",
+ "File accessed" : "ファイルアクセス時",
+ "File copied" : "ファイル複製時",
+ "Tag assigned" : "タグ割り当て時",
+ "Someone" : "誰か",
+ "%s created %s" : "%s が %s を作成",
+ "%s modified %s" : "%s が %s を更新",
+ "%s deleted %s" : "%s が %s を削除",
+ "%s accessed %s" : "%s が %s にアクセス",
+ "%s renamed %s" : "%s が %s をリネーム",
+ "%s copied %s" : "%s を %s に複製",
+ "%s assigned %s to %s" : "%s が %s を %s に割り当て",
"Operation #%s does not exist" : "#%s 操作は存在しません",
+ "Entity %s does not exist" : "エンティティー %s がありません",
+ "Entity %s is invalid" : "エンティティー %s が間違っています",
+ "No events are chosen." : "イベントが選択されていません。",
+ "Entity %s has no event %s" : "エンティティー %s には %s のイベントはありません",
"Operation %s does not exist" : "%s 操作は存在しません",
"Operation %s is invalid" : "%s 操作は無効です",
+ "At least one check needs to be provided" : "少なくともチェックを一つ設定してください",
+ "The provided operation data is too long" : "提供された操作データが長すぎます",
+ "Invalid check provided" : "チェック設定が正しくありません",
"Check %s does not exist" : "チェック %s は存在しません",
"Check %s is invalid" : "チェック %s は無効です",
+ "Check %s is not allowed with this entity" : " チェック%s はこのエンティティーでは利用できません",
+ "The provided check value is too long" : "提供されたチェック値が長すぎます",
"Check #%s does not exist" : "チェック #%s は存在しません",
- "Workflow" : "ワークフロー",
- "Open documentation" : "ドキュメントを開く",
- "Add rule group" : "ルールグループを追加する",
- "Short rule description" : "ルールの簡潔な説明",
- "Add rule" : "ルールを追加",
- "Reset" : "リセット",
+ "Check %s is invalid or does not exist" : "%sのチェックは無効か存在しません",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud ワークフローエンジン",
+ "Select a filter" : "フィルターを選択",
+ "Select a comparator" : "比較演算子を指定",
+ "Remove filter" : "フィルターを削除",
+ "Folder" : "フォルダー",
+ "Images" : "画像",
+ "Office documents" : "Officeドキュメント",
+ "PDF documents" : "PDFドキュメント",
+ "Custom MIME type" : "カスタムMIMEタイプ",
+ "Custom mimetype" : "カスタムMIMEタイプ",
+ "Select a file type" : "ファイルタイプを指定",
+ "e.g. httpd/unix-directory" : "例: httpd/unix-directory",
+ "Please enter a valid time span" : "正しい間隔を指定してください",
+ "Files WebDAV" : "ファイルWebDAV",
+ "Custom URL" : "カスタムURL",
+ "Select a request URL" : "リクエストURLを選択",
+ "Android client" : "アンドロイドクライアント",
+ "iOS client" : "iOSクライアント",
+ "Desktop client" : "デスクトップクライアント",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook アドオン",
+ "Custom user agent" : "カスタムユーザーエージェント",
+ "Select a user agent" : "ユーザーエージェントを選択",
+ "Select groups" : "グループを選択",
+ "Groups" : "グループ",
+ "Type to search for group …" : "グループを検索するためのタイプ",
+ "Select a trigger" : "トリガーを選択",
+ "At least one event must be selected" : "少なくともイベントを一つ指定してください",
+ "Add new flow" : "新しいフローを追加",
+ "The configuration is invalid" : "設定が正しくありません",
+ "Active" : "アクティブ化",
"Save" : "保存",
- "Saving…" : "保存中...",
- "Loading…" : "読み込み中...",
- "Successfully saved" : "保存しました",
- "File mime type" : "ファイルMIMEタイプ"
+ "When" : "いつ",
+ "and" : "かつ",
+ "Add a new filter" : "新しいフィルターを追加",
+ "Cancel" : "キャンセル",
+ "Delete" : "削除",
+ "Available flows" : "利用可能なフロー",
+ "For details on how to write your own flow, check out the development documentation." : "独自のフローを作成する方法の詳細については、開発ドキュメントを参照してください。",
+ "No flows installed" : "フローがインストールされていません",
+ "Ask your administrator to install new flows." : "あなたの管理者に新しいフローのインストールを依頼してください。",
+ "More flows" : "その他のフロー",
+ "Browse the App Store" : "AppStoreをブラウザーでみる",
+ "Show less" : "表示を減らす",
+ "Show more" : "表示を増やす",
+ "Configured flows" : "設定済みフロー",
+ "Your flows" : "作成したフロー",
+ "No flows configured" : "設定済みのフローはありません。",
+ "matches" : "一致",
+ "does not match" : "一致しない",
+ "is" : "は",
+ "is not" : "は異なる",
+ "File name" : "ファイル名",
+ "File MIME type" : "ファイルMIMEタイプ",
+ "File size (upload)" : "ファイルサイズ(アップロード)",
+ "less" : "より小さい",
+ "less or equals" : "より小さいか等しい",
+ "greater or equals" : "大きいか等しい",
+ "greater" : "大きい",
+ "Request remote address" : "リクエスト リモートアドレス",
+ "matches IPv4" : "次の IPv4アドレスに合致",
+ "does not match IPv4" : "次の IPv4アドレスに合致しない",
+ "matches IPv6" : "次の IPv6アドレスに合致",
+ "does not match IPv6" : "次の IPv6アドレスに合致しない",
+ "File system tag" : "ファイルシステムタグ",
+ "is tagged with" : "に次のタグが付いている",
+ "is not tagged with" : "に次のタグが付いていない",
+ "Request URL" : "呼びだしたURL",
+ "Request time" : "ルール適用の時刻",
+ "between" : "間",
+ "not between" : "間ではない",
+ "Request user agent" : "リクエスト時のユーザーエージェント",
+ "Group membership" : "グループメンバー",
+ "is member of" : "が次のグループのメンバーである",
+ "is not member of" : "が次のグループのメンバーではない"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ka.js b/apps/workflowengine/l10n/ka.js
new file mode 100644
index 00000000000..4e584689600
--- /dev/null
+++ b/apps/workflowengine/l10n/ka.js
@@ -0,0 +1,121 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "The given operator is invalid",
+ "The given regular expression is invalid" : "The given regular expression is invalid",
+ "The given file size is invalid" : "The given file size is invalid",
+ "The given tag id is invalid" : "The given tag id is invalid",
+ "The given IP range is invalid" : "The given IP range is invalid",
+ "The given IP range is not valid for IPv4" : "The given IP range is not valid for IPv4",
+ "The given IP range is not valid for IPv6" : "The given IP range is not valid for IPv6",
+ "The given time span is invalid" : "The given time span is invalid",
+ "The given start time is invalid" : "The given start time is invalid",
+ "The given end time is invalid" : "The given end time is invalid",
+ "The given group does not exist" : "The given group does not exist",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
+ "Operation #%s does not exist" : "Operation #%s does not exist",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
+ "Operation %s does not exist" : "Operation %s does not exist",
+ "Operation %s is invalid" : "Operation %s is invalid",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
+ "Check %s does not exist" : "Check %s does not exist",
+ "Check %s is invalid" : "Check %s is invalid",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
+ "Check #%s does not exist" : "Check #%s does not exist",
+ "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "Folder",
+ "Images" : "Images",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "Files WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "Select groups",
+ "Groups" : "Groups",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "Active",
+ "Save" : "Save",
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "Cancel",
+ "Delete" : "Delete",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "No flows installed" : "No flows installed",
+ "Ask your administrator to install new flows." : "Ask your administrator to install new flows.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "No flows configured" : "No flows configured",
+ "matches" : "matches",
+ "does not match" : "does not match",
+ "is" : "is",
+ "is not" : "is not",
+ "File name" : "File name",
+ "File MIME type" : "File MIME type",
+ "File size (upload)" : "File size (upload)",
+ "less" : "less",
+ "less or equals" : "less or equals",
+ "greater or equals" : "greater or equals",
+ "greater" : "greater",
+ "Request remote address" : "Request remote address",
+ "matches IPv4" : "matches IPv4",
+ "does not match IPv4" : "does not match IPv4",
+ "matches IPv6" : "matches IPv6",
+ "does not match IPv6" : "does not match IPv6",
+ "File system tag" : "File system tag",
+ "is tagged with" : "is tagged with",
+ "is not tagged with" : "is not tagged with",
+ "Request URL" : "Request URL",
+ "Request time" : "Request time",
+ "between" : "between",
+ "not between" : "not between",
+ "Request user agent" : "Request user agent",
+ "is member of" : "is member of",
+ "is not member of" : "is not member of"
+},
+"nplurals=2; plural=(n!=1);");
diff --git a/apps/workflowengine/l10n/ka.json b/apps/workflowengine/l10n/ka.json
new file mode 100644
index 00000000000..ebf89c5e0ee
--- /dev/null
+++ b/apps/workflowengine/l10n/ka.json
@@ -0,0 +1,119 @@
+{ "translations": {
+ "The given operator is invalid" : "The given operator is invalid",
+ "The given regular expression is invalid" : "The given regular expression is invalid",
+ "The given file size is invalid" : "The given file size is invalid",
+ "The given tag id is invalid" : "The given tag id is invalid",
+ "The given IP range is invalid" : "The given IP range is invalid",
+ "The given IP range is not valid for IPv4" : "The given IP range is not valid for IPv4",
+ "The given IP range is not valid for IPv6" : "The given IP range is not valid for IPv6",
+ "The given time span is invalid" : "The given time span is invalid",
+ "The given start time is invalid" : "The given start time is invalid",
+ "The given end time is invalid" : "The given end time is invalid",
+ "The given group does not exist" : "The given group does not exist",
+ "File" : "File",
+ "File created" : "File created",
+ "File updated" : "File updated",
+ "File renamed" : "File renamed",
+ "File deleted" : "File deleted",
+ "File accessed" : "File accessed",
+ "File copied" : "File copied",
+ "Tag assigned" : "Tag assigned",
+ "Someone" : "Someone",
+ "%s created %s" : "%s created %s",
+ "%s modified %s" : "%s modified %s",
+ "%s deleted %s" : "%s deleted %s",
+ "%s accessed %s" : "%s accessed %s",
+ "%s renamed %s" : "%s renamed %s",
+ "%s copied %s" : "%s copied %s",
+ "%s assigned %s to %s" : "%s assigned %s to %s",
+ "Operation #%s does not exist" : "Operation #%s does not exist",
+ "Entity %s does not exist" : "Entity %s does not exist",
+ "Entity %s is invalid" : "Entity %s is invalid",
+ "No events are chosen." : "No events are chosen.",
+ "Entity %s has no event %s" : "Entity %s has no event %s",
+ "Operation %s does not exist" : "Operation %s does not exist",
+ "Operation %s is invalid" : "Operation %s is invalid",
+ "At least one check needs to be provided" : "At least one check needs to be provided",
+ "The provided operation data is too long" : "The provided operation data is too long",
+ "Invalid check provided" : "Invalid check provided",
+ "Check %s does not exist" : "Check %s does not exist",
+ "Check %s is invalid" : "Check %s is invalid",
+ "Check %s is not allowed with this entity" : "Check %s is not allowed with this entity",
+ "The provided check value is too long" : "The provided check value is too long",
+ "Check #%s does not exist" : "Check #%s does not exist",
+ "Check %s is invalid or does not exist" : "Check %s is invalid or does not exist",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Select a filter",
+ "Select a comparator" : "Select a comparator",
+ "Remove filter" : "Remove filter",
+ "Folder" : "Folder",
+ "Images" : "Images",
+ "Office documents" : "Office documents",
+ "PDF documents" : "PDF documents",
+ "Custom MIME type" : "Custom MIME type",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "Select a file type",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Please enter a valid time span",
+ "Files WebDAV" : "Files WebDAV",
+ "Custom URL" : "Custom URL",
+ "Select a request URL" : "Select a request URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Custom user agent",
+ "Select a user agent" : "Select a user agent",
+ "Select groups" : "Select groups",
+ "Groups" : "Groups",
+ "Select a trigger" : "Select a trigger",
+ "At least one event must be selected" : "At least one event must be selected",
+ "Add new flow" : "Add new flow",
+ "The configuration is invalid" : "The configuration is invalid",
+ "Active" : "Active",
+ "Save" : "Save",
+ "When" : "When",
+ "and" : "and",
+ "Add a new filter" : "Add a new filter",
+ "Cancel" : "Cancel",
+ "Delete" : "Delete",
+ "Available flows" : "Available flows",
+ "For details on how to write your own flow, check out the development documentation." : "For details on how to write your own flow, check out the development documentation.",
+ "No flows installed" : "No flows installed",
+ "Ask your administrator to install new flows." : "Ask your administrator to install new flows.",
+ "More flows" : "More flows",
+ "Browse the App Store" : "Browse the App Store",
+ "Show less" : "Show less",
+ "Show more" : "Show more",
+ "Configured flows" : "Configured flows",
+ "Your flows" : "Your flows",
+ "No flows configured" : "No flows configured",
+ "matches" : "matches",
+ "does not match" : "does not match",
+ "is" : "is",
+ "is not" : "is not",
+ "File name" : "File name",
+ "File MIME type" : "File MIME type",
+ "File size (upload)" : "File size (upload)",
+ "less" : "less",
+ "less or equals" : "less or equals",
+ "greater or equals" : "greater or equals",
+ "greater" : "greater",
+ "Request remote address" : "Request remote address",
+ "matches IPv4" : "matches IPv4",
+ "does not match IPv4" : "does not match IPv4",
+ "matches IPv6" : "matches IPv6",
+ "does not match IPv6" : "does not match IPv6",
+ "File system tag" : "File system tag",
+ "is tagged with" : "is tagged with",
+ "is not tagged with" : "is not tagged with",
+ "Request URL" : "Request URL",
+ "Request time" : "Request time",
+ "between" : "between",
+ "not between" : "not between",
+ "Request user agent" : "Request user agent",
+ "is member of" : "is member of",
+ "is not member of" : "is not member of"
+},"pluralForm" :"nplurals=2; plural=(n!=1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ka_GE.js b/apps/workflowengine/l10n/ka_GE.js
deleted file mode 100644
index 6852d7538d6..00000000000
--- a/apps/workflowengine/l10n/ka_GE.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "შენახულია",
- "Saving failed:" : "შენახვა ვერ მოხერხდა:",
- "File MIME type" : "ფაილის MIME სახეობა",
- "is" : "არის",
- "is not" : "არ არის",
- "matches" : "ემთხვევა",
- "does not match" : "არ ემთხვევა",
- "Example: {placeholder}" : "მაგალითი: {placeholder}",
- "File size (upload)" : "ფაილის ზომა (ატვირთვა)",
- "less" : "უფრო ნაკლები",
- "less or equals" : "უფრო ნაკლები ან ტოლი",
- "greater or equals" : "უფრო მეტი ან ტოლი",
- "greater" : "უფრო მეტი",
- "File system tag" : "ფაილის სისტემური ტეგი",
- "is tagged with" : "დატეგილია როგორც",
- "is not tagged with" : "არაა დატეგილი როგორც",
- "Select tag…" : "აირჩიეთ ტეგი...",
- "Request remote address" : "დისტანციური მისამართის მოთხოვნა",
- "matches IPv4" : "ემთხვევა IPv4-ს",
- "does not match IPv4" : "არ ემთხვევა IPv4-ს",
- "matches IPv6" : "ემთხვევა IPv6-ს",
- "does not match IPv6" : "არ ემთხვევა IPv6-ს",
- "Request time" : "მოთხოვნის დრო",
- "between" : "შორის",
- "not between" : "არა შორის",
- "Start" : "დაწყება",
- "End" : "დამთავრება",
- "Select timezone…" : "აირჩიეთ დროის სარტყელი...",
- "Request URL" : "მოთხოვნის URL",
- "Predefined URLs" : "წინასწარ განსაზღვრული URL-ები",
- "Files WebDAV" : "ფაილები WebDAV",
- "Request user agent" : "მოთხოვნის მომხმარებლის აგენტი",
- "Sync clients" : "სინქ. კლიენტები",
- "Android client" : "Android კლიენტი",
- "iOS client" : "iOS კლიენტი",
- "Desktop client" : "დესკტოპ კლიენტი",
- "User group membership" : "მომხმარებლის ჯგუფის წევრიანობა",
- "is member of" : "არის წევრი ჯგუფისა",
- "is not member of" : "არ არის წევრი ჯგუფისა",
- "The given operator is invalid" : "მოცემული ოპერატორი არაა სწორი",
- "The given regular expression is invalid" : "მოცემული რეგულარული გამოსახულება არაა სწორი",
- "The given file size is invalid" : "მოცემული ფაილის ზომა არაა სწორი",
- "The given tag id is invalid" : "მოცემული ტეგის id არაა სწორი",
- "The given IP range is invalid" : "მოცემული IP დიაპაზონი არაა სწორი",
- "The given IP range is not valid for IPv4" : "მოცემული IP დიაპაზონი არაა სწორი IPv4-ისთვის",
- "The given IP range is not valid for IPv6" : "მოცემული IP დიაპაზონი არაა სწორი IPv6-ისთვის",
- "The given time span is invalid" : "მოცემული დროის ინტერვალი არაა სწორი",
- "The given start time is invalid" : "მოცემული საწყისი დრო არაა სწორი",
- "The given end time is invalid" : "მოცემული დროის დასასრული არაა სწორი",
- "The given group does not exist" : "მოცემული ჯგუფი არ არსებობს",
- "Check %s is invalid or does not exist" : "შეამოწმეთ %s არასწორია ან არ არსებობს",
- "Operation #%s does not exist" : "ოპერაცია #%s არ არსებობს",
- "Operation %s does not exist" : "ოპერაცია %s არ არსებობს",
- "Operation %s is invalid" : "ოპერაცია %s არაა სწორი",
- "Check %s does not exist" : "შეამოწმეთ %s არ არსებობს",
- "Check %s is invalid" : "შეამოწმეთ %s არასწორია",
- "Check #%s does not exist" : "შეამოწმეთ #%s არ არსებობს",
- "Workflow" : "შრომითი პროცესები",
- "Open documentation" : "ღია დოკუმენტაცია",
- "Add rule group" : "ჯგუფის წესის დამატება",
- "Short rule description" : "წესის მოკლე აღწერა",
- "Add rule" : "წესის დამატება",
- "Reset" : "საწყის მდოგმარეობაში დაბრუნება",
- "Save" : "შენახვა",
- "Saving…" : "მიმდინარეობს დამახსოვრება...",
- "Loading…" : "იტვირთება...",
- "Successfully saved" : "წარმატებით დამახსოვრდა",
- "File mime type" : "ფაილის mime სახეობა"
-},
-"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/ka_GE.json b/apps/workflowengine/l10n/ka_GE.json
deleted file mode 100644
index 8233c4e5fea..00000000000
--- a/apps/workflowengine/l10n/ka_GE.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "შენახულია",
- "Saving failed:" : "შენახვა ვერ მოხერხდა:",
- "File MIME type" : "ფაილის MIME სახეობა",
- "is" : "არის",
- "is not" : "არ არის",
- "matches" : "ემთხვევა",
- "does not match" : "არ ემთხვევა",
- "Example: {placeholder}" : "მაგალითი: {placeholder}",
- "File size (upload)" : "ფაილის ზომა (ატვირთვა)",
- "less" : "უფრო ნაკლები",
- "less or equals" : "უფრო ნაკლები ან ტოლი",
- "greater or equals" : "უფრო მეტი ან ტოლი",
- "greater" : "უფრო მეტი",
- "File system tag" : "ფაილის სისტემური ტეგი",
- "is tagged with" : "დატეგილია როგორც",
- "is not tagged with" : "არაა დატეგილი როგორც",
- "Select tag…" : "აირჩიეთ ტეგი...",
- "Request remote address" : "დისტანციური მისამართის მოთხოვნა",
- "matches IPv4" : "ემთხვევა IPv4-ს",
- "does not match IPv4" : "არ ემთხვევა IPv4-ს",
- "matches IPv6" : "ემთხვევა IPv6-ს",
- "does not match IPv6" : "არ ემთხვევა IPv6-ს",
- "Request time" : "მოთხოვნის დრო",
- "between" : "შორის",
- "not between" : "არა შორის",
- "Start" : "დაწყება",
- "End" : "დამთავრება",
- "Select timezone…" : "აირჩიეთ დროის სარტყელი...",
- "Request URL" : "მოთხოვნის URL",
- "Predefined URLs" : "წინასწარ განსაზღვრული URL-ები",
- "Files WebDAV" : "ფაილები WebDAV",
- "Request user agent" : "მოთხოვნის მომხმარებლის აგენტი",
- "Sync clients" : "სინქ. კლიენტები",
- "Android client" : "Android კლიენტი",
- "iOS client" : "iOS კლიენტი",
- "Desktop client" : "დესკტოპ კლიენტი",
- "User group membership" : "მომხმარებლის ჯგუფის წევრიანობა",
- "is member of" : "არის წევრი ჯგუფისა",
- "is not member of" : "არ არის წევრი ჯგუფისა",
- "The given operator is invalid" : "მოცემული ოპერატორი არაა სწორი",
- "The given regular expression is invalid" : "მოცემული რეგულარული გამოსახულება არაა სწორი",
- "The given file size is invalid" : "მოცემული ფაილის ზომა არაა სწორი",
- "The given tag id is invalid" : "მოცემული ტეგის id არაა სწორი",
- "The given IP range is invalid" : "მოცემული IP დიაპაზონი არაა სწორი",
- "The given IP range is not valid for IPv4" : "მოცემული IP დიაპაზონი არაა სწორი IPv4-ისთვის",
- "The given IP range is not valid for IPv6" : "მოცემული IP დიაპაზონი არაა სწორი IPv6-ისთვის",
- "The given time span is invalid" : "მოცემული დროის ინტერვალი არაა სწორი",
- "The given start time is invalid" : "მოცემული საწყისი დრო არაა სწორი",
- "The given end time is invalid" : "მოცემული დროის დასასრული არაა სწორი",
- "The given group does not exist" : "მოცემული ჯგუფი არ არსებობს",
- "Check %s is invalid or does not exist" : "შეამოწმეთ %s არასწორია ან არ არსებობს",
- "Operation #%s does not exist" : "ოპერაცია #%s არ არსებობს",
- "Operation %s does not exist" : "ოპერაცია %s არ არსებობს",
- "Operation %s is invalid" : "ოპერაცია %s არაა სწორი",
- "Check %s does not exist" : "შეამოწმეთ %s არ არსებობს",
- "Check %s is invalid" : "შეამოწმეთ %s არასწორია",
- "Check #%s does not exist" : "შეამოწმეთ #%s არ არსებობს",
- "Workflow" : "შრომითი პროცესები",
- "Open documentation" : "ღია დოკუმენტაცია",
- "Add rule group" : "ჯგუფის წესის დამატება",
- "Short rule description" : "წესის მოკლე აღწერა",
- "Add rule" : "წესის დამატება",
- "Reset" : "საწყის მდოგმარეობაში დაბრუნება",
- "Save" : "შენახვა",
- "Saving…" : "მიმდინარეობს დამახსოვრება...",
- "Loading…" : "იტვირთება...",
- "Successfully saved" : "წარმატებით დამახსოვრდა",
- "File mime type" : "ფაილის mime სახეობა"
-},"pluralForm" :"nplurals=1; plural=0;"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ko.js b/apps/workflowengine/l10n/ko.js
index ab51b421bc2..7a029194ce8 100644
--- a/apps/workflowengine/l10n/ko.js
+++ b/apps/workflowengine/l10n/ko.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "저장됨",
- "Saving failed:" : "저장 실패:",
- "File MIME type" : "파일 MIME 형식",
- "is" : "맞음",
- "is not" : "아님",
- "matches" : "일치함",
- "does not match" : "일치하지 않음",
- "Example: {placeholder}" : "예: {placeholder}",
- "File size (upload)" : "파일 크기(업로드)",
- "less" : "작음",
- "less or equals" : "작거나 같음",
- "greater or equals" : "크거나 같음",
- "greater" : "큼",
- "File system tag" : "파일 시스템 태그",
- "is tagged with" : "다음으로 태그됨",
- "is not tagged with" : "다음으로 태그되지 않음",
- "Select tag…" : "태그 선택…",
- "Request remote address" : "요청의 원격 주소",
- "matches IPv4" : "IPv4와 일치함",
- "does not match IPv4" : "IPv4와 일치하지 않음",
- "matches IPv6" : "IPv6과 일치함",
- "does not match IPv6" : "IPv6과 일치하지 않음",
- "Request time" : "요청 시간",
- "between" : "사이",
- "not between" : "사이에 없음",
- "Start" : "시작",
- "End" : "끝",
- "Select timezone…" : "시간대 선택…",
- "Request URL" : "요청 URL",
- "Predefined URLs" : "사전 정의된 URL",
- "Files WebDAV" : "파일 WebDAV",
- "Request user agent" : "요청 사용자 에이전트",
- "Sync clients" : "동기화 클라이언트",
- "Android client" : "Android 클라이언트",
- "iOS client" : "iOS 클라이언트",
- "Desktop client" : "데스크톱 클라이언트",
- "User group membership" : "사용자 그룹 구성원",
- "is member of" : "구성원임",
- "is not member of" : "구성원이 아님",
"The given operator is invalid" : "지정한 연산자가 잘못됨",
"The given regular expression is invalid" : "지정한 정규 표현식이 잘못됨",
"The given file size is invalid" : "지정한 파일 크기가 잘못됨",
@@ -51,23 +12,96 @@ OC.L10N.register(
"The given start time is invalid" : "지정한 시작 시간이 올바르지 않음",
"The given end time is invalid" : "지정한 끝 시간이 올바르지 않음",
"The given group does not exist" : "지정한 그룹이 존재히지 않음",
- "Check %s is invalid or does not exist" : "검사 %s이(가) 올바르지 않거나 존재하지 않음",
+ "File" : "파일",
+ "File created" : "파일 생성됨",
+ "File updated" : "파일 업데이트됨",
+ "File renamed" : "파일 이름이 변경됨",
+ "File deleted" : "파일 삭제됨",
+ "File accessed" : "파일 접근됨",
+ "File copied" : "파일 복사됨",
+ "Tag assigned" : "태그 할당됨",
+ "%s created %s" : "%s님이 %s을(를) 생성함",
+ "%s modified %s" : "%s님이 %s을(를) 수정함",
+ "%s deleted %s" : "%s님이 %s을(를) 삭제함",
+ "%s accessed %s" : "%s님이 %s에 접근함",
+ "%s renamed %s" : "%s님이 %s의 이름을 변경함",
+ "%s copied %s" : "%s님이 %s을(를) 복사함",
+ "%s assigned %s to %s" : "%s님이 %s을(를) %s(으)로 할당함",
"Operation #%s does not exist" : "작업 #%s이(가) 존재하지 않음",
+ "Entity %s does not exist" : "엔티티 %s이 없습니다.",
+ "Entity %s is invalid" : "엔티티 %s이 유효하지 않습니다.",
+ "No events are chosen." : "선택된 이벤트 없음",
+ "Entity %s has no event %s" : "엔티티 %s은 이벤트 %s을 포함하지 않습니다.",
"Operation %s does not exist" : "작업 %s이(가) 존재하지 않음",
"Operation %s is invalid" : "작업 %s이(가) 잘못됨",
"Check %s does not exist" : "검사 %s이(가) 존재하지 않음",
"Check %s is invalid" : "검사 %s이(가) 잘못됨",
"Check #%s does not exist" : "검사 #%s이(가) 존재하지 않음",
- "Workflow" : "작업 흐름",
- "Open documentation" : "문서 열기",
- "Add rule group" : "규칙 그룹 추가",
- "Short rule description" : "짧은 규칙 설명",
- "Add rule" : "규칙 추가",
- "Reset" : "초기화",
+ "Check %s is invalid or does not exist" : "검사 %s이(가) 올바르지 않거나 존재하지 않음",
+ "Flow" : "흐름",
+ "Nextcloud workflow engine" : "Nextcloud 작업 흐름 엔진",
+ "Select a filter" : "필터 선택",
+ "Remove filter" : "필터 삭제",
+ "Folder" : "폴더",
+ "Images" : "파일",
+ "Office documents" : "오피스 문서",
+ "PDF documents" : "PDF 문서",
+ "Custom mimetype" : "사용자 mimetype",
+ "Select a file type" : "파일 타입 선택",
+ "Files WebDAV" : "파일 WebDAV",
+ "Custom URL" : "사용자 정의 URL",
+ "Select a request URL" : "요청 URL 선택",
+ "Android client" : "Android 클라이언트",
+ "iOS client" : "iOS 클라이언트",
+ "Desktop client" : "데스크톱 클라이언트",
+ "Thunderbird & Outlook addons" : "Thunderbird와 Outlook 확장 기능",
+ "Select a user agent" : "사용자 에이전트 지정",
+ "Select groups" : "그룹 선택",
+ "Groups" : "그룹",
+ "At least one event must be selected" : "적어도 하나의 이벤트는 선택해야합니다.",
+ "Add new flow" : "새 흐름 추가",
+ "The configuration is invalid" : "설정이 잘못됨",
+ "Active" : "활성화",
"Save" : "저장",
- "Saving…" : "저장 중…",
- "Loading…" : "불러오는 중…",
- "Successfully saved" : "성공적으로 저장됨",
- "File mime type" : "파일 MIME 형식"
+ "When" : "언제",
+ "and" : "그리고",
+ "Add a new filter" : "새 필터 추가",
+ "Cancel" : "취소",
+ "Delete" : "삭제",
+ "Available flows" : "사용 가능한 흐름",
+ "For details on how to write your own flow, check out the development documentation." : "어떻게 내 흐름을 작성하는지 자세히 알아보려면 개발자 문서를 참조하십시오.",
+ "More flows" : "더 많은 흐름",
+ "Browse the App Store" : "앱 스토어에서 둘러보기",
+ "Show less" : "적게 보기",
+ "Show more" : "더 보기",
+ "Configured flows" : "설정된 흐름",
+ "Your flows" : "내 흐름",
+ "No flows configured" : "설정된 흐름이 없음",
+ "matches" : "일치함",
+ "does not match" : "일치하지 않음",
+ "is" : "맞음",
+ "is not" : "아님",
+ "File name" : "파일 이름",
+ "File MIME type" : "파일 MIME 형식",
+ "File size (upload)" : "파일 크기(업로드)",
+ "less" : "작음",
+ "less or equals" : "작거나 같음",
+ "greater or equals" : "크거나 같음",
+ "greater" : "큼",
+ "Request remote address" : "요청의 원격 주소",
+ "matches IPv4" : "IPv4와 일치함",
+ "does not match IPv4" : "IPv4와 일치하지 않음",
+ "matches IPv6" : "IPv6과 일치함",
+ "does not match IPv6" : "IPv6과 일치하지 않음",
+ "File system tag" : "파일 시스템 태그",
+ "is tagged with" : "다음으로 태그됨",
+ "is not tagged with" : "다음으로 태그되지 않음",
+ "Request URL" : "요청 URL",
+ "Request time" : "요청 시간",
+ "between" : "사이",
+ "not between" : "사이에 없음",
+ "Request user agent" : "요청 사용자 에이전트",
+ "is member of" : "구성원임",
+ "is not member of" : "구성원이 아님"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/ko.json b/apps/workflowengine/l10n/ko.json
index f23a10c0690..6e05cefbbe9 100644
--- a/apps/workflowengine/l10n/ko.json
+++ b/apps/workflowengine/l10n/ko.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "저장됨",
- "Saving failed:" : "저장 실패:",
- "File MIME type" : "파일 MIME 형식",
- "is" : "맞음",
- "is not" : "아님",
- "matches" : "일치함",
- "does not match" : "일치하지 않음",
- "Example: {placeholder}" : "예: {placeholder}",
- "File size (upload)" : "파일 크기(업로드)",
- "less" : "작음",
- "less or equals" : "작거나 같음",
- "greater or equals" : "크거나 같음",
- "greater" : "큼",
- "File system tag" : "파일 시스템 태그",
- "is tagged with" : "다음으로 태그됨",
- "is not tagged with" : "다음으로 태그되지 않음",
- "Select tag…" : "태그 선택…",
- "Request remote address" : "요청의 원격 주소",
- "matches IPv4" : "IPv4와 일치함",
- "does not match IPv4" : "IPv4와 일치하지 않음",
- "matches IPv6" : "IPv6과 일치함",
- "does not match IPv6" : "IPv6과 일치하지 않음",
- "Request time" : "요청 시간",
- "between" : "사이",
- "not between" : "사이에 없음",
- "Start" : "시작",
- "End" : "끝",
- "Select timezone…" : "시간대 선택…",
- "Request URL" : "요청 URL",
- "Predefined URLs" : "사전 정의된 URL",
- "Files WebDAV" : "파일 WebDAV",
- "Request user agent" : "요청 사용자 에이전트",
- "Sync clients" : "동기화 클라이언트",
- "Android client" : "Android 클라이언트",
- "iOS client" : "iOS 클라이언트",
- "Desktop client" : "데스크톱 클라이언트",
- "User group membership" : "사용자 그룹 구성원",
- "is member of" : "구성원임",
- "is not member of" : "구성원이 아님",
"The given operator is invalid" : "지정한 연산자가 잘못됨",
"The given regular expression is invalid" : "지정한 정규 표현식이 잘못됨",
"The given file size is invalid" : "지정한 파일 크기가 잘못됨",
@@ -49,23 +10,96 @@
"The given start time is invalid" : "지정한 시작 시간이 올바르지 않음",
"The given end time is invalid" : "지정한 끝 시간이 올바르지 않음",
"The given group does not exist" : "지정한 그룹이 존재히지 않음",
- "Check %s is invalid or does not exist" : "검사 %s이(가) 올바르지 않거나 존재하지 않음",
+ "File" : "파일",
+ "File created" : "파일 생성됨",
+ "File updated" : "파일 업데이트됨",
+ "File renamed" : "파일 이름이 변경됨",
+ "File deleted" : "파일 삭제됨",
+ "File accessed" : "파일 접근됨",
+ "File copied" : "파일 복사됨",
+ "Tag assigned" : "태그 할당됨",
+ "%s created %s" : "%s님이 %s을(를) 생성함",
+ "%s modified %s" : "%s님이 %s을(를) 수정함",
+ "%s deleted %s" : "%s님이 %s을(를) 삭제함",
+ "%s accessed %s" : "%s님이 %s에 접근함",
+ "%s renamed %s" : "%s님이 %s의 이름을 변경함",
+ "%s copied %s" : "%s님이 %s을(를) 복사함",
+ "%s assigned %s to %s" : "%s님이 %s을(를) %s(으)로 할당함",
"Operation #%s does not exist" : "작업 #%s이(가) 존재하지 않음",
+ "Entity %s does not exist" : "엔티티 %s이 없습니다.",
+ "Entity %s is invalid" : "엔티티 %s이 유효하지 않습니다.",
+ "No events are chosen." : "선택된 이벤트 없음",
+ "Entity %s has no event %s" : "엔티티 %s은 이벤트 %s을 포함하지 않습니다.",
"Operation %s does not exist" : "작업 %s이(가) 존재하지 않음",
"Operation %s is invalid" : "작업 %s이(가) 잘못됨",
"Check %s does not exist" : "검사 %s이(가) 존재하지 않음",
"Check %s is invalid" : "검사 %s이(가) 잘못됨",
"Check #%s does not exist" : "검사 #%s이(가) 존재하지 않음",
- "Workflow" : "작업 흐름",
- "Open documentation" : "문서 열기",
- "Add rule group" : "규칙 그룹 추가",
- "Short rule description" : "짧은 규칙 설명",
- "Add rule" : "규칙 추가",
- "Reset" : "초기화",
+ "Check %s is invalid or does not exist" : "검사 %s이(가) 올바르지 않거나 존재하지 않음",
+ "Flow" : "흐름",
+ "Nextcloud workflow engine" : "Nextcloud 작업 흐름 엔진",
+ "Select a filter" : "필터 선택",
+ "Remove filter" : "필터 삭제",
+ "Folder" : "폴더",
+ "Images" : "파일",
+ "Office documents" : "오피스 문서",
+ "PDF documents" : "PDF 문서",
+ "Custom mimetype" : "사용자 mimetype",
+ "Select a file type" : "파일 타입 선택",
+ "Files WebDAV" : "파일 WebDAV",
+ "Custom URL" : "사용자 정의 URL",
+ "Select a request URL" : "요청 URL 선택",
+ "Android client" : "Android 클라이언트",
+ "iOS client" : "iOS 클라이언트",
+ "Desktop client" : "데스크톱 클라이언트",
+ "Thunderbird & Outlook addons" : "Thunderbird와 Outlook 확장 기능",
+ "Select a user agent" : "사용자 에이전트 지정",
+ "Select groups" : "그룹 선택",
+ "Groups" : "그룹",
+ "At least one event must be selected" : "적어도 하나의 이벤트는 선택해야합니다.",
+ "Add new flow" : "새 흐름 추가",
+ "The configuration is invalid" : "설정이 잘못됨",
+ "Active" : "활성화",
"Save" : "저장",
- "Saving…" : "저장 중…",
- "Loading…" : "불러오는 중…",
- "Successfully saved" : "성공적으로 저장됨",
- "File mime type" : "파일 MIME 형식"
+ "When" : "언제",
+ "and" : "그리고",
+ "Add a new filter" : "새 필터 추가",
+ "Cancel" : "취소",
+ "Delete" : "삭제",
+ "Available flows" : "사용 가능한 흐름",
+ "For details on how to write your own flow, check out the development documentation." : "어떻게 내 흐름을 작성하는지 자세히 알아보려면 개발자 문서를 참조하십시오.",
+ "More flows" : "더 많은 흐름",
+ "Browse the App Store" : "앱 스토어에서 둘러보기",
+ "Show less" : "적게 보기",
+ "Show more" : "더 보기",
+ "Configured flows" : "설정된 흐름",
+ "Your flows" : "내 흐름",
+ "No flows configured" : "설정된 흐름이 없음",
+ "matches" : "일치함",
+ "does not match" : "일치하지 않음",
+ "is" : "맞음",
+ "is not" : "아님",
+ "File name" : "파일 이름",
+ "File MIME type" : "파일 MIME 형식",
+ "File size (upload)" : "파일 크기(업로드)",
+ "less" : "작음",
+ "less or equals" : "작거나 같음",
+ "greater or equals" : "크거나 같음",
+ "greater" : "큼",
+ "Request remote address" : "요청의 원격 주소",
+ "matches IPv4" : "IPv4와 일치함",
+ "does not match IPv4" : "IPv4와 일치하지 않음",
+ "matches IPv6" : "IPv6과 일치함",
+ "does not match IPv6" : "IPv6과 일치하지 않음",
+ "File system tag" : "파일 시스템 태그",
+ "is tagged with" : "다음으로 태그됨",
+ "is not tagged with" : "다음으로 태그되지 않음",
+ "Request URL" : "요청 URL",
+ "Request time" : "요청 시간",
+ "between" : "사이",
+ "not between" : "사이에 없음",
+ "Request user agent" : "요청 사용자 에이전트",
+ "is member of" : "구성원임",
+ "is not member of" : "구성원이 아님"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/lt_LT.js b/apps/workflowengine/l10n/lt_LT.js
index 6736062ee1d..e7a443d4638 100644
--- a/apps/workflowengine/l10n/lt_LT.js
+++ b/apps/workflowengine/l10n/lt_LT.js
@@ -1,73 +1,116 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Įrašyta",
- "Saving failed:" : "Įrašymas nepavyko:",
- "File MIME type" : "Failo MIME tipas",
+ "The given operator is invalid" : "Nurodytas operatorius yra neteisingas",
+ "The given regular expression is invalid" : "Nurodytas reguliarusis reiškinys yra neteisingas",
+ "The given file size is invalid" : "Nurodytas failo dydis yra neteisingas",
+ "The given tag id is invalid" : "Nurodytas žymos id yra neteisingas",
+ "The given IP range is invalid" : "Nurodytas IP rėžis yra neteisingas",
+ "The given IP range is not valid for IPv4" : "Nurodytas IPv4 adresas neteisingas",
+ "The given IP range is not valid for IPv6" : "Nurodytas IPv6 adresas neteisingas",
+ "The given time span is invalid" : "Neteisingai nurodytas laiko tarpsnis",
+ "The given start time is invalid" : "Neteisingai nurodyta laiko pradžia",
+ "The given end time is invalid" : "Neteisingai nurodyta laiko pabaiga",
+ "The given group does not exist" : "Pateikta grupė neegzistuoja",
+ "File" : "Failas",
+ "File created" : "Failas sukurtas",
+ "File updated" : "Failas atnaujintas",
+ "File renamed" : "Failas pervadintas",
+ "File deleted" : "Failas ištrintas",
+ "File accessed" : "Gauta prieiga prie failo",
+ "File copied" : "Failas nukopijuotas",
+ "Tag assigned" : "Priskirta žyma",
+ "Someone" : "Kažkas",
+ "%s created %s" : "%s sukūrė %s",
+ "%s modified %s" : "%s modifikavo %s",
+ "%s deleted %s" : "%s ištrynė %s",
+ "%s accessed %s" : "%s pasiekiamas %s",
+ "%s renamed %s" : "%s pervadino %s",
+ "%s copied %s" : "%s nukopijavo %s",
+ "%s assigned %s to %s" : "%s priskyrė %s į %s",
+ "Operation #%s does not exist" : "Operacijos #%s nėra",
+ "Entity %s does not exist" : "Subjektas %s neegzistuoja",
+ "Entity %s is invalid" : "Subjektas %s yra neteisingas",
+ "No events are chosen." : "Nepasirinkta jokių įvykių.",
+ "Entity %s has no event %s" : "Subjektas %s neturi įvykių %s",
+ "Operation %s does not exist" : "Operacijos %s nėra",
+ "Operation %s is invalid" : "Neteisinga %s operacija",
+ "At least one check needs to be provided" : "Privalo būti nurodytas bent vienas patikrinimas",
+ "Invalid check provided" : "Nurodytas neteisingas payikrinimas",
+ "Check %s does not exist" : "Patikrinimas %s neegzistuoja",
+ "Check %s is invalid" : "Patikrinimas %s yra neteisingas",
+ "Check %s is not allowed with this entity" : "%s yra negalimas šiam subjektui",
+ "Check #%s does not exist" : "Patikrinimas #%s neegzistuoja",
+ "Check %s is invalid or does not exist" : "%s neteisingas arba neegzistuoja",
+ "Flow" : "Eiga",
+ "Nextcloud workflow engine" : "Nextcloud darbo eigos modulis",
+ "Select a filter" : "Pasirinkite filtrą",
+ "Select a comparator" : "Pasirinkite palyginimą",
+ "Remove filter" : "Šalinti filtrą",
+ "Folder" : "Aplankas",
+ "Images" : "Paveikslai",
+ "Office documents" : "Raštinės dokumentai",
+ "PDF documents" : "PDF dokumentai",
+ "Custom MIME type" : "Tinkintas MIME tipas",
+ "Custom mimetype" : "Tinkintas MIME tipas",
+ "Select a file type" : "Pasirinkite failo tipą",
+ "e.g. httpd/unix-directory" : "pvz., httpd/unix-directory",
+ "Please enter a valid time span" : "Įveskite teisingą laiko intervalą",
+ "Files WebDAV" : "WebDAV failai",
+ "Custom URL" : "Tinkintas URL",
+ "Select a request URL" : "Pasirinkite užklausos URL",
+ "Android client" : "Android klientas",
+ "iOS client" : "iOS klientas",
+ "Desktop client" : "Darbalaukio klientas",
+ "Thunderbird & Outlook addons" : "Thunderbird ir Outlook priedai",
+ "Custom user agent" : "Tinkintas naudotojo agentas",
+ "Select a user agent" : "Pasirinkite naudotojo agentą",
+ "Select groups" : "Pasirinkti grupes",
+ "Groups" : "Grupės",
+ "Type to search for group …" : "Rašykite norėdami ieškoti grupės…",
+ "At least one event must be selected" : "Privalo būti pasirinktas bent vienas įvykis",
+ "Add new flow" : "Pridėti naują eigą",
+ "The configuration is invalid" : "Konfigūracija yra neteisinga",
+ "Active" : "Aktyvi",
+ "Save" : "Įrašyti",
+ "When" : "Kada",
+ "and" : "ir",
+ "Add a new filter" : "Pridėti naują filtrą",
+ "Cancel" : "Atsisakyti",
+ "Delete" : "Ištrinti",
+ "Available flows" : "Prieinamos eigos",
+ "For details on how to write your own flow, check out the development documentation." : "Išsamesnę informaciją apie tai, kaip parašyti savo asmeninę eigą, rasite plėtotojo dokumentacijoje.",
+ "More flows" : "Daugiau eigų",
+ "Browse the App Store" : "Naršyti programėlių parduotuvę",
+ "Show less" : "Rodyti mažiau",
+ "Show more" : "Rodyti daugiau",
+ "Configured flows" : "Konfigūruotos eigos",
+ "Your flows" : "Jūsų eigos",
+ "matches" : "atitinka",
+ "does not match" : "neatitinka",
"is" : "yra",
"is not" : "nėra",
- "matches" : "atitinka",
- "does not match" : "nesutapo",
- "Example: {placeholder}" : "Pavyzdys: {placeholder}",
+ "File name" : "Failo pavadinimas",
+ "File MIME type" : "Failo MIME tipas",
"File size (upload)" : "Failo dydis (įkėlimas)",
"less" : "mažiau",
"less or equals" : "mažiau arba lygu",
"greater or equals" : "daugiau arba lygu",
"greater" : "daugiau",
- "File system tag" : "Failų sistemos žymė",
- "is tagged with" : "pažymėtas",
- "is not tagged with" : "nepažymėtas",
- "Select tag…" : "Pasirinkite žymę…",
- "Request remote address" : "Užklausos nutolęs adresas",
+ "Request remote address" : "Užklausti nuotolinį adresą",
"matches IPv4" : "atitinka IPv4",
"does not match IPv4" : "neatitinka IPv4",
"matches IPv6" : "atitinka IPv6",
"does not match IPv6" : "neatitinka IPv6",
+ "File system tag" : "Failų sistemos žyma",
+ "is tagged with" : "pažymėtas",
+ "is not tagged with" : "nepažymėtas",
+ "Request URL" : "Užklausos URL",
"Request time" : "Užklausos laikas",
"between" : "tarp",
"not between" : "nėra tarp",
- "Start" : "Pradžia",
- "End" : "Pabaiga",
- "Select timezone…" : "Pasirinkite laiko juostą…",
- "Request URL" : "Užklausos URL",
- "Predefined URLs" : "Apibrėžti URLs",
- "Files WebDAV" : "WebDAV failai",
- "Request user agent" : "Užklausos vartotojo agentas",
- "Sync clients" : "Sinchronizavimo klientas",
- "Android client" : "Android klientas",
- "iOS client" : "iOS klientas",
- "Desktop client" : "Darbalaukio klientas",
- "User group membership" : "Vartotojų grupių narystės",
- "is member of" : "priklauso",
- "is not member of" : "nepriklauso",
- "The given operator is invalid" : "Nurodytas operatorius yra neteisingas",
- "The given regular expression is invalid" : "Nurodyta reguliari išraiška neteisinga",
- "The given file size is invalid" : "Nurodytas failo dydis neteisingas",
- "The given tag id is invalid" : "Nurodyta žymė neteisinga",
- "The given IP range is invalid" : "Nurodytas IP rėžis nėra korektiškas",
- "The given IP range is not valid for IPv4" : "Nurodytas IPv4 adresas neteisingas",
- "The given IP range is not valid for IPv6" : "Nurodytas IPv6 adresas neteisingas",
- "The given time span is invalid" : "Neteisingai nurodytas laiko tarpsnis",
- "The given start time is invalid" : "Neteisingai nurodyta laiko pradžia",
- "The given end time is invalid" : "Neteisingai nurodyta laiko pabaiga",
- "The given group does not exist" : "Pateikta grupė neegzistuoja",
- "Check %s is invalid or does not exist" : "%s neteisingas arba neegzistuoja",
- "Operation #%s does not exist" : "Operacijos #%s nėra",
- "Operation %s does not exist" : "Operacijos %s nėra",
- "Operation %s is invalid" : "Neteisinga %s operacija",
- "Check %s does not exist" : "%s neegzistuoja",
- "Check %s is invalid" : "Neteisingas %s",
- "Check #%s does not exist" : "#%s neegzistuoja",
- "Workflow" : "Darbo eiga",
- "Open documentation" : "Atverti dokumentaciją",
- "Add rule group" : "Pridėti taisyklių grupę",
- "Short rule description" : "Rodyti taisyklės aprašymą",
- "Add rule" : "Pridėti taisyklę",
- "Reset" : "Atstatyti",
- "Save" : "Įrašyti",
- "Saving…" : "Įrašoma…",
- "Loading…" : "Įkeliama…",
- "Successfully saved" : "Sėkmingai įrašyta",
- "File mime type" : "Failo mime tipas"
+ "Request user agent" : "Užklausti naudotojo agentą",
+ "is member of" : "priklauso grupei",
+ "is not member of" : "nepriklauso grupei"
},
-"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);");
+"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/workflowengine/l10n/lt_LT.json b/apps/workflowengine/l10n/lt_LT.json
index 08f898d7153..4eb679fe493 100644
--- a/apps/workflowengine/l10n/lt_LT.json
+++ b/apps/workflowengine/l10n/lt_LT.json
@@ -1,71 +1,114 @@
{ "translations": {
- "Saved" : "Įrašyta",
- "Saving failed:" : "Įrašymas nepavyko:",
- "File MIME type" : "Failo MIME tipas",
+ "The given operator is invalid" : "Nurodytas operatorius yra neteisingas",
+ "The given regular expression is invalid" : "Nurodytas reguliarusis reiškinys yra neteisingas",
+ "The given file size is invalid" : "Nurodytas failo dydis yra neteisingas",
+ "The given tag id is invalid" : "Nurodytas žymos id yra neteisingas",
+ "The given IP range is invalid" : "Nurodytas IP rėžis yra neteisingas",
+ "The given IP range is not valid for IPv4" : "Nurodytas IPv4 adresas neteisingas",
+ "The given IP range is not valid for IPv6" : "Nurodytas IPv6 adresas neteisingas",
+ "The given time span is invalid" : "Neteisingai nurodytas laiko tarpsnis",
+ "The given start time is invalid" : "Neteisingai nurodyta laiko pradžia",
+ "The given end time is invalid" : "Neteisingai nurodyta laiko pabaiga",
+ "The given group does not exist" : "Pateikta grupė neegzistuoja",
+ "File" : "Failas",
+ "File created" : "Failas sukurtas",
+ "File updated" : "Failas atnaujintas",
+ "File renamed" : "Failas pervadintas",
+ "File deleted" : "Failas ištrintas",
+ "File accessed" : "Gauta prieiga prie failo",
+ "File copied" : "Failas nukopijuotas",
+ "Tag assigned" : "Priskirta žyma",
+ "Someone" : "Kažkas",
+ "%s created %s" : "%s sukūrė %s",
+ "%s modified %s" : "%s modifikavo %s",
+ "%s deleted %s" : "%s ištrynė %s",
+ "%s accessed %s" : "%s pasiekiamas %s",
+ "%s renamed %s" : "%s pervadino %s",
+ "%s copied %s" : "%s nukopijavo %s",
+ "%s assigned %s to %s" : "%s priskyrė %s į %s",
+ "Operation #%s does not exist" : "Operacijos #%s nėra",
+ "Entity %s does not exist" : "Subjektas %s neegzistuoja",
+ "Entity %s is invalid" : "Subjektas %s yra neteisingas",
+ "No events are chosen." : "Nepasirinkta jokių įvykių.",
+ "Entity %s has no event %s" : "Subjektas %s neturi įvykių %s",
+ "Operation %s does not exist" : "Operacijos %s nėra",
+ "Operation %s is invalid" : "Neteisinga %s operacija",
+ "At least one check needs to be provided" : "Privalo būti nurodytas bent vienas patikrinimas",
+ "Invalid check provided" : "Nurodytas neteisingas payikrinimas",
+ "Check %s does not exist" : "Patikrinimas %s neegzistuoja",
+ "Check %s is invalid" : "Patikrinimas %s yra neteisingas",
+ "Check %s is not allowed with this entity" : "%s yra negalimas šiam subjektui",
+ "Check #%s does not exist" : "Patikrinimas #%s neegzistuoja",
+ "Check %s is invalid or does not exist" : "%s neteisingas arba neegzistuoja",
+ "Flow" : "Eiga",
+ "Nextcloud workflow engine" : "Nextcloud darbo eigos modulis",
+ "Select a filter" : "Pasirinkite filtrą",
+ "Select a comparator" : "Pasirinkite palyginimą",
+ "Remove filter" : "Šalinti filtrą",
+ "Folder" : "Aplankas",
+ "Images" : "Paveikslai",
+ "Office documents" : "Raštinės dokumentai",
+ "PDF documents" : "PDF dokumentai",
+ "Custom MIME type" : "Tinkintas MIME tipas",
+ "Custom mimetype" : "Tinkintas MIME tipas",
+ "Select a file type" : "Pasirinkite failo tipą",
+ "e.g. httpd/unix-directory" : "pvz., httpd/unix-directory",
+ "Please enter a valid time span" : "Įveskite teisingą laiko intervalą",
+ "Files WebDAV" : "WebDAV failai",
+ "Custom URL" : "Tinkintas URL",
+ "Select a request URL" : "Pasirinkite užklausos URL",
+ "Android client" : "Android klientas",
+ "iOS client" : "iOS klientas",
+ "Desktop client" : "Darbalaukio klientas",
+ "Thunderbird & Outlook addons" : "Thunderbird ir Outlook priedai",
+ "Custom user agent" : "Tinkintas naudotojo agentas",
+ "Select a user agent" : "Pasirinkite naudotojo agentą",
+ "Select groups" : "Pasirinkti grupes",
+ "Groups" : "Grupės",
+ "Type to search for group …" : "Rašykite norėdami ieškoti grupės…",
+ "At least one event must be selected" : "Privalo būti pasirinktas bent vienas įvykis",
+ "Add new flow" : "Pridėti naują eigą",
+ "The configuration is invalid" : "Konfigūracija yra neteisinga",
+ "Active" : "Aktyvi",
+ "Save" : "Įrašyti",
+ "When" : "Kada",
+ "and" : "ir",
+ "Add a new filter" : "Pridėti naują filtrą",
+ "Cancel" : "Atsisakyti",
+ "Delete" : "Ištrinti",
+ "Available flows" : "Prieinamos eigos",
+ "For details on how to write your own flow, check out the development documentation." : "Išsamesnę informaciją apie tai, kaip parašyti savo asmeninę eigą, rasite plėtotojo dokumentacijoje.",
+ "More flows" : "Daugiau eigų",
+ "Browse the App Store" : "Naršyti programėlių parduotuvę",
+ "Show less" : "Rodyti mažiau",
+ "Show more" : "Rodyti daugiau",
+ "Configured flows" : "Konfigūruotos eigos",
+ "Your flows" : "Jūsų eigos",
+ "matches" : "atitinka",
+ "does not match" : "neatitinka",
"is" : "yra",
"is not" : "nėra",
- "matches" : "atitinka",
- "does not match" : "nesutapo",
- "Example: {placeholder}" : "Pavyzdys: {placeholder}",
+ "File name" : "Failo pavadinimas",
+ "File MIME type" : "Failo MIME tipas",
"File size (upload)" : "Failo dydis (įkėlimas)",
"less" : "mažiau",
"less or equals" : "mažiau arba lygu",
"greater or equals" : "daugiau arba lygu",
"greater" : "daugiau",
- "File system tag" : "Failų sistemos žymė",
- "is tagged with" : "pažymėtas",
- "is not tagged with" : "nepažymėtas",
- "Select tag…" : "Pasirinkite žymę…",
- "Request remote address" : "Užklausos nutolęs adresas",
+ "Request remote address" : "Užklausti nuotolinį adresą",
"matches IPv4" : "atitinka IPv4",
"does not match IPv4" : "neatitinka IPv4",
"matches IPv6" : "atitinka IPv6",
"does not match IPv6" : "neatitinka IPv6",
+ "File system tag" : "Failų sistemos žyma",
+ "is tagged with" : "pažymėtas",
+ "is not tagged with" : "nepažymėtas",
+ "Request URL" : "Užklausos URL",
"Request time" : "Užklausos laikas",
"between" : "tarp",
"not between" : "nėra tarp",
- "Start" : "Pradžia",
- "End" : "Pabaiga",
- "Select timezone…" : "Pasirinkite laiko juostą…",
- "Request URL" : "Užklausos URL",
- "Predefined URLs" : "Apibrėžti URLs",
- "Files WebDAV" : "WebDAV failai",
- "Request user agent" : "Užklausos vartotojo agentas",
- "Sync clients" : "Sinchronizavimo klientas",
- "Android client" : "Android klientas",
- "iOS client" : "iOS klientas",
- "Desktop client" : "Darbalaukio klientas",
- "User group membership" : "Vartotojų grupių narystės",
- "is member of" : "priklauso",
- "is not member of" : "nepriklauso",
- "The given operator is invalid" : "Nurodytas operatorius yra neteisingas",
- "The given regular expression is invalid" : "Nurodyta reguliari išraiška neteisinga",
- "The given file size is invalid" : "Nurodytas failo dydis neteisingas",
- "The given tag id is invalid" : "Nurodyta žymė neteisinga",
- "The given IP range is invalid" : "Nurodytas IP rėžis nėra korektiškas",
- "The given IP range is not valid for IPv4" : "Nurodytas IPv4 adresas neteisingas",
- "The given IP range is not valid for IPv6" : "Nurodytas IPv6 adresas neteisingas",
- "The given time span is invalid" : "Neteisingai nurodytas laiko tarpsnis",
- "The given start time is invalid" : "Neteisingai nurodyta laiko pradžia",
- "The given end time is invalid" : "Neteisingai nurodyta laiko pabaiga",
- "The given group does not exist" : "Pateikta grupė neegzistuoja",
- "Check %s is invalid or does not exist" : "%s neteisingas arba neegzistuoja",
- "Operation #%s does not exist" : "Operacijos #%s nėra",
- "Operation %s does not exist" : "Operacijos %s nėra",
- "Operation %s is invalid" : "Neteisinga %s operacija",
- "Check %s does not exist" : "%s neegzistuoja",
- "Check %s is invalid" : "Neteisingas %s",
- "Check #%s does not exist" : "#%s neegzistuoja",
- "Workflow" : "Darbo eiga",
- "Open documentation" : "Atverti dokumentaciją",
- "Add rule group" : "Pridėti taisyklių grupę",
- "Short rule description" : "Rodyti taisyklės aprašymą",
- "Add rule" : "Pridėti taisyklę",
- "Reset" : "Atstatyti",
- "Save" : "Įrašyti",
- "Saving…" : "Įrašoma…",
- "Loading…" : "Įkeliama…",
- "Successfully saved" : "Sėkmingai įrašyta",
- "File mime type" : "Failo mime tipas"
-},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"
+ "Request user agent" : "Užklausti naudotojo agentą",
+ "is member of" : "priklauso grupei",
+ "is not member of" : "nepriklauso grupei"
+},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/lv.js b/apps/workflowengine/l10n/lv.js
index 24cbf9478c0..30577193c0a 100644
--- a/apps/workflowengine/l10n/lv.js
+++ b/apps/workflowengine/l10n/lv.js
@@ -1,48 +1,9 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Saglabāts",
- "Saving failed:" : "Saglabāšana neizdevās:",
- "File MIME type" : "Faila MIME tips",
- "is" : "ir",
- "is not" : "nav",
- "matches" : "atbilst",
- "does not match" : "neatbilst",
- "Example: {placeholder}" : "Piemērs: {placeholder}",
- "File size (upload)" : "Faila lielums (augšupielādēt)",
- "less" : "mazāk",
- "less or equals" : "mazāks vai vienāds ar",
- "greater or equals" : "lielāks vai vienāds ar",
- "greater" : "lielāks",
- "File system tag" : "Failu sistēmas atzīme",
- "is tagged with" : "atzīmēts ar",
- "is not tagged with" : "nav atzīmēts ar",
- "Select tag…" : "Izvēlies atzīmi...",
- "Request remote address" : "Pieprasīt attālo adresi",
- "matches IPv4" : "atbilst IPv4",
- "does not match IPv4" : "neatbilst IPv4",
- "matches IPv6" : "atbilst IPv6",
- "does not match IPv6" : "neatbilst IPv6",
- "Request time" : "Pieprasījuma laiks",
- "between" : "starp",
- "not between" : "nav starp",
- "Start" : "Sākums",
- "End" : "Beigas",
- "Select timezone…" : "Izvēlieties laika joslu...",
- "Request URL" : "Pieprasījuma URL",
- "Predefined URLs" : "Standarta URLs",
- "Files WebDAV" : "WebDAV faili",
- "Request user agent" : "Nepieciešams lietotāja aģents",
- "Sync clients" : "Sync klients",
- "Android client" : "Android klients",
- "iOS client" : "iOS klients",
- "Desktop client" : "Darbvirsmas klients",
- "User group membership" : "Lietotāju grupas piederība",
- "is member of" : "ir biedrs",
- "is not member of" : "nav biedrs",
"The given operator is invalid" : "Norādītais operators ir nederīgs",
"The given regular expression is invalid" : "Norādītā regulārā izteiksme nav derīga.",
- "The given file size is invalid" : "Norādītais faila formāts nav derīgs",
+ "The given file size is invalid" : "Norādītais datnes formāts nav derīgs",
"The given tag id is invalid" : "Norādītais birkas id ir nederīgs",
"The given IP range is invalid" : "Norādītais IP diapazons ir nederīgs",
"The given IP range is not valid for IPv4" : "Norādītais IP diapazons nav derīgs IPv4",
@@ -51,23 +12,59 @@ OC.L10N.register(
"The given start time is invalid" : "Dotais sākuma laiks ir nederīgs",
"The given end time is invalid" : "Norādītais beigu laiks nav derīgs.",
"The given group does not exist" : "Norādītā grupa nepastāv.",
- "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "File" : "Datne",
+ "File renamed" : "Datne pārdēvēta",
+ "%s renamed %s" : "%s pārdēvēja %s",
"Operation #%s does not exist" : "Operation #%s does not exist",
- "Operation %s does not exist" : "Darbība %s neeksistē",
+ "Operation %s does not exist" : "Darbība %s nepastāv",
"Operation %s is invalid" : "Darbība %s ir nederīga",
"Check %s does not exist" : "Pārbaude %s nepastāv",
"Check %s is invalid" : "Pārbaude %s ir nederīga",
"Check #%s does not exist" : "Pārbaude #%s nepastāv",
- "Workflow" : "Darbplūsma",
- "Open documentation" : "Atvērt dokumentāciju",
- "Add rule group" : "Pievienot kārtulu grupas",
- "Short rule description" : "Īss kārtulas apraksts",
- "Add rule" : "Pievienot kārtulu",
- "Reset" : "Atiestatīt",
+ "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "Flow" : "Plūsma",
+ "Nextcloud workflow engine" : "Nextcloud darbplūsmu dzinis",
+ "Folder" : "Mape",
+ "Images" : "Attēli",
+ "Files WebDAV" : "Datņu WebDAV",
+ "Android client" : "Android klients",
+ "iOS client" : "iOS klients",
+ "Desktop client" : "Darbvirsmas klients",
+ "Select groups" : "Izvēlieties grupas",
+ "Groups" : "Grupas",
+ "Add new flow" : "Pievienot jaunu plūsmu",
"Save" : "Saglabāt",
- "Saving…" : "Saglabā...",
- "Loading…" : "Ielādē …",
- "Successfully saved" : "Veiksmīgi saglabāts",
- "File mime type" : "Faila MIME tips"
+ "Cancel" : "Atcelt",
+ "Delete" : "Izdzēst",
+ "Available flows" : "Pieejamās plūsmas",
+ "No flows installed" : "Nav uzstādītu plūsmu",
+ "More flows" : "Vairāk plūsmu",
+ "Show more" : "Parādīt vairāk",
+ "matches" : "atbilst",
+ "does not match" : "neatbilst",
+ "is" : "ir",
+ "is not" : "nav",
+ "File name" : "Datnes nosaukums",
+ "File MIME type" : "Datnes MIME veids",
+ "File size (upload)" : "Datnes lielums (augšupielādēt)",
+ "less" : "mazāk",
+ "less or equals" : "mazāks vai vienāds ar",
+ "greater or equals" : "lielāks vai vienāds ar",
+ "greater" : "lielāks",
+ "Request remote address" : "Pieprasīt attālo adresi",
+ "matches IPv4" : "atbilst IPv4",
+ "does not match IPv4" : "neatbilst IPv4",
+ "matches IPv6" : "atbilst IPv6",
+ "does not match IPv6" : "neatbilst IPv6",
+ "File system tag" : "Datņu sistēmas birka",
+ "is tagged with" : "atzīmēts ar",
+ "is not tagged with" : "nav atzīmēts ar",
+ "Request URL" : "Pieprasījuma URL",
+ "Request time" : "Pieprasījuma laiks",
+ "between" : "starp",
+ "not between" : "nav starp",
+ "Request user agent" : "Nepieciešams lietotāja aģents",
+ "is member of" : "ir biedrs",
+ "is not member of" : "nav dalībnieks"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");
diff --git a/apps/workflowengine/l10n/lv.json b/apps/workflowengine/l10n/lv.json
index f8b0e62b78b..1665558a6fc 100644
--- a/apps/workflowengine/l10n/lv.json
+++ b/apps/workflowengine/l10n/lv.json
@@ -1,46 +1,7 @@
{ "translations": {
- "Saved" : "Saglabāts",
- "Saving failed:" : "Saglabāšana neizdevās:",
- "File MIME type" : "Faila MIME tips",
- "is" : "ir",
- "is not" : "nav",
- "matches" : "atbilst",
- "does not match" : "neatbilst",
- "Example: {placeholder}" : "Piemērs: {placeholder}",
- "File size (upload)" : "Faila lielums (augšupielādēt)",
- "less" : "mazāk",
- "less or equals" : "mazāks vai vienāds ar",
- "greater or equals" : "lielāks vai vienāds ar",
- "greater" : "lielāks",
- "File system tag" : "Failu sistēmas atzīme",
- "is tagged with" : "atzīmēts ar",
- "is not tagged with" : "nav atzīmēts ar",
- "Select tag…" : "Izvēlies atzīmi...",
- "Request remote address" : "Pieprasīt attālo adresi",
- "matches IPv4" : "atbilst IPv4",
- "does not match IPv4" : "neatbilst IPv4",
- "matches IPv6" : "atbilst IPv6",
- "does not match IPv6" : "neatbilst IPv6",
- "Request time" : "Pieprasījuma laiks",
- "between" : "starp",
- "not between" : "nav starp",
- "Start" : "Sākums",
- "End" : "Beigas",
- "Select timezone…" : "Izvēlieties laika joslu...",
- "Request URL" : "Pieprasījuma URL",
- "Predefined URLs" : "Standarta URLs",
- "Files WebDAV" : "WebDAV faili",
- "Request user agent" : "Nepieciešams lietotāja aģents",
- "Sync clients" : "Sync klients",
- "Android client" : "Android klients",
- "iOS client" : "iOS klients",
- "Desktop client" : "Darbvirsmas klients",
- "User group membership" : "Lietotāju grupas piederība",
- "is member of" : "ir biedrs",
- "is not member of" : "nav biedrs",
"The given operator is invalid" : "Norādītais operators ir nederīgs",
"The given regular expression is invalid" : "Norādītā regulārā izteiksme nav derīga.",
- "The given file size is invalid" : "Norādītais faila formāts nav derīgs",
+ "The given file size is invalid" : "Norādītais datnes formāts nav derīgs",
"The given tag id is invalid" : "Norādītais birkas id ir nederīgs",
"The given IP range is invalid" : "Norādītais IP diapazons ir nederīgs",
"The given IP range is not valid for IPv4" : "Norādītais IP diapazons nav derīgs IPv4",
@@ -49,23 +10,59 @@
"The given start time is invalid" : "Dotais sākuma laiks ir nederīgs",
"The given end time is invalid" : "Norādītais beigu laiks nav derīgs.",
"The given group does not exist" : "Norādītā grupa nepastāv.",
- "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "File" : "Datne",
+ "File renamed" : "Datne pārdēvēta",
+ "%s renamed %s" : "%s pārdēvēja %s",
"Operation #%s does not exist" : "Operation #%s does not exist",
- "Operation %s does not exist" : "Darbība %s neeksistē",
+ "Operation %s does not exist" : "Darbība %s nepastāv",
"Operation %s is invalid" : "Darbība %s ir nederīga",
"Check %s does not exist" : "Pārbaude %s nepastāv",
"Check %s is invalid" : "Pārbaude %s ir nederīga",
"Check #%s does not exist" : "Pārbaude #%s nepastāv",
- "Workflow" : "Darbplūsma",
- "Open documentation" : "Atvērt dokumentāciju",
- "Add rule group" : "Pievienot kārtulu grupas",
- "Short rule description" : "Īss kārtulas apraksts",
- "Add rule" : "Pievienot kārtulu",
- "Reset" : "Atiestatīt",
+ "Check %s is invalid or does not exist" : "Pārbaude %s ir nederīga vai nepastāv",
+ "Flow" : "Plūsma",
+ "Nextcloud workflow engine" : "Nextcloud darbplūsmu dzinis",
+ "Folder" : "Mape",
+ "Images" : "Attēli",
+ "Files WebDAV" : "Datņu WebDAV",
+ "Android client" : "Android klients",
+ "iOS client" : "iOS klients",
+ "Desktop client" : "Darbvirsmas klients",
+ "Select groups" : "Izvēlieties grupas",
+ "Groups" : "Grupas",
+ "Add new flow" : "Pievienot jaunu plūsmu",
"Save" : "Saglabāt",
- "Saving…" : "Saglabā...",
- "Loading…" : "Ielādē …",
- "Successfully saved" : "Veiksmīgi saglabāts",
- "File mime type" : "Faila MIME tips"
+ "Cancel" : "Atcelt",
+ "Delete" : "Izdzēst",
+ "Available flows" : "Pieejamās plūsmas",
+ "No flows installed" : "Nav uzstādītu plūsmu",
+ "More flows" : "Vairāk plūsmu",
+ "Show more" : "Parādīt vairāk",
+ "matches" : "atbilst",
+ "does not match" : "neatbilst",
+ "is" : "ir",
+ "is not" : "nav",
+ "File name" : "Datnes nosaukums",
+ "File MIME type" : "Datnes MIME veids",
+ "File size (upload)" : "Datnes lielums (augšupielādēt)",
+ "less" : "mazāk",
+ "less or equals" : "mazāks vai vienāds ar",
+ "greater or equals" : "lielāks vai vienāds ar",
+ "greater" : "lielāks",
+ "Request remote address" : "Pieprasīt attālo adresi",
+ "matches IPv4" : "atbilst IPv4",
+ "does not match IPv4" : "neatbilst IPv4",
+ "matches IPv6" : "atbilst IPv6",
+ "does not match IPv6" : "neatbilst IPv6",
+ "File system tag" : "Datņu sistēmas birka",
+ "is tagged with" : "atzīmēts ar",
+ "is not tagged with" : "nav atzīmēts ar",
+ "Request URL" : "Pieprasījuma URL",
+ "Request time" : "Pieprasījuma laiks",
+ "between" : "starp",
+ "not between" : "nav starp",
+ "Request user agent" : "Nepieciešams lietotāja aģents",
+ "is member of" : "ir biedrs",
+ "is not member of" : "nav dalībnieks"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/mk.js b/apps/workflowengine/l10n/mk.js
new file mode 100644
index 00000000000..a7f641f0aff
--- /dev/null
+++ b/apps/workflowengine/l10n/mk.js
@@ -0,0 +1,100 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Зададениот оператор не е валиден",
+ "The given regular expression is invalid" : "Зададеното регуларно изразување е невалидно",
+ "The given file size is invalid" : "Зададената големина на датотека е невалидна",
+ "The given tag id is invalid" : "Зададениот ИД за ознака е невалиден",
+ "The given IP range is invalid" : "Зададениот ИП опсег е невалиден",
+ "The given IP range is not valid for IPv4" : "Зададениот ИП опсег е невалиден за IPv4",
+ "The given IP range is not valid for IPv6" : "Зададениот ИП опсег е невалиден за IPv6",
+ "The given time span is invalid" : "Зададениот временски опсег е невалиден",
+ "The given start time is invalid" : "Зададеното почетно време е невалидно",
+ "The given end time is invalid" : "Зададеното завршно време е невалидно",
+ "The given group does not exist" : "Зададената група не постои",
+ "File" : "Датотека",
+ "File created" : "Датотека е креирана",
+ "File updated" : "Датотека е прикачена",
+ "File renamed" : "Датотека е преименувана",
+ "File deleted" : "Датотека е избришана",
+ "File accessed" : "Пристапено до датотека",
+ "File copied" : "Датотека е копирана",
+ "Tag assigned" : "Доделена ознака",
+ "Someone" : "Некој",
+ "%s created %s" : "%s креираше%s",
+ "%s modified %s" : "%s измени %s",
+ "%s deleted %s" : "%s избриша %s",
+ "%s accessed %s" : "%s пристапи %s",
+ "%s renamed %s" : "%s преименува %s",
+ "%s copied %s" : "%s копираше %s",
+ "%s assigned %s to %s" : "%s пристапи %s до %s",
+ "Operation #%s does not exist" : "Операцијата #%s не постои",
+ "Entity %s does not exist" : "Субјектот %s не постои",
+ "Entity %s is invalid" : "Субјектот %s е невалиден",
+ "No events are chosen." : "Не е избран настан.",
+ "Entity %s has no event %s" : "Субјектот %s нема настан %s",
+ "Operation %s does not exist" : "Операцијата %s не постои",
+ "Operation %s is invalid" : "Операцијата %s е невалидна",
+ "Flow" : "Проток",
+ "Select a filter" : "Изберете филтер",
+ "Select a comparator" : "Изберете компаратор",
+ "Remove filter" : "Острани филтер",
+ "Folder" : "Папка",
+ "Images" : "Слики",
+ "Office documents" : "Office документи",
+ "PDF documents" : "PDF документи",
+ "Custom mimetype" : "Прилагоден тип на датотеки",
+ "Select a file type" : "Изберете вид на датотека",
+ "e.g. httpd/unix-directory" : "Пр. httpd/unix-directory",
+ "Please enter a valid time span" : "Внесете валиден времески осег",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за компјутер",
+ "Select groups" : "Одбери групи",
+ "Groups" : "Групи",
+ "Select a trigger" : "Избери активатор",
+ "At least one event must be selected" : "Најмалку едно мора да биде означено",
+ "Add new flow" : "Додади нов проток",
+ "Active" : "Активно",
+ "Save" : "Зачувај",
+ "When" : "Кога",
+ "and" : "и",
+ "Add a new filter" : "Додади нов филтер",
+ "Cancel" : "Откажи",
+ "Delete" : "Избриши",
+ "Available flows" : "Достапни протоци",
+ "For details on how to write your own flow, check out the development documentation." : "За детали како да пишувате ваши сопствени протоци, посетете ја документацијата за развивачи.",
+ "More flows" : "Повеќе протоци",
+ "Browse the App Store" : "Прелистајте во продавницата со апликации",
+ "Show less" : "Помалку",
+ "Show more" : "Прикажи повеќе",
+ "Configured flows" : "Конфигурирани протоци",
+ "Your flows" : "Ваши протоци",
+ "matches" : "се совпаѓа",
+ "does not match" : "не се совпаѓа",
+ "is" : "е",
+ "is not" : "не е",
+ "File name" : "Име на датотека",
+ "File MIME type" : "Вид на датотека",
+ "File size (upload)" : "Големина на датотека (прикачи)",
+ "less" : "помалку",
+ "less or equals" : "помалку или еднакво",
+ "greater or equals" : "поголемо или еднакво",
+ "greater" : "поголемо",
+ "Request remote address" : "Барање од надворешна адреса",
+ "matches IPv4" : "се совпаѓањаат IPv4",
+ "does not match IPv4" : "не се совпаѓаат IPv4",
+ "matches IPv6" : "се совпаѓањаат IPv6",
+ "does not match IPv6" : "не се совпаѓаат IPv6",
+ "File system tag" : "Датотека со системска ознака",
+ "is tagged with" : "е означена со",
+ "is not tagged with" : "не е означена со",
+ "Request URL" : "Барање URL",
+ "Request time" : "Време на барање",
+ "between" : "помеѓу",
+ "not between" : "не помеѓу",
+ "Request user agent" : "Барање од кориснички агент",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на"
+},
+"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");
diff --git a/apps/workflowengine/l10n/mk.json b/apps/workflowengine/l10n/mk.json
new file mode 100644
index 00000000000..f2ef7213da4
--- /dev/null
+++ b/apps/workflowengine/l10n/mk.json
@@ -0,0 +1,98 @@
+{ "translations": {
+ "The given operator is invalid" : "Зададениот оператор не е валиден",
+ "The given regular expression is invalid" : "Зададеното регуларно изразување е невалидно",
+ "The given file size is invalid" : "Зададената големина на датотека е невалидна",
+ "The given tag id is invalid" : "Зададениот ИД за ознака е невалиден",
+ "The given IP range is invalid" : "Зададениот ИП опсег е невалиден",
+ "The given IP range is not valid for IPv4" : "Зададениот ИП опсег е невалиден за IPv4",
+ "The given IP range is not valid for IPv6" : "Зададениот ИП опсег е невалиден за IPv6",
+ "The given time span is invalid" : "Зададениот временски опсег е невалиден",
+ "The given start time is invalid" : "Зададеното почетно време е невалидно",
+ "The given end time is invalid" : "Зададеното завршно време е невалидно",
+ "The given group does not exist" : "Зададената група не постои",
+ "File" : "Датотека",
+ "File created" : "Датотека е креирана",
+ "File updated" : "Датотека е прикачена",
+ "File renamed" : "Датотека е преименувана",
+ "File deleted" : "Датотека е избришана",
+ "File accessed" : "Пристапено до датотека",
+ "File copied" : "Датотека е копирана",
+ "Tag assigned" : "Доделена ознака",
+ "Someone" : "Некој",
+ "%s created %s" : "%s креираше%s",
+ "%s modified %s" : "%s измени %s",
+ "%s deleted %s" : "%s избриша %s",
+ "%s accessed %s" : "%s пристапи %s",
+ "%s renamed %s" : "%s преименува %s",
+ "%s copied %s" : "%s копираше %s",
+ "%s assigned %s to %s" : "%s пристапи %s до %s",
+ "Operation #%s does not exist" : "Операцијата #%s не постои",
+ "Entity %s does not exist" : "Субјектот %s не постои",
+ "Entity %s is invalid" : "Субјектот %s е невалиден",
+ "No events are chosen." : "Не е избран настан.",
+ "Entity %s has no event %s" : "Субјектот %s нема настан %s",
+ "Operation %s does not exist" : "Операцијата %s не постои",
+ "Operation %s is invalid" : "Операцијата %s е невалидна",
+ "Flow" : "Проток",
+ "Select a filter" : "Изберете филтер",
+ "Select a comparator" : "Изберете компаратор",
+ "Remove filter" : "Острани филтер",
+ "Folder" : "Папка",
+ "Images" : "Слики",
+ "Office documents" : "Office документи",
+ "PDF documents" : "PDF документи",
+ "Custom mimetype" : "Прилагоден тип на датотеки",
+ "Select a file type" : "Изберете вид на датотека",
+ "e.g. httpd/unix-directory" : "Пр. httpd/unix-directory",
+ "Please enter a valid time span" : "Внесете валиден времески осег",
+ "Android client" : "Android клиент",
+ "iOS client" : "iOS клиент",
+ "Desktop client" : "Клиент за компјутер",
+ "Select groups" : "Одбери групи",
+ "Groups" : "Групи",
+ "Select a trigger" : "Избери активатор",
+ "At least one event must be selected" : "Најмалку едно мора да биде означено",
+ "Add new flow" : "Додади нов проток",
+ "Active" : "Активно",
+ "Save" : "Зачувај",
+ "When" : "Кога",
+ "and" : "и",
+ "Add a new filter" : "Додади нов филтер",
+ "Cancel" : "Откажи",
+ "Delete" : "Избриши",
+ "Available flows" : "Достапни протоци",
+ "For details on how to write your own flow, check out the development documentation." : "За детали како да пишувате ваши сопствени протоци, посетете ја документацијата за развивачи.",
+ "More flows" : "Повеќе протоци",
+ "Browse the App Store" : "Прелистајте во продавницата со апликации",
+ "Show less" : "Помалку",
+ "Show more" : "Прикажи повеќе",
+ "Configured flows" : "Конфигурирани протоци",
+ "Your flows" : "Ваши протоци",
+ "matches" : "се совпаѓа",
+ "does not match" : "не се совпаѓа",
+ "is" : "е",
+ "is not" : "не е",
+ "File name" : "Име на датотека",
+ "File MIME type" : "Вид на датотека",
+ "File size (upload)" : "Големина на датотека (прикачи)",
+ "less" : "помалку",
+ "less or equals" : "помалку или еднакво",
+ "greater or equals" : "поголемо или еднакво",
+ "greater" : "поголемо",
+ "Request remote address" : "Барање од надворешна адреса",
+ "matches IPv4" : "се совпаѓањаат IPv4",
+ "does not match IPv4" : "не се совпаѓаат IPv4",
+ "matches IPv6" : "се совпаѓањаат IPv6",
+ "does not match IPv6" : "не се совпаѓаат IPv6",
+ "File system tag" : "Датотека со системска ознака",
+ "is tagged with" : "е означена со",
+ "is not tagged with" : "не е означена со",
+ "Request URL" : "Барање URL",
+ "Request time" : "Време на барање",
+ "between" : "помеѓу",
+ "not between" : "не помеѓу",
+ "Request user agent" : "Барање од кориснички агент",
+ "is member of" : "е член на",
+ "is not member of" : "не е член на"
+},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/mn.js b/apps/workflowengine/l10n/mn.js
deleted file mode 100644
index 6848919a6b7..00000000000
--- a/apps/workflowengine/l10n/mn.js
+++ /dev/null
@@ -1,66 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "Хадгалсан",
- "Saving failed:" : "Хадгалалт бүтэлгүйтэв:",
- "File MIME type" : "Файлын MIME төрөл",
- "is" : "бол",
- "is not" : "биш",
- "matches" : "тохируулах",
- "does not match" : "таарахгүй байна",
- "Example: {placeholder}" : "Жишээ нь: {байрлал}",
- "File size (upload)" : "файлын хэмжээ (байршуулсан)",
- "less" : "бага",
- "less or equals" : "Бага буюу тэнцүү",
- "greater or equals" : "Их буюу тэнцүү",
- "greater" : "илүү их",
- "File system tag" : "Файлын системийн хаяг",
- "is tagged with" : "Тэмдэглэгдсэн байна",
- "is not tagged with" : "тэмдэглэгдээгүй байна",
- "Select tag…" : "хаяг сонгоно уу",
- "Request remote address" : "алсын хаяг авах хүсэлт",
- "matches IPv4" : "IPv4 тохируулах ",
- "does not match IPv4" : "IPv4 тохируулагдаагүй байна",
- "matches IPv6" : "IPv6 тохируулах ",
- "does not match IPv6" : "IPv6 тохируулагдаанүй байна",
- "Request time" : "Хүсэлт гаргах хугацаа",
- "between" : "хооронд",
- "not between" : "Хооронд биш",
- "Start" : "эхлэх",
- "End" : "дуусгах",
- "Select timezone…" : "Timezone сонго ...",
- "Request URL" : "URL-н хүсэлт",
- "Predefined URLs" : "Урьдчилан тодорхойлсон URLууд",
- "Files WebDAV" : "WebDAV файлууд",
- "Android client" : "Android хэрэглэгч",
- "iOS client" : "iOS үйлчлүүлэгч",
- "Desktop client" : "захиалагчийн дэлгэц",
- "User group membership" : "хэрэглэгчийн бүлгийн гишүүнчлэл",
- "is member of" : "-ын гишүүн ",
- "is not member of" : "-ын гишүүн биш",
- "The given operator is invalid" : "Өгөгдсөн оператор буруу байна",
- "The given regular expression is invalid" : "Өгөгдсөн тогтмол илэрхийлэл буруу байна",
- "The given file size is invalid" : "Өгөгдсөн файлын хэмжээ буруу байна",
- "The given tag id is invalid" : "Өгөгдсөн шошго буруу байна",
- "The given IP range is invalid" : "Өгөгдсөн IP хязгаар буруу байна",
- "The given IP range is not valid for IPv4" : "Өгөгдсөн IP хүрээ , IPv4-д хүчингүй байна",
- "The given IP range is not valid for IPv6" : "Өгөгдсөн IP хүрээ IPv6-д хүчингүй байна",
- "The given time span is invalid" : "Өгөгдсөн цаг хугацаа буруу байна",
- "The given start time is invalid" : " эхлэх цаг буруу байна",
- "The given end time is invalid" : "төгсөглийн хугацаа буруу байна",
- "The given group does not exist" : "Өгөгдсөн бүлэг байхгүй байна",
- "Check %s is invalid or does not exist" : "%sшалгахад хүчингүй эсвэл байхгүй байна",
- "Operation #%s does not exist" : "%s үйл ажиллагаа байхгүй",
- "Workflow" : "ажлын үйл явц",
- "Open documentation" : "Нээлттэй баримт бичиг",
- "Add rule group" : "Бүлэгт дүрэм нэмэх",
- "Short rule description" : "Дүрмийн тайлбар товч",
- "Add rule" : "Дүрэм нэмэх",
- "Reset" : "тохируулах",
- "Save" : "хадгалах",
- "Saving…" : "хадгалж байна",
- "Loading…" : "уншиж байна",
- "Successfully saved" : "амжилттай хадгалагдлаа",
- "File mime type" : "файлын mime төрөл"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/mn.json b/apps/workflowengine/l10n/mn.json
deleted file mode 100644
index 01afb1e9dcb..00000000000
--- a/apps/workflowengine/l10n/mn.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{ "translations": {
- "Saved" : "Хадгалсан",
- "Saving failed:" : "Хадгалалт бүтэлгүйтэв:",
- "File MIME type" : "Файлын MIME төрөл",
- "is" : "бол",
- "is not" : "биш",
- "matches" : "тохируулах",
- "does not match" : "таарахгүй байна",
- "Example: {placeholder}" : "Жишээ нь: {байрлал}",
- "File size (upload)" : "файлын хэмжээ (байршуулсан)",
- "less" : "бага",
- "less or equals" : "Бага буюу тэнцүү",
- "greater or equals" : "Их буюу тэнцүү",
- "greater" : "илүү их",
- "File system tag" : "Файлын системийн хаяг",
- "is tagged with" : "Тэмдэглэгдсэн байна",
- "is not tagged with" : "тэмдэглэгдээгүй байна",
- "Select tag…" : "хаяг сонгоно уу",
- "Request remote address" : "алсын хаяг авах хүсэлт",
- "matches IPv4" : "IPv4 тохируулах ",
- "does not match IPv4" : "IPv4 тохируулагдаагүй байна",
- "matches IPv6" : "IPv6 тохируулах ",
- "does not match IPv6" : "IPv6 тохируулагдаанүй байна",
- "Request time" : "Хүсэлт гаргах хугацаа",
- "between" : "хооронд",
- "not between" : "Хооронд биш",
- "Start" : "эхлэх",
- "End" : "дуусгах",
- "Select timezone…" : "Timezone сонго ...",
- "Request URL" : "URL-н хүсэлт",
- "Predefined URLs" : "Урьдчилан тодорхойлсон URLууд",
- "Files WebDAV" : "WebDAV файлууд",
- "Android client" : "Android хэрэглэгч",
- "iOS client" : "iOS үйлчлүүлэгч",
- "Desktop client" : "захиалагчийн дэлгэц",
- "User group membership" : "хэрэглэгчийн бүлгийн гишүүнчлэл",
- "is member of" : "-ын гишүүн ",
- "is not member of" : "-ын гишүүн биш",
- "The given operator is invalid" : "Өгөгдсөн оператор буруу байна",
- "The given regular expression is invalid" : "Өгөгдсөн тогтмол илэрхийлэл буруу байна",
- "The given file size is invalid" : "Өгөгдсөн файлын хэмжээ буруу байна",
- "The given tag id is invalid" : "Өгөгдсөн шошго буруу байна",
- "The given IP range is invalid" : "Өгөгдсөн IP хязгаар буруу байна",
- "The given IP range is not valid for IPv4" : "Өгөгдсөн IP хүрээ , IPv4-д хүчингүй байна",
- "The given IP range is not valid for IPv6" : "Өгөгдсөн IP хүрээ IPv6-д хүчингүй байна",
- "The given time span is invalid" : "Өгөгдсөн цаг хугацаа буруу байна",
- "The given start time is invalid" : " эхлэх цаг буруу байна",
- "The given end time is invalid" : "төгсөглийн хугацаа буруу байна",
- "The given group does not exist" : "Өгөгдсөн бүлэг байхгүй байна",
- "Check %s is invalid or does not exist" : "%sшалгахад хүчингүй эсвэл байхгүй байна",
- "Operation #%s does not exist" : "%s үйл ажиллагаа байхгүй",
- "Workflow" : "ажлын үйл явц",
- "Open documentation" : "Нээлттэй баримт бичиг",
- "Add rule group" : "Бүлэгт дүрэм нэмэх",
- "Short rule description" : "Дүрмийн тайлбар товч",
- "Add rule" : "Дүрэм нэмэх",
- "Reset" : "тохируулах",
- "Save" : "хадгалах",
- "Saving…" : "хадгалж байна",
- "Loading…" : "уншиж байна",
- "Successfully saved" : "амжилттай хадгалагдлаа",
- "File mime type" : "файлын mime төрөл"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/nb.js b/apps/workflowengine/l10n/nb.js
index ebfe15f0005..ceb07f76558 100644
--- a/apps/workflowengine/l10n/nb.js
+++ b/apps/workflowengine/l10n/nb.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Lagret",
- "Saving failed:" : "Lagring mislyktes:",
- "File MIME type" : "Filens MIME-type",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "passer",
- "does not match" : "passer ikke",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (opplasting)",
- "less" : "mindre",
- "less or equals" : "mindre eller lik",
- "greater or equals" : "større eller lik",
- "greater" : "større",
- "File system tag" : "Filsystem-merkelapp",
- "is tagged with" : "er merket med",
- "is not tagged with" : "er ikke merket med",
- "Select tag…" : "Velg merkelapp…",
- "Request remote address" : "Be om ekstern adresse",
- "matches IPv4" : "passer IPv4",
- "does not match IPv4" : "passer ikke IPv4",
- "matches IPv6" : "passer IPv6",
- "does not match IPv6" : "passer ikke IPv6",
- "Request time" : "Ønsket tidspunkt",
- "between" : "mellom",
- "not between" : "ikke mellom",
- "Start" : "Start",
- "End" : "Slutt",
- "Select timezone…" : "Velg tidssone…",
- "Request URL" : "Ønsk en URL",
- "Predefined URLs" : "Forhåndsdefinerte URLer",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Ønsket brukeragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Skrivebordsklient",
- "User group membership" : "Brukerens gruppemedlemsskap",
- "is member of" : "er medlem av",
- "is not member of" : "er ikke medlem av",
"The given operator is invalid" : "Den angitte operatøren er ugyldig",
"The given regular expression is invalid" : "Det angitte regulære uttrykket er ugyldig",
"The given file size is invalid" : "Den angitte filstørrelsen er ugyldig",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Den angitte starttiden er ugyldig",
"The given end time is invalid" : "Den angitte slutttiden er ugyldig",
"The given group does not exist" : "Den angitte brukergruppen finnes ikke",
- "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
+ "File" : "Fil",
+ "File created" : "Fil laget",
+ "File updated" : "Fil oppdatert",
+ "File renamed" : "Fil har fått nytt navn",
+ "File deleted" : "Fil slettet",
+ "File accessed" : "Fil åpnet",
+ "File copied" : "Fil kopiert",
+ "Tag assigned" : "Tildelt etikett",
+ "Someone" : "Noen",
+ "%s created %s" : "%s laget %s",
+ "%s modified %s" : "%s endret %s",
+ "%s deleted %s" : "%s slettet %s",
+ "%s accessed %s" : "%s åpnet %s",
+ "%s renamed %s" : "%s gitt nytt navn %s",
+ "%s copied %s" : "%s kopiert %s",
+ "%s assigned %s to %s" : "%s tildelt %s til %s",
"Operation #%s does not exist" : "Handlingen #%s finnes ikke",
+ "Entity %s does not exist" : "Enheten %s eksisterer ikke",
+ "Entity %s is invalid" : "Enheten %s er ugyldig",
+ "No events are chosen." : "Ingen hendelser er valgt.",
+ "Entity %s has no event %s" : "Enheten %s har ingen hendelser %s",
"Operation %s does not exist" : "Handlingen %s finnes ikke",
"Operation %s is invalid" : "Handlingen %s er ugyldig",
+ "At least one check needs to be provided" : "Minst èn sjekk må gis",
+ "The provided operation data is too long" : "De oppgitte operasjonsdataene er for lange",
+ "Invalid check provided" : "Ugyldig sjekk gitt",
"Check %s does not exist" : "Sjekk %s finnes ikke",
"Check %s is invalid" : "Sjekk %s er ugyldig",
+ "Check %s is not allowed with this entity" : "Sjekk %s er ikke tillatt med denne hendelsen",
+ "The provided check value is too long" : "Den oppgitte sjekkverdien er for lang",
"Check #%s does not exist" : "Sjekk #%s finnes ikke",
- "Workflow" : "Arbeidsflyt",
- "Open documentation" : "Åpne dokumentasjonen",
- "Add rule group" : "Legg til regelgruppe",
- "Short rule description" : "Kort beskrivelse av regel",
- "Add rule" : "Legg til regel",
- "Reset" : "Tilbakestill",
+ "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
+ "Flow" : "Flyt",
+ "Nextcloud workflow engine" : "Nextcloud arbeidsflytsmotor",
+ "Select a filter" : "Velg et filter",
+ "Select a comparator" : "Velg en komparator",
+ "Remove filter" : "Fjern filter",
+ "Folder" : "Mappe",
+ "Images" : "Bilder",
+ "Office documents" : "Office dokumenter",
+ "PDF documents" : "PDF dokumenter",
+ "Custom MIME type" : "Egendefinert MIME-type",
+ "Custom mimetype" : "Egendefinert MIME-type",
+ "Select a file type" : "Velg filtype",
+ "e.g. httpd/unix-directory" : "f.eks. httpd/unix-mappe",
+ "Please enter a valid time span" : "Vennligst skriv inn en gyldig tidsperiode",
+ "Files WebDAV" : "Filer WebDAV",
+ "Custom URL" : "Egendefinert URL",
+ "Select a request URL" : "Velg en forespurt URL",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Skrivebordsklient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook tillegg",
+ "Custom user agent" : "Egendefinert brukeragent",
+ "Select a user agent" : "Velg en brukeragent",
+ "Select groups" : "Velg grupper",
+ "Groups" : "Grupper",
+ "Type to search for group …" : "Skriv for å søke etter gruppe...",
+ "Select a trigger" : "Velg en utløser",
+ "At least one event must be selected" : "Minst èn hendelse må velges",
+ "Add new flow" : "Legg til ny flyt",
+ "The configuration is invalid" : "Konfigurasjonen er ugyldig",
+ "Active" : "Aktiv",
"Save" : "Lagre",
- "Saving…" : "Lagrer…",
- "Loading…" : "Laster…",
- "Successfully saved" : "Lagret",
- "File mime type" : "Filens MIME-type"
+ "When" : "Når",
+ "and" : "og",
+ "Add a new filter" : "Legg til nytt filter",
+ "Cancel" : "Avbryt",
+ "Delete" : "Slett",
+ "Available flows" : "Tilgjengelige flyt",
+ "For details on how to write your own flow, check out the development documentation." : "For informasjon om hvordan du skriver din egen flyt, sjekk ut utviklingsdokumentasjonen.",
+ "No flows installed" : "Ingen flyter installert",
+ "Ask your administrator to install new flows." : "Be administratoren om å installere nye flyter.",
+ "More flows" : "Flere flyt",
+ "Browse the App Store" : "Utforsk appbutikken",
+ "Show less" : "Vis mindre",
+ "Show more" : "Vis mer",
+ "Configured flows" : "Konfigurerte flyt",
+ "Your flows" : "Dine flyt",
+ "No flows configured" : "Ingen flyter konfigurert",
+ "matches" : "passer",
+ "does not match" : "passer ikke",
+ "is" : "er",
+ "is not" : "er ikke",
+ "File name" : "Filnavn",
+ "File MIME type" : "Filens MIME-type",
+ "File size (upload)" : "Filstørrelse (opplasting)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller lik",
+ "greater or equals" : "større eller lik",
+ "greater" : "større",
+ "Request remote address" : "Be om ekstern adresse",
+ "matches IPv4" : "passer IPv4",
+ "does not match IPv4" : "passer ikke IPv4",
+ "matches IPv6" : "passer IPv6",
+ "does not match IPv6" : "passer ikke IPv6",
+ "File system tag" : "Filsystem-merkelapp",
+ "is tagged with" : "er merket med",
+ "is not tagged with" : "er ikke merket med",
+ "Request URL" : "Ønsk en URL",
+ "Request time" : "Ønsket tidspunkt",
+ "between" : "mellom",
+ "not between" : "ikke mellom",
+ "Request user agent" : "Ønsket brukeragent",
+ "Group membership" : "Gruppemedlemskap",
+ "is member of" : "er medlem av",
+ "is not member of" : "er ikke medlem av"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/nb.json b/apps/workflowengine/l10n/nb.json
index 78c87957f3d..dc5df0cb967 100644
--- a/apps/workflowengine/l10n/nb.json
+++ b/apps/workflowengine/l10n/nb.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Lagret",
- "Saving failed:" : "Lagring mislyktes:",
- "File MIME type" : "Filens MIME-type",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "passer",
- "does not match" : "passer ikke",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (opplasting)",
- "less" : "mindre",
- "less or equals" : "mindre eller lik",
- "greater or equals" : "større eller lik",
- "greater" : "større",
- "File system tag" : "Filsystem-merkelapp",
- "is tagged with" : "er merket med",
- "is not tagged with" : "er ikke merket med",
- "Select tag…" : "Velg merkelapp…",
- "Request remote address" : "Be om ekstern adresse",
- "matches IPv4" : "passer IPv4",
- "does not match IPv4" : "passer ikke IPv4",
- "matches IPv6" : "passer IPv6",
- "does not match IPv6" : "passer ikke IPv6",
- "Request time" : "Ønsket tidspunkt",
- "between" : "mellom",
- "not between" : "ikke mellom",
- "Start" : "Start",
- "End" : "Slutt",
- "Select timezone…" : "Velg tidssone…",
- "Request URL" : "Ønsk en URL",
- "Predefined URLs" : "Forhåndsdefinerte URLer",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Ønsket brukeragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Skrivebordsklient",
- "User group membership" : "Brukerens gruppemedlemsskap",
- "is member of" : "er medlem av",
- "is not member of" : "er ikke medlem av",
"The given operator is invalid" : "Den angitte operatøren er ugyldig",
"The given regular expression is invalid" : "Det angitte regulære uttrykket er ugyldig",
"The given file size is invalid" : "Den angitte filstørrelsen er ugyldig",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Den angitte starttiden er ugyldig",
"The given end time is invalid" : "Den angitte slutttiden er ugyldig",
"The given group does not exist" : "Den angitte brukergruppen finnes ikke",
- "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
+ "File" : "Fil",
+ "File created" : "Fil laget",
+ "File updated" : "Fil oppdatert",
+ "File renamed" : "Fil har fått nytt navn",
+ "File deleted" : "Fil slettet",
+ "File accessed" : "Fil åpnet",
+ "File copied" : "Fil kopiert",
+ "Tag assigned" : "Tildelt etikett",
+ "Someone" : "Noen",
+ "%s created %s" : "%s laget %s",
+ "%s modified %s" : "%s endret %s",
+ "%s deleted %s" : "%s slettet %s",
+ "%s accessed %s" : "%s åpnet %s",
+ "%s renamed %s" : "%s gitt nytt navn %s",
+ "%s copied %s" : "%s kopiert %s",
+ "%s assigned %s to %s" : "%s tildelt %s til %s",
"Operation #%s does not exist" : "Handlingen #%s finnes ikke",
+ "Entity %s does not exist" : "Enheten %s eksisterer ikke",
+ "Entity %s is invalid" : "Enheten %s er ugyldig",
+ "No events are chosen." : "Ingen hendelser er valgt.",
+ "Entity %s has no event %s" : "Enheten %s har ingen hendelser %s",
"Operation %s does not exist" : "Handlingen %s finnes ikke",
"Operation %s is invalid" : "Handlingen %s er ugyldig",
+ "At least one check needs to be provided" : "Minst èn sjekk må gis",
+ "The provided operation data is too long" : "De oppgitte operasjonsdataene er for lange",
+ "Invalid check provided" : "Ugyldig sjekk gitt",
"Check %s does not exist" : "Sjekk %s finnes ikke",
"Check %s is invalid" : "Sjekk %s er ugyldig",
+ "Check %s is not allowed with this entity" : "Sjekk %s er ikke tillatt med denne hendelsen",
+ "The provided check value is too long" : "Den oppgitte sjekkverdien er for lang",
"Check #%s does not exist" : "Sjekk #%s finnes ikke",
- "Workflow" : "Arbeidsflyt",
- "Open documentation" : "Åpne dokumentasjonen",
- "Add rule group" : "Legg til regelgruppe",
- "Short rule description" : "Kort beskrivelse av regel",
- "Add rule" : "Legg til regel",
- "Reset" : "Tilbakestill",
+ "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
+ "Flow" : "Flyt",
+ "Nextcloud workflow engine" : "Nextcloud arbeidsflytsmotor",
+ "Select a filter" : "Velg et filter",
+ "Select a comparator" : "Velg en komparator",
+ "Remove filter" : "Fjern filter",
+ "Folder" : "Mappe",
+ "Images" : "Bilder",
+ "Office documents" : "Office dokumenter",
+ "PDF documents" : "PDF dokumenter",
+ "Custom MIME type" : "Egendefinert MIME-type",
+ "Custom mimetype" : "Egendefinert MIME-type",
+ "Select a file type" : "Velg filtype",
+ "e.g. httpd/unix-directory" : "f.eks. httpd/unix-mappe",
+ "Please enter a valid time span" : "Vennligst skriv inn en gyldig tidsperiode",
+ "Files WebDAV" : "Filer WebDAV",
+ "Custom URL" : "Egendefinert URL",
+ "Select a request URL" : "Velg en forespurt URL",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Skrivebordsklient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook tillegg",
+ "Custom user agent" : "Egendefinert brukeragent",
+ "Select a user agent" : "Velg en brukeragent",
+ "Select groups" : "Velg grupper",
+ "Groups" : "Grupper",
+ "Type to search for group …" : "Skriv for å søke etter gruppe...",
+ "Select a trigger" : "Velg en utløser",
+ "At least one event must be selected" : "Minst èn hendelse må velges",
+ "Add new flow" : "Legg til ny flyt",
+ "The configuration is invalid" : "Konfigurasjonen er ugyldig",
+ "Active" : "Aktiv",
"Save" : "Lagre",
- "Saving…" : "Lagrer…",
- "Loading…" : "Laster…",
- "Successfully saved" : "Lagret",
- "File mime type" : "Filens MIME-type"
+ "When" : "Når",
+ "and" : "og",
+ "Add a new filter" : "Legg til nytt filter",
+ "Cancel" : "Avbryt",
+ "Delete" : "Slett",
+ "Available flows" : "Tilgjengelige flyt",
+ "For details on how to write your own flow, check out the development documentation." : "For informasjon om hvordan du skriver din egen flyt, sjekk ut utviklingsdokumentasjonen.",
+ "No flows installed" : "Ingen flyter installert",
+ "Ask your administrator to install new flows." : "Be administratoren om å installere nye flyter.",
+ "More flows" : "Flere flyt",
+ "Browse the App Store" : "Utforsk appbutikken",
+ "Show less" : "Vis mindre",
+ "Show more" : "Vis mer",
+ "Configured flows" : "Konfigurerte flyt",
+ "Your flows" : "Dine flyt",
+ "No flows configured" : "Ingen flyter konfigurert",
+ "matches" : "passer",
+ "does not match" : "passer ikke",
+ "is" : "er",
+ "is not" : "er ikke",
+ "File name" : "Filnavn",
+ "File MIME type" : "Filens MIME-type",
+ "File size (upload)" : "Filstørrelse (opplasting)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller lik",
+ "greater or equals" : "større eller lik",
+ "greater" : "større",
+ "Request remote address" : "Be om ekstern adresse",
+ "matches IPv4" : "passer IPv4",
+ "does not match IPv4" : "passer ikke IPv4",
+ "matches IPv6" : "passer IPv6",
+ "does not match IPv6" : "passer ikke IPv6",
+ "File system tag" : "Filsystem-merkelapp",
+ "is tagged with" : "er merket med",
+ "is not tagged with" : "er ikke merket med",
+ "Request URL" : "Ønsk en URL",
+ "Request time" : "Ønsket tidspunkt",
+ "between" : "mellom",
+ "not between" : "ikke mellom",
+ "Request user agent" : "Ønsket brukeragent",
+ "Group membership" : "Gruppemedlemskap",
+ "is member of" : "er medlem av",
+ "is not member of" : "er ikke medlem av"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/nb_NO.js b/apps/workflowengine/l10n/nb_NO.js
deleted file mode 100644
index f2d2b4d2e47..00000000000
--- a/apps/workflowengine/l10n/nb_NO.js
+++ /dev/null
@@ -1,71 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Successfully saved" : "Lagring var vellykket",
- "Saving failed:" : "Lagring feilet:",
- "File mime type" : "Filens mimetype",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "passer",
- "does not match" : "passer ikke",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (opplasting)",
- "less" : "mindre",
- "less or equals" : "mindre eller lik",
- "greater or equals" : "større eller lik",
- "greater" : "større",
- "File system tag" : "Filsystem merkelapp",
- "is tagged with" : "er merket med",
- "is not tagged with" : "er ikke merket med",
- "Select tag…" : "Velg merkelapp...",
- "Request remote address" : "Be om ekstern adresse",
- "matches IPv4" : "passer IPv4",
- "does not match IPv4" : "passer ikke IPv4",
- "matches IPv6" : "passer IPv6",
- "does not match IPv6" : "passer ikke IPv6",
- "Request time" : "Ønsket tidspunkt",
- "between" : "mellom",
- "not between" : "ikke mellom",
- "Start" : "Start",
- "End" : "Slutt",
- "Select timezone…" : "Velg tidssone...",
- "Request URL" : "Ønsk en URL",
- "Predefined URLs" : "Forhåndsdefinerte URLer",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Ønsket brukeragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Skrivebordsklient",
- "User group membership" : "Brukerens gruppemedlemsskap",
- "is member of" : "er medlem av",
- "is not member of" : "er ikke medlem av",
- "The given operator is invalid" : "Den angitte operatøren er ugyldig",
- "The given regular expression is invalid" : "Det angitte regulære uttrykket er ugyldig",
- "The given file size is invalid" : "Den angitte filstørrelsen er ugyldig",
- "The given tag id is invalid" : "Den angitte merkelappen er ugyldig",
- "The given IP range is invalid" : "Den angitte ip rangen er ugyldig",
- "The given IP range is not valid for IPv4" : "Den angitte ip rangen er ugyldig for IPv4",
- "The given IP range is not valid for IPv6" : "Den angitte ip rangen er ugyldig for IPv6",
- "The given time span is invalid" : "Den angitte tidsrammen er ugyldig",
- "The given start time is invalid" : "Den angitte starttiden er ugyldig",
- "The given end time is invalid" : "Den angitte slutttiden er ugyldig",
- "The given group does not exist" : "Den angitte brukergruppen finnes ikke",
- "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
- "Operation #%s does not exist" : "Handlingen #%s finnes ikke",
- "Operation %s does not exist" : "Handlingen %s finnes ikke",
- "Operation %s is invalid" : "Handlingen %s er ugyldig",
- "Check %s does not exist" : "Sjekk %s finnes ikke",
- "Check %s is invalid" : "Sjekk %s er ugyldig",
- "Check #%s does not exist" : "Sjekk #%s finnes ikke",
- "Workflow" : "Arbeidsflyt",
- "Open documentation" : "Åpne dokumentasjonen",
- "Add rule group" : "Legg til regelgruppe",
- "Short rule description" : "Kort beskrivelse av regel",
- "Add rule" : "Legg til regel",
- "Reset" : "Tilbakestill",
- "Save" : "Lagre",
- "Saving…" : "Lagrer...",
- "Loading…" : "Laster..."
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/nb_NO.json b/apps/workflowengine/l10n/nb_NO.json
deleted file mode 100644
index b337654c2c9..00000000000
--- a/apps/workflowengine/l10n/nb_NO.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{ "translations": {
- "Successfully saved" : "Lagring var vellykket",
- "Saving failed:" : "Lagring feilet:",
- "File mime type" : "Filens mimetype",
- "is" : "er",
- "is not" : "er ikke",
- "matches" : "passer",
- "does not match" : "passer ikke",
- "Example: {placeholder}" : "Eksempel: {placeholder}",
- "File size (upload)" : "Filstørrelse (opplasting)",
- "less" : "mindre",
- "less or equals" : "mindre eller lik",
- "greater or equals" : "større eller lik",
- "greater" : "større",
- "File system tag" : "Filsystem merkelapp",
- "is tagged with" : "er merket med",
- "is not tagged with" : "er ikke merket med",
- "Select tag…" : "Velg merkelapp...",
- "Request remote address" : "Be om ekstern adresse",
- "matches IPv4" : "passer IPv4",
- "does not match IPv4" : "passer ikke IPv4",
- "matches IPv6" : "passer IPv6",
- "does not match IPv6" : "passer ikke IPv6",
- "Request time" : "Ønsket tidspunkt",
- "between" : "mellom",
- "not between" : "ikke mellom",
- "Start" : "Start",
- "End" : "Slutt",
- "Select timezone…" : "Velg tidssone...",
- "Request URL" : "Ønsk en URL",
- "Predefined URLs" : "Forhåndsdefinerte URLer",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Ønsket brukeragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Skrivebordsklient",
- "User group membership" : "Brukerens gruppemedlemsskap",
- "is member of" : "er medlem av",
- "is not member of" : "er ikke medlem av",
- "The given operator is invalid" : "Den angitte operatøren er ugyldig",
- "The given regular expression is invalid" : "Det angitte regulære uttrykket er ugyldig",
- "The given file size is invalid" : "Den angitte filstørrelsen er ugyldig",
- "The given tag id is invalid" : "Den angitte merkelappen er ugyldig",
- "The given IP range is invalid" : "Den angitte ip rangen er ugyldig",
- "The given IP range is not valid for IPv4" : "Den angitte ip rangen er ugyldig for IPv4",
- "The given IP range is not valid for IPv6" : "Den angitte ip rangen er ugyldig for IPv6",
- "The given time span is invalid" : "Den angitte tidsrammen er ugyldig",
- "The given start time is invalid" : "Den angitte starttiden er ugyldig",
- "The given end time is invalid" : "Den angitte slutttiden er ugyldig",
- "The given group does not exist" : "Den angitte brukergruppen finnes ikke",
- "Check %s is invalid or does not exist" : "Sjekk %s er ugyldig eller finnes ikke",
- "Operation #%s does not exist" : "Handlingen #%s finnes ikke",
- "Operation %s does not exist" : "Handlingen %s finnes ikke",
- "Operation %s is invalid" : "Handlingen %s er ugyldig",
- "Check %s does not exist" : "Sjekk %s finnes ikke",
- "Check %s is invalid" : "Sjekk %s er ugyldig",
- "Check #%s does not exist" : "Sjekk #%s finnes ikke",
- "Workflow" : "Arbeidsflyt",
- "Open documentation" : "Åpne dokumentasjonen",
- "Add rule group" : "Legg til regelgruppe",
- "Short rule description" : "Kort beskrivelse av regel",
- "Add rule" : "Legg til regel",
- "Reset" : "Tilbakestill",
- "Save" : "Lagre",
- "Saving…" : "Lagrer...",
- "Loading…" : "Laster..."
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/nl.js b/apps/workflowengine/l10n/nl.js
index 282f730dfc0..a86b92ea72c 100644
--- a/apps/workflowengine/l10n/nl.js
+++ b/apps/workflowengine/l10n/nl.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Bewaard",
- "Saving failed:" : "Opslaan mislukt:",
- "File MIME type" : "Mimetype bestand",
- "is" : "is",
- "is not" : "is niet",
- "matches" : "komt overeen",
- "does not match" : "komt niet overeen",
- "Example: {placeholder}" : "Bijvoorbeeld: {placeholder}",
- "File size (upload)" : "Bestandsgrootte (upload)",
- "less" : "minder",
- "less or equals" : "minder of gelijk",
- "greater or equals" : "groter of gelijk",
- "greater" : "groter",
- "File system tag" : "Bestandssysteem markering",
- "is tagged with" : "is gemarkeerd met",
- "is not tagged with" : "is niet gemarkeerd met",
- "Select tag…" : "Selecteer markering...",
- "Request remote address" : "Vraag extern adres aan",
- "matches IPv4" : "komt overeen met IPv4",
- "does not match IPv4" : "komt niet overeen met IPv4",
- "matches IPv6" : "komt overeen met IPv6",
- "does not match IPv6" : "komt niet overeen met IPv6",
- "Request time" : "Vraag tijd aan",
- "between" : "tussen",
- "not between" : "niet tussen",
- "Start" : "Begin",
- "End" : "Einde",
- "Select timezone…" : "Selecteer tijdzone...",
- "Request URL" : "Vraag URL aan",
- "Predefined URLs" : "Voorgedefinieerde URL's",
- "Files WebDAV" : "Bestanden WebDAV",
- "Request user agent" : "Vraag gebruikersagent aan",
- "Sync clients" : "Synchroniseer clients",
- "Android client" : "Android client",
- "iOS client" : "iOS client",
- "Desktop client" : "Desktop client",
- "User group membership" : "Gebruikersgroep lidmaatschap",
- "is member of" : "is lid van",
- "is not member of" : "is geen lid van",
"The given operator is invalid" : "De opgegeven operator is ongeldig",
"The given regular expression is invalid" : "De opgegeven reguliere expressie is ongeldig",
"The given file size is invalid" : "De opgegeven bestandsgrootte is ongeldig",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "De opgegeven begintijd is ongeldig",
"The given end time is invalid" : "De opgegeven eindtijd is ongeldig",
"The given group does not exist" : "De opgegeven groep bestaat niet",
- "Check %s is invalid or does not exist" : "Controleer: %s is ongeldig of bestaat niet",
+ "File" : "Bestand",
+ "File created" : "Bestand aangemaakt",
+ "File updated" : "Bestand bijgewerkt",
+ "File renamed" : "Bestand hernoemd",
+ "File deleted" : "Bestand verwijderd",
+ "File accessed" : "Bestand benaderd",
+ "File copied" : "Bestand gekopieerd",
+ "Tag assigned" : "Tag toegewezen",
+ "Someone" : "Iemand",
+ "%s created %s" : "%s creëerde %s",
+ "%s modified %s" : "%s wijzigde %s",
+ "%s deleted %s" : "%s verwijderde %s",
+ "%s accessed %s" : "%s opende %s",
+ "%s renamed %s" : "%s hernoemde %s",
+ "%s copied %s" : "%s kopieerde %s",
+ "%s assigned %s to %s" : "%s wees %s toe aan %s",
"Operation #%s does not exist" : "Bewerking #%s bestaat niet",
+ "Entity %s does not exist" : "Entiteit %s bestaat niet",
+ "Entity %s is invalid" : "Entiteit %s is ongeldig",
+ "No events are chosen." : "Nog geen gebeurtenissen gekozen.",
+ "Entity %s has no event %s" : "Entiteit %s heeft geen gebeurtenis %s",
"Operation %s does not exist" : "Bewerking %s bestaat niet",
"Operation %s is invalid" : "Bewerking %s is ongeldig",
+ "At least one check needs to be provided" : "Minstens één controle moet worden opgegeven",
+ "The provided operation data is too long" : "De opgegeven bewerkingsgegevens zijn te lang",
+ "Invalid check provided" : "Ongeldige controle opgegeven",
"Check %s does not exist" : "Controleer: %s bestaat niet",
"Check %s is invalid" : "Controleer: %s is ongeldig",
+ "Check %s is not allowed with this entity" : "Controle %s is niet toegestaan met deze waarde",
+ "The provided check value is too long" : "Het opgegeven controlegetal is te lang",
"Check #%s does not exist" : "Controleer: #%s bestaat niet",
- "Workflow" : "Workflow",
- "Open documentation" : "Open documentatie",
- "Add rule group" : "Groepsrol toevoegen",
- "Short rule description" : "Korte rolbeschrijving",
- "Add rule" : "Voeg rol toe",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Controleer: %s is ongeldig of bestaat niet",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Selecteer een filter",
+ "Select a comparator" : "Selecteer een comparator",
+ "Remove filter" : "Verwijder filter",
+ "Folder" : "Map",
+ "Images" : "Afbeeldingen",
+ "Office documents" : "Office documenten",
+ "PDF documents" : "PDF documenten",
+ "Custom MIME type" : "Maatwerk mimetype",
+ "Custom mimetype" : "Maatwerk mimetype",
+ "Select a file type" : "Selecteer een bestandstype",
+ "e.g. httpd/unix-directory" : "bijv. httpd/unix-directory",
+ "Please enter a valid time span" : "Geef een geldige tijdsinterval op",
+ "Files WebDAV" : "Bestanden WebDAV",
+ "Custom URL" : "Maatwerk URL",
+ "Select a request URL" : "Selecteer een aanvraag URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Aangepaste 'user agent'",
+ "Select a user agent" : "Selecteer een 'user agent'",
+ "Select groups" : "Selecteer groepen",
+ "Groups" : "Groepen",
+ "Type to search for group …" : "Type om groep te zoeken …",
+ "Select a trigger" : "Selecteer een trigger",
+ "At least one event must be selected" : "Er moet minimaal één gebeurtenis worden geselecteerd",
+ "Add new flow" : "Nieuwe flow toevoegen",
+ "The configuration is invalid" : "De configuratie is ongeldig",
+ "Active" : "Actief",
"Save" : "Opslaan",
- "Saving…" : "Opslaan...",
- "Loading…" : "Laden...",
- "Successfully saved" : "Succesvol opgeslagen",
- "File mime type" : "Bestand mime type"
+ "When" : "Wanneer",
+ "and" : "en",
+ "Add a new filter" : "Nieuw filter toevoegen",
+ "Cancel" : "Annuleren",
+ "Delete" : "Verwijderen",
+ "Available flows" : "Beschikbare flows",
+ "For details on how to write your own flow, check out the development documentation." : "Raadpleeg de ontwikkeldocumentatie voor meer informatie over het ontwikkelen van je eigen flow.",
+ "No flows installed" : "Geen flows geïnstalleerd",
+ "Ask your administrator to install new flows." : "Vraag de beheerder om nieuwe flows te installeren.",
+ "More flows" : "Meer flows",
+ "Browse the App Store" : "Blader door de App Store",
+ "Show less" : "Toon minder",
+ "Show more" : "Toon meer",
+ "Configured flows" : "Geconfigureerde flows",
+ "Your flows" : "Jouw flows",
+ "No flows configured" : "Geen flows geconfigureerd",
+ "matches" : "komt overeen",
+ "does not match" : "komt niet overeen",
+ "is" : "is",
+ "is not" : "is niet",
+ "File name" : "Bestandsnaam",
+ "File MIME type" : "Mimetype bestand",
+ "File size (upload)" : "Bestandsgrootte (upload)",
+ "less" : "minder",
+ "less or equals" : "minder of gelijk",
+ "greater or equals" : "groter of gelijk",
+ "greater" : "groter",
+ "Request remote address" : "Extern adres aanvraag",
+ "matches IPv4" : "komt overeen met IPv4",
+ "does not match IPv4" : "komt niet overeen met IPv4",
+ "matches IPv6" : "komt overeen met IPv6",
+ "does not match IPv6" : "komt niet overeen met IPv6",
+ "File system tag" : "Bestandssysteem markering",
+ "is tagged with" : "is gemarkeerd met",
+ "is not tagged with" : "is niet gemarkeerd met",
+ "Request URL" : "URL aanvraag",
+ "Request time" : "Tijdstip aanvraag",
+ "between" : "tussen",
+ "not between" : "niet tussen",
+ "Request user agent" : "Useragent aanvraag",
+ "Group membership" : "Groepslidmaatschap",
+ "is member of" : "is lid van",
+ "is not member of" : "is geen lid van"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/nl.json b/apps/workflowengine/l10n/nl.json
index 0328c954c9e..d2679c172d3 100644
--- a/apps/workflowengine/l10n/nl.json
+++ b/apps/workflowengine/l10n/nl.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Bewaard",
- "Saving failed:" : "Opslaan mislukt:",
- "File MIME type" : "Mimetype bestand",
- "is" : "is",
- "is not" : "is niet",
- "matches" : "komt overeen",
- "does not match" : "komt niet overeen",
- "Example: {placeholder}" : "Bijvoorbeeld: {placeholder}",
- "File size (upload)" : "Bestandsgrootte (upload)",
- "less" : "minder",
- "less or equals" : "minder of gelijk",
- "greater or equals" : "groter of gelijk",
- "greater" : "groter",
- "File system tag" : "Bestandssysteem markering",
- "is tagged with" : "is gemarkeerd met",
- "is not tagged with" : "is niet gemarkeerd met",
- "Select tag…" : "Selecteer markering...",
- "Request remote address" : "Vraag extern adres aan",
- "matches IPv4" : "komt overeen met IPv4",
- "does not match IPv4" : "komt niet overeen met IPv4",
- "matches IPv6" : "komt overeen met IPv6",
- "does not match IPv6" : "komt niet overeen met IPv6",
- "Request time" : "Vraag tijd aan",
- "between" : "tussen",
- "not between" : "niet tussen",
- "Start" : "Begin",
- "End" : "Einde",
- "Select timezone…" : "Selecteer tijdzone...",
- "Request URL" : "Vraag URL aan",
- "Predefined URLs" : "Voorgedefinieerde URL's",
- "Files WebDAV" : "Bestanden WebDAV",
- "Request user agent" : "Vraag gebruikersagent aan",
- "Sync clients" : "Synchroniseer clients",
- "Android client" : "Android client",
- "iOS client" : "iOS client",
- "Desktop client" : "Desktop client",
- "User group membership" : "Gebruikersgroep lidmaatschap",
- "is member of" : "is lid van",
- "is not member of" : "is geen lid van",
"The given operator is invalid" : "De opgegeven operator is ongeldig",
"The given regular expression is invalid" : "De opgegeven reguliere expressie is ongeldig",
"The given file size is invalid" : "De opgegeven bestandsgrootte is ongeldig",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "De opgegeven begintijd is ongeldig",
"The given end time is invalid" : "De opgegeven eindtijd is ongeldig",
"The given group does not exist" : "De opgegeven groep bestaat niet",
- "Check %s is invalid or does not exist" : "Controleer: %s is ongeldig of bestaat niet",
+ "File" : "Bestand",
+ "File created" : "Bestand aangemaakt",
+ "File updated" : "Bestand bijgewerkt",
+ "File renamed" : "Bestand hernoemd",
+ "File deleted" : "Bestand verwijderd",
+ "File accessed" : "Bestand benaderd",
+ "File copied" : "Bestand gekopieerd",
+ "Tag assigned" : "Tag toegewezen",
+ "Someone" : "Iemand",
+ "%s created %s" : "%s creëerde %s",
+ "%s modified %s" : "%s wijzigde %s",
+ "%s deleted %s" : "%s verwijderde %s",
+ "%s accessed %s" : "%s opende %s",
+ "%s renamed %s" : "%s hernoemde %s",
+ "%s copied %s" : "%s kopieerde %s",
+ "%s assigned %s to %s" : "%s wees %s toe aan %s",
"Operation #%s does not exist" : "Bewerking #%s bestaat niet",
+ "Entity %s does not exist" : "Entiteit %s bestaat niet",
+ "Entity %s is invalid" : "Entiteit %s is ongeldig",
+ "No events are chosen." : "Nog geen gebeurtenissen gekozen.",
+ "Entity %s has no event %s" : "Entiteit %s heeft geen gebeurtenis %s",
"Operation %s does not exist" : "Bewerking %s bestaat niet",
"Operation %s is invalid" : "Bewerking %s is ongeldig",
+ "At least one check needs to be provided" : "Minstens één controle moet worden opgegeven",
+ "The provided operation data is too long" : "De opgegeven bewerkingsgegevens zijn te lang",
+ "Invalid check provided" : "Ongeldige controle opgegeven",
"Check %s does not exist" : "Controleer: %s bestaat niet",
"Check %s is invalid" : "Controleer: %s is ongeldig",
+ "Check %s is not allowed with this entity" : "Controle %s is niet toegestaan met deze waarde",
+ "The provided check value is too long" : "Het opgegeven controlegetal is te lang",
"Check #%s does not exist" : "Controleer: #%s bestaat niet",
- "Workflow" : "Workflow",
- "Open documentation" : "Open documentatie",
- "Add rule group" : "Groepsrol toevoegen",
- "Short rule description" : "Korte rolbeschrijving",
- "Add rule" : "Voeg rol toe",
- "Reset" : "Reset",
+ "Check %s is invalid or does not exist" : "Controleer: %s is ongeldig of bestaat niet",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud workflow engine",
+ "Select a filter" : "Selecteer een filter",
+ "Select a comparator" : "Selecteer een comparator",
+ "Remove filter" : "Verwijder filter",
+ "Folder" : "Map",
+ "Images" : "Afbeeldingen",
+ "Office documents" : "Office documenten",
+ "PDF documents" : "PDF documenten",
+ "Custom MIME type" : "Maatwerk mimetype",
+ "Custom mimetype" : "Maatwerk mimetype",
+ "Select a file type" : "Selecteer een bestandstype",
+ "e.g. httpd/unix-directory" : "bijv. httpd/unix-directory",
+ "Please enter a valid time span" : "Geef een geldige tijdsinterval op",
+ "Files WebDAV" : "Bestanden WebDAV",
+ "Custom URL" : "Maatwerk URL",
+ "Select a request URL" : "Selecteer een aanvraag URL",
+ "Android client" : "Android client",
+ "iOS client" : "iOS client",
+ "Desktop client" : "Desktop client",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook addons",
+ "Custom user agent" : "Aangepaste 'user agent'",
+ "Select a user agent" : "Selecteer een 'user agent'",
+ "Select groups" : "Selecteer groepen",
+ "Groups" : "Groepen",
+ "Type to search for group …" : "Type om groep te zoeken …",
+ "Select a trigger" : "Selecteer een trigger",
+ "At least one event must be selected" : "Er moet minimaal één gebeurtenis worden geselecteerd",
+ "Add new flow" : "Nieuwe flow toevoegen",
+ "The configuration is invalid" : "De configuratie is ongeldig",
+ "Active" : "Actief",
"Save" : "Opslaan",
- "Saving…" : "Opslaan...",
- "Loading…" : "Laden...",
- "Successfully saved" : "Succesvol opgeslagen",
- "File mime type" : "Bestand mime type"
+ "When" : "Wanneer",
+ "and" : "en",
+ "Add a new filter" : "Nieuw filter toevoegen",
+ "Cancel" : "Annuleren",
+ "Delete" : "Verwijderen",
+ "Available flows" : "Beschikbare flows",
+ "For details on how to write your own flow, check out the development documentation." : "Raadpleeg de ontwikkeldocumentatie voor meer informatie over het ontwikkelen van je eigen flow.",
+ "No flows installed" : "Geen flows geïnstalleerd",
+ "Ask your administrator to install new flows." : "Vraag de beheerder om nieuwe flows te installeren.",
+ "More flows" : "Meer flows",
+ "Browse the App Store" : "Blader door de App Store",
+ "Show less" : "Toon minder",
+ "Show more" : "Toon meer",
+ "Configured flows" : "Geconfigureerde flows",
+ "Your flows" : "Jouw flows",
+ "No flows configured" : "Geen flows geconfigureerd",
+ "matches" : "komt overeen",
+ "does not match" : "komt niet overeen",
+ "is" : "is",
+ "is not" : "is niet",
+ "File name" : "Bestandsnaam",
+ "File MIME type" : "Mimetype bestand",
+ "File size (upload)" : "Bestandsgrootte (upload)",
+ "less" : "minder",
+ "less or equals" : "minder of gelijk",
+ "greater or equals" : "groter of gelijk",
+ "greater" : "groter",
+ "Request remote address" : "Extern adres aanvraag",
+ "matches IPv4" : "komt overeen met IPv4",
+ "does not match IPv4" : "komt niet overeen met IPv4",
+ "matches IPv6" : "komt overeen met IPv6",
+ "does not match IPv6" : "komt niet overeen met IPv6",
+ "File system tag" : "Bestandssysteem markering",
+ "is tagged with" : "is gemarkeerd met",
+ "is not tagged with" : "is niet gemarkeerd met",
+ "Request URL" : "URL aanvraag",
+ "Request time" : "Tijdstip aanvraag",
+ "between" : "tussen",
+ "not between" : "niet tussen",
+ "Request user agent" : "Useragent aanvraag",
+ "Group membership" : "Groepslidmaatschap",
+ "is member of" : "is lid van",
+ "is not member of" : "is geen lid van"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/pl.js b/apps/workflowengine/l10n/pl.js
index 31318cdb0dd..63f1f8d2382 100644
--- a/apps/workflowengine/l10n/pl.js
+++ b/apps/workflowengine/l10n/pl.js
@@ -1,47 +1,8 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Zapisano",
- "Saving failed:" : "Zapis się nie udał:",
- "File MIME type" : "Typy plików MIME",
- "is" : "jest",
- "is not" : "nie jest",
- "matches" : "pasuje",
- "does not match" : "nie pasuje",
- "Example: {placeholder}" : "Przykład: {placeholder}",
- "File size (upload)" : "Rozmiar pliku (wczytywanego)",
- "less" : "mniejszy",
- "less or equals" : "mniejszy lub równy",
- "greater or equals" : "większy lub równy",
- "greater" : "większy",
- "File system tag" : "Etykieta systemu plików",
- "is tagged with" : "jest oznaczony",
- "is not tagged with" : "Nie jest oznaczony",
- "Select tag…" : "Wybierz etykietę...",
- "Request remote address" : "Uzyskaj zdalny adres",
- "matches IPv4" : "pasuje IPv4",
- "does not match IPv4" : "nie pasuje IPv4",
- "matches IPv6" : "pasuje IPv6",
- "does not match IPv6" : "nie pasuje IPv6",
- "Request time" : "Czas odpowiedzi",
- "between" : "pomiędzy",
- "not between" : "nie pomiędzy",
- "Start" : "Start",
- "End" : "Koniec",
- "Select timezone…" : "Wybierz strefę czasową...",
- "Request URL" : "Żądanie URL",
- "Predefined URLs" : "Przedefiniowanie URLs",
- "Files WebDAV" : "Pliki WebDAV",
- "Request user agent" : "Żądanie agenta użytkownika",
- "Sync clients" : "Klienci synchronizacji",
- "Android client" : "Klient Android",
- "iOS client" : "Klient iOS",
- "Desktop client" : "Klient na komputer",
- "User group membership" : "Członkostwo grupy użytkownika",
- "is member of" : "jest członkiem w",
- "is not member of" : "nie jest członkiem w",
"The given operator is invalid" : "Dana operacja jest nieprawidłowa",
- "The given regular expression is invalid" : "Podane wyrażenie regularne jest błędne",
+ "The given regular expression is invalid" : "Podane wyrażenie regularne jest nieprawidłowe",
"The given file size is invalid" : "Podany rozmiar pliku jest nieprawidłowy",
"The given tag id is invalid" : "Podane id etykiety jest nieprawidłowe",
"The given IP range is invalid" : "Podany zakres adresów IP jest nieprawidłowy",
@@ -51,23 +12,105 @@ OC.L10N.register(
"The given start time is invalid" : "Podany czas rozpoczęcia jest nieprawidłowy",
"The given end time is invalid" : "Podany czas zakończenia jest nieprawidłowy",
"The given group does not exist" : "Podana grupa nie istnieje",
- "Check %s is invalid or does not exist" : "Sprawdź, czy %s jest nieprawidłowa lub nie istnieje",
+ "File" : "Plik",
+ "File created" : "Plik utworzony",
+ "File updated" : "Plik zaktualizowany",
+ "File renamed" : "Nazwa pliku zmieniona",
+ "File deleted" : "Plik usunięty",
+ "File accessed" : "Plik udostępniony",
+ "File copied" : "Plik skopiowany",
+ "Tag assigned" : "Etykieta przypisana",
+ "Someone" : "Ktoś",
+ "%s created %s" : "%s utworzył %s",
+ "%s modified %s" : "%s zmodyfikował %s",
+ "%s deleted %s" : "%s usunął %s",
+ "%s accessed %s" : "%s udostępnił %s",
+ "%s renamed %s" : "%s zmienił %s",
+ "%s copied %s" : "%s skopiował %s",
+ "%s assigned %s to %s" : "%s przypisał %s do %s",
"Operation #%s does not exist" : "Operacja do wykonania #%s nie istnieje",
+ "Entity %s does not exist" : "Obiekt %s nie istnieje",
+ "Entity %s is invalid" : "Obiekt %s jest nieprawidłowy",
+ "No events are chosen." : "Nie wybrano żadnych wydarzeń.",
+ "Entity %s has no event %s" : "Obiekt %s nie ma zdarzenia %s",
"Operation %s does not exist" : "Operacja do wykonania %s nie istnieje",
"Operation %s is invalid" : "Operacja %s jest nieprawidłowa",
+ "At least one check needs to be provided" : "Co najmniej jedno sprawdzenie musi być dostarczone",
+ "The provided operation data is too long" : "Podane dane operacji są za długie",
+ "Invalid check provided" : "Sprawdzenie niepoprawnie dostarczone",
"Check %s does not exist" : "Sprawdź, czy %s nie istnieje",
"Check %s is invalid" : "Sprawdź, czy %s jest nieprawidłowy",
+ "Check %s is not allowed with this entity" : "Sprawdzenie %s jest niedozwolone w tym obiekcie",
+ "The provided check value is too long" : "Podana wartość kontrolna jest za długa",
"Check #%s does not exist" : "Sprawdź, czy #%s nie istnieje",
- "Workflow" : "Wpływ na pracę",
- "Open documentation" : "Otwórz dokumentację",
- "Add rule group" : "Dodaj grupę reguł",
- "Short rule description" : "Krótki opis reguły",
- "Add rule" : "Dodaj regułę",
- "Reset" : "Zresetuj",
+ "Check %s is invalid or does not exist" : "Sprawdź, czy %s jest nieprawidłowa lub nie istnieje",
+ "Flow" : "Przepływ",
+ "Nextcloud workflow engine" : "Silnik przepływu pracy Nextcloud",
+ "Select a filter" : "Wybierz filtr",
+ "Select a comparator" : "Wybierz komparator",
+ "Remove filter" : "Usuń filtr",
+ "Folder" : "Katalog",
+ "Images" : "Obrazy",
+ "Office documents" : "Dokumenty biurowe",
+ "PDF documents" : "Dokumenty PDF",
+ "Custom MIME type" : "Niestandardowy typ MIME",
+ "Custom mimetype" : "Niestandardowy typ MIME",
+ "Select a file type" : "Wybierz typ pliku",
+ "e.g. httpd/unix-directory" : "np. httpd/unix-directory",
+ "Please enter a valid time span" : "Podaj prawidłowy przedział czasu",
+ "Files WebDAV" : "Pliki WebDAV",
+ "Custom URL" : "Niestandardowy adres URL",
+ "Select a request URL" : "Wybierz adres URL żądania",
+ "Android client" : "Klient Android",
+ "iOS client" : "Klient iOS",
+ "Desktop client" : "Klient na komputer",
+ "Thunderbird & Outlook addons" : "Dodatki Thunderbird i Outlook",
+ "Custom user agent" : "Niestandardowy klient użytkownika",
+ "Select a user agent" : "Wybierz klienta użytkownika",
+ "Select groups" : "Wybierz grupy",
+ "Groups" : "Grupy",
+ "At least one event must be selected" : "Należy wybrać co najmniej jedno wydarzenie",
+ "Add new flow" : "Dodaj nowy przepływ",
+ "The configuration is invalid" : "Konfiguracja jest nieprawidłowa",
+ "Active" : "Aktywne",
"Save" : "Zapisz",
- "Saving…" : "Zapisywanie...",
- "Loading…" : "Wczytywanie...",
- "Successfully saved" : "Zapis się powiódł",
- "File mime type" : "Typ MIME pliku"
+ "When" : "Kiedy",
+ "and" : "i",
+ "Cancel" : "Anuluj",
+ "Delete" : "Usuń",
+ "Available flows" : "Dostępne przepływy",
+ "For details on how to write your own flow, check out the development documentation." : "Aby uzyskać szczegółowe informacje na temat pisania własnego przepływu, zapoznaj się z dokumentacją programistyczną.",
+ "More flows" : "Więcej przepływów",
+ "Browse the App Store" : "Przeglądaj Nextcloud App Store",
+ "Show less" : "Pokaż mniej",
+ "Show more" : "Pokaż więcej",
+ "Configured flows" : "Skonfigurowane przepływy",
+ "Your flows" : "Twoje przepływy",
+ "matches" : "pasuje",
+ "does not match" : "nie pasuje",
+ "is" : "jest",
+ "is not" : "nie jest",
+ "File name" : "Nazwa pliku",
+ "File MIME type" : "Typy plików MIME",
+ "File size (upload)" : "Rozmiar pliku (wczytywanego)",
+ "less" : "mniejszy",
+ "less or equals" : "mniejszy lub równy",
+ "greater or equals" : "większy lub równy",
+ "greater" : "większy",
+ "Request remote address" : "Uzyskaj zdalny adres",
+ "matches IPv4" : "pasuje IPv4",
+ "does not match IPv4" : "nie pasuje IPv4",
+ "matches IPv6" : "pasuje IPv6",
+ "does not match IPv6" : "nie pasuje IPv6",
+ "File system tag" : "Etykieta systemu plików",
+ "is tagged with" : "jest oznaczony",
+ "is not tagged with" : "nie jest oznaczony",
+ "Request URL" : "Żądanie URL",
+ "Request time" : "Czas odpowiedzi",
+ "between" : "pomiędzy",
+ "not between" : "nie pomiędzy",
+ "Request user agent" : "Żądanie agenta użytkownika",
+ "is member of" : "jest członkiem w",
+ "is not member of" : "nie jest członkiem w"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");
diff --git a/apps/workflowengine/l10n/pl.json b/apps/workflowengine/l10n/pl.json
index 090dbad317b..4cd8a74eae6 100644
--- a/apps/workflowengine/l10n/pl.json
+++ b/apps/workflowengine/l10n/pl.json
@@ -1,45 +1,6 @@
{ "translations": {
- "Saved" : "Zapisano",
- "Saving failed:" : "Zapis się nie udał:",
- "File MIME type" : "Typy plików MIME",
- "is" : "jest",
- "is not" : "nie jest",
- "matches" : "pasuje",
- "does not match" : "nie pasuje",
- "Example: {placeholder}" : "Przykład: {placeholder}",
- "File size (upload)" : "Rozmiar pliku (wczytywanego)",
- "less" : "mniejszy",
- "less or equals" : "mniejszy lub równy",
- "greater or equals" : "większy lub równy",
- "greater" : "większy",
- "File system tag" : "Etykieta systemu plików",
- "is tagged with" : "jest oznaczony",
- "is not tagged with" : "Nie jest oznaczony",
- "Select tag…" : "Wybierz etykietę...",
- "Request remote address" : "Uzyskaj zdalny adres",
- "matches IPv4" : "pasuje IPv4",
- "does not match IPv4" : "nie pasuje IPv4",
- "matches IPv6" : "pasuje IPv6",
- "does not match IPv6" : "nie pasuje IPv6",
- "Request time" : "Czas odpowiedzi",
- "between" : "pomiędzy",
- "not between" : "nie pomiędzy",
- "Start" : "Start",
- "End" : "Koniec",
- "Select timezone…" : "Wybierz strefę czasową...",
- "Request URL" : "Żądanie URL",
- "Predefined URLs" : "Przedefiniowanie URLs",
- "Files WebDAV" : "Pliki WebDAV",
- "Request user agent" : "Żądanie agenta użytkownika",
- "Sync clients" : "Klienci synchronizacji",
- "Android client" : "Klient Android",
- "iOS client" : "Klient iOS",
- "Desktop client" : "Klient na komputer",
- "User group membership" : "Członkostwo grupy użytkownika",
- "is member of" : "jest członkiem w",
- "is not member of" : "nie jest członkiem w",
"The given operator is invalid" : "Dana operacja jest nieprawidłowa",
- "The given regular expression is invalid" : "Podane wyrażenie regularne jest błędne",
+ "The given regular expression is invalid" : "Podane wyrażenie regularne jest nieprawidłowe",
"The given file size is invalid" : "Podany rozmiar pliku jest nieprawidłowy",
"The given tag id is invalid" : "Podane id etykiety jest nieprawidłowe",
"The given IP range is invalid" : "Podany zakres adresów IP jest nieprawidłowy",
@@ -49,23 +10,105 @@
"The given start time is invalid" : "Podany czas rozpoczęcia jest nieprawidłowy",
"The given end time is invalid" : "Podany czas zakończenia jest nieprawidłowy",
"The given group does not exist" : "Podana grupa nie istnieje",
- "Check %s is invalid or does not exist" : "Sprawdź, czy %s jest nieprawidłowa lub nie istnieje",
+ "File" : "Plik",
+ "File created" : "Plik utworzony",
+ "File updated" : "Plik zaktualizowany",
+ "File renamed" : "Nazwa pliku zmieniona",
+ "File deleted" : "Plik usunięty",
+ "File accessed" : "Plik udostępniony",
+ "File copied" : "Plik skopiowany",
+ "Tag assigned" : "Etykieta przypisana",
+ "Someone" : "Ktoś",
+ "%s created %s" : "%s utworzył %s",
+ "%s modified %s" : "%s zmodyfikował %s",
+ "%s deleted %s" : "%s usunął %s",
+ "%s accessed %s" : "%s udostępnił %s",
+ "%s renamed %s" : "%s zmienił %s",
+ "%s copied %s" : "%s skopiował %s",
+ "%s assigned %s to %s" : "%s przypisał %s do %s",
"Operation #%s does not exist" : "Operacja do wykonania #%s nie istnieje",
+ "Entity %s does not exist" : "Obiekt %s nie istnieje",
+ "Entity %s is invalid" : "Obiekt %s jest nieprawidłowy",
+ "No events are chosen." : "Nie wybrano żadnych wydarzeń.",
+ "Entity %s has no event %s" : "Obiekt %s nie ma zdarzenia %s",
"Operation %s does not exist" : "Operacja do wykonania %s nie istnieje",
"Operation %s is invalid" : "Operacja %s jest nieprawidłowa",
+ "At least one check needs to be provided" : "Co najmniej jedno sprawdzenie musi być dostarczone",
+ "The provided operation data is too long" : "Podane dane operacji są za długie",
+ "Invalid check provided" : "Sprawdzenie niepoprawnie dostarczone",
"Check %s does not exist" : "Sprawdź, czy %s nie istnieje",
"Check %s is invalid" : "Sprawdź, czy %s jest nieprawidłowy",
+ "Check %s is not allowed with this entity" : "Sprawdzenie %s jest niedozwolone w tym obiekcie",
+ "The provided check value is too long" : "Podana wartość kontrolna jest za długa",
"Check #%s does not exist" : "Sprawdź, czy #%s nie istnieje",
- "Workflow" : "Wpływ na pracę",
- "Open documentation" : "Otwórz dokumentację",
- "Add rule group" : "Dodaj grupę reguł",
- "Short rule description" : "Krótki opis reguły",
- "Add rule" : "Dodaj regułę",
- "Reset" : "Zresetuj",
+ "Check %s is invalid or does not exist" : "Sprawdź, czy %s jest nieprawidłowa lub nie istnieje",
+ "Flow" : "Przepływ",
+ "Nextcloud workflow engine" : "Silnik przepływu pracy Nextcloud",
+ "Select a filter" : "Wybierz filtr",
+ "Select a comparator" : "Wybierz komparator",
+ "Remove filter" : "Usuń filtr",
+ "Folder" : "Katalog",
+ "Images" : "Obrazy",
+ "Office documents" : "Dokumenty biurowe",
+ "PDF documents" : "Dokumenty PDF",
+ "Custom MIME type" : "Niestandardowy typ MIME",
+ "Custom mimetype" : "Niestandardowy typ MIME",
+ "Select a file type" : "Wybierz typ pliku",
+ "e.g. httpd/unix-directory" : "np. httpd/unix-directory",
+ "Please enter a valid time span" : "Podaj prawidłowy przedział czasu",
+ "Files WebDAV" : "Pliki WebDAV",
+ "Custom URL" : "Niestandardowy adres URL",
+ "Select a request URL" : "Wybierz adres URL żądania",
+ "Android client" : "Klient Android",
+ "iOS client" : "Klient iOS",
+ "Desktop client" : "Klient na komputer",
+ "Thunderbird & Outlook addons" : "Dodatki Thunderbird i Outlook",
+ "Custom user agent" : "Niestandardowy klient użytkownika",
+ "Select a user agent" : "Wybierz klienta użytkownika",
+ "Select groups" : "Wybierz grupy",
+ "Groups" : "Grupy",
+ "At least one event must be selected" : "Należy wybrać co najmniej jedno wydarzenie",
+ "Add new flow" : "Dodaj nowy przepływ",
+ "The configuration is invalid" : "Konfiguracja jest nieprawidłowa",
+ "Active" : "Aktywne",
"Save" : "Zapisz",
- "Saving…" : "Zapisywanie...",
- "Loading…" : "Wczytywanie...",
- "Successfully saved" : "Zapis się powiódł",
- "File mime type" : "Typ MIME pliku"
+ "When" : "Kiedy",
+ "and" : "i",
+ "Cancel" : "Anuluj",
+ "Delete" : "Usuń",
+ "Available flows" : "Dostępne przepływy",
+ "For details on how to write your own flow, check out the development documentation." : "Aby uzyskać szczegółowe informacje na temat pisania własnego przepływu, zapoznaj się z dokumentacją programistyczną.",
+ "More flows" : "Więcej przepływów",
+ "Browse the App Store" : "Przeglądaj Nextcloud App Store",
+ "Show less" : "Pokaż mniej",
+ "Show more" : "Pokaż więcej",
+ "Configured flows" : "Skonfigurowane przepływy",
+ "Your flows" : "Twoje przepływy",
+ "matches" : "pasuje",
+ "does not match" : "nie pasuje",
+ "is" : "jest",
+ "is not" : "nie jest",
+ "File name" : "Nazwa pliku",
+ "File MIME type" : "Typy plików MIME",
+ "File size (upload)" : "Rozmiar pliku (wczytywanego)",
+ "less" : "mniejszy",
+ "less or equals" : "mniejszy lub równy",
+ "greater or equals" : "większy lub równy",
+ "greater" : "większy",
+ "Request remote address" : "Uzyskaj zdalny adres",
+ "matches IPv4" : "pasuje IPv4",
+ "does not match IPv4" : "nie pasuje IPv4",
+ "matches IPv6" : "pasuje IPv6",
+ "does not match IPv6" : "nie pasuje IPv6",
+ "File system tag" : "Etykieta systemu plików",
+ "is tagged with" : "jest oznaczony",
+ "is not tagged with" : "nie jest oznaczony",
+ "Request URL" : "Żądanie URL",
+ "Request time" : "Czas odpowiedzi",
+ "between" : "pomiędzy",
+ "not between" : "nie pomiędzy",
+ "Request user agent" : "Żądanie agenta użytkownika",
+ "is member of" : "jest członkiem w",
+ "is not member of" : "nie jest członkiem w"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/pt_BR.js b/apps/workflowengine/l10n/pt_BR.js
index 233b8a7ad30..8d40914252d 100644
--- a/apps/workflowengine/l10n/pt_BR.js
+++ b/apps/workflowengine/l10n/pt_BR.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Salvo",
- "Saving failed:" : "A gravação falhou:",
- "File MIME type" : "Tipo de arquivo MIME",
- "is" : "é",
- "is not" : "não é",
- "matches" : "coincide",
- "does not match" : "não coincide",
- "Example: {placeholder}" : "Examplo: {placeholder}",
- "File size (upload)" : "Tamanho do arquivo (envio)",
- "less" : "menos",
- "less or equals" : "menores ou iguais",
- "greater or equals" : "maiores ou iguais",
- "greater" : "maior",
- "File system tag" : "Etiqueta do sistema de arquivos",
- "is tagged with" : "está etiquetado com",
- "is not tagged with" : "não está etiquetado com",
- "Select tag…" : "Selecionar etiqueta...",
- "Request remote address" : "Solicitar endereço remoto",
- "matches IPv4" : "IPv4 coincide",
- "does not match IPv4" : "IPV4 não coincide",
- "matches IPv6" : "IPV6 coincide",
- "does not match IPv6" : "IPV6 não coincide",
- "Request time" : "Tempo de solicitação",
- "between" : "entre",
- "not between" : "não entre",
- "Start" : "Iniciar",
- "End" : "Fim",
- "Select timezone…" : "Selecionar fuso horário...",
- "Request URL" : "Solicitação de URL",
- "Predefined URLs" : "URLs predefinidas",
- "Files WebDAV" : "Arquivos WebDAV",
- "Request user agent" : "Solicitar usuário agente",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de Desktop",
- "User group membership" : "Adesão de grupo de usuário",
- "is member of" : "é membro de",
- "is not member of" : "não é membro de",
"The given operator is invalid" : "O operador fornecido é inválido",
"The given regular expression is invalid" : "A expressão regular fornecida é inválida",
"The given file size is invalid" : "O tamanho fornecido do arquivo é inválido",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "O horário de início fornecido é inválido",
"The given end time is invalid" : "O horário de término fornecido é inválido",
"The given group does not exist" : "O grupo fornecido não existe",
- "Check %s is invalid or does not exist" : "Verifique se %s é valido ou existe",
+ "File" : "Arquivo",
+ "File created" : "Arquivo criado",
+ "File updated" : "Arquivo atualizado",
+ "File renamed" : "Arquivo renomeado",
+ "File deleted" : "Arquivo apagado",
+ "File accessed" : "Arquivo acessado",
+ "File copied" : "Arquivo copiado",
+ "Tag assigned" : "Etiqueta atribuída",
+ "Someone" : "Alguém",
+ "%s created %s" : "%s criou %s",
+ "%s modified %s" : "%s modificou %s",
+ "%s deleted %s" : "%s excluiu %s",
+ "%s accessed %s" : "%s acessou %s",
+ "%s renamed %s" : "%s renomeado %s",
+ "%s copied %s" : "%s copiou %s",
+ "%s assigned %s to %s" : "%s atribuiu %s para %s",
"Operation #%s does not exist" : "Operação #%s não existe",
+ "Entity %s does not exist" : "Entidade %s não existe",
+ "Entity %s is invalid" : "Entidade %s é inválida",
+ "No events are chosen." : "Nenhum evento escolhido.",
+ "Entity %s has no event %s" : "Entidade %s não tem evento %s",
"Operation %s does not exist" : "Operação %s não existe",
"Operation %s is invalid" : "Operação %s é inválida",
+ "At least one check needs to be provided" : "É necessário fornecer ao menos uma verificação",
+ "The provided operation data is too long" : "Os dados de operação fornecidos são muito longos",
+ "Invalid check provided" : "Verificação fornecida inválida",
"Check %s does not exist" : "Verifique se %s não existe",
"Check %s is invalid" : "Verifique se %s é inválido",
+ "Check %s is not allowed with this entity" : "Verificação de %s não é permitida nesta entidade",
+ "The provided check value is too long" : "O valor de verificação fornecido é muito longo",
"Check #%s does not exist" : "Verifique se %s não existe",
- "Workflow" : "Fluxo de trabalho",
- "Open documentation" : "Abrir documentação",
- "Add rule group" : "Adicionar regra do grupo",
- "Short rule description" : "Descrição curta da regra",
- "Add rule" : "Adicionar regra",
- "Reset" : "Redefinir",
+ "Check %s is invalid or does not exist" : "Verifique se %s é valido ou existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Mecanismo de fluxo de trabalho Nextcloud",
+ "Select a filter" : "Selecionar um filtro",
+ "Select a comparator" : "Selecionar um comparador",
+ "Remove filter" : "Remover filtro",
+ "Folder" : "Pasta",
+ "Images" : "Imagens",
+ "Office documents" : "Documentos Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Mimetype personalizado",
+ "Select a file type" : "Selecionar um tipo de arquivo",
+ "e.g. httpd/unix-directory" : "por ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Digite um período de tempo válido",
+ "Files WebDAV" : "Arquivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Selecione uma URL de solicitação",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de Desktop",
+ "Thunderbird & Outlook addons" : "Extensões para Thunderbird & Outlook",
+ "Custom user agent" : "Agente do usuário personalizado",
+ "Select a user agent" : "Selecione um agente de usuário",
+ "Select groups" : "Selecione grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Digite para pesquisar um grupo …",
+ "Select a trigger" : "Selecione um gatilho",
+ "At least one event must be selected" : "É necessário selecionar ao menos um evento",
+ "Add new flow" : "Adicionar novo fluxo",
+ "The configuration is invalid" : "A configuração é inválida",
+ "Active" : "Ativo",
"Save" : "Salvar",
- "Saving…" : "Salvando...",
- "Loading…" : "Carregando...",
- "Successfully saved" : "Salvo",
- "File mime type" : "Tipo de arquivo mime"
+ "When" : "Quando",
+ "and" : "e",
+ "Add a new filter" : "Adicionar um novo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Excluir",
+ "Available flows" : "Fluxos disponíveis",
+ "For details on how to write your own flow, check out the development documentation." : "Para detalhes sobre como escrever seu próprio fluxo, consulte a documentação de desenvolvimento.",
+ "No flows installed" : "Nenhum fluxo instalado",
+ "Ask your administrator to install new flows." : "Peça ao seu administrador para instalar novos fluxos.",
+ "More flows" : "Mais fluxos",
+ "Browse the App Store" : "Navegar pela Loja de Aplicativos",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar mais",
+ "Configured flows" : "Fluxos configurados",
+ "Your flows" : "Seus fluxos",
+ "No flows configured" : "Nenhum fluxo configurado",
+ "matches" : "corresponde",
+ "does not match" : "não coincide",
+ "is" : "é",
+ "is not" : "não é",
+ "File name" : "Nome do arquivo",
+ "File MIME type" : "Tipo de arquivo MIME",
+ "File size (upload)" : "Tamanho do arquivo (upload)",
+ "less" : "menor que",
+ "less or equals" : "menor ou igual a",
+ "greater or equals" : "maior ou igual a",
+ "greater" : "maior que",
+ "Request remote address" : "Endereço da requisição",
+ "matches IPv4" : "corresponde a IPv4",
+ "does not match IPv4" : "não corresponde a IPv4",
+ "matches IPv6" : "corresponde a IPv6",
+ "does not match IPv6" : "não corresponde a IPv6",
+ "File system tag" : "Etiqueta do sistema de arquivos",
+ "is tagged with" : "está etiquetado com",
+ "is not tagged with" : "não está etiquetado com",
+ "Request URL" : "URL da requisição",
+ "Request time" : "Tempo de solicitação",
+ "between" : "entre",
+ "not between" : "não entre",
+ "Request user agent" : "Agente de usuário da requisição",
+ "Group membership" : "Associação ao grupo",
+ "is member of" : "é membro de",
+ "is not member of" : "não é membro de"
},
-"nplurals=2; plural=(n > 1);");
+"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/pt_BR.json b/apps/workflowengine/l10n/pt_BR.json
index ac0272a739d..2cbde62dc24 100644
--- a/apps/workflowengine/l10n/pt_BR.json
+++ b/apps/workflowengine/l10n/pt_BR.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Salvo",
- "Saving failed:" : "A gravação falhou:",
- "File MIME type" : "Tipo de arquivo MIME",
- "is" : "é",
- "is not" : "não é",
- "matches" : "coincide",
- "does not match" : "não coincide",
- "Example: {placeholder}" : "Examplo: {placeholder}",
- "File size (upload)" : "Tamanho do arquivo (envio)",
- "less" : "menos",
- "less or equals" : "menores ou iguais",
- "greater or equals" : "maiores ou iguais",
- "greater" : "maior",
- "File system tag" : "Etiqueta do sistema de arquivos",
- "is tagged with" : "está etiquetado com",
- "is not tagged with" : "não está etiquetado com",
- "Select tag…" : "Selecionar etiqueta...",
- "Request remote address" : "Solicitar endereço remoto",
- "matches IPv4" : "IPv4 coincide",
- "does not match IPv4" : "IPV4 não coincide",
- "matches IPv6" : "IPV6 coincide",
- "does not match IPv6" : "IPV6 não coincide",
- "Request time" : "Tempo de solicitação",
- "between" : "entre",
- "not between" : "não entre",
- "Start" : "Iniciar",
- "End" : "Fim",
- "Select timezone…" : "Selecionar fuso horário...",
- "Request URL" : "Solicitação de URL",
- "Predefined URLs" : "URLs predefinidas",
- "Files WebDAV" : "Arquivos WebDAV",
- "Request user agent" : "Solicitar usuário agente",
- "Sync clients" : "Sincronizar clientes",
- "Android client" : "Cliente Android",
- "iOS client" : "Cliente iOS",
- "Desktop client" : "Cliente de Desktop",
- "User group membership" : "Adesão de grupo de usuário",
- "is member of" : "é membro de",
- "is not member of" : "não é membro de",
"The given operator is invalid" : "O operador fornecido é inválido",
"The given regular expression is invalid" : "A expressão regular fornecida é inválida",
"The given file size is invalid" : "O tamanho fornecido do arquivo é inválido",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "O horário de início fornecido é inválido",
"The given end time is invalid" : "O horário de término fornecido é inválido",
"The given group does not exist" : "O grupo fornecido não existe",
- "Check %s is invalid or does not exist" : "Verifique se %s é valido ou existe",
+ "File" : "Arquivo",
+ "File created" : "Arquivo criado",
+ "File updated" : "Arquivo atualizado",
+ "File renamed" : "Arquivo renomeado",
+ "File deleted" : "Arquivo apagado",
+ "File accessed" : "Arquivo acessado",
+ "File copied" : "Arquivo copiado",
+ "Tag assigned" : "Etiqueta atribuída",
+ "Someone" : "Alguém",
+ "%s created %s" : "%s criou %s",
+ "%s modified %s" : "%s modificou %s",
+ "%s deleted %s" : "%s excluiu %s",
+ "%s accessed %s" : "%s acessou %s",
+ "%s renamed %s" : "%s renomeado %s",
+ "%s copied %s" : "%s copiou %s",
+ "%s assigned %s to %s" : "%s atribuiu %s para %s",
"Operation #%s does not exist" : "Operação #%s não existe",
+ "Entity %s does not exist" : "Entidade %s não existe",
+ "Entity %s is invalid" : "Entidade %s é inválida",
+ "No events are chosen." : "Nenhum evento escolhido.",
+ "Entity %s has no event %s" : "Entidade %s não tem evento %s",
"Operation %s does not exist" : "Operação %s não existe",
"Operation %s is invalid" : "Operação %s é inválida",
+ "At least one check needs to be provided" : "É necessário fornecer ao menos uma verificação",
+ "The provided operation data is too long" : "Os dados de operação fornecidos são muito longos",
+ "Invalid check provided" : "Verificação fornecida inválida",
"Check %s does not exist" : "Verifique se %s não existe",
"Check %s is invalid" : "Verifique se %s é inválido",
+ "Check %s is not allowed with this entity" : "Verificação de %s não é permitida nesta entidade",
+ "The provided check value is too long" : "O valor de verificação fornecido é muito longo",
"Check #%s does not exist" : "Verifique se %s não existe",
- "Workflow" : "Fluxo de trabalho",
- "Open documentation" : "Abrir documentação",
- "Add rule group" : "Adicionar regra do grupo",
- "Short rule description" : "Descrição curta da regra",
- "Add rule" : "Adicionar regra",
- "Reset" : "Redefinir",
+ "Check %s is invalid or does not exist" : "Verifique se %s é valido ou existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Mecanismo de fluxo de trabalho Nextcloud",
+ "Select a filter" : "Selecionar um filtro",
+ "Select a comparator" : "Selecionar um comparador",
+ "Remove filter" : "Remover filtro",
+ "Folder" : "Pasta",
+ "Images" : "Imagens",
+ "Office documents" : "Documentos Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom MIME type" : "Tipo MIME personalizado",
+ "Custom mimetype" : "Mimetype personalizado",
+ "Select a file type" : "Selecionar um tipo de arquivo",
+ "e.g. httpd/unix-directory" : "por ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Digite um período de tempo válido",
+ "Files WebDAV" : "Arquivos WebDAV",
+ "Custom URL" : "URL personalizada",
+ "Select a request URL" : "Selecione uma URL de solicitação",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de Desktop",
+ "Thunderbird & Outlook addons" : "Extensões para Thunderbird & Outlook",
+ "Custom user agent" : "Agente do usuário personalizado",
+ "Select a user agent" : "Selecione um agente de usuário",
+ "Select groups" : "Selecione grupos",
+ "Groups" : "Grupos",
+ "Type to search for group …" : "Digite para pesquisar um grupo …",
+ "Select a trigger" : "Selecione um gatilho",
+ "At least one event must be selected" : "É necessário selecionar ao menos um evento",
+ "Add new flow" : "Adicionar novo fluxo",
+ "The configuration is invalid" : "A configuração é inválida",
+ "Active" : "Ativo",
"Save" : "Salvar",
- "Saving…" : "Salvando...",
- "Loading…" : "Carregando...",
- "Successfully saved" : "Salvo",
- "File mime type" : "Tipo de arquivo mime"
-},"pluralForm" :"nplurals=2; plural=(n > 1);"
+ "When" : "Quando",
+ "and" : "e",
+ "Add a new filter" : "Adicionar um novo filtro",
+ "Cancel" : "Cancelar",
+ "Delete" : "Excluir",
+ "Available flows" : "Fluxos disponíveis",
+ "For details on how to write your own flow, check out the development documentation." : "Para detalhes sobre como escrever seu próprio fluxo, consulte a documentação de desenvolvimento.",
+ "No flows installed" : "Nenhum fluxo instalado",
+ "Ask your administrator to install new flows." : "Peça ao seu administrador para instalar novos fluxos.",
+ "More flows" : "Mais fluxos",
+ "Browse the App Store" : "Navegar pela Loja de Aplicativos",
+ "Show less" : "Mostrar menos",
+ "Show more" : "Mostrar mais",
+ "Configured flows" : "Fluxos configurados",
+ "Your flows" : "Seus fluxos",
+ "No flows configured" : "Nenhum fluxo configurado",
+ "matches" : "corresponde",
+ "does not match" : "não coincide",
+ "is" : "é",
+ "is not" : "não é",
+ "File name" : "Nome do arquivo",
+ "File MIME type" : "Tipo de arquivo MIME",
+ "File size (upload)" : "Tamanho do arquivo (upload)",
+ "less" : "menor que",
+ "less or equals" : "menor ou igual a",
+ "greater or equals" : "maior ou igual a",
+ "greater" : "maior que",
+ "Request remote address" : "Endereço da requisição",
+ "matches IPv4" : "corresponde a IPv4",
+ "does not match IPv4" : "não corresponde a IPv4",
+ "matches IPv6" : "corresponde a IPv6",
+ "does not match IPv6" : "não corresponde a IPv6",
+ "File system tag" : "Etiqueta do sistema de arquivos",
+ "is tagged with" : "está etiquetado com",
+ "is not tagged with" : "não está etiquetado com",
+ "Request URL" : "URL da requisição",
+ "Request time" : "Tempo de solicitação",
+ "between" : "entre",
+ "not between" : "não entre",
+ "Request user agent" : "Agente de usuário da requisição",
+ "Group membership" : "Associação ao grupo",
+ "is member of" : "é membro de",
+ "is not member of" : "não é membro de"
+},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/pt_PT.js b/apps/workflowengine/l10n/pt_PT.js
new file mode 100644
index 00000000000..24aa45be975
--- /dev/null
+++ b/apps/workflowengine/l10n/pt_PT.js
@@ -0,0 +1,86 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "O operador em questão é inválido",
+ "The given regular expression is invalid" : "A dada expressão regular é inválida",
+ "The given file size is invalid" : "O tamanho dado do ficheiro é inválido",
+ "The given tag id is invalid" : "A determinada identificação da etiqueta é inválida",
+ "The given IP range is invalid" : "O intervalo de IP dado é inválido",
+ "The given IP range is not valid for IPv4" : "A gama IP dada não é válida para IPv4",
+ "The given IP range is not valid for IPv6" : "A gama de IP indicada não é válida para IPv6",
+ "The given time span is invalid" : "O período de tempo dado é inválido",
+ "The given start time is invalid" : "A determinada hora de início é inválida",
+ "The given end time is invalid" : "O tempo final dado é inválido",
+ "The given group does not exist" : "O grupo em questão não existe",
+ "File" : "Ficheiro",
+ "File created" : "Ficheiro criado",
+ "File updated" : "Ficheiro enviado",
+ "File renamed" : "Ficheiro renomeado",
+ "File deleted" : "Ficheiro apagado",
+ "File accessed" : "Ficheiro acedido",
+ "File copied" : "Ficheiro copiado",
+ "Tag assigned" : "Etiqueta atribuída",
+ "Someone" : "Alguém",
+ "%s created %s" : "1%s criado 1%s",
+ "%s modified %s" : "1%s modificado 1%s",
+ "%s deleted %s" : "1%s apagado 1%s",
+ "%s accessed %s" : "1%s acedido 1%s",
+ "%s renamed %s" : "1%s renomeado 1%s",
+ "%s copied %s" : "1%s copiado 1%s",
+ "%s assigned %s to %s" : "1%s atribuido 1%s para 1%s",
+ "Operation #%s does not exist" : "Operação #1%s não existe",
+ "Entity %s does not exist" : "Entidade %s não existe",
+ "Entity %s is invalid" : "Entidade %s é inválida",
+ "No events are chosen." : "Não são escolhidos eventos.",
+ "Entity %s has no event %s" : "Entidade %s não tem evento %s",
+ "Operation %s is invalid" : "Operação %s é inválida",
+ "Check %s does not exist" : "Validação %s não existe",
+ "Check %s is invalid" : "Validação %s é inválida",
+ "Check %s is invalid or does not exist" : "Verifique%sé inválido ou não existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Motor de fluxo de trabalho da Nextcloud",
+ "Select a filter" : "Selecionar um filtro",
+ "Select a comparator" : "Selecionar um comparador",
+ "Remove filter" : "Remover filtro",
+ "Folder" : "Pasta",
+ "Images" : "Imagens",
+ "Files WebDAV" : "Ficheiros WebDAV",
+ "Android client" : "Cliente de Android",
+ "iOS client" : "Cliente de iOS",
+ "Desktop client" : "Cliente de PC",
+ "Thunderbird & Outlook addons" : "Extras do Thunderbird & Outlook",
+ "Select groups" : "Selecionar grupos",
+ "Groups" : "Grupos",
+ "Save" : "Guardar",
+ "and" : "e",
+ "Cancel" : "Cancelar",
+ "Delete" : "Apagar",
+ "Show less" : "Mostrar menos",
+ "matches" : "corresponde",
+ "does not match" : "não corresponde",
+ "is" : "é",
+ "is not" : "não é",
+ "File name" : "Nome do ficheiro",
+ "File MIME type" : "Tipo de ficheiro MIME",
+ "File size (upload)" : "Tamanho do ficheiro (envio)",
+ "less" : "menor",
+ "less or equals" : "menor ou igual",
+ "greater or equals" : "maior ou igual",
+ "greater" : "maior",
+ "Request remote address" : "Solicitar endereço remoto",
+ "matches IPv4" : "corresponde a IPv4",
+ "does not match IPv4" : "não corresponde a IPv4",
+ "matches IPv6" : "corresponde a IPv6",
+ "does not match IPv6" : "não corresponde a IPv6",
+ "File system tag" : "Etiqueta do sistema de ficheiros",
+ "is tagged with" : "tem a etiqueta",
+ "is not tagged with" : "não tem a etiqueta",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tempo do pedido",
+ "between" : "entre",
+ "not between" : "fora de",
+ "Request user agent" : "Solicitar agente de utilizador",
+ "is member of" : "é membro de",
+ "is not member of" : "não é um membro de"
+},
+"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/pt_PT.json b/apps/workflowengine/l10n/pt_PT.json
new file mode 100644
index 00000000000..5cec10df737
--- /dev/null
+++ b/apps/workflowengine/l10n/pt_PT.json
@@ -0,0 +1,84 @@
+{ "translations": {
+ "The given operator is invalid" : "O operador em questão é inválido",
+ "The given regular expression is invalid" : "A dada expressão regular é inválida",
+ "The given file size is invalid" : "O tamanho dado do ficheiro é inválido",
+ "The given tag id is invalid" : "A determinada identificação da etiqueta é inválida",
+ "The given IP range is invalid" : "O intervalo de IP dado é inválido",
+ "The given IP range is not valid for IPv4" : "A gama IP dada não é válida para IPv4",
+ "The given IP range is not valid for IPv6" : "A gama de IP indicada não é válida para IPv6",
+ "The given time span is invalid" : "O período de tempo dado é inválido",
+ "The given start time is invalid" : "A determinada hora de início é inválida",
+ "The given end time is invalid" : "O tempo final dado é inválido",
+ "The given group does not exist" : "O grupo em questão não existe",
+ "File" : "Ficheiro",
+ "File created" : "Ficheiro criado",
+ "File updated" : "Ficheiro enviado",
+ "File renamed" : "Ficheiro renomeado",
+ "File deleted" : "Ficheiro apagado",
+ "File accessed" : "Ficheiro acedido",
+ "File copied" : "Ficheiro copiado",
+ "Tag assigned" : "Etiqueta atribuída",
+ "Someone" : "Alguém",
+ "%s created %s" : "1%s criado 1%s",
+ "%s modified %s" : "1%s modificado 1%s",
+ "%s deleted %s" : "1%s apagado 1%s",
+ "%s accessed %s" : "1%s acedido 1%s",
+ "%s renamed %s" : "1%s renomeado 1%s",
+ "%s copied %s" : "1%s copiado 1%s",
+ "%s assigned %s to %s" : "1%s atribuido 1%s para 1%s",
+ "Operation #%s does not exist" : "Operação #1%s não existe",
+ "Entity %s does not exist" : "Entidade %s não existe",
+ "Entity %s is invalid" : "Entidade %s é inválida",
+ "No events are chosen." : "Não são escolhidos eventos.",
+ "Entity %s has no event %s" : "Entidade %s não tem evento %s",
+ "Operation %s is invalid" : "Operação %s é inválida",
+ "Check %s does not exist" : "Validação %s não existe",
+ "Check %s is invalid" : "Validação %s é inválida",
+ "Check %s is invalid or does not exist" : "Verifique%sé inválido ou não existe",
+ "Flow" : "Fluxo",
+ "Nextcloud workflow engine" : "Motor de fluxo de trabalho da Nextcloud",
+ "Select a filter" : "Selecionar um filtro",
+ "Select a comparator" : "Selecionar um comparador",
+ "Remove filter" : "Remover filtro",
+ "Folder" : "Pasta",
+ "Images" : "Imagens",
+ "Files WebDAV" : "Ficheiros WebDAV",
+ "Android client" : "Cliente de Android",
+ "iOS client" : "Cliente de iOS",
+ "Desktop client" : "Cliente de PC",
+ "Thunderbird & Outlook addons" : "Extras do Thunderbird & Outlook",
+ "Select groups" : "Selecionar grupos",
+ "Groups" : "Grupos",
+ "Save" : "Guardar",
+ "and" : "e",
+ "Cancel" : "Cancelar",
+ "Delete" : "Apagar",
+ "Show less" : "Mostrar menos",
+ "matches" : "corresponde",
+ "does not match" : "não corresponde",
+ "is" : "é",
+ "is not" : "não é",
+ "File name" : "Nome do ficheiro",
+ "File MIME type" : "Tipo de ficheiro MIME",
+ "File size (upload)" : "Tamanho do ficheiro (envio)",
+ "less" : "menor",
+ "less or equals" : "menor ou igual",
+ "greater or equals" : "maior ou igual",
+ "greater" : "maior",
+ "Request remote address" : "Solicitar endereço remoto",
+ "matches IPv4" : "corresponde a IPv4",
+ "does not match IPv4" : "não corresponde a IPv4",
+ "matches IPv6" : "corresponde a IPv6",
+ "does not match IPv6" : "não corresponde a IPv6",
+ "File system tag" : "Etiqueta do sistema de ficheiros",
+ "is tagged with" : "tem a etiqueta",
+ "is not tagged with" : "não tem a etiqueta",
+ "Request URL" : "Solicitar URL",
+ "Request time" : "Tempo do pedido",
+ "between" : "entre",
+ "not between" : "fora de",
+ "Request user agent" : "Solicitar agente de utilizador",
+ "is member of" : "é membro de",
+ "is not member of" : "não é um membro de"
+},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ru.js b/apps/workflowengine/l10n/ru.js
index 9ce6f638a1c..6d24bbea78e 100644
--- a/apps/workflowengine/l10n/ru.js
+++ b/apps/workflowengine/l10n/ru.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Сохранено",
- "Saving failed:" : "Ошибка при сохранении:",
- "File MIME type" : "MIME-тип файла",
- "is" : "равняется",
- "is not" : "не равняется",
- "matches" : "соответствует",
- "does not match" : "не соответствует",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Размер передаваемого на сервер файла",
- "less" : "меньше",
- "less or equals" : "меньше либо равно",
- "greater or equals" : "больше либо равно",
- "greater" : "больше",
- "File system tag" : "Метка файла",
- "is tagged with" : "файл помечен",
- "is not tagged with" : "файл не помечен",
- "Select tag…" : "Выберите метку…",
- "Request remote address" : "Адрес, с которого производится запрос",
- "matches IPv4" : "соответствует IPv4",
- "does not match IPv4" : "не соответствует IPv4",
- "matches IPv6" : "соответствует IPv6",
- "does not match IPv6" : "не соответствует IPv6",
- "Request time" : "Время запроса",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Окончание",
- "Select timezone…" : "Выберите часовой пояс…",
- "Request URL" : "URL запроса",
- "Predefined URLs" : "Предопределенные URL",
- "Files WebDAV" : "Файлы WebDAV",
- "Request user agent" : "Используемое приложение (user agent)",
- "Sync clients" : "Клиенты синхронизации",
- "Android client" : "клиент для Android",
- "iOS client" : "клиент для iOS",
- "Desktop client" : "клиент для ПК",
- "User group membership" : "Участие в группе пользователей",
- "is member of" : "является участником",
- "is not member of" : "не является участником",
"The given operator is invalid" : "Указанный оператор неверен",
"The given regular expression is invalid" : "Указанное регулярное выражение неверно",
"The given file size is invalid" : "Укзанный размер файла неверен",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Указаное время начала неверно",
"The given end time is invalid" : "Указаное время окончания неверно",
"The given group does not exist" : "Указанная группа не существует",
- "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
+ "File" : "Файл",
+ "File created" : "Файл создан",
+ "File updated" : "Файл обновлен",
+ "File renamed" : "Файл переименован",
+ "File deleted" : "Файл удален",
+ "File accessed" : "Файл доступен",
+ "File copied" : "Файл скопирован",
+ "Tag assigned" : "Метка присвоена",
+ "Someone" : "Пользователь",
+ "%s created %s" : "%s создал(а) %s",
+ "%s modified %s" : "%s изменил(а) %s",
+ "%s deleted %s" : "%s удалил(а) %s",
+ "%s accessed %s" : "%s получил(а) доступ к %s",
+ "%s renamed %s" : "%s переименовал(а) %s",
+ "%s copied %s" : "%s скопировал(а) %s",
+ "%s assigned %s to %s" : "%s присвоила(а) метку %s файлу %s",
"Operation #%s does not exist" : "Операция #%s не существует",
+ "Entity %s does not exist" : "Сущность %s не существует",
+ "Entity %s is invalid" : "Сущность %s неверна",
+ "No events are chosen." : "События не выбраны.",
+ "Entity %s has no event %s" : "У сущности %s нет события %s",
"Operation %s does not exist" : "Операция %s не существует",
"Operation %s is invalid" : "Операция %s неверна",
+ "At least one check needs to be provided" : "Необходимо задать как минимум одну проверку",
+ "The provided operation data is too long" : "Заданы слишком длинные данные для операции",
+ "Invalid check provided" : "Задана неверная проверка",
"Check %s does not exist" : "Проверка %s не существует",
"Check %s is invalid" : "Проверка %s неверна",
+ "Check %s is not allowed with this entity" : "Проверка %s не разрешена с этой сущностью",
+ "The provided check value is too long" : "Задано слишком длинное проверочное значение",
"Check #%s does not exist" : "Проверка #%s не существует",
- "Workflow" : "Рабочий процесс",
- "Open documentation" : "Открыть документацию",
- "Add rule group" : "Добавить группу правил",
- "Short rule description" : "Краткое описание правила",
- "Add rule" : "Добавить правило",
- "Reset" : "Сбросить",
+ "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
+ "Flow" : "Обработка файлов",
+ "Nextcloud workflow engine" : "Механизм обработки Nextcloud",
+ "Select a filter" : "Выберите фильтр",
+ "Select a comparator" : "Выберите компаратор",
+ "Remove filter" : "Удалить фильтр",
+ "Folder" : "Каталог",
+ "Images" : "Изображения",
+ "Office documents" : "Офисные документы",
+ "PDF documents" : "PDF документы",
+ "Custom MIME type" : "Пользовательский тип MIME",
+ "Custom mimetype" : "Пользовательский тип mime",
+ "Select a file type" : "Выберите тип файла",
+ "e.g. httpd/unix-directory" : "например, каталог httpd/unix",
+ "Please enter a valid time span" : "Введите верный диапазон",
+ "Files WebDAV" : "Файлы WebDAV",
+ "Custom URL" : "Пользовательский URL",
+ "Select a request URL" : "Выберите URL запроса",
+ "Android client" : "клиент для Android",
+ "iOS client" : "клиент для iOS",
+ "Desktop client" : "клиент для ПК",
+ "Thunderbird & Outlook addons" : "Дополнения для Thunderbird и Outlook",
+ "Custom user agent" : "Пользовательский user agent",
+ "Select a user agent" : "Выберите user agent",
+ "Select groups" : "Выберите группы",
+ "Groups" : "Группы",
+ "Type to search for group …" : "Введите для поиска группу…",
+ "Select a trigger" : "Выберите триггер",
+ "At least one event must be selected" : "Необходимо выбрать как минимум одно событие",
+ "Add new flow" : "Добавить обработку",
+ "The configuration is invalid" : "Конфигурация неверна",
+ "Active" : "Активный",
"Save" : "Сохранить",
- "Saving…" : "Сохранение...",
- "Loading…" : "Загрузка...",
- "Successfully saved" : "Успешно сохранено",
- "File mime type" : "MIME тип файла"
+ "When" : "Когда",
+ "and" : "и",
+ "Add a new filter" : "Добавить новый фильтр",
+ "Cancel" : "Отменить",
+ "Delete" : "Удалить",
+ "Available flows" : "Доступные обработки",
+ "For details on how to write your own flow, check out the development documentation." : "За дополнительными сведениями о написании собственных обработок, обратитесь к документации.",
+ "No flows installed" : "Потоки не установлены",
+ "Ask your administrator to install new flows." : "Попросите своего администратора установить новые потоки.",
+ "More flows" : "Дополнительные обработки",
+ "Browse the App Store" : "Просмотреть магазин приложений",
+ "Show less" : "Показывать меньше",
+ "Show more" : "Показывать больше",
+ "Configured flows" : "Настроенные обработки",
+ "Your flows" : "Ваши обработки",
+ "No flows configured" : "Потоки не настроены",
+ "matches" : "соответствует",
+ "does not match" : "не соответствует",
+ "is" : "равняется",
+ "is not" : "не равняется",
+ "File name" : "Имя файла",
+ "File MIME type" : "MIME-тип файла",
+ "File size (upload)" : "Размер передаваемого на сервер файла",
+ "less" : "меньше",
+ "less or equals" : "меньше либо равно",
+ "greater or equals" : "больше либо равно",
+ "greater" : "больше",
+ "Request remote address" : "Адрес, с которого производится запрос",
+ "matches IPv4" : "соответствует IPv4",
+ "does not match IPv4" : "не соответствует IPv4",
+ "matches IPv6" : "соответствует IPv6",
+ "does not match IPv6" : "не соответствует IPv6",
+ "File system tag" : "Метка файла",
+ "is tagged with" : "файл помечен",
+ "is not tagged with" : "файл не помечен",
+ "Request URL" : "URL запроса",
+ "Request time" : "Время запроса",
+ "between" : "между",
+ "not between" : "не между",
+ "Request user agent" : "Используемое приложение (user agent)",
+ "Group membership" : "Членство в группе",
+ "is member of" : "является участником",
+ "is not member of" : "не является участником"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");
diff --git a/apps/workflowengine/l10n/ru.json b/apps/workflowengine/l10n/ru.json
index 1d58f02f0ae..228ad6a71ce 100644
--- a/apps/workflowengine/l10n/ru.json
+++ b/apps/workflowengine/l10n/ru.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Сохранено",
- "Saving failed:" : "Ошибка при сохранении:",
- "File MIME type" : "MIME-тип файла",
- "is" : "равняется",
- "is not" : "не равняется",
- "matches" : "соответствует",
- "does not match" : "не соответствует",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Размер передаваемого на сервер файла",
- "less" : "меньше",
- "less or equals" : "меньше либо равно",
- "greater or equals" : "больше либо равно",
- "greater" : "больше",
- "File system tag" : "Метка файла",
- "is tagged with" : "файл помечен",
- "is not tagged with" : "файл не помечен",
- "Select tag…" : "Выберите метку…",
- "Request remote address" : "Адрес, с которого производится запрос",
- "matches IPv4" : "соответствует IPv4",
- "does not match IPv4" : "не соответствует IPv4",
- "matches IPv6" : "соответствует IPv6",
- "does not match IPv6" : "не соответствует IPv6",
- "Request time" : "Время запроса",
- "between" : "между",
- "not between" : "не между",
- "Start" : "Начало",
- "End" : "Окончание",
- "Select timezone…" : "Выберите часовой пояс…",
- "Request URL" : "URL запроса",
- "Predefined URLs" : "Предопределенные URL",
- "Files WebDAV" : "Файлы WebDAV",
- "Request user agent" : "Используемое приложение (user agent)",
- "Sync clients" : "Клиенты синхронизации",
- "Android client" : "клиент для Android",
- "iOS client" : "клиент для iOS",
- "Desktop client" : "клиент для ПК",
- "User group membership" : "Участие в группе пользователей",
- "is member of" : "является участником",
- "is not member of" : "не является участником",
"The given operator is invalid" : "Указанный оператор неверен",
"The given regular expression is invalid" : "Указанное регулярное выражение неверно",
"The given file size is invalid" : "Укзанный размер файла неверен",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Указаное время начала неверно",
"The given end time is invalid" : "Указаное время окончания неверно",
"The given group does not exist" : "Указанная группа не существует",
- "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
+ "File" : "Файл",
+ "File created" : "Файл создан",
+ "File updated" : "Файл обновлен",
+ "File renamed" : "Файл переименован",
+ "File deleted" : "Файл удален",
+ "File accessed" : "Файл доступен",
+ "File copied" : "Файл скопирован",
+ "Tag assigned" : "Метка присвоена",
+ "Someone" : "Пользователь",
+ "%s created %s" : "%s создал(а) %s",
+ "%s modified %s" : "%s изменил(а) %s",
+ "%s deleted %s" : "%s удалил(а) %s",
+ "%s accessed %s" : "%s получил(а) доступ к %s",
+ "%s renamed %s" : "%s переименовал(а) %s",
+ "%s copied %s" : "%s скопировал(а) %s",
+ "%s assigned %s to %s" : "%s присвоила(а) метку %s файлу %s",
"Operation #%s does not exist" : "Операция #%s не существует",
+ "Entity %s does not exist" : "Сущность %s не существует",
+ "Entity %s is invalid" : "Сущность %s неверна",
+ "No events are chosen." : "События не выбраны.",
+ "Entity %s has no event %s" : "У сущности %s нет события %s",
"Operation %s does not exist" : "Операция %s не существует",
"Operation %s is invalid" : "Операция %s неверна",
+ "At least one check needs to be provided" : "Необходимо задать как минимум одну проверку",
+ "The provided operation data is too long" : "Заданы слишком длинные данные для операции",
+ "Invalid check provided" : "Задана неверная проверка",
"Check %s does not exist" : "Проверка %s не существует",
"Check %s is invalid" : "Проверка %s неверна",
+ "Check %s is not allowed with this entity" : "Проверка %s не разрешена с этой сущностью",
+ "The provided check value is too long" : "Задано слишком длинное проверочное значение",
"Check #%s does not exist" : "Проверка #%s не существует",
- "Workflow" : "Рабочий процесс",
- "Open documentation" : "Открыть документацию",
- "Add rule group" : "Добавить группу правил",
- "Short rule description" : "Краткое описание правила",
- "Add rule" : "Добавить правило",
- "Reset" : "Сбросить",
+ "Check %s is invalid or does not exist" : "Проверка %s неверна или не существует",
+ "Flow" : "Обработка файлов",
+ "Nextcloud workflow engine" : "Механизм обработки Nextcloud",
+ "Select a filter" : "Выберите фильтр",
+ "Select a comparator" : "Выберите компаратор",
+ "Remove filter" : "Удалить фильтр",
+ "Folder" : "Каталог",
+ "Images" : "Изображения",
+ "Office documents" : "Офисные документы",
+ "PDF documents" : "PDF документы",
+ "Custom MIME type" : "Пользовательский тип MIME",
+ "Custom mimetype" : "Пользовательский тип mime",
+ "Select a file type" : "Выберите тип файла",
+ "e.g. httpd/unix-directory" : "например, каталог httpd/unix",
+ "Please enter a valid time span" : "Введите верный диапазон",
+ "Files WebDAV" : "Файлы WebDAV",
+ "Custom URL" : "Пользовательский URL",
+ "Select a request URL" : "Выберите URL запроса",
+ "Android client" : "клиент для Android",
+ "iOS client" : "клиент для iOS",
+ "Desktop client" : "клиент для ПК",
+ "Thunderbird & Outlook addons" : "Дополнения для Thunderbird и Outlook",
+ "Custom user agent" : "Пользовательский user agent",
+ "Select a user agent" : "Выберите user agent",
+ "Select groups" : "Выберите группы",
+ "Groups" : "Группы",
+ "Type to search for group …" : "Введите для поиска группу…",
+ "Select a trigger" : "Выберите триггер",
+ "At least one event must be selected" : "Необходимо выбрать как минимум одно событие",
+ "Add new flow" : "Добавить обработку",
+ "The configuration is invalid" : "Конфигурация неверна",
+ "Active" : "Активный",
"Save" : "Сохранить",
- "Saving…" : "Сохранение...",
- "Loading…" : "Загрузка...",
- "Successfully saved" : "Успешно сохранено",
- "File mime type" : "MIME тип файла"
+ "When" : "Когда",
+ "and" : "и",
+ "Add a new filter" : "Добавить новый фильтр",
+ "Cancel" : "Отменить",
+ "Delete" : "Удалить",
+ "Available flows" : "Доступные обработки",
+ "For details on how to write your own flow, check out the development documentation." : "За дополнительными сведениями о написании собственных обработок, обратитесь к документации.",
+ "No flows installed" : "Потоки не установлены",
+ "Ask your administrator to install new flows." : "Попросите своего администратора установить новые потоки.",
+ "More flows" : "Дополнительные обработки",
+ "Browse the App Store" : "Просмотреть магазин приложений",
+ "Show less" : "Показывать меньше",
+ "Show more" : "Показывать больше",
+ "Configured flows" : "Настроенные обработки",
+ "Your flows" : "Ваши обработки",
+ "No flows configured" : "Потоки не настроены",
+ "matches" : "соответствует",
+ "does not match" : "не соответствует",
+ "is" : "равняется",
+ "is not" : "не равняется",
+ "File name" : "Имя файла",
+ "File MIME type" : "MIME-тип файла",
+ "File size (upload)" : "Размер передаваемого на сервер файла",
+ "less" : "меньше",
+ "less or equals" : "меньше либо равно",
+ "greater or equals" : "больше либо равно",
+ "greater" : "больше",
+ "Request remote address" : "Адрес, с которого производится запрос",
+ "matches IPv4" : "соответствует IPv4",
+ "does not match IPv4" : "не соответствует IPv4",
+ "matches IPv6" : "соответствует IPv6",
+ "does not match IPv6" : "не соответствует IPv6",
+ "File system tag" : "Метка файла",
+ "is tagged with" : "файл помечен",
+ "is not tagged with" : "файл не помечен",
+ "Request URL" : "URL запроса",
+ "Request time" : "Время запроса",
+ "between" : "между",
+ "not between" : "не между",
+ "Request user agent" : "Используемое приложение (user agent)",
+ "Group membership" : "Членство в группе",
+ "is member of" : "является участником",
+ "is not member of" : "не является участником"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sc.js b/apps/workflowengine/l10n/sc.js
new file mode 100644
index 00000000000..b7b473071dd
--- /dev/null
+++ b/apps/workflowengine/l10n/sc.js
@@ -0,0 +1,115 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Cust'utèntzia no podet operare",
+ "The given regular expression is invalid" : "Cust'espressione regulare no est bàlida",
+ "The given file size is invalid" : "Custa mannària de archìviu no est bàlida",
+ "The given tag id is invalid" : "Custa eticheta no est bàlida",
+ "The given IP range is invalid" : "Custu grupu de IP no est bàlidu",
+ "The given IP range is not valid for IPv4" : "Custu grupu de IP no est bàlidu pro IPv4",
+ "The given IP range is not valid for IPv6" : "Custu grupu de IP no est bàlidu pro IPv6",
+ "The given time span is invalid" : "Custu intervallu de tempus no est bàlidu",
+ "The given start time is invalid" : "Custa ora de cumintzu no est bàlida",
+ "The given end time is invalid" : "Custa ora de acabbu no est bàlida",
+ "The given group does not exist" : "Custu grupu no esistit",
+ "File" : "Archìviu",
+ "File created" : "Archìviu creadu",
+ "File updated" : "Archìviu agiornadu",
+ "File renamed" : "Archìviu torradu a numenare",
+ "File deleted" : "Archìviu cantzelladu",
+ "File accessed" : "Fatu s'atzessu a s'archìviu",
+ "File copied" : "Archìviu copiadu",
+ "Tag assigned" : "Eticheta assignada",
+ "Someone" : "Calecuna persone",
+ "%s created %s" : "%s at creadu %s",
+ "%s modified %s" : "%s at modificadu %s",
+ "%s deleted %s" : "%s at cantzelladu %s",
+ "%s accessed %s" : "%s at fatu s'atzessu in %s",
+ "%s renamed %s" : "%s at torradu a numenare %s",
+ "%s copied %s" : "%s at copiadu %s",
+ "%s assigned %s to %s" : "%s at assignadu %s a %s",
+ "Operation #%s does not exist" : "S'operatzione #%s no esistit",
+ "Entity %s does not exist" : "S'entidade %s no esistit",
+ "Entity %s is invalid" : "S'entidade %s no est bàlida",
+ "No events are chosen." : "Perunu eventu seberadu",
+ "Entity %s has no event %s" : "S'entidade %s no tenet eventos %s",
+ "Operation %s does not exist" : "S'operatzione %s no esistit",
+ "Operation %s is invalid" : "S'operatzione %s no est bàlida",
+ "At least one check needs to be provided" : "Depet èssere frunidu a su mancu unu controllu",
+ "The provided operation data is too long" : "Is datos operativos frunidos sunt tropu longos",
+ "Invalid check provided" : "Su controllu frunidu no est bàlidu",
+ "Check %s does not exist" : "Su controllu %s no esistit",
+ "Check %s is invalid" : "Su controllu %s no est bàlidu",
+ "Check %s is not allowed with this entity" : "Su controllu %s no est permìtidu cun custa entidade",
+ "The provided check value is too long" : "Su balore de su controllu frunidu est tropu longu",
+ "Check #%s does not exist" : "Su controllu #%s no esistit",
+ "Check %s is invalid or does not exist" : "Su controllu %s no est bàlidu o no esistit",
+ "Flow" : "Flussu",
+ "Nextcloud workflow engine" : "Motore de su flussu de traballu de Nextcloud",
+ "Select a filter" : "Seletziona unu filtru",
+ "Select a comparator" : "Seletziona unu cumparadore",
+ "Folder" : "Cartella",
+ "Images" : "Immàgines",
+ "Office documents" : "Documentos de Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom mimetype" : "Personaliza sa genia MIME",
+ "Select a file type" : "Seletziona una genia de archìviu",
+ "e.g. httpd/unix-directory" : "pro esèmpiu httpd/unix-directory",
+ "Please enter a valid time span" : "Inserta•nche un'intervallu de tempus bàlidu",
+ "Files WebDAV" : "Archìvios WebDAV",
+ "Custom URL" : "Personaliza URL",
+ "Select a request URL" : "Seletziona unu URL de rechesta",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de iscrivania",
+ "Thunderbird & Outlook addons" : "Cumponente de agiunta de Thunderbird & Outlook",
+ "Custom user agent" : "Personaliza agente de utente",
+ "Select a user agent" : "Seletziona un'agente de utente",
+ "Select groups" : "Seletziona grupos",
+ "Groups" : "Grupos",
+ "At least one event must be selected" : "Depet èssere seletzionadu a su mancu un'eventu",
+ "Add new flow" : "Agiunghe flussu nou",
+ "The configuration is invalid" : "Sa cunfiguratzione no est bàlida",
+ "Active" : "Ativu",
+ "Save" : "Sarva",
+ "When" : "Cando",
+ "and" : "e",
+ "Add a new filter" : "Agiunghe unu filtru nou",
+ "Cancel" : "Annulla",
+ "Delete" : "Cantzella",
+ "Available flows" : "Flussos a disponimentu",
+ "For details on how to write your own flow, check out the development documentation." : "Pro detàllios subra comente iscriere su flussu tuo etotu, controlla sa documentatzione de isvilupu.",
+ "More flows" : "Àteros flussos",
+ "Browse the App Store" : "Esplora sa butega de is aplicatziones",
+ "Show less" : "Mustra prus pagu",
+ "Show more" : "Mustra de prus",
+ "Configured flows" : "Flussos cunfigurados",
+ "Your flows" : "Flussos tuos",
+ "matches" : "currispondèntzias",
+ "does not match" : "no currispondet",
+ "is" : "est",
+ "is not" : "no est",
+ "File name" : "Nùmene de archìviu",
+ "File MIME type" : "Genia de archìviu MIME",
+ "File size (upload)" : "Mannària de s'archìviu (carrigamentu)",
+ "less" : "prus pagu",
+ "less or equals" : "prus pagu o uguale",
+ "greater or equals" : "prus mannu o uguale",
+ "greater" : "prus mannu",
+ "Request remote address" : "Indiritzu dae tesu de sa rechesta",
+ "matches IPv4" : "currispondet a IPv4",
+ "does not match IPv4" : "no currispondet a IPv4",
+ "matches IPv6" : "currispondet a IPv6",
+ "does not match IPv6" : "no currispondet a IPv6",
+ "File system tag" : "Eticheta de archìviu de sistema",
+ "is tagged with" : "est etichetadu cun",
+ "is not tagged with" : "no est etichetadu cun",
+ "Request URL" : "URL de sa rechesta",
+ "Request time" : "Ora de sa rechesta",
+ "between" : "cumprèndidu tra",
+ "not between" : "no cumprèndidu tra",
+ "Request user agent" : "Agente de utente de sa rechesta",
+ "is member of" : "partètzipat a",
+ "is not member of" : "no partètzipat a"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sc.json b/apps/workflowengine/l10n/sc.json
new file mode 100644
index 00000000000..0ae1be297b9
--- /dev/null
+++ b/apps/workflowengine/l10n/sc.json
@@ -0,0 +1,113 @@
+{ "translations": {
+ "The given operator is invalid" : "Cust'utèntzia no podet operare",
+ "The given regular expression is invalid" : "Cust'espressione regulare no est bàlida",
+ "The given file size is invalid" : "Custa mannària de archìviu no est bàlida",
+ "The given tag id is invalid" : "Custa eticheta no est bàlida",
+ "The given IP range is invalid" : "Custu grupu de IP no est bàlidu",
+ "The given IP range is not valid for IPv4" : "Custu grupu de IP no est bàlidu pro IPv4",
+ "The given IP range is not valid for IPv6" : "Custu grupu de IP no est bàlidu pro IPv6",
+ "The given time span is invalid" : "Custu intervallu de tempus no est bàlidu",
+ "The given start time is invalid" : "Custa ora de cumintzu no est bàlida",
+ "The given end time is invalid" : "Custa ora de acabbu no est bàlida",
+ "The given group does not exist" : "Custu grupu no esistit",
+ "File" : "Archìviu",
+ "File created" : "Archìviu creadu",
+ "File updated" : "Archìviu agiornadu",
+ "File renamed" : "Archìviu torradu a numenare",
+ "File deleted" : "Archìviu cantzelladu",
+ "File accessed" : "Fatu s'atzessu a s'archìviu",
+ "File copied" : "Archìviu copiadu",
+ "Tag assigned" : "Eticheta assignada",
+ "Someone" : "Calecuna persone",
+ "%s created %s" : "%s at creadu %s",
+ "%s modified %s" : "%s at modificadu %s",
+ "%s deleted %s" : "%s at cantzelladu %s",
+ "%s accessed %s" : "%s at fatu s'atzessu in %s",
+ "%s renamed %s" : "%s at torradu a numenare %s",
+ "%s copied %s" : "%s at copiadu %s",
+ "%s assigned %s to %s" : "%s at assignadu %s a %s",
+ "Operation #%s does not exist" : "S'operatzione #%s no esistit",
+ "Entity %s does not exist" : "S'entidade %s no esistit",
+ "Entity %s is invalid" : "S'entidade %s no est bàlida",
+ "No events are chosen." : "Perunu eventu seberadu",
+ "Entity %s has no event %s" : "S'entidade %s no tenet eventos %s",
+ "Operation %s does not exist" : "S'operatzione %s no esistit",
+ "Operation %s is invalid" : "S'operatzione %s no est bàlida",
+ "At least one check needs to be provided" : "Depet èssere frunidu a su mancu unu controllu",
+ "The provided operation data is too long" : "Is datos operativos frunidos sunt tropu longos",
+ "Invalid check provided" : "Su controllu frunidu no est bàlidu",
+ "Check %s does not exist" : "Su controllu %s no esistit",
+ "Check %s is invalid" : "Su controllu %s no est bàlidu",
+ "Check %s is not allowed with this entity" : "Su controllu %s no est permìtidu cun custa entidade",
+ "The provided check value is too long" : "Su balore de su controllu frunidu est tropu longu",
+ "Check #%s does not exist" : "Su controllu #%s no esistit",
+ "Check %s is invalid or does not exist" : "Su controllu %s no est bàlidu o no esistit",
+ "Flow" : "Flussu",
+ "Nextcloud workflow engine" : "Motore de su flussu de traballu de Nextcloud",
+ "Select a filter" : "Seletziona unu filtru",
+ "Select a comparator" : "Seletziona unu cumparadore",
+ "Folder" : "Cartella",
+ "Images" : "Immàgines",
+ "Office documents" : "Documentos de Office",
+ "PDF documents" : "Documentos PDF",
+ "Custom mimetype" : "Personaliza sa genia MIME",
+ "Select a file type" : "Seletziona una genia de archìviu",
+ "e.g. httpd/unix-directory" : "pro esèmpiu httpd/unix-directory",
+ "Please enter a valid time span" : "Inserta•nche un'intervallu de tempus bàlidu",
+ "Files WebDAV" : "Archìvios WebDAV",
+ "Custom URL" : "Personaliza URL",
+ "Select a request URL" : "Seletziona unu URL de rechesta",
+ "Android client" : "Cliente Android",
+ "iOS client" : "Cliente iOS",
+ "Desktop client" : "Cliente de iscrivania",
+ "Thunderbird & Outlook addons" : "Cumponente de agiunta de Thunderbird & Outlook",
+ "Custom user agent" : "Personaliza agente de utente",
+ "Select a user agent" : "Seletziona un'agente de utente",
+ "Select groups" : "Seletziona grupos",
+ "Groups" : "Grupos",
+ "At least one event must be selected" : "Depet èssere seletzionadu a su mancu un'eventu",
+ "Add new flow" : "Agiunghe flussu nou",
+ "The configuration is invalid" : "Sa cunfiguratzione no est bàlida",
+ "Active" : "Ativu",
+ "Save" : "Sarva",
+ "When" : "Cando",
+ "and" : "e",
+ "Add a new filter" : "Agiunghe unu filtru nou",
+ "Cancel" : "Annulla",
+ "Delete" : "Cantzella",
+ "Available flows" : "Flussos a disponimentu",
+ "For details on how to write your own flow, check out the development documentation." : "Pro detàllios subra comente iscriere su flussu tuo etotu, controlla sa documentatzione de isvilupu.",
+ "More flows" : "Àteros flussos",
+ "Browse the App Store" : "Esplora sa butega de is aplicatziones",
+ "Show less" : "Mustra prus pagu",
+ "Show more" : "Mustra de prus",
+ "Configured flows" : "Flussos cunfigurados",
+ "Your flows" : "Flussos tuos",
+ "matches" : "currispondèntzias",
+ "does not match" : "no currispondet",
+ "is" : "est",
+ "is not" : "no est",
+ "File name" : "Nùmene de archìviu",
+ "File MIME type" : "Genia de archìviu MIME",
+ "File size (upload)" : "Mannària de s'archìviu (carrigamentu)",
+ "less" : "prus pagu",
+ "less or equals" : "prus pagu o uguale",
+ "greater or equals" : "prus mannu o uguale",
+ "greater" : "prus mannu",
+ "Request remote address" : "Indiritzu dae tesu de sa rechesta",
+ "matches IPv4" : "currispondet a IPv4",
+ "does not match IPv4" : "no currispondet a IPv4",
+ "matches IPv6" : "currispondet a IPv6",
+ "does not match IPv6" : "no currispondet a IPv6",
+ "File system tag" : "Eticheta de archìviu de sistema",
+ "is tagged with" : "est etichetadu cun",
+ "is not tagged with" : "no est etichetadu cun",
+ "Request URL" : "URL de sa rechesta",
+ "Request time" : "Ora de sa rechesta",
+ "between" : "cumprèndidu tra",
+ "not between" : "no cumprèndidu tra",
+ "Request user agent" : "Agente de utente de sa rechesta",
+ "is member of" : "partètzipat a",
+ "is not member of" : "no partètzipat a"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sk.js b/apps/workflowengine/l10n/sk.js
index b2f328c0594..dc3fd686753 100644
--- a/apps/workflowengine/l10n/sk.js
+++ b/apps/workflowengine/l10n/sk.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Uložené",
- "Saving failed:" : "Ukladanie neúspešné:",
- "File MIME type" : "MIME typ súboru",
- "is" : "je",
- "is not" : "nie je",
- "matches" : "súhlasí",
- "does not match" : "nesúhlasí",
- "Example: {placeholder}" : "Napríklad: {placeholder}",
- "File size (upload)" : "Veľkosť súboru (upload)",
- "less" : "menej",
- "less or equals" : "menej alebo rovné",
- "greater or equals" : "viac alebo rovné",
- "greater" : "viac",
- "File system tag" : "Štítok súborového systému",
- "is tagged with" : "je označený",
- "is not tagged with" : "nie je označený",
- "Select tag…" : "Vyber štítok...",
- "Request remote address" : "Vyžiadať vzdialenú adresu",
- "matches IPv4" : "súhlasí s IPv4",
- "does not match IPv4" : "nesúhlasí s IPv4",
- "matches IPv6" : "súhlasí s IPv6",
- "does not match IPv6" : "nesúhlasí s IPv6",
- "Request time" : "Čas požiadavky",
- "between" : "medzi",
- "not between" : "nie je medzi",
- "Start" : "Začiatok",
- "End" : "Koniec",
- "Select timezone…" : "Vybrať časové pásmo...",
- "Request URL" : "Vyžiadať URL",
- "Predefined URLs" : "Preddefinované URL",
- "Files WebDAV" : "WebDAV súbory",
- "Request user agent" : "User agent požiadavky",
- "Sync clients" : "Synchronizovať klientov",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členstvo v skupine používateľov",
- "is member of" : "Je členom",
- "is not member of" : "Nie je členom",
"The given operator is invalid" : "Zadaný operátor je neplatný",
"The given regular expression is invalid" : "Zadaný regulárny výraz je neplatný",
"The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Zadaný čas začatia nie je platný",
"The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
"The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná alebo neexistuje",
+ "File" : "Súbor",
+ "File created" : "Vytvorený súbor",
+ "File updated" : "Aktualizovaný súbor",
+ "File renamed" : "Premenovaný súbor",
+ "File deleted" : "Zmazaný súbor",
+ "File accessed" : "Prístup k súboru",
+ "File copied" : "Kopírovaný súbor",
+ "Tag assigned" : "Priradený štítok",
+ "Someone" : "Niekto",
+ "%s created %s" : "%s vytvorené %s",
+ "%s modified %s" : "%s zmenené %s",
+ "%s deleted %s" : "%s vymazané %s",
+ "%s accessed %s" : "%s pristupené k %s",
+ "%s renamed %s" : "%s premenované %s",
+ "%s copied %s" : "%s skopírovné %s",
+ "%s assigned %s to %s" : "%s priradené %s k %s",
"Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Entity %s does not exist" : "Entita%s neexistuje",
+ "Entity %s is invalid" : "Entita %s je neplatná",
+ "No events are chosen." : "Neboli vybrané žiadne udalosti.",
+ "Entity %s has no event %s" : "Entita %s nemá udalosť %s",
"Operation %s does not exist" : "Operácia %s neexistuje",
"Operation %s is invalid" : "Operácia #%s nie je platná",
+ "At least one check needs to be provided" : "Musí sa vykonať aspoň jedna kontrola",
+ "The provided operation data is too long" : "Poskytnuté prevádzkové údaje sú príliš dlhé",
+ "Invalid check provided" : "Poskytnutá neplatná kontrola",
"Check %s does not exist" : "Kontrola %s neexistuje",
"Check %s is invalid" : "Kontrola %s je neplatná",
+ "Check %s is not allowed with this entity" : "Kontrola %s nie je pre túto entitu povolená",
+ "The provided check value is too long" : "Zadaná kontrolná hodnota je príliš dlhá",
"Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Systém práce",
- "Open documentation" : "Otvoriť dokumentáciu",
- "Add rule group" : "Pridať skupinu pravidiel",
- "Short rule description" : "Zobraziť popis pravidla",
- "Add rule" : "Pridať pravidlo",
- "Reset" : "Vynulovať",
+ "Check %s is invalid or does not exist" : "Kontrola %s je neplatná alebo neexistuje",
+ "Flow" : "Flow (tok)",
+ "Nextcloud workflow engine" : "Služba Nextcloud pre pracovné postupy",
+ "Select a filter" : "Vybrať filter",
+ "Select a comparator" : "Vybrať porovnávač",
+ "Remove filter" : "Odstrániť filter",
+ "Folder" : "Priečinok",
+ "Images" : "Obrázky",
+ "Office documents" : "Dokumenty Office",
+ "PDF documents" : "Dokumenty PDF",
+ "Custom MIME type" : "Vlastný typ MIME",
+ "Custom mimetype" : "Vlastné typy mime",
+ "Select a file type" : "Vyberte typ súboru",
+ "e.g. httpd/unix-directory" : "napr. adresár httpd/unix",
+ "Please enter a valid time span" : "Zadajte prosím platné časové rozmedzie",
+ "Files WebDAV" : "WebDAV súbory",
+ "Custom URL" : "Vlastná URL",
+ "Select a request URL" : "Vybrať URL požiadavku",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "Thunderbird & Outlook addons" : "Doplnky pre Thunderbird a Outlook",
+ "Custom user agent" : "Vlastný agent užívateľa",
+ "Select a user agent" : "Zvoliť užívateľského agenta",
+ "Select groups" : "Vybrať skupinu",
+ "Groups" : "Skupiny",
+ "Type to search for group …" : "Začnite písať pre vyhľadanie skupiny ...",
+ "Select a trigger" : "Vyberte spúšťač",
+ "At least one event must be selected" : "Musí byť vybraná aspoň jedna udalosť",
+ "Add new flow" : "Pridať nový tok",
+ "The configuration is invalid" : "Konfigurácia je neplatná",
+ "Active" : "Aktívne",
"Save" : "Uložiť",
- "Saving…" : "Ukladá sa...",
- "Loading…" : "Načítava sa...",
- "Successfully saved" : "Úspešne uložené",
- "File mime type" : "Mime typ súboru"
+ "When" : "Keď",
+ "and" : "a",
+ "Add a new filter" : "Pridať nový filter",
+ "Cancel" : "Zrušiť",
+ "Delete" : "Zmazať",
+ "Available flows" : "Dostupné toky",
+ "For details on how to write your own flow, check out the development documentation." : "Podrobnosti o tom, ako vytvárať vlastné toky, nájdete v dokumentácii pre vývojárov.",
+ "No flows installed" : "Žiadne toky neboli nainštalované",
+ "Ask your administrator to install new flows." : "Požiadajte svojho administrátora, aby nainštaloval nové toky.",
+ "More flows" : "Ďalšie toky",
+ "Browse the App Store" : "Prehliadanie obchodu s aplikáciami",
+ "Show less" : "Zobraziť menej",
+ "Show more" : "Zobraziť viac",
+ "Configured flows" : "Nastavené toky",
+ "Your flows" : "Vaše toky",
+ "No flows configured" : "Žiadne toky neboli nakonfigurované",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "is" : "je",
+ "is not" : "nie je",
+ "File name" : "Názov súboru",
+ "File MIME type" : "MIME typ súboru",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Request URL" : "Vyžiadať URL",
+ "Request time" : "Čas požiadavky",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Request user agent" : "User agent požiadavky",
+ "Group membership" : "Skupinové členstvo",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom"
},
-"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
+"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");
diff --git a/apps/workflowengine/l10n/sk.json b/apps/workflowengine/l10n/sk.json
index 3c5011e61cc..25761ee0053 100644
--- a/apps/workflowengine/l10n/sk.json
+++ b/apps/workflowengine/l10n/sk.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Uložené",
- "Saving failed:" : "Ukladanie neúspešné:",
- "File MIME type" : "MIME typ súboru",
- "is" : "je",
- "is not" : "nie je",
- "matches" : "súhlasí",
- "does not match" : "nesúhlasí",
- "Example: {placeholder}" : "Napríklad: {placeholder}",
- "File size (upload)" : "Veľkosť súboru (upload)",
- "less" : "menej",
- "less or equals" : "menej alebo rovné",
- "greater or equals" : "viac alebo rovné",
- "greater" : "viac",
- "File system tag" : "Štítok súborového systému",
- "is tagged with" : "je označený",
- "is not tagged with" : "nie je označený",
- "Select tag…" : "Vyber štítok...",
- "Request remote address" : "Vyžiadať vzdialenú adresu",
- "matches IPv4" : "súhlasí s IPv4",
- "does not match IPv4" : "nesúhlasí s IPv4",
- "matches IPv6" : "súhlasí s IPv6",
- "does not match IPv6" : "nesúhlasí s IPv6",
- "Request time" : "Čas požiadavky",
- "between" : "medzi",
- "not between" : "nie je medzi",
- "Start" : "Začiatok",
- "End" : "Koniec",
- "Select timezone…" : "Vybrať časové pásmo...",
- "Request URL" : "Vyžiadať URL",
- "Predefined URLs" : "Preddefinované URL",
- "Files WebDAV" : "WebDAV súbory",
- "Request user agent" : "User agent požiadavky",
- "Sync clients" : "Synchronizovať klientov",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "User group membership" : "Členstvo v skupine používateľov",
- "is member of" : "Je členom",
- "is not member of" : "Nie je členom",
"The given operator is invalid" : "Zadaný operátor je neplatný",
"The given regular expression is invalid" : "Zadaný regulárny výraz je neplatný",
"The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Zadaný čas začatia nie je platný",
"The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
"The given group does not exist" : "Zadaná skupina neexistuje",
- "Check %s is invalid or does not exist" : "Kontrola %s je neplatná alebo neexistuje",
+ "File" : "Súbor",
+ "File created" : "Vytvorený súbor",
+ "File updated" : "Aktualizovaný súbor",
+ "File renamed" : "Premenovaný súbor",
+ "File deleted" : "Zmazaný súbor",
+ "File accessed" : "Prístup k súboru",
+ "File copied" : "Kopírovaný súbor",
+ "Tag assigned" : "Priradený štítok",
+ "Someone" : "Niekto",
+ "%s created %s" : "%s vytvorené %s",
+ "%s modified %s" : "%s zmenené %s",
+ "%s deleted %s" : "%s vymazané %s",
+ "%s accessed %s" : "%s pristupené k %s",
+ "%s renamed %s" : "%s premenované %s",
+ "%s copied %s" : "%s skopírovné %s",
+ "%s assigned %s to %s" : "%s priradené %s k %s",
"Operation #%s does not exist" : "Operácia #%s neexistuje",
+ "Entity %s does not exist" : "Entita%s neexistuje",
+ "Entity %s is invalid" : "Entita %s je neplatná",
+ "No events are chosen." : "Neboli vybrané žiadne udalosti.",
+ "Entity %s has no event %s" : "Entita %s nemá udalosť %s",
"Operation %s does not exist" : "Operácia %s neexistuje",
"Operation %s is invalid" : "Operácia #%s nie je platná",
+ "At least one check needs to be provided" : "Musí sa vykonať aspoň jedna kontrola",
+ "The provided operation data is too long" : "Poskytnuté prevádzkové údaje sú príliš dlhé",
+ "Invalid check provided" : "Poskytnutá neplatná kontrola",
"Check %s does not exist" : "Kontrola %s neexistuje",
"Check %s is invalid" : "Kontrola %s je neplatná",
+ "Check %s is not allowed with this entity" : "Kontrola %s nie je pre túto entitu povolená",
+ "The provided check value is too long" : "Zadaná kontrolná hodnota je príliš dlhá",
"Check #%s does not exist" : "Kontrola #%s neexistuje",
- "Workflow" : "Systém práce",
- "Open documentation" : "Otvoriť dokumentáciu",
- "Add rule group" : "Pridať skupinu pravidiel",
- "Short rule description" : "Zobraziť popis pravidla",
- "Add rule" : "Pridať pravidlo",
- "Reset" : "Vynulovať",
+ "Check %s is invalid or does not exist" : "Kontrola %s je neplatná alebo neexistuje",
+ "Flow" : "Flow (tok)",
+ "Nextcloud workflow engine" : "Služba Nextcloud pre pracovné postupy",
+ "Select a filter" : "Vybrať filter",
+ "Select a comparator" : "Vybrať porovnávač",
+ "Remove filter" : "Odstrániť filter",
+ "Folder" : "Priečinok",
+ "Images" : "Obrázky",
+ "Office documents" : "Dokumenty Office",
+ "PDF documents" : "Dokumenty PDF",
+ "Custom MIME type" : "Vlastný typ MIME",
+ "Custom mimetype" : "Vlastné typy mime",
+ "Select a file type" : "Vyberte typ súboru",
+ "e.g. httpd/unix-directory" : "napr. adresár httpd/unix",
+ "Please enter a valid time span" : "Zadajte prosím platné časové rozmedzie",
+ "Files WebDAV" : "WebDAV súbory",
+ "Custom URL" : "Vlastná URL",
+ "Select a request URL" : "Vybrať URL požiadavku",
+ "Android client" : "Android klient",
+ "iOS client" : "iOS klient",
+ "Desktop client" : "Desktopový klient",
+ "Thunderbird & Outlook addons" : "Doplnky pre Thunderbird a Outlook",
+ "Custom user agent" : "Vlastný agent užívateľa",
+ "Select a user agent" : "Zvoliť užívateľského agenta",
+ "Select groups" : "Vybrať skupinu",
+ "Groups" : "Skupiny",
+ "Type to search for group …" : "Začnite písať pre vyhľadanie skupiny ...",
+ "Select a trigger" : "Vyberte spúšťač",
+ "At least one event must be selected" : "Musí byť vybraná aspoň jedna udalosť",
+ "Add new flow" : "Pridať nový tok",
+ "The configuration is invalid" : "Konfigurácia je neplatná",
+ "Active" : "Aktívne",
"Save" : "Uložiť",
- "Saving…" : "Ukladá sa...",
- "Loading…" : "Načítava sa...",
- "Successfully saved" : "Úspešne uložené",
- "File mime type" : "Mime typ súboru"
-},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
+ "When" : "Keď",
+ "and" : "a",
+ "Add a new filter" : "Pridať nový filter",
+ "Cancel" : "Zrušiť",
+ "Delete" : "Zmazať",
+ "Available flows" : "Dostupné toky",
+ "For details on how to write your own flow, check out the development documentation." : "Podrobnosti o tom, ako vytvárať vlastné toky, nájdete v dokumentácii pre vývojárov.",
+ "No flows installed" : "Žiadne toky neboli nainštalované",
+ "Ask your administrator to install new flows." : "Požiadajte svojho administrátora, aby nainštaloval nové toky.",
+ "More flows" : "Ďalšie toky",
+ "Browse the App Store" : "Prehliadanie obchodu s aplikáciami",
+ "Show less" : "Zobraziť menej",
+ "Show more" : "Zobraziť viac",
+ "Configured flows" : "Nastavené toky",
+ "Your flows" : "Vaše toky",
+ "No flows configured" : "Žiadne toky neboli nakonfigurované",
+ "matches" : "súhlasí",
+ "does not match" : "nesúhlasí",
+ "is" : "je",
+ "is not" : "nie je",
+ "File name" : "Názov súboru",
+ "File MIME type" : "MIME typ súboru",
+ "File size (upload)" : "Veľkosť súboru (upload)",
+ "less" : "menej",
+ "less or equals" : "menej alebo rovné",
+ "greater or equals" : "viac alebo rovné",
+ "greater" : "viac",
+ "Request remote address" : "Vyžiadať vzdialenú adresu",
+ "matches IPv4" : "súhlasí s IPv4",
+ "does not match IPv4" : "nesúhlasí s IPv4",
+ "matches IPv6" : "súhlasí s IPv6",
+ "does not match IPv6" : "nesúhlasí s IPv6",
+ "File system tag" : "Štítok súborového systému",
+ "is tagged with" : "je označený",
+ "is not tagged with" : "nie je označený",
+ "Request URL" : "Vyžiadať URL",
+ "Request time" : "Čas požiadavky",
+ "between" : "medzi",
+ "not between" : "nie je medzi",
+ "Request user agent" : "User agent požiadavky",
+ "Group membership" : "Skupinové členstvo",
+ "is member of" : "Je členom",
+ "is not member of" : "Nie je členom"
+},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sk_SK.js b/apps/workflowengine/l10n/sk_SK.js
deleted file mode 100644
index b524bd9d956..00000000000
--- a/apps/workflowengine/l10n/sk_SK.js
+++ /dev/null
@@ -1,58 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Successfully saved" : "Úspešne uložené",
- "Saving failed:" : "Ukladanie neúspešné:",
- "File mime type" : "Mime typ súboru",
- "is" : "je",
- "is not" : "nie je",
- "matches" : "súhlasí",
- "does not match" : "nesúhlasí",
- "File size (upload)" : "Veľkosť súboru (upload)",
- "less" : "menej",
- "less or equals" : "menej alebo rovné",
- "greater or equals" : "viac alebo rovné",
- "greater" : "viac",
- "File system tag" : "Štítok súborového systému",
- "is tagged with" : "je označený",
- "is not tagged with" : "nie je označený",
- "Select tag…" : "Vyber štítok...",
- "Request remote address" : "Vyžiadať vzdialenú adresu",
- "matches IPv4" : "súhlasí s IPv4",
- "does not match IPv4" : "nesúhlasí s IPv4",
- "matches IPv6" : "súhlasí s IPv6",
- "does not match IPv6" : "nesúhlasí s IPv6",
- "between" : "medzi",
- "not between" : "nie je medzi",
- "Start" : "Začiatok",
- "End" : "Koniec",
- "Request URL" : "Vyžiadať URL",
- "Files WebDAV" : "WebDAV súbory",
- "Sync clients" : "Synchronizovať klientov",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "is member of" : "Je členom",
- "is not member of" : "Nie je členom",
- "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
- "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
- "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
- "The given start time is invalid" : "Zadaný čas začatia nie je platný",
- "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Operation #%s does not exist" : "Operácia #%s neexistuje",
- "Operation %s does not exist" : "Operácia %s neexistuje",
- "Operation %s is invalid" : "Operácia #%s nie je platná",
- "Open documentation" : "Otvoriť dokumentáciu",
- "Add rule group" : "Pridať skupinu pravidiel",
- "Short rule description" : "Zobraziť popis pravidla",
- "Add rule" : "Pridať pravidlo",
- "Reset" : "Vynulovať",
- "Save" : "Uložiť",
- "Saving…" : "Ukladá sa...",
- "Loading…" : "Načítava sa..."
-},
-"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;");
diff --git a/apps/workflowengine/l10n/sk_SK.json b/apps/workflowengine/l10n/sk_SK.json
deleted file mode 100644
index 4cad6608288..00000000000
--- a/apps/workflowengine/l10n/sk_SK.json
+++ /dev/null
@@ -1,56 +0,0 @@
-{ "translations": {
- "Successfully saved" : "Úspešne uložené",
- "Saving failed:" : "Ukladanie neúspešné:",
- "File mime type" : "Mime typ súboru",
- "is" : "je",
- "is not" : "nie je",
- "matches" : "súhlasí",
- "does not match" : "nesúhlasí",
- "File size (upload)" : "Veľkosť súboru (upload)",
- "less" : "menej",
- "less or equals" : "menej alebo rovné",
- "greater or equals" : "viac alebo rovné",
- "greater" : "viac",
- "File system tag" : "Štítok súborového systému",
- "is tagged with" : "je označený",
- "is not tagged with" : "nie je označený",
- "Select tag…" : "Vyber štítok...",
- "Request remote address" : "Vyžiadať vzdialenú adresu",
- "matches IPv4" : "súhlasí s IPv4",
- "does not match IPv4" : "nesúhlasí s IPv4",
- "matches IPv6" : "súhlasí s IPv6",
- "does not match IPv6" : "nesúhlasí s IPv6",
- "between" : "medzi",
- "not between" : "nie je medzi",
- "Start" : "Začiatok",
- "End" : "Koniec",
- "Request URL" : "Vyžiadať URL",
- "Files WebDAV" : "WebDAV súbory",
- "Sync clients" : "Synchronizovať klientov",
- "Android client" : "Android klient",
- "iOS client" : "iOS klient",
- "Desktop client" : "Desktopový klient",
- "is member of" : "Je členom",
- "is not member of" : "Nie je členom",
- "The given file size is invalid" : "Zadaná veľkosť súboru je neplatná",
- "The given tag id is invalid" : "Zadaný identifikátor štítku je neplatný",
- "The given IP range is invalid" : "Zadaný rozsah IP je neplatný",
- "The given IP range is not valid for IPv4" : "Zadaný IP rozsah nie je platný pre IPv4",
- "The given IP range is not valid for IPv6" : "Zadaný IP rozsah nie je platný pre IPv6",
- "The given time span is invalid" : "Zadané časové rozpätie nie je platné",
- "The given start time is invalid" : "Zadaný čas začatia nie je platný",
- "The given end time is invalid" : "Zadaný čas ukončenia nie je platný",
- "The given group does not exist" : "Zadaná skupina neexistuje",
- "Operation #%s does not exist" : "Operácia #%s neexistuje",
- "Operation %s does not exist" : "Operácia %s neexistuje",
- "Operation %s is invalid" : "Operácia #%s nie je platná",
- "Open documentation" : "Otvoriť dokumentáciu",
- "Add rule group" : "Pridať skupinu pravidiel",
- "Short rule description" : "Zobraziť popis pravidla",
- "Add rule" : "Pridať pravidlo",
- "Reset" : "Vynulovať",
- "Save" : "Uložiť",
- "Saving…" : "Ukladá sa...",
- "Loading…" : "Načítava sa..."
-},"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sl.js b/apps/workflowengine/l10n/sl.js
new file mode 100644
index 00000000000..c7b1e61ccf5
--- /dev/null
+++ b/apps/workflowengine/l10n/sl.js
@@ -0,0 +1,119 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Podan operator ni veljaven.",
+ "The given regular expression is invalid" : "Podan logični izraz ni veljaven.",
+ "The given file size is invalid" : "Podana velikost datoteke ni veljavna.",
+ "The given tag id is invalid" : "Podan ID oznake ni veljaven.",
+ "The given IP range is invalid" : "Podan obseg IP ni veljaven.",
+ "The given IP range is not valid for IPv4" : "Podan obseg IP ni veljaven za IPv4.",
+ "The given IP range is not valid for IPv6" : "Podan obseg IP ni veljaven za IPv6.",
+ "The given time span is invalid" : "Podan časovni obseg ni veljaven.",
+ "The given start time is invalid" : "Podan čas začetka ni veljaven.",
+ "The given end time is invalid" : "Podan čas zaključka ni veljaven.",
+ "The given group does not exist" : "Podana skupina ne obstaja.",
+ "File" : "Datoteka",
+ "File created" : "datoteka ustvarjena",
+ "File updated" : "datoteka posodobljena",
+ "File renamed" : "datoteka preimenovana",
+ "File deleted" : "datoteka izbrisana",
+ "File accessed" : "datoteka dostopana",
+ "File copied" : "datoteka kopirana",
+ "Tag assigned" : "datoteka dodeljena",
+ "Someone" : "Nekdo",
+ "%s created %s" : "%s ustvari %s",
+ "%s modified %s" : "%s spremeni %s",
+ "%s deleted %s" : "%s izbriše %s",
+ "%s accessed %s" : "%s dostopi do %s",
+ "%s renamed %s" : "%s preimenuje %s",
+ "%s copied %s" : "%s kopira %s",
+ "%s assigned %s to %s" : "%s dodeli %s za %s",
+ "Operation #%s does not exist" : "Opravilo #%s ne obstaja.",
+ "Entity %s does not exist" : "Predmet %s ne obstaja.",
+ "Entity %s is invalid" : "Predmet %s ni veljaven.",
+ "No events are chosen." : "Ni izbranega nobenega dogodka.",
+ "Entity %s has no event %s" : "Predmetu %s ni določen noben dogodek %s",
+ "Operation %s does not exist" : "Opravilo %s ne obstaja.",
+ "Operation %s is invalid" : "Opravilo %s ni veljavno.",
+ "At least one check needs to be provided" : "Izbrano mora biti vsaj eno pravilo preverjanja",
+ "The provided operation data is too long" : "Podani podatki opravila so predolgi",
+ "Invalid check provided" : "Podano je neveljavno pravilo preverjanja",
+ "Check %s does not exist" : "Pravilo preverjanja %s ne obstaja.",
+ "Check %s is invalid" : "Pravilo preverjanja %s ni veljavno.",
+ "Check %s is not allowed with this entity" : "Pravilo preverjanja %s s tem predmetom ni veljavno",
+ "The provided check value is too long" : "Podani vrednost preverjanja je predolga",
+ "Check #%s does not exist" : "Preverba #%s ne obstaja.",
+ "Check %s is invalid or does not exist" : "Preverba %s ne obstaja.",
+ "Flow" : "Koračnik (Flow)",
+ "Nextcloud workflow engine" : "Program za koračno avtomatizacijo delovnih nalog",
+ "Select a filter" : "Izbor filtra",
+ "Select a comparator" : "Izbor primerjalnika",
+ "Remove filter" : "Odstrani filter",
+ "Folder" : "Mapa",
+ "Images" : "Slike",
+ "Office documents" : "Pisarniški dokumenti",
+ "PDF documents" : "Dokumenti PDF",
+ "Custom MIME type" : "Vrsta Mime po meri",
+ "Custom mimetype" : "Vrsta Mime po meri",
+ "Select a file type" : "Izbor vrste datoteke",
+ "e.g. httpd/unix-directory" : "npr. httpd/unix-directory",
+ "Please enter a valid time span" : "Vpisati je treba veljaven časovni obseg",
+ "Files WebDAV" : "Datoteke WebDAV",
+ "Custom URL" : "Naslov URL po meri",
+ "Select a request URL" : "Izberite naslov URL zahteve",
+ "Android client" : "Odjemalec za Android",
+ "iOS client" : "Odjemalec za iOS",
+ "Desktop client" : "Odjemalec za namizne računalnike",
+ "Thunderbird & Outlook addons" : "Razširitve za Thunderbird in Outlook",
+ "Custom user agent" : "Uporabniški odjemalec po meri",
+ "Select a user agent" : "Izbor uporabniškega odjemalca",
+ "Select groups" : "Izbor skupin",
+ "Groups" : "Skupine",
+ "At least one event must be selected" : "Izbran mora biti vsaj en dogodek",
+ "Add new flow" : "Dodaj koračnik",
+ "The configuration is invalid" : "Nastavitev ni veljavna",
+ "Active" : "Dejavno",
+ "Save" : "Shrani",
+ "When" : "Ko je",
+ "and" : "in",
+ "Cancel" : "Prekliči",
+ "Delete" : "Izbriši",
+ "Available flows" : "Razpoložljivi koračniki",
+ "For details on how to write your own flow, check out the development documentation." : "Za podrobnosti, kako sestaviti koračnike po meri, preverite razvijalsko dokumentacijo.",
+ "No flows installed" : "Ni nameščenih koračnikov",
+ "Ask your administrator to install new flows." : "Za namestitev novih stopite v stik s skrbnikom sistema.",
+ "More flows" : "Več koračnikov",
+ "Browse the App Store" : "Prebrskaj po trgovini programov",
+ "Show less" : "Pokaži manj",
+ "Show more" : "Pokaži več",
+ "Configured flows" : "Nastavljeni koračniki",
+ "Your flows" : "Koračniki po meri",
+ "No flows configured" : "Ni nastavljenih koračnikov",
+ "matches" : "se sklada z",
+ "does not match" : "se ne sklada z",
+ "is" : "je",
+ "is not" : "ni",
+ "File name" : "Ime datoteke",
+ "File MIME type" : "Vrsta MIME datoteke",
+ "File size (upload)" : "Velikost datoteke (↑)",
+ "less" : "je manjša",
+ "less or equals" : "je manjša ali enaka",
+ "greater or equals" : "je večja ali enaka",
+ "greater" : "je večja",
+ "Request remote address" : "Oddaljeni naslov",
+ "matches IPv4" : "se sklada z IPv4",
+ "does not match IPv4" : "ni skladen z IPv4",
+ "matches IPv6" : "se sklada z IPv6",
+ "does not match IPv6" : "ni skladen z IPv6",
+ "File system tag" : "Sistemska oznaka",
+ "is tagged with" : "je",
+ "is not tagged with" : "ni",
+ "Request URL" : "Naslov URL za dostop",
+ "Request time" : "Čas dostopa",
+ "between" : "je dovoljen med",
+ "not between" : "ni dovoljen med",
+ "Request user agent" : "Uporabniški odjemalec",
+ "is member of" : "je v skupini",
+ "is not member of" : "ni v skupini"
+},
+"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);");
diff --git a/apps/workflowengine/l10n/sl.json b/apps/workflowengine/l10n/sl.json
new file mode 100644
index 00000000000..8792339b647
--- /dev/null
+++ b/apps/workflowengine/l10n/sl.json
@@ -0,0 +1,117 @@
+{ "translations": {
+ "The given operator is invalid" : "Podan operator ni veljaven.",
+ "The given regular expression is invalid" : "Podan logični izraz ni veljaven.",
+ "The given file size is invalid" : "Podana velikost datoteke ni veljavna.",
+ "The given tag id is invalid" : "Podan ID oznake ni veljaven.",
+ "The given IP range is invalid" : "Podan obseg IP ni veljaven.",
+ "The given IP range is not valid for IPv4" : "Podan obseg IP ni veljaven za IPv4.",
+ "The given IP range is not valid for IPv6" : "Podan obseg IP ni veljaven za IPv6.",
+ "The given time span is invalid" : "Podan časovni obseg ni veljaven.",
+ "The given start time is invalid" : "Podan čas začetka ni veljaven.",
+ "The given end time is invalid" : "Podan čas zaključka ni veljaven.",
+ "The given group does not exist" : "Podana skupina ne obstaja.",
+ "File" : "Datoteka",
+ "File created" : "datoteka ustvarjena",
+ "File updated" : "datoteka posodobljena",
+ "File renamed" : "datoteka preimenovana",
+ "File deleted" : "datoteka izbrisana",
+ "File accessed" : "datoteka dostopana",
+ "File copied" : "datoteka kopirana",
+ "Tag assigned" : "datoteka dodeljena",
+ "Someone" : "Nekdo",
+ "%s created %s" : "%s ustvari %s",
+ "%s modified %s" : "%s spremeni %s",
+ "%s deleted %s" : "%s izbriše %s",
+ "%s accessed %s" : "%s dostopi do %s",
+ "%s renamed %s" : "%s preimenuje %s",
+ "%s copied %s" : "%s kopira %s",
+ "%s assigned %s to %s" : "%s dodeli %s za %s",
+ "Operation #%s does not exist" : "Opravilo #%s ne obstaja.",
+ "Entity %s does not exist" : "Predmet %s ne obstaja.",
+ "Entity %s is invalid" : "Predmet %s ni veljaven.",
+ "No events are chosen." : "Ni izbranega nobenega dogodka.",
+ "Entity %s has no event %s" : "Predmetu %s ni določen noben dogodek %s",
+ "Operation %s does not exist" : "Opravilo %s ne obstaja.",
+ "Operation %s is invalid" : "Opravilo %s ni veljavno.",
+ "At least one check needs to be provided" : "Izbrano mora biti vsaj eno pravilo preverjanja",
+ "The provided operation data is too long" : "Podani podatki opravila so predolgi",
+ "Invalid check provided" : "Podano je neveljavno pravilo preverjanja",
+ "Check %s does not exist" : "Pravilo preverjanja %s ne obstaja.",
+ "Check %s is invalid" : "Pravilo preverjanja %s ni veljavno.",
+ "Check %s is not allowed with this entity" : "Pravilo preverjanja %s s tem predmetom ni veljavno",
+ "The provided check value is too long" : "Podani vrednost preverjanja je predolga",
+ "Check #%s does not exist" : "Preverba #%s ne obstaja.",
+ "Check %s is invalid or does not exist" : "Preverba %s ne obstaja.",
+ "Flow" : "Koračnik (Flow)",
+ "Nextcloud workflow engine" : "Program za koračno avtomatizacijo delovnih nalog",
+ "Select a filter" : "Izbor filtra",
+ "Select a comparator" : "Izbor primerjalnika",
+ "Remove filter" : "Odstrani filter",
+ "Folder" : "Mapa",
+ "Images" : "Slike",
+ "Office documents" : "Pisarniški dokumenti",
+ "PDF documents" : "Dokumenti PDF",
+ "Custom MIME type" : "Vrsta Mime po meri",
+ "Custom mimetype" : "Vrsta Mime po meri",
+ "Select a file type" : "Izbor vrste datoteke",
+ "e.g. httpd/unix-directory" : "npr. httpd/unix-directory",
+ "Please enter a valid time span" : "Vpisati je treba veljaven časovni obseg",
+ "Files WebDAV" : "Datoteke WebDAV",
+ "Custom URL" : "Naslov URL po meri",
+ "Select a request URL" : "Izberite naslov URL zahteve",
+ "Android client" : "Odjemalec za Android",
+ "iOS client" : "Odjemalec za iOS",
+ "Desktop client" : "Odjemalec za namizne računalnike",
+ "Thunderbird & Outlook addons" : "Razširitve za Thunderbird in Outlook",
+ "Custom user agent" : "Uporabniški odjemalec po meri",
+ "Select a user agent" : "Izbor uporabniškega odjemalca",
+ "Select groups" : "Izbor skupin",
+ "Groups" : "Skupine",
+ "At least one event must be selected" : "Izbran mora biti vsaj en dogodek",
+ "Add new flow" : "Dodaj koračnik",
+ "The configuration is invalid" : "Nastavitev ni veljavna",
+ "Active" : "Dejavno",
+ "Save" : "Shrani",
+ "When" : "Ko je",
+ "and" : "in",
+ "Cancel" : "Prekliči",
+ "Delete" : "Izbriši",
+ "Available flows" : "Razpoložljivi koračniki",
+ "For details on how to write your own flow, check out the development documentation." : "Za podrobnosti, kako sestaviti koračnike po meri, preverite razvijalsko dokumentacijo.",
+ "No flows installed" : "Ni nameščenih koračnikov",
+ "Ask your administrator to install new flows." : "Za namestitev novih stopite v stik s skrbnikom sistema.",
+ "More flows" : "Več koračnikov",
+ "Browse the App Store" : "Prebrskaj po trgovini programov",
+ "Show less" : "Pokaži manj",
+ "Show more" : "Pokaži več",
+ "Configured flows" : "Nastavljeni koračniki",
+ "Your flows" : "Koračniki po meri",
+ "No flows configured" : "Ni nastavljenih koračnikov",
+ "matches" : "se sklada z",
+ "does not match" : "se ne sklada z",
+ "is" : "je",
+ "is not" : "ni",
+ "File name" : "Ime datoteke",
+ "File MIME type" : "Vrsta MIME datoteke",
+ "File size (upload)" : "Velikost datoteke (↑)",
+ "less" : "je manjša",
+ "less or equals" : "je manjša ali enaka",
+ "greater or equals" : "je večja ali enaka",
+ "greater" : "je večja",
+ "Request remote address" : "Oddaljeni naslov",
+ "matches IPv4" : "se sklada z IPv4",
+ "does not match IPv4" : "ni skladen z IPv4",
+ "matches IPv6" : "se sklada z IPv6",
+ "does not match IPv6" : "ni skladen z IPv6",
+ "File system tag" : "Sistemska oznaka",
+ "is tagged with" : "je",
+ "is not tagged with" : "ni",
+ "Request URL" : "Naslov URL za dostop",
+ "Request time" : "Čas dostopa",
+ "between" : "je dovoljen med",
+ "not between" : "ni dovoljen med",
+ "Request user agent" : "Uporabniški odjemalec",
+ "is member of" : "je v skupini",
+ "is not member of" : "ni v skupini"
+},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sq.js b/apps/workflowengine/l10n/sq.js
deleted file mode 100644
index ec8a0366aa8..00000000000
--- a/apps/workflowengine/l10n/sq.js
+++ /dev/null
@@ -1,73 +0,0 @@
-OC.L10N.register(
- "workflowengine",
- {
- "Saved" : "E ruajtur",
- "Saving failed:" : "Ruajtja dështoi:",
- "File MIME type" : "Skedari i tipit MIME",
- "is" : "është",
- "is not" : "nuk është",
- "matches" : "përputhje",
- "does not match" : "nuk përputhet",
- "Example: {placeholder}" : "Për shembull: {placeholder}",
- "File size (upload)" : "Madhësia e skedarit (ngarko)",
- "less" : "më pak",
- "less or equals" : "më pak ose e barabartë",
- "greater or equals" : "më e madhe ose e barabartë",
- "greater" : "më e madhe",
- "File system tag" : "Etiketë e skedarit të sistemit",
- "is tagged with" : "është e etiketuar me",
- "is not tagged with" : "nuk është e etiketuar me",
- "Select tag…" : "Zgjidh etiketën...",
- "Request remote address" : "Adresa e kërkesës remote",
- "matches IPv4" : "përputhet me IPv4",
- "does not match IPv4" : "nuk përputhet me IPv4",
- "matches IPv6" : "përputhet me IPv6",
- "does not match IPv6" : "nuk përputhet me IPv6",
- "Request time" : "Koha e kërkesës",
- "between" : "midis",
- "not between" : "nuk është midis",
- "Start" : "Fillim",
- "End" : "Mbarim",
- "Select timezone…" : "Zgjidh brezin kohorë",
- "Request URL" : "Kërko URL",
- "Predefined URLs" : "URL të paracaktuara",
- "Files WebDAV" : "Skedarët WebDAV ",
- "Request user agent" : "Kërko agjentin përdorues",
- "Sync clients" : "Klient të sinkronizuar",
- "Android client" : "Klient Android",
- "iOS client" : "Klient IOS",
- "Desktop client" : "Klient Desktop",
- "User group membership" : "Anëtarësia në grupet e përdoruesit",
- "is member of" : "është anëtarë i",
- "is not member of" : "nuk është anëtarë i",
- "The given operator is invalid" : "Operatori i dhënë nuk është i vlefshëm",
- "The given regular expression is invalid" : "Shprehja e rregullt e dhënë është e pavlefshme",
- "The given file size is invalid" : "Madhësia e dhënë e skedarit është e pavlefshme",
- "The given tag id is invalid" : "Id-ja e dhënë e etiketës është e pavlefshme",
- "The given IP range is invalid" : "Rangu i dhënë i IP është i pavlefshëm",
- "The given IP range is not valid for IPv4" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv4",
- "The given IP range is not valid for IPv6" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv6",
- "The given time span is invalid" : "Hapsira kohore e dhënë është e pavlefshme",
- "The given start time is invalid" : "Koha e fillimit është e pavlefshme",
- "The given end time is invalid" : "Koha e mbarimit është e pavlefshme",
- "The given group does not exist" : "Grupi i dhënë nuk ekziston",
- "Check %s is invalid or does not exist" : "Kontrolli %s është i pavlefshëm ose nuk ekziston",
- "Operation #%s does not exist" : "Operacioni #%s nuk ekziston",
- "Operation %s does not exist" : "Operacioni %s nuk ekziston",
- "Operation %s is invalid" : "Operacioni %s është i pavlefshëm",
- "Check %s does not exist" : "Kontrolli %s nuk ekziston",
- "Check %s is invalid" : "Kontrolli %s është i pavlefshëm",
- "Check #%s does not exist" : "Kontrolli #%s nuk ekziston",
- "Workflow" : "Rrjedha e punëve",
- "Open documentation" : "Dokumentacion i hapur",
- "Add rule group" : "Shto rregull grupi",
- "Short rule description" : "Përshkrim i shkurtër i rregullit",
- "Add rule" : "Shto rregull",
- "Reset" : "Rivendos",
- "Save" : "Ruaj",
- "Saving…" : "Duke u ruajtur...",
- "Loading…" : "Po ngarkohet...",
- "Successfully saved" : "U ruajt me sukses",
- "File mime type" : "Tipi mime i skedarëve"
-},
-"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sq.json b/apps/workflowengine/l10n/sq.json
deleted file mode 100644
index e0af973e61a..00000000000
--- a/apps/workflowengine/l10n/sq.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{ "translations": {
- "Saved" : "E ruajtur",
- "Saving failed:" : "Ruajtja dështoi:",
- "File MIME type" : "Skedari i tipit MIME",
- "is" : "është",
- "is not" : "nuk është",
- "matches" : "përputhje",
- "does not match" : "nuk përputhet",
- "Example: {placeholder}" : "Për shembull: {placeholder}",
- "File size (upload)" : "Madhësia e skedarit (ngarko)",
- "less" : "më pak",
- "less or equals" : "më pak ose e barabartë",
- "greater or equals" : "më e madhe ose e barabartë",
- "greater" : "më e madhe",
- "File system tag" : "Etiketë e skedarit të sistemit",
- "is tagged with" : "është e etiketuar me",
- "is not tagged with" : "nuk është e etiketuar me",
- "Select tag…" : "Zgjidh etiketën...",
- "Request remote address" : "Adresa e kërkesës remote",
- "matches IPv4" : "përputhet me IPv4",
- "does not match IPv4" : "nuk përputhet me IPv4",
- "matches IPv6" : "përputhet me IPv6",
- "does not match IPv6" : "nuk përputhet me IPv6",
- "Request time" : "Koha e kërkesës",
- "between" : "midis",
- "not between" : "nuk është midis",
- "Start" : "Fillim",
- "End" : "Mbarim",
- "Select timezone…" : "Zgjidh brezin kohorë",
- "Request URL" : "Kërko URL",
- "Predefined URLs" : "URL të paracaktuara",
- "Files WebDAV" : "Skedarët WebDAV ",
- "Request user agent" : "Kërko agjentin përdorues",
- "Sync clients" : "Klient të sinkronizuar",
- "Android client" : "Klient Android",
- "iOS client" : "Klient IOS",
- "Desktop client" : "Klient Desktop",
- "User group membership" : "Anëtarësia në grupet e përdoruesit",
- "is member of" : "është anëtarë i",
- "is not member of" : "nuk është anëtarë i",
- "The given operator is invalid" : "Operatori i dhënë nuk është i vlefshëm",
- "The given regular expression is invalid" : "Shprehja e rregullt e dhënë është e pavlefshme",
- "The given file size is invalid" : "Madhësia e dhënë e skedarit është e pavlefshme",
- "The given tag id is invalid" : "Id-ja e dhënë e etiketës është e pavlefshme",
- "The given IP range is invalid" : "Rangu i dhënë i IP është i pavlefshëm",
- "The given IP range is not valid for IPv4" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv4",
- "The given IP range is not valid for IPv6" : "Rangu i dhënë i IP nuk është i vlefshëm për IPv6",
- "The given time span is invalid" : "Hapsira kohore e dhënë është e pavlefshme",
- "The given start time is invalid" : "Koha e fillimit është e pavlefshme",
- "The given end time is invalid" : "Koha e mbarimit është e pavlefshme",
- "The given group does not exist" : "Grupi i dhënë nuk ekziston",
- "Check %s is invalid or does not exist" : "Kontrolli %s është i pavlefshëm ose nuk ekziston",
- "Operation #%s does not exist" : "Operacioni #%s nuk ekziston",
- "Operation %s does not exist" : "Operacioni %s nuk ekziston",
- "Operation %s is invalid" : "Operacioni %s është i pavlefshëm",
- "Check %s does not exist" : "Kontrolli %s nuk ekziston",
- "Check %s is invalid" : "Kontrolli %s është i pavlefshëm",
- "Check #%s does not exist" : "Kontrolli #%s nuk ekziston",
- "Workflow" : "Rrjedha e punëve",
- "Open documentation" : "Dokumentacion i hapur",
- "Add rule group" : "Shto rregull grupi",
- "Short rule description" : "Përshkrim i shkurtër i rregullit",
- "Add rule" : "Shto rregull",
- "Reset" : "Rivendos",
- "Save" : "Ruaj",
- "Saving…" : "Duke u ruajtur...",
- "Loading…" : "Po ngarkohet...",
- "Successfully saved" : "U ruajt me sukses",
- "File mime type" : "Tipi mime i skedarëve"
-},"pluralForm" :"nplurals=2; plural=(n != 1);"
-} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sr.js b/apps/workflowengine/l10n/sr.js
index 2a0c0118e16..30fc1769de7 100644
--- a/apps/workflowengine/l10n/sr.js
+++ b/apps/workflowengine/l10n/sr.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Снимљено",
- "Saving failed:" : "Снимање није успело:",
- "File MIME type" : "MIME тип фајла",
- "is" : "је",
- "is not" : "није",
- "matches" : "се поклапа са",
- "does not match" : "се не поклапа са",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Величина фајла (отпремање)",
- "less" : "је мања од",
- "less or equals" : "мања или једнака од",
- "greater or equals" : "већа или једнака од",
- "greater" : "већа од",
- "File system tag" : "Системска ознака фајла",
- "is tagged with" : "је означен са",
- "is not tagged with" : "није означен са",
- "Select tag…" : "Одаберите ознаку…",
- "Request remote address" : "Захтевај удаљену адресу",
- "matches IPv4" : "поклапа се са IPv4 адресом",
- "does not match IPv4" : "не поклапа се са IPv4 адресом",
- "matches IPv6" : "поклапа се са IPv6 адресом",
- "does not match IPv6" : "не поклапа се са IPv6 адресом",
- "Request time" : "Време захтева",
- "between" : "између",
- "not between" : "није између",
- "Start" : "Почетак",
- "End" : "Крај",
- "Select timezone…" : "Одаберите временску зону…",
- "Request URL" : "Адреса захтева",
- "Predefined URLs" : "Предефинисане адресе",
- "Files WebDAV" : "WebDAV фајлови",
- "Request user agent" : "Кориснички агент захтева",
- "Sync clients" : "Синхронизовани клијенти",
- "Android client" : "Андроид клијент",
- "iOS client" : "iOS клијент",
- "Desktop client" : "Десктоп клијент",
- "User group membership" : "Припадност групи",
- "is member of" : "је члан групе",
- "is not member of" : "није члан групе",
"The given operator is invalid" : "Дати оператор није исправан",
"The given regular expression is invalid" : "Дати регуларни израз није исправан",
"The given file size is invalid" : "Дата величина фајла није исправна",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Дато време почетка није исправно",
"The given end time is invalid" : "Дато време краја није исправно",
"The given group does not exist" : "Дата група не постоји",
- "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "File" : "Фајл",
+ "File created" : "Фајл направљен",
+ "File updated" : "Фајл измењен",
+ "File renamed" : "Фајл преименован",
+ "File deleted" : "Фајл обрисан",
+ "File accessed" : "Фајлу приступљено",
+ "File copied" : "Фајл копиран",
+ "Tag assigned" : "Додељена ознака",
+ "Someone" : "Неко",
+ "%s created %s" : "%s је направио %s",
+ "%s modified %s" : "%s је изменио %s",
+ "%s deleted %s" : "%s је обрисао %s",
+ "%s accessed %s" : "%s је приступио %s",
+ "%s renamed %s" : "%s је преименовао %s",
+ "%s copied %s" : "%s је копирао %s",
+ "%s assigned %s to %s" : "%s је доделио %s на %s",
"Operation #%s does not exist" : "Операција #%s не постоји",
+ "Entity %s does not exist" : "Ентитет %s не постоји",
+ "Entity %s is invalid" : "Ентитет %s није исправан",
+ "No events are chosen." : "Није одабран ниједан догађај.",
+ "Entity %s has no event %s" : "Ентитет %s нема ниједан догађај %s",
"Operation %s does not exist" : "Операција %s не постоји",
"Operation %s is invalid" : "Операција %s није исправна",
+ "At least one check needs to be provided" : "Треба да се зада бар једна провера",
+ "The provided operation data is too long" : "Наведени операциони подаци су сувише дугачки",
+ "Invalid check provided" : "Задата неисправна потврда",
"Check %s does not exist" : "Проверите да ли %s постоји",
"Check %s is invalid" : "Проверите да ли је %s исправно",
+ "Check %s is not allowed with this entity" : "Провера %s није дозвољена са овим ентитетом",
+ "The provided check value is too long" : "Наведена вредност за проверу је сувише дугачка",
"Check #%s does not exist" : "Проверите да ли #%s постоји",
- "Workflow" : "Процес рада",
- "Open documentation" : "Отвори документацију",
- "Add rule group" : "Додај групу правила",
- "Short rule description" : "Кратки опис правила",
- "Add rule" : "Додај правило",
- "Reset" : "Ресетуј",
+ "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "Flow" : "Ток",
+ "Nextcloud workflow engine" : "Некстклаудов мотор радног тока",
+ "Select a filter" : "Одаберите филтер",
+ "Select a comparator" : "Одаберите компаратор",
+ "Remove filter" : "Уклони филтер",
+ "Folder" : "Фасцикла",
+ "Images" : "Слике",
+ "Office documents" : "Канцеларијски документи",
+ "PDF documents" : "PDF документи",
+ "Custom MIME type" : "Прилагођени MIME тип",
+ "Custom mimetype" : "Произвољни MIME тип",
+ "Select a file type" : "Одаберите тип фајла",
+ "e.g. httpd/unix-directory" : "нпр. httpd/unix-directory",
+ "Please enter a valid time span" : "Унесите исправан временски распон",
+ "Files WebDAV" : "WebDAV фајлови",
+ "Custom URL" : "Произвољна адреса",
+ "Select a request URL" : "Одабери адресу захтева",
+ "Android client" : "Андроид клијент",
+ "iOS client" : "iOS клијент",
+ "Desktop client" : "Десктоп клијент",
+ "Thunderbird & Outlook addons" : "Додаци за Thunderbird & Outlook",
+ "Custom user agent" : "Произвољни агент захтева",
+ "Select a user agent" : "Одаберите агента захтева",
+ "Select groups" : "Изаберите групе",
+ "Groups" : "Групе",
+ "Type to search for group …" : "Куцајте да претражите групу",
+ "Select a trigger" : "Изаберите окидач",
+ "At least one event must be selected" : "Мора бити одабран бар један догађај",
+ "Add new flow" : "Додај нови ток",
+ "The configuration is invalid" : "Конфигурација је неисправна",
+ "Active" : "Активан",
"Save" : "Сачувај",
- "Saving…" : "Чувам…",
- "Loading…" : "Учитавање…",
- "Successfully saved" : "Успешно сачувано",
- "File mime type" : "MIME тип фајла"
+ "When" : "Када",
+ "and" : "и",
+ "Add a new filter" : "Додај нови филтер",
+ "Cancel" : "Откажи",
+ "Delete" : "Обриши",
+ "Available flows" : "Доступни токови",
+ "For details on how to write your own flow, check out the development documentation." : "За детаље како написати сопствени ток, погледајте програмерску документацију.",
+ "No flows installed" : "Није инсталиран ниједан ток",
+ "Ask your administrator to install new flows." : "Затражите од свог администратора да инсталира нове токове.",
+ "More flows" : "Још токова",
+ "Browse the App Store" : "Прегледајте Продавницу апликација",
+ "Show less" : "Прикажи мање",
+ "Show more" : "Прикажи више",
+ "Configured flows" : "Подешени токови",
+ "Your flows" : "Ваши токови",
+ "No flows configured" : "Није конфигурисан ниједан ток",
+ "matches" : "се поклапа са",
+ "does not match" : "се не поклапа са",
+ "is" : "је",
+ "is not" : "није",
+ "File name" : "Име фајла",
+ "File MIME type" : "MIME тип фајла",
+ "File size (upload)" : "Величина фајла (отпремање)",
+ "less" : "је мања од",
+ "less or equals" : "мања или једнака од",
+ "greater or equals" : "већа или једнака од",
+ "greater" : "већа од",
+ "Request remote address" : "Захтевај удаљену адресу",
+ "matches IPv4" : "поклапа се са IPv4 адресом",
+ "does not match IPv4" : "не поклапа се са IPv4 адресом",
+ "matches IPv6" : "поклапа се са IPv6 адресом",
+ "does not match IPv6" : "не поклапа се са IPv6 адресом",
+ "File system tag" : "Системска ознака фајла",
+ "is tagged with" : "је означен са",
+ "is not tagged with" : "није означен са",
+ "Request URL" : "Адреса захтева",
+ "Request time" : "Време захтева",
+ "between" : "између",
+ "not between" : "није између",
+ "Request user agent" : "Кориснички агент захтева",
+ "Group membership" : "Припадност групи",
+ "is member of" : "је члан групе",
+ "is not member of" : "није члан групе"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);");
diff --git a/apps/workflowengine/l10n/sr.json b/apps/workflowengine/l10n/sr.json
index ea34207a608..f47543608ed 100644
--- a/apps/workflowengine/l10n/sr.json
+++ b/apps/workflowengine/l10n/sr.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Снимљено",
- "Saving failed:" : "Снимање није успело:",
- "File MIME type" : "MIME тип фајла",
- "is" : "је",
- "is not" : "није",
- "matches" : "се поклапа са",
- "does not match" : "се не поклапа са",
- "Example: {placeholder}" : "Пример: {placeholder}",
- "File size (upload)" : "Величина фајла (отпремање)",
- "less" : "је мања од",
- "less or equals" : "мања или једнака од",
- "greater or equals" : "већа или једнака од",
- "greater" : "већа од",
- "File system tag" : "Системска ознака фајла",
- "is tagged with" : "је означен са",
- "is not tagged with" : "није означен са",
- "Select tag…" : "Одаберите ознаку…",
- "Request remote address" : "Захтевај удаљену адресу",
- "matches IPv4" : "поклапа се са IPv4 адресом",
- "does not match IPv4" : "не поклапа се са IPv4 адресом",
- "matches IPv6" : "поклапа се са IPv6 адресом",
- "does not match IPv6" : "не поклапа се са IPv6 адресом",
- "Request time" : "Време захтева",
- "between" : "између",
- "not between" : "није између",
- "Start" : "Почетак",
- "End" : "Крај",
- "Select timezone…" : "Одаберите временску зону…",
- "Request URL" : "Адреса захтева",
- "Predefined URLs" : "Предефинисане адресе",
- "Files WebDAV" : "WebDAV фајлови",
- "Request user agent" : "Кориснички агент захтева",
- "Sync clients" : "Синхронизовани клијенти",
- "Android client" : "Андроид клијент",
- "iOS client" : "iOS клијент",
- "Desktop client" : "Десктоп клијент",
- "User group membership" : "Припадност групи",
- "is member of" : "је члан групе",
- "is not member of" : "није члан групе",
"The given operator is invalid" : "Дати оператор није исправан",
"The given regular expression is invalid" : "Дати регуларни израз није исправан",
"The given file size is invalid" : "Дата величина фајла није исправна",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Дато време почетка није исправно",
"The given end time is invalid" : "Дато време краја није исправно",
"The given group does not exist" : "Дата група не постоји",
- "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "File" : "Фајл",
+ "File created" : "Фајл направљен",
+ "File updated" : "Фајл измењен",
+ "File renamed" : "Фајл преименован",
+ "File deleted" : "Фајл обрисан",
+ "File accessed" : "Фајлу приступљено",
+ "File copied" : "Фајл копиран",
+ "Tag assigned" : "Додељена ознака",
+ "Someone" : "Неко",
+ "%s created %s" : "%s је направио %s",
+ "%s modified %s" : "%s је изменио %s",
+ "%s deleted %s" : "%s је обрисао %s",
+ "%s accessed %s" : "%s је приступио %s",
+ "%s renamed %s" : "%s је преименовао %s",
+ "%s copied %s" : "%s је копирао %s",
+ "%s assigned %s to %s" : "%s је доделио %s на %s",
"Operation #%s does not exist" : "Операција #%s не постоји",
+ "Entity %s does not exist" : "Ентитет %s не постоји",
+ "Entity %s is invalid" : "Ентитет %s није исправан",
+ "No events are chosen." : "Није одабран ниједан догађај.",
+ "Entity %s has no event %s" : "Ентитет %s нема ниједан догађај %s",
"Operation %s does not exist" : "Операција %s не постоји",
"Operation %s is invalid" : "Операција %s није исправна",
+ "At least one check needs to be provided" : "Треба да се зада бар једна провера",
+ "The provided operation data is too long" : "Наведени операциони подаци су сувише дугачки",
+ "Invalid check provided" : "Задата неисправна потврда",
"Check %s does not exist" : "Проверите да ли %s постоји",
"Check %s is invalid" : "Проверите да ли је %s исправно",
+ "Check %s is not allowed with this entity" : "Провера %s није дозвољена са овим ентитетом",
+ "The provided check value is too long" : "Наведена вредност за проверу је сувише дугачка",
"Check #%s does not exist" : "Проверите да ли #%s постоји",
- "Workflow" : "Процес рада",
- "Open documentation" : "Отвори документацију",
- "Add rule group" : "Додај групу правила",
- "Short rule description" : "Кратки опис правила",
- "Add rule" : "Додај правило",
- "Reset" : "Ресетуј",
+ "Check %s is invalid or does not exist" : "Проверите да ли је %s неисправно или не постоји",
+ "Flow" : "Ток",
+ "Nextcloud workflow engine" : "Некстклаудов мотор радног тока",
+ "Select a filter" : "Одаберите филтер",
+ "Select a comparator" : "Одаберите компаратор",
+ "Remove filter" : "Уклони филтер",
+ "Folder" : "Фасцикла",
+ "Images" : "Слике",
+ "Office documents" : "Канцеларијски документи",
+ "PDF documents" : "PDF документи",
+ "Custom MIME type" : "Прилагођени MIME тип",
+ "Custom mimetype" : "Произвољни MIME тип",
+ "Select a file type" : "Одаберите тип фајла",
+ "e.g. httpd/unix-directory" : "нпр. httpd/unix-directory",
+ "Please enter a valid time span" : "Унесите исправан временски распон",
+ "Files WebDAV" : "WebDAV фајлови",
+ "Custom URL" : "Произвољна адреса",
+ "Select a request URL" : "Одабери адресу захтева",
+ "Android client" : "Андроид клијент",
+ "iOS client" : "iOS клијент",
+ "Desktop client" : "Десктоп клијент",
+ "Thunderbird & Outlook addons" : "Додаци за Thunderbird & Outlook",
+ "Custom user agent" : "Произвољни агент захтева",
+ "Select a user agent" : "Одаберите агента захтева",
+ "Select groups" : "Изаберите групе",
+ "Groups" : "Групе",
+ "Type to search for group …" : "Куцајте да претражите групу",
+ "Select a trigger" : "Изаберите окидач",
+ "At least one event must be selected" : "Мора бити одабран бар један догађај",
+ "Add new flow" : "Додај нови ток",
+ "The configuration is invalid" : "Конфигурација је неисправна",
+ "Active" : "Активан",
"Save" : "Сачувај",
- "Saving…" : "Чувам…",
- "Loading…" : "Учитавање…",
- "Successfully saved" : "Успешно сачувано",
- "File mime type" : "MIME тип фајла"
+ "When" : "Када",
+ "and" : "и",
+ "Add a new filter" : "Додај нови филтер",
+ "Cancel" : "Откажи",
+ "Delete" : "Обриши",
+ "Available flows" : "Доступни токови",
+ "For details on how to write your own flow, check out the development documentation." : "За детаље како написати сопствени ток, погледајте програмерску документацију.",
+ "No flows installed" : "Није инсталиран ниједан ток",
+ "Ask your administrator to install new flows." : "Затражите од свог администратора да инсталира нове токове.",
+ "More flows" : "Још токова",
+ "Browse the App Store" : "Прегледајте Продавницу апликација",
+ "Show less" : "Прикажи мање",
+ "Show more" : "Прикажи више",
+ "Configured flows" : "Подешени токови",
+ "Your flows" : "Ваши токови",
+ "No flows configured" : "Није конфигурисан ниједан ток",
+ "matches" : "се поклапа са",
+ "does not match" : "се не поклапа са",
+ "is" : "је",
+ "is not" : "није",
+ "File name" : "Име фајла",
+ "File MIME type" : "MIME тип фајла",
+ "File size (upload)" : "Величина фајла (отпремање)",
+ "less" : "је мања од",
+ "less or equals" : "мања или једнака од",
+ "greater or equals" : "већа или једнака од",
+ "greater" : "већа од",
+ "Request remote address" : "Захтевај удаљену адресу",
+ "matches IPv4" : "поклапа се са IPv4 адресом",
+ "does not match IPv4" : "не поклапа се са IPv4 адресом",
+ "matches IPv6" : "поклапа се са IPv6 адресом",
+ "does not match IPv6" : "не поклапа се са IPv6 адресом",
+ "File system tag" : "Системска ознака фајла",
+ "is tagged with" : "је означен са",
+ "is not tagged with" : "није означен са",
+ "Request URL" : "Адреса захтева",
+ "Request time" : "Време захтева",
+ "between" : "између",
+ "not between" : "није између",
+ "Request user agent" : "Кориснички агент захтева",
+ "Group membership" : "Припадност групи",
+ "is member of" : "је члан групе",
+ "is not member of" : "није члан групе"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sv.js b/apps/workflowengine/l10n/sv.js
index 9561df49408..595f50e84f3 100644
--- a/apps/workflowengine/l10n/sv.js
+++ b/apps/workflowengine/l10n/sv.js
@@ -1,45 +1,6 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Sparad",
- "Saving failed:" : "Gick ej att spara: ",
- "File MIME type" : "Filens MIME-typ",
- "is" : "är",
- "is not" : "är inte",
- "matches" : "träffar",
- "does not match" : "matchar inte",
- "Example: {placeholder}" : "Exempel: {placeholder}",
- "File size (upload)" : "Filstorlek (uppladdning)",
- "less" : "mindre",
- "less or equals" : "mindre eller motsvarar",
- "greater or equals" : "större eller motsvarar",
- "greater" : "större",
- "File system tag" : "Filens systemtagg",
- "is tagged with" : "är taggad med",
- "is not tagged with" : "är inte taggad med",
- "Select tag…" : "Välj tagg...",
- "Request remote address" : "Begär extern adress",
- "matches IPv4" : "matchar IPv4",
- "does not match IPv4" : "matchar inte IPv4",
- "matches IPv6" : "matchar IPv6",
- "does not match IPv6" : "matchar inte IPv6",
- "Request time" : "Begärningstid",
- "between" : "mellan",
- "not between" : "inte mellan",
- "Start" : "Början",
- "End" : "Slutet",
- "Select timezone…" : "Välj tidszon...",
- "Request URL" : "Begär URL",
- "Predefined URLs" : "Förinställda URL:er",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Begär användaragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android-klient",
- "iOS client" : "iOS-klient",
- "Desktop client" : "Skrivbordsklient",
- "User group membership" : "Användargruppsmedlemskap",
- "is member of" : "är medlem i",
- "is not member of" : "är inte medlem i",
"The given operator is invalid" : "Den valda operatören är felaktig",
"The given regular expression is invalid" : "Det valda vanliga uttrycket är felaktigt",
"The given file size is invalid" : "Den valda filstorleken är felaktig",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Den valda starttiden är felaktig",
"The given end time is invalid" : "Den valda sluttiden är felaktig",
"The given group does not exist" : "Den valda gruppen finns inte",
- "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "File" : "Fil",
+ "File created" : "Fil skapad",
+ "File updated" : "Fil uppdaterad",
+ "File renamed" : "Fil omdöpt",
+ "File deleted" : "Fil raderad",
+ "File accessed" : "Fil öppnad",
+ "File copied" : "Fil kopierad",
+ "Tag assigned" : "Tagg tilldelad",
+ "Someone" : "Någon",
+ "%s created %s" : "%s skapad %s",
+ "%s modified %s" : "%s ändrad %s",
+ "%s deleted %s" : "%s raderad %s",
+ "%s accessed %s" : "%s öppnade %s",
+ "%s renamed %s" : "%s omdöpt %s",
+ "%s copied %s" : "%s kopierad %s",
+ "%s assigned %s to %s" : "%s tilldelad %s till %s",
"Operation #%s does not exist" : "Operationen #%s existerar inte",
+ "Entity %s does not exist" : "Objekt 1%s finns inte",
+ "Entity %s is invalid" : "Entitet %s är ogiltig",
+ "No events are chosen." : "Inga händelser valda",
+ "Entity %s has no event %s" : "Objekt 1%s har ingen händelse 1%s",
"Operation %s does not exist" : "Operationen %s existerar inte",
"Operation %s is invalid" : "Operationen %s är ogiltig",
+ "At least one check needs to be provided" : "Minst en kontroll måste tillhandahållas",
+ "The provided operation data is too long" : "Den angivna operationsdatan är för lång",
+ "Invalid check provided" : "Ogiltig kontroll angavs",
"Check %s does not exist" : "Kontroll av %s existerar inte",
"Check %s is invalid" : "Kontroll av %s är ogiltig",
+ "Check %s is not allowed with this entity" : "Kontroll %s tillåts inte med denna enhet",
+ "The provided check value is too long" : "Det angivna kontrollvärdet är för långt",
"Check #%s does not exist" : "Kontroll av #%s existerar inte",
- "Workflow" : "Arbetsflöde",
- "Open documentation" : "Öppna dokumentation",
- "Add rule group" : "Lägg till regelgrupp",
- "Short rule description" : "Kort regelbeskrivning",
- "Add rule" : "Lägg till regel",
- "Reset" : "Återställ",
+ "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "Flow" : "Flöde",
+ "Nextcloud workflow engine" : "Nextcloud arbetsflödesmotor",
+ "Select a filter" : "Välj ett filter",
+ "Select a comparator" : "Välj en jämförelse",
+ "Remove filter" : "Ta bort filter",
+ "Folder" : "Mapp",
+ "Images" : "Bilder",
+ "Office documents" : "Office-dokument",
+ "PDF documents" : "PDF-dokument",
+ "Custom MIME type" : "Anpassad MIME-typ",
+ "Custom mimetype" : "Anpassad mimetyp",
+ "Select a file type" : "Välj en filtyp",
+ "e.g. httpd/unix-directory" : "t.ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Ange ett giltigt tidsintervall",
+ "Files WebDAV" : "Filer WebDAV",
+ "Custom URL" : "Anpassad webbadress",
+ "Select a request URL" : "Välj en webbadress för begäran",
+ "Android client" : "Android-klient",
+ "iOS client" : "iOS-klient",
+ "Desktop client" : "Skrivbordsklient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook - tillägg",
+ "Custom user agent" : "Anpassad användaragent",
+ "Select a user agent" : "Välj en användaragent",
+ "Select groups" : "Välj grupper",
+ "Groups" : "Grupper",
+ "Type to search for group …" : "Skriv för att söka efter grupp ...",
+ "Select a trigger" : "Välj en utlösare",
+ "At least one event must be selected" : "Minst en händelse måste väljas",
+ "Add new flow" : "Lägg till nytt flöde",
+ "The configuration is invalid" : "Konfigurationen är felaktig",
+ "Active" : "Aktiv",
"Save" : "Spara",
- "Saving…" : "Sparar...",
- "Loading…" : "Laddar...",
- "Successfully saved" : "Sparades framgångsrikt",
- "File mime type" : "Filens \"mime\" typ"
+ "When" : "När",
+ "and" : "och",
+ "Add a new filter" : "Lägg till nytt filter",
+ "Cancel" : "Avbryt",
+ "Delete" : "Radera",
+ "Available flows" : "Tillgängliga flöden",
+ "For details on how to write your own flow, check out the development documentation." : "För information om hur du skriver ditt eget flöde, se utvecklingsdokumentationen.",
+ "No flows installed" : "Inga flöden installerade",
+ "Ask your administrator to install new flows." : "Be din administratör att installera nya flöden.",
+ "More flows" : "Fler flöden",
+ "Browse the App Store" : "Bläddra i appbutiken",
+ "Show less" : "Visa mindre",
+ "Show more" : "Visa mer",
+ "Configured flows" : "Konfigurerade flöden",
+ "Your flows" : "Dina flöden",
+ "No flows configured" : "Inga flöden har konfigurerats",
+ "matches" : "träffar",
+ "does not match" : "matchar inte",
+ "is" : "är",
+ "is not" : "är inte",
+ "File name" : "Filnamn",
+ "File MIME type" : "Filens MIME-typ",
+ "File size (upload)" : "Filstorlek (uppladdning)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller motsvarar",
+ "greater or equals" : "större eller motsvarar",
+ "greater" : "större",
+ "Request remote address" : "Begär extern adress",
+ "matches IPv4" : "matchar IPv4",
+ "does not match IPv4" : "matchar inte IPv4",
+ "matches IPv6" : "matchar IPv6",
+ "does not match IPv6" : "matchar inte IPv6",
+ "File system tag" : "Filens systemtagg",
+ "is tagged with" : "är taggad med",
+ "is not tagged with" : "är inte taggad med",
+ "Request URL" : "Begär webbadress",
+ "Request time" : "Begärningstid",
+ "between" : "mellan",
+ "not between" : "inte mellan",
+ "Request user agent" : "Begär användaragent",
+ "Group membership" : "Gruppmedlemskap",
+ "is member of" : "är medlem i",
+ "is not member of" : "är inte medlem i"
},
"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sv.json b/apps/workflowengine/l10n/sv.json
index 1b28ef2f7dc..4bb32eab747 100644
--- a/apps/workflowengine/l10n/sv.json
+++ b/apps/workflowengine/l10n/sv.json
@@ -1,43 +1,4 @@
{ "translations": {
- "Saved" : "Sparad",
- "Saving failed:" : "Gick ej att spara: ",
- "File MIME type" : "Filens MIME-typ",
- "is" : "är",
- "is not" : "är inte",
- "matches" : "träffar",
- "does not match" : "matchar inte",
- "Example: {placeholder}" : "Exempel: {placeholder}",
- "File size (upload)" : "Filstorlek (uppladdning)",
- "less" : "mindre",
- "less or equals" : "mindre eller motsvarar",
- "greater or equals" : "större eller motsvarar",
- "greater" : "större",
- "File system tag" : "Filens systemtagg",
- "is tagged with" : "är taggad med",
- "is not tagged with" : "är inte taggad med",
- "Select tag…" : "Välj tagg...",
- "Request remote address" : "Begär extern adress",
- "matches IPv4" : "matchar IPv4",
- "does not match IPv4" : "matchar inte IPv4",
- "matches IPv6" : "matchar IPv6",
- "does not match IPv6" : "matchar inte IPv6",
- "Request time" : "Begärningstid",
- "between" : "mellan",
- "not between" : "inte mellan",
- "Start" : "Början",
- "End" : "Slutet",
- "Select timezone…" : "Välj tidszon...",
- "Request URL" : "Begär URL",
- "Predefined URLs" : "Förinställda URL:er",
- "Files WebDAV" : "Filer WebDAV",
- "Request user agent" : "Begär användaragent",
- "Sync clients" : "Synkroniseringsklienter",
- "Android client" : "Android-klient",
- "iOS client" : "iOS-klient",
- "Desktop client" : "Skrivbordsklient",
- "User group membership" : "Användargruppsmedlemskap",
- "is member of" : "är medlem i",
- "is not member of" : "är inte medlem i",
"The given operator is invalid" : "Den valda operatören är felaktig",
"The given regular expression is invalid" : "Det valda vanliga uttrycket är felaktigt",
"The given file size is invalid" : "Den valda filstorleken är felaktig",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Den valda starttiden är felaktig",
"The given end time is invalid" : "Den valda sluttiden är felaktig",
"The given group does not exist" : "Den valda gruppen finns inte",
- "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "File" : "Fil",
+ "File created" : "Fil skapad",
+ "File updated" : "Fil uppdaterad",
+ "File renamed" : "Fil omdöpt",
+ "File deleted" : "Fil raderad",
+ "File accessed" : "Fil öppnad",
+ "File copied" : "Fil kopierad",
+ "Tag assigned" : "Tagg tilldelad",
+ "Someone" : "Någon",
+ "%s created %s" : "%s skapad %s",
+ "%s modified %s" : "%s ändrad %s",
+ "%s deleted %s" : "%s raderad %s",
+ "%s accessed %s" : "%s öppnade %s",
+ "%s renamed %s" : "%s omdöpt %s",
+ "%s copied %s" : "%s kopierad %s",
+ "%s assigned %s to %s" : "%s tilldelad %s till %s",
"Operation #%s does not exist" : "Operationen #%s existerar inte",
+ "Entity %s does not exist" : "Objekt 1%s finns inte",
+ "Entity %s is invalid" : "Entitet %s är ogiltig",
+ "No events are chosen." : "Inga händelser valda",
+ "Entity %s has no event %s" : "Objekt 1%s har ingen händelse 1%s",
"Operation %s does not exist" : "Operationen %s existerar inte",
"Operation %s is invalid" : "Operationen %s är ogiltig",
+ "At least one check needs to be provided" : "Minst en kontroll måste tillhandahållas",
+ "The provided operation data is too long" : "Den angivna operationsdatan är för lång",
+ "Invalid check provided" : "Ogiltig kontroll angavs",
"Check %s does not exist" : "Kontroll av %s existerar inte",
"Check %s is invalid" : "Kontroll av %s är ogiltig",
+ "Check %s is not allowed with this entity" : "Kontroll %s tillåts inte med denna enhet",
+ "The provided check value is too long" : "Det angivna kontrollvärdet är för långt",
"Check #%s does not exist" : "Kontroll av #%s existerar inte",
- "Workflow" : "Arbetsflöde",
- "Open documentation" : "Öppna dokumentation",
- "Add rule group" : "Lägg till regelgrupp",
- "Short rule description" : "Kort regelbeskrivning",
- "Add rule" : "Lägg till regel",
- "Reset" : "Återställ",
+ "Check %s is invalid or does not exist" : "Kontroll av %s är ogiltig eller existerar inte",
+ "Flow" : "Flöde",
+ "Nextcloud workflow engine" : "Nextcloud arbetsflödesmotor",
+ "Select a filter" : "Välj ett filter",
+ "Select a comparator" : "Välj en jämförelse",
+ "Remove filter" : "Ta bort filter",
+ "Folder" : "Mapp",
+ "Images" : "Bilder",
+ "Office documents" : "Office-dokument",
+ "PDF documents" : "PDF-dokument",
+ "Custom MIME type" : "Anpassad MIME-typ",
+ "Custom mimetype" : "Anpassad mimetyp",
+ "Select a file type" : "Välj en filtyp",
+ "e.g. httpd/unix-directory" : "t.ex. httpd/unix-directory",
+ "Please enter a valid time span" : "Ange ett giltigt tidsintervall",
+ "Files WebDAV" : "Filer WebDAV",
+ "Custom URL" : "Anpassad webbadress",
+ "Select a request URL" : "Välj en webbadress för begäran",
+ "Android client" : "Android-klient",
+ "iOS client" : "iOS-klient",
+ "Desktop client" : "Skrivbordsklient",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook - tillägg",
+ "Custom user agent" : "Anpassad användaragent",
+ "Select a user agent" : "Välj en användaragent",
+ "Select groups" : "Välj grupper",
+ "Groups" : "Grupper",
+ "Type to search for group …" : "Skriv för att söka efter grupp ...",
+ "Select a trigger" : "Välj en utlösare",
+ "At least one event must be selected" : "Minst en händelse måste väljas",
+ "Add new flow" : "Lägg till nytt flöde",
+ "The configuration is invalid" : "Konfigurationen är felaktig",
+ "Active" : "Aktiv",
"Save" : "Spara",
- "Saving…" : "Sparar...",
- "Loading…" : "Laddar...",
- "Successfully saved" : "Sparades framgångsrikt",
- "File mime type" : "Filens \"mime\" typ"
+ "When" : "När",
+ "and" : "och",
+ "Add a new filter" : "Lägg till nytt filter",
+ "Cancel" : "Avbryt",
+ "Delete" : "Radera",
+ "Available flows" : "Tillgängliga flöden",
+ "For details on how to write your own flow, check out the development documentation." : "För information om hur du skriver ditt eget flöde, se utvecklingsdokumentationen.",
+ "No flows installed" : "Inga flöden installerade",
+ "Ask your administrator to install new flows." : "Be din administratör att installera nya flöden.",
+ "More flows" : "Fler flöden",
+ "Browse the App Store" : "Bläddra i appbutiken",
+ "Show less" : "Visa mindre",
+ "Show more" : "Visa mer",
+ "Configured flows" : "Konfigurerade flöden",
+ "Your flows" : "Dina flöden",
+ "No flows configured" : "Inga flöden har konfigurerats",
+ "matches" : "träffar",
+ "does not match" : "matchar inte",
+ "is" : "är",
+ "is not" : "är inte",
+ "File name" : "Filnamn",
+ "File MIME type" : "Filens MIME-typ",
+ "File size (upload)" : "Filstorlek (uppladdning)",
+ "less" : "mindre",
+ "less or equals" : "mindre eller motsvarar",
+ "greater or equals" : "större eller motsvarar",
+ "greater" : "större",
+ "Request remote address" : "Begär extern adress",
+ "matches IPv4" : "matchar IPv4",
+ "does not match IPv4" : "matchar inte IPv4",
+ "matches IPv6" : "matchar IPv6",
+ "does not match IPv6" : "matchar inte IPv6",
+ "File system tag" : "Filens systemtagg",
+ "is tagged with" : "är taggad med",
+ "is not tagged with" : "är inte taggad med",
+ "Request URL" : "Begär webbadress",
+ "Request time" : "Begärningstid",
+ "between" : "mellan",
+ "not between" : "inte mellan",
+ "Request user agent" : "Begär användaragent",
+ "Group membership" : "Gruppmedlemskap",
+ "is member of" : "är medlem i",
+ "is not member of" : "är inte medlem i"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/sw.js b/apps/workflowengine/l10n/sw.js
new file mode 100644
index 00000000000..302055b39f2
--- /dev/null
+++ b/apps/workflowengine/l10n/sw.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Opereta uliyopewa si sahihi",
+ "The given regular expression is invalid" : "Msemo wa kawaida uliotolewa si sahihi",
+ "The given file size is invalid" : "Ukubwa wa faili uliotolewa si sahihi",
+ "The given tag id is invalid" : "Kitambulisho cha lebo kilichotolewa si sahihi",
+ "The given IP range is invalid" : "Anuwai ya IP iliyotolewa si sahihi",
+ "The given IP range is not valid for IPv4" : "Anuwai ya IP iliyotolewa si halali kwa IPv4",
+ "The given IP range is not valid for IPv6" : "Anuwai ya IP iliyotolewa si halali kwa IPv6",
+ "The given time span is invalid" : "Muda uliyopewa si sahihi",
+ "The given start time is invalid" : "Muda wa kuanza uliyopewa si sahihi",
+ "The given end time is invalid" : "Muda wa kumaliza uliyopewa ni batili",
+ "The given group does not exist" : "Kundi lililotolewa halipo",
+ "File" : "Faili",
+ "File created" : "Faili imeundwa",
+ "File updated" : "Faili imesasishwa",
+ "File renamed" : "Faili imepewa jina upya",
+ "File deleted" : "Faili imefutwa",
+ "File accessed" : "Faili imefikiwa",
+ "File copied" : "Faili imenakiliwa",
+ "Tag assigned" : "Lebo imetolewa",
+ "Someone" : "Mtu fulani",
+ "%s created %s" : "%s imeundwa %s",
+ "%s modified %s" : "%s imeboreshwa %s",
+ "%s deleted %s" : "%s imefutwa %s",
+ "%s accessed %s" : "%s imefikiwa %s",
+ "%s renamed %s" : "%s imepewa jina jipya %s",
+ "%s copied %s" : "%s imenakiliwa %s",
+ "%s assigned %s to %s" : "%simekabidhiwa %s kwa %s",
+ "Operation #%s does not exist" : "Operesheni #%s haipo",
+ "Entity %s does not exist" : "Huluki %s haipo",
+ "Entity %s is invalid" : "Huluki %s si sahihi",
+ "No events are chosen." : "Hakuna matukio yaliyochaguliwa.",
+ "Entity %s has no event %s" : "Huluki %s haina tukio %s",
+ "Operation %s does not exist" : "Operesheni %s haipo",
+ "Operation %s is invalid" : "Operesheni %s si sahihi",
+ "At least one check needs to be provided" : "Angalau hundi moja inahitaji kutolewa",
+ "The provided operation data is too long" : "Taarifa za operesheni zilizotolewa ni ndefu sana",
+ "Invalid check provided" : "Hundi batili imetolewa",
+ "Check %s does not exist" : "Angalia %s haipo",
+ "Check %s is invalid" : "Angalia %s si sahihi",
+ "Check %s is not allowed with this entity" : "Kukagua %s hairuhusiwi na huluki hii",
+ "The provided check value is too long" : "Thamani ya hundi iliyotolewa ni ndefu sana",
+ "Check #%s does not exist" : "Ukaguzi #%s haupo",
+ "Check %s is invalid or does not exist" : "Angalia %s si sahihi au haipo",
+ "Flow" : "Mtiririko",
+ "Nextcloud workflow engine" : "Injini ya mtiririko wa kazi ya Nextcloud",
+ "Select a filter" : "Chagua kichujio",
+ "Select a comparator" : "Chagua kipimajoto",
+ "Remove filter" : "Ondoa kichujio",
+ "Folder" : "Kisanduku",
+ "Images" : "Picha",
+ "Office documents" : "Nyaraka za ofisi",
+ "PDF documents" : "Nyaraka za PDF",
+ "Custom MIME type" : "Aina ya MIME ya kawaida",
+ "Custom mimetype" : "Aina maalum ya mime",
+ "Select a file type" : "Chagua aina ya faili",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Tafadhali ingiza muda halali",
+ "Files WebDAV" : "Faili za WebDAV",
+ "Custom URL" : "URL maalum",
+ "Select a request URL" : "Chagua URL ya ombi",
+ "Android client" : "Mteja wa Android",
+ "iOS client" : "Mteja wa iOS",
+ "Desktop client" : "Mteja wa eneo-kazi",
+ "Thunderbird & Outlook addons" : "Viongezeo vya Thunderbird na Outlook",
+ "Custom user agent" : "Wakala maalum wa mtumiaji ",
+ "Select a user agent" : "Chagua wakala wa mtumiaji",
+ "Select groups" : "Chagua makundi",
+ "Groups" : "Makundi",
+ "Type to search for group …" : "Andika kutafuta kikundi …",
+ "Select a trigger" : "Chagua kichocheo",
+ "At least one event must be selected" : "Angalau tukio moja lazima lichaguliwe",
+ "Add new flow" : "Ongeza mtiririko mpya",
+ "The configuration is invalid" : "Usanidi si sahihi",
+ "Active" : "Hai",
+ "Save" : "Hifadhi",
+ "When" : "Lini",
+ "and" : "na",
+ "Add a new filter" : "Ongeza kichujio kipya",
+ "Cancel" : "Sitisha",
+ "Delete" : "Futa",
+ "Available flows" : "Mitiririko inayopatikana",
+ "For details on how to write your own flow, check out the development documentation." : "Kwa maelezo kuhusu jinsi ya kuandika mtiririko wako mwenyewe, angalia nyaraka za maendeleo.",
+ "No flows installed" : "Hakuna mtiririko uliowekwa",
+ "Ask your administrator to install new flows." : "Muulize msimamizi wako aweke mitiririko mipya.",
+ "More flows" : "Mtiririko zaidi",
+ "Browse the App Store" : "Vinjari hifadhi ya Programu",
+ "Show less" : "Onesha kidogo",
+ "Show more" : "Onesha zaidi",
+ "Configured flows" : "Mitiririko iliyosanidiwa",
+ "Your flows" : "Mitiririko yako",
+ "No flows configured" : "Hakuna mitiririko iliyosanidiwa",
+ "matches" : "inafanana",
+ "does not match" : "haifanani",
+ "is" : "ni",
+ "is not" : "si",
+ "File name" : "Jina la faili",
+ "File MIME type" : "Aina ya MIME ya faili",
+ "File size (upload)" : "Ukubwa wa faili (kupakia)",
+ "less" : "chini",
+ "less or equals" : "chini au sawa na",
+ "greater or equals" : "kubwa au sawa na",
+ "greater" : "kubwa",
+ "Request remote address" : "Omba anwani ya mbali",
+ "matches IPv4" : "Inafanana na IPv4",
+ "does not match IPv4" : "haifanani na IPv4",
+ "matches IPv6" : "inafanana na IPv6",
+ "does not match IPv6" : "haifanani na IPv6",
+ "File system tag" : "Lebo ya mfumo wa faili",
+ "is tagged with" : "Imewekewa alama na",
+ "is not tagged with" : "haijawekewa alama na",
+ "Request URL" : "Omba URL",
+ "Request time" : "Muda wa ombi",
+ "between" : "kati ya",
+ "not between" : "si kati ya",
+ "Request user agent" : "Omba wakala wa mtumiaji",
+ "Group membership" : "Uanachama wa kikundi",
+ "is member of" : "ni mwanachama wa",
+ "is not member of" : "si mwanachama wa"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/sw.json b/apps/workflowengine/l10n/sw.json
new file mode 100644
index 00000000000..a0d1179f2d9
--- /dev/null
+++ b/apps/workflowengine/l10n/sw.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "Opereta uliyopewa si sahihi",
+ "The given regular expression is invalid" : "Msemo wa kawaida uliotolewa si sahihi",
+ "The given file size is invalid" : "Ukubwa wa faili uliotolewa si sahihi",
+ "The given tag id is invalid" : "Kitambulisho cha lebo kilichotolewa si sahihi",
+ "The given IP range is invalid" : "Anuwai ya IP iliyotolewa si sahihi",
+ "The given IP range is not valid for IPv4" : "Anuwai ya IP iliyotolewa si halali kwa IPv4",
+ "The given IP range is not valid for IPv6" : "Anuwai ya IP iliyotolewa si halali kwa IPv6",
+ "The given time span is invalid" : "Muda uliyopewa si sahihi",
+ "The given start time is invalid" : "Muda wa kuanza uliyopewa si sahihi",
+ "The given end time is invalid" : "Muda wa kumaliza uliyopewa ni batili",
+ "The given group does not exist" : "Kundi lililotolewa halipo",
+ "File" : "Faili",
+ "File created" : "Faili imeundwa",
+ "File updated" : "Faili imesasishwa",
+ "File renamed" : "Faili imepewa jina upya",
+ "File deleted" : "Faili imefutwa",
+ "File accessed" : "Faili imefikiwa",
+ "File copied" : "Faili imenakiliwa",
+ "Tag assigned" : "Lebo imetolewa",
+ "Someone" : "Mtu fulani",
+ "%s created %s" : "%s imeundwa %s",
+ "%s modified %s" : "%s imeboreshwa %s",
+ "%s deleted %s" : "%s imefutwa %s",
+ "%s accessed %s" : "%s imefikiwa %s",
+ "%s renamed %s" : "%s imepewa jina jipya %s",
+ "%s copied %s" : "%s imenakiliwa %s",
+ "%s assigned %s to %s" : "%simekabidhiwa %s kwa %s",
+ "Operation #%s does not exist" : "Operesheni #%s haipo",
+ "Entity %s does not exist" : "Huluki %s haipo",
+ "Entity %s is invalid" : "Huluki %s si sahihi",
+ "No events are chosen." : "Hakuna matukio yaliyochaguliwa.",
+ "Entity %s has no event %s" : "Huluki %s haina tukio %s",
+ "Operation %s does not exist" : "Operesheni %s haipo",
+ "Operation %s is invalid" : "Operesheni %s si sahihi",
+ "At least one check needs to be provided" : "Angalau hundi moja inahitaji kutolewa",
+ "The provided operation data is too long" : "Taarifa za operesheni zilizotolewa ni ndefu sana",
+ "Invalid check provided" : "Hundi batili imetolewa",
+ "Check %s does not exist" : "Angalia %s haipo",
+ "Check %s is invalid" : "Angalia %s si sahihi",
+ "Check %s is not allowed with this entity" : "Kukagua %s hairuhusiwi na huluki hii",
+ "The provided check value is too long" : "Thamani ya hundi iliyotolewa ni ndefu sana",
+ "Check #%s does not exist" : "Ukaguzi #%s haupo",
+ "Check %s is invalid or does not exist" : "Angalia %s si sahihi au haipo",
+ "Flow" : "Mtiririko",
+ "Nextcloud workflow engine" : "Injini ya mtiririko wa kazi ya Nextcloud",
+ "Select a filter" : "Chagua kichujio",
+ "Select a comparator" : "Chagua kipimajoto",
+ "Remove filter" : "Ondoa kichujio",
+ "Folder" : "Kisanduku",
+ "Images" : "Picha",
+ "Office documents" : "Nyaraka za ofisi",
+ "PDF documents" : "Nyaraka za PDF",
+ "Custom MIME type" : "Aina ya MIME ya kawaida",
+ "Custom mimetype" : "Aina maalum ya mime",
+ "Select a file type" : "Chagua aina ya faili",
+ "e.g. httpd/unix-directory" : "e.g. httpd/unix-directory",
+ "Please enter a valid time span" : "Tafadhali ingiza muda halali",
+ "Files WebDAV" : "Faili za WebDAV",
+ "Custom URL" : "URL maalum",
+ "Select a request URL" : "Chagua URL ya ombi",
+ "Android client" : "Mteja wa Android",
+ "iOS client" : "Mteja wa iOS",
+ "Desktop client" : "Mteja wa eneo-kazi",
+ "Thunderbird & Outlook addons" : "Viongezeo vya Thunderbird na Outlook",
+ "Custom user agent" : "Wakala maalum wa mtumiaji ",
+ "Select a user agent" : "Chagua wakala wa mtumiaji",
+ "Select groups" : "Chagua makundi",
+ "Groups" : "Makundi",
+ "Type to search for group …" : "Andika kutafuta kikundi …",
+ "Select a trigger" : "Chagua kichocheo",
+ "At least one event must be selected" : "Angalau tukio moja lazima lichaguliwe",
+ "Add new flow" : "Ongeza mtiririko mpya",
+ "The configuration is invalid" : "Usanidi si sahihi",
+ "Active" : "Hai",
+ "Save" : "Hifadhi",
+ "When" : "Lini",
+ "and" : "na",
+ "Add a new filter" : "Ongeza kichujio kipya",
+ "Cancel" : "Sitisha",
+ "Delete" : "Futa",
+ "Available flows" : "Mitiririko inayopatikana",
+ "For details on how to write your own flow, check out the development documentation." : "Kwa maelezo kuhusu jinsi ya kuandika mtiririko wako mwenyewe, angalia nyaraka za maendeleo.",
+ "No flows installed" : "Hakuna mtiririko uliowekwa",
+ "Ask your administrator to install new flows." : "Muulize msimamizi wako aweke mitiririko mipya.",
+ "More flows" : "Mtiririko zaidi",
+ "Browse the App Store" : "Vinjari hifadhi ya Programu",
+ "Show less" : "Onesha kidogo",
+ "Show more" : "Onesha zaidi",
+ "Configured flows" : "Mitiririko iliyosanidiwa",
+ "Your flows" : "Mitiririko yako",
+ "No flows configured" : "Hakuna mitiririko iliyosanidiwa",
+ "matches" : "inafanana",
+ "does not match" : "haifanani",
+ "is" : "ni",
+ "is not" : "si",
+ "File name" : "Jina la faili",
+ "File MIME type" : "Aina ya MIME ya faili",
+ "File size (upload)" : "Ukubwa wa faili (kupakia)",
+ "less" : "chini",
+ "less or equals" : "chini au sawa na",
+ "greater or equals" : "kubwa au sawa na",
+ "greater" : "kubwa",
+ "Request remote address" : "Omba anwani ya mbali",
+ "matches IPv4" : "Inafanana na IPv4",
+ "does not match IPv4" : "haifanani na IPv4",
+ "matches IPv6" : "inafanana na IPv6",
+ "does not match IPv6" : "haifanani na IPv6",
+ "File system tag" : "Lebo ya mfumo wa faili",
+ "is tagged with" : "Imewekewa alama na",
+ "is not tagged with" : "haijawekewa alama na",
+ "Request URL" : "Omba URL",
+ "Request time" : "Muda wa ombi",
+ "between" : "kati ya",
+ "not between" : "si kati ya",
+ "Request user agent" : "Omba wakala wa mtumiaji",
+ "Group membership" : "Uanachama wa kikundi",
+ "is member of" : "ni mwanachama wa",
+ "is not member of" : "si mwanachama wa"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/tr.js b/apps/workflowengine/l10n/tr.js
index 64e4a272951..41f1f784099 100644
--- a/apps/workflowengine/l10n/tr.js
+++ b/apps/workflowengine/l10n/tr.js
@@ -1,49 +1,10 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "Kaydedildi",
- "Saving failed:" : "Kaydedilemedi:",
- "File MIME type" : "Dosya MIME türü",
- "is" : "şu olan",
- "is not" : "şu olmayan",
- "matches" : "şuna uyan",
- "does not match" : "şuna uymayan",
- "Example: {placeholder}" : "Örnek: {placeholder}",
- "File size (upload)" : "Dosya boyutu (yükleme)",
- "less" : "şundan küçük",
- "less or equals" : "şundan küçük ya da eşit",
- "greater or equals" : "şundan büyük ya da eşit",
- "greater" : "şundan büyük",
- "File system tag" : "Dosya sistemi etiketi",
- "is tagged with" : "şununla etiketlenmiş",
- "is not tagged with" : "şununla etiketlenmemiş",
- "Select tag…" : "Etiketi seçin...",
- "Request remote address" : "Uzak adres isteği",
- "matches IPv4" : "şu IPv4 adresine uyan",
- "does not match IPv4" : "şu IPv4 adresine uymayan",
- "matches IPv6" : "şu IPv6 adresine uyan",
- "does not match IPv6" : "şu IPv6 adresine uymayan",
- "Request time" : "İstek zamanı",
- "between" : "şunların arasında olan",
- "not between" : "şunların arasında olmayan",
- "Start" : "Başlangıç",
- "End" : "Bitiş",
- "Select timezone…" : "Saat dilimini seçin...",
- "Request URL" : "İstek Adresi",
- "Predefined URLs" : "Hazır Adresler",
- "Files WebDAV" : "Dosya WebDAV",
- "Request user agent" : "Kullanıcı yazılımı istensin",
- "Sync clients" : "İstemciler eşitlensin",
- "Android client" : "Android istemcisi",
- "iOS client" : "iOS istemcisi",
- "Desktop client" : "Masaüstü istemcisi",
- "User group membership" : "Kullanıcı grubu üyeliği",
- "is member of" : "şunun üyesi olan",
- "is not member of" : "şunun üyesi olmayan",
"The given operator is invalid" : "Belirtilen işlem geçersiz",
"The given regular expression is invalid" : "Belirtilen kurallı ifade geçersiz",
"The given file size is invalid" : "Belirtilen dosya boyutu geçersiz",
- "The given tag id is invalid" : "Belirtilen etiket kodu geçersiz",
+ "The given tag id is invalid" : "Belirtilen etiket kimliği geçersiz",
"The given IP range is invalid" : "Belirtilen IP adresi aralığı geçersiz",
"The given IP range is not valid for IPv4" : "Belirtilen IP adresi aralığı IPv4 için geçersiz",
"The given IP range is not valid for IPv6" : "Belirtilen IP adresi aralığı IPv6 için geçersiz",
@@ -51,23 +12,112 @@ OC.L10N.register(
"The given start time is invalid" : "Belirtilen başlangıç zamanı geçersiz",
"The given end time is invalid" : "Belirtilen bitiş zamanı geçersiz",
"The given group does not exist" : "Belirtilen grup bulunamadı",
- "Check %s is invalid or does not exist" : "%s denetimi geçersiz ya da bulunamadı",
+ "File" : "Dosya",
+ "File created" : "Dosya oluşturuldu",
+ "File updated" : "Dosya güncellendi",
+ "File renamed" : "Dosya yeniden adlandırıldı",
+ "File deleted" : "Dosya silindi",
+ "File accessed" : "Dosyaya erişildi",
+ "File copied" : "Dosya kopyalandı",
+ "Tag assigned" : "Etiket atandı",
+ "Someone" : "Biri",
+ "%s created %s" : "%s oluşturuldu%s",
+ "%s modified %s" : "%s değiştirildi%s",
+ "%s deleted %s" : "%s silindi%s",
+ "%s accessed %s" : "%s erişildi %s",
+ "%s renamed %s" : "%s yeniden adlandırıldı%s",
+ "%s copied %s" : "%s kopyalandı%s",
+ "%s assigned %s to %s" : "%s atandı %s => %s",
"Operation #%s does not exist" : "#%s işlemi bulunamadı",
+ "Entity %s does not exist" : "%s varlığı bulunamadı",
+ "Entity %s is invalid" : "%s varlığı geçersiz",
+ "No events are chosen." : "Herhangi bir etkinlik seçilmemiş.",
+ "Entity %s has no event %s" : "%s varlığının herhangi bir etkinliği yok %s",
"Operation %s does not exist" : "%s işlemi bulunamadı",
"Operation %s is invalid" : "%s işlemi geçersiz",
+ "At least one check needs to be provided" : "En az bir denetim belirtilmelidir",
+ "The provided operation data is too long" : "Belirtilen işlem verileri çok uzun",
+ "Invalid check provided" : "Geçersiz denetim belirtildi",
"Check %s does not exist" : "%s denetimi bulunamadı",
"Check %s is invalid" : "%s denetimi geçersiz",
+ "Check %s is not allowed with this entity" : "Bu varlık için %s denetimi yapılamaz",
+ "The provided check value is too long" : "Belirtilen denetleme değeri çok uzun",
"Check #%s does not exist" : "#%s denetimi bulunamadı",
- "Workflow" : "İş akışı",
- "Open documentation" : "Belgeleri aç",
- "Add rule group" : "Kural grubu ekle",
- "Short rule description" : "Kısa kural açıklaması",
- "Add rule" : "Kural ekle",
- "Reset" : "Sıfırla",
+ "Check %s is invalid or does not exist" : "%s denetimi geçersiz ya da bulunamadı",
+ "Flow" : "Akış",
+ "Nextcloud workflow engine" : "Nextcloud iş akışı işleyici",
+ "Select a filter" : "Bir süzgeç seçin",
+ "Select a comparator" : "Bir karşılaştırıcı seçin",
+ "Remove filter" : "Süzgeci kaldır",
+ "Folder" : "Klasör",
+ "Images" : "Görseller",
+ "Office documents" : "Office belgeleri",
+ "PDF documents" : "PDF belgeleri",
+ "Custom MIME type" : "Özel MIME türü",
+ "Custom mimetype" : "Özel MIME türü",
+ "Select a file type" : "Bir dosya türü seçin",
+ "e.g. httpd/unix-directory" : "örnek httpd/unix-directory",
+ "Please enter a valid time span" : "Lütfen geçerli bir tarih aralığı seçin",
+ "Files WebDAV" : "Dosya WebDAV",
+ "Custom URL" : "Özel adres",
+ "Select a request URL" : "Bir istek adresi seçin",
+ "Android client" : "Android istemcisi",
+ "iOS client" : "iOS istemcisi",
+ "Desktop client" : "Bilgisayar istemcisi",
+ "Thunderbird & Outlook addons" : "Thunderbird ve Outlook eklentileri",
+ "Custom user agent" : "Özel kullanıcı uygulaması",
+ "Select a user agent" : "Bir kullanıcı uygulaması seçin",
+ "Select groups" : "Grupları seçin",
+ "Groups" : "Gruplar",
+ "Type to search for group …" : "Grup aramak için yazmaya başlayın…",
+ "Select a trigger" : "Bir tetikleyici seçin",
+ "At least one event must be selected" : "En az bir etkinlik seçilmelidir",
+ "Add new flow" : "Akış ekle",
+ "The configuration is invalid" : "Yapılandırma geçersiz",
+ "Active" : "Etkin",
"Save" : "Kaydet",
- "Saving…" : "Kaydediliyor...",
- "Loading…" : "Yükleniyor...",
- "Successfully saved" : "Kaydedildi",
- "File mime type" : "Dosya MIME türü"
+ "When" : "Şu zamanda",
+ "and" : "ve",
+ "Add a new filter" : "Yeni süzgeç ekle",
+ "Cancel" : "İptal",
+ "Delete" : "Sil",
+ "Available flows" : "Kullanılabilecek akışlar",
+ "For details on how to write your own flow, check out the development documentation." : "Kendi akışınızı nasıl yazacağınızı öğrenmek için geliştirme belgelerine bakabilirsiniz.",
+ "No flows installed" : "Herhangi bir akış kurulmamış",
+ "Ask your administrator to install new flows." : "Yöneticinizden yeni akışlar kurmasını isteyin.",
+ "More flows" : "Diğer akışlar",
+ "Browse the App Store" : "Uygulama mağazasına göz atın",
+ "Show less" : "Daha az ayrıntı",
+ "Show more" : "Daha çok ayrıntı",
+ "Configured flows" : "Yapılandırılmış akışlar",
+ "Your flows" : "Akışlarınız",
+ "No flows configured" : "Herhangi bir akış yapılandırılmamış",
+ "matches" : "şuna uyan",
+ "does not match" : "şuna uymayan",
+ "is" : "şu olan",
+ "is not" : "şu olmayan",
+ "File name" : "Dosya adı",
+ "File MIME type" : "Dosya MIME türü",
+ "File size (upload)" : "Dosya boyutu (yükleme)",
+ "less" : "şundan küçük",
+ "less or equals" : "şundan küçük ya da eşit",
+ "greater or equals" : "şundan büyük ya da eşit",
+ "greater" : "şundan büyük",
+ "Request remote address" : "Uzak adres isteği",
+ "matches IPv4" : "şu IPv4 adresine uyan",
+ "does not match IPv4" : "şu IPv4 adresine uymayan",
+ "matches IPv6" : "şu IPv6 adresine uyan",
+ "does not match IPv6" : "şu IPv6 adresine uymayan",
+ "File system tag" : "Dosya sistemi etiketi",
+ "is tagged with" : "şununla etiketlenmiş",
+ "is not tagged with" : "şununla etiketlenmemiş",
+ "Request URL" : "İstek adresi",
+ "Request time" : "İstek zamanı",
+ "between" : "şunların arasında olan",
+ "not between" : "şunların arasında olmayan",
+ "Request user agent" : "Kullanıcı uygulaması istensin",
+ "Group membership" : "Grup üyeliği",
+ "is member of" : "şunun üyesi olan",
+ "is not member of" : "şunun üyesi olmayan"
},
"nplurals=2; plural=(n > 1);");
diff --git a/apps/workflowengine/l10n/tr.json b/apps/workflowengine/l10n/tr.json
index f6921e7b625..eb5dccff499 100644
--- a/apps/workflowengine/l10n/tr.json
+++ b/apps/workflowengine/l10n/tr.json
@@ -1,47 +1,8 @@
{ "translations": {
- "Saved" : "Kaydedildi",
- "Saving failed:" : "Kaydedilemedi:",
- "File MIME type" : "Dosya MIME türü",
- "is" : "şu olan",
- "is not" : "şu olmayan",
- "matches" : "şuna uyan",
- "does not match" : "şuna uymayan",
- "Example: {placeholder}" : "Örnek: {placeholder}",
- "File size (upload)" : "Dosya boyutu (yükleme)",
- "less" : "şundan küçük",
- "less or equals" : "şundan küçük ya da eşit",
- "greater or equals" : "şundan büyük ya da eşit",
- "greater" : "şundan büyük",
- "File system tag" : "Dosya sistemi etiketi",
- "is tagged with" : "şununla etiketlenmiş",
- "is not tagged with" : "şununla etiketlenmemiş",
- "Select tag…" : "Etiketi seçin...",
- "Request remote address" : "Uzak adres isteği",
- "matches IPv4" : "şu IPv4 adresine uyan",
- "does not match IPv4" : "şu IPv4 adresine uymayan",
- "matches IPv6" : "şu IPv6 adresine uyan",
- "does not match IPv6" : "şu IPv6 adresine uymayan",
- "Request time" : "İstek zamanı",
- "between" : "şunların arasında olan",
- "not between" : "şunların arasında olmayan",
- "Start" : "Başlangıç",
- "End" : "Bitiş",
- "Select timezone…" : "Saat dilimini seçin...",
- "Request URL" : "İstek Adresi",
- "Predefined URLs" : "Hazır Adresler",
- "Files WebDAV" : "Dosya WebDAV",
- "Request user agent" : "Kullanıcı yazılımı istensin",
- "Sync clients" : "İstemciler eşitlensin",
- "Android client" : "Android istemcisi",
- "iOS client" : "iOS istemcisi",
- "Desktop client" : "Masaüstü istemcisi",
- "User group membership" : "Kullanıcı grubu üyeliği",
- "is member of" : "şunun üyesi olan",
- "is not member of" : "şunun üyesi olmayan",
"The given operator is invalid" : "Belirtilen işlem geçersiz",
"The given regular expression is invalid" : "Belirtilen kurallı ifade geçersiz",
"The given file size is invalid" : "Belirtilen dosya boyutu geçersiz",
- "The given tag id is invalid" : "Belirtilen etiket kodu geçersiz",
+ "The given tag id is invalid" : "Belirtilen etiket kimliği geçersiz",
"The given IP range is invalid" : "Belirtilen IP adresi aralığı geçersiz",
"The given IP range is not valid for IPv4" : "Belirtilen IP adresi aralığı IPv4 için geçersiz",
"The given IP range is not valid for IPv6" : "Belirtilen IP adresi aralığı IPv6 için geçersiz",
@@ -49,23 +10,112 @@
"The given start time is invalid" : "Belirtilen başlangıç zamanı geçersiz",
"The given end time is invalid" : "Belirtilen bitiş zamanı geçersiz",
"The given group does not exist" : "Belirtilen grup bulunamadı",
- "Check %s is invalid or does not exist" : "%s denetimi geçersiz ya da bulunamadı",
+ "File" : "Dosya",
+ "File created" : "Dosya oluşturuldu",
+ "File updated" : "Dosya güncellendi",
+ "File renamed" : "Dosya yeniden adlandırıldı",
+ "File deleted" : "Dosya silindi",
+ "File accessed" : "Dosyaya erişildi",
+ "File copied" : "Dosya kopyalandı",
+ "Tag assigned" : "Etiket atandı",
+ "Someone" : "Biri",
+ "%s created %s" : "%s oluşturuldu%s",
+ "%s modified %s" : "%s değiştirildi%s",
+ "%s deleted %s" : "%s silindi%s",
+ "%s accessed %s" : "%s erişildi %s",
+ "%s renamed %s" : "%s yeniden adlandırıldı%s",
+ "%s copied %s" : "%s kopyalandı%s",
+ "%s assigned %s to %s" : "%s atandı %s => %s",
"Operation #%s does not exist" : "#%s işlemi bulunamadı",
+ "Entity %s does not exist" : "%s varlığı bulunamadı",
+ "Entity %s is invalid" : "%s varlığı geçersiz",
+ "No events are chosen." : "Herhangi bir etkinlik seçilmemiş.",
+ "Entity %s has no event %s" : "%s varlığının herhangi bir etkinliği yok %s",
"Operation %s does not exist" : "%s işlemi bulunamadı",
"Operation %s is invalid" : "%s işlemi geçersiz",
+ "At least one check needs to be provided" : "En az bir denetim belirtilmelidir",
+ "The provided operation data is too long" : "Belirtilen işlem verileri çok uzun",
+ "Invalid check provided" : "Geçersiz denetim belirtildi",
"Check %s does not exist" : "%s denetimi bulunamadı",
"Check %s is invalid" : "%s denetimi geçersiz",
+ "Check %s is not allowed with this entity" : "Bu varlık için %s denetimi yapılamaz",
+ "The provided check value is too long" : "Belirtilen denetleme değeri çok uzun",
"Check #%s does not exist" : "#%s denetimi bulunamadı",
- "Workflow" : "İş akışı",
- "Open documentation" : "Belgeleri aç",
- "Add rule group" : "Kural grubu ekle",
- "Short rule description" : "Kısa kural açıklaması",
- "Add rule" : "Kural ekle",
- "Reset" : "Sıfırla",
+ "Check %s is invalid or does not exist" : "%s denetimi geçersiz ya da bulunamadı",
+ "Flow" : "Akış",
+ "Nextcloud workflow engine" : "Nextcloud iş akışı işleyici",
+ "Select a filter" : "Bir süzgeç seçin",
+ "Select a comparator" : "Bir karşılaştırıcı seçin",
+ "Remove filter" : "Süzgeci kaldır",
+ "Folder" : "Klasör",
+ "Images" : "Görseller",
+ "Office documents" : "Office belgeleri",
+ "PDF documents" : "PDF belgeleri",
+ "Custom MIME type" : "Özel MIME türü",
+ "Custom mimetype" : "Özel MIME türü",
+ "Select a file type" : "Bir dosya türü seçin",
+ "e.g. httpd/unix-directory" : "örnek httpd/unix-directory",
+ "Please enter a valid time span" : "Lütfen geçerli bir tarih aralığı seçin",
+ "Files WebDAV" : "Dosya WebDAV",
+ "Custom URL" : "Özel adres",
+ "Select a request URL" : "Bir istek adresi seçin",
+ "Android client" : "Android istemcisi",
+ "iOS client" : "iOS istemcisi",
+ "Desktop client" : "Bilgisayar istemcisi",
+ "Thunderbird & Outlook addons" : "Thunderbird ve Outlook eklentileri",
+ "Custom user agent" : "Özel kullanıcı uygulaması",
+ "Select a user agent" : "Bir kullanıcı uygulaması seçin",
+ "Select groups" : "Grupları seçin",
+ "Groups" : "Gruplar",
+ "Type to search for group …" : "Grup aramak için yazmaya başlayın…",
+ "Select a trigger" : "Bir tetikleyici seçin",
+ "At least one event must be selected" : "En az bir etkinlik seçilmelidir",
+ "Add new flow" : "Akış ekle",
+ "The configuration is invalid" : "Yapılandırma geçersiz",
+ "Active" : "Etkin",
"Save" : "Kaydet",
- "Saving…" : "Kaydediliyor...",
- "Loading…" : "Yükleniyor...",
- "Successfully saved" : "Kaydedildi",
- "File mime type" : "Dosya MIME türü"
+ "When" : "Şu zamanda",
+ "and" : "ve",
+ "Add a new filter" : "Yeni süzgeç ekle",
+ "Cancel" : "İptal",
+ "Delete" : "Sil",
+ "Available flows" : "Kullanılabilecek akışlar",
+ "For details on how to write your own flow, check out the development documentation." : "Kendi akışınızı nasıl yazacağınızı öğrenmek için geliştirme belgelerine bakabilirsiniz.",
+ "No flows installed" : "Herhangi bir akış kurulmamış",
+ "Ask your administrator to install new flows." : "Yöneticinizden yeni akışlar kurmasını isteyin.",
+ "More flows" : "Diğer akışlar",
+ "Browse the App Store" : "Uygulama mağazasına göz atın",
+ "Show less" : "Daha az ayrıntı",
+ "Show more" : "Daha çok ayrıntı",
+ "Configured flows" : "Yapılandırılmış akışlar",
+ "Your flows" : "Akışlarınız",
+ "No flows configured" : "Herhangi bir akış yapılandırılmamış",
+ "matches" : "şuna uyan",
+ "does not match" : "şuna uymayan",
+ "is" : "şu olan",
+ "is not" : "şu olmayan",
+ "File name" : "Dosya adı",
+ "File MIME type" : "Dosya MIME türü",
+ "File size (upload)" : "Dosya boyutu (yükleme)",
+ "less" : "şundan küçük",
+ "less or equals" : "şundan küçük ya da eşit",
+ "greater or equals" : "şundan büyük ya da eşit",
+ "greater" : "şundan büyük",
+ "Request remote address" : "Uzak adres isteği",
+ "matches IPv4" : "şu IPv4 adresine uyan",
+ "does not match IPv4" : "şu IPv4 adresine uymayan",
+ "matches IPv6" : "şu IPv6 adresine uyan",
+ "does not match IPv6" : "şu IPv6 adresine uymayan",
+ "File system tag" : "Dosya sistemi etiketi",
+ "is tagged with" : "şununla etiketlenmiş",
+ "is not tagged with" : "şununla etiketlenmemiş",
+ "Request URL" : "İstek adresi",
+ "Request time" : "İstek zamanı",
+ "between" : "şunların arasında olan",
+ "not between" : "şunların arasında olmayan",
+ "Request user agent" : "Kullanıcı uygulaması istensin",
+ "Group membership" : "Grup üyeliği",
+ "is member of" : "şunun üyesi olan",
+ "is not member of" : "şunun üyesi olmayan"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/ug.js b/apps/workflowengine/l10n/ug.js
new file mode 100644
index 00000000000..d889e4db86e
--- /dev/null
+++ b/apps/workflowengine/l10n/ug.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "بېرىلگەن تىجارەتچى ئىناۋەتسىز",
+ "The given regular expression is invalid" : "بېرىلگەن دائىملىق ئىپادىلەش ئىناۋەتسىز",
+ "The given file size is invalid" : "بېرىلگەن ھۆججەت چوڭلۇقى ئىناۋەتسىز",
+ "The given tag id is invalid" : "بېرىلگەن بەلگە id ئىناۋەتسىز",
+ "The given IP range is invalid" : "بېرىلگەن IP دائىرىسى ئىناۋەتسىز",
+ "The given IP range is not valid for IPv4" : "بېرىلگەن IP دائىرىسى IPv4 ئۈچۈن ئىناۋەتلىك ئەمەس",
+ "The given IP range is not valid for IPv6" : "بېرىلگەن IP دائىرىسى IPv6 ئۈچۈن ئىناۋەتلىك ئەمەس",
+ "The given time span is invalid" : "بېرىلگەن ۋاقىت ئىناۋەتسىز",
+ "The given start time is invalid" : "بېرىلگەن باشلىنىش ۋاقتى ئىناۋەتسىز",
+ "The given end time is invalid" : "بېرىلگەن ئاخىرقى ۋاقىت ئىناۋەتسىز",
+ "The given group does not exist" : "بېرىلگەن گۇرۇپپا مەۋجۇت ئەمەس",
+ "File" : "File",
+ "File created" : "ھۆججەت قۇرۇلدى",
+ "File updated" : "ھۆججەت يېڭىلاندى",
+ "File renamed" : "ھۆججەتنىڭ ئىسمى ئۆزگەرتىلدى",
+ "File deleted" : "ھۆججەت ئۆچۈرۈلدى",
+ "File accessed" : "ھۆججەت زىيارەت قىلىندى",
+ "File copied" : "ھۆججەت كۆچۈرۈلدى",
+ "Tag assigned" : "بەلگە تەقسىم قىلىندى",
+ "Someone" : "بىرەيلەن",
+ "%s created %s" : "% s% s نى قۇردى",
+ "%s modified %s" : "% s ئۆزگەرتىلگەن% s",
+ "%s deleted %s" : "% s ئۆچۈرۈلدى",
+ "%s accessed %s" : "% s زىيارەت قىلىندى% s",
+ "%s renamed %s" : "% s نىڭ ئىسمى% s",
+ "%s copied %s" : "% s كۆچۈرۈلگەن% s",
+ "%s assigned %s to %s" : "% s% s دىن% s نى تەقسىم قىلدى",
+ "Operation #%s does not exist" : "مەشغۇلات #% s مەۋجۇت ئەمەس",
+ "Entity %s does not exist" : "ئورۇن% s مەۋجۇت ئەمەس",
+ "Entity %s is invalid" : "ئورۇن% s ئىناۋەتسىز",
+ "No events are chosen." : "ھېچقانداق پائالىيەت تاللانمىدى.",
+ "Entity %s has no event %s" : "ئورۇن% s نىڭ ھېچقانداق پائالىيىتى يوق",
+ "Operation %s does not exist" : "% S مەشغۇلاتى مەۋجۇت ئەمەس",
+ "Operation %s is invalid" : "% S مەشغۇلاتى ئىناۋەتسىز",
+ "At least one check needs to be provided" : "كەم دېگەندە بىر تەكشۈرۈش بىلەن تەمىنلەش كېرەك",
+ "The provided operation data is too long" : "تەمىنلەنگەن مەشغۇلات سانلىق مەلۇماتلىرى بەك ئۇزۇن",
+ "Invalid check provided" : "ئىناۋەتسىز تەكشۈرۈش تەمىنلەندى",
+ "Check %s does not exist" : "تەكشۈرۈش% s مەۋجۇت ئەمەس",
+ "Check %s is invalid" : "تەكشۈرۈش% s ئىناۋەتسىز",
+ "Check %s is not allowed with this entity" : "بۇ ئورۇن بىلەن% s نى تەكشۈرۈشكە بولمايدۇ",
+ "The provided check value is too long" : "تەمىنلەنگەن تەكشۈرۈش قىممىتى بەك ئۇزۇن",
+ "Check #%s does not exist" : "تەكشۈرۈش #% s مەۋجۇت ئەمەس",
+ "Check %s is invalid or does not exist" : "تەكشۈرۈش% s ئىناۋەتسىز ياكى مەۋجۇت ئەمەس",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud خىزمەت ئېقىمى ماتورى",
+ "Select a filter" : "سۈزگۈچنى تاللاڭ",
+ "Select a comparator" : "سېلىشتۇرغۇچىنى تاللاڭ",
+ "Remove filter" : "سۈزگۈچنى ئۆچۈرۈڭ",
+ "Folder" : "قىسقۇچ",
+ "Images" : "سۈرەتلەر",
+ "Office documents" : "ئىشخانا ھۆججەتلىرى",
+ "PDF documents" : "PDF ھۆججەتلىرى",
+ "Custom MIME type" : "ئىختىيارى MIME تىپى",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "ھۆججەت تىپىنى تاللاڭ",
+ "e.g. httpd/unix-directory" : "مەسىلەن httpd / unix- مۇندەرىجە",
+ "Please enter a valid time span" : "ئىناۋەتلىك ۋاقىتنى كىرگۈزۈڭ",
+ "Files WebDAV" : "ھۆججەتلەر WebDAV",
+ "Custom URL" : "ئىختىيارى URL",
+ "Select a request URL" : "تەلەپ URL نى تاللاڭ",
+ "Android client" : "ئاندىرويىد خېرىدارى",
+ "iOS client" : "iOS خېرىدارى",
+ "Desktop client" : "ئۈستەل يۈزى خېرىدارى",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook خۇرۇچلىرى",
+ "Custom user agent" : "ئىشلەتكۈچى ۋاكالەتچىسى",
+ "Select a user agent" : "ئىشلەتكۈچى ۋاكالەتچىسىنى تاللاڭ",
+ "Select groups" : "گۇرۇپپىلارنى تاللاڭ",
+ "Groups" : "گۇرۇپپا",
+ "Type to search for group …" : "گۇرۇپپا ئىزدەش ئۈچۈن كىرگۈزۈڭ…",
+ "Select a trigger" : "قوزغاتقۇچنى تاللاڭ",
+ "At least one event must be selected" : "كەم دېگەندە بىر پائالىيەتنى تاللاش كېرەك",
+ "Add new flow" : "يېڭى ئېقىن قوشۇڭ",
+ "The configuration is invalid" : "سەپلىمىسى ئىناۋەتسىز",
+ "Active" : "ئاكتىپ",
+ "Save" : "ساقلا",
+ "When" : "قاچان",
+ "and" : "ۋە",
+ "Add a new filter" : "يېڭى سۈزگۈچ قوشۇڭ",
+ "Cancel" : "ۋاز كەچ",
+ "Delete" : "ئۆچۈر",
+ "Available flows" : "ئىشلەتكىلى بولىدىغان ئېقىن",
+ "For details on how to write your own flow, check out the development documentation." : "ئۆزىڭىزنىڭ ئېقىمىنى قانداق يېزىش ھەققىدىكى تەپسىلاتلارنى تەرەققىيات ھۆججىتىنى كۆرۈڭ.",
+ "No flows installed" : "ھېچقانداق ئېقىم ئورنىتىلمىدى",
+ "Ask your administrator to install new flows." : "باشقۇرغۇچىڭىزدىن يېڭى ئېقىن ئورنىتىشنى تەلەپ قىلىڭ.",
+ "More flows" : "تېخىمۇ كۆپ ئېقىن",
+ "Browse the App Store" : "ئەپ دۇكىنىنى كۆرۈڭ",
+ "Show less" : "ئازراق كۆرسەت",
+ "Show more" : "تېخىمۇ كۆپ كۆرسەت",
+ "Configured flows" : "تەڭشەلگەن ئېقىن",
+ "Your flows" : "ئېقىمىڭىز",
+ "No flows configured" : "ھېچقانداق ئېقىم سەپلەنمىگەن",
+ "matches" : "match",
+ "does not match" : "ماس كەلمەيدۇ",
+ "is" : "is",
+ "is not" : "ئەمەس",
+ "File name" : "ھۆججەت ئىسمى",
+ "File MIME type" : "ھۆججەت MIME تىپى",
+ "File size (upload)" : "ھۆججەت چوڭلۇقى (يوللاش)",
+ "less" : "ئاز",
+ "less or equals" : "ئاز ياكى باراۋەر",
+ "greater or equals" : "چوڭ ياكى باراۋەر",
+ "greater" : "تېخىمۇ چوڭ",
+ "Request remote address" : "يىراقتىكى ئادرېسنى تەلەپ قىلىڭ",
+ "matches IPv4" : "match IPv4",
+ "does not match IPv4" : "IPv4 غا ماس كەلمەيدۇ",
+ "matches IPv6" : "match IPv6",
+ "does not match IPv6" : "IPv6 غا ماس كەلمەيدۇ",
+ "File system tag" : "ھۆججەت سىستېمىسى بەلگىسى",
+ "is tagged with" : "with tagged with",
+ "is not tagged with" : "بەلگىسى يوق",
+ "Request URL" : "URL نى تەلەپ قىلىڭ",
+ "Request time" : "ۋاقىت تەلەپ قىلىش",
+ "between" : "between",
+ "not between" : "ئارىسىدا ئەمەس",
+ "Request user agent" : "ئىشلەتكۈچى ۋاكالەتچىسىنى تەلەپ قىلىڭ",
+ "Group membership" : "گۇرۇپپا ئەزالىقى",
+ "is member of" : "نىڭ ئەزاسى",
+ "is not member of" : "ئەزا ئەمەس"
+},
+"nplurals=2; plural=(n != 1);");
diff --git a/apps/workflowengine/l10n/ug.json b/apps/workflowengine/l10n/ug.json
new file mode 100644
index 00000000000..03070e8f9a1
--- /dev/null
+++ b/apps/workflowengine/l10n/ug.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "بېرىلگەن تىجارەتچى ئىناۋەتسىز",
+ "The given regular expression is invalid" : "بېرىلگەن دائىملىق ئىپادىلەش ئىناۋەتسىز",
+ "The given file size is invalid" : "بېرىلگەن ھۆججەت چوڭلۇقى ئىناۋەتسىز",
+ "The given tag id is invalid" : "بېرىلگەن بەلگە id ئىناۋەتسىز",
+ "The given IP range is invalid" : "بېرىلگەن IP دائىرىسى ئىناۋەتسىز",
+ "The given IP range is not valid for IPv4" : "بېرىلگەن IP دائىرىسى IPv4 ئۈچۈن ئىناۋەتلىك ئەمەس",
+ "The given IP range is not valid for IPv6" : "بېرىلگەن IP دائىرىسى IPv6 ئۈچۈن ئىناۋەتلىك ئەمەس",
+ "The given time span is invalid" : "بېرىلگەن ۋاقىت ئىناۋەتسىز",
+ "The given start time is invalid" : "بېرىلگەن باشلىنىش ۋاقتى ئىناۋەتسىز",
+ "The given end time is invalid" : "بېرىلگەن ئاخىرقى ۋاقىت ئىناۋەتسىز",
+ "The given group does not exist" : "بېرىلگەن گۇرۇپپا مەۋجۇت ئەمەس",
+ "File" : "File",
+ "File created" : "ھۆججەت قۇرۇلدى",
+ "File updated" : "ھۆججەت يېڭىلاندى",
+ "File renamed" : "ھۆججەتنىڭ ئىسمى ئۆزگەرتىلدى",
+ "File deleted" : "ھۆججەت ئۆچۈرۈلدى",
+ "File accessed" : "ھۆججەت زىيارەت قىلىندى",
+ "File copied" : "ھۆججەت كۆچۈرۈلدى",
+ "Tag assigned" : "بەلگە تەقسىم قىلىندى",
+ "Someone" : "بىرەيلەن",
+ "%s created %s" : "% s% s نى قۇردى",
+ "%s modified %s" : "% s ئۆزگەرتىلگەن% s",
+ "%s deleted %s" : "% s ئۆچۈرۈلدى",
+ "%s accessed %s" : "% s زىيارەت قىلىندى% s",
+ "%s renamed %s" : "% s نىڭ ئىسمى% s",
+ "%s copied %s" : "% s كۆچۈرۈلگەن% s",
+ "%s assigned %s to %s" : "% s% s دىن% s نى تەقسىم قىلدى",
+ "Operation #%s does not exist" : "مەشغۇلات #% s مەۋجۇت ئەمەس",
+ "Entity %s does not exist" : "ئورۇن% s مەۋجۇت ئەمەس",
+ "Entity %s is invalid" : "ئورۇن% s ئىناۋەتسىز",
+ "No events are chosen." : "ھېچقانداق پائالىيەت تاللانمىدى.",
+ "Entity %s has no event %s" : "ئورۇن% s نىڭ ھېچقانداق پائالىيىتى يوق",
+ "Operation %s does not exist" : "% S مەشغۇلاتى مەۋجۇت ئەمەس",
+ "Operation %s is invalid" : "% S مەشغۇلاتى ئىناۋەتسىز",
+ "At least one check needs to be provided" : "كەم دېگەندە بىر تەكشۈرۈش بىلەن تەمىنلەش كېرەك",
+ "The provided operation data is too long" : "تەمىنلەنگەن مەشغۇلات سانلىق مەلۇماتلىرى بەك ئۇزۇن",
+ "Invalid check provided" : "ئىناۋەتسىز تەكشۈرۈش تەمىنلەندى",
+ "Check %s does not exist" : "تەكشۈرۈش% s مەۋجۇت ئەمەس",
+ "Check %s is invalid" : "تەكشۈرۈش% s ئىناۋەتسىز",
+ "Check %s is not allowed with this entity" : "بۇ ئورۇن بىلەن% s نى تەكشۈرۈشكە بولمايدۇ",
+ "The provided check value is too long" : "تەمىنلەنگەن تەكشۈرۈش قىممىتى بەك ئۇزۇن",
+ "Check #%s does not exist" : "تەكشۈرۈش #% s مەۋجۇت ئەمەس",
+ "Check %s is invalid or does not exist" : "تەكشۈرۈش% s ئىناۋەتسىز ياكى مەۋجۇت ئەمەس",
+ "Flow" : "Flow",
+ "Nextcloud workflow engine" : "Nextcloud خىزمەت ئېقىمى ماتورى",
+ "Select a filter" : "سۈزگۈچنى تاللاڭ",
+ "Select a comparator" : "سېلىشتۇرغۇچىنى تاللاڭ",
+ "Remove filter" : "سۈزگۈچنى ئۆچۈرۈڭ",
+ "Folder" : "قىسقۇچ",
+ "Images" : "سۈرەتلەر",
+ "Office documents" : "ئىشخانا ھۆججەتلىرى",
+ "PDF documents" : "PDF ھۆججەتلىرى",
+ "Custom MIME type" : "ئىختىيارى MIME تىپى",
+ "Custom mimetype" : "Custom mimetype",
+ "Select a file type" : "ھۆججەت تىپىنى تاللاڭ",
+ "e.g. httpd/unix-directory" : "مەسىلەن httpd / unix- مۇندەرىجە",
+ "Please enter a valid time span" : "ئىناۋەتلىك ۋاقىتنى كىرگۈزۈڭ",
+ "Files WebDAV" : "ھۆججەتلەر WebDAV",
+ "Custom URL" : "ئىختىيارى URL",
+ "Select a request URL" : "تەلەپ URL نى تاللاڭ",
+ "Android client" : "ئاندىرويىد خېرىدارى",
+ "iOS client" : "iOS خېرىدارى",
+ "Desktop client" : "ئۈستەل يۈزى خېرىدارى",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook خۇرۇچلىرى",
+ "Custom user agent" : "ئىشلەتكۈچى ۋاكالەتچىسى",
+ "Select a user agent" : "ئىشلەتكۈچى ۋاكالەتچىسىنى تاللاڭ",
+ "Select groups" : "گۇرۇپپىلارنى تاللاڭ",
+ "Groups" : "گۇرۇپپا",
+ "Type to search for group …" : "گۇرۇپپا ئىزدەش ئۈچۈن كىرگۈزۈڭ…",
+ "Select a trigger" : "قوزغاتقۇچنى تاللاڭ",
+ "At least one event must be selected" : "كەم دېگەندە بىر پائالىيەتنى تاللاش كېرەك",
+ "Add new flow" : "يېڭى ئېقىن قوشۇڭ",
+ "The configuration is invalid" : "سەپلىمىسى ئىناۋەتسىز",
+ "Active" : "ئاكتىپ",
+ "Save" : "ساقلا",
+ "When" : "قاچان",
+ "and" : "ۋە",
+ "Add a new filter" : "يېڭى سۈزگۈچ قوشۇڭ",
+ "Cancel" : "ۋاز كەچ",
+ "Delete" : "ئۆچۈر",
+ "Available flows" : "ئىشلەتكىلى بولىدىغان ئېقىن",
+ "For details on how to write your own flow, check out the development documentation." : "ئۆزىڭىزنىڭ ئېقىمىنى قانداق يېزىش ھەققىدىكى تەپسىلاتلارنى تەرەققىيات ھۆججىتىنى كۆرۈڭ.",
+ "No flows installed" : "ھېچقانداق ئېقىم ئورنىتىلمىدى",
+ "Ask your administrator to install new flows." : "باشقۇرغۇچىڭىزدىن يېڭى ئېقىن ئورنىتىشنى تەلەپ قىلىڭ.",
+ "More flows" : "تېخىمۇ كۆپ ئېقىن",
+ "Browse the App Store" : "ئەپ دۇكىنىنى كۆرۈڭ",
+ "Show less" : "ئازراق كۆرسەت",
+ "Show more" : "تېخىمۇ كۆپ كۆرسەت",
+ "Configured flows" : "تەڭشەلگەن ئېقىن",
+ "Your flows" : "ئېقىمىڭىز",
+ "No flows configured" : "ھېچقانداق ئېقىم سەپلەنمىگەن",
+ "matches" : "match",
+ "does not match" : "ماس كەلمەيدۇ",
+ "is" : "is",
+ "is not" : "ئەمەس",
+ "File name" : "ھۆججەت ئىسمى",
+ "File MIME type" : "ھۆججەت MIME تىپى",
+ "File size (upload)" : "ھۆججەت چوڭلۇقى (يوللاش)",
+ "less" : "ئاز",
+ "less or equals" : "ئاز ياكى باراۋەر",
+ "greater or equals" : "چوڭ ياكى باراۋەر",
+ "greater" : "تېخىمۇ چوڭ",
+ "Request remote address" : "يىراقتىكى ئادرېسنى تەلەپ قىلىڭ",
+ "matches IPv4" : "match IPv4",
+ "does not match IPv4" : "IPv4 غا ماس كەلمەيدۇ",
+ "matches IPv6" : "match IPv6",
+ "does not match IPv6" : "IPv6 غا ماس كەلمەيدۇ",
+ "File system tag" : "ھۆججەت سىستېمىسى بەلگىسى",
+ "is tagged with" : "with tagged with",
+ "is not tagged with" : "بەلگىسى يوق",
+ "Request URL" : "URL نى تەلەپ قىلىڭ",
+ "Request time" : "ۋاقىت تەلەپ قىلىش",
+ "between" : "between",
+ "not between" : "ئارىسىدا ئەمەس",
+ "Request user agent" : "ئىشلەتكۈچى ۋاكالەتچىسىنى تەلەپ قىلىڭ",
+ "Group membership" : "گۇرۇپپا ئەزالىقى",
+ "is member of" : "نىڭ ئەزاسى",
+ "is not member of" : "ئەزا ئەمەس"
+},"pluralForm" :"nplurals=2; plural=(n != 1);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/uk.js b/apps/workflowengine/l10n/uk.js
new file mode 100644
index 00000000000..a9583382441
--- /dev/null
+++ b/apps/workflowengine/l10n/uk.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "Зазначений оператор недійсний",
+ "The given regular expression is invalid" : "Зазначений регулярний вираз недійсний",
+ "The given file size is invalid" : "Зазначений розмір файлу недійсний",
+ "The given tag id is invalid" : "Зазначений ідентифікатор мітки недійсний",
+ "The given IP range is invalid" : "Зазначений діапазон IP-адрес недійсний",
+ "The given IP range is not valid for IPv4" : "Зазначений діапазон IP-адрес недійсний для IPv4",
+ "The given IP range is not valid for IPv6" : "Зазначений діапазон IP-адрес недійсний для IPv6",
+ "The given time span is invalid" : "Зазначений часовий проміжок недійсний",
+ "The given start time is invalid" : "Зазначений час початку недійсний",
+ "The given end time is invalid" : "Зазначений час завершення недійсний",
+ "The given group does not exist" : "Зазначена група не існує",
+ "File" : "Файл",
+ "File created" : "Файл створено",
+ "File updated" : "Файл оновлено",
+ "File renamed" : "Файл перейменовано",
+ "File deleted" : "Файл вилучено",
+ "File accessed" : "Отримано доступ до файлу",
+ "File copied" : "Файл скопійовано",
+ "Tag assigned" : "Призначено мітку",
+ "Someone" : "Хтось",
+ "%s created %s" : "%s створив(-ла) %s",
+ "%s modified %s" : "%s змінив(-ла) %s",
+ "%s deleted %s" : "%s вилучив(-ла) %s",
+ "%s accessed %s" : "%s отримав(-ла) доступ до %s",
+ "%s renamed %s" : "%s перейменував(-ла) %s",
+ "%s copied %s" : "%s скопіював(-ла) %s",
+ "%s assigned %s to %s" : "%s призначив(-ла) мітку%s файлу %s",
+ "Operation #%s does not exist" : "Операція №%s не існує",
+ "Entity %s does not exist" : "Об'єкт %s відсутній ",
+ "Entity %s is invalid" : "Об'єкт %s не дійсний",
+ "No events are chosen." : "Не вибрано жодної події.",
+ "Entity %s has no event %s" : "Об'єкт %s не має події %s",
+ "Operation %s does not exist" : "Операція %s не існує",
+ "Operation %s is invalid" : "Операція %s недійсна",
+ "At least one check needs to be provided" : "Потрібно визначити принаймні одну перевірку",
+ "The provided operation data is too long" : "Надано задовгі дані для операції",
+ "Invalid check provided" : "Зазначено недійсну перевірку",
+ "Check %s does not exist" : "Перевірка %s не існує",
+ "Check %s is invalid" : "Перевірка %s недійсна",
+ "Check %s is not allowed with this entity" : "Перевірку %s не дозволено для цієї сутності",
+ "The provided check value is too long" : "Зазначено задовге перевірочне значення",
+ "Check #%s does not exist" : "Перевірка №%s не існує",
+ "Check %s is invalid or does not exist" : "Перевірка %s недійсна або не існує",
+ "Flow" : "Процеси",
+ "Nextcloud workflow engine" : "Керування робочими процесами у Nextcloud",
+ "Select a filter" : "Виберіть фільтр",
+ "Select a comparator" : "Виберіть засіб для порівняння",
+ "Remove filter" : "Вилучити фільтр",
+ "Folder" : "Каталог",
+ "Images" : "Зображення",
+ "Office documents" : "Офісні документи",
+ "PDF documents" : "Документи PDF",
+ "Custom MIME type" : "Власний тип MIME",
+ "Custom mimetype" : "Власний mimetype",
+ "Select a file type" : "Виберіть тип файлу",
+ "e.g. httpd/unix-directory" : "напр., httpd/unix-directory",
+ "Please enter a valid time span" : "Зазначте дійсний часовий проміжок",
+ "Files WebDAV" : "Файли WebDAV",
+ "Custom URL" : "Власний URL",
+ "Select a request URL" : "Виберіть URL для запиту",
+ "Android client" : "Клієнт Android",
+ "iOS client" : "iOS клієнт",
+ "Desktop client" : "Клієнт для ПК",
+ "Thunderbird & Outlook addons" : "Доповнення Thunderbird та Outlook",
+ "Custom user agent" : "Власний user agent",
+ "Select a user agent" : "Виберіть user agent",
+ "Select groups" : "Виберіть групи",
+ "Groups" : "Групи",
+ "Type to search for group …" : "Почніть вводити, щод знайти групу ...",
+ "Select a trigger" : "Виберіть умову початку виконання",
+ "At least one event must be selected" : "Потрібно вибрати принаймні одну подію",
+ "Add new flow" : "Додати новий процес",
+ "The configuration is invalid" : "Налаштування не дійсне",
+ "Active" : "Активно",
+ "Save" : "Зберегти",
+ "When" : "Коли",
+ "and" : "та",
+ "Add a new filter" : "Додати новий фільтр",
+ "Cancel" : "Скасувати",
+ "Delete" : "Вилучити",
+ "Available flows" : "Процеси",
+ "For details on how to write your own flow, check out the development documentation." : "Перегляньте документацію для розробника, щоби дізнатися, як додати власні процеси.",
+ "No flows installed" : "Відсутні процеси",
+ "Ask your administrator to install new flows." : "Зверніться до адміністратора щодо встановлення нових процесів.",
+ "More flows" : "Більше процесів",
+ "Browse the App Store" : "Перейти до каталогу застосунків",
+ "Show less" : "Показувати менше",
+ "Show more" : "Показати більше",
+ "Configured flows" : "Налаштовані процеси",
+ "Your flows" : "Ваші процеси",
+ "No flows configured" : "Процеси не налаштовано",
+ "matches" : "містить",
+ "does not match" : "не містить",
+ "is" : "є",
+ "is not" : "не",
+ "File name" : "Ім'я файлу",
+ "File MIME type" : "Тип MIME файлу",
+ "File size (upload)" : "Розмір файлу (завантаження)",
+ "less" : "менше",
+ "less or equals" : "менше або дорівнює",
+ "greater or equals" : "більше або дорівнює",
+ "greater" : "більше",
+ "Request remote address" : "Запит віддаленої адреси",
+ "matches IPv4" : "відповідає IPv4",
+ "does not match IPv4" : "не відповідає IPv4",
+ "matches IPv6" : "відповідає IPv6",
+ "does not match IPv6" : "не відповідає IPv6",
+ "File system tag" : "Мітка файлової системи",
+ "is tagged with" : "позначено міткою",
+ "is not tagged with" : "не позначено мітками",
+ "Request URL" : "URL запиту",
+ "Request time" : "Час запиту",
+ "between" : "між",
+ "not between" : "не між",
+ "Request user agent" : "Запит агента користувача",
+ "Group membership" : "Участь в групах",
+ "is member of" : "є учасником",
+ "is not member of" : "не є учасником"
+},
+"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");
diff --git a/apps/workflowengine/l10n/uk.json b/apps/workflowengine/l10n/uk.json
new file mode 100644
index 00000000000..93c18f047c3
--- /dev/null
+++ b/apps/workflowengine/l10n/uk.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "Зазначений оператор недійсний",
+ "The given regular expression is invalid" : "Зазначений регулярний вираз недійсний",
+ "The given file size is invalid" : "Зазначений розмір файлу недійсний",
+ "The given tag id is invalid" : "Зазначений ідентифікатор мітки недійсний",
+ "The given IP range is invalid" : "Зазначений діапазон IP-адрес недійсний",
+ "The given IP range is not valid for IPv4" : "Зазначений діапазон IP-адрес недійсний для IPv4",
+ "The given IP range is not valid for IPv6" : "Зазначений діапазон IP-адрес недійсний для IPv6",
+ "The given time span is invalid" : "Зазначений часовий проміжок недійсний",
+ "The given start time is invalid" : "Зазначений час початку недійсний",
+ "The given end time is invalid" : "Зазначений час завершення недійсний",
+ "The given group does not exist" : "Зазначена група не існує",
+ "File" : "Файл",
+ "File created" : "Файл створено",
+ "File updated" : "Файл оновлено",
+ "File renamed" : "Файл перейменовано",
+ "File deleted" : "Файл вилучено",
+ "File accessed" : "Отримано доступ до файлу",
+ "File copied" : "Файл скопійовано",
+ "Tag assigned" : "Призначено мітку",
+ "Someone" : "Хтось",
+ "%s created %s" : "%s створив(-ла) %s",
+ "%s modified %s" : "%s змінив(-ла) %s",
+ "%s deleted %s" : "%s вилучив(-ла) %s",
+ "%s accessed %s" : "%s отримав(-ла) доступ до %s",
+ "%s renamed %s" : "%s перейменував(-ла) %s",
+ "%s copied %s" : "%s скопіював(-ла) %s",
+ "%s assigned %s to %s" : "%s призначив(-ла) мітку%s файлу %s",
+ "Operation #%s does not exist" : "Операція №%s не існує",
+ "Entity %s does not exist" : "Об'єкт %s відсутній ",
+ "Entity %s is invalid" : "Об'єкт %s не дійсний",
+ "No events are chosen." : "Не вибрано жодної події.",
+ "Entity %s has no event %s" : "Об'єкт %s не має події %s",
+ "Operation %s does not exist" : "Операція %s не існує",
+ "Operation %s is invalid" : "Операція %s недійсна",
+ "At least one check needs to be provided" : "Потрібно визначити принаймні одну перевірку",
+ "The provided operation data is too long" : "Надано задовгі дані для операції",
+ "Invalid check provided" : "Зазначено недійсну перевірку",
+ "Check %s does not exist" : "Перевірка %s не існує",
+ "Check %s is invalid" : "Перевірка %s недійсна",
+ "Check %s is not allowed with this entity" : "Перевірку %s не дозволено для цієї сутності",
+ "The provided check value is too long" : "Зазначено задовге перевірочне значення",
+ "Check #%s does not exist" : "Перевірка №%s не існує",
+ "Check %s is invalid or does not exist" : "Перевірка %s недійсна або не існує",
+ "Flow" : "Процеси",
+ "Nextcloud workflow engine" : "Керування робочими процесами у Nextcloud",
+ "Select a filter" : "Виберіть фільтр",
+ "Select a comparator" : "Виберіть засіб для порівняння",
+ "Remove filter" : "Вилучити фільтр",
+ "Folder" : "Каталог",
+ "Images" : "Зображення",
+ "Office documents" : "Офісні документи",
+ "PDF documents" : "Документи PDF",
+ "Custom MIME type" : "Власний тип MIME",
+ "Custom mimetype" : "Власний mimetype",
+ "Select a file type" : "Виберіть тип файлу",
+ "e.g. httpd/unix-directory" : "напр., httpd/unix-directory",
+ "Please enter a valid time span" : "Зазначте дійсний часовий проміжок",
+ "Files WebDAV" : "Файли WebDAV",
+ "Custom URL" : "Власний URL",
+ "Select a request URL" : "Виберіть URL для запиту",
+ "Android client" : "Клієнт Android",
+ "iOS client" : "iOS клієнт",
+ "Desktop client" : "Клієнт для ПК",
+ "Thunderbird & Outlook addons" : "Доповнення Thunderbird та Outlook",
+ "Custom user agent" : "Власний user agent",
+ "Select a user agent" : "Виберіть user agent",
+ "Select groups" : "Виберіть групи",
+ "Groups" : "Групи",
+ "Type to search for group …" : "Почніть вводити, щод знайти групу ...",
+ "Select a trigger" : "Виберіть умову початку виконання",
+ "At least one event must be selected" : "Потрібно вибрати принаймні одну подію",
+ "Add new flow" : "Додати новий процес",
+ "The configuration is invalid" : "Налаштування не дійсне",
+ "Active" : "Активно",
+ "Save" : "Зберегти",
+ "When" : "Коли",
+ "and" : "та",
+ "Add a new filter" : "Додати новий фільтр",
+ "Cancel" : "Скасувати",
+ "Delete" : "Вилучити",
+ "Available flows" : "Процеси",
+ "For details on how to write your own flow, check out the development documentation." : "Перегляньте документацію для розробника, щоби дізнатися, як додати власні процеси.",
+ "No flows installed" : "Відсутні процеси",
+ "Ask your administrator to install new flows." : "Зверніться до адміністратора щодо встановлення нових процесів.",
+ "More flows" : "Більше процесів",
+ "Browse the App Store" : "Перейти до каталогу застосунків",
+ "Show less" : "Показувати менше",
+ "Show more" : "Показати більше",
+ "Configured flows" : "Налаштовані процеси",
+ "Your flows" : "Ваші процеси",
+ "No flows configured" : "Процеси не налаштовано",
+ "matches" : "містить",
+ "does not match" : "не містить",
+ "is" : "є",
+ "is not" : "не",
+ "File name" : "Ім'я файлу",
+ "File MIME type" : "Тип MIME файлу",
+ "File size (upload)" : "Розмір файлу (завантаження)",
+ "less" : "менше",
+ "less or equals" : "менше або дорівнює",
+ "greater or equals" : "більше або дорівнює",
+ "greater" : "більше",
+ "Request remote address" : "Запит віддаленої адреси",
+ "matches IPv4" : "відповідає IPv4",
+ "does not match IPv4" : "не відповідає IPv4",
+ "matches IPv6" : "відповідає IPv6",
+ "does not match IPv6" : "не відповідає IPv6",
+ "File system tag" : "Мітка файлової системи",
+ "is tagged with" : "позначено міткою",
+ "is not tagged with" : "не позначено мітками",
+ "Request URL" : "URL запиту",
+ "Request time" : "Час запиту",
+ "between" : "між",
+ "not between" : "не між",
+ "Request user agent" : "Запит агента користувача",
+ "Group membership" : "Участь в групах",
+ "is member of" : "є учасником",
+ "is not member of" : "не є учасником"
+},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/zh_CN.js b/apps/workflowengine/l10n/zh_CN.js
index 46a04f5378f..6f500b68010 100644
--- a/apps/workflowengine/l10n/zh_CN.js
+++ b/apps/workflowengine/l10n/zh_CN.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "已保存",
- "Saving failed:" : "保存失败:",
- "File MIME type" : "文件MIME类型",
- "is" : "是",
- "is not" : "不是",
+ "The given operator is invalid" : "给定的运算符无效",
+ "The given regular expression is invalid" : "给定的正则表达式无效",
+ "The given file size is invalid" : "给定的文件大小无效",
+ "The given tag id is invalid" : "给定的标签 ID 无效",
+ "The given IP range is invalid" : "给定的IP范围无效",
+ "The given IP range is not valid for IPv4" : "填写的 IP 范围不是有效的 IPv4 格式",
+ "The given IP range is not valid for IPv6" : "填写的 IP 范围不是有效的 IPv6 格式",
+ "The given time span is invalid" : "给定的时间范围无效",
+ "The given start time is invalid" : "给定的开始时间无效",
+ "The given end time is invalid" : "输入的截止时间无效",
+ "The given group does not exist" : "输入的群组不存在",
+ "File" : "文件",
+ "File created" : "已创建的文件",
+ "File updated" : "文件已更新",
+ "File renamed" : "重命名的文件",
+ "File deleted" : "已删除文件",
+ "File accessed" : "已访问的文件",
+ "File copied" : "已复制的文件",
+ "Tag assigned" : "已指派的标签",
+ "Someone" : "某人",
+ "%s created %s" : "%s 创建了 %s",
+ "%s modified %s" : "%s 修改了 %s",
+ "%s deleted %s" : "%s 删除了 %s",
+ "%s accessed %s" : "%s 访问了 %s",
+ "%s renamed %s" : "%s 重命名了 %s",
+ "%s copied %s" : "%s 复制了 %s",
+ "%s assigned %s to %s" : "%s 分配了 %s 给 %s",
+ "Operation #%s does not exist" : "操作 %s 不存在",
+ "Entity %s does not exist" : "实体%s不存在",
+ "Entity %s is invalid" : "实体%s是无效的",
+ "No events are chosen." : "没有事件被选中。",
+ "Entity %s has no event %s" : "实体%s没有事件%s",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Operation %s is invalid" : "操作 %s 无效",
+ "At least one check needs to be provided" : "至少需要提供一次检查",
+ "The provided operation data is too long" : "提供的操作数据太长",
+ "Invalid check provided" : "提供的检查无效",
+ "Check %s does not exist" : "检查 %s 不存在",
+ "Check %s is invalid" : "检查%s是不可用",
+ "Check %s is not allowed with this entity" : "对于此实体,检查%s是不被允许的",
+ "The provided check value is too long" : "提供的检查值太长",
+ "Check #%s does not exist" : "检查 #%s 不存在",
+ "Check %s is invalid or does not exist" : "检查%s是不可用或者不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流引擎",
+ "Select a filter" : "选择一个过滤器",
+ "Select a comparator" : "选择一个比较器",
+ "Remove filter" : "移除过滤条件",
+ "Folder" : "文件夹",
+ "Images" : "图片",
+ "Office documents" : "Office 文档",
+ "PDF documents" : "PDF文档",
+ "Custom MIME type" : "自定义 MIME 类型",
+ "Custom mimetype" : "自定义MIME类型",
+ "Select a file type" : "选择一个文件类型",
+ "e.g. httpd/unix-directory" : "例如: httpd/unix-directory",
+ "Please enter a valid time span" : "请输入有效的时间范围",
+ "Files WebDAV" : "文件 WebDAV",
+ "Custom URL" : "自定义URL",
+ "Select a request URL" : "选择一个请求URL",
+ "Android client" : "Android 客户端",
+ "iOS client" : "iOS 客户端",
+ "Desktop client" : "桌面客户端",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook 插件",
+ "Custom user agent" : "自定义用户代理",
+ "Select a user agent" : "选择一个用户代理",
+ "Select groups" : "选择用户组",
+ "Groups" : "用户组",
+ "Type to search for group …" : "输入以搜索群组...",
+ "Select a trigger" : "选择一个触发器",
+ "At least one event must be selected" : "必须至少选择一个事件",
+ "Add new flow" : "添加新的流程",
+ "The configuration is invalid" : "此配置是无效的",
+ "Active" : "作用",
+ "Save" : "保存",
+ "When" : "时间",
+ "and" : "与",
+ "Add a new filter" : "添加一个新的筛选条件",
+ "Cancel" : "取消",
+ "Delete" : "删除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "有关如何编写自己的流程的详细信息,请查看开发文档。",
+ "No flows installed" : "未安装任何流量设备",
+ "Ask your administrator to install new flows." : "请让你的管理员安装新的流量设备。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "浏览应用商店",
+ "Show less" : "显示更少",
+ "Show more" : "显示更多",
+ "Configured flows" : "已配置的流程",
+ "Your flows" : "你的流程",
+ "No flows configured" : "未配置任何流程",
"matches" : "匹配",
"does not match" : "不匹配",
- "Example: {placeholder}" : "例子: {placeholder}",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "文件名",
+ "File MIME type" : "文件 MIME 类型",
"File size (upload)" : "文件大小 (上传)",
"less" : "小于",
"less or equals" : "小于等于",
"greater or equals" : "大于等于",
"greater" : "大于",
+ "Request remote address" : "要求远程地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不匹配 IPv4",
+ "matches IPv6" : "匹配 IPv6",
+ "does not match IPv6" : "不匹配 IPv6",
"File system tag" : "文件系统标签",
"is tagged with" : "标记为",
"is not tagged with" : "未标记为",
- "Select tag…" : "选择标签...",
- "Request remote address" : "要求远程地址",
- "matches IPv4" : "匹配 IPv4",
- "does not match IPv4" : "不匹配IPv4",
- "matches IPv6" : "匹配IPv6",
- "does not match IPv6" : "不匹配IPv6",
+ "Request URL" : "请求 URL",
"Request time" : "请求时间",
"between" : "之间",
"not between" : "不在之间",
- "Start" : "开始",
- "End" : "结束",
- "Select timezone…" : "选择时区",
- "Request URL" : "请求URL",
- "Predefined URLs" : "预定义URL",
- "Files WebDAV" : "文件WebDAV",
"Request user agent" : "请求用户代理",
- "Sync clients" : "同步客户端",
- "Android client" : "Android 客户端",
- "iOS client" : "iOS 客户端",
- "Desktop client" : "桌面客户端",
- "User group membership" : "用户组成员资格",
+ "Group membership" : "组成员资格",
"is member of" : "是成员",
- "is not member of" : "不是成员",
- "The given operator is invalid" : "给定的运算符无效",
- "The given regular expression is invalid" : "给定的正则表达式无效",
- "The given file size is invalid" : "给定的文件大小无效",
- "The given tag id is invalid" : "给定的标签ID无效",
- "The given IP range is invalid" : "给定的IP范围无效",
- "The given IP range is not valid for IPv4" : "填写的IP范围不是有效的IPv4格式",
- "The given IP range is not valid for IPv6" : "填写的IP范围不是有效的IPv6格式",
- "The given time span is invalid" : "给定的时间范围无效",
- "The given start time is invalid" : "给定的开始时间无效",
- "The given end time is invalid" : "输入的截止时间无效",
- "The given group does not exist" : "输入的群组不存在",
- "Check %s is invalid or does not exist" : "检查%s是不可用或者不存在",
- "Operation #%s does not exist" : "操作 %s 不存在",
- "Operation %s does not exist" : "操作 %s 不存在",
- "Operation %s is invalid" : "操作 %s 无效",
- "Check %s does not exist" : "检查%s不存在",
- "Check %s is invalid" : "检查%s是不可用",
- "Check #%s does not exist" : "检查#%s是不存在",
- "Workflow" : "工作流",
- "Open documentation" : "打开文档",
- "Add rule group" : "添加规则组",
- "Short rule description" : "短规则说明",
- "Add rule" : "添加规则",
- "Reset" : "重置",
- "Save" : "保存",
- "Saving…" : "保存中...",
- "Loading…" : "加载中",
- "Successfully saved" : "保存成功",
- "File mime type" : "文件MIME类型"
+ "is not member of" : "不是成员"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/zh_CN.json b/apps/workflowengine/l10n/zh_CN.json
index 24e395c8492..1a82f8ebaee 100644
--- a/apps/workflowengine/l10n/zh_CN.json
+++ b/apps/workflowengine/l10n/zh_CN.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "已保存",
- "Saving failed:" : "保存失败:",
- "File MIME type" : "文件MIME类型",
- "is" : "是",
- "is not" : "不是",
+ "The given operator is invalid" : "给定的运算符无效",
+ "The given regular expression is invalid" : "给定的正则表达式无效",
+ "The given file size is invalid" : "给定的文件大小无效",
+ "The given tag id is invalid" : "给定的标签 ID 无效",
+ "The given IP range is invalid" : "给定的IP范围无效",
+ "The given IP range is not valid for IPv4" : "填写的 IP 范围不是有效的 IPv4 格式",
+ "The given IP range is not valid for IPv6" : "填写的 IP 范围不是有效的 IPv6 格式",
+ "The given time span is invalid" : "给定的时间范围无效",
+ "The given start time is invalid" : "给定的开始时间无效",
+ "The given end time is invalid" : "输入的截止时间无效",
+ "The given group does not exist" : "输入的群组不存在",
+ "File" : "文件",
+ "File created" : "已创建的文件",
+ "File updated" : "文件已更新",
+ "File renamed" : "重命名的文件",
+ "File deleted" : "已删除文件",
+ "File accessed" : "已访问的文件",
+ "File copied" : "已复制的文件",
+ "Tag assigned" : "已指派的标签",
+ "Someone" : "某人",
+ "%s created %s" : "%s 创建了 %s",
+ "%s modified %s" : "%s 修改了 %s",
+ "%s deleted %s" : "%s 删除了 %s",
+ "%s accessed %s" : "%s 访问了 %s",
+ "%s renamed %s" : "%s 重命名了 %s",
+ "%s copied %s" : "%s 复制了 %s",
+ "%s assigned %s to %s" : "%s 分配了 %s 给 %s",
+ "Operation #%s does not exist" : "操作 %s 不存在",
+ "Entity %s does not exist" : "实体%s不存在",
+ "Entity %s is invalid" : "实体%s是无效的",
+ "No events are chosen." : "没有事件被选中。",
+ "Entity %s has no event %s" : "实体%s没有事件%s",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Operation %s is invalid" : "操作 %s 无效",
+ "At least one check needs to be provided" : "至少需要提供一次检查",
+ "The provided operation data is too long" : "提供的操作数据太长",
+ "Invalid check provided" : "提供的检查无效",
+ "Check %s does not exist" : "检查 %s 不存在",
+ "Check %s is invalid" : "检查%s是不可用",
+ "Check %s is not allowed with this entity" : "对于此实体,检查%s是不被允许的",
+ "The provided check value is too long" : "提供的检查值太长",
+ "Check #%s does not exist" : "检查 #%s 不存在",
+ "Check %s is invalid or does not exist" : "检查%s是不可用或者不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流引擎",
+ "Select a filter" : "选择一个过滤器",
+ "Select a comparator" : "选择一个比较器",
+ "Remove filter" : "移除过滤条件",
+ "Folder" : "文件夹",
+ "Images" : "图片",
+ "Office documents" : "Office 文档",
+ "PDF documents" : "PDF文档",
+ "Custom MIME type" : "自定义 MIME 类型",
+ "Custom mimetype" : "自定义MIME类型",
+ "Select a file type" : "选择一个文件类型",
+ "e.g. httpd/unix-directory" : "例如: httpd/unix-directory",
+ "Please enter a valid time span" : "请输入有效的时间范围",
+ "Files WebDAV" : "文件 WebDAV",
+ "Custom URL" : "自定义URL",
+ "Select a request URL" : "选择一个请求URL",
+ "Android client" : "Android 客户端",
+ "iOS client" : "iOS 客户端",
+ "Desktop client" : "桌面客户端",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook 插件",
+ "Custom user agent" : "自定义用户代理",
+ "Select a user agent" : "选择一个用户代理",
+ "Select groups" : "选择用户组",
+ "Groups" : "用户组",
+ "Type to search for group …" : "输入以搜索群组...",
+ "Select a trigger" : "选择一个触发器",
+ "At least one event must be selected" : "必须至少选择一个事件",
+ "Add new flow" : "添加新的流程",
+ "The configuration is invalid" : "此配置是无效的",
+ "Active" : "作用",
+ "Save" : "保存",
+ "When" : "时间",
+ "and" : "与",
+ "Add a new filter" : "添加一个新的筛选条件",
+ "Cancel" : "取消",
+ "Delete" : "删除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "有关如何编写自己的流程的详细信息,请查看开发文档。",
+ "No flows installed" : "未安装任何流量设备",
+ "Ask your administrator to install new flows." : "请让你的管理员安装新的流量设备。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "浏览应用商店",
+ "Show less" : "显示更少",
+ "Show more" : "显示更多",
+ "Configured flows" : "已配置的流程",
+ "Your flows" : "你的流程",
+ "No flows configured" : "未配置任何流程",
"matches" : "匹配",
"does not match" : "不匹配",
- "Example: {placeholder}" : "例子: {placeholder}",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "文件名",
+ "File MIME type" : "文件 MIME 类型",
"File size (upload)" : "文件大小 (上传)",
"less" : "小于",
"less or equals" : "小于等于",
"greater or equals" : "大于等于",
"greater" : "大于",
+ "Request remote address" : "要求远程地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不匹配 IPv4",
+ "matches IPv6" : "匹配 IPv6",
+ "does not match IPv6" : "不匹配 IPv6",
"File system tag" : "文件系统标签",
"is tagged with" : "标记为",
"is not tagged with" : "未标记为",
- "Select tag…" : "选择标签...",
- "Request remote address" : "要求远程地址",
- "matches IPv4" : "匹配 IPv4",
- "does not match IPv4" : "不匹配IPv4",
- "matches IPv6" : "匹配IPv6",
- "does not match IPv6" : "不匹配IPv6",
+ "Request URL" : "请求 URL",
"Request time" : "请求时间",
"between" : "之间",
"not between" : "不在之间",
- "Start" : "开始",
- "End" : "结束",
- "Select timezone…" : "选择时区",
- "Request URL" : "请求URL",
- "Predefined URLs" : "预定义URL",
- "Files WebDAV" : "文件WebDAV",
"Request user agent" : "请求用户代理",
- "Sync clients" : "同步客户端",
- "Android client" : "Android 客户端",
- "iOS client" : "iOS 客户端",
- "Desktop client" : "桌面客户端",
- "User group membership" : "用户组成员资格",
+ "Group membership" : "组成员资格",
"is member of" : "是成员",
- "is not member of" : "不是成员",
- "The given operator is invalid" : "给定的运算符无效",
- "The given regular expression is invalid" : "给定的正则表达式无效",
- "The given file size is invalid" : "给定的文件大小无效",
- "The given tag id is invalid" : "给定的标签ID无效",
- "The given IP range is invalid" : "给定的IP范围无效",
- "The given IP range is not valid for IPv4" : "填写的IP范围不是有效的IPv4格式",
- "The given IP range is not valid for IPv6" : "填写的IP范围不是有效的IPv6格式",
- "The given time span is invalid" : "给定的时间范围无效",
- "The given start time is invalid" : "给定的开始时间无效",
- "The given end time is invalid" : "输入的截止时间无效",
- "The given group does not exist" : "输入的群组不存在",
- "Check %s is invalid or does not exist" : "检查%s是不可用或者不存在",
- "Operation #%s does not exist" : "操作 %s 不存在",
- "Operation %s does not exist" : "操作 %s 不存在",
- "Operation %s is invalid" : "操作 %s 无效",
- "Check %s does not exist" : "检查%s不存在",
- "Check %s is invalid" : "检查%s是不可用",
- "Check #%s does not exist" : "检查#%s是不存在",
- "Workflow" : "工作流",
- "Open documentation" : "打开文档",
- "Add rule group" : "添加规则组",
- "Short rule description" : "短规则说明",
- "Add rule" : "添加规则",
- "Reset" : "重置",
- "Save" : "保存",
- "Saving…" : "保存中...",
- "Loading…" : "加载中",
- "Successfully saved" : "保存成功",
- "File mime type" : "文件MIME类型"
+ "is not member of" : "不是成员"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/zh_HK.js b/apps/workflowengine/l10n/zh_HK.js
new file mode 100644
index 00000000000..edd352c1880
--- /dev/null
+++ b/apps/workflowengine/l10n/zh_HK.js
@@ -0,0 +1,123 @@
+OC.L10N.register(
+ "workflowengine",
+ {
+ "The given operator is invalid" : "指定的操作無效",
+ "The given regular expression is invalid" : "指定的規則表達式無效",
+ "The given file size is invalid" : "指定的檔案大小無效",
+ "The given tag id is invalid" : "指定的標籤 Id無效",
+ "The given IP range is invalid" : "指定的IP 範圍無效",
+ "The given IP range is not valid for IPv4" : "指定的IP範圍不是有效的IPv4",
+ "The given IP range is not valid for IPv6" : "指定的IP範圍不是有效的IPv6",
+ "The given time span is invalid" : "指定的時間範圍無效",
+ "The given start time is invalid" : "指定的開始時間無效",
+ "The given end time is invalid" : "指定的結束時間無效",
+ "The given group does not exist" : "指定的群組不存在",
+ "File" : "檔案",
+ "File created" : "檔案建立",
+ "File updated" : "檔案更新",
+ "File renamed" : "檔案重新命名",
+ "File deleted" : "檔案刪除",
+ "File accessed" : "檔案存取",
+ "File copied" : "檔案複製",
+ "Tag assigned" : "分派標籤",
+ "Someone" : "某人",
+ "%s created %s" : "%s 建立 %s",
+ "%s modified %s" : "%s 修改 %s",
+ "%s deleted %s" : "%s 刪除 %s",
+ "%s accessed %s" : "%s 存取 %s",
+ "%s renamed %s" : "%s 重新命名 %s",
+ "%s copied %s" : "%s 複製 %s",
+ "%s assigned %s to %s" : "%s 分派 %s 給 %s",
+ "Operation #%s does not exist" : "操作 #%s 不存在",
+ "Entity %s does not exist" : "實體 %s 不存在",
+ "Entity %s is invalid" : "實體 %s 無效",
+ "No events are chosen." : "未選擇事件。",
+ "Entity %s has no event %s" : "實體 %s 沒有事件 %s",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Operation %s is invalid" : "操作 #%s 無效",
+ "At least one check needs to be provided" : "至少需要提供一個檢查規則",
+ "The provided operation data is too long" : "指定的操作數據太長",
+ "Invalid check provided" : "提供了無效的檢查規則",
+ "Check %s does not exist" : "檢查 %s 不存在",
+ "Check %s is invalid" : "檢查 %s 無效",
+ "Check %s is not allowed with this entity" : "此實體不允許使用檢查規則 %s",
+ "The provided check value is too long" : "指定的檢查數據太長",
+ "Check #%s does not exist" : "檢查 #%s 不存在",
+ "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流程引擎",
+ "Select a filter" : "選擇過濾器",
+ "Select a comparator" : "選擇比較器",
+ "Remove filter" : "移除過濾",
+ "Folder" : "資料夾",
+ "Images" : "圖片",
+ "Office documents" : "Microsoft Office 文件",
+ "PDF documents" : "PDF 文件",
+ "Custom MIME type" : "自訂 MIME 類型",
+ "Custom mimetype" : "自訂 mimetype",
+ "Select a file type" : "選擇檔案類型",
+ "e.g. httpd/unix-directory" : "例如 httpd/unix-directory",
+ "Please enter a valid time span" : "請輸入有效的時間跨度",
+ "Files WebDAV" : "檔案 WebDAV",
+ "Custom URL" : "自訂 URL",
+ "Select a request URL" : "選擇一個請求URL",
+ "Android client" : "Android 客戶端",
+ "iOS client" : "iOS 客戶端",
+ "Desktop client" : "桌面客戶端",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook 插件",
+ "Custom user agent" : "自訂 user agent",
+ "Select a user agent" : "選擇用戶 agent",
+ "Select groups" : "選擇群組",
+ "Groups" : "群組",
+ "Type to search for group …" : "輸入以搜尋群組 …",
+ "Select a trigger" : "選擇觸發條件",
+ "At least one event must be selected" : "必須選擇至少一個活動",
+ "Add new flow" : "添加新流程",
+ "The configuration is invalid" : "配置無效",
+ "Active" : "啟動",
+ "Save" : "儲存",
+ "When" : "時間",
+ "and" : "及",
+ "Add a new filter" : "添加新過濾",
+ "Cancel" : "取消",
+ "Delete" : "刪除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "有關如何編寫自己的流程的詳細信息,請查看開發說明文件。",
+ "No flows installed" : "未安裝流程",
+ "Ask your administrator to install new flows." : "要求您的管理員安裝新流程。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "瀏覽 App Store",
+ "Show less" : "顯示較少",
+ "Show more" : "顯示更多",
+ "Configured flows" : "配置流程",
+ "Your flows" : "您的流程",
+ "No flows configured" : "未設定流程",
+ "matches" : "匹配",
+ "does not match" : "不能匹配",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "檔案名稱",
+ "File MIME type" : "檔案MIME類型",
+ "File size (upload)" : "檔案大小(上傳)",
+ "less" : "更少",
+ "less or equals" : "小於或等於",
+ "greater or equals" : "大於或等於",
+ "greater" : "更大",
+ "Request remote address" : "索取遠端地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不能匹配 IPv4",
+ "matches IPv6" : "匹配 IPv6",
+ "does not match IPv6" : "不能匹配 IPv6",
+ "File system tag" : "檔案系統標籤",
+ "is tagged with" : "標記為",
+ "is not tagged with" : "没有標記為",
+ "Request URL" : "索取網址",
+ "Request time" : "索取時間",
+ "between" : "介於",
+ "not between" : "皆非",
+ "Request user agent" : "索取 user agent",
+ "Group membership" : "群組成員身分",
+ "is member of" : "是以下群組的成員:",
+ "is not member of" : "非以下群組的成員:"
+},
+"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/zh_HK.json b/apps/workflowengine/l10n/zh_HK.json
new file mode 100644
index 00000000000..9b249cd1af4
--- /dev/null
+++ b/apps/workflowengine/l10n/zh_HK.json
@@ -0,0 +1,121 @@
+{ "translations": {
+ "The given operator is invalid" : "指定的操作無效",
+ "The given regular expression is invalid" : "指定的規則表達式無效",
+ "The given file size is invalid" : "指定的檔案大小無效",
+ "The given tag id is invalid" : "指定的標籤 Id無效",
+ "The given IP range is invalid" : "指定的IP 範圍無效",
+ "The given IP range is not valid for IPv4" : "指定的IP範圍不是有效的IPv4",
+ "The given IP range is not valid for IPv6" : "指定的IP範圍不是有效的IPv6",
+ "The given time span is invalid" : "指定的時間範圍無效",
+ "The given start time is invalid" : "指定的開始時間無效",
+ "The given end time is invalid" : "指定的結束時間無效",
+ "The given group does not exist" : "指定的群組不存在",
+ "File" : "檔案",
+ "File created" : "檔案建立",
+ "File updated" : "檔案更新",
+ "File renamed" : "檔案重新命名",
+ "File deleted" : "檔案刪除",
+ "File accessed" : "檔案存取",
+ "File copied" : "檔案複製",
+ "Tag assigned" : "分派標籤",
+ "Someone" : "某人",
+ "%s created %s" : "%s 建立 %s",
+ "%s modified %s" : "%s 修改 %s",
+ "%s deleted %s" : "%s 刪除 %s",
+ "%s accessed %s" : "%s 存取 %s",
+ "%s renamed %s" : "%s 重新命名 %s",
+ "%s copied %s" : "%s 複製 %s",
+ "%s assigned %s to %s" : "%s 分派 %s 給 %s",
+ "Operation #%s does not exist" : "操作 #%s 不存在",
+ "Entity %s does not exist" : "實體 %s 不存在",
+ "Entity %s is invalid" : "實體 %s 無效",
+ "No events are chosen." : "未選擇事件。",
+ "Entity %s has no event %s" : "實體 %s 沒有事件 %s",
+ "Operation %s does not exist" : "操作 %s 不存在",
+ "Operation %s is invalid" : "操作 #%s 無效",
+ "At least one check needs to be provided" : "至少需要提供一個檢查規則",
+ "The provided operation data is too long" : "指定的操作數據太長",
+ "Invalid check provided" : "提供了無效的檢查規則",
+ "Check %s does not exist" : "檢查 %s 不存在",
+ "Check %s is invalid" : "檢查 %s 無效",
+ "Check %s is not allowed with this entity" : "此實體不允許使用檢查規則 %s",
+ "The provided check value is too long" : "指定的檢查數據太長",
+ "Check #%s does not exist" : "檢查 #%s 不存在",
+ "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流程引擎",
+ "Select a filter" : "選擇過濾器",
+ "Select a comparator" : "選擇比較器",
+ "Remove filter" : "移除過濾",
+ "Folder" : "資料夾",
+ "Images" : "圖片",
+ "Office documents" : "Microsoft Office 文件",
+ "PDF documents" : "PDF 文件",
+ "Custom MIME type" : "自訂 MIME 類型",
+ "Custom mimetype" : "自訂 mimetype",
+ "Select a file type" : "選擇檔案類型",
+ "e.g. httpd/unix-directory" : "例如 httpd/unix-directory",
+ "Please enter a valid time span" : "請輸入有效的時間跨度",
+ "Files WebDAV" : "檔案 WebDAV",
+ "Custom URL" : "自訂 URL",
+ "Select a request URL" : "選擇一個請求URL",
+ "Android client" : "Android 客戶端",
+ "iOS client" : "iOS 客戶端",
+ "Desktop client" : "桌面客戶端",
+ "Thunderbird & Outlook addons" : "Thunderbird & Outlook 插件",
+ "Custom user agent" : "自訂 user agent",
+ "Select a user agent" : "選擇用戶 agent",
+ "Select groups" : "選擇群組",
+ "Groups" : "群組",
+ "Type to search for group …" : "輸入以搜尋群組 …",
+ "Select a trigger" : "選擇觸發條件",
+ "At least one event must be selected" : "必須選擇至少一個活動",
+ "Add new flow" : "添加新流程",
+ "The configuration is invalid" : "配置無效",
+ "Active" : "啟動",
+ "Save" : "儲存",
+ "When" : "時間",
+ "and" : "及",
+ "Add a new filter" : "添加新過濾",
+ "Cancel" : "取消",
+ "Delete" : "刪除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "有關如何編寫自己的流程的詳細信息,請查看開發說明文件。",
+ "No flows installed" : "未安裝流程",
+ "Ask your administrator to install new flows." : "要求您的管理員安裝新流程。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "瀏覽 App Store",
+ "Show less" : "顯示較少",
+ "Show more" : "顯示更多",
+ "Configured flows" : "配置流程",
+ "Your flows" : "您的流程",
+ "No flows configured" : "未設定流程",
+ "matches" : "匹配",
+ "does not match" : "不能匹配",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "檔案名稱",
+ "File MIME type" : "檔案MIME類型",
+ "File size (upload)" : "檔案大小(上傳)",
+ "less" : "更少",
+ "less or equals" : "小於或等於",
+ "greater or equals" : "大於或等於",
+ "greater" : "更大",
+ "Request remote address" : "索取遠端地址",
+ "matches IPv4" : "匹配 IPv4",
+ "does not match IPv4" : "不能匹配 IPv4",
+ "matches IPv6" : "匹配 IPv6",
+ "does not match IPv6" : "不能匹配 IPv6",
+ "File system tag" : "檔案系統標籤",
+ "is tagged with" : "標記為",
+ "is not tagged with" : "没有標記為",
+ "Request URL" : "索取網址",
+ "Request time" : "索取時間",
+ "between" : "介於",
+ "not between" : "皆非",
+ "Request user agent" : "索取 user agent",
+ "Group membership" : "群組成員身分",
+ "is member of" : "是以下群組的成員:",
+ "is not member of" : "非以下群組的成員:"
+},"pluralForm" :"nplurals=1; plural=0;"
+} \ No newline at end of file
diff --git a/apps/workflowengine/l10n/zh_TW.js b/apps/workflowengine/l10n/zh_TW.js
index 82c4f6905f1..8cbe56564d3 100644
--- a/apps/workflowengine/l10n/zh_TW.js
+++ b/apps/workflowengine/l10n/zh_TW.js
@@ -1,73 +1,123 @@
OC.L10N.register(
"workflowengine",
{
- "Saved" : "已儲存",
- "Saving failed:" : "保存失敗:",
- "File MIME type" : "檔案MIME類型",
- "is" : "是",
- "is not" : "不是",
- "matches" : "匹配",
- "does not match" : "不能匹配",
- "Example: {placeholder}" : "例子:{placeholder}",
- "File size (upload)" : "檔案大小(上傳)",
- "less" : "更少",
- "less or equals" : "小於或等於",
- "greater or equals" : "大於或等於",
- "greater" : "更大",
- "File system tag" : "檔案系統標籤",
- "is tagged with" : "標記為",
- "is not tagged with" : "没有標記為",
- "Select tag…" : "選擇標籤",
- "Request remote address" : "請求遠端地址",
- "matches IPv4" : "匹配 IPv4",
- "does not match IPv4" : "不能匹配 IPv4",
- "matches IPv6" : "匹配 IPv6",
- "does not match IPv6" : "不能匹配 IPv6",
- "Request time" : "請求時間",
- "between" : "之間",
- "not between" : "皆非",
- "Start" : "開始",
- "End" : "結束",
- "Select timezone…" : "選擇時區...",
- "Request URL" : "請求網址",
- "Predefined URLs" : "預定義網址",
- "Files WebDAV" : "檔案 WebDAV",
- "Request user agent" : "請求用戶代理",
- "Sync clients" : "同步客戶端",
- "Android client" : "Android 客戶端",
- "iOS client" : "iOS 客戶端",
- "Desktop client" : "桌面客戶端",
- "User group membership" : "使用者成員關係",
- "is member of" : "是成員來自",
- "is not member of" : "不是成員來自",
- "The given operator is invalid" : "指定的操作無效",
- "The given regular expression is invalid" : "指定的規則表達式無效",
+ "The given operator is invalid" : "指定的運算子無效",
+ "The given regular expression is invalid" : "指定的正則表達式無效",
"The given file size is invalid" : "指定的檔案大小無效",
- "The given tag id is invalid" : "指定的標籤 Id無效",
- "The given IP range is invalid" : "指定的IP 範圍無效",
- "The given IP range is not valid for IPv4" : "指定的IP範圍不是有效的IPv4",
- "The given IP range is not valid for IPv6" : "指定的IP範圍不是有效的IPv6",
+ "The given tag id is invalid" : "指定的標籤 id 無效",
+ "The given IP range is invalid" : "指定的 IP 範圍無效",
+ "The given IP range is not valid for IPv4" : "指定的 IP 範圍不是有效的 IPv4",
+ "The given IP range is not valid for IPv6" : "指定的 IP 範圍不是有效的 IPv6",
"The given time span is invalid" : "指定的時間範圍無效",
"The given start time is invalid" : "指定的開始時間無效",
"The given end time is invalid" : "指定的結束時間無效",
"The given group does not exist" : "指定的群組不存在",
- "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "File" : "檔案",
+ "File created" : "檔案建立",
+ "File updated" : "檔案更新",
+ "File renamed" : "檔案重新命名",
+ "File deleted" : "檔案刪除",
+ "File accessed" : "檔案存取",
+ "File copied" : "檔案複製",
+ "Tag assigned" : "標籤指派",
+ "Someone" : "某人",
+ "%s created %s" : "%s 建立了 %s",
+ "%s modified %s" : "%s 修改了 %s",
+ "%s deleted %s" : "%s 刪除了 %s",
+ "%s accessed %s" : "%s 存取了 %s",
+ "%s renamed %s" : "%s 重新命名了 %s",
+ "%s copied %s" : "%s 複製了 %s",
+ "%s assigned %s to %s" : "%s 指派了 %s 給 %s",
"Operation #%s does not exist" : "操作 #%s 不存在",
+ "Entity %s does not exist" : "實體 %s 不存在",
+ "Entity %s is invalid" : "實體 %s 無效",
+ "No events are chosen." : "未選擇事件。",
+ "Entity %s has no event %s" : "實體 %s 沒有事件 %s",
"Operation %s does not exist" : "操作 %s 不存在",
"Operation %s is invalid" : "操作 #%s 無效",
+ "At least one check needs to be provided" : "至少需要提供一次檢查",
+ "The provided operation data is too long" : "提供的操作資料過長",
+ "Invalid check provided" : "提供無效的檢查",
"Check %s does not exist" : "檢查 %s 不存在",
"Check %s is invalid" : "檢查 %s 無效",
+ "Check %s is not allowed with this entity" : "不允許對此實體進行檢查 %s",
+ "The provided check value is too long" : "提供的檢查值過長",
"Check #%s does not exist" : "檢查 #%s 不存在",
- "Workflow" : "工作流程",
- "Open documentation" : "開啟說明文件",
- "Add rule group" : "新增群組規則",
- "Short rule description" : "簡短規則描述",
- "Add rule" : "添加規則",
- "Reset" : "重設",
+ "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流程引擎",
+ "Select a filter" : "選取過濾條件",
+ "Select a comparator" : "選取比較程式",
+ "Remove filter" : "移除過濾條件",
+ "Folder" : "資料夾",
+ "Images" : "圖片",
+ "Office documents" : "Office 文件",
+ "PDF documents" : "PDF 文件",
+ "Custom MIME type" : "自訂 MIME 類型",
+ "Custom mimetype" : "自訂 mimetype",
+ "Select a file type" : "選取檔案類型",
+ "e.g. httpd/unix-directory" : "例如:httpd/unix-directory",
+ "Please enter a valid time span" : "請輸入有效的時間範圍",
+ "Files WebDAV" : "檔案 WebDAV",
+ "Custom URL" : "自訂 URL",
+ "Select a request URL" : "選取請求 URL",
+ "Android client" : "Android 客戶端",
+ "iOS client" : "iOS 客戶端",
+ "Desktop client" : "桌面客戶端",
+ "Thunderbird & Outlook addons" : "Thunderbird 與 Outlook 附加元件",
+ "Custom user agent" : "自訂使用者代理字串",
+ "Select a user agent" : "選取使用者代理字串",
+ "Select groups" : "選擇群組",
+ "Groups" : "群組",
+ "Type to search for group …" : "輸入以搜尋群組……",
+ "Select a trigger" : "選取觸發條件",
+ "At least one event must be selected" : "必須至少選取一個事件",
+ "Add new flow" : "新增新流程",
+ "The configuration is invalid" : "組態設定無效",
+ "Active" : "啟動",
"Save" : "儲存",
- "Saving…" : "儲存中...",
- "Loading…" : "載入中…",
- "Successfully saved" : "成功保存",
- "File mime type" : "檔案mime類型"
+ "When" : "當",
+ "and" : "與",
+ "Add a new filter" : "新增過濾條件",
+ "Cancel" : "取消",
+ "Delete" : "刪除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "關於如何編寫自己的流程,請看開發文件。",
+ "No flows installed" : "未安裝流程",
+ "Ask your administrator to install new flows." : "請向您的管理員要求安裝新流程。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "瀏覽應用程式商店",
+ "Show less" : "顯示較少",
+ "Show more" : "顯示更多",
+ "Configured flows" : "已設定的流程",
+ "Your flows" : "您的流程",
+ "No flows configured" : "未設定流程",
+ "matches" : "符合",
+ "does not match" : "不符合",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "檔案名稱",
+ "File MIME type" : "檔案 MIME 類型",
+ "File size (upload)" : "檔案大小(上傳)",
+ "less" : "小於",
+ "less or equals" : "小於或等於",
+ "greater or equals" : "大於或等於",
+ "greater" : "大於",
+ "Request remote address" : "請求遠端地址",
+ "matches IPv4" : "符合 IPv4",
+ "does not match IPv4" : "不符合 IPv4",
+ "matches IPv6" : "符合 IPv6",
+ "does not match IPv6" : "不符合 IPv6",
+ "File system tag" : "檔案系統標籤",
+ "is tagged with" : "標記為",
+ "is not tagged with" : "没有標記為",
+ "Request URL" : "請求 URL",
+ "Request time" : "請求時間",
+ "between" : "介於",
+ "not between" : "不介於",
+ "Request user agent" : "請求使用者代理字串",
+ "Group membership" : "群組成員資格",
+ "is member of" : "是成員的群組",
+ "is not member of" : "不是成員的群組"
},
"nplurals=1; plural=0;");
diff --git a/apps/workflowengine/l10n/zh_TW.json b/apps/workflowengine/l10n/zh_TW.json
index 0b561b98d28..0bc8fdf63a6 100644
--- a/apps/workflowengine/l10n/zh_TW.json
+++ b/apps/workflowengine/l10n/zh_TW.json
@@ -1,71 +1,121 @@
{ "translations": {
- "Saved" : "已儲存",
- "Saving failed:" : "保存失敗:",
- "File MIME type" : "檔案MIME類型",
- "is" : "是",
- "is not" : "不是",
- "matches" : "匹配",
- "does not match" : "不能匹配",
- "Example: {placeholder}" : "例子:{placeholder}",
- "File size (upload)" : "檔案大小(上傳)",
- "less" : "更少",
- "less or equals" : "小於或等於",
- "greater or equals" : "大於或等於",
- "greater" : "更大",
- "File system tag" : "檔案系統標籤",
- "is tagged with" : "標記為",
- "is not tagged with" : "没有標記為",
- "Select tag…" : "選擇標籤",
- "Request remote address" : "請求遠端地址",
- "matches IPv4" : "匹配 IPv4",
- "does not match IPv4" : "不能匹配 IPv4",
- "matches IPv6" : "匹配 IPv6",
- "does not match IPv6" : "不能匹配 IPv6",
- "Request time" : "請求時間",
- "between" : "之間",
- "not between" : "皆非",
- "Start" : "開始",
- "End" : "結束",
- "Select timezone…" : "選擇時區...",
- "Request URL" : "請求網址",
- "Predefined URLs" : "預定義網址",
- "Files WebDAV" : "檔案 WebDAV",
- "Request user agent" : "請求用戶代理",
- "Sync clients" : "同步客戶端",
- "Android client" : "Android 客戶端",
- "iOS client" : "iOS 客戶端",
- "Desktop client" : "桌面客戶端",
- "User group membership" : "使用者成員關係",
- "is member of" : "是成員來自",
- "is not member of" : "不是成員來自",
- "The given operator is invalid" : "指定的操作無效",
- "The given regular expression is invalid" : "指定的規則表達式無效",
+ "The given operator is invalid" : "指定的運算子無效",
+ "The given regular expression is invalid" : "指定的正則表達式無效",
"The given file size is invalid" : "指定的檔案大小無效",
- "The given tag id is invalid" : "指定的標籤 Id無效",
- "The given IP range is invalid" : "指定的IP 範圍無效",
- "The given IP range is not valid for IPv4" : "指定的IP範圍不是有效的IPv4",
- "The given IP range is not valid for IPv6" : "指定的IP範圍不是有效的IPv6",
+ "The given tag id is invalid" : "指定的標籤 id 無效",
+ "The given IP range is invalid" : "指定的 IP 範圍無效",
+ "The given IP range is not valid for IPv4" : "指定的 IP 範圍不是有效的 IPv4",
+ "The given IP range is not valid for IPv6" : "指定的 IP 範圍不是有效的 IPv6",
"The given time span is invalid" : "指定的時間範圍無效",
"The given start time is invalid" : "指定的開始時間無效",
"The given end time is invalid" : "指定的結束時間無效",
"The given group does not exist" : "指定的群組不存在",
- "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "File" : "檔案",
+ "File created" : "檔案建立",
+ "File updated" : "檔案更新",
+ "File renamed" : "檔案重新命名",
+ "File deleted" : "檔案刪除",
+ "File accessed" : "檔案存取",
+ "File copied" : "檔案複製",
+ "Tag assigned" : "標籤指派",
+ "Someone" : "某人",
+ "%s created %s" : "%s 建立了 %s",
+ "%s modified %s" : "%s 修改了 %s",
+ "%s deleted %s" : "%s 刪除了 %s",
+ "%s accessed %s" : "%s 存取了 %s",
+ "%s renamed %s" : "%s 重新命名了 %s",
+ "%s copied %s" : "%s 複製了 %s",
+ "%s assigned %s to %s" : "%s 指派了 %s 給 %s",
"Operation #%s does not exist" : "操作 #%s 不存在",
+ "Entity %s does not exist" : "實體 %s 不存在",
+ "Entity %s is invalid" : "實體 %s 無效",
+ "No events are chosen." : "未選擇事件。",
+ "Entity %s has no event %s" : "實體 %s 沒有事件 %s",
"Operation %s does not exist" : "操作 %s 不存在",
"Operation %s is invalid" : "操作 #%s 無效",
+ "At least one check needs to be provided" : "至少需要提供一次檢查",
+ "The provided operation data is too long" : "提供的操作資料過長",
+ "Invalid check provided" : "提供無效的檢查",
"Check %s does not exist" : "檢查 %s 不存在",
"Check %s is invalid" : "檢查 %s 無效",
+ "Check %s is not allowed with this entity" : "不允許對此實體進行檢查 %s",
+ "The provided check value is too long" : "提供的檢查值過長",
"Check #%s does not exist" : "檢查 #%s 不存在",
- "Workflow" : "工作流程",
- "Open documentation" : "開啟說明文件",
- "Add rule group" : "新增群組規則",
- "Short rule description" : "簡短規則描述",
- "Add rule" : "添加規則",
- "Reset" : "重設",
+ "Check %s is invalid or does not exist" : "檢查 %s 無效或不存在",
+ "Flow" : "流程",
+ "Nextcloud workflow engine" : "Nextcloud 工作流程引擎",
+ "Select a filter" : "選取過濾條件",
+ "Select a comparator" : "選取比較程式",
+ "Remove filter" : "移除過濾條件",
+ "Folder" : "資料夾",
+ "Images" : "圖片",
+ "Office documents" : "Office 文件",
+ "PDF documents" : "PDF 文件",
+ "Custom MIME type" : "自訂 MIME 類型",
+ "Custom mimetype" : "自訂 mimetype",
+ "Select a file type" : "選取檔案類型",
+ "e.g. httpd/unix-directory" : "例如:httpd/unix-directory",
+ "Please enter a valid time span" : "請輸入有效的時間範圍",
+ "Files WebDAV" : "檔案 WebDAV",
+ "Custom URL" : "自訂 URL",
+ "Select a request URL" : "選取請求 URL",
+ "Android client" : "Android 客戶端",
+ "iOS client" : "iOS 客戶端",
+ "Desktop client" : "桌面客戶端",
+ "Thunderbird & Outlook addons" : "Thunderbird 與 Outlook 附加元件",
+ "Custom user agent" : "自訂使用者代理字串",
+ "Select a user agent" : "選取使用者代理字串",
+ "Select groups" : "選擇群組",
+ "Groups" : "群組",
+ "Type to search for group …" : "輸入以搜尋群組……",
+ "Select a trigger" : "選取觸發條件",
+ "At least one event must be selected" : "必須至少選取一個事件",
+ "Add new flow" : "新增新流程",
+ "The configuration is invalid" : "組態設定無效",
+ "Active" : "啟動",
"Save" : "儲存",
- "Saving…" : "儲存中...",
- "Loading…" : "載入中…",
- "Successfully saved" : "成功保存",
- "File mime type" : "檔案mime類型"
+ "When" : "當",
+ "and" : "與",
+ "Add a new filter" : "新增過濾條件",
+ "Cancel" : "取消",
+ "Delete" : "刪除",
+ "Available flows" : "可用的流程",
+ "For details on how to write your own flow, check out the development documentation." : "關於如何編寫自己的流程,請看開發文件。",
+ "No flows installed" : "未安裝流程",
+ "Ask your administrator to install new flows." : "請向您的管理員要求安裝新流程。",
+ "More flows" : "更多流程",
+ "Browse the App Store" : "瀏覽應用程式商店",
+ "Show less" : "顯示較少",
+ "Show more" : "顯示更多",
+ "Configured flows" : "已設定的流程",
+ "Your flows" : "您的流程",
+ "No flows configured" : "未設定流程",
+ "matches" : "符合",
+ "does not match" : "不符合",
+ "is" : "是",
+ "is not" : "不是",
+ "File name" : "檔案名稱",
+ "File MIME type" : "檔案 MIME 類型",
+ "File size (upload)" : "檔案大小(上傳)",
+ "less" : "小於",
+ "less or equals" : "小於或等於",
+ "greater or equals" : "大於或等於",
+ "greater" : "大於",
+ "Request remote address" : "請求遠端地址",
+ "matches IPv4" : "符合 IPv4",
+ "does not match IPv4" : "不符合 IPv4",
+ "matches IPv6" : "符合 IPv6",
+ "does not match IPv6" : "不符合 IPv6",
+ "File system tag" : "檔案系統標籤",
+ "is tagged with" : "標記為",
+ "is not tagged with" : "没有標記為",
+ "Request URL" : "請求 URL",
+ "Request time" : "請求時間",
+ "between" : "介於",
+ "not between" : "不介於",
+ "Request user agent" : "請求使用者代理字串",
+ "Group membership" : "群組成員資格",
+ "is member of" : "是成員的群組",
+ "is not member of" : "不是成員的群組"
},"pluralForm" :"nplurals=1; plural=0;"
} \ No newline at end of file
diff --git a/apps/workflowengine/lib/AppInfo/Application.php b/apps/workflowengine/lib/AppInfo/Application.php
index 28e32092419..93b0ca49260 100644
--- a/apps/workflowengine/lib/AppInfo/Application.php
+++ b/apps/workflowengine/lib/AppInfo/Application.php
@@ -1,78 +1,105 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\AppInfo;
-class Application extends \OCP\AppFramework\App {
+use Closure;
+use OCA\WorkflowEngine\Helper\LogContext;
+use OCA\WorkflowEngine\Listener\LoadAdditionalSettingsScriptsListener;
+use OCA\WorkflowEngine\Manager;
+use OCA\WorkflowEngine\Service\Logger;
+use OCP\AppFramework\App;
+use OCP\AppFramework\Bootstrap\IBootContext;
+use OCP\AppFramework\Bootstrap\IBootstrap;
+use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\WorkflowEngine\Events\LoadSettingsScriptsEvent;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IOperation;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\ContainerInterface;
+use Psr\Log\LoggerInterface;
+
+class Application extends App implements IBootstrap {
+ public const APP_ID = 'workflowengine';
public function __construct() {
- parent::__construct('workflowengine');
+ parent::__construct(self::APP_ID);
+ }
+
+ public function register(IRegistrationContext $context): void {
+ $context->registerEventListener(
+ LoadSettingsScriptsEvent::class,
+ LoadAdditionalSettingsScriptsListener::class,
+ -100
+ );
+ }
- $this->getContainer()->registerAlias('FlowOperationsController', 'OCA\WorkflowEngine\Controller\FlowOperations');
- $this->getContainer()->registerAlias('RequestTimeController', 'OCA\WorkflowEngine\Controller\RequestTime');
+ public function boot(IBootContext $context): void {
+ $context->injectFn(Closure::fromCallable([$this, 'registerRuleListeners']));
}
- /**
- * Register all hooks and listeners
- */
- public function registerHooksAndListeners() {
- $dispatcher = $this->getContainer()->getServer()->getEventDispatcher();
- $dispatcher->addListener(
- 'OCP\WorkflowEngine::loadAdditionalSettingScripts',
- function() {
- if (!function_exists('style')) {
- // This is hacky, but we need to load the template class
- class_exists('OCP\Template', true);
- }
+ private function registerRuleListeners(IEventDispatcher $dispatcher,
+ ContainerInterface $container,
+ LoggerInterface $logger): void {
+ /** @var Manager $manager */
+ $manager = $container->get(Manager::class);
+ $configuredEvents = $manager->getAllConfiguredEvents();
- style('workflowengine', [
- 'admin',
- ]);
+ foreach ($configuredEvents as $operationClass => $events) {
+ foreach ($events as $entityClass => $eventNames) {
+ array_map(function (string $eventName) use ($manager, $container, $dispatcher, $logger, $operationClass, $entityClass): void {
+ $dispatcher->addListener(
+ $eventName,
+ function ($event) use ($manager, $container, $eventName, $logger, $operationClass, $entityClass): void {
+ $ruleMatcher = $manager->getRuleMatcher();
+ try {
+ /** @var IEntity $entity */
+ $entity = $container->get($entityClass);
+ /** @var IOperation $operation */
+ $operation = $container->get($operationClass);
- script('core', [
- 'files/fileinfo',
- 'files/client',
- 'oc-backbone-webdav',
- 'systemtags/systemtags',
- 'systemtags/systemtagmodel',
- 'systemtags/systemtagscollection',
- ]);
+ $ruleMatcher->setEventName($eventName);
+ $ruleMatcher->setEntity($entity);
+ $ruleMatcher->setOperation($operation);
- vendor_script('jsTimezoneDetect/jstz');
+ $ctx = new LogContext();
+ $ctx
+ ->setOperation($operation)
+ ->setEntity($entity)
+ ->setEventName($eventName);
- script('workflowengine', [
- 'admin',
+ /** @var Logger $flowLogger */
+ $flowLogger = $container->get(Logger::class);
+ $flowLogger->logEventInit($ctx);
- // Check plugins
- 'filemimetypeplugin',
- 'filesizeplugin',
- 'filesystemtagsplugin',
- 'requestremoteaddressplugin',
- 'requesttimeplugin',
- 'requesturlplugin',
- 'requestuseragentplugin',
- 'usergroupmembershipplugin',
- ]);
- },
- -100
- );
+ if ($event instanceof Event) {
+ $entity->prepareRuleMatcher($ruleMatcher, $eventName, $event);
+ $operation->onEvent($eventName, $event, $ruleMatcher);
+ } else {
+ $logger->debug(
+ 'Cannot handle event {name} of {event} against entity {entity} and operation {operation}',
+ [
+ 'app' => self::APP_ID,
+ 'name' => $eventName,
+ 'event' => get_class($event),
+ 'entity' => $entityClass,
+ 'operation' => $operationClass,
+ ]
+ );
+ }
+ $flowLogger->logEventDone($ctx);
+ } catch (ContainerExceptionInterface $e) {
+ // Ignore query exceptions since they might occur when an entity/operation were set up before by an app that is disabled now
+ }
+ }
+ );
+ }, $eventNames ?? []);
+ }
+ }
}
}
diff --git a/apps/workflowengine/lib/BackgroundJobs/Rotate.php b/apps/workflowengine/lib/BackgroundJobs/Rotate.php
new file mode 100644
index 00000000000..d7984b1226a
--- /dev/null
+++ b/apps/workflowengine/lib/BackgroundJobs/Rotate.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\BackgroundJobs;
+
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCP\AppFramework\Utility\ITimeFactory;
+use OCP\BackgroundJob\TimedJob;
+use OCP\IConfig;
+use OCP\Log\RotationTrait;
+use OCP\Server;
+
+class Rotate extends TimedJob {
+ use RotationTrait;
+
+ public function __construct(ITimeFactory $time) {
+ parent::__construct($time);
+ $this->setInterval(60 * 60 * 3);
+ }
+
+ protected function run($argument) {
+ $config = Server::get(IConfig::class);
+ $default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/flow.log';
+ $this->filePath = trim((string)$config->getAppValue(Application::APP_ID, 'logfile', $default));
+
+ if ($this->filePath === '') {
+ // disabled, nothing to do
+ return;
+ }
+
+ $this->maxSize = $config->getSystemValue('log_rotate_size', 100 * 1024 * 1024);
+
+ if ($this->shouldRotateBySize()) {
+ $this->rotate();
+ }
+ }
+}
diff --git a/apps/workflowengine/lib/Check/AbstractStringCheck.php b/apps/workflowengine/lib/Check/AbstractStringCheck.php
index 0fd728e3496..d92e9901365 100644
--- a/apps/workflowengine/lib/Check/AbstractStringCheck.php
+++ b/apps/workflowengine/lib/Check/AbstractStringCheck.php
@@ -1,52 +1,26 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
-use OCP\Files\Storage\IStorage;
use OCP\IL10N;
use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IManager;
abstract class AbstractStringCheck implements ICheck {
/** @var array[] Nested array: [Pattern => [ActualValue => Regex Result]] */
protected $matches;
- /** @var IL10N */
- protected $l;
-
/**
* @param IL10N $l
*/
- public function __construct(IL10N $l) {
- $this->l = $l;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
- // Nothing changes here with a different path
+ public function __construct(
+ protected IL10N $l,
+ ) {
}
/**
@@ -59,7 +33,7 @@ abstract class AbstractStringCheck implements ICheck {
* @param string $value
* @return bool
*/
- public function executeCheck($operator, $value) {
+ public function executeCheck($operator, $value) {
$actualValue = $this->getActualValue();
return $this->executeStringCheck($operator, $value, $actualValue);
}
@@ -73,7 +47,7 @@ abstract class AbstractStringCheck implements ICheck {
protected function executeStringCheck($operator, $checkValue, $actualValue) {
if ($operator === 'is') {
return $checkValue === $actualValue;
- } else if ($operator === '!is') {
+ } elseif ($operator === '!is') {
return $checkValue !== $actualValue;
} else {
$match = $this->match($checkValue, $actualValue);
@@ -95,12 +69,22 @@ abstract class AbstractStringCheck implements ICheck {
throw new \UnexpectedValueException($this->l->t('The given operator is invalid'), 1);
}
- if (in_array($operator, ['matches', '!matches']) &&
- @preg_match($value, null) === false) {
+ if (in_array($operator, ['matches', '!matches'])
+ && @preg_match($value, null) === false) {
throw new \UnexpectedValueException($this->l->t('The given regular expression is invalid'), 2);
}
}
+ public function supportedEntities(): array {
+ // universal by default
+ return [];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ // admin only by default
+ return $scope === IManager::SCOPE_ADMIN;
+ }
+
/**
* @param string $pattern
* @param string $subject
diff --git a/apps/workflowengine/lib/Check/FileMimeType.php b/apps/workflowengine/lib/Check/FileMimeType.php
index fe4a83bb906..a8dfa64528e 100644
--- a/apps/workflowengine/lib/Check/FileMimeType.php
+++ b/apps/workflowengine/lib/Check/FileMimeType.php
@@ -1,166 +1,124 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
+use OC\Files\Storage\Local;
+use OCA\WorkflowEngine\Entity\File;
use OCP\Files\IMimeTypeDetector;
use OCP\Files\Storage\IStorage;
use OCP\IL10N;
use OCP\IRequest;
+use OCP\WorkflowEngine\IFileCheck;
-class FileMimeType extends AbstractStringCheck {
+class FileMimeType extends AbstractStringCheck implements IFileCheck {
+ use TFileCheck {
+ setFileInfo as _setFileInfo;
+ }
/** @var array */
protected $mimeType;
- /** @var IRequest */
- protected $request;
-
- /** @var IMimeTypeDetector */
- protected $mimeTypeDetector;
-
- /** @var IStorage */
- protected $storage;
-
- /** @var string */
- protected $path;
-
/**
* @param IL10N $l
* @param IRequest $request
* @param IMimeTypeDetector $mimeTypeDetector
*/
- public function __construct(IL10N $l, IRequest $request, IMimeTypeDetector $mimeTypeDetector) {
+ public function __construct(
+ IL10N $l,
+ protected IRequest $request,
+ protected IMimeTypeDetector $mimeTypeDetector,
+ ) {
parent::__construct($l);
- $this->request = $request;
- $this->mimeTypeDetector = $mimeTypeDetector;
}
/**
* @param IStorage $storage
* @param string $path
+ * @param bool $isDir
*/
- public function setFileInfo(IStorage $storage, $path) {
- $this->storage = $storage;
- $this->path = $path;
+ public function setFileInfo(IStorage $storage, string $path, bool $isDir = false): void {
+ $this->_setFileInfo($storage, $path, $isDir);
if (!isset($this->mimeType[$this->storage->getId()][$this->path])
|| $this->mimeType[$this->storage->getId()][$this->path] === '') {
- $this->mimeType[$this->storage->getId()][$this->path] = null;
+ if ($isDir) {
+ $this->mimeType[$this->storage->getId()][$this->path] = 'httpd/unix-directory';
+ } else {
+ $this->mimeType[$this->storage->getId()][$this->path] = null;
+ }
}
}
/**
+ * The mimetype is only cached if the file has a valid mimetype. Otherwise files access
+ * control will cache "application/octet-stream" for all the target node on:
+ * rename, move, copy and all other methods which create a new item
+ *
+ * To check this:
+ * 1. Add an automated tagging rule which tags on mimetype NOT "httpd/unix-directory"
+ * 2. Add an access control rule which checks for any mimetype
+ * 3. Create a folder and rename it, the folder should not be tagged, but it is
+ *
+ * @param string $storageId
+ * @param string|null $path
+ * @param string $mimeType
* @return string
*/
- protected function getActualValue() {
- if ($this->mimeType[$this->storage->getId()][$this->path] !== null) {
- return $this->mimeType[$this->storage->getId()][$this->path];
- }
-
- if ($this->isWebDAVRequest()) {
- // Creating a folder
- if ($this->request->getMethod() === 'MKCOL') {
- $this->mimeType[$this->storage->getId()][$this->path] = 'httpd/unix-directory';
- return $this->mimeType[$this->storage->getId()][$this->path];
- }
-
- if ($this->request->getMethod() === 'PUT') {
- $path = $this->request->getPathInfo();
- $this->mimeType[$this->storage->getId()][$this->path] = $this->mimeTypeDetector->detectPath($path);
- return $this->mimeType[$this->storage->getId()][$this->path];
- }
- } else if ($this->isPublicWebDAVRequest()) {
- if ($this->request->getMethod() === 'PUT') {
- $path = $this->request->getPathInfo();
- if (strpos($path, '/webdav/') === 0) {
- $path = substr($path, strlen('/webdav'));
- }
- $path = $this->path . $path;
- $this->mimeType[$this->storage->getId()][$path] = $this->mimeTypeDetector->detectPath($path);
- return $this->mimeType[$this->storage->getId()][$path];
- }
+ protected function cacheAndReturnMimeType(string $storageId, ?string $path, string $mimeType): string {
+ if ($path !== null && $mimeType !== 'application/octet-stream') {
+ $this->mimeType[$storageId][$path] = $mimeType;
}
- if (in_array($this->request->getMethod(), ['POST', 'PUT'])) {
- $files = $this->request->getUploadedFile('files');
- if (isset($files['type'][0])) {
- $mimeType = $files['type'][0];
- if ($this->mimeType === 'application/octet-stream') {
- // Maybe not...
- $mimeTypeTest = $this->mimeTypeDetector->detectPath($files['name'][0]);
- if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
- $mimeType = $mimeTypeTest;
- } else {
- $mimeTypeTest = $this->mimeTypeDetector->detect($files['tmp_name'][0]);
- if ($mimeTypeTest !== 'application/octet-stream' && $mimeTypeTest !== false) {
- $mimeType = $mimeTypeTest;
- }
- }
- }
- $this->mimeType[$this->storage->getId()][$this->path] = $mimeType;
- return $mimeType;
- }
- }
-
- $this->mimeType[$this->storage->getId()][$this->path] = $this->storage->getMimeType($this->path);
- if ($this->mimeType[$this->storage->getId()][$this->path] === 'application/octet-stream') {
- $this->mimeType[$this->storage->getId()][$this->path] = $this->detectMimetypeFromPath();
- }
+ return $mimeType;
+ }
- return $this->mimeType[$this->storage->getId()][$this->path];
+ /**
+ * Make sure that even though the content based check returns an application/octet-stream can still be checked based on mimetypemappings of their extension
+ *
+ * @param string $operator
+ * @param string $value
+ * @return bool
+ */
+ public function executeCheck($operator, $value) {
+ return $this->executeStringCheck($operator, $value, $this->getActualValue());
}
/**
* @return string
*/
- protected function detectMimetypeFromPath() {
- $mimeType = $this->mimeTypeDetector->detectPath($this->path);
- if ($mimeType !== 'application/octet-stream' && $mimeType !== false) {
- return $mimeType;
+ protected function getActualValue() {
+ if ($this->mimeType[$this->storage->getId()][$this->path] !== null) {
+ return $this->mimeType[$this->storage->getId()][$this->path];
+ }
+ $cacheEntry = $this->storage->getCache()->get($this->path);
+ if ($cacheEntry && $cacheEntry->getMimeType() !== 'application/octet-stream') {
+ return $this->cacheAndReturnMimeType($this->storage->getId(), $this->path, $cacheEntry->getMimeType());
}
- if ($this->storage->instanceOfStorage('\OC\Files\Storage\Local')
- || $this->storage->instanceOfStorage('\OC\Files\Storage\Home')
- || $this->storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')) {
- $localFile = $this->storage->getLocalFile($this->path);
- if ($localFile !== false) {
- $mimeType = $this->mimeTypeDetector->detect($localFile);
- if ($mimeType !== false) {
- return $mimeType;
- }
- }
+ if ($this->storage->file_exists($this->path)
+ && $this->storage->filesize($this->path)
+ && $this->storage->instanceOfStorage(Local::class)
+ ) {
+ $path = $this->storage->getLocalFile($this->path);
+ $mimeType = $this->mimeTypeDetector->detectContent($path);
+ return $this->cacheAndReturnMimeType($this->storage->getId(), $this->path, $mimeType);
+ }
- return 'application/octet-stream';
- } else {
- $handle = $this->storage->fopen($this->path, 'r');
- $data = fread($handle, 8024);
- fclose($handle);
- $mimeType = $this->mimeTypeDetector->detectString($data);
- if ($mimeType !== false) {
- return $mimeType;
+ if ($this->isWebDAVRequest() || $this->isPublicWebDAVRequest()) {
+ // Creating a folder
+ if ($this->request->getMethod() === 'MKCOL') {
+ return 'httpd/unix-directory';
}
-
- return 'application/octet-stream';
}
+
+ // We do not cache this, as the file did not exist yet.
+ // In case it does in the future, we will check with detectContent()
+ // again to get the real mimetype of the content, rather than
+ // guessing it from the path.
+ return $this->mimeTypeDetector->detectPath($this->path);
}
/**
@@ -168,10 +126,12 @@ class FileMimeType extends AbstractStringCheck {
*/
protected function isWebDAVRequest() {
return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && (
- $this->request->getPathInfo() === '/webdav' ||
- strpos($this->request->getPathInfo(), '/webdav/') === 0 ||
- $this->request->getPathInfo() === '/dav/files' ||
- strpos($this->request->getPathInfo(), '/dav/files/') === 0
+ $this->request->getPathInfo() === '/webdav'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/')
+ || $this->request->getPathInfo() === '/dav/files'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/')
+ || $this->request->getPathInfo() === '/dav/uploads'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/dav/uploads/')
);
}
@@ -180,8 +140,16 @@ class FileMimeType extends AbstractStringCheck {
*/
protected function isPublicWebDAVRequest() {
return substr($this->request->getScriptName(), 0 - strlen('/public.php')) === '/public.php' && (
- $this->request->getPathInfo() === '/webdav' ||
- strpos($this->request->getPathInfo(), '/webdav/') === 0
+ $this->request->getPathInfo() === '/webdav'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/')
);
}
+
+ public function supportedEntities(): array {
+ return [ File::class ];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
}
diff --git a/apps/workflowengine/lib/Check/FileName.php b/apps/workflowengine/lib/Check/FileName.php
new file mode 100644
index 00000000000..4a9d503018f
--- /dev/null
+++ b/apps/workflowengine/lib/Check/FileName.php
@@ -0,0 +1,75 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Check;
+
+use OC\Files\Storage\Local;
+use OCA\WorkflowEngine\Entity\File;
+use OCP\Files\Mount\IMountManager;
+use OCP\IL10N;
+use OCP\IRequest;
+use OCP\WorkflowEngine\IFileCheck;
+
+class FileName extends AbstractStringCheck implements IFileCheck {
+ use TFileCheck;
+
+ /**
+ * @param IL10N $l
+ * @param IRequest $request
+ */
+ public function __construct(
+ IL10N $l,
+ protected IRequest $request,
+ private IMountManager $mountManager,
+ ) {
+ parent::__construct($l);
+ }
+
+ /**
+ * @return string
+ */
+ protected function getActualValue(): string {
+ $fileName = $this->path === null ? '' : basename($this->path);
+ if ($fileName === '' && (!$this->storage->isLocal() || $this->storage->instanceOfStorage(Local::class))) {
+ // Return the mountpoint name of external storage that are not mounted as user home
+ $mountPoints = $this->mountManager->findByStorageId($this->storage->getId());
+ if (empty($mountPoints) || $mountPoints[0]->getMountType() !== 'external') {
+ return $fileName;
+ }
+ $mountPointPath = rtrim($mountPoints[0]->getMountPoint(), '/');
+ $mountPointPieces = explode('/', $mountPointPath);
+ $mountPointName = array_pop($mountPointPieces);
+ if (!empty($mountPointName) && $mountPointName !== 'files' && count($mountPointPieces) !== 2) {
+ return $mountPointName;
+ }
+ }
+ return $fileName;
+ }
+
+ /**
+ * @param string $operator
+ * @param string $checkValue
+ * @param string $actualValue
+ * @return bool
+ */
+ protected function executeStringCheck($operator, $checkValue, $actualValue): bool {
+ if ($operator === 'is' || $operator === '!is') {
+ $checkValue = mb_strtolower($checkValue);
+ $actualValue = mb_strtolower($actualValue);
+ }
+ return parent::executeStringCheck($operator, $checkValue, $actualValue);
+ }
+
+ public function supportedEntities(): array {
+ return [ File::class ];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
+}
diff --git a/apps/workflowengine/lib/Check/FileSize.php b/apps/workflowengine/lib/Check/FileSize.php
index 7e48f0f6038..5ee03ccc9cf 100644
--- a/apps/workflowengine/lib/Check/FileSize.php
+++ b/apps/workflowengine/lib/Check/FileSize.php
@@ -1,28 +1,12 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
-use OCP\Files\Storage\IStorage;
+use OCA\WorkflowEngine\Entity\File;
use OCP\IL10N;
use OCP\IRequest;
use OCP\Util;
@@ -33,26 +17,14 @@ class FileSize implements ICheck {
/** @var int */
protected $size;
- /** @var IL10N */
- protected $l;
-
- /** @var IRequest */
- protected $request;
-
/**
* @param IL10N $l
* @param IRequest $request
*/
- public function __construct(IL10N $l, IRequest $request) {
- $this->l = $l;
- $this->request = $request;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
+ public function __construct(
+ protected IL10N $l,
+ protected IRequest $request,
+ ) {
}
/**
@@ -116,4 +88,12 @@ class FileSize implements ICheck {
$this->size = $size;
return $this->size;
}
+
+ public function supportedEntities(): array {
+ return [ File::class ];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
}
diff --git a/apps/workflowengine/lib/Check/FileSystemTags.php b/apps/workflowengine/lib/Check/FileSystemTags.php
index 4a2b87fd53e..811571f558a 100644
--- a/apps/workflowengine/lib/Check/FileSystemTags.php
+++ b/apps/workflowengine/lib/Check/FileSystemTags.php
@@ -1,37 +1,28 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
+use OC\Files\Storage\Wrapper\Jail;
+use OCA\Files_Sharing\SharedStorage;
+use OCA\WorkflowEngine\Entity\File;
use OCP\Files\Cache\ICache;
use OCP\Files\IHomeStorage;
-use OCP\Files\Storage\IStorage;
+use OCP\IGroupManager;
use OCP\IL10N;
+use OCP\IUser;
+use OCP\IUserSession;
use OCP\SystemTag\ISystemTagManager;
use OCP\SystemTag\ISystemTagObjectMapper;
use OCP\SystemTag\TagNotFoundException;
use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IFileCheck;
-class FileSystemTags implements ICheck {
+class FileSystemTags implements ICheck, IFileCheck {
+ use TFileCheck;
/** @var array */
protected $fileIds;
@@ -39,39 +30,13 @@ class FileSystemTags implements ICheck {
/** @var array */
protected $fileSystemTags;
- /** @var IL10N */
- protected $l;
-
- /** @var ISystemTagManager */
- protected $systemTagManager;
-
- /** @var ISystemTagObjectMapper */
- protected $systemTagObjectMapper;
-
- /** @var IStorage */
- protected $storage;
-
- /** @var string */
- protected $path;
-
- /**
- * @param IL10N $l
- * @param ISystemTagManager $systemTagManager
- * @param ISystemTagObjectMapper $systemTagObjectMapper
- */
- public function __construct(IL10N $l, ISystemTagManager $systemTagManager, ISystemTagObjectMapper $systemTagObjectMapper) {
- $this->l = $l;
- $this->systemTagManager = $systemTagManager;
- $this->systemTagObjectMapper = $systemTagObjectMapper;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
- $this->storage = $storage;
- $this->path = $path;
+ public function __construct(
+ protected IL10N $l,
+ protected ISystemTagManager $systemTagManager,
+ protected ISystemTagObjectMapper $systemTagObjectMapper,
+ protected IUserSession $userSession,
+ protected IGroupManager $groupManager,
+ ) {
}
/**
@@ -95,7 +60,18 @@ class FileSystemTags implements ICheck {
}
try {
- $this->systemTagManager->getTagsByIds($value);
+ $tags = $this->systemTagManager->getTagsByIds($value);
+
+ $user = $this->userSession->getUser();
+ $isAdmin = $user instanceof IUser && $this->groupManager->isAdmin($user->getUID());
+
+ if (!$isAdmin) {
+ foreach ($tags as $tag) {
+ if (!$tag->isUserVisible()) {
+ throw new \UnexpectedValueException($this->l->t('The given tag id is invalid'), 4);
+ }
+ }
+ }
} catch (TagNotFoundException $e) {
throw new \UnexpectedValueException($this->l->t('The given tag id is invalid'), 2);
} catch (\InvalidArgumentException $e) {
@@ -109,7 +85,7 @@ class FileSystemTags implements ICheck {
*/
protected function getSystemTags() {
$cache = $this->storage->getCache();
- $fileIds = $this->getFileIds($cache, $this->path, !$this->storage->instanceOfStorage(IHomeStorage::class));
+ $fileIds = $this->getFileIds($cache, $this->path, !$this->storage->instanceOfStorage(IHomeStorage::class) || $this->storage->instanceOfStorage(SharedStorage::class));
$systemTags = [];
foreach ($fileIds as $i => $fileId) {
@@ -141,23 +117,29 @@ class FileSystemTags implements ICheck {
*/
protected function getFileIds(ICache $cache, $path, $isExternalStorage) {
$cacheId = $cache->getNumericStorageId();
- if (isset($this->fileIds[$cacheId][$path])) {
- return $this->fileIds[$cacheId][$path];
+ if ($this->storage->instanceOfStorage(Jail::class)) {
+ $absolutePath = $this->storage->getUnjailedPath($path);
+ } else {
+ $absolutePath = $path;
+ }
+
+ if (isset($this->fileIds[$cacheId][$absolutePath])) {
+ return $this->fileIds[$cacheId][$absolutePath];
}
$parentIds = [];
if ($path !== $this->dirname($path)) {
$parentIds = $this->getFileIds($cache, $this->dirname($path), $isExternalStorage);
- } else if (!$isExternalStorage) {
+ } elseif (!$isExternalStorage) {
return [];
}
$fileId = $cache->getId($path);
if ($fileId !== -1) {
- $parentIds[] = $cache->getId($path);
+ $parentIds[] = $fileId;
}
- $this->fileIds[$cacheId][$path] = $parentIds;
+ $this->fileIds[$cacheId][$absolutePath] = $parentIds;
return $parentIds;
}
@@ -166,4 +148,12 @@ class FileSystemTags implements ICheck {
$dir = dirname($path);
return $dir === '.' ? '' : $dir;
}
+
+ public function supportedEntities(): array {
+ return [ File::class ];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
}
diff --git a/apps/workflowengine/lib/Check/RequestRemoteAddress.php b/apps/workflowengine/lib/Check/RequestRemoteAddress.php
index de9738fb631..b6f8fef5aed 100644
--- a/apps/workflowengine/lib/Check/RequestRemoteAddress.php
+++ b/apps/workflowengine/lib/Check/RequestRemoteAddress.php
@@ -1,55 +1,25 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
-use OCP\Files\Storage\IStorage;
use OCP\IL10N;
use OCP\IRequest;
use OCP\WorkflowEngine\ICheck;
class RequestRemoteAddress implements ICheck {
- /** @var IL10N */
- protected $l;
-
- /** @var IRequest */
- protected $request;
-
/**
* @param IL10N $l
* @param IRequest $request
*/
- public function __construct(IL10N $l, IRequest $request) {
- $this->l = $l;
- $this->request = $request;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
- // A different path doesn't change time, so nothing to do here.
+ public function __construct(
+ protected IL10N $l,
+ protected IRequest $request,
+ ) {
}
/**
@@ -63,9 +33,9 @@ class RequestRemoteAddress implements ICheck {
if ($operator === 'matchesIPv4') {
return $this->matchIPv4($actualValue, $decodedValue[0], $decodedValue[1]);
- } else if ($operator === '!matchesIPv4') {
+ } elseif ($operator === '!matchesIPv4') {
return !$this->matchIPv4($actualValue, $decodedValue[0], $decodedValue[1]);
- } else if ($operator === 'matchesIPv6') {
+ } elseif ($operator === 'matchesIPv6') {
return $this->matchIPv6($actualValue, $decodedValue[0], $decodedValue[1]);
} else {
return !$this->matchIPv6($actualValue, $decodedValue[0], $decodedValue[1]);
@@ -83,7 +53,7 @@ class RequestRemoteAddress implements ICheck {
}
$decodedValue = explode('/', $value);
- if (sizeof($decodedValue) !== 2) {
+ if (count($decodedValue) !== 2) {
throw new \UnexpectedValueException($this->l->t('The given IP range is invalid'), 2);
}
@@ -105,7 +75,7 @@ class RequestRemoteAddress implements ICheck {
}
/**
- * Based on http://stackoverflow.com/a/594134
+ * Based on https://stackoverflow.com/a/594134
* @param string $ip
* @param string $rangeIp
* @param int $bits
@@ -119,7 +89,7 @@ class RequestRemoteAddress implements ICheck {
}
/**
- * Based on http://stackoverflow.com/a/7951507
+ * Based on https://stackoverflow.com/a/7951507
* @param string $ip
* @param string $rangeIp
* @param int $bits
@@ -138,7 +108,7 @@ class RequestRemoteAddress implements ICheck {
}
/**
- * Based on http://stackoverflow.com/a/7951507
+ * Based on https://stackoverflow.com/a/7951507
* @param string $packedIp
* @return string
*/
@@ -151,4 +121,32 @@ class RequestRemoteAddress implements ICheck {
}
return str_pad($binaryIp, 128, '0', STR_PAD_RIGHT);
}
+
+ /**
+ * returns a list of Entities the checker supports. The values must match
+ * the class name of the entity.
+ *
+ * An empty result means the check is universally available.
+ *
+ * @since 18.0.0
+ */
+ public function supportedEntities(): array {
+ return [];
+ }
+
+ /**
+ * returns whether the operation can be used in the requested scope.
+ *
+ * Scope IDs are defined as constants in OCP\WorkflowEngine\IManager. At
+ * time of writing these are SCOPE_ADMIN and SCOPE_USER.
+ *
+ * For possibly unknown future scopes the recommended behaviour is: if
+ * user scope is permitted, the default behaviour should return `true`,
+ * otherwise `false`.
+ *
+ * @since 18.0.0
+ */
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
}
diff --git a/apps/workflowengine/lib/Check/RequestTime.php b/apps/workflowengine/lib/Check/RequestTime.php
index 2aa79e77673..a49986652b8 100644
--- a/apps/workflowengine/lib/Check/RequestTime.php
+++ b/apps/workflowengine/lib/Check/RequestTime.php
@@ -1,60 +1,29 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
use OCP\AppFramework\Utility\ITimeFactory;
-use OCP\Files\Storage\IStorage;
use OCP\IL10N;
use OCP\WorkflowEngine\ICheck;
class RequestTime implements ICheck {
-
- const REGEX_TIME = '([0-1][0-9]|2[0-3]):([0-5][0-9])';
- const REGEX_TIMEZONE = '([a-zA-Z]+(?:\\/[a-zA-Z\-\_]+)+)';
+ public const REGEX_TIME = '([0-1][0-9]|2[0-3]):([0-5][0-9])';
+ public const REGEX_TIMEZONE = '([a-zA-Z]+(?:\\/[a-zA-Z\-\_]+)+)';
/** @var bool[] */
protected $cachedResults;
- /** @var IL10N */
- protected $l;
-
- /** @var ITimeFactory */
- protected $timeFactory;
-
/**
* @param ITimeFactory $timeFactory
*/
- public function __construct(IL10N $l, ITimeFactory $timeFactory) {
- $this->l = $l;
- $this->timeFactory = $timeFactory;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
- // A different path doesn't change time, so nothing to do here.
+ public function __construct(
+ protected IL10N $l,
+ protected ITimeFactory $timeFactory,
+ ) {
}
/**
@@ -90,11 +59,11 @@ class RequestTime implements ICheck {
* @return int
*/
protected function getTimestamp($currentTimestamp, $value) {
- list($time1, $timezone1) = explode(' ', $value);
- list($hour1, $minute1) = explode(':', $time1);
+ [$time1, $timezone1] = explode(' ', $value);
+ [$hour1, $minute1] = explode(':', $time1);
$date1 = new \DateTime('now', new \DateTimeZone($timezone1));
$date1->setTimestamp($currentTimestamp);
- $date1->setTime($hour1, $minute1);
+ $date1->setTime((int)$hour1, (int)$minute1);
return $date1->getTimestamp();
}
@@ -116,14 +85,30 @@ class RequestTime implements ICheck {
}
$values = json_decode($value, true);
- $time1 = \DateTime::createFromFormat('H:i e', $values[0]);
+ $time1 = \DateTime::createFromFormat('H:i e', (string)$values[0]);
if ($time1 === false) {
throw new \UnexpectedValueException($this->l->t('The given start time is invalid'), 3);
}
- $time2 = \DateTime::createFromFormat('H:i e', $values[1]);
+ $time2 = \DateTime::createFromFormat('H:i e', (string)$values[1]);
if ($time2 === false) {
throw new \UnexpectedValueException($this->l->t('The given end time is invalid'), 4);
}
}
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
+ }
+
+ /**
+ * returns a list of Entities the checker supports. The values must match
+ * the class name of the entity.
+ *
+ * An empty result means the check is universally available.
+ *
+ * @since 18.0.0
+ */
+ public function supportedEntities(): array {
+ return [];
+ }
}
diff --git a/apps/workflowengine/lib/Check/RequestURL.php b/apps/workflowengine/lib/Check/RequestURL.php
index 36d41c101f2..fb2ac7e8fd5 100644
--- a/apps/workflowengine/lib/Check/RequestURL.php
+++ b/apps/workflowengine/lib/Check/RequestURL.php
@@ -1,45 +1,29 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
use OCP\IL10N;
use OCP\IRequest;
class RequestURL extends AbstractStringCheck {
+ public const CLI = 'cli';
- /** @var string */
+ /** @var ?string */
protected $url;
- /** @var IRequest */
- protected $request;
-
/**
* @param IL10N $l
* @param IRequest $request
*/
- public function __construct(IL10N $l, IRequest $request) {
+ public function __construct(
+ IL10N $l,
+ protected IRequest $request,
+ ) {
parent::__construct($l);
- $this->request = $request;
}
/**
@@ -47,8 +31,12 @@ class RequestURL extends AbstractStringCheck {
* @param string $value
* @return bool
*/
- public function executeCheck($operator, $value) {
- $actualValue = $this->getActualValue();
+ public function executeCheck($operator, $value) {
+ if (\OC::$CLI) {
+ $actualValue = $this->url = RequestURL::CLI;
+ } else {
+ $actualValue = $this->getActualValue();
+ }
if (in_array($operator, ['is', '!is'])) {
switch ($value) {
case 'webdav':
@@ -78,15 +66,15 @@ class RequestURL extends AbstractStringCheck {
return $this->url; // E.g. https://localhost/nextcloud/index.php/apps/files_texteditor/ajax/loadfile
}
- /**
- * @return bool
- */
- protected function isWebDAVRequest() {
+ protected function isWebDAVRequest(): bool {
+ if ($this->url === RequestURL::CLI) {
+ return false;
+ }
return substr($this->request->getScriptName(), 0 - strlen('/remote.php')) === '/remote.php' && (
- $this->request->getPathInfo() === '/webdav' ||
- strpos($this->request->getPathInfo(), '/webdav/') === 0 ||
- $this->request->getPathInfo() === '/dav/files' ||
- strpos($this->request->getPathInfo(), '/dav/files/') === 0
+ $this->request->getPathInfo() === '/webdav'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/webdav/')
+ || $this->request->getPathInfo() === '/dav/files'
+ || str_starts_with($this->request->getPathInfo() ?? '', '/dav/files/')
);
}
}
diff --git a/apps/workflowengine/lib/Check/RequestUserAgent.php b/apps/workflowengine/lib/Check/RequestUserAgent.php
index 7a8d4a71acf..572ef567074 100644
--- a/apps/workflowengine/lib/Check/RequestUserAgent.php
+++ b/apps/workflowengine/lib/Check/RequestUserAgent.php
@@ -1,42 +1,25 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
use OCP\IL10N;
use OCP\IRequest;
class RequestUserAgent extends AbstractStringCheck {
- /** @var IRequest */
- protected $request;
-
/**
* @param IL10N $l
* @param IRequest $request
*/
- public function __construct(IL10N $l, IRequest $request) {
+ public function __construct(
+ IL10N $l,
+ protected IRequest $request,
+ ) {
parent::__construct($l);
- $this->request = $request;
}
/**
@@ -44,9 +27,9 @@ class RequestUserAgent extends AbstractStringCheck {
* @param string $value
* @return bool
*/
- public function executeCheck($operator, $value) {
+ public function executeCheck($operator, $value) {
$actualValue = $this->getActualValue();
- if (in_array($operator, ['is', '!is'])) {
+ if (in_array($operator, ['is', '!is'], true)) {
switch ($value) {
case 'android':
$operator = $operator === 'is' ? 'matches' : '!matches';
@@ -60,6 +43,14 @@ class RequestUserAgent extends AbstractStringCheck {
$operator = $operator === 'is' ? 'matches' : '!matches';
$value = IRequest::USER_AGENT_CLIENT_DESKTOP;
break;
+ case 'mail':
+ if ($operator === 'is') {
+ return $this->executeStringCheck('matches', IRequest::USER_AGENT_OUTLOOK_ADDON, $actualValue)
+ || $this->executeStringCheck('matches', IRequest::USER_AGENT_THUNDERBIRD_ADDON, $actualValue);
+ }
+
+ return $this->executeStringCheck('!matches', IRequest::USER_AGENT_OUTLOOK_ADDON, $actualValue)
+ && $this->executeStringCheck('!matches', IRequest::USER_AGENT_THUNDERBIRD_ADDON, $actualValue);
}
}
return $this->executeStringCheck($operator, $value, $actualValue);
@@ -69,6 +60,10 @@ class RequestUserAgent extends AbstractStringCheck {
* @return string
*/
protected function getActualValue() {
- return (string) $this->request->getHeader('User-Agent');
+ return $this->request->getHeader('User-Agent');
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ return true;
}
}
diff --git a/apps/workflowengine/lib/Check/TFileCheck.php b/apps/workflowengine/lib/Check/TFileCheck.php
new file mode 100644
index 00000000000..a514352e047
--- /dev/null
+++ b/apps/workflowengine/lib/Check/TFileCheck.php
@@ -0,0 +1,55 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Check;
+
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCA\WorkflowEngine\Entity\File;
+use OCP\Files\Node;
+use OCP\Files\NotFoundException;
+use OCP\Files\Storage\IStorage;
+use OCP\WorkflowEngine\IEntity;
+
+trait TFileCheck {
+ /** @var IStorage */
+ protected $storage;
+
+ /** @var string */
+ protected $path;
+
+ /** @var bool */
+ protected $isDir;
+
+ /**
+ * @param IStorage $storage
+ * @param string $path
+ * @param bool $isDir
+ * @since 18.0.0
+ */
+ public function setFileInfo(IStorage $storage, string $path, bool $isDir = false): void {
+ $this->storage = $storage;
+ $this->path = $path;
+ $this->isDir = $isDir;
+ }
+
+ /**
+ * @throws NotFoundException
+ */
+ public function setEntitySubject(IEntity $entity, $subject): void {
+ if ($entity instanceof File) {
+ if (!$subject instanceof Node) {
+ throw new \UnexpectedValueException(
+ 'Expected Node subject for File entity, got {class}',
+ ['app' => Application::APP_ID, 'class' => get_class($subject)]
+ );
+ }
+ $this->storage = $subject->getStorage();
+ $this->path = $subject->getPath();
+ }
+ }
+}
diff --git a/apps/workflowengine/lib/Check/UserGroupMembership.php b/apps/workflowengine/lib/Check/UserGroupMembership.php
index fd6ba00d092..690f9974a49 100644
--- a/apps/workflowengine/lib/Check/UserGroupMembership.php
+++ b/apps/workflowengine/lib/Check/UserGroupMembership.php
@@ -1,33 +1,17 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Check;
-
-use OCP\Files\Storage\IStorage;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IUser;
use OCP\IUserSession;
use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IManager;
class UserGroupMembership implements ICheck {
@@ -37,32 +21,16 @@ class UserGroupMembership implements ICheck {
/** @var string[] */
protected $cachedGroupMemberships;
- /** @var IUserSession */
- protected $userSession;
-
- /** @var IGroupManager */
- protected $groupManager;
-
- /** @var IL10N */
- protected $l;
-
/**
* @param IUserSession $userSession
* @param IGroupManager $groupManager
* @param IL10N $l
*/
- public function __construct(IUserSession $userSession, IGroupManager $groupManager, IL10N $l) {
- $this->userSession = $userSession;
- $this->groupManager = $groupManager;
- $this->l = $l;
- }
-
- /**
- * @param IStorage $storage
- * @param string $path
- */
- public function setFileInfo(IStorage $storage, $path) {
- // A different path doesn't change group memberships, so nothing to do here.
+ public function __construct(
+ protected IUserSession $userSession,
+ protected IGroupManager $groupManager,
+ protected IL10N $l,
+ ) {
}
/**
@@ -111,4 +79,14 @@ class UserGroupMembership implements ICheck {
return $this->cachedGroupMemberships;
}
+
+ public function supportedEntities(): array {
+ // universal by default
+ return [];
+ }
+
+ public function isAvailableForScope(int $scope): bool {
+ // admin only by default
+ return $scope === IManager::SCOPE_ADMIN;
+ }
}
diff --git a/apps/workflowengine/lib/Command/Index.php b/apps/workflowengine/lib/Command/Index.php
new file mode 100644
index 00000000000..1fb8cb416b0
--- /dev/null
+++ b/apps/workflowengine/lib/Command/Index.php
@@ -0,0 +1,63 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Command;
+
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCA\WorkflowEngine\Manager;
+use OCP\WorkflowEngine\IManager;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Index extends Command {
+
+ public function __construct(
+ private Manager $manager,
+ ) {
+ parent::__construct();
+ }
+
+ protected function configure() {
+ $this
+ ->setName('workflows:list')
+ ->setDescription('Lists configured workflows')
+ ->addArgument(
+ 'scope',
+ InputArgument::OPTIONAL,
+ 'Lists workflows for "admin", "user"',
+ 'admin'
+ )
+ ->addArgument(
+ 'scopeId',
+ InputArgument::OPTIONAL,
+ 'User IDs when the scope is "user"',
+ null
+ );
+ }
+
+ protected function mappedScope(string $scope): int {
+ static $scopes = [
+ 'admin' => IManager::SCOPE_ADMIN,
+ 'user' => IManager::SCOPE_USER,
+ ];
+ return $scopes[$scope] ?? -1;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int {
+ $ops = $this->manager->getAllOperations(
+ new ScopeContext(
+ $this->mappedScope($input->getArgument('scope')),
+ $input->getArgument('scopeId')
+ )
+ );
+ $output->writeln(\json_encode($ops));
+ return 0;
+ }
+}
diff --git a/apps/workflowengine/lib/Controller/AWorkflowController.php b/apps/workflowengine/lib/Controller/AWorkflowController.php
new file mode 100644
index 00000000000..6395d0d98f6
--- /dev/null
+++ b/apps/workflowengine/lib/Controller/AWorkflowController.php
@@ -0,0 +1,151 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Controller;
+
+use Doctrine\DBAL\Exception;
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCA\WorkflowEngine\Manager;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCS\OCSBadRequestException;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\AppFramework\OCS\OCSForbiddenException;
+use OCP\AppFramework\OCSController;
+use OCP\IRequest;
+use Psr\Log\LoggerInterface;
+
+abstract class AWorkflowController extends OCSController {
+
+ public function __construct(
+ $appName,
+ IRequest $request,
+ protected Manager $manager,
+ private LoggerInterface $logger,
+ ) {
+ parent::__construct($appName, $request);
+ }
+
+ /**
+ * @throws OCSForbiddenException
+ */
+ abstract protected function getScopeContext(): ScopeContext;
+
+ /**
+ * Example: curl -u joann -H "OCS-APIREQUEST: true" "http://my.nc.srvr/ocs/v2.php/apps/workflowengine/api/v1/workflows/global?format=json"
+ *
+ * @throws OCSForbiddenException
+ */
+ public function index(): DataResponse {
+ $operationsByClass = $this->manager->getAllOperations($this->getScopeContext());
+
+ foreach ($operationsByClass as &$operations) {
+ foreach ($operations as &$operation) {
+ $operation = $this->manager->formatOperation($operation);
+ }
+ }
+
+ return new DataResponse($operationsByClass);
+ }
+
+ /**
+ * Example: curl -u joann -H "OCS-APIREQUEST: true" "http://my.nc.srvr/ocs/v2.php/apps/workflowengine/api/v1/workflows/global/OCA\\Workflow_DocToPdf\\Operation?format=json"
+ *
+ * @throws OCSForbiddenException
+ */
+ public function show(string $id): DataResponse {
+ $context = $this->getScopeContext();
+
+ // The ID corresponds to a class name
+ $operations = $this->manager->getOperations($id, $context);
+
+ foreach ($operations as &$operation) {
+ $operation = $this->manager->formatOperation($operation);
+ }
+
+ return new DataResponse($operations);
+ }
+
+ /**
+ * @throws OCSBadRequestException
+ * @throws OCSForbiddenException
+ * @throws OCSException
+ */
+ #[PasswordConfirmationRequired]
+ public function create(
+ string $class,
+ string $name,
+ array $checks,
+ string $operation,
+ string $entity,
+ array $events,
+ ): DataResponse {
+ $context = $this->getScopeContext();
+ try {
+ $operation = $this->manager->addOperation($class, $name, $checks, $operation, $context, $entity, $events);
+ $operation = $this->manager->formatOperation($operation);
+ return new DataResponse($operation);
+ } catch (\UnexpectedValueException $e) {
+ throw new OCSBadRequestException($e->getMessage(), $e);
+ } catch (\DomainException $e) {
+ throw new OCSForbiddenException($e->getMessage(), $e);
+ } catch (Exception $e) {
+ $this->logger->error('Error when inserting flow', ['exception' => $e]);
+ throw new OCSException('An internal error occurred', $e->getCode(), $e);
+ }
+ }
+
+ /**
+ * @throws OCSBadRequestException
+ * @throws OCSForbiddenException
+ * @throws OCSException
+ */
+ #[PasswordConfirmationRequired]
+ public function update(
+ int $id,
+ string $name,
+ array $checks,
+ string $operation,
+ string $entity,
+ array $events,
+ ): DataResponse {
+ try {
+ $context = $this->getScopeContext();
+ $operation = $this->manager->updateOperation($id, $name, $checks, $operation, $context, $entity, $events);
+ $operation = $this->manager->formatOperation($operation);
+ return new DataResponse($operation);
+ } catch (\UnexpectedValueException $e) {
+ throw new OCSBadRequestException($e->getMessage(), $e);
+ } catch (\DomainException $e) {
+ throw new OCSForbiddenException($e->getMessage(), $e);
+ } catch (Exception $e) {
+ $this->logger->error('Error when updating flow with id ' . $id, ['exception' => $e]);
+ throw new OCSException('An internal error occurred', $e->getCode(), $e);
+ }
+ }
+
+ /**
+ * @throws OCSBadRequestException
+ * @throws OCSForbiddenException
+ * @throws OCSException
+ */
+ #[PasswordConfirmationRequired]
+ public function destroy(int $id): DataResponse {
+ try {
+ $deleted = $this->manager->deleteOperation($id, $this->getScopeContext());
+ return new DataResponse($deleted);
+ } catch (\UnexpectedValueException $e) {
+ throw new OCSBadRequestException($e->getMessage(), $e);
+ } catch (\DomainException $e) {
+ throw new OCSForbiddenException($e->getMessage(), $e);
+ } catch (Exception $e) {
+ $this->logger->error('Error when deleting flow with id ' . $id, ['exception' => $e]);
+ throw new OCSException('An internal error occurred', $e->getCode(), $e);
+ }
+ }
+}
diff --git a/apps/workflowengine/lib/Controller/FlowOperations.php b/apps/workflowengine/lib/Controller/FlowOperations.php
deleted file mode 100644
index 753aa2c26a7..00000000000
--- a/apps/workflowengine/lib/Controller/FlowOperations.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OCA\WorkflowEngine\Controller;
-
-use OCA\WorkflowEngine\Manager;
-use OCP\AppFramework\Controller;
-use OCP\AppFramework\Http;
-use OCP\AppFramework\Http\JSONResponse;
-use OCP\IRequest;
-
-class FlowOperations extends Controller {
-
- /** @var Manager */
- protected $manager;
-
- /**
- * @param IRequest $request
- * @param Manager $manager
- */
- public function __construct(IRequest $request, Manager $manager) {
- parent::__construct('workflowengine', $request);
- $this->manager = $manager;
- }
-
- /**
- * @NoCSRFRequired
- *
- * @param string $class
- * @return JSONResponse
- */
- public function getOperations($class) {
- $operations = $this->manager->getOperations($class);
-
- foreach ($operations as &$operation) {
- $operation = $this->prepareOperation($operation);
- }
-
- return new JSONResponse($operations);
- }
-
- /**
- * @PasswordConfirmationRequired
- *
- * @param string $class
- * @param string $name
- * @param array[] $checks
- * @param string $operation
- * @return JSONResponse The added element
- */
- public function addOperation($class, $name, $checks, $operation) {
- try {
- $operation = $this->manager->addOperation($class, $name, $checks, $operation);
- $operation = $this->prepareOperation($operation);
- return new JSONResponse($operation);
- } catch (\UnexpectedValueException $e) {
- return new JSONResponse($e->getMessage(), Http::STATUS_BAD_REQUEST);
- }
- }
-
- /**
- * @PasswordConfirmationRequired
- *
- * @param int $id
- * @param string $name
- * @param array[] $checks
- * @param string $operation
- * @return JSONResponse The updated element
- */
- public function updateOperation($id, $name, $checks, $operation) {
- try {
- $operation = $this->manager->updateOperation($id, $name, $checks, $operation);
- $operation = $this->prepareOperation($operation);
- return new JSONResponse($operation);
- } catch (\UnexpectedValueException $e) {
- return new JSONResponse($e->getMessage(), Http::STATUS_BAD_REQUEST);
- }
- }
-
- /**
- * @PasswordConfirmationRequired
- *
- * @param int $id
- * @return JSONResponse
- */
- public function deleteOperation($id) {
- $deleted = $this->manager->deleteOperation((int) $id);
- return new JSONResponse($deleted);
- }
-
- /**
- * @param array $operation
- * @return array
- */
- protected function prepareOperation(array $operation) {
- $checkIds = json_decode($operation['checks']);
- $checks = $this->manager->getChecks($checkIds);
-
- $operation['checks'] = [];
- foreach ($checks as $check) {
- // Remove internal values
- unset($check['id']);
- unset($check['hash']);
-
- $operation['checks'][] = $check;
- }
-
- return $operation;
- }
-}
diff --git a/apps/workflowengine/lib/Controller/GlobalWorkflowsController.php b/apps/workflowengine/lib/Controller/GlobalWorkflowsController.php
new file mode 100644
index 00000000000..001c673df35
--- /dev/null
+++ b/apps/workflowengine/lib/Controller/GlobalWorkflowsController.php
@@ -0,0 +1,25 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Controller;
+
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCP\WorkflowEngine\IManager;
+
+class GlobalWorkflowsController extends AWorkflowController {
+
+ /** @var ScopeContext */
+ private $scopeContext;
+
+ protected function getScopeContext(): ScopeContext {
+ if ($this->scopeContext === null) {
+ $this->scopeContext = new ScopeContext(IManager::SCOPE_ADMIN);
+ }
+ return $this->scopeContext;
+ }
+}
diff --git a/apps/workflowengine/lib/Controller/RequestTime.php b/apps/workflowengine/lib/Controller/RequestTime.php
deleted file mode 100644
index dd0efa89b91..00000000000
--- a/apps/workflowengine/lib/Controller/RequestTime.php
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-namespace OCA\WorkflowEngine\Controller;
-
-use OCP\AppFramework\Controller;
-use OCP\AppFramework\Http\JSONResponse;
-
-class RequestTime extends Controller {
-
- /**
- * @NoAdminRequired
- *
- * @param string $search
- * @return JSONResponse
- */
- public function getTimezones($search = '') {
- $timezones = \DateTimeZone::listIdentifiers();
-
- if ($search !== '') {
- $timezones = array_filter($timezones, function ($timezone) use ($search) {
- return strpos(strtolower($timezone), strtolower($search)) !== false;
- });
- }
-
- $timezones = array_slice($timezones, 0, 10);
-
- $response = [];
- foreach ($timezones as $timezone) {
- $response[$timezone] = $timezone;
- }
- return new JSONResponse($response);
- }
-}
diff --git a/apps/workflowengine/lib/Controller/RequestTimeController.php b/apps/workflowengine/lib/Controller/RequestTimeController.php
new file mode 100644
index 00000000000..4b34f16ce0a
--- /dev/null
+++ b/apps/workflowengine/lib/Controller/RequestTimeController.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Controller;
+
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\JSONResponse;
+
+class RequestTimeController extends Controller {
+
+ /**
+ * @param string $search
+ * @return JSONResponse
+ */
+ #[NoAdminRequired]
+ public function getTimezones($search = '') {
+ $timezones = \DateTimeZone::listIdentifiers();
+
+ if ($search !== '') {
+ $timezones = array_filter($timezones, function ($timezone) use ($search) {
+ return stripos($timezone, $search) !== false;
+ });
+ }
+
+ $timezones = array_slice($timezones, 0, 10);
+
+ $response = [];
+ foreach ($timezones as $timezone) {
+ $response[$timezone] = $timezone;
+ }
+ return new JSONResponse($response);
+ }
+}
diff --git a/apps/workflowengine/lib/Controller/UserWorkflowsController.php b/apps/workflowengine/lib/Controller/UserWorkflowsController.php
new file mode 100644
index 00000000000..953ce149233
--- /dev/null
+++ b/apps/workflowengine/lib/Controller/UserWorkflowsController.php
@@ -0,0 +1,101 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Controller;
+
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCA\WorkflowEngine\Manager;
+use OCP\AppFramework\Http\Attribute\NoAdminRequired;
+use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired;
+use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\OCS\OCSBadRequestException;
+use OCP\AppFramework\OCS\OCSForbiddenException;
+use OCP\IRequest;
+use OCP\IUserSession;
+use OCP\WorkflowEngine\IManager;
+use Psr\Log\LoggerInterface;
+
+class UserWorkflowsController extends AWorkflowController {
+
+ /** @var ScopeContext */
+ private $scopeContext;
+
+ public function __construct(
+ $appName,
+ IRequest $request,
+ Manager $manager,
+ private IUserSession $session,
+ LoggerInterface $logger,
+ ) {
+ parent::__construct($appName, $request, $manager, $logger);
+ }
+
+ /**
+ * Retrieve all configured workflow rules
+ *
+ * Example: curl -u joann -H "OCS-APIREQUEST: true" "http://my.nc.srvr/ocs/v2.php/apps/workflowengine/api/v1/workflows/user?format=json"
+ *
+ * @throws OCSForbiddenException
+ */
+ #[NoAdminRequired]
+ public function index(): DataResponse {
+ return parent::index();
+ }
+
+ /**
+ * Example: curl -u joann -H "OCS-APIREQUEST: true" "http://my.nc.srvr/ocs/v2.php/apps/workflowengine/api/v1/workflows/user/OCA\\Workflow_DocToPdf\\Operation?format=json"
+ * @throws OCSForbiddenException
+ */
+ #[NoAdminRequired]
+ public function show(string $id): DataResponse {
+ return parent::show($id);
+ }
+
+ /**
+ * @throws OCSBadRequestException
+ * @throws OCSForbiddenException
+ */
+ #[NoAdminRequired]
+ #[PasswordConfirmationRequired]
+ public function create(string $class, string $name, array $checks, string $operation, string $entity, array $events): DataResponse {
+ return parent::create($class, $name, $checks, $operation, $entity, $events);
+ }
+
+ /**
+ * @throws OCSBadRequestException
+ * @throws OCSForbiddenException
+ */
+ #[NoAdminRequired]
+ #[PasswordConfirmationRequired]
+ public function update(int $id, string $name, array $checks, string $operation, string $entity, array $events): DataResponse {
+ return parent::update($id, $name, $checks, $operation, $entity, $events);
+ }
+
+ /**
+ * @throws OCSForbiddenException
+ */
+ #[NoAdminRequired]
+ #[PasswordConfirmationRequired]
+ public function destroy(int $id): DataResponse {
+ return parent::destroy($id);
+ }
+
+ /**
+ * @throws OCSForbiddenException
+ */
+ protected function getScopeContext(): ScopeContext {
+ if ($this->scopeContext === null) {
+ $user = $this->session->getUser();
+ if (!$user || !$this->manager->isUserScopeEnabled()) {
+ throw new OCSForbiddenException('User not logged in');
+ }
+ $this->scopeContext = new ScopeContext(IManager::SCOPE_USER, $user->getUID());
+ }
+ return $this->scopeContext;
+ }
+}
diff --git a/apps/workflowengine/lib/Entity/File.php b/apps/workflowengine/lib/Entity/File.php
new file mode 100644
index 00000000000..64d552e1737
--- /dev/null
+++ b/apps/workflowengine/lib/Entity/File.php
@@ -0,0 +1,256 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Entity;
+
+use OC\Files\Config\UserMountCache;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\GenericEvent;
+use OCP\Files\InvalidPathException;
+use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
+use OCP\Files\Node;
+use OCP\Files\NotFoundException;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\IUser;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use OCP\SystemTag\ISystemTag;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\SystemTag\MapperEvent;
+use OCP\WorkflowEngine\EntityContext\IContextPortation;
+use OCP\WorkflowEngine\EntityContext\IDisplayText;
+use OCP\WorkflowEngine\EntityContext\IIcon;
+use OCP\WorkflowEngine\EntityContext\IUrl;
+use OCP\WorkflowEngine\GenericEntityEvent;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IRuleMatcher;
+
+class File implements IEntity, IDisplayText, IUrl, IIcon, IContextPortation {
+ private const EVENT_NAMESPACE = '\OCP\Files::';
+ /** @var string */
+ protected $eventName;
+ /** @var Event */
+ protected $event;
+ /** @var ?Node */
+ private $node;
+ /** @var ?IUser */
+ private $actingUser = null;
+ /** @var UserMountCache */
+ private $userMountCache;
+
+ public function __construct(
+ protected IL10N $l10n,
+ protected IURLGenerator $urlGenerator,
+ protected IRootFolder $root,
+ private IUserSession $userSession,
+ private ISystemTagManager $tagManager,
+ private IUserManager $userManager,
+ UserMountCache $userMountCache,
+ private IMountManager $mountManager,
+ ) {
+ $this->userMountCache = $userMountCache;
+ }
+
+ public function getName(): string {
+ return $this->l10n->t('File');
+ }
+
+ public function getIcon(): string {
+ return $this->urlGenerator->imagePath('core', 'categories/files.svg');
+ }
+
+ public function getEvents(): array {
+ return [
+ new GenericEntityEvent($this->l10n->t('File created'), self::EVENT_NAMESPACE . 'postCreate'),
+ new GenericEntityEvent($this->l10n->t('File updated'), self::EVENT_NAMESPACE . 'postWrite'),
+ new GenericEntityEvent($this->l10n->t('File renamed'), self::EVENT_NAMESPACE . 'postRename'),
+ new GenericEntityEvent($this->l10n->t('File deleted'), self::EVENT_NAMESPACE . 'postDelete'),
+ new GenericEntityEvent($this->l10n->t('File accessed'), self::EVENT_NAMESPACE . 'postTouch'),
+ new GenericEntityEvent($this->l10n->t('File copied'), self::EVENT_NAMESPACE . 'postCopy'),
+ new GenericEntityEvent($this->l10n->t('Tag assigned'), MapperEvent::EVENT_ASSIGN),
+ ];
+ }
+
+ public function prepareRuleMatcher(IRuleMatcher $ruleMatcher, string $eventName, Event $event): void {
+ if (!$event instanceof GenericEvent && !$event instanceof MapperEvent) {
+ return;
+ }
+ $this->eventName = $eventName;
+ $this->event = $event;
+ $this->actingUser = $this->actingUser ?? $this->userSession->getUser();
+ try {
+ $node = $this->getNode();
+ $ruleMatcher->setEntitySubject($this, $node);
+ $ruleMatcher->setFileInfo($node->getStorage(), $node->getInternalPath());
+ } catch (NotFoundException $e) {
+ // pass
+ }
+ }
+
+ public function isLegitimatedForUserId(string $userId): bool {
+ try {
+ $node = $this->getNode();
+ if ($node->getOwner()?->getUID() === $userId) {
+ return true;
+ }
+
+ if ($this->eventName === self::EVENT_NAMESPACE . 'postDelete') {
+ // At postDelete, the file no longer exists. Check for parent folder instead.
+ $fileId = $node->getParentId();
+ } else {
+ $fileId = $node->getId();
+ }
+
+ $mountInfos = $this->userMountCache->getMountsForFileId($fileId, $userId);
+ foreach ($mountInfos as $mountInfo) {
+ $mount = $this->mountManager->getMountFromMountInfo($mountInfo);
+ if ($mount && $mount->getStorage() && !empty($mount->getStorage()->getCache()->get($fileId))) {
+ return true;
+ }
+ }
+ return false;
+ } catch (NotFoundException $e) {
+ return false;
+ }
+ }
+
+ /**
+ * @throws NotFoundException
+ */
+ protected function getNode(): Node {
+ if ($this->node) {
+ return $this->node;
+ }
+ if (!$this->event instanceof GenericEvent && !$this->event instanceof MapperEvent) {
+ throw new NotFoundException();
+ }
+ switch ($this->eventName) {
+ case self::EVENT_NAMESPACE . 'postCreate':
+ case self::EVENT_NAMESPACE . 'postWrite':
+ case self::EVENT_NAMESPACE . 'postDelete':
+ case self::EVENT_NAMESPACE . 'postTouch':
+ return $this->event->getSubject();
+ case self::EVENT_NAMESPACE . 'postRename':
+ case self::EVENT_NAMESPACE . 'postCopy':
+ return $this->event->getSubject()[1];
+ case MapperEvent::EVENT_ASSIGN:
+ if (!$this->event instanceof MapperEvent || $this->event->getObjectType() !== 'files') {
+ throw new NotFoundException();
+ }
+ $nodes = $this->root->getById((int)$this->event->getObjectId());
+ if (is_array($nodes) && isset($nodes[0])) {
+ $this->node = $nodes[0];
+ return $this->node;
+ }
+ break;
+ }
+ throw new NotFoundException();
+ }
+
+ public function getDisplayText(int $verbosity = 0): string {
+ try {
+ $node = $this->getNode();
+ } catch (NotFoundException $e) {
+ return '';
+ }
+
+ $options = [
+ $this->actingUser ? $this->actingUser->getDisplayName() : $this->l10n->t('Someone'),
+ $node->getName()
+ ];
+
+ switch ($this->eventName) {
+ case self::EVENT_NAMESPACE . 'postCreate':
+ return $this->l10n->t('%s created %s', $options);
+ case self::EVENT_NAMESPACE . 'postWrite':
+ return $this->l10n->t('%s modified %s', $options);
+ case self::EVENT_NAMESPACE . 'postDelete':
+ return $this->l10n->t('%s deleted %s', $options);
+ case self::EVENT_NAMESPACE . 'postTouch':
+ return $this->l10n->t('%s accessed %s', $options);
+ case self::EVENT_NAMESPACE . 'postRename':
+ return $this->l10n->t('%s renamed %s', $options);
+ case self::EVENT_NAMESPACE . 'postCopy':
+ return $this->l10n->t('%s copied %s', $options);
+ case MapperEvent::EVENT_ASSIGN:
+ $tagNames = [];
+ if ($this->event instanceof MapperEvent) {
+ $tagIDs = $this->event->getTags();
+ $tagObjects = $this->tagManager->getTagsByIds($tagIDs);
+ foreach ($tagObjects as $systemTag) {
+ /** @var ISystemTag $systemTag */
+ if ($systemTag->isUserVisible()) {
+ $tagNames[] = $systemTag->getName();
+ }
+ }
+ }
+ $filename = array_pop($options);
+ $tagString = implode(', ', $tagNames);
+ if ($tagString === '') {
+ return '';
+ }
+ array_push($options, $tagString, $filename);
+ return $this->l10n->t('%s assigned %s to %s', $options);
+ }
+ }
+
+ public function getUrl(): string {
+ try {
+ return $this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $this->getNode()->getId()]);
+ } catch (InvalidPathException $e) {
+ return '';
+ } catch (NotFoundException $e) {
+ return '';
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function exportContextIDs(): array {
+ $nodeOwner = $this->getNode()->getOwner();
+ $actingUserId = null;
+ if ($this->actingUser instanceof IUser) {
+ $actingUserId = $this->actingUser->getUID();
+ } elseif ($this->userSession->getUser() instanceof IUser) {
+ $actingUserId = $this->userSession->getUser()->getUID();
+ }
+ return [
+ 'eventName' => $this->eventName,
+ 'nodeId' => $this->getNode()->getId(),
+ 'nodeOwnerId' => $nodeOwner ? $nodeOwner->getUID() : null,
+ 'actingUserId' => $actingUserId,
+ ];
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function importContextIDs(array $contextIDs): void {
+ $this->eventName = $contextIDs['eventName'];
+ if ($contextIDs['nodeOwnerId'] !== null) {
+ $userFolder = $this->root->getUserFolder($contextIDs['nodeOwnerId']);
+ $nodes = $userFolder->getById($contextIDs['nodeId']);
+ } else {
+ $nodes = $this->root->getById($contextIDs['nodeId']);
+ }
+ $this->node = $nodes[0] ?? null;
+ if ($contextIDs['actingUserId']) {
+ $this->actingUser = $this->userManager->get($contextIDs['actingUserId']);
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function getIconUrl(): string {
+ return $this->getIcon();
+ }
+}
diff --git a/apps/workflowengine/lib/Helper/LogContext.php b/apps/workflowengine/lib/Helper/LogContext.php
new file mode 100644
index 00000000000..9d740680bb6
--- /dev/null
+++ b/apps/workflowengine/lib/Helper/LogContext.php
@@ -0,0 +1,79 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Helper;
+
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IManager;
+use OCP\WorkflowEngine\IOperation;
+
+class LogContext {
+ /** @var array */
+ protected $details;
+
+ public function setDescription(string $description): LogContext {
+ $this->details['message'] = $description;
+ return $this;
+ }
+
+ public function setScopes(array $scopes): LogContext {
+ $this->details['scopes'] = [];
+ foreach ($scopes as $scope) {
+ if ($scope instanceof ScopeContext) {
+ switch ($scope->getScope()) {
+ case IManager::SCOPE_ADMIN:
+ $this->details['scopes'][] = ['scope' => 'admin'];
+ break;
+ case IManager::SCOPE_USER:
+ $this->details['scopes'][] = [
+ 'scope' => 'user',
+ 'uid' => $scope->getScopeId(),
+ ];
+ break;
+ default:
+ continue 2;
+ }
+ }
+ }
+ return $this;
+ }
+
+ public function setOperation(?IOperation $operation): LogContext {
+ if ($operation instanceof IOperation) {
+ $this->details['operation'] = [
+ 'class' => get_class($operation),
+ 'name' => $operation->getDisplayName(),
+ ];
+ }
+ return $this;
+ }
+
+ public function setEntity(?IEntity $entity): LogContext {
+ if ($entity instanceof IEntity) {
+ $this->details['entity'] = [
+ 'class' => get_class($entity),
+ 'name' => $entity->getName(),
+ ];
+ }
+ return $this;
+ }
+
+ public function setConfiguration(array $configuration): LogContext {
+ $this->details['configuration'] = $configuration;
+ return $this;
+ }
+
+ public function setEventName(string $eventName): LogContext {
+ $this->details['eventName'] = $eventName;
+ return $this;
+ }
+
+ public function getDetails(): array {
+ return $this->details;
+ }
+}
diff --git a/apps/workflowengine/lib/Helper/ScopeContext.php b/apps/workflowengine/lib/Helper/ScopeContext.php
new file mode 100644
index 00000000000..05379f5ff43
--- /dev/null
+++ b/apps/workflowengine/lib/Helper/ScopeContext.php
@@ -0,0 +1,61 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Helper;
+
+use OCP\WorkflowEngine\IManager;
+
+class ScopeContext {
+ /** @var int */
+ private $scope;
+ /** @var string */
+ private $scopeId;
+ /** @var string */
+ private $hash;
+
+ public function __construct(int $scope, ?string $scopeId = null) {
+ $this->scope = $this->evaluateScope($scope);
+ $this->scopeId = $this->evaluateScopeId($scopeId);
+ }
+
+ private function evaluateScope(int $scope): int {
+ if (in_array($scope, [IManager::SCOPE_ADMIN, IManager::SCOPE_USER], true)) {
+ return $scope;
+ }
+ throw new \InvalidArgumentException('Invalid scope');
+ }
+
+ private function evaluateScopeId(?string $scopeId = null): string {
+ if ($this->scope === IManager::SCOPE_USER
+ && trim((string)$scopeId) === '') {
+ throw new \InvalidArgumentException('user scope requires a user id');
+ }
+ return trim((string)$scopeId);
+ }
+
+ /**
+ * @return int
+ */
+ public function getScope(): int {
+ return $this->scope;
+ }
+
+ /**
+ * @return string
+ */
+ public function getScopeId(): string {
+ return $this->scopeId;
+ }
+
+ public function getHash(): string {
+ if ($this->hash === null) {
+ $this->hash = \hash('sha256', $this->getScope() . '::' . $this->getScopeId());
+ }
+ return $this->hash;
+ }
+}
diff --git a/apps/workflowengine/lib/Listener/LoadAdditionalSettingsScriptsListener.php b/apps/workflowengine/lib/Listener/LoadAdditionalSettingsScriptsListener.php
new file mode 100644
index 00000000000..e5a03fdcb2e
--- /dev/null
+++ b/apps/workflowengine/lib/Listener/LoadAdditionalSettingsScriptsListener.php
@@ -0,0 +1,26 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCA\WorkflowEngine\Listener;
+
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
+use OCP\Util;
+use OCP\WorkflowEngine\Events\LoadSettingsScriptsEvent;
+
+/** @template-implements IEventListener<LoadSettingsScriptsEvent> */
+class LoadAdditionalSettingsScriptsListener implements IEventListener {
+ public function handle(Event $event): void {
+ Util::addScript('core', 'files_fileinfo');
+ Util::addScript('core', 'files_client');
+ Util::addScript('core', 'systemtags');
+ Util::addScript(Application::APP_ID, 'workflowengine');
+ }
+}
diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php
index 48d29cf207e..0f41679789d 100644
--- a/apps/workflowengine/lib/Manager.php
+++ b/apps/workflowengine/lib/Manager.php
@@ -1,150 +1,215 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine;
-
+use Doctrine\DBAL\Exception;
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCA\WorkflowEngine\Check\FileMimeType;
+use OCA\WorkflowEngine\Check\FileName;
+use OCA\WorkflowEngine\Check\FileSize;
+use OCA\WorkflowEngine\Check\FileSystemTags;
+use OCA\WorkflowEngine\Check\RequestRemoteAddress;
+use OCA\WorkflowEngine\Check\RequestTime;
+use OCA\WorkflowEngine\Check\RequestURL;
+use OCA\WorkflowEngine\Check\RequestUserAgent;
+use OCA\WorkflowEngine\Check\UserGroupMembership;
+use OCA\WorkflowEngine\Entity\File;
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCA\WorkflowEngine\Service\Logger;
+use OCA\WorkflowEngine\Service\RuleMatcher;
use OCP\AppFramework\QueryException;
+use OCP\Cache\CappedMemoryCache;
use OCP\DB\QueryBuilder\IQueryBuilder;
-use OCP\Files\Storage\IStorage;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\ICacheFactory;
+use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\IServerContainer;
+use OCP\IUserSession;
+use OCP\WorkflowEngine\Events\RegisterChecksEvent;
+use OCP\WorkflowEngine\Events\RegisterEntitiesEvent;
+use OCP\WorkflowEngine\Events\RegisterOperationsEvent;
use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IComplexOperation;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IEntityEvent;
use OCP\WorkflowEngine\IManager;
use OCP\WorkflowEngine\IOperation;
+use OCP\WorkflowEngine\IRuleMatcher;
+use Psr\Log\LoggerInterface;
class Manager implements IManager {
-
- /** @var IStorage */
- protected $storage;
-
- /** @var string */
- protected $path;
-
/** @var array[] */
protected $operations = [];
/** @var array[] */
protected $checks = [];
- /** @var IDBConnection */
- protected $connection;
+ /** @var IEntity[] */
+ protected $registeredEntities = [];
+
+ /** @var IOperation[] */
+ protected $registeredOperators = [];
+
+ /** @var ICheck[] */
+ protected $registeredChecks = [];
+
+ /** @var CappedMemoryCache<int[]> */
+ protected CappedMemoryCache $operationsByScope;
+
+ public function __construct(
+ protected IDBConnection $connection,
+ protected IServerContainer $container,
+ protected IL10N $l,
+ protected LoggerInterface $logger,
+ protected IUserSession $session,
+ private IEventDispatcher $dispatcher,
+ private IConfig $config,
+ private ICacheFactory $cacheFactory,
+ ) {
+ $this->operationsByScope = new CappedMemoryCache(64);
+ }
- /** @var IServerContainer|\OC\Server */
- protected $container;
+ public function getRuleMatcher(): IRuleMatcher {
+ return new RuleMatcher(
+ $this->session,
+ $this->container,
+ $this->l,
+ $this,
+ $this->container->query(Logger::class)
+ );
+ }
- /** @var IL10N */
- protected $l;
+ public function getAllConfiguredEvents() {
+ $cache = $this->cacheFactory->createDistributed('flow');
+ $cached = $cache->get('events');
+ if ($cached !== null) {
+ return $cached;
+ }
- /**
- * @param IDBConnection $connection
- * @param IServerContainer $container
- * @param IL10N $l
- */
- public function __construct(IDBConnection $connection, IServerContainer $container, IL10N $l) {
- $this->connection = $connection;
- $this->container = $container;
- $this->l = $l;
- }
+ $query = $this->connection->getQueryBuilder();
- /**
- * @inheritdoc
- */
- public function setFileInfo(IStorage $storage, $path) {
- $this->storage = $storage;
- $this->path = $path;
- }
+ $query->select('class', 'entity')
+ ->selectAlias($query->expr()->castColumn('events', IQueryBuilder::PARAM_STR), 'events')
+ ->from('flow_operations')
+ ->where($query->expr()->neq('events', $query->createNamedParameter('[]'), IQueryBuilder::PARAM_STR))
+ ->groupBy('class', 'entity', $query->expr()->castColumn('events', IQueryBuilder::PARAM_STR));
- /**
- * @inheritdoc
- */
- public function getMatchingOperations($class, $returnFirstMatchingOperationOnly = true) {
- $operations = $this->getOperations($class);
+ $result = $query->executeQuery();
+ $operations = [];
+ while ($row = $result->fetch()) {
+ $eventNames = \json_decode($row['events']);
- $matches = [];
- foreach ($operations as $operation) {
- $checkIds = json_decode($operation['checks'], true);
- $checks = $this->getChecks($checkIds);
+ $operation = $row['class'];
+ $entity = $row['entity'];
- foreach ($checks as $check) {
- if (!$this->check($check)) {
- // Check did not match, continue with the next operation
- continue 2;
- }
- }
+ $operations[$operation] = $operations[$row['class']] ?? [];
+ $operations[$operation][$entity] = $operations[$operation][$entity] ?? [];
- if ($returnFirstMatchingOperationOnly) {
- return $operation;
- }
- $matches[] = $operation;
+ $operations[$operation][$entity] = array_unique(array_merge($operations[$operation][$entity], $eventNames ?? []));
}
+ $result->closeCursor();
+
+ $cache->set('events', $operations, 3600);
- return $matches;
+ return $operations;
}
/**
- * @param array $check
- * @return bool
+ * @param string $operationClass
+ * @return ScopeContext[]
*/
- protected function check(array $check) {
+ public function getAllConfiguredScopesForOperation(string $operationClass): array {
+ static $scopesByOperation = [];
+ if (isset($scopesByOperation[$operationClass])) {
+ return $scopesByOperation[$operationClass];
+ }
+
try {
- $checkInstance = $this->container->query($check['class']);
+ /** @var IOperation $operation */
+ $operation = $this->container->query($operationClass);
} catch (QueryException $e) {
- // Check does not exist, assume it matches.
- return true;
+ return [];
}
- if ($checkInstance instanceof ICheck) {
- $checkInstance->setFileInfo($this->storage, $this->path);
- return $checkInstance->executeCheck($check['operator'], $check['value']);
- } else {
- // Check is invalid
- throw new \UnexpectedValueException($this->l->t('Check %s is invalid or does not exist', $check['class']));
+ $query = $this->connection->getQueryBuilder();
+
+ $query->selectDistinct('s.type')
+ ->addSelect('s.value')
+ ->from('flow_operations', 'o')
+ ->leftJoin('o', 'flow_operations_scope', 's', $query->expr()->eq('o.id', 's.operation_id'))
+ ->where($query->expr()->eq('o.class', $query->createParameter('operationClass')));
+
+ $query->setParameters(['operationClass' => $operationClass]);
+ $result = $query->executeQuery();
+
+ $scopesByOperation[$operationClass] = [];
+ while ($row = $result->fetch()) {
+ $scope = new ScopeContext($row['type'], $row['value']);
+
+ if (!$operation->isAvailableForScope((int)$row['type'])) {
+ continue;
+ }
+
+ $scopesByOperation[$operationClass][$scope->getHash()] = $scope;
}
+
+ return $scopesByOperation[$operationClass];
}
- /**
- * @param string $class
- * @return array[]
- */
- public function getOperations($class) {
- if (isset($this->operations[$class])) {
- return $this->operations[$class];
+ public function getAllOperations(ScopeContext $scopeContext): array {
+ if (isset($this->operations[$scopeContext->getHash()])) {
+ return $this->operations[$scopeContext->getHash()];
}
$query = $this->connection->getQueryBuilder();
- $query->select('*')
- ->from('flow_operations')
- ->where($query->expr()->eq('class', $query->createNamedParameter($class)));
- $result = $query->execute();
+ $query->select('o.*')
+ ->selectAlias('s.type', 'scope_type')
+ ->selectAlias('s.value', 'scope_actor_id')
+ ->from('flow_operations', 'o')
+ ->leftJoin('o', 'flow_operations_scope', 's', $query->expr()->eq('o.id', 's.operation_id'))
+ ->where($query->expr()->eq('s.type', $query->createParameter('scope')));
+
+ if ($scopeContext->getScope() === IManager::SCOPE_USER) {
+ $query->andWhere($query->expr()->eq('s.value', $query->createParameter('scopeId')));
+ }
+
+ $query->setParameters(['scope' => $scopeContext->getScope(), 'scopeId' => $scopeContext->getScopeId()]);
+ $result = $query->executeQuery();
- $this->operations[$class] = [];
+ $this->operations[$scopeContext->getHash()] = [];
while ($row = $result->fetch()) {
- $this->operations[$class][] = $row;
+ try {
+ /** @var IOperation $operation */
+ $operation = $this->container->query($row['class']);
+ } catch (QueryException $e) {
+ continue;
+ }
+
+ if (!$operation->isAvailableForScope((int)$row['scope_type'])) {
+ continue;
+ }
+
+ if (!isset($this->operations[$scopeContext->getHash()][$row['class']])) {
+ $this->operations[$scopeContext->getHash()][$row['class']] = [];
+ }
+ $this->operations[$scopeContext->getHash()][$row['class']][] = $row;
}
- $result->closeCursor();
- return $this->operations[$class];
+ return $this->operations[$scopeContext->getHash()];
+ }
+
+ public function getOperations(string $class, ScopeContext $scopeContext): array {
+ if (!isset($this->operations[$scopeContext->getHash()])) {
+ $this->getAllOperations($scopeContext);
+ }
+ return $this->operations[$scopeContext->getHash()][$class] ?? [];
}
/**
@@ -157,7 +222,7 @@ class Manager implements IManager {
$query->select('*')
->from('flow_operations')
->where($query->expr()->eq('id', $query->createNamedParameter($id)));
- $result = $query->execute();
+ $result = $query->executeQuery();
$row = $result->fetch();
$result->closeCursor();
@@ -168,6 +233,31 @@ class Manager implements IManager {
throw new \UnexpectedValueException($this->l->t('Operation #%s does not exist', [$id]));
}
+ protected function insertOperation(
+ string $class,
+ string $name,
+ array $checkIds,
+ string $operation,
+ string $entity,
+ array $events,
+ ): int {
+ $query = $this->connection->getQueryBuilder();
+ $query->insert('flow_operations')
+ ->values([
+ 'class' => $query->createNamedParameter($class),
+ 'name' => $query->createNamedParameter($name),
+ 'checks' => $query->createNamedParameter(json_encode(array_unique($checkIds))),
+ 'operation' => $query->createNamedParameter($operation),
+ 'entity' => $query->createNamedParameter($entity),
+ 'events' => $query->createNamedParameter(json_encode($events))
+ ]);
+ $query->executeStatement();
+
+ $this->cacheFactory->createDistributed('flow')->remove('events');
+
+ return $query->getLastInsertId();
+ }
+
/**
* @param string $class
* @param string $name
@@ -175,29 +265,67 @@ class Manager implements IManager {
* @param string $operation
* @return array The added operation
* @throws \UnexpectedValueException
+ * @throws Exception
*/
- public function addOperation($class, $name, array $checks, $operation) {
- $this->validateOperation($class, $name, $checks, $operation);
+ public function addOperation(
+ string $class,
+ string $name,
+ array $checks,
+ string $operation,
+ ScopeContext $scope,
+ string $entity,
+ array $events,
+ ) {
+ $this->validateOperation($class, $name, $checks, $operation, $scope, $entity, $events);
+
+ $this->connection->beginTransaction();
- $checkIds = [];
- foreach ($checks as $check) {
- $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']);
- }
+ try {
+ $checkIds = [];
+ foreach ($checks as $check) {
+ $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']);
+ }
- $query = $this->connection->getQueryBuilder();
- $query->insert('flow_operations')
- ->values([
- 'class' => $query->createNamedParameter($class),
- 'name' => $query->createNamedParameter($name),
- 'checks' => $query->createNamedParameter(json_encode(array_unique($checkIds))),
- 'operation' => $query->createNamedParameter($operation),
- ]);
- $query->execute();
+ $id = $this->insertOperation($class, $name, $checkIds, $operation, $entity, $events);
+ $this->addScope($id, $scope);
+
+ $this->connection->commit();
+ } catch (Exception $e) {
+ $this->connection->rollBack();
+ throw $e;
+ }
- $id = $query->getLastInsertId();
return $this->getOperation($id);
}
+ protected function canModify(int $id, ScopeContext $scopeContext):bool {
+ if (isset($this->operationsByScope[$scopeContext->getHash()])) {
+ return in_array($id, $this->operationsByScope[$scopeContext->getHash()], true);
+ }
+
+ $qb = $this->connection->getQueryBuilder();
+ $qb = $qb->select('o.id')
+ ->from('flow_operations', 'o')
+ ->leftJoin('o', 'flow_operations_scope', 's', $qb->expr()->eq('o.id', 's.operation_id'))
+ ->where($qb->expr()->eq('s.type', $qb->createParameter('scope')));
+
+ if ($scopeContext->getScope() !== IManager::SCOPE_ADMIN) {
+ $qb->andWhere($qb->expr()->eq('s.value', $qb->createParameter('scopeId')));
+ }
+
+ $qb->setParameters(['scope' => $scopeContext->getScope(), 'scopeId' => $scopeContext->getScopeId()]);
+ $result = $qb->executeQuery();
+
+ $operations = [];
+ while (($opId = $result->fetchOne()) !== false) {
+ $operations[] = (int)$opId;
+ }
+ $this->operationsByScope[$scopeContext->getHash()] = $operations;
+ $result->closeCursor();
+
+ return in_array($id, $this->operationsByScope[$scopeContext->getHash()], true);
+ }
+
/**
* @param int $id
* @param string $name
@@ -205,23 +333,47 @@ class Manager implements IManager {
* @param string $operation
* @return array The updated operation
* @throws \UnexpectedValueException
+ * @throws \DomainException
+ * @throws Exception
*/
- public function updateOperation($id, $name, array $checks, $operation) {
+ public function updateOperation(
+ int $id,
+ string $name,
+ array $checks,
+ string $operation,
+ ScopeContext $scopeContext,
+ string $entity,
+ array $events,
+ ): array {
+ if (!$this->canModify($id, $scopeContext)) {
+ throw new \DomainException('Target operation not within scope');
+ };
$row = $this->getOperation($id);
- $this->validateOperation($row['class'], $name, $checks, $operation);
+ $this->validateOperation($row['class'], $name, $checks, $operation, $scopeContext, $entity, $events);
$checkIds = [];
- foreach ($checks as $check) {
- $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']);
- }
+ try {
+ $this->connection->beginTransaction();
+ foreach ($checks as $check) {
+ $checkIds[] = $this->addCheck($check['class'], $check['operator'], $check['value']);
+ }
- $query = $this->connection->getQueryBuilder();
- $query->update('flow_operations')
- ->set('name', $query->createNamedParameter($name))
- ->set('checks', $query->createNamedParameter(json_encode(array_unique($checkIds))))
- ->set('operation', $query->createNamedParameter($operation))
- ->where($query->expr()->eq('id', $query->createNamedParameter($id)));
- $query->execute();
+ $query = $this->connection->getQueryBuilder();
+ $query->update('flow_operations')
+ ->set('name', $query->createNamedParameter($name))
+ ->set('checks', $query->createNamedParameter(json_encode(array_unique($checkIds))))
+ ->set('operation', $query->createNamedParameter($operation))
+ ->set('entity', $query->createNamedParameter($entity))
+ ->set('events', $query->createNamedParameter(json_encode($events)))
+ ->where($query->expr()->eq('id', $query->createNamedParameter($id)));
+ $query->execute();
+ $this->connection->commit();
+ } catch (Exception $e) {
+ $this->connection->rollBack();
+ throw $e;
+ }
+ unset($this->operations[$scopeContext->getHash()]);
+ $this->cacheFactory->createDistributed('flow')->remove('events');
return $this->getOperation($id);
}
@@ -230,12 +382,69 @@ class Manager implements IManager {
* @param int $id
* @return bool
* @throws \UnexpectedValueException
+ * @throws Exception
+ * @throws \DomainException
*/
- public function deleteOperation($id) {
+ public function deleteOperation($id, ScopeContext $scopeContext) {
+ if (!$this->canModify($id, $scopeContext)) {
+ throw new \DomainException('Target operation not within scope');
+ };
$query = $this->connection->getQueryBuilder();
- $query->delete('flow_operations')
- ->where($query->expr()->eq('id', $query->createNamedParameter($id)));
- return (bool) $query->execute();
+ try {
+ $this->connection->beginTransaction();
+ $result = (bool)$query->delete('flow_operations')
+ ->where($query->expr()->eq('id', $query->createNamedParameter($id)))
+ ->executeStatement();
+ if ($result) {
+ $qb = $this->connection->getQueryBuilder();
+ $result &= (bool)$qb->delete('flow_operations_scope')
+ ->where($qb->expr()->eq('operation_id', $qb->createNamedParameter($id)))
+ ->executeStatement();
+ }
+ $this->connection->commit();
+ } catch (Exception $e) {
+ $this->connection->rollBack();
+ throw $e;
+ }
+
+ if (isset($this->operations[$scopeContext->getHash()])) {
+ unset($this->operations[$scopeContext->getHash()]);
+ }
+
+ $this->cacheFactory->createDistributed('flow')->remove('events');
+
+ return $result;
+ }
+
+ protected function validateEvents(string $entity, array $events, IOperation $operation) {
+ try {
+ /** @var IEntity $instance */
+ $instance = $this->container->query($entity);
+ } catch (QueryException $e) {
+ throw new \UnexpectedValueException($this->l->t('Entity %s does not exist', [$entity]));
+ }
+
+ if (!$instance instanceof IEntity) {
+ throw new \UnexpectedValueException($this->l->t('Entity %s is invalid', [$entity]));
+ }
+
+ if (empty($events)) {
+ if (!$operation instanceof IComplexOperation) {
+ throw new \UnexpectedValueException($this->l->t('No events are chosen.'));
+ }
+ return;
+ }
+
+ $availableEvents = [];
+ foreach ($instance->getEvents() as $event) {
+ /** @var IEntityEvent $event */
+ $availableEvents[] = $event->getEventName();
+ }
+
+ $diff = array_diff($events, $availableEvents);
+ if (!empty($diff)) {
+ throw new \UnexpectedValueException($this->l->t('Entity %s has no event %s', [$entity, array_shift($diff)]));
+ }
}
/**
@@ -243,9 +452,12 @@ class Manager implements IManager {
* @param string $name
* @param array[] $checks
* @param string $operation
+ * @param ScopeContext $scope
+ * @param string $entity
+ * @param array $events
* @throws \UnexpectedValueException
*/
- protected function validateOperation($class, $name, array $checks, $operation) {
+ public function validateOperation($class, $name, array $checks, $operation, ScopeContext $scope, string $entity, array $events) {
try {
/** @var IOperation $instance */
$instance = $this->container->query($class);
@@ -257,9 +469,27 @@ class Manager implements IManager {
throw new \UnexpectedValueException($this->l->t('Operation %s is invalid', [$class]));
}
+ if (!$instance->isAvailableForScope($scope->getScope())) {
+ throw new \UnexpectedValueException($this->l->t('Operation %s is invalid', [$class]));
+ }
+
+ $this->validateEvents($entity, $events, $instance);
+
+ if (count($checks) === 0) {
+ throw new \UnexpectedValueException($this->l->t('At least one check needs to be provided'));
+ }
+
+ if (strlen((string)$operation) > IManager::MAX_OPERATION_VALUE_BYTES) {
+ throw new \UnexpectedValueException($this->l->t('The provided operation data is too long'));
+ }
+
$instance->validateOperation($name, $checks, $operation);
foreach ($checks as $check) {
+ if (!is_string($check['class'])) {
+ throw new \UnexpectedValueException($this->l->t('Invalid check provided'));
+ }
+
try {
/** @var ICheck $instance */
$instance = $this->container->query($check['class']);
@@ -271,6 +501,16 @@ class Manager implements IManager {
throw new \UnexpectedValueException($this->l->t('Check %s is invalid', [$class]));
}
+ if (!empty($instance->supportedEntities())
+ && !in_array($entity, $instance->supportedEntities())
+ ) {
+ throw new \UnexpectedValueException($this->l->t('Check %s is not allowed with this entity', [$class]));
+ }
+
+ if (strlen((string)$check['value']) > IManager::MAX_CHECK_VALUE_BYTES) {
+ throw new \UnexpectedValueException($this->l->t('The provided check value is too long'));
+ }
+
$instance->validateCheck($check['operator'], $check['value']);
}
}
@@ -298,11 +538,11 @@ class Manager implements IManager {
$query->select('*')
->from('flow_checks')
->where($query->expr()->in('id', $query->createNamedParameter($checkIds, IQueryBuilder::PARAM_INT_ARRAY)));
- $result = $query->execute();
+ $result = $query->executeQuery();
while ($row = $result->fetch()) {
- $this->checks[(int) $row['id']] = $row;
- $checks[(int) $row['id']] = $row;
+ $this->checks[(int)$row['id']] = $row;
+ $checks[(int)$row['id']] = $row;
}
$result->closeCursor();
@@ -329,11 +569,11 @@ class Manager implements IManager {
$query->select('id')
->from('flow_checks')
->where($query->expr()->eq('hash', $query->createNamedParameter($hash)));
- $result = $query->execute();
+ $result = $query->executeQuery();
if ($row = $result->fetch()) {
$result->closeCursor();
- return (int) $row['id'];
+ return (int)$row['id'];
}
$query = $this->connection->getQueryBuilder();
@@ -344,8 +584,131 @@ class Manager implements IManager {
'value' => $query->createNamedParameter($value),
'hash' => $query->createNamedParameter($hash),
]);
- $query->execute();
+ $query->executeStatement();
return $query->getLastInsertId();
}
+
+ protected function addScope(int $operationId, ScopeContext $scope): void {
+ $query = $this->connection->getQueryBuilder();
+
+ $insertQuery = $query->insert('flow_operations_scope');
+ $insertQuery->values([
+ 'operation_id' => $query->createNamedParameter($operationId),
+ 'type' => $query->createNamedParameter($scope->getScope()),
+ 'value' => $query->createNamedParameter($scope->getScopeId()),
+ ]);
+ $insertQuery->executeStatement();
+ }
+
+ public function formatOperation(array $operation): array {
+ $checkIds = json_decode($operation['checks'], true);
+ $checks = $this->getChecks($checkIds);
+
+ $operation['checks'] = [];
+ foreach ($checks as $check) {
+ // Remove internal values
+ unset($check['id']);
+ unset($check['hash']);
+
+ $operation['checks'][] = $check;
+ }
+ $operation['events'] = json_decode($operation['events'], true) ?? [];
+
+
+ return $operation;
+ }
+
+ /**
+ * @return IEntity[]
+ */
+ public function getEntitiesList(): array {
+ $this->dispatcher->dispatchTyped(new RegisterEntitiesEvent($this));
+
+ return array_values(array_merge($this->getBuildInEntities(), $this->registeredEntities));
+ }
+
+ /**
+ * @return IOperation[]
+ */
+ public function getOperatorList(): array {
+ $this->dispatcher->dispatchTyped(new RegisterOperationsEvent($this));
+
+ return array_merge($this->getBuildInOperators(), $this->registeredOperators);
+ }
+
+ /**
+ * @return ICheck[]
+ */
+ public function getCheckList(): array {
+ $this->dispatcher->dispatchTyped(new RegisterChecksEvent($this));
+
+ return array_merge($this->getBuildInChecks(), $this->registeredChecks);
+ }
+
+ public function registerEntity(IEntity $entity): void {
+ $this->registeredEntities[get_class($entity)] = $entity;
+ }
+
+ public function registerOperation(IOperation $operator): void {
+ $this->registeredOperators[get_class($operator)] = $operator;
+ }
+
+ public function registerCheck(ICheck $check): void {
+ $this->registeredChecks[get_class($check)] = $check;
+ }
+
+ /**
+ * @return IEntity[]
+ */
+ protected function getBuildInEntities(): array {
+ try {
+ return [
+ File::class => $this->container->query(File::class),
+ ];
+ } catch (QueryException $e) {
+ $this->logger->error($e->getMessage(), ['exception' => $e]);
+ return [];
+ }
+ }
+
+ /**
+ * @return IOperation[]
+ */
+ protected function getBuildInOperators(): array {
+ try {
+ return [
+ // None yet
+ ];
+ } catch (QueryException $e) {
+ $this->logger->error($e->getMessage(), ['exception' => $e]);
+ return [];
+ }
+ }
+
+ /**
+ * @return ICheck[]
+ */
+ protected function getBuildInChecks(): array {
+ try {
+ return [
+ $this->container->query(FileMimeType::class),
+ $this->container->query(FileName::class),
+ $this->container->query(FileSize::class),
+ $this->container->query(FileSystemTags::class),
+ $this->container->query(RequestRemoteAddress::class),
+ $this->container->query(RequestTime::class),
+ $this->container->query(RequestURL::class),
+ $this->container->query(RequestUserAgent::class),
+ $this->container->query(UserGroupMembership::class),
+ ];
+ } catch (QueryException $e) {
+ $this->logger->error($e->getMessage(), ['exception' => $e]);
+ return [];
+ }
+ }
+
+ public function isUserScopeEnabled(): bool {
+ return $this->config->getAppValue(Application::APP_ID, 'user_scope_disabled', 'no') === 'no';
+ }
}
diff --git a/apps/workflowengine/lib/Migration/PopulateNewlyIntroducedDatabaseFields.php b/apps/workflowengine/lib/Migration/PopulateNewlyIntroducedDatabaseFields.php
new file mode 100644
index 00000000000..633d946cd7e
--- /dev/null
+++ b/apps/workflowengine/lib/Migration/PopulateNewlyIntroducedDatabaseFields.php
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Migration;
+
+use OCP\DB\IResult;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+use OCP\WorkflowEngine\IManager;
+
+class PopulateNewlyIntroducedDatabaseFields implements IRepairStep {
+
+ public function __construct(
+ private IDBConnection $dbc,
+ ) {
+ }
+
+ public function getName() {
+ return 'Populating added database structures for workflows';
+ }
+
+ public function run(IOutput $output) {
+ $result = $this->getIdsWithoutScope();
+
+ $this->populateScopeTable($result);
+
+ $result->closeCursor();
+ }
+
+ protected function populateScopeTable(IResult $ids): void {
+ $qb = $this->dbc->getQueryBuilder();
+
+ $insertQuery = $qb->insert('flow_operations_scope');
+ while (($id = $ids->fetchOne()) !== false) {
+ $insertQuery->values(['operation_id' => $qb->createNamedParameter($id), 'type' => IManager::SCOPE_ADMIN]);
+ $insertQuery->executeStatement();
+ }
+ }
+
+ protected function getIdsWithoutScope(): IResult {
+ $qb = $this->dbc->getQueryBuilder();
+ $selectQuery = $qb->select('o.id')
+ ->from('flow_operations', 'o')
+ ->leftJoin('o', 'flow_operations_scope', 's', $qb->expr()->eq('o.id', 's.operation_id'))
+ ->where($qb->expr()->isNull('s.operation_id'));
+ // The left join operation is not necessary, usually, but it's a safe-guard
+ // in case the repair step is executed multiple times for whatever reason.
+
+ /** @var IResult $result */
+ $result = $selectQuery->executeQuery();
+ return $result;
+ }
+}
diff --git a/apps/workflowengine/lib/Migration/Version2000Date20190808074233.php b/apps/workflowengine/lib/Migration/Version2000Date20190808074233.php
new file mode 100644
index 00000000000..93f423cada7
--- /dev/null
+++ b/apps/workflowengine/lib/Migration/Version2000Date20190808074233.php
@@ -0,0 +1,134 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Migration;
+
+use Closure;
+use Doctrine\DBAL\Schema\Table;
+use OCA\WorkflowEngine\Entity\File;
+use OCP\DB\ISchemaWrapper;
+use OCP\DB\Types;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version2000Date20190808074233 extends SimpleMigrationStep {
+
+ /**
+ * @param IOutput $output
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ if (!$schema->hasTable('flow_checks')) {
+ $table = $schema->createTable('flow_checks');
+ $table->addColumn('id', Types::INTEGER, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 4,
+ ]);
+ $table->addColumn('class', Types::STRING, [
+ 'notnull' => true,
+ 'length' => 256,
+ 'default' => '',
+ ]);
+ $table->addColumn('operator', Types::STRING, [
+ 'notnull' => true,
+ 'length' => 16,
+ 'default' => '',
+ ]);
+ $table->addColumn('value', Types::TEXT, [
+ 'notnull' => false,
+ ]);
+ $table->addColumn('hash', Types::STRING, [
+ 'notnull' => true,
+ 'length' => 32,
+ 'default' => '',
+ ]);
+ $table->setPrimaryKey(['id']);
+ $table->addUniqueIndex(['hash'], 'flow_unique_hash');
+ }
+
+ if (!$schema->hasTable('flow_operations')) {
+ $table = $schema->createTable('flow_operations');
+ $table->addColumn('id', Types::INTEGER, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 4,
+ ]);
+ $table->addColumn('class', Types::STRING, [
+ 'notnull' => true,
+ 'length' => 256,
+ 'default' => '',
+ ]);
+ $table->addColumn('name', Types::STRING, [
+ 'notnull' => false,
+ 'length' => 256,
+ 'default' => '',
+ ]);
+ $table->addColumn('checks', Types::TEXT, [
+ 'notnull' => false,
+ ]);
+ $table->addColumn('operation', Types::TEXT, [
+ 'notnull' => false,
+ ]);
+ $this->ensureEntityColumns($table);
+ $table->setPrimaryKey(['id']);
+ } else {
+ $table = $schema->getTable('flow_operations');
+ $this->ensureEntityColumns($table);
+ }
+
+ if (!$schema->hasTable('flow_operations_scope')) {
+ $table = $schema->createTable('flow_operations_scope');
+ $table->addColumn('id', Types::BIGINT, [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 4,
+ ]);
+ $table->addColumn('operation_id', Types::INTEGER, [
+ 'notnull' => true,
+ 'length' => 4,
+ 'default' => 0,
+ ]);
+ $table->addColumn('type', Types::INTEGER, [
+ 'notnull' => true,
+ 'length' => 4,
+ 'default' => 0,
+ ]);
+ $table->addColumn('value', Types::STRING, [
+ 'notnull' => false,
+ 'length' => 64,
+ 'default' => '',
+ ]);
+ $table->setPrimaryKey(['id']);
+ $table->addUniqueIndex(['operation_id', 'type', 'value'], 'flow_unique_scope');
+ }
+
+ return $schema;
+ }
+
+ protected function ensureEntityColumns(Table $table) {
+ if (!$table->hasColumn('entity')) {
+ $table->addColumn('entity', Types::STRING, [
+ 'notnull' => true,
+ 'length' => 256,
+ 'default' => File::class,
+ ]);
+ }
+ if (!$table->hasColumn('events')) {
+ $table->addColumn('events', Types::TEXT, [
+ 'notnull' => true,
+ 'default' => '[]',
+ ]);
+ }
+ }
+}
diff --git a/apps/workflowengine/lib/Migration/Version2200Date20210805101925.php b/apps/workflowengine/lib/Migration/Version2200Date20210805101925.php
new file mode 100644
index 00000000000..841277acfce
--- /dev/null
+++ b/apps/workflowengine/lib/Migration/Version2200Date20210805101925.php
@@ -0,0 +1,37 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Migration;
+
+use Closure;
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version2200Date20210805101925 extends SimpleMigrationStep {
+
+ /**
+ * @param IOutput $output
+ * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ */
+ public function changeSchema(IOutput $output, Closure $schemaClosure, array $options) {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ if ($schema->hasTable('flow_operations')) {
+ $table = $schema->getTable('flow_operations');
+ $table->changeColumn('name', [
+ 'notnull' => false,
+ ]);
+ }
+
+ return $schema;
+ }
+}
diff --git a/apps/workflowengine/lib/Service/Logger.php b/apps/workflowengine/lib/Service/Logger.php
new file mode 100644
index 00000000000..494240bc403
--- /dev/null
+++ b/apps/workflowengine/lib/Service/Logger.php
@@ -0,0 +1,152 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Service;
+
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCA\WorkflowEngine\Helper\LogContext;
+use OCP\IConfig;
+use OCP\ILogger;
+use OCP\Log\IDataLogger;
+use OCP\Log\ILogFactory;
+use Psr\Log\LoggerInterface;
+
+class Logger {
+ protected ?LoggerInterface $flowLogger = null;
+
+ public function __construct(
+ protected LoggerInterface $generalLogger,
+ private IConfig $config,
+ private ILogFactory $logFactory,
+ ) {
+ $this->initLogger();
+ }
+
+ protected function initLogger(): void {
+ $default = $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/flow.log';
+ $logFile = trim((string)$this->config->getAppValue(Application::APP_ID, 'logfile', $default));
+ if ($logFile !== '') {
+ $this->flowLogger = $this->logFactory->getCustomPsrLogger($logFile);
+ }
+ }
+
+ public function logFlowRequests(LogContext $logContext) {
+ $message = 'Flow activation: rules were requested for operation {op}';
+ $context = ['op' => $logContext->getDetails()['operation']['name'], 'level' => ILogger::DEBUG];
+
+ $logContext->setDescription('Flow activation: rules were requested');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logScopeExpansion(LogContext $logContext) {
+ $message = 'Flow rule of a different user is legit for operation {op}';
+ $context = ['op' => $logContext->getDetails()['operation']['name']];
+
+ $logContext->setDescription('Flow rule of a different user is legit');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logPassedCheck(LogContext $logContext) {
+ $message = 'Flow rule qualified to run {op}, config: {config}';
+ $context = [
+ 'op' => $logContext->getDetails()['operation']['name'],
+ 'config' => $logContext->getDetails()['configuration'],
+ 'level' => ILogger::DEBUG,
+ ];
+
+ $logContext->setDescription('Flow rule qualified to run');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logRunSingle(LogContext $logContext) {
+ $message = 'Last qualified flow configuration is going to run {op}';
+ $context = [
+ 'op' => $logContext->getDetails()['operation']['name'],
+ ];
+
+ $logContext->setDescription('Last qualified flow configuration is going to run');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logRunAll(LogContext $logContext) {
+ $message = 'All qualified flow configurations are going to run {op}';
+ $context = [
+ 'op' => $logContext->getDetails()['operation']['name'],
+ ];
+
+ $logContext->setDescription('All qualified flow configurations are going to run');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logRunNone(LogContext $logContext) {
+ $message = 'No flow configurations is going to run {op}';
+ $context = [
+ 'op' => $logContext->getDetails()['operation']['name'],
+ 'level' => ILogger::DEBUG,
+ ];
+
+ $logContext->setDescription('No flow configurations is going to run');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logEventInit(LogContext $logContext) {
+ $message = 'Flow activated by event {ev}';
+
+ $context = [
+ 'ev' => $logContext->getDetails()['eventName'],
+ 'level' => ILogger::DEBUG,
+ ];
+
+ $logContext->setDescription('Flow activated by event');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ public function logEventDone(LogContext $logContext) {
+ $message = 'Flow handling done for event {ev}';
+
+ $context = [
+ 'ev' => $logContext->getDetails()['eventName'],
+ ];
+
+ $logContext->setDescription('Flow handling for event done');
+
+ $this->log($message, $context, $logContext);
+ }
+
+ protected function log(
+ string $message,
+ array $context,
+ LogContext $logContext,
+ ): void {
+ if (!isset($context['app'])) {
+ $context['app'] = Application::APP_ID;
+ }
+ if (!isset($context['level'])) {
+ $context['level'] = ILogger::INFO;
+ }
+ $this->generalLogger->log($context['level'], $message, $context);
+
+ if (!$this->flowLogger instanceof IDataLogger) {
+ return;
+ }
+
+ $details = $logContext->getDetails();
+ $this->flowLogger->logData(
+ $details['message'],
+ $details,
+ ['app' => Application::APP_ID, 'level' => $context['level']]
+ );
+ }
+}
diff --git a/apps/workflowengine/lib/Service/RuleMatcher.php b/apps/workflowengine/lib/Service/RuleMatcher.php
new file mode 100644
index 00000000000..c95387e14ee
--- /dev/null
+++ b/apps/workflowengine/lib/Service/RuleMatcher.php
@@ -0,0 +1,211 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Service;
+
+use OCA\WorkflowEngine\Helper\LogContext;
+use OCA\WorkflowEngine\Helper\ScopeContext;
+use OCA\WorkflowEngine\Manager;
+use OCP\AppFramework\QueryException;
+use OCP\Files\Storage\IStorage;
+use OCP\IL10N;
+use OCP\IServerContainer;
+use OCP\IUserSession;
+use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IEntityCheck;
+use OCP\WorkflowEngine\IFileCheck;
+use OCP\WorkflowEngine\IManager;
+use OCP\WorkflowEngine\IOperation;
+use OCP\WorkflowEngine\IRuleMatcher;
+use RuntimeException;
+
+class RuleMatcher implements IRuleMatcher {
+
+ /** @var array */
+ protected $contexts;
+ /** @var array */
+ protected $fileInfo = [];
+ /** @var IOperation */
+ protected $operation;
+ /** @var IEntity */
+ protected $entity;
+ /** @var string */
+ protected $eventName;
+
+ public function __construct(
+ protected IUserSession $session,
+ protected IServerContainer $container,
+ protected IL10N $l,
+ protected Manager $manager,
+ protected Logger $logger,
+ ) {
+ }
+
+ public function setFileInfo(IStorage $storage, string $path, bool $isDir = false): void {
+ $this->fileInfo['storage'] = $storage;
+ $this->fileInfo['path'] = $path;
+ $this->fileInfo['isDir'] = $isDir;
+ }
+
+ public function setEntitySubject(IEntity $entity, $subject): void {
+ $this->contexts[get_class($entity)] = [$entity, $subject];
+ }
+
+ public function setOperation(IOperation $operation): void {
+ if ($this->operation !== null) {
+ throw new RuntimeException('This method must not be called more than once');
+ }
+ $this->operation = $operation;
+ }
+
+ public function setEntity(IEntity $entity): void {
+ if ($this->entity !== null) {
+ throw new RuntimeException('This method must not be called more than once');
+ }
+ $this->entity = $entity;
+ }
+
+ public function setEventName(string $eventName): void {
+ if ($this->eventName !== null) {
+ throw new RuntimeException('This method must not be called more than once');
+ }
+ $this->eventName = $eventName;
+ }
+
+ public function getEntity(): IEntity {
+ if ($this->entity === null) {
+ throw new \LogicException('Entity was not set yet');
+ }
+ return $this->entity;
+ }
+
+ public function getFlows(bool $returnFirstMatchingOperationOnly = true): array {
+ if (!$this->operation) {
+ throw new RuntimeException('Operation is not set');
+ }
+ return $this->getMatchingOperations(get_class($this->operation), $returnFirstMatchingOperationOnly);
+ }
+
+ public function getMatchingOperations(string $class, bool $returnFirstMatchingOperationOnly = true): array {
+ $scopes[] = new ScopeContext(IManager::SCOPE_ADMIN);
+ $user = $this->session->getUser();
+ if ($user !== null && $this->manager->isUserScopeEnabled()) {
+ $scopes[] = new ScopeContext(IManager::SCOPE_USER, $user->getUID());
+ }
+
+ $ctx = new LogContext();
+ $ctx
+ ->setScopes($scopes)
+ ->setEntity($this->entity)
+ ->setOperation($this->operation);
+ $this->logger->logFlowRequests($ctx);
+
+ $operations = [];
+ foreach ($scopes as $scope) {
+ $operations = array_merge($operations, $this->manager->getOperations($class, $scope));
+ }
+
+ if ($this->entity instanceof IEntity) {
+ /** @var ScopeContext[] $additionalScopes */
+ $additionalScopes = $this->manager->getAllConfiguredScopesForOperation($class);
+ foreach ($additionalScopes as $hash => $scopeCandidate) {
+ if ($scopeCandidate->getScope() !== IManager::SCOPE_USER || in_array($scopeCandidate, $scopes)) {
+ continue;
+ }
+ if ($this->entity->isLegitimatedForUserId($scopeCandidate->getScopeId())) {
+ $ctx = new LogContext();
+ $ctx
+ ->setScopes([$scopeCandidate])
+ ->setEntity($this->entity)
+ ->setOperation($this->operation);
+ $this->logger->logScopeExpansion($ctx);
+ $operations = array_merge($operations, $this->manager->getOperations($class, $scopeCandidate));
+ }
+ }
+ }
+
+ $matches = [];
+ foreach ($operations as $operation) {
+ $configuredEvents = json_decode($operation['events'], true);
+ if ($this->eventName !== null && !in_array($this->eventName, $configuredEvents)) {
+ continue;
+ }
+
+ $checkIds = json_decode($operation['checks'], true);
+ $checks = $this->manager->getChecks($checkIds);
+
+ foreach ($checks as $check) {
+ if (!$this->check($check)) {
+ // Check did not match, continue with the next operation
+ continue 2;
+ }
+ }
+
+ $ctx = new LogContext();
+ $ctx
+ ->setEntity($this->entity)
+ ->setOperation($this->operation)
+ ->setConfiguration($operation);
+ $this->logger->logPassedCheck($ctx);
+
+ if ($returnFirstMatchingOperationOnly) {
+ $ctx = new LogContext();
+ $ctx
+ ->setEntity($this->entity)
+ ->setOperation($this->operation)
+ ->setConfiguration($operation);
+ $this->logger->logRunSingle($ctx);
+ return $operation;
+ }
+ $matches[] = $operation;
+ }
+
+ $ctx = new LogContext();
+ $ctx
+ ->setEntity($this->entity)
+ ->setOperation($this->operation);
+ if (!empty($matches)) {
+ $ctx->setConfiguration($matches);
+ $this->logger->logRunAll($ctx);
+ } else {
+ $this->logger->logRunNone($ctx);
+ }
+
+ return $matches;
+ }
+
+ /**
+ * @param array $check
+ * @return bool
+ */
+ public function check(array $check) {
+ try {
+ $checkInstance = $this->container->query($check['class']);
+ } catch (QueryException $e) {
+ // Check does not exist, assume it matches.
+ return true;
+ }
+
+ if ($checkInstance instanceof IFileCheck) {
+ if (empty($this->fileInfo)) {
+ throw new RuntimeException('Must set file info before running the check');
+ }
+ $checkInstance->setFileInfo($this->fileInfo['storage'], $this->fileInfo['path'], $this->fileInfo['isDir']);
+ } elseif ($checkInstance instanceof IEntityCheck) {
+ foreach ($this->contexts as $entityInfo) {
+ [$entity, $subject] = $entityInfo;
+ $checkInstance->setEntitySubject($entity, $subject);
+ }
+ } elseif (!$checkInstance instanceof ICheck) {
+ // Check is invalid
+ throw new \UnexpectedValueException($this->l->t('Check %s is invalid or does not exist', $check['class']));
+ }
+ return $checkInstance->executeCheck($check['operator'], $check['value']);
+ }
+}
diff --git a/apps/workflowengine/lib/Settings/ASettings.php b/apps/workflowengine/lib/Settings/ASettings.php
new file mode 100644
index 00000000000..23e958755de
--- /dev/null
+++ b/apps/workflowengine/lib/Settings/ASettings.php
@@ -0,0 +1,155 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Settings;
+
+use OCA\WorkflowEngine\AppInfo\Application;
+use OCA\WorkflowEngine\Manager;
+use OCP\AppFramework\Http\TemplateResponse;
+use OCP\AppFramework\Services\IInitialState;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\Settings\ISettings;
+use OCP\WorkflowEngine\Events\LoadSettingsScriptsEvent;
+use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IComplexOperation;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IEntityEvent;
+use OCP\WorkflowEngine\IOperation;
+use OCP\WorkflowEngine\ISpecificOperation;
+
+abstract class ASettings implements ISettings {
+ public function __construct(
+ private string $appName,
+ private IL10N $l10n,
+ private IEventDispatcher $eventDispatcher,
+ protected Manager $manager,
+ private IInitialState $initialStateService,
+ private IConfig $config,
+ private IURLGenerator $urlGenerator,
+ ) {
+ }
+
+ abstract public function getScope(): int;
+
+ /**
+ * @return TemplateResponse
+ */
+ public function getForm(): TemplateResponse {
+ // @deprecated in 20.0.0: retire this one in favor of the typed event
+ $this->eventDispatcher->dispatch(
+ 'OCP\WorkflowEngine::loadAdditionalSettingScripts',
+ new LoadSettingsScriptsEvent()
+ );
+ $this->eventDispatcher->dispatchTyped(new LoadSettingsScriptsEvent());
+
+ $entities = $this->manager->getEntitiesList();
+ $this->initialStateService->provideInitialState(
+ 'entities',
+ $this->entitiesToArray($entities)
+ );
+
+ $operators = $this->manager->getOperatorList();
+ $this->initialStateService->provideInitialState(
+ 'operators',
+ $this->operatorsToArray($operators)
+ );
+
+ $checks = $this->manager->getCheckList();
+ $this->initialStateService->provideInitialState(
+ 'checks',
+ $this->checksToArray($checks)
+ );
+
+ $this->initialStateService->provideInitialState(
+ 'scope',
+ $this->getScope()
+ );
+
+ $this->initialStateService->provideInitialState(
+ 'appstoreenabled',
+ $this->config->getSystemValueBool('appstoreenabled', true)
+ );
+
+ $this->initialStateService->provideInitialState(
+ 'doc-url',
+ $this->urlGenerator->linkToDocs('admin-workflowengine')
+ );
+
+ return new TemplateResponse(Application::APP_ID, 'settings', [], 'blank');
+ }
+
+ /**
+ * @return string the section ID, e.g. 'sharing'
+ */
+ public function getSection(): ?string {
+ return 'workflow';
+ }
+
+ /**
+ * @return int whether the form should be rather on the top or bottom of
+ * the admin section. The forms are arranged in ascending order of the
+ * priority values. It is required to return a value between 0 and 100.
+ *
+ * E.g.: 70
+ */
+ public function getPriority(): int {
+ return 0;
+ }
+
+ private function entitiesToArray(array $entities) {
+ return array_map(function (IEntity $entity) {
+ $events = array_map(function (IEntityEvent $entityEvent) {
+ return [
+ 'eventName' => $entityEvent->getEventName(),
+ 'displayName' => $entityEvent->getDisplayName()
+ ];
+ }, $entity->getEvents());
+
+ return [
+ 'id' => get_class($entity),
+ 'icon' => $entity->getIcon(),
+ 'name' => $entity->getName(),
+ 'events' => $events,
+ ];
+ }, $entities);
+ }
+
+ private function operatorsToArray(array $operators) {
+ $operators = array_filter($operators, function (IOperation $operator) {
+ return $operator->isAvailableForScope($this->getScope());
+ });
+
+ return array_map(function (IOperation $operator) {
+ return [
+ 'id' => get_class($operator),
+ 'icon' => $operator->getIcon(),
+ 'name' => $operator->getDisplayName(),
+ 'description' => $operator->getDescription(),
+ 'fixedEntity' => $operator instanceof ISpecificOperation ? $operator->getEntityId() : '',
+ 'isComplex' => $operator instanceof IComplexOperation,
+ 'triggerHint' => $operator instanceof IComplexOperation ? $operator->getTriggerHint() : '',
+ ];
+ }, $operators);
+ }
+
+ private function checksToArray(array $checks) {
+ $checks = array_filter($checks, function (ICheck $check) {
+ return $check->isAvailableForScope($this->getScope());
+ });
+
+ return array_map(function (ICheck $check) {
+ return [
+ 'id' => get_class($check),
+ 'supportedEntities' => $check->supportedEntities(),
+ ];
+ }, $checks);
+ }
+}
diff --git a/apps/workflowengine/lib/Settings/Admin.php b/apps/workflowengine/lib/Settings/Admin.php
new file mode 100644
index 00000000000..c2018593c66
--- /dev/null
+++ b/apps/workflowengine/lib/Settings/Admin.php
@@ -0,0 +1,17 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Settings;
+
+use OCP\WorkflowEngine\IManager;
+
+class Admin extends ASettings {
+ public function getScope(): int {
+ return IManager::SCOPE_ADMIN;
+ }
+}
diff --git a/apps/workflowengine/lib/Settings/Personal.php b/apps/workflowengine/lib/Settings/Personal.php
new file mode 100644
index 00000000000..0a70f8dbe75
--- /dev/null
+++ b/apps/workflowengine/lib/Settings/Personal.php
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Settings;
+
+use OCP\WorkflowEngine\IManager;
+
+class Personal extends ASettings {
+ public function getScope(): int {
+ return IManager::SCOPE_USER;
+ }
+
+ public function getSection(): ?string {
+ return $this->manager->isUserScopeEnabled() ? 'workflow' : null;
+ }
+}
diff --git a/apps/workflowengine/lib/Settings/Section.php b/apps/workflowengine/lib/Settings/Section.php
index b46f9a4a35f..aa790c9ddcc 100644
--- a/apps/workflowengine/lib/Settings/Section.php
+++ b/apps/workflowengine/lib/Settings/Section.php
@@ -1,45 +1,25 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Lukas Reschke <lukas@statuscode.ch>
- *
- * @author Lukas Reschke <lukas@statuscode.ch>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Settings;
+use OCA\WorkflowEngine\AppInfo\Application;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\Settings\IIconSection;
class Section implements IIconSection {
- /** @var IL10N */
- private $l;
- /** @var IURLGenerator */
- private $url;
-
/**
* @param IURLGenerator $url
* @param IL10N $l
*/
- public function __construct(IURLGenerator $url, IL10N $l) {
- $this->url = $url;
- $this->l = $l;
+ public function __construct(
+ private IURLGenerator $url,
+ private IL10N $l,
+ ) {
}
/**
@@ -53,7 +33,7 @@ class Section implements IIconSection {
* {@inheritdoc}
*/
public function getName() {
- return $this->l->t('Workflow');
+ return $this->l->t('Flow');
}
/**
@@ -67,6 +47,6 @@ class Section implements IIconSection {
* {@inheritdoc}
*/
public function getIcon() {
- return $this->url->imagePath('core', 'actions/tag.svg');
+ return $this->url->imagePath(Application::APP_ID, 'app-dark.svg');
}
}
diff --git a/apps/workflowengine/src/components/Check.vue b/apps/workflowengine/src/components/Check.vue
new file mode 100644
index 00000000000..136f6d21280
--- /dev/null
+++ b/apps/workflowengine/src/components/Check.vue
@@ -0,0 +1,229 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div v-click-outside="hideDelete" class="check" @click="showDelete">
+ <NcSelect ref="checkSelector"
+ v-model="currentOption"
+ :options="options"
+ label="name"
+ :clearable="false"
+ :placeholder="t('workflowengine', 'Select a filter')"
+ @input="updateCheck" />
+ <NcSelect v-model="currentOperator"
+ :disabled="!currentOption"
+ :options="operators"
+ class="comparator"
+ label="name"
+ :clearable="false"
+ :placeholder="t('workflowengine', 'Select a comparator')"
+ @input="updateCheck" />
+ <component :is="currentElement"
+ v-if="currentElement"
+ ref="checkComponent"
+ :disabled="!currentOption"
+ :operator="check.operator"
+ :model-value="check.value"
+ class="option"
+ @update:model-value="updateCheck"
+ @valid="(valid=true) && validate()"
+ @invalid="!(valid=false) && validate()" />
+ <component :is="currentOption.component"
+ v-else-if="currentOperator && currentComponent"
+ v-model="check.value"
+ :disabled="!currentOption"
+ :check="check"
+ class="option"
+ @input="updateCheck"
+ @valid="(valid=true) && validate()"
+ @invalid="!(valid=false) && validate()" />
+ <input v-else
+ v-model="check.value"
+ type="text"
+ :class="{ invalid: !valid }"
+ :disabled="!currentOption"
+ :placeholder="valuePlaceholder"
+ class="option"
+ @input="updateCheck">
+ <NcActions v-if="deleteVisible || !currentOption">
+ <NcActionButton :title="t('workflowengine', 'Remove filter')" @click="$emit('remove')">
+ <template #icon>
+ <CloseIcon :size="20" />
+ </template>
+ </NcActionButton>
+ </NcActions>
+ </div>
+</template>
+
+<script>
+import NcActions from '@nextcloud/vue/components/NcActions'
+import NcActionButton from '@nextcloud/vue/components/NcActionButton'
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+
+import CloseIcon from 'vue-material-design-icons/Close.vue'
+import ClickOutside from 'vue-click-outside'
+
+export default {
+ name: 'Check',
+ components: {
+ NcActionButton,
+ NcActions,
+ NcSelect,
+
+ // Icons
+ CloseIcon,
+ },
+ directives: {
+ ClickOutside,
+ },
+ props: {
+ check: {
+ type: Object,
+ required: true,
+ },
+ rule: {
+ type: Object,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ deleteVisible: false,
+ currentOption: null,
+ currentOperator: null,
+ options: [],
+ valid: false,
+ }
+ },
+ computed: {
+ checks() {
+ return this.$store.getters.getChecksForEntity(this.rule.entity)
+ },
+ operators() {
+ if (!this.currentOption) { return [] }
+ const operators = this.checks[this.currentOption.class].operators
+ if (typeof operators === 'function') {
+ return operators(this.check)
+ }
+ return operators
+ },
+ currentElement() {
+ if (!this.check.class) {
+ return false
+ }
+ return this.checks[this.check.class].element
+ },
+ currentComponent() {
+ if (!this.currentOption) { return [] }
+ return this.checks[this.currentOption.class].component
+ },
+ valuePlaceholder() {
+ if (this.currentOption && this.currentOption.placeholder) {
+ return this.currentOption.placeholder(this.check)
+ }
+ return ''
+ },
+ },
+ watch: {
+ 'check.operator'() {
+ this.validate()
+ },
+ },
+ mounted() {
+ this.options = Object.values(this.checks)
+ this.currentOption = this.checks[this.check.class]
+ this.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)
+
+ if (this.currentElement) {
+ // If we do not set it, the check`s value would remain empty. Unsure why Vue behaves this way.
+ this.$refs.checkComponent.modelValue = undefined
+ } else if (this.currentOption?.component) {
+ // keeping this in an else for apps that try to be backwards compatible and may ship both
+ // to be removed in 03/2028
+ console.warn('Developer warning: `CheckPlugin.options` is deprecated. Use `CheckPlugin.element` instead.')
+ }
+
+ if (this.check.class === null) {
+ this.$nextTick(() => this.$refs.checkSelector.$el.focus())
+ }
+ this.validate()
+ },
+ methods: {
+ showDelete() {
+ this.deleteVisible = true
+ },
+ hideDelete() {
+ this.deleteVisible = false
+ },
+ validate() {
+ this.valid = true
+ if (this.currentOption && this.currentOption.validate) {
+ this.valid = !!this.currentOption.validate(this.check)
+ }
+ // eslint-disable-next-line vue/no-mutating-props
+ this.check.invalid = !this.valid
+ this.$emit('validate', this.valid)
+ },
+ updateCheck(event) {
+ const selectedOperator = event?.operator || this.currentOperator?.operator || this.check.operator
+ const matchingOperator = this.operators.findIndex((operator) => selectedOperator === operator.operator)
+ if (this.check.class !== this.currentOption.class || matchingOperator === -1) {
+ this.currentOperator = this.operators[0]
+ }
+ if (event?.detail) {
+ this.check.value = event.detail[0]
+ }
+ // eslint-disable-next-line vue/no-mutating-props
+ this.check.class = this.currentOption.class
+ // eslint-disable-next-line vue/no-mutating-props
+ this.check.operator = this.currentOperator.operator
+
+ this.validate()
+
+ this.$emit('update', this.check)
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+ .check {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: flex-start; // to not stretch components vertically
+ width: 100%;
+ padding-inline-end: 20px;
+
+ & > *:not(.close) {
+ width: 180px;
+ }
+ & > .comparator {
+ min-width: 200px;
+ width: 200px;
+ }
+ & > .option {
+ min-width: 260px;
+ width: 260px;
+ min-height: 48px;
+
+ & > input[type=text] {
+ min-height: 48px;
+ }
+ }
+ & > .v-select,
+ & > .button-vue,
+ & > input[type=text] {
+ margin-inline-end: 5px;
+ margin-bottom: 5px;
+ }
+ }
+
+ input[type=text] {
+ margin: 0;
+ }
+
+ .invalid {
+ border-color: var(--color-error) !important;
+ }
+</style>
diff --git a/apps/workflowengine/src/components/Checks/FileMimeType.vue b/apps/workflowengine/src/components/Checks/FileMimeType.vue
new file mode 100644
index 00000000000..6817b128e27
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/FileMimeType.vue
@@ -0,0 +1,172 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div>
+ <NcSelect :model-value="currentValue"
+ :placeholder="t('workflowengine', 'Select a file type')"
+ label="label"
+ :options="options"
+ :clearable="false"
+ @input="setValue">
+ <template #option="option">
+ <span v-if="option.icon" class="option__icon" :class="option.icon" />
+ <span v-else class="option__icon-img">
+ <img :src="option.iconUrl" alt="">
+ </span>
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(option.label)" />
+ </span>
+ </template>
+ <template #selected-option="selectedOption">
+ <span v-if="selectedOption.icon" class="option__icon" :class="selectedOption.icon" />
+ <span v-else class="option__icon-img">
+ <img :src="selectedOption.iconUrl" alt="">
+ </span>
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(selectedOption.label)" />
+ </span>
+ </template>
+ </NcSelect>
+ <input v-if="!isPredefined"
+ :value="currentValue.id"
+ type="text"
+ :placeholder="t('workflowengine', 'e.g. httpd/unix-directory')"
+ @input="updateCustom">
+ </div>
+</template>
+
+<script>
+import NcEllipsisedOption from '@nextcloud/vue/components/NcEllipsisedOption'
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+import { imagePath } from '@nextcloud/router'
+
+export default {
+ name: 'FileMimeType',
+ components: {
+ NcEllipsisedOption,
+ NcSelect,
+ },
+ props: {
+ modelValue: {
+ type: String,
+ default: '',
+ },
+ },
+
+ emits: ['update:model-value'],
+
+ data() {
+ return {
+ predefinedTypes: [
+ {
+ icon: 'icon-folder',
+ label: t('workflowengine', 'Folder'),
+ id: 'httpd/unix-directory',
+ },
+ {
+ icon: 'icon-picture',
+ label: t('workflowengine', 'Images'),
+ id: '/image\\/.*/',
+ },
+ {
+ iconUrl: imagePath('core', 'filetypes/x-office-document'),
+ label: t('workflowengine', 'Office documents'),
+ id: '/(vnd\\.(ms-|openxmlformats-|oasis\\.opendocument).*)$/',
+ },
+ {
+ iconUrl: imagePath('core', 'filetypes/application-pdf'),
+ label: t('workflowengine', 'PDF documents'),
+ id: 'application/pdf',
+ },
+ ],
+ newValue: '',
+ }
+ },
+ computed: {
+ options() {
+ return [...this.predefinedTypes, this.customValue]
+ },
+ isPredefined() {
+ const matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.id)
+ if (matchingPredefined) {
+ return true
+ }
+ return false
+ },
+ customValue() {
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom MIME type'),
+ id: '',
+ }
+ },
+ currentValue() {
+ const matchingPredefined = this.predefinedTypes.find((type) => this.newValue === type.id)
+ if (matchingPredefined) {
+ return matchingPredefined
+ }
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom mimetype'),
+ id: this.newValue,
+ }
+ },
+ },
+ watch: {
+ modelValue() {
+ this.updateInternalValue()
+ },
+ },
+
+ methods: {
+ validateRegex(string) {
+ const regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ const result = regexRegex.exec(string)
+ return result !== null
+ },
+ updateInternalValue() {
+ this.newValue = this.modelValue
+ },
+ setValue(value) {
+ if (value !== null) {
+ this.newValue = value.id
+ this.$emit('update:model-value', this.newValue)
+ }
+ },
+ updateCustom(event) {
+ this.newValue = event.target.value || event.detail[0]
+ this.$emit('update:model-value', this.newValue)
+ },
+ },
+}
+</script>
+<style scoped lang="scss">
+.v-select,
+input[type='text'] {
+ width: 100%;
+}
+
+input[type=text] {
+ min-height: 48px;
+}
+
+.option__icon,
+.option__icon-img {
+ display: inline-block;
+ min-width: 30px;
+ background-position: center;
+ vertical-align: middle;
+}
+
+.option__icon-img {
+ text-align: center;
+}
+
+.option__title {
+ display: inline-flex;
+ width: calc(100% - 36px);
+ vertical-align: middle;
+}
+</style>
diff --git a/apps/workflowengine/src/components/Checks/FileSystemTag.vue b/apps/workflowengine/src/components/Checks/FileSystemTag.vue
new file mode 100644
index 00000000000..e71b0cd259a
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/FileSystemTag.vue
@@ -0,0 +1,54 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <NcSelectTags v-model="newValue"
+ :multiple="false"
+ @input="update" />
+</template>
+
+<script>
+import NcSelectTags from '@nextcloud/vue/components/NcSelectTags'
+
+export default {
+ name: 'FileSystemTag',
+ components: {
+ NcSelectTags,
+ },
+ props: {
+ modelValue: {
+ type: String,
+ default: '',
+ },
+ },
+
+ emits: ['update:model-value'],
+
+ data() {
+ return {
+ newValue: [],
+ }
+ },
+ watch: {
+ modelValue() {
+ this.updateValue()
+ },
+ },
+ beforeMount() {
+ this.updateValue()
+ },
+ methods: {
+ updateValue() {
+ if (this.modelValue !== '') {
+ this.newValue = parseInt(this.modelValue)
+ } else {
+ this.newValue = null
+ }
+ },
+ update() {
+ this.$emit('update:model-value', this.newValue || '')
+ },
+ },
+}
+</script>
diff --git a/apps/workflowengine/src/components/Checks/RequestTime.vue b/apps/workflowengine/src/components/Checks/RequestTime.vue
new file mode 100644
index 00000000000..5b1a4ef1cfa
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/RequestTime.vue
@@ -0,0 +1,139 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div class="timeslot">
+ <input v-model="newValue.startTime"
+ type="text"
+ class="timeslot--start"
+ placeholder="e.g. 08:00"
+ @input="update">
+ <input v-model="newValue.endTime"
+ type="text"
+ placeholder="e.g. 18:00"
+ @input="update">
+ <p v-if="!valid" class="invalid-hint">
+ {{ t('workflowengine', 'Please enter a valid time span') }}
+ </p>
+ <NcSelect v-show="valid"
+ v-model="newValue.timezone"
+ :clearable="false"
+ :options="timezones"
+ @input="update" />
+ </div>
+</template>
+
+<script>
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+import moment from 'moment-timezone'
+
+const zones = moment.tz.names()
+export default {
+ name: 'RequestTime',
+ components: {
+ NcSelect,
+ },
+ props: {
+ modelValue: {
+ type: String,
+ default: '[]',
+ },
+ },
+ emits: ['update:model-value'],
+ data() {
+ return {
+ timezones: zones,
+ valid: false,
+ newValue: {
+ startTime: null,
+ endTime: null,
+ timezone: moment.tz.guess(),
+ },
+ stringifiedValue: '[]',
+ }
+ },
+ watch: {
+ modelValue() {
+ this.updateInternalValue()
+ },
+ },
+ beforeMount() {
+ // this is necessary to keep so the value is re-applied when a different
+ // check is being removed.
+ this.updateInternalValue()
+ },
+ methods: {
+ updateInternalValue() {
+ try {
+ const data = JSON.parse(this.modelValue)
+ if (data.length === 2) {
+ this.newValue = {
+ startTime: data[0].split(' ', 2)[0],
+ endTime: data[1].split(' ', 2)[0],
+ timezone: data[0].split(' ', 2)[1],
+ }
+ this.stringifiedValue = `["${this.newValue.startTime} ${this.newValue.timezone}","${this.newValue.endTime} ${this.newValue.timezone}"]`
+ this.validate()
+ }
+ } catch (e) {
+ // ignore invalid values
+ }
+ },
+ validate() {
+ this.valid = this.newValue.startTime && this.newValue.startTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null
+ && this.newValue.endTime && this.newValue.endTime.match(/^(0[0-9]|1[0-9]|2[0-3]|[0-9]):[0-5][0-9]$/i) !== null
+ && moment.tz.zone(this.newValue.timezone) !== null
+ if (this.valid) {
+ this.$emit('valid')
+ } else {
+ this.$emit('invalid')
+ }
+ return this.valid
+ },
+ update() {
+ if (this.newValue.timezone === null) {
+ this.newValue.timezone = moment.tz.guess()
+ }
+ if (this.validate()) {
+ this.stringifiedValue = `["${this.newValue.startTime} ${this.newValue.timezone}","${this.newValue.endTime} ${this.newValue.timezone}"]`
+ this.$emit('update:model-value', this.stringifiedValue)
+ }
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+ .timeslot {
+ display: flex;
+ flex-grow: 1;
+ flex-wrap: wrap;
+ max-width: 180px;
+
+ .multiselect {
+ width: 100%;
+ margin-bottom: 5px;
+ }
+
+ .multiselect:deep(.multiselect__tags:not(:hover):not(:focus):not(:active)) {
+ border: 1px solid transparent;
+ }
+
+ input[type=text] {
+ width: 50%;
+ margin: 0;
+ margin-bottom: 5px;
+ min-height: 48px;
+
+ &.timeslot--start {
+ margin-inline-end: 5px;
+ width: calc(50% - 5px);
+ }
+ }
+
+ .invalid-hint {
+ color: var(--color-text-maxcontrast);
+ }
+ }
+</style>
diff --git a/apps/workflowengine/src/components/Checks/RequestURL.vue b/apps/workflowengine/src/components/Checks/RequestURL.vue
new file mode 100644
index 00000000000..21b3a9cacbe
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/RequestURL.vue
@@ -0,0 +1,151 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div>
+ <NcSelect v-model="newValue"
+ :value="currentValue"
+ :placeholder="t('workflowengine', 'Select a request URL')"
+ label="label"
+ :clearable="false"
+ :options="options"
+ @input="setValue">
+ <template #option="option">
+ <span class="option__icon" :class="option.icon" />
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(option.label)" />
+ </span>
+ </template>
+ <template #selected-option="selectedOption">
+ <span class="option__icon" :class="selectedOption.icon" />
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(selectedOption.label)" />
+ </span>
+ </template>
+ </NcSelect>
+ <input v-if="!isPredefined"
+ type="text"
+ :value="currentValue.id"
+ :placeholder="placeholder"
+ @input="updateCustom">
+ </div>
+</template>
+
+<script>
+import NcEllipsisedOption from '@nextcloud/vue/components/NcEllipsisedOption'
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+import valueMixin from '../../mixins/valueMixin.js'
+
+export default {
+ name: 'RequestURL',
+ components: {
+ NcEllipsisedOption,
+ NcSelect,
+ },
+ mixins: [
+ valueMixin,
+ ],
+ props: {
+ modelValue: {
+ type: String,
+ default: '',
+ },
+ operator: {
+ type: String,
+ default: '',
+ },
+ },
+
+ emits: ['update:model-value'],
+
+ data() {
+ return {
+ newValue: '',
+ predefinedTypes: [
+ {
+ icon: 'icon-files-dark',
+ id: 'webdav',
+ label: t('workflowengine', 'Files WebDAV'),
+ },
+ ],
+ }
+ },
+ computed: {
+ options() {
+ return [...this.predefinedTypes, this.customValue]
+ },
+ placeholder() {
+ if (this.operator === 'matches' || this.operator === '!matches') {
+ return '/^https\\:\\/\\/localhost\\/index\\.php$/i'
+ }
+ return 'https://localhost/index.php'
+ },
+ matchingPredefined() {
+ return this.predefinedTypes
+ .find((type) => this.newValue === type.id)
+ },
+ isPredefined() {
+ return !!this.matchingPredefined
+ },
+ customValue() {
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom URL'),
+ id: '',
+ }
+ },
+ currentValue() {
+ if (this.matchingPredefined) {
+ return this.matchingPredefined
+ }
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom URL'),
+ id: this.newValue,
+ }
+ },
+ },
+ methods: {
+ validateRegex(string) {
+ const regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ const result = regexRegex.exec(string)
+ return result !== null
+ },
+ setValue(value) {
+ // TODO: check if value requires a regex and set the check operator according to that
+ if (value !== null) {
+ this.newValue = value.id
+ this.$emit('update:model-value', this.newValue)
+ }
+ },
+ updateCustom(event) {
+ this.newValue = event.target.value
+ this.$emit('update:model-value', this.newValue)
+ },
+ },
+}
+</script>
+<style scoped lang="scss">
+ .v-select,
+ input[type='text'] {
+ width: 100%;
+ }
+
+ input[type='text'] {
+ min-height: 48px;
+ }
+
+ .option__icon {
+ display: inline-block;
+ min-width: 30px;
+ background-position: center;
+ vertical-align: middle;
+ }
+
+ .option__title {
+ display: inline-flex;
+ width: calc(100% - 36px);
+ vertical-align: middle;
+ }
+</style>
diff --git a/apps/workflowengine/src/components/Checks/RequestUserAgent.vue b/apps/workflowengine/src/components/Checks/RequestUserAgent.vue
new file mode 100644
index 00000000000..825a112f6fc
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/RequestUserAgent.vue
@@ -0,0 +1,141 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div>
+ <NcSelect v-model="currentValue"
+ :placeholder="t('workflowengine', 'Select a user agent')"
+ label="label"
+ :options="options"
+ :clearable="false"
+ @input="setValue">
+ <template #option="option">
+ <span class="option__icon" :class="option.icon" />
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(option.label)" />
+ </span>
+ </template>
+ <template #selected-option="selectedOption">
+ <span class="option__icon" :class="selectedOption.icon" />
+ <span class="option__title">
+ <NcEllipsisedOption :name="String(selectedOption.label)" />
+ </span>
+ </template>
+ </NcSelect>
+ <input v-if="!isPredefined"
+ v-model="newValue"
+ type="text"
+ @input="updateCustom">
+ </div>
+</template>
+
+<script>
+import NcEllipsisedOption from '@nextcloud/vue/components/NcEllipsisedOption'
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+import valueMixin from '../../mixins/valueMixin.js'
+
+export default {
+ name: 'RequestUserAgent',
+ components: {
+ NcEllipsisedOption,
+ NcSelect,
+ },
+ mixins: [
+ valueMixin,
+ ],
+ props: {
+ modelValue: {
+ type: String,
+ default: '',
+ },
+ },
+ emits: ['update:model-value'],
+ data() {
+ return {
+ newValue: '',
+ predefinedTypes: [
+ { id: 'android', label: t('workflowengine', 'Android client'), icon: 'icon-phone' },
+ { id: 'ios', label: t('workflowengine', 'iOS client'), icon: 'icon-phone' },
+ { id: 'desktop', label: t('workflowengine', 'Desktop client'), icon: 'icon-desktop' },
+ { id: 'mail', label: t('workflowengine', 'Thunderbird & Outlook addons'), icon: 'icon-mail' },
+ ],
+ }
+ },
+ computed: {
+ options() {
+ return [...this.predefinedTypes, this.customValue]
+ },
+ matchingPredefined() {
+ return this.predefinedTypes
+ .find((type) => this.newValue === type.id)
+ },
+ isPredefined() {
+ return !!this.matchingPredefined
+ },
+ customValue() {
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom user agent'),
+ id: '',
+ }
+ },
+ currentValue: {
+ get() {
+ if (this.matchingPredefined) {
+ return this.matchingPredefined
+ }
+ return {
+ icon: 'icon-settings-dark',
+ label: t('workflowengine', 'Custom user agent'),
+ id: this.newValue,
+ }
+ },
+ set(value) {
+ this.newValue = value
+ },
+ },
+ },
+ methods: {
+ validateRegex(string) {
+ const regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ const result = regexRegex.exec(string)
+ return result !== null
+ },
+ setValue(value) {
+ // TODO: check if value requires a regex and set the check operator according to that
+ if (value !== null) {
+ this.newValue = value.id
+ this.$emit('update:model-value', this.newValue)
+ }
+ },
+ updateCustom() {
+ this.newValue = this.currentValue.id
+ this.$emit('update:model-value', this.newValue)
+ },
+ },
+}
+</script>
+<style scoped>
+ .v-select,
+ input[type='text'] {
+ width: 100%;
+ }
+
+ input[type='text'] {
+ min-height: 48px;
+ }
+
+ .option__icon {
+ display: inline-block;
+ min-width: 30px;
+ background-position: center;
+ vertical-align: middle;
+ }
+
+ .option__title {
+ display: inline-flex;
+ width: calc(100% - 36px);
+ vertical-align: middle;
+ }
+</style>
diff --git a/apps/workflowengine/src/components/Checks/RequestUserGroup.vue b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue
new file mode 100644
index 00000000000..f9606b7ca26
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/RequestUserGroup.vue
@@ -0,0 +1,156 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div>
+ <NcSelect :aria-label-combobox="t('workflowengine', 'Select groups')"
+ :aria-label-listbox="t('workflowengine', 'Groups')"
+ :clearable="false"
+ :loading="status.isLoading && groups.length === 0"
+ :placeholder="t('workflowengine', 'Type to search for group …')"
+ :options="groups"
+ :model-value="currentValue"
+ label="displayname"
+ @search="searchAsync"
+ @input="update" />
+ </div>
+</template>
+
+<script>
+import { translate as t } from '@nextcloud/l10n'
+import { generateOcsUrl } from '@nextcloud/router'
+
+import axios from '@nextcloud/axios'
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+
+const groups = []
+const wantedGroups = []
+const status = {
+ isLoading: false,
+}
+
+export default {
+ name: 'RequestUserGroup',
+ components: {
+ NcSelect,
+ },
+ props: {
+ modelValue: {
+ type: String,
+ default: '',
+ },
+ check: {
+ type: Object,
+ default: () => { return {} },
+ },
+ },
+ emits: ['update:model-value'],
+ data() {
+ return {
+ groups,
+ status,
+ wantedGroups,
+ newValue: '',
+ }
+ },
+ computed: {
+ currentValue: {
+ get() {
+ return this.groups.find(group => group.id === this.newValue) || null
+ },
+ set(value) {
+ this.newValue = value
+ },
+ },
+ },
+ watch: {
+ modelValue() {
+ this.updateInternalValue()
+ },
+ },
+ async mounted() {
+ // If empty, load first chunk of groups
+ if (this.groups.length === 0) {
+ await this.searchAsync('')
+ }
+ // If a current group is set but not in our list of groups then search for that group
+ if (this.currentValue === null && this.newValue) {
+ await this.searchAsync(this.newValue)
+ }
+ },
+ methods: {
+ t,
+
+ searchAsync(searchQuery) {
+ if (this.status.isLoading) {
+ if (searchQuery) {
+ // The first 20 groups are loaded up front (indicated by an
+ // empty searchQuery parameter), afterwards we may load
+ // groups that have not been fetched yet, but are used
+ // in existing rules.
+ this.enqueueWantedGroup(searchQuery)
+ }
+ return
+ }
+
+ this.status.isLoading = true
+ return axios.get(generateOcsUrl('cloud/groups/details?limit=20&search={searchQuery}', { searchQuery })).then((response) => {
+ response.data.ocs.data.groups.forEach((group) => {
+ this.addGroup({
+ id: group.id,
+ displayname: group.displayname,
+ })
+ })
+ this.status.isLoading = false
+ this.findGroupByQueue()
+ }, (error) => {
+ console.error('Error while loading group list', error.response)
+ })
+ },
+ async updateInternalValue() {
+ if (!this.newValue) {
+ await this.searchAsync(this.modelValue)
+ }
+ this.newValue = this.modelValue
+ },
+ addGroup(group) {
+ const index = this.groups.findIndex((item) => item.id === group.id)
+ if (index === -1) {
+ this.groups.push(group)
+ }
+ },
+ hasGroup(group) {
+ const index = this.groups.findIndex((item) => item.id === group)
+ return index > -1
+ },
+ update(value) {
+ this.newValue = value.id
+ this.$emit('update:model-value', this.newValue)
+ },
+ enqueueWantedGroup(expectedGroupId) {
+ const index = this.wantedGroups.findIndex((groupId) => groupId === expectedGroupId)
+ if (index === -1) {
+ this.wantedGroups.push(expectedGroupId)
+ }
+ },
+ async findGroupByQueue() {
+ let nextQuery
+ do {
+ nextQuery = this.wantedGroups.shift()
+ if (this.hasGroup(nextQuery)) {
+ nextQuery = undefined
+ }
+ } while (!nextQuery && this.wantedGroups.length > 0)
+ if (nextQuery) {
+ await this.searchAsync(nextQuery)
+ }
+ },
+ },
+}
+</script>
+<style scoped>
+.v-select {
+ width: 100%;
+}
+</style>
diff --git a/apps/workflowengine/src/components/Checks/file.js b/apps/workflowengine/src/components/Checks/file.js
new file mode 100644
index 00000000000..568efc81cd3
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/file.js
@@ -0,0 +1,88 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import { stringValidator, validateIPv4, validateIPv6 } from '../../helpers/validators.js'
+import { registerCustomElement } from '../../helpers/window.js'
+import FileMimeType from './FileMimeType.vue'
+import FileSystemTag from './FileSystemTag.vue'
+
+const stringOrRegexOperators = () => {
+ return [
+ { operator: 'matches', name: t('workflowengine', 'matches') },
+ { operator: '!matches', name: t('workflowengine', 'does not match') },
+ { operator: 'is', name: t('workflowengine', 'is') },
+ { operator: '!is', name: t('workflowengine', 'is not') },
+ ]
+}
+
+const FileChecks = [
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\FileName',
+ name: t('workflowengine', 'File name'),
+ operators: stringOrRegexOperators,
+ placeholder: (check) => {
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ return '/^dummy-.+$/i'
+ }
+ return 'filename.txt'
+ },
+ validate: stringValidator,
+ },
+
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\FileMimeType',
+ name: t('workflowengine', 'File MIME type'),
+ operators: stringOrRegexOperators,
+ element: registerCustomElement(FileMimeType, 'oca-workflowengine-checks-file_mime_type'),
+ },
+
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\FileSize',
+ name: t('workflowengine', 'File size (upload)'),
+ operators: [
+ { operator: 'less', name: t('workflowengine', 'less') },
+ { operator: '!greater', name: t('workflowengine', 'less or equals') },
+ { operator: '!less', name: t('workflowengine', 'greater or equals') },
+ { operator: 'greater', name: t('workflowengine', 'greater') },
+ ],
+ placeholder: (check) => '5 MB',
+ validate: (check) => check.value ? check.value.match(/^[0-9]+[ ]?[kmgt]?b$/i) !== null : false,
+ },
+
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress',
+ name: t('workflowengine', 'Request remote address'),
+ operators: [
+ { operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },
+ { operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },
+ { operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },
+ { operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') },
+ ],
+ placeholder: (check) => {
+ if (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {
+ return '::1/128'
+ }
+ return '127.0.0.1/32'
+ },
+ validate: (check) => {
+ if (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {
+ return validateIPv6(check.value)
+ }
+ return validateIPv4(check.value)
+ },
+ },
+
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\FileSystemTags',
+ name: t('workflowengine', 'File system tag'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is tagged with') },
+ { operator: '!is', name: t('workflowengine', 'is not tagged with') },
+ ],
+ element: registerCustomElement(FileSystemTag, 'oca-workflowengine-file_system_tag'),
+ },
+]
+
+export default FileChecks
diff --git a/apps/workflowengine/src/components/Checks/index.js b/apps/workflowengine/src/components/Checks/index.js
new file mode 100644
index 00000000000..fc52f95f78a
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/index.js
@@ -0,0 +1,9 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import FileChecks from './file.js'
+import RequestChecks from './request.js'
+
+export default [...FileChecks, ...RequestChecks]
diff --git a/apps/workflowengine/src/components/Checks/request.js b/apps/workflowengine/src/components/Checks/request.js
new file mode 100644
index 00000000000..b91f00baef0
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/request.js
@@ -0,0 +1,55 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import { registerCustomElement } from '../../helpers/window.js'
+import RequestUserAgent from './RequestUserAgent.vue'
+import RequestTime from './RequestTime.vue'
+import RequestURL from './RequestURL.vue'
+import RequestUserGroup from './RequestUserGroup.vue'
+
+const RequestChecks = [
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\RequestURL',
+ name: t('workflowengine', 'Request URL'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is') },
+ { operator: '!is', name: t('workflowengine', 'is not') },
+ { operator: 'matches', name: t('workflowengine', 'matches') },
+ { operator: '!matches', name: t('workflowengine', 'does not match') },
+ ],
+ element: registerCustomElement(RequestURL, 'oca-workflowengine-checks-request_url'),
+ },
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\RequestTime',
+ name: t('workflowengine', 'Request time'),
+ operators: [
+ { operator: 'in', name: t('workflowengine', 'between') },
+ { operator: '!in', name: t('workflowengine', 'not between') },
+ ],
+ element: registerCustomElement(RequestTime, 'oca-workflowengine-checks-request_time'),
+ },
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\RequestUserAgent',
+ name: t('workflowengine', 'Request user agent'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is') },
+ { operator: '!is', name: t('workflowengine', 'is not') },
+ { operator: 'matches', name: t('workflowengine', 'matches') },
+ { operator: '!matches', name: t('workflowengine', 'does not match') },
+ ],
+ element: registerCustomElement(RequestUserAgent, 'oca-workflowengine-checks-request_user_agent'),
+ },
+ {
+ class: 'OCA\\WorkflowEngine\\Check\\UserGroupMembership',
+ name: t('workflowengine', 'Group membership'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is member of') },
+ { operator: '!is', name: t('workflowengine', 'is not member of') },
+ ],
+ element: registerCustomElement(RequestUserGroup, 'oca-workflowengine-checks-request_user_group'),
+ },
+]
+
+export default RequestChecks
diff --git a/apps/workflowengine/src/components/Event.vue b/apps/workflowengine/src/components/Event.vue
new file mode 100644
index 00000000000..f170101b4e9
--- /dev/null
+++ b/apps/workflowengine/src/components/Event.vue
@@ -0,0 +1,118 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div class="event">
+ <div v-if="operation.isComplex && operation.fixedEntity !== ''" class="isComplex">
+ <img class="option__icon" :src="entity.icon" alt="">
+ <span class="option__title option__title_single">{{ operation.triggerHint }}</span>
+ </div>
+ <NcSelect v-else
+ :disabled="allEvents.length <= 1"
+ :multiple="true"
+ :options="allEvents"
+ :value="currentEvent"
+ :placeholder="placeholderString"
+ class="event__trigger"
+ label="displayName"
+ @input="updateEvent">
+ <template #option="option">
+ <img class="option__icon" :src="option.entity.icon" alt="">
+ <span class="option__title">{{ option.displayName }}</span>
+ </template>
+ <template #selected-option="option">
+ <img class="option__icon" :src="option.entity.icon" alt="">
+ <span class="option__title">{{ option.displayName }}</span>
+ </template>
+ </NcSelect>
+ </div>
+</template>
+
+<script>
+import NcSelect from '@nextcloud/vue/components/NcSelect'
+import { showWarning } from '@nextcloud/dialogs'
+
+export default {
+ name: 'Event',
+ components: {
+ NcSelect,
+ },
+ props: {
+ rule: {
+ type: Object,
+ required: true,
+ },
+ },
+ computed: {
+ entity() {
+ return this.$store.getters.getEntityForOperation(this.operation)
+ },
+ operation() {
+ return this.$store.getters.getOperationForRule(this.rule)
+ },
+ allEvents() {
+ return this.$store.getters.getEventsForOperation(this.operation)
+ },
+ currentEvent() {
+ return this.allEvents.filter(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)
+ },
+ placeholderString() {
+ // TRANSLATORS: Users should select a trigger for a workflow action
+ return t('workflowengine', 'Select a trigger')
+ },
+ },
+ methods: {
+ updateEvent(events) {
+ if (events.length === 0) {
+ // TRANSLATORS: Users must select an event as of "happening" or "incident" which triggers an action
+ showWarning(t('workflowengine', 'At least one event must be selected'))
+ return
+ }
+ const existingEntity = this.rule.entity
+ const newEntities = events.map(event => event.entity.id).filter((value, index, self) => self.indexOf(value) === index)
+ let newEntity = null
+ if (newEntities.length > 1) {
+ newEntity = newEntities.filter(entity => entity !== existingEntity)[0]
+ } else {
+ newEntity = newEntities[0]
+ }
+
+ this.$set(this.rule, 'entity', newEntity)
+ this.$set(this.rule, 'events', events.filter(event => event.entity.id === newEntity).map(event => event.eventName))
+ this.$emit('update', this.rule)
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+ .event {
+ margin-bottom: 5px;
+
+ &__trigger {
+ max-width: 550px;
+ }
+ }
+
+ .isComplex {
+ img {
+ vertical-align: text-top;
+ }
+ span {
+ padding-top: 2px;
+ display: inline-block;
+ }
+ }
+
+ .option__title {
+ margin-inline-start: 5px;
+ color: var(--color-main-text);
+ }
+
+ .option__icon {
+ width: 16px;
+ height: 16px;
+ filter: var(--background-invert-if-dark);
+ }
+</style>
diff --git a/apps/workflowengine/src/components/Operation.vue b/apps/workflowengine/src/components/Operation.vue
new file mode 100644
index 00000000000..df0b78dad89
--- /dev/null
+++ b/apps/workflowengine/src/components/Operation.vue
@@ -0,0 +1,44 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div class="actions__item" :class="{'colored': colored}" :style="{ backgroundColor: colored ? operation.color : 'transparent' }">
+ <div class="icon" :class="operation.iconClass" :style="{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }" />
+ <div class="actions__item__description">
+ <h3>{{ operation.name }}</h3>
+ <small>{{ operation.description }}</small>
+ <NcButton v-if="colored">
+ {{ t('workflowengine', 'Add new flow') }}
+ </NcButton>
+ </div>
+ <div class="actions__item_options">
+ <slot />
+ </div>
+ </div>
+</template>
+
+<script>
+import NcButton from '@nextcloud/vue/components/NcButton'
+
+export default {
+ name: 'Operation',
+ components: {
+ NcButton,
+ },
+ props: {
+ operation: {
+ type: Object,
+ required: true,
+ },
+ colored: {
+ type: Boolean,
+ default: true,
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+@use "./../styles/operation" as *;
+</style>
diff --git a/apps/workflowengine/src/components/Rule.vue b/apps/workflowengine/src/components/Rule.vue
new file mode 100644
index 00000000000..1c321fd014c
--- /dev/null
+++ b/apps/workflowengine/src/components/Rule.vue
@@ -0,0 +1,306 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div v-if="operation" class="section rule" :style="{ borderLeftColor: operation.color || '' }">
+ <div class="trigger">
+ <p>
+ <span>{{ t('workflowengine', 'When') }}</span>
+ <Event :rule="rule" @update="updateRule" />
+ </p>
+ <p v-for="(check, index) in rule.checks" :key="index">
+ <span>{{ t('workflowengine', 'and') }}</span>
+ <Check :check="check"
+ :rule="rule"
+ @update="updateRule"
+ @validate="validate"
+ @remove="removeCheck(check)" />
+ </p>
+ <p>
+ <span />
+ <input v-if="lastCheckComplete"
+ type="button"
+ class="check--add"
+ :value="t('workflowengine', 'Add a new filter')"
+ @click="onAddFilter">
+ </p>
+ </div>
+ <div class="flow-icon icon-confirm" />
+ <div class="action">
+ <Operation :operation="operation" :colored="false">
+ <component :is="operation.element"
+ v-if="operation.element"
+ :model-value="inputValue"
+ @update:model-value="updateOperationByEvent" />
+ <component :is="operation.options"
+ v-else-if="operation.options"
+ v-model="rule.operation"
+ @input="updateOperation" />
+ </Operation>
+ <div class="buttons">
+ <NcButton v-if="rule.id < -1 || dirty" @click="cancelRule">
+ {{ t('workflowengine', 'Cancel') }}
+ </NcButton>
+ <NcButton v-else-if="!dirty" @click="deleteRule">
+ {{ t('workflowengine', 'Delete') }}
+ </NcButton>
+ <NcButton :type="ruleStatus.type"
+ @click="saveRule">
+ <template #icon>
+ <component :is="ruleStatus.icon" :size="20" />
+ </template>
+ {{ ruleStatus.title }}
+ </NcButton>
+ </div>
+ <p v-if="error" class="error-message">
+ {{ error }}
+ </p>
+ </div>
+ </div>
+</template>
+
+<script>
+import NcActions from '@nextcloud/vue/components/NcActions'
+import NcActionButton from '@nextcloud/vue/components/NcActionButton'
+import NcButton from '@nextcloud/vue/components/NcButton'
+import Tooltip from '@nextcloud/vue/directives/Tooltip'
+import IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'
+import IconCheckMark from 'vue-material-design-icons/Check.vue'
+import IconClose from 'vue-material-design-icons/Close.vue'
+
+import Event from './Event.vue'
+import Check from './Check.vue'
+import Operation from './Operation.vue'
+
+export default {
+ name: 'Rule',
+ components: {
+ Check,
+ Event,
+ NcActionButton,
+ NcActions,
+ NcButton,
+ Operation,
+ },
+ directives: {
+ Tooltip,
+ },
+ props: {
+ rule: {
+ type: Object,
+ required: true,
+ },
+ },
+ data() {
+ return {
+ editing: false,
+ checks: [],
+ error: null,
+ dirty: this.rule.id < 0,
+ originalRule: null,
+ element: null,
+ inputValue: '',
+ }
+ },
+ computed: {
+ /**
+ * @return {OperatorPlugin}
+ */
+ operation() {
+ return this.$store.getters.getOperationForRule(this.rule)
+ },
+ ruleStatus() {
+ if (this.error || !this.rule.valid || this.rule.checks.length === 0 || this.rule.checks.some((check) => check.invalid === true)) {
+ return {
+ title: t('workflowengine', 'The configuration is invalid'),
+ icon: IconClose,
+ type: 'warning',
+ tooltip: { placement: 'bottom', show: true, content: this.error },
+ }
+ }
+ if (!this.dirty) {
+ return { title: t('workflowengine', 'Active'), icon: IconCheckMark, type: 'success' }
+ }
+ return { title: t('workflowengine', 'Save'), icon: IconArrowRight, type: 'primary' }
+
+ },
+ lastCheckComplete() {
+ const lastCheck = this.rule.checks[this.rule.checks.length - 1]
+ return typeof lastCheck === 'undefined' || lastCheck.class !== null
+ },
+ },
+ mounted() {
+ this.originalRule = JSON.parse(JSON.stringify(this.rule))
+ if (this.operation?.element) {
+ this.inputValue = this.rule.operation
+ } else if (this.operation?.options) {
+ // keeping this in an else for apps that try to be backwards compatible and may ship both
+ // to be removed in 03/2028
+ console.warn('Developer warning: `OperatorPlugin.options` is deprecated. Use `OperatorPlugin.element` instead.')
+ }
+ },
+ methods: {
+ async updateOperation(operation) {
+ this.$set(this.rule, 'operation', operation)
+ this.updateRule()
+ },
+ async updateOperationByEvent(event) {
+ this.inputValue = event.detail[0]
+ this.$set(this.rule, 'operation', event.detail[0])
+ this.updateRule()
+ },
+ validate(/* state */) {
+ this.error = null
+ this.$store.dispatch('updateRule', this.rule)
+ },
+ updateRule() {
+ if (!this.dirty) {
+ this.dirty = true
+ }
+
+ this.error = null
+ this.$store.dispatch('updateRule', this.rule)
+ },
+ async saveRule() {
+ try {
+ await this.$store.dispatch('pushUpdateRule', this.rule)
+ this.dirty = false
+ this.error = null
+ this.originalRule = JSON.parse(JSON.stringify(this.rule))
+ } catch (e) {
+ console.error('Failed to save operation')
+ this.error = e.response.data.ocs.meta.message
+ }
+ },
+ async deleteRule() {
+ try {
+ await this.$store.dispatch('deleteRule', this.rule)
+ } catch (e) {
+ console.error('Failed to delete operation')
+ this.error = e.response.data.ocs.meta.message
+ }
+ },
+ cancelRule() {
+ if (this.rule.id < 0) {
+ this.$store.dispatch('removeRule', this.rule)
+ } else {
+ this.inputValue = this.originalRule.operation
+ this.$store.dispatch('updateRule', this.originalRule)
+ this.originalRule = JSON.parse(JSON.stringify(this.rule))
+ this.dirty = false
+ }
+ },
+
+ async removeCheck(check) {
+ const index = this.rule.checks.findIndex(item => item === check)
+ if (index > -1) {
+ this.$delete(this.rule.checks, index)
+ }
+ this.$store.dispatch('updateRule', this.rule)
+ },
+
+ onAddFilter() {
+ // eslint-disable-next-line vue/no-mutating-props
+ this.rule.checks.push({ class: null, operator: null, value: '' })
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+
+ .buttons {
+ display: flex;
+ justify-content: end;
+
+ button {
+ margin-inline-start: 5px;
+ }
+ button:last-child{
+ margin-inline-end: 10px;
+ }
+ }
+
+ .error-message {
+ float: right;
+ margin-inline-end: 10px;
+ }
+
+ .flow-icon {
+ width: 44px;
+ }
+
+ .rule {
+ display: flex;
+ flex-wrap: wrap;
+ border-inline-start: 5px solid var(--color-primary-element);
+
+ .trigger,
+ .action {
+ flex-grow: 1;
+ min-height: 100px;
+ max-width: 920px;
+ }
+ .action {
+ max-width: 400px;
+ position: relative;
+ }
+ .icon-confirm {
+ background-position: right 27px;
+ padding-inline-end: 20px;
+ margin-inline-end: 20px;
+ }
+ }
+
+ .trigger p, .action p {
+ min-height: 34px;
+ display: flex;
+
+ & > span {
+ min-width: 50px;
+ text-align: end;
+ color: var(--color-text-maxcontrast);
+ padding-inline-end: 10px;
+ padding-top: 6px;
+ }
+ .multiselect {
+ flex-grow: 1;
+ max-width: 300px;
+ }
+ }
+
+ .trigger p:first-child span {
+ padding-top: 3px;
+ }
+
+ .trigger p:last-child {
+ padding-top: 8px;
+ }
+
+ .check--add {
+ background-position: 7px center;
+ background-color: transparent;
+ padding-inline-start: 6px;
+ margin: 0;
+ width: 180px;
+ border-radius: var(--border-radius);
+ color: var(--color-text-maxcontrast);
+ font-weight: normal;
+ text-align: start;
+ font-size: 1em;
+ }
+
+ @media (max-width:1400px) {
+ .rule {
+ &, .trigger, .action {
+ width: 100%;
+ max-width: 100%;
+ }
+ .flow-icon {
+ display: none;
+ }
+ }
+ }
+
+</style>
diff --git a/apps/workflowengine/src/components/Workflow.vue b/apps/workflowengine/src/components/Workflow.vue
new file mode 100644
index 00000000000..03ec2a79324
--- /dev/null
+++ b/apps/workflowengine/src/components/Workflow.vue
@@ -0,0 +1,209 @@
+<!--
+ - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ - SPDX-License-Identifier: AGPL-3.0-or-later
+-->
+<template>
+ <div id="workflowengine">
+ <NcSettingsSection :name="t('workflowengine', 'Available flows')"
+ :doc-url="workflowDocUrl">
+ <p v-if="isAdminScope" class="settings-hint">
+ <a href="https://nextcloud.com/developer/">{{ t('workflowengine', 'For details on how to write your own flow, check out the development documentation.') }}</a>
+ </p>
+
+ <NcEmptyContent v-if="!isUserAdmin && mainOperations.length === 0"
+ :name="t('workflowengine', 'No flows installed')"
+ :description="!isUserAdmin ? t('workflowengine', 'Ask your administrator to install new flows.') : undefined">
+ <template #icon>
+ <NcIconSvgWrapper :svg="WorkflowOffSvg" :size="20" />
+ </template>
+ </NcEmptyContent>
+ <transition-group v-else
+ name="slide"
+ tag="div"
+ class="actions">
+ <Operation v-for="operation in mainOperations"
+ :key="operation.id"
+ :operation="operation"
+ @click.native="createNewRule(operation)" />
+ <a v-if="showAppStoreHint"
+ key="add"
+ :href="appstoreUrl"
+ class="actions__item colored more">
+ <div class="icon icon-add" />
+ <div class="actions__item__description">
+ <h3>{{ t('workflowengine', 'More flows') }}</h3>
+ <small>{{ t('workflowengine', 'Browse the App Store') }}</small>
+ </div>
+ </a>
+ </transition-group>
+
+ <div v-if="hasMoreOperations" class="actions__more">
+ <NcButton @click="showMoreOperations = !showMoreOperations">
+ <template #icon>
+ <MenuUp v-if="showMoreOperations" :size="20" />
+ <MenuDown v-else :size="20" />
+ </template>
+ {{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}
+ </NcButton>
+ </div>
+ </NcSettingsSection>
+
+ <NcSettingsSection v-if="mainOperations.length > 0"
+ :name="isAdminScope ? t('workflowengine', 'Configured flows') : t('workflowengine', 'Your flows')">
+ <transition-group v-if="rules.length > 0" name="slide">
+ <Rule v-for="rule in rules" :key="rule.id" :rule="rule" />
+ </transition-group>
+ <NcEmptyContent v-else :name="t('workflowengine', 'No flows configured')">
+ <template #icon>
+ <NcIconSvgWrapper :svg="WorkflowOffSvg" :size="20" />
+ </template>
+ </NcEmptyContent>
+ </NcSettingsSection>
+ </div>
+</template>
+
+<script>
+import Rule from './Rule.vue'
+import Operation from './Operation.vue'
+import NcButton from '@nextcloud/vue/components/NcButton'
+import NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'
+import NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'
+import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection'
+import { mapGetters, mapState } from 'vuex'
+import { generateUrl } from '@nextcloud/router'
+import { loadState } from '@nextcloud/initial-state'
+import MenuUp from 'vue-material-design-icons/MenuUp.vue'
+import MenuDown from 'vue-material-design-icons/MenuDown.vue'
+import WorkflowOffSvg from '../../img/workflow-off.svg?raw'
+
+const ACTION_LIMIT = 3
+const ADMIN_SCOPE = 0
+// const PERSONAL_SCOPE = 1
+
+export default {
+ name: 'Workflow',
+ components: {
+ MenuDown,
+ MenuUp,
+ NcButton,
+ NcEmptyContent,
+ NcIconSvgWrapper,
+ NcSettingsSection,
+ Operation,
+ Rule,
+ },
+ data() {
+ return {
+ showMoreOperations: false,
+ appstoreUrl: generateUrl('settings/apps/workflow'),
+ workflowDocUrl: loadState('workflowengine', 'doc-url'),
+ WorkflowOffSvg,
+ }
+ },
+ computed: {
+ ...mapGetters({
+ rules: 'getRules',
+ }),
+ ...mapState({
+ appstoreEnabled: 'appstoreEnabled',
+ scope: 'scope',
+ operations: 'operations',
+ }),
+ hasMoreOperations() {
+ return Object.keys(this.operations).length > ACTION_LIMIT
+ },
+ mainOperations() {
+ if (this.showMoreOperations) {
+ return Object.values(this.operations)
+ }
+ return Object.values(this.operations).slice(0, ACTION_LIMIT)
+ },
+ showAppStoreHint() {
+ return this.appstoreEnabled && OC.isUserAdmin()
+ },
+ isUserAdmin() {
+ return OC.isUserAdmin()
+ },
+ isAdminScope() {
+ return this.scope === ADMIN_SCOPE
+ },
+ },
+ mounted() {
+ this.$store.dispatch('fetchRules')
+ },
+ methods: {
+ createNewRule(operation) {
+ this.$store.dispatch('createNewRule', operation)
+ },
+ },
+}
+</script>
+
+<style scoped lang="scss">
+ @use "./../styles/operation";
+
+ #workflowengine {
+ border-bottom: 1px solid var(--color-border);
+ }
+
+ .section {
+ max-width: 100vw;
+
+ h2.configured-flows {
+ margin-top: 50px;
+ margin-bottom: 0;
+ }
+ }
+
+ .actions {
+ display: flex;
+ flex-wrap: wrap;
+ max-width: 1200px;
+ .actions__item {
+ max-width: 280px;
+ flex-basis: 250px;
+ }
+ }
+
+ .actions__more {
+ margin-bottom: 10px;
+ }
+
+ .slide-enter-active {
+ -moz-transition-duration: 0.3s;
+ -webkit-transition-duration: 0.3s;
+ -o-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+ -moz-transition-timing-function: ease-in;
+ -webkit-transition-timing-function: ease-in;
+ -o-transition-timing-function: ease-in;
+ transition-timing-function: ease-in;
+ }
+
+ .slide-leave-active {
+ -moz-transition-duration: 0.3s;
+ -webkit-transition-duration: 0.3s;
+ -o-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+ -moz-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
+ -webkit-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
+ -o-transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
+ transition-timing-function: cubic-bezier(0, 1, 0.5, 1);
+ }
+
+ .slide-enter-to, .slide-leave {
+ max-height: 500px;
+ overflow: hidden;
+ }
+
+ .slide-enter, .slide-leave-to {
+ overflow: hidden;
+ max-height: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ }
+
+ .actions__item.more {
+ background-color: var(--color-background-dark);
+ }
+</style>
diff --git a/apps/workflowengine/src/helpers/api.js b/apps/workflowengine/src/helpers/api.js
new file mode 100644
index 00000000000..c91bbb5f75c
--- /dev/null
+++ b/apps/workflowengine/src/helpers/api.js
@@ -0,0 +1,17 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import { loadState } from '@nextcloud/initial-state'
+import { generateOcsUrl } from '@nextcloud/router'
+
+const scopeValue = loadState('workflowengine', 'scope') === 0 ? 'global' : 'user'
+
+const getApiUrl = (url) => {
+ return generateOcsUrl('apps/workflowengine/api/v1/workflows/{scopeValue}', { scopeValue }) + url + '?format=json'
+}
+
+export {
+ getApiUrl,
+}
diff --git a/apps/workflowengine/src/helpers/validators.js b/apps/workflowengine/src/helpers/validators.js
new file mode 100644
index 00000000000..0f2ca9e41b7
--- /dev/null
+++ b/apps/workflowengine/src/helpers/validators.js
@@ -0,0 +1,38 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+const regexRegex = /^\/(.*)\/([gui]{0,3})$/
+const regexIPv4 = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/
+const regexIPv6 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/
+
+const validateRegex = function(string) {
+ if (!string) {
+ return false
+ }
+ return regexRegex.exec(string) !== null
+}
+
+const validateIPv4 = function(string) {
+ if (!string) {
+ return false
+ }
+ return regexIPv4.exec(string) !== null
+}
+
+const validateIPv6 = function(string) {
+ if (!string) {
+ return false
+ }
+ return regexIPv6.exec(string) !== null
+}
+
+const stringValidator = (check) => {
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ return validateRegex(check.value)
+ }
+ return true
+}
+
+export { validateRegex, stringValidator, validateIPv4, validateIPv6 }
diff --git a/apps/workflowengine/src/helpers/window.js b/apps/workflowengine/src/helpers/window.js
new file mode 100644
index 00000000000..9538c4706d0
--- /dev/null
+++ b/apps/workflowengine/src/helpers/window.js
@@ -0,0 +1,30 @@
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import wrap from '@vue/web-component-wrapper'
+import Vue from 'vue'
+
+/**
+ *
+ * @param VueComponent {Object} The Vue component to turn into a Web Components custom element.
+ * @param customElementId {string} The element name, it must be unique. Recommended pattern oca-$appid-(checks|operations)-$use_case, example: oca-my_app-checks-request_user_agent
+ */
+function registerCustomElement(VueComponent, customElementId) {
+ const WrappedComponent = wrap(Vue, VueComponent)
+ if (window.customElements.get(customElementId)) {
+ console.error('Custom element with ID ' + customElementId + ' is already defined!')
+ throw new Error('Custom element with ID ' + customElementId + ' is already defined!')
+ }
+ window.customElements.define(customElementId, WrappedComponent)
+
+ // In Vue 2, wrap doesn't support disabling shadow :(
+ // Disable with a hack
+ Object.defineProperty(WrappedComponent.prototype, 'attachShadow', { value() { return this } })
+ Object.defineProperty(WrappedComponent.prototype, 'shadowRoot', { get() { return this } })
+
+ return customElementId
+}
+
+export { registerCustomElement }
diff --git a/apps/workflowengine/src/mixins/valueMixin.js b/apps/workflowengine/src/mixins/valueMixin.js
new file mode 100644
index 00000000000..1293cd2483c
--- /dev/null
+++ b/apps/workflowengine/src/mixins/valueMixin.js
@@ -0,0 +1,24 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+const valueMixin = {
+ data() {
+ return {
+ newValue: [],
+ }
+ },
+ watch: {
+ modelValue() {
+ this.updateInternalValue()
+ },
+ },
+ methods: {
+ updateInternalValue() {
+ this.newValue = this.modelValue
+ },
+ },
+}
+
+export default valueMixin
diff --git a/apps/workflowengine/src/store.js b/apps/workflowengine/src/store.js
new file mode 100644
index 00000000000..84a76a644a8
--- /dev/null
+++ b/apps/workflowengine/src/store.js
@@ -0,0 +1,164 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import Vue from 'vue'
+import Vuex, { Store } from 'vuex'
+import axios from '@nextcloud/axios'
+import { confirmPassword } from '@nextcloud/password-confirmation'
+import { loadState } from '@nextcloud/initial-state'
+import { getApiUrl } from './helpers/api.js'
+
+import '@nextcloud/password-confirmation/dist/style.css'
+
+Vue.use(Vuex)
+
+const store = new Store({
+ state: {
+ rules: [],
+ scope: loadState('workflowengine', 'scope'),
+ appstoreEnabled: loadState('workflowengine', 'appstoreenabled'),
+ operations: loadState('workflowengine', 'operators'),
+
+ plugins: Vue.observable({
+ checks: {},
+ operators: {},
+ }),
+
+ entities: loadState('workflowengine', 'entities'),
+ events: loadState('workflowengine', 'entities')
+ .map((entity) => entity.events.map(event => {
+ return {
+ id: `${entity.id}::${event.eventName}`,
+ entity,
+ ...event,
+ }
+ })).flat(),
+ checks: loadState('workflowengine', 'checks'),
+ },
+ mutations: {
+ addRule(state, rule) {
+ state.rules.push({ ...rule, valid: true })
+ },
+ updateRule(state, rule) {
+ const index = state.rules.findIndex((item) => rule.id === item.id)
+ const newRule = Object.assign({}, rule)
+ Vue.set(state.rules, index, newRule)
+ },
+ removeRule(state, rule) {
+ const index = state.rules.findIndex((item) => rule.id === item.id)
+ state.rules.splice(index, 1)
+ },
+ addPluginCheck(state, plugin) {
+ Vue.set(state.plugins.checks, plugin.class, plugin)
+ },
+ addPluginOperator(state, plugin) {
+ plugin = Object.assign(
+ { color: 'var(--color-primary-element)' },
+ plugin, state.operations[plugin.id] || {})
+ if (typeof state.operations[plugin.id] !== 'undefined') {
+ Vue.set(state.operations, plugin.id, plugin)
+ }
+ },
+ },
+ actions: {
+ async fetchRules(context) {
+ const { data } = await axios.get(getApiUrl(''))
+ Object.values(data.ocs.data).flat().forEach((rule) => {
+ context.commit('addRule', rule)
+ })
+ },
+ async createNewRule(context, rule) {
+ await confirmPassword()
+ let entity = null
+ let events = []
+ if (rule.isComplex === false && rule.fixedEntity === '') {
+ entity = context.state.entities.find((item) => rule.entities && rule.entities[0] === item.id)
+ entity = entity || Object.values(context.state.entities)[0]
+ events = [entity.events[0].eventName]
+ }
+
+ context.commit('addRule', {
+ id: -(new Date().getTime()),
+ class: rule.id,
+ entity: entity ? entity.id : rule.fixedEntity,
+ events,
+ name: '', // unused in the new ui, there for legacy reasons
+ checks: [
+ { class: null, operator: null, value: '' },
+ ],
+ operation: rule.operation || '',
+ })
+ },
+ updateRule(context, rule) {
+ context.commit('updateRule', {
+ ...rule,
+ events: typeof rule.events === 'string' ? JSON.parse(rule.events) : rule.events,
+ })
+ },
+ removeRule(context, rule) {
+ context.commit('removeRule', rule)
+ },
+ async pushUpdateRule(context, rule) {
+ await confirmPassword()
+ let result
+ if (rule.id < 0) {
+ result = await axios.post(getApiUrl(''), rule)
+ } else {
+ result = await axios.put(getApiUrl(`/${rule.id}`), rule)
+ }
+ Vue.set(rule, 'id', result.data.ocs.data.id)
+ context.commit('updateRule', rule)
+ },
+ async deleteRule(context, rule) {
+ await confirmPassword()
+ await axios.delete(getApiUrl(`/${rule.id}`))
+ context.commit('removeRule', rule)
+ },
+ setValid(context, { rule, valid }) {
+ rule.valid = valid
+ context.commit('updateRule', rule)
+ },
+ },
+ getters: {
+ getRules(state) {
+ return state.rules.filter((rule) => typeof state.operations[rule.class] !== 'undefined').sort((rule1, rule2) => {
+ return rule1.id - rule2.id || rule2.class - rule1.class
+ })
+ },
+ /**
+ * @param state
+ * @return {OperatorPlugin}
+ */
+ getOperationForRule(state) {
+ return (rule) => state.operations[rule.class]
+ },
+ getEntityForOperation(state) {
+ return (operation) => state.entities.find((entity) => operation.fixedEntity === entity.id)
+ },
+ getEventsForOperation(state) {
+ return (operation) => state.events
+ },
+
+ /**
+ * Return all available checker plugins for a given entity class
+ *
+ * @param {object} state the store state
+ * @return {Function} the available plugins
+ */
+ getChecksForEntity(state) {
+ return (entity) => {
+ return Object.values(state.checks)
+ .filter((check) => check.supportedEntities.indexOf(entity) > -1 || check.supportedEntities.length === 0)
+ .map((check) => state.plugins.checks[check.id])
+ .reduce((obj, item) => {
+ obj[item.class] = item
+ return obj
+ }, {})
+ }
+ },
+ },
+})
+
+export default store
diff --git a/apps/workflowengine/src/styles/operation.scss b/apps/workflowengine/src/styles/operation.scss
new file mode 100644
index 00000000000..b62ac16d6b4
--- /dev/null
+++ b/apps/workflowengine/src/styles/operation.scss
@@ -0,0 +1,87 @@
+/*!
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+.actions__item {
+ display: flex;
+ flex-wrap: wrap;
+ flex-direction: column;
+ flex-grow: 1;
+ padding: 10px;
+ border-radius: var(--border-radius-large);
+ margin-inline: -1px 20px;
+ margin-bottom: 20px;
+}
+
+.actions__item .icon {
+ display: block;
+ width: 100%;
+ height: 50px;
+ background-size: 50px 50px;
+ background-position: center center;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ background-repeat: no-repeat;
+}
+
+.actions__item__description {
+ text-align: center;
+ flex-grow: 1;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.actions__item_options {
+ width: 100%;
+ margin-top: 10px;
+ padding-inline-start: 60px;
+}
+
+h3, small {
+ padding: 6px;
+ display: block;
+}
+
+h3 {
+ margin: 0;
+ padding: 0;
+ font-weight: 600;
+}
+
+small {
+ font-size: 10pt;
+ flex-grow: 1;
+}
+
+.colored:not(.more) {
+ background-color: var(--color-primary-element);
+ h3, small {
+ color: var(--color-primary-element-text)
+ }
+}
+
+.actions__item:not(.colored) {
+ flex-direction: row;
+
+ .actions__item__description {
+ padding-top: 5px;
+ text-align: start;
+ width: calc(100% - 105px);
+ small {
+ padding: 0;
+ }
+ }
+ .icon {
+ width: 50px;
+ margin: 0;
+ margin-inline-end: 10px;
+ &:not(.icon-invert) {
+ filter: var(--background-invert-if-bright);
+ }
+ }
+}
+
+.colored .icon-invert {
+ filter: var(--background-invert-if-bright);
+}
diff --git a/apps/workflowengine/src/workflowengine.js b/apps/workflowengine/src/workflowengine.js
new file mode 100644
index 00000000000..5a99ac54ef2
--- /dev/null
+++ b/apps/workflowengine/src/workflowengine.js
@@ -0,0 +1,92 @@
+/**
+ * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+import Vue from 'vue'
+import Vuex from 'vuex'
+import store from './store.js'
+import Settings from './components/Workflow.vue'
+import ShippedChecks from './components/Checks/index.js'
+
+/**
+ * A plugin for displaying a custom value field for checks
+ *
+ * @typedef {object} CheckPlugin
+ * @property {string} class - The PHP class name of the check
+ * @property {Comparison[]} operators - A list of possible comparison operations running on the check
+ * @property {Vue} component - Deprecated: **Use `element` instead**
+ *
+ * A vue component to handle the rendering of options.
+ * The component should handle the v-model directive properly,
+ * so it needs a value property to receive data and emit an input
+ * event once the data has changed.
+ *
+ * Will be removed in 03/2028.
+ * @property {Function} placeholder - Return a placeholder of no custom component is used
+ * @property {Function} validate - validate a check if no custom component is used
+ * @property {string} [element] - A web component id as used in window.customElements.define()`.
+ * It is expected that the ID is prefixed with the app namespace, e.g. oca-myapp-flow_do_this_operation
+ * It has to emit the `update:model-value` event when a value was changed.
+ * The `model-value` property will be set initially with the rule operation value.
+ */
+
+/**
+ * A plugin for extending the admin page representation of an operator
+ *
+ * @typedef {object} OperatorPlugin
+ * @property {string} id - The PHP class name of the check
+ * @property {string} operation - Default value for the operation field
+ * @property {string} color - Custom color code to be applied for the operator selector
+ * @property {object} [options] - Deprecated: **Use `element` instead**
+ *
+ * A vue component to handle the rendering of options.
+ * The component should handle the v-model directive properly,
+ * so it needs a value property to receive data and emit an input
+ * event once the data has changed.
+ *
+ * Will be removed in 03/2028.
+ * @property {string} [element] - A web component id as used in window.customElements.define()`.
+ * It is expected that the ID is prefixed with the app namespace, e.g. oca-myapp-flow_do_this_operation
+ * It has to emit the `update:model-value` event when a value was changed.
+ * The `model-value` property will be set initially with the rule operation value.
+ */
+
+/**
+ * @typedef {object} Comparison
+ * @property {string} operator - value the comparison should have, e.g. !less, greater
+ * @property {string} name - Translated readable text, e.g. less or equals
+ */
+
+/**
+ * Public javascript api for apps to register custom plugins
+ */
+window.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {
+
+ /**
+ *
+ * @param {CheckPlugin} Plugin the plugin to register
+ */
+ registerCheck(Plugin) {
+ store.commit('addPluginCheck', Plugin)
+ },
+ /**
+ *
+ * @param {OperatorPlugin} Plugin the plugin to register
+ */
+ registerOperator(Plugin) {
+ store.commit('addPluginOperator', Plugin)
+ },
+})
+
+// Register shipped checks
+ShippedChecks.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))
+
+Vue.use(Vuex)
+Vue.prototype.t = t
+
+const View = Vue.extend(Settings)
+const workflowengine = new View({
+ store,
+})
+workflowengine.$mount('#workflowengine')
diff --git a/apps/workflowengine/templates/admin.php b/apps/workflowengine/templates/admin.php
deleted file mode 100644
index e9873f8f289..00000000000
--- a/apps/workflowengine/templates/admin.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-/** @var array $_ */
-/** @var \OCP\IL10N $l */
-?>
-<div id="<?php p($_['appid']); ?>" class="section workflowengine">
- <h2 class="inlineblock"><?php p($_['heading']); ?></h2>
- <?php if (!empty($_['docs'])): ?>
- <a target="_blank" rel="noreferrer noopener" class="icon-info svg"
- title="<?php p($l->t('Open documentation'));?>"
- href="<?php p(link_to_docs($_['docs'])); ?>">
- </a>
- <?php endif; ?>
-
- <?php if (!empty($_['settings-hint'])): ?>
- <p class="settings-hint"><?php p($_['settings-hint']); ?></p>
- <?php endif; ?>
-
- <?php if (!empty($_['description'])): ?>
- <p><?php p($_['description']); ?></p>
- <?php endif; ?>
-
- <script type="text/template" id="operations-template">
- <div class="operations"></div>
- <button class="button-add-operation"><?php p($l->t('Add rule group')); ?></button>
- </script>
-
- <script type="text/template" id="operation-template">
- <div class="operation{{#if hasChanged}} modified{{/if}}">
- <input type="text" class="operation-name" placeholder="<?php p($l->t('Short rule description')); ?>" value="{{operation.name}}">
- {{! delete only makes sense if the operation is already saved }}
- {{#if operation.id}}
- <span class="button-delete pull-right icon-delete"></span>
- {{/if}}
- <input type="text" class="pull-right operation-operation" value="{{operation.operation}}">
-
- <div class="checks">
- {{#each operation.checks}}
- <div class="check" data-id="{{@index}}">
- <select class="check-class">
- {{#each ../classes}}
- <option value="{{class}}" {{{selectItem class ../class}}}>{{name}}</option>
- {{/each}}
- </select>
- <select class="check-operator">
- {{#each (getOperators class)}}
- <option value="{{operator}}" {{{selectItem operator ../operator}}}>{{name}}</option>
- {{/each}}
- </select>
- <input type="text" class="check-value" value="{{value}}">
- <span class="button-delete-check pull-right icon-delete"></span>
- </div>
- {{/each}}
- </div>
- <button class="button-add"><?php p($l->t('Add rule')); ?></button>
- {{#if hasChanged}}
- {{! reset only makes sense if the operation is already saved }}
- {{#if operation.id}}
- <button class="button-reset pull-right"><?php p($l->t('Reset')); ?></button>
- {{/if}}
- <button class="button-save pull-right"><?php p($l->t('Save')); ?></button>
- {{/if}}
- {{#if saving}}
- <span class="icon-loading-small pull-right"></span>
- <span class="pull-right"><?php p($l->t('Saving…')); ?></span>
- {{else}}{{#if message}}
- <span class="msg pull-right {{#if errorMessage}}error{{else}}success{{/if}}">
- {{message}}{{#if errorMessage}} {{errorMessage}}{{/if}}
- </span>
- {{/if}}{{/if}}
- </div>
- </script>
-
- <div class="rules"><span class="icon-loading-small"></span> <?php p($l->t('Loading…')); ?></div>
-</div>
diff --git a/apps/workflowengine/templates/settings.php b/apps/workflowengine/templates/settings.php
new file mode 100644
index 00000000000..2efd7fa17e7
--- /dev/null
+++ b/apps/workflowengine/templates/settings.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+use OCA\WorkflowEngine\AppInfo\Application;
+
+/** @var array $_ */
+/** @var \OCP\IL10N $l */
+?>
+<div id="<?php p(Application::APP_ID); ?>"></div>
diff --git a/apps/workflowengine/tests/Check/AbstractStringCheckTest.php b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
index b7051870115..26d4ccb8553 100644
--- a/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
+++ b/apps/workflowengine/tests/Check/AbstractStringCheckTest.php
@@ -1,46 +1,33 @@
<?php
+
+declare(strict_types=1);
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Tests\Check;
+use OCA\WorkflowEngine\Check\AbstractStringCheck;
use OCP\IL10N;
+use PHPUnit\Framework\MockObject\MockObject;
class AbstractStringCheckTest extends \Test\TestCase {
-
- protected function getCheckMock() {
+ protected function getCheckMock(): AbstractStringCheck|MockObject {
$l = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$l->expects($this->any())
->method('t')
- ->willReturnCallback(function($string, $args) {
- return sprintf($string, $args);
- });
+ ->willReturnCallback(function ($string, $args) {
+ return sprintf($string, $args);
+ });
- $check = $this->getMockBuilder('OCA\WorkflowEngine\Check\AbstractStringCheck')
+ $check = $this->getMockBuilder(AbstractStringCheck::class)
->setConstructorArgs([
$l,
])
- ->setMethods([
- 'setPath',
+ ->onlyMethods([
'executeCheck',
'getActualValue',
])
@@ -49,7 +36,7 @@ class AbstractStringCheckTest extends \Test\TestCase {
return $check;
}
- public function dataExecuteStringCheck() {
+ public static function dataExecuteStringCheck(): array {
return [
['is', 'same', 'same', true],
['is', 'different', 'not the same', false],
@@ -63,21 +50,15 @@ class AbstractStringCheckTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataExecuteStringCheck
- * @param string $operation
- * @param string $checkValue
- * @param string $actualValue
- * @param bool $expected
- */
- public function testExecuteStringCheck($operation, $checkValue, $actualValue, $expected) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteStringCheck')]
+ public function testExecuteStringCheck(string $operation, string $checkValue, string $actualValue, bool $expected): void {
$check = $this->getCheckMock();
- /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */
+ /** @var AbstractStringCheck $check */
$this->assertEquals($expected, $this->invokePrivate($check, 'executeStringCheck', [$operation, $checkValue, $actualValue]));
}
- public function dataValidateCheck() {
+ public static function dataValidateCheck(): array {
return [
['is', '/Invalid(Regex/'],
['!is', '/Invalid(Regex/'],
@@ -86,19 +67,17 @@ class AbstractStringCheckTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataValidateCheck
- * @param string $operator
- * @param string $value
- */
- public function testValidateCheck($operator, $value) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataValidateCheck')]
+ public function testValidateCheck(string $operator, string $value): void {
$check = $this->getCheckMock();
- /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */
+ /** @var AbstractStringCheck $check */
$check->validateCheck($operator, $value);
+
+ $this->addToAssertionCount(1);
}
- public function dataValidateCheckInvalid() {
+ public static function dataValidateCheckInvalid(): array {
return [
['!!is', '', 1, 'The given operator is invalid'],
['less', '', 1, 'The given operator is invalid'],
@@ -107,18 +86,12 @@ class AbstractStringCheckTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataValidateCheckInvalid
- * @param $operator
- * @param $value
- * @param $exceptionCode
- * @param $exceptionMessage
- */
- public function testValidateCheckInvalid($operator, $value, $exceptionCode, $exceptionMessage) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataValidateCheckInvalid')]
+ public function testValidateCheckInvalid(string $operator, string $value, int $exceptionCode, string $exceptionMessage): void {
$check = $this->getCheckMock();
try {
- /** @var \OCA\WorkflowEngine\Check\AbstractStringCheck $check */
+ /** @var AbstractStringCheck $check */
$check->validateCheck($operator, $value);
} catch (\UnexpectedValueException $e) {
$this->assertEquals($exceptionCode, $e->getCode());
@@ -126,21 +99,15 @@ class AbstractStringCheckTest extends \Test\TestCase {
}
}
- public function dataMatch() {
+ public static function dataMatch(): array {
return [
['/valid/', 'valid', [], true],
['/valid/', 'valid', [md5('/valid/') => [md5('valid') => false]], false], // Cache hit
];
}
- /**
- * @dataProvider dataMatch
- * @param string $pattern
- * @param string $subject
- * @param array[] $matches
- * @param bool $expected
- */
- public function testMatch($pattern, $subject, $matches, $expected) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataMatch')]
+ public function testMatch(string $pattern, string $subject, array $matches, bool $expected): void {
$check = $this->getCheckMock();
$this->invokePrivate($check, 'matches', [$matches]);
diff --git a/apps/workflowengine/tests/Check/FileMimeTypeTest.php b/apps/workflowengine/tests/Check/FileMimeTypeTest.php
new file mode 100644
index 00000000000..55aea3db172
--- /dev/null
+++ b/apps/workflowengine/tests/Check/FileMimeTypeTest.php
@@ -0,0 +1,177 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+
+namespace OCA\WorkflowEngine\Tests\Check;
+
+use OC\Files\Storage\Temporary;
+use OCA\WorkflowEngine\Check\FileMimeType;
+use OCP\Files\IMimeTypeDetector;
+use OCP\IL10N;
+use OCP\IRequest;
+use Test\TestCase;
+
+class TemporaryNoLocal extends Temporary {
+ public function instanceOfStorage(string $class): bool {
+ if ($class === '\OC\Files\Storage\Local') {
+ return false;
+ } else {
+ return parent::instanceOfStorage($class);
+ }
+ }
+}
+
+/**
+ * @group DB
+ */
+class FileMimeTypeTest extends TestCase {
+ /** @var IL10N */
+ private $l10n;
+ /** @var IRequest */
+ private $request;
+ /** @var IMimeTypeDetector */
+ private $mimeDetector;
+
+ private $extensions = [
+ '.txt' => 'text/plain-path-detected',
+ ];
+
+ private $content = [
+ 'text-content' => 'text/plain-content-detected',
+ ];
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->l10n = $this->createMock(IL10N::class);
+ $this->request = $this->createMock(IRequest::class);
+ $this->mimeDetector = $this->createMock(IMimeTypeDetector::class);
+ $this->mimeDetector->method('detectPath')
+ ->willReturnCallback(function ($path) {
+ foreach ($this->extensions as $extension => $mime) {
+ if (str_contains($path, $extension)) {
+ return $mime;
+ }
+ }
+ return 'application/octet-stream';
+ });
+ $this->mimeDetector->method('detectContent')
+ ->willReturnCallback(function ($path) {
+ $body = file_get_contents($path);
+ foreach ($this->content as $match => $mime) {
+ if (str_contains($body, $match)) {
+ return $mime;
+ }
+ }
+ return 'application/octet-stream';
+ });
+ }
+
+ public function testUseCachedMimetype(): void {
+ $storage = new Temporary([]);
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'asd');
+ $storage->getScanner()->scan('');
+
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain'));
+ }
+
+ public function testNonCachedNotExists(): void {
+ $storage = new Temporary([]);
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-path-detected'));
+ }
+
+ public function testNonCachedLocal(): void {
+ $storage = new Temporary([]);
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'text-content');
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-content-detected'));
+ }
+
+ public function testNonCachedNotLocal(): void {
+ $storage = new TemporaryNoLocal([]);
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'text-content');
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-content-detected'));
+ }
+
+ public function testFallback(): void {
+ $storage = new Temporary([]);
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'unknown');
+
+ $this->assertTrue($check->executeCheck('is', 'application/octet-stream'));
+ }
+
+ public function testFromCacheCached(): void {
+ $storage = new Temporary([]);
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'text-content');
+ $storage->getScanner()->scan('');
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain'));
+
+ $storage->getCache()->clear();
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain'));
+
+ $newCheck = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $newCheck->setFileInfo($storage, 'foo/bar.txt');
+ $this->assertTrue($newCheck->executeCheck('is', 'text/plain-content-detected'));
+ }
+
+ public function testExistsCached(): void {
+ $storage = new TemporaryNoLocal([]);
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'text-content');
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-content-detected'));
+ $storage->unlink('foo/bar.txt');
+ $this->assertTrue($check->executeCheck('is', 'text/plain-content-detected'));
+
+ $newCheck = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $newCheck->setFileInfo($storage, 'foo/bar.txt');
+ $this->assertTrue($newCheck->executeCheck('is', 'text/plain-path-detected'));
+ }
+
+ public function testNonExistsNotCached(): void {
+ $storage = new TemporaryNoLocal([]);
+
+ $check = new FileMimeType($this->l10n, $this->request, $this->mimeDetector);
+ $check->setFileInfo($storage, 'foo/bar.txt');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-path-detected'));
+
+ $storage->mkdir('foo');
+ $storage->file_put_contents('foo/bar.txt', 'text-content');
+
+ $this->assertTrue($check->executeCheck('is', 'text/plain-content-detected'));
+ }
+}
diff --git a/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
index 9e313122a1f..c0e56daefa8 100644
--- a/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
+++ b/apps/workflowengine/tests/Check/RequestRemoteAddressTest.php
@@ -1,41 +1,24 @@
<?php
+
+declare(strict_types=1);
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Tests\Check;
+use OCA\WorkflowEngine\Check\RequestRemoteAddress;
use OCP\IL10N;
use OCP\IRequest;
+use PHPUnit\Framework\MockObject\MockObject;
class RequestRemoteAddressTest extends \Test\TestCase {
- /** @var \OCP\IRequest|\PHPUnit_Framework_MockObject_MockObject */
- protected $request;
+ protected IRequest&MockObject $request;
- /**
- * @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject
- */
- protected function getL10NMock() {
- $l = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()
- ->getMock();
+ protected function getL10NMock(): IL10N&MockObject {
+ $l = $this->createMock(IL10N::class);
$l->expects($this->any())
->method('t')
->willReturnCallback(function ($string, $args) {
@@ -44,14 +27,13 @@ class RequestRemoteAddressTest extends \Test\TestCase {
return $l;
}
- protected function setUp() {
+ protected function setUp(): void {
parent::setUp();
- $this->request = $this->getMockBuilder(IRequest::class)
- ->getMock();
+ $this->request = $this->createMock(IRequest::class);
}
- public function dataExecuteCheckIPv4() {
+ public static function dataExecuteCheckIPv4(): array {
return [
['127.0.0.1/32', '127.0.0.1', true],
['127.0.0.1/32', '127.0.0.0', false],
@@ -62,14 +44,9 @@ class RequestRemoteAddressTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataExecuteCheckIPv4
- * @param string $value
- * @param string $ip
- * @param bool $expected
- */
- public function testExecuteCheckMatchesIPv4($value, $ip, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheckIPv4')]
+ public function testExecuteCheckMatchesIPv4(string $value, string $ip, bool $expected): void {
+ $check = new RequestRemoteAddress($this->getL10NMock(), $this->request);
$this->request->expects($this->once())
->method('getRemoteAddress')
@@ -78,14 +55,9 @@ class RequestRemoteAddressTest extends \Test\TestCase {
$this->assertEquals($expected, $check->executeCheck('matchesIPv4', $value));
}
- /**
- * @dataProvider dataExecuteCheckIPv4
- * @param string $value
- * @param string $ip
- * @param bool $expected
- */
- public function testExecuteCheckNotMatchesIPv4($value, $ip, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheckIPv4')]
+ public function testExecuteCheckNotMatchesIPv4(string $value, string $ip, bool $expected): void {
+ $check = new RequestRemoteAddress($this->getL10NMock(), $this->request);
$this->request->expects($this->once())
->method('getRemoteAddress')
@@ -94,7 +66,7 @@ class RequestRemoteAddressTest extends \Test\TestCase {
$this->assertEquals(!$expected, $check->executeCheck('!matchesIPv4', $value));
}
- public function dataExecuteCheckIPv6() {
+ public static function dataExecuteCheckIPv6(): array {
return [
['::1/128', '::1', true],
['::2/128', '::3', false],
@@ -106,14 +78,9 @@ class RequestRemoteAddressTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataExecuteCheckIPv6
- * @param string $value
- * @param string $ip
- * @param bool $expected
- */
- public function testExecuteCheckMatchesIPv6($value, $ip, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheckIPv6')]
+ public function testExecuteCheckMatchesIPv6(string $value, string $ip, bool $expected): void {
+ $check = new RequestRemoteAddress($this->getL10NMock(), $this->request);
$this->request->expects($this->once())
->method('getRemoteAddress')
@@ -122,14 +89,9 @@ class RequestRemoteAddressTest extends \Test\TestCase {
$this->assertEquals($expected, $check->executeCheck('matchesIPv6', $value));
}
- /**
- * @dataProvider dataExecuteCheckIPv6
- * @param string $value
- * @param string $ip
- * @param bool $expected
- */
- public function testExecuteCheckNotMatchesIPv6($value, $ip, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestRemoteAddress($this->getL10NMock(), $this->request);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheckIPv6')]
+ public function testExecuteCheckNotMatchesIPv6(string $value, string $ip, bool $expected): void {
+ $check = new RequestRemoteAddress($this->getL10NMock(), $this->request);
$this->request->expects($this->once())
->method('getRemoteAddress')
diff --git a/apps/workflowengine/tests/Check/RequestTimeTest.php b/apps/workflowengine/tests/Check/RequestTimeTest.php
index 7249f5109f2..a8439b8b9f4 100644
--- a/apps/workflowengine/tests/Check/RequestTimeTest.php
+++ b/apps/workflowengine/tests/Check/RequestTimeTest.php
@@ -1,40 +1,23 @@
<?php
+
+declare(strict_types=1);
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Tests\Check;
+use OCA\WorkflowEngine\Check\RequestTime;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\IL10N;
+use PHPUnit\Framework\MockObject\MockObject;
class RequestTimeTest extends \Test\TestCase {
+ protected ITimeFactory&MockObject $timeFactory;
- /** @var \OCP\AppFramework\Utility\ITimeFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $timeFactory;
-
- /**
- * @return \OCP\IL10N|\PHPUnit_Framework_MockObject_MockObject
- */
- protected function getL10NMock() {
- $l = $this->getMockBuilder(IL10N::class)
- ->disableOriginalConstructor()
- ->getMock();
+ protected function getL10NMock(): IL10N&MockObject {
+ $l = $this->createMock(IL10N::class);
$l->expects($this->any())
->method('t')
->willReturnCallback(function ($string, $args) {
@@ -43,14 +26,13 @@ class RequestTimeTest extends \Test\TestCase {
return $l;
}
- protected function setUp() {
+ protected function setUp(): void {
parent::setUp();
- $this->timeFactory = $this->getMockBuilder('OCP\AppFramework\Utility\ITimeFactory')
- ->getMock();
+ $this->timeFactory = $this->createMock(ITimeFactory::class);
}
- public function dataExecuteCheck() {
+ public static function dataExecuteCheck(): array {
return [
[json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467870105, false], // 2016-07-07T07:41:45+02:00
[json_encode(['08:00 Europe/Berlin', '17:00 Europe/Berlin']), 1467873705, true], // 2016-07-07T08:41:45+02:00
@@ -81,14 +63,9 @@ class RequestTimeTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataExecuteCheck
- * @param string $value
- * @param int $timestamp
- * @param bool $expected
- */
- public function testExecuteCheckIn($value, $timestamp, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheck')]
+ public function testExecuteCheckIn(string $value, int $timestamp, bool $expected): void {
+ $check = new RequestTime($this->getL10NMock(), $this->timeFactory);
$this->timeFactory->expects($this->once())
->method('getTime')
@@ -97,14 +74,9 @@ class RequestTimeTest extends \Test\TestCase {
$this->assertEquals($expected, $check->executeCheck('in', $value));
}
- /**
- * @dataProvider dataExecuteCheck
- * @param string $value
- * @param int $timestamp
- * @param bool $expected
- */
- public function testExecuteCheckNotIn($value, $timestamp, $expected) {
- $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheck')]
+ public function testExecuteCheckNotIn(string $value, int $timestamp, bool $expected): void {
+ $check = new RequestTime($this->getL10NMock(), $this->timeFactory);
$this->timeFactory->expects($this->once())
->method('getTime')
@@ -113,7 +85,7 @@ class RequestTimeTest extends \Test\TestCase {
$this->assertEquals(!$expected, $check->executeCheck('!in', $value));
}
- public function dataValidateCheck() {
+ public static function dataValidateCheck(): array {
return [
['in', '["08:00 Europe/Berlin","17:00 Europe/Berlin"]'],
['!in', '["08:00 Europe/Berlin","17:00 America/North_Dakota/Beulah"]'],
@@ -121,17 +93,14 @@ class RequestTimeTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataValidateCheck
- * @param string $operator
- * @param string $value
- */
- public function testValidateCheck($operator, $value) {
- $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataValidateCheck')]
+ public function testValidateCheck(string $operator, string $value): void {
+ $check = new RequestTime($this->getL10NMock(), $this->timeFactory);
$check->validateCheck($operator, $value);
+ $this->addToAssertionCount(1);
}
- public function dataValidateCheckInvalid() {
+ public static function dataValidateCheckInvalid(): array {
return [
['!!in', '["08:00 Europe/Berlin","17:00 Europe/Berlin"]', 1, 'The given operator is invalid'],
['in', '["28:00 Europe/Berlin","17:00 Europe/Berlin"]', 2, 'The given time span is invalid'],
@@ -143,15 +112,9 @@ class RequestTimeTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataValidateCheckInvalid
- * @param string $operator
- * @param string $value
- * @param int $exceptionCode
- * @param string $exceptionMessage
- */
- public function testValidateCheckInvalid($operator, $value, $exceptionCode, $exceptionMessage) {
- $check = new \OCA\WorkflowEngine\Check\RequestTime($this->getL10NMock(), $this->timeFactory);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataValidateCheckInvalid')]
+ public function testValidateCheckInvalid(string $operator, string $value, int $exceptionCode, string $exceptionMessage): void {
+ $check = new RequestTime($this->getL10NMock(), $this->timeFactory);
try {
$check->validateCheck($operator, $value);
diff --git a/apps/workflowengine/tests/Check/RequestUserAgentTest.php b/apps/workflowengine/tests/Check/RequestUserAgentTest.php
new file mode 100644
index 00000000000..09eaea6555b
--- /dev/null
+++ b/apps/workflowengine/tests/Check/RequestUserAgentTest.php
@@ -0,0 +1,94 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\WorkflowEngine\Tests\Check;
+
+use OCA\WorkflowEngine\Check\AbstractStringCheck;
+use OCA\WorkflowEngine\Check\RequestUserAgent;
+use OCP\IL10N;
+use OCP\IRequest;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+class RequestUserAgentTest extends TestCase {
+ protected IRequest&MockObject $request;
+ protected RequestUserAgent $check;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->request = $this->createMock(IRequest::class);
+ /** @var IL10N&MockObject $l */
+ $l = $this->createMock(IL10N::class);
+ $l->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function ($string, $args) {
+ return sprintf($string, $args);
+ });
+
+ $this->check = new RequestUserAgent($l, $this->request);
+ }
+
+ public static function dataExecuteCheck(): array {
+ return [
+ ['is', 'android', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', true],
+ ['is', 'android', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', false],
+ ['is', 'android', 'Mozilla/5.0 (Linux) mirall/2.2.0', false],
+ ['is', 'android', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', false],
+ ['is', 'android', 'Filelink for *cloud/2.2.0', false],
+ ['!is', 'android', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', false],
+ ['!is', 'android', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', true],
+ ['!is', 'android', 'Mozilla/5.0 (Linux) mirall/2.2.0', true],
+ ['!is', 'android', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', true],
+ ['!is', 'android', 'Filelink for *cloud/2.2.0', true],
+
+ ['is', 'ios', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', false],
+ ['is', 'ios', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', true],
+ ['is', 'ios', 'Mozilla/5.0 (Linux) mirall/2.2.0', false],
+ ['is', 'ios', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', false],
+ ['is', 'ios', 'Filelink for *cloud/2.2.0', false],
+ ['!is', 'ios', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', true],
+ ['!is', 'ios', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', false],
+ ['!is', 'ios', 'Mozilla/5.0 (Linux) mirall/2.2.0', true],
+ ['!is', 'ios', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', true],
+ ['!is', 'ios', 'Filelink for *cloud/2.2.0', true],
+
+ ['is', 'desktop', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', false],
+ ['is', 'desktop', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', false],
+ ['is', 'desktop', 'Mozilla/5.0 (Linux) mirall/2.2.0', true],
+ ['is', 'desktop', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', false],
+ ['is', 'desktop', 'Filelink for *cloud/2.2.0', false],
+ ['!is', 'desktop', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', true],
+ ['!is', 'desktop', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', true],
+ ['!is', 'desktop', 'Mozilla/5.0 (Linux) mirall/2.2.0', false],
+ ['!is', 'desktop', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', true],
+ ['!is', 'desktop', 'Filelink for *cloud/2.2.0', true],
+
+ ['is', 'mail', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', false],
+ ['is', 'mail', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', false],
+ ['is', 'mail', 'Mozilla/5.0 (Linux) mirall/2.2.0', false],
+ ['is', 'mail', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', true],
+ ['is', 'mail', 'Filelink for *cloud/2.2.0', true],
+ ['!is', 'mail', 'Mozilla/5.0 (Android) Nextcloud-android/2.2.0', true],
+ ['!is', 'mail', 'Mozilla/5.0 (iOS) Nextcloud-iOS/2.2.0', true],
+ ['!is', 'mail', 'Mozilla/5.0 (Linux) mirall/2.2.0', true],
+ ['!is', 'mail', 'Mozilla/5.0 (Windows) Nextcloud-Outlook v2.2.0', false],
+ ['!is', 'mail', 'Filelink for *cloud/2.2.0', false],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataExecuteCheck')]
+ public function testExecuteCheck(string $operation, string $checkValue, string $actualValue, bool $expected): void {
+ $this->request->expects($this->once())
+ ->method('getHeader')
+ ->willReturn($actualValue);
+
+ /** @var AbstractStringCheck $check */
+ $this->assertEquals($expected, $this->check->executeCheck($operation, $checkValue));
+ }
+}
diff --git a/apps/workflowengine/tests/ManagerTest.php b/apps/workflowengine/tests/ManagerTest.php
index 9136bf0e7cd..56e45936b82 100644
--- a/apps/workflowengine/tests/ManagerTest.php
+++ b/apps/workflowengine/tests/ManagerTest.php
@@ -1,31 +1,40 @@
<?php
+
/**
- * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
-
namespace OCA\WorkflowEngine\Tests;
-
+use OC\Files\Config\UserMountCache;
+use OC\L10N\L10N;
+use OCA\WorkflowEngine\Entity\File;
+use OCA\WorkflowEngine\Helper\ScopeContext;
use OCA\WorkflowEngine\Manager;
+use OCP\AppFramework\QueryException;
+use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files\Events\Node\NodeCreatedEvent;
+use OCP\Files\IRootFolder;
+use OCP\Files\Mount\IMountManager;
+use OCP\ICache;
+use OCP\ICacheFactory;
+use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IL10N;
use OCP\IServerContainer;
+use OCP\IURLGenerator;
+use OCP\IUserManager;
+use OCP\IUserSession;
+use OCP\Server;
+use OCP\SystemTag\ISystemTagManager;
+use OCP\WorkflowEngine\Events\RegisterEntitiesEvent;
+use OCP\WorkflowEngine\ICheck;
+use OCP\WorkflowEngine\IEntity;
+use OCP\WorkflowEngine\IEntityEvent;
+use OCP\WorkflowEngine\IManager;
+use OCP\WorkflowEngine\IOperation;
+use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Log\LoggerInterface;
use Test\TestCase;
/**
@@ -35,43 +44,88 @@ use Test\TestCase;
* @group DB
*/
class ManagerTest extends TestCase {
-
/** @var Manager */
protected $manager;
- /** @var IDBConnection */
+ /** @var MockObject|IDBConnection */
protected $db;
+ /** @var \PHPUnit\Framework\MockObject\MockObject|LoggerInterface */
+ protected $logger;
+ /** @var MockObject|IServerContainer */
+ protected $container;
+ /** @var MockObject|IUserSession */
+ protected $session;
+ /** @var MockObject|L10N */
+ protected $l;
+ /** @var MockObject|IEventDispatcher */
+ protected $dispatcher;
+ /** @var MockObject|IConfig */
+ protected $config;
+ /** @var MockObject|ICacheFactory */
+ protected $cacheFactory;
- protected function setUp() {
+ protected function setUp(): void {
parent::setUp();
- $this->db = \OC::$server->getDatabaseConnection();
- $container = $this->createMock(IServerContainer::class);
- $l = $this->createMock(IL10N::class);
- $l->method('t')
- ->will($this->returnCallback(function($text, $parameters = []) {
+ $this->db = Server::get(IDBConnection::class);
+ $this->container = $this->createMock(IServerContainer::class);
+ /** @var IL10N|MockObject $l */
+ $this->l = $this->createMock(IL10N::class);
+ $this->l->method('t')
+ ->willReturnCallback(function ($text, $parameters = []) {
return vsprintf($text, $parameters);
- }));
+ });
+
+ $this->logger = $this->createMock(LoggerInterface::class);
+ $this->session = $this->createMock(IUserSession::class);
+ $this->dispatcher = $this->createMock(IEventDispatcher::class);
+ $this->config = $this->createMock(IConfig::class);
+ $this->cacheFactory = $this->createMock(ICacheFactory::class);
$this->manager = new Manager(
- \OC::$server->getDatabaseConnection(),
- $container,
- $l
+ Server::get(IDBConnection::class),
+ $this->container,
+ $this->l,
+ $this->logger,
+ $this->session,
+ $this->dispatcher,
+ $this->config,
+ $this->cacheFactory
);
- $this->clearChecks();
+ $this->clearTables();
}
- protected function tearDown() {
- $this->clearChecks();
+ protected function tearDown(): void {
+ $this->clearTables();
parent::tearDown();
}
- public function clearChecks() {
+ /**
+ * @return MockObject|ScopeContext
+ */
+ protected function buildScope(?string $scopeId = null): MockObject {
+ $scopeContext = $this->createMock(ScopeContext::class);
+ $scopeContext->expects($this->any())
+ ->method('getScope')
+ ->willReturn($scopeId ? IManager::SCOPE_USER : IManager::SCOPE_ADMIN);
+ $scopeContext->expects($this->any())
+ ->method('getScopeId')
+ ->willReturn($scopeId ?? '');
+ $scopeContext->expects($this->any())
+ ->method('getHash')
+ ->willReturn(md5($scopeId ?? ''));
+
+ return $scopeContext;
+ }
+
+ public function clearTables() {
$query = $this->db->getQueryBuilder();
- $query->delete('flow_checks')
- ->execute();
+ foreach (['flow_checks', 'flow_operations', 'flow_operations_scope'] as $table) {
+ $query->delete($table)
+ ->execute();
+ }
}
- public function testChecks() {
+ public function testChecks(): void {
$check1 = $this->invokePrivate($this->manager, 'addCheck', ['Test', 'equal', 1]);
$check2 = $this->invokePrivate($this->manager, 'addCheck', ['Test', '!equal', 2]);
@@ -91,4 +145,650 @@ class ManagerTest extends TestCase {
$this->assertArrayNotHasKey($check1, $data);
$this->assertArrayHasKey($check2, $data);
}
+
+ public function testScope(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $opId1 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test01', [11, 22], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId1, $adminScope]);
+
+ $opId2 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test02', [33, 22], 'bar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId2, $userScope]);
+ $opId3 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test03', [11, 44], 'foobar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId3, $userScope]);
+
+ $this->assertTrue($this->invokePrivate($this->manager, 'canModify', [$opId1, $adminScope]));
+ $this->assertFalse($this->invokePrivate($this->manager, 'canModify', [$opId2, $adminScope]));
+ $this->assertFalse($this->invokePrivate($this->manager, 'canModify', [$opId3, $adminScope]));
+
+ $this->assertFalse($this->invokePrivate($this->manager, 'canModify', [$opId1, $userScope]));
+ $this->assertTrue($this->invokePrivate($this->manager, 'canModify', [$opId2, $userScope]));
+ $this->assertTrue($this->invokePrivate($this->manager, 'canModify', [$opId3, $userScope]));
+ }
+
+ public function testGetAllOperations(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $adminOperation = $this->createMock(IOperation::class);
+ $adminOperation->expects($this->any())
+ ->method('isAvailableForScope')
+ ->willReturnMap([
+ [IManager::SCOPE_ADMIN, true],
+ [IManager::SCOPE_USER, false],
+ ]);
+ $userOperation = $this->createMock(IOperation::class);
+ $userOperation->expects($this->any())
+ ->method('isAvailableForScope')
+ ->willReturnMap([
+ [IManager::SCOPE_ADMIN, false],
+ [IManager::SCOPE_USER, true],
+ ]);
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($adminOperation, $userOperation) {
+ switch ($className) {
+ case 'OCA\WFE\TestAdminOp':
+ return $adminOperation;
+ case 'OCA\WFE\TestUserOp':
+ return $userOperation;
+ }
+ });
+
+ $opId1 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestAdminOp', 'Test01', [11, 22], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId1, $adminScope]);
+
+ $opId2 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestUserOp', 'Test02', [33, 22], 'bar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId2, $userScope]);
+ $opId3 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestUserOp', 'Test03', [11, 44], 'foobar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId3, $userScope]);
+
+ $opId4 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestAdminOp', 'Test04', [41, 10, 4], 'NoBar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId4, $userScope]);
+
+ $adminOps = $this->manager->getAllOperations($adminScope);
+ $userOps = $this->manager->getAllOperations($userScope);
+
+ $this->assertSame(1, count($adminOps));
+ $this->assertTrue(array_key_exists('OCA\WFE\TestAdminOp', $adminOps));
+ $this->assertFalse(array_key_exists('OCA\WFE\TestUserOp', $adminOps));
+
+ $this->assertSame(1, count($userOps));
+ $this->assertFalse(array_key_exists('OCA\WFE\TestAdminOp', $userOps));
+ $this->assertTrue(array_key_exists('OCA\WFE\TestUserOp', $userOps));
+ $this->assertSame(2, count($userOps['OCA\WFE\TestUserOp']));
+ }
+
+ public function testGetOperations(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $opId1 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test01', [11, 22], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId1, $adminScope]);
+ $opId4 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\OtherTestOp', 'Test04', [5], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId4, $adminScope]);
+
+ $opId2 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test02', [33, 22], 'bar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId2, $userScope]);
+ $opId3 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestOp', 'Test03', [11, 44], 'foobar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId3, $userScope]);
+ $opId5 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\OtherTestOp', 'Test05', [5], 'foobar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId5, $userScope]);
+
+ $operation = $this->createMock(IOperation::class);
+ $operation->expects($this->any())
+ ->method('isAvailableForScope')
+ ->willReturnMap([
+ [IManager::SCOPE_ADMIN, true],
+ [IManager::SCOPE_USER, true],
+ ]);
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($operation) {
+ switch ($className) {
+ case 'OCA\WFE\TestOp':
+ return $operation;
+ case 'OCA\WFE\OtherTestOp':
+ throw new QueryException();
+ }
+ });
+
+ $adminOps = $this->manager->getOperations('OCA\WFE\TestOp', $adminScope);
+ $userOps = $this->manager->getOperations('OCA\WFE\TestOp', $userScope);
+
+ $this->assertSame(1, count($adminOps));
+ array_walk($adminOps, function ($op): void {
+ $this->assertTrue($op['class'] === 'OCA\WFE\TestOp');
+ });
+
+ $this->assertSame(2, count($userOps));
+ array_walk($userOps, function ($op): void {
+ $this->assertTrue($op['class'] === 'OCA\WFE\TestOp');
+ });
+ }
+
+ public function testGetAllConfiguredEvents(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $opId5 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\OtherTestOp', 'Test04', [], 'foo', $entity, [NodeCreatedEvent::class]]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId5, $userScope]);
+
+ $allOperations = null;
+
+ $cache = $this->createMock(ICache::class);
+ $cache
+ ->method('get')
+ ->willReturnCallback(function () use (&$allOperations) {
+ if ($allOperations) {
+ return $allOperations;
+ }
+
+ return null;
+ });
+
+ $this->cacheFactory->method('createDistributed')->willReturn($cache);
+ $allOperations = $this->manager->getAllConfiguredEvents();
+ $this->assertCount(1, $allOperations);
+
+ $allOperationsCached = $this->manager->getAllConfiguredEvents();
+ $this->assertCount(1, $allOperationsCached);
+ $this->assertEquals($allOperationsCached, $allOperations);
+ }
+
+ public function testUpdateOperation(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $cache = $this->createMock(ICache::class);
+ $cache->expects($this->exactly(4))
+ ->method('remove')
+ ->with('events');
+ $this->cacheFactory->method('createDistributed')
+ ->willReturn($cache);
+
+ $expectedCalls = [
+ [IManager::SCOPE_ADMIN],
+ [IManager::SCOPE_USER],
+ ];
+ $i = 0;
+ $operationMock = $this->createMock(IOperation::class);
+ $operationMock->expects($this->any())
+ ->method('isAvailableForScope')
+ ->willReturnCallback(function () use (&$expectedCalls, &$i): bool {
+ $this->assertEquals($expectedCalls[$i], func_get_args());
+ $i++;
+ return true;
+ });
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($class) use ($operationMock) {
+ if (substr($class, -2) === 'Op') {
+ return $operationMock;
+ } elseif ($class === File::class) {
+ return $this->getMockBuilder(File::class)
+ ->setConstructorArgs([
+ $this->l,
+ $this->createMock(IURLGenerator::class),
+ $this->createMock(IRootFolder::class),
+ $this->createMock(IUserSession::class),
+ $this->createMock(ISystemTagManager::class),
+ $this->createMock(IUserManager::class),
+ $this->createMock(UserMountCache::class),
+ $this->createMock(IMountManager::class),
+ ])
+ ->onlyMethods($this->filterClassMethods(File::class, ['getEvents']))
+ ->getMock();
+ }
+ return $this->createMock(ICheck::class);
+ });
+
+ $opId1 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestAdminOp', 'Test01', [11, 22], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId1, $adminScope]);
+
+ $opId2 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestUserOp', 'Test02', [33, 22], 'bar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId2, $userScope]);
+
+ $check1 = ['class' => 'OCA\WFE\C22', 'operator' => 'eq', 'value' => 'asdf'];
+ $check2 = ['class' => 'OCA\WFE\C33', 'operator' => 'eq', 'value' => 23456];
+
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $op = $this->manager->updateOperation($opId1, 'Test01a', [$check1, $check2], 'foohur', $adminScope, $entity, ['\OCP\Files::postDelete']);
+ $this->assertSame('Test01a', $op['name']);
+ $this->assertSame('foohur', $op['operation']);
+
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $op = $this->manager->updateOperation($opId2, 'Test02a', [$check1], 'barfoo', $userScope, $entity, ['\OCP\Files::postDelete']);
+ $this->assertSame('Test02a', $op['name']);
+ $this->assertSame('barfoo', $op['operation']);
+
+ foreach ([[$adminScope, $opId2], [$userScope, $opId1]] as $run) {
+ try {
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $this->manager->updateOperation($run[1], 'Evil', [$check2], 'hackx0r', $run[0], $entity, []);
+ $this->assertTrue(false, 'DomainException not thrown');
+ } catch (\DomainException $e) {
+ $this->assertTrue(true);
+ }
+ }
+ }
+
+ public function testDeleteOperation(): void {
+ $adminScope = $this->buildScope();
+ $userScope = $this->buildScope('jackie');
+ $entity = File::class;
+
+ $cache = $this->createMock(ICache::class);
+ $cache->expects($this->exactly(4))
+ ->method('remove')
+ ->with('events');
+ $this->cacheFactory->method('createDistributed')->willReturn($cache);
+
+ $opId1 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestAdminOp', 'Test01', [11, 22], 'foo', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId1, $adminScope]);
+
+ $opId2 = $this->invokePrivate(
+ $this->manager,
+ 'insertOperation',
+ ['OCA\WFE\TestUserOp', 'Test02', [33, 22], 'bar', $entity, []]
+ );
+ $this->invokePrivate($this->manager, 'addScope', [$opId2, $userScope]);
+
+ foreach ([[$adminScope, $opId2], [$userScope, $opId1]] as $run) {
+ try {
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $this->manager->deleteOperation($run[1], $run[0]);
+ $this->assertTrue(false, 'DomainException not thrown');
+ } catch (\Exception $e) {
+ $this->assertInstanceOf(\DomainException::class, $e);
+ }
+ }
+
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $this->manager->deleteOperation($opId1, $adminScope);
+ /** @noinspection PhpUnhandledExceptionInspection */
+ $this->manager->deleteOperation($opId2, $userScope);
+
+ foreach ([$opId1, $opId2] as $opId) {
+ try {
+ $this->invokePrivate($this->manager, 'getOperation', [$opId]);
+ $this->assertTrue(false, 'UnexpectedValueException not thrown');
+ } catch (\Exception $e) {
+ $this->assertInstanceOf(\UnexpectedValueException::class, $e);
+ }
+ }
+ }
+
+ public function testGetEntitiesListBuildInOnly(): void {
+ $fileEntityMock = $this->createMock(File::class);
+
+ $this->container->expects($this->once())
+ ->method('query')
+ ->with(File::class)
+ ->willReturn($fileEntityMock);
+
+ $entities = $this->manager->getEntitiesList();
+
+ $this->assertCount(1, $entities);
+ $this->assertInstanceOf(IEntity::class, $entities[0]);
+ }
+
+ public function testGetEntitiesList(): void {
+ $fileEntityMock = $this->createMock(File::class);
+
+ $this->container->expects($this->once())
+ ->method('query')
+ ->with(File::class)
+ ->willReturn($fileEntityMock);
+
+ /** @var MockObject|IEntity $extraEntity */
+ $extraEntity = $this->createMock(IEntity::class);
+
+ $this->dispatcher->expects($this->once())
+ ->method('dispatchTyped')
+ ->willReturnCallback(function (RegisterEntitiesEvent $e) use ($extraEntity): void {
+ $this->manager->registerEntity($extraEntity);
+ });
+
+ $entities = $this->manager->getEntitiesList();
+
+ $this->assertCount(2, $entities);
+
+ $entityTypeCounts = array_reduce($entities, function (array $carry, IEntity $entity) {
+ if ($entity instanceof File) {
+ $carry[0]++;
+ } elseif ($entity instanceof IEntity) {
+ $carry[1]++;
+ }
+ return $carry;
+ }, [0, 0]);
+
+ $this->assertSame(1, $entityTypeCounts[0]);
+ $this->assertSame(1, $entityTypeCounts[1]);
+ }
+
+ public function testValidateOperationOK(): void {
+ $check = [
+ 'class' => ICheck::class,
+ 'operator' => 'is',
+ 'value' => 'barfoo',
+ ];
+
+ $operationMock = $this->createMock(IOperation::class);
+ $entityMock = $this->createMock(IEntity::class);
+ $eventEntityMock = $this->createMock(IEntityEvent::class);
+ $checkMock = $this->createMock(ICheck::class);
+ $scopeMock = $this->createMock(ScopeContext::class);
+
+ $scopeMock->expects($this->any())
+ ->method('getScope')
+ ->willReturn(IManager::SCOPE_ADMIN);
+
+ $operationMock->expects($this->once())
+ ->method('isAvailableForScope')
+ ->with(IManager::SCOPE_ADMIN)
+ ->willReturn(true);
+
+ $operationMock->expects($this->once())
+ ->method('validateOperation')
+ ->with('test', [$check], 'operationData');
+
+ $entityMock->expects($this->any())
+ ->method('getEvents')
+ ->willReturn([$eventEntityMock]);
+
+ $eventEntityMock->expects($this->any())
+ ->method('getEventName')
+ ->willReturn('MyEvent');
+
+ $checkMock->expects($this->any())
+ ->method('supportedEntities')
+ ->willReturn([IEntity::class]);
+ $checkMock->expects($this->atLeastOnce())
+ ->method('validateCheck');
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($operationMock, $entityMock, $eventEntityMock, $checkMock) {
+ switch ($className) {
+ case IOperation::class:
+ return $operationMock;
+ case IEntity::class:
+ return $entityMock;
+ case IEntityEvent::class:
+ return $eventEntityMock;
+ case ICheck::class:
+ return $checkMock;
+ default:
+ return $this->createMock($className);
+ }
+ });
+
+ $this->manager->validateOperation(IOperation::class, 'test', [$check], 'operationData', $scopeMock, IEntity::class, ['MyEvent']);
+ }
+
+ public function testValidateOperationCheckInputLengthError(): void {
+ $check = [
+ 'class' => ICheck::class,
+ 'operator' => 'is',
+ 'value' => str_pad('', IManager::MAX_CHECK_VALUE_BYTES + 1, 'FooBar'),
+ ];
+
+ $operationMock = $this->createMock(IOperation::class);
+ $entityMock = $this->createMock(IEntity::class);
+ $eventEntityMock = $this->createMock(IEntityEvent::class);
+ $checkMock = $this->createMock(ICheck::class);
+ $scopeMock = $this->createMock(ScopeContext::class);
+
+ $scopeMock->expects($this->any())
+ ->method('getScope')
+ ->willReturn(IManager::SCOPE_ADMIN);
+
+ $operationMock->expects($this->once())
+ ->method('isAvailableForScope')
+ ->with(IManager::SCOPE_ADMIN)
+ ->willReturn(true);
+
+ $operationMock->expects($this->once())
+ ->method('validateOperation')
+ ->with('test', [$check], 'operationData');
+
+ $entityMock->expects($this->any())
+ ->method('getEvents')
+ ->willReturn([$eventEntityMock]);
+
+ $eventEntityMock->expects($this->any())
+ ->method('getEventName')
+ ->willReturn('MyEvent');
+
+ $checkMock->expects($this->any())
+ ->method('supportedEntities')
+ ->willReturn([IEntity::class]);
+ $checkMock->expects($this->never())
+ ->method('validateCheck');
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($operationMock, $entityMock, $eventEntityMock, $checkMock) {
+ switch ($className) {
+ case IOperation::class:
+ return $operationMock;
+ case IEntity::class:
+ return $entityMock;
+ case IEntityEvent::class:
+ return $eventEntityMock;
+ case ICheck::class:
+ return $checkMock;
+ default:
+ return $this->createMock($className);
+ }
+ });
+
+ try {
+ $this->manager->validateOperation(IOperation::class, 'test', [$check], 'operationData', $scopeMock, IEntity::class, ['MyEvent']);
+ } catch (\UnexpectedValueException $e) {
+ $this->assertSame('The provided check value is too long', $e->getMessage());
+ }
+ }
+
+ public function testValidateOperationDataLengthError(): void {
+ $check = [
+ 'class' => ICheck::class,
+ 'operator' => 'is',
+ 'value' => 'barfoo',
+ ];
+ $operationData = str_pad('', IManager::MAX_OPERATION_VALUE_BYTES + 1, 'FooBar');
+
+ $operationMock = $this->createMock(IOperation::class);
+ $entityMock = $this->createMock(IEntity::class);
+ $eventEntityMock = $this->createMock(IEntityEvent::class);
+ $checkMock = $this->createMock(ICheck::class);
+ $scopeMock = $this->createMock(ScopeContext::class);
+
+ $scopeMock->expects($this->any())
+ ->method('getScope')
+ ->willReturn(IManager::SCOPE_ADMIN);
+
+ $operationMock->expects($this->once())
+ ->method('isAvailableForScope')
+ ->with(IManager::SCOPE_ADMIN)
+ ->willReturn(true);
+
+ $operationMock->expects($this->never())
+ ->method('validateOperation');
+
+ $entityMock->expects($this->any())
+ ->method('getEvents')
+ ->willReturn([$eventEntityMock]);
+
+ $eventEntityMock->expects($this->any())
+ ->method('getEventName')
+ ->willReturn('MyEvent');
+
+ $checkMock->expects($this->any())
+ ->method('supportedEntities')
+ ->willReturn([IEntity::class]);
+ $checkMock->expects($this->never())
+ ->method('validateCheck');
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($operationMock, $entityMock, $eventEntityMock, $checkMock) {
+ switch ($className) {
+ case IOperation::class:
+ return $operationMock;
+ case IEntity::class:
+ return $entityMock;
+ case IEntityEvent::class:
+ return $eventEntityMock;
+ case ICheck::class:
+ return $checkMock;
+ default:
+ return $this->createMock($className);
+ }
+ });
+
+ try {
+ $this->manager->validateOperation(IOperation::class, 'test', [$check], $operationData, $scopeMock, IEntity::class, ['MyEvent']);
+ } catch (\UnexpectedValueException $e) {
+ $this->assertSame('The provided operation data is too long', $e->getMessage());
+ }
+ }
+
+ public function testValidateOperationScopeNotAvailable(): void {
+ $check = [
+ 'class' => ICheck::class,
+ 'operator' => 'is',
+ 'value' => 'barfoo',
+ ];
+ $operationData = str_pad('', IManager::MAX_OPERATION_VALUE_BYTES + 1, 'FooBar');
+
+ $operationMock = $this->createMock(IOperation::class);
+ $entityMock = $this->createMock(IEntity::class);
+ $eventEntityMock = $this->createMock(IEntityEvent::class);
+ $checkMock = $this->createMock(ICheck::class);
+ $scopeMock = $this->createMock(ScopeContext::class);
+
+ $scopeMock->expects($this->any())
+ ->method('getScope')
+ ->willReturn(IManager::SCOPE_ADMIN);
+
+ $operationMock->expects($this->once())
+ ->method('isAvailableForScope')
+ ->with(IManager::SCOPE_ADMIN)
+ ->willReturn(false);
+
+ $operationMock->expects($this->never())
+ ->method('validateOperation');
+
+ $entityMock->expects($this->any())
+ ->method('getEvents')
+ ->willReturn([$eventEntityMock]);
+
+ $eventEntityMock->expects($this->any())
+ ->method('getEventName')
+ ->willReturn('MyEvent');
+
+ $checkMock->expects($this->any())
+ ->method('supportedEntities')
+ ->willReturn([IEntity::class]);
+ $checkMock->expects($this->never())
+ ->method('validateCheck');
+
+ $this->container->expects($this->any())
+ ->method('query')
+ ->willReturnCallback(function ($className) use ($operationMock, $entityMock, $eventEntityMock, $checkMock) {
+ switch ($className) {
+ case IOperation::class:
+ return $operationMock;
+ case IEntity::class:
+ return $entityMock;
+ case IEntityEvent::class:
+ return $eventEntityMock;
+ case ICheck::class:
+ return $checkMock;
+ default:
+ return $this->createMock($className);
+ }
+ });
+
+ try {
+ $this->manager->validateOperation(IOperation::class, 'test', [$check], $operationData, $scopeMock, IEntity::class, ['MyEvent']);
+ } catch (\UnexpectedValueException $e) {
+ $this->assertSame('Operation OCP\WorkflowEngine\IOperation is invalid', $e->getMessage());
+ }
+ }
}