diff options
Diffstat (limited to 'apps/workflowengine')
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()); + } + } } |