diff options
Diffstat (limited to 'apps/sharebymail')
121 files changed, 8894 insertions, 0 deletions
diff --git a/apps/sharebymail/appinfo/info.xml b/apps/sharebymail/appinfo/info.xml new file mode 100644 index 00000000000..e336561cb6a --- /dev/null +++ b/apps/sharebymail/appinfo/info.xml @@ -0,0 +1,35 @@ +<?xml version="1.0"?> +<!-- + - 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>sharebymail</id> + <name>Share by mail</name> + <summary>Share provider which allows you to share files by mail</summary> + <description>Share provider which allows you to share files by mail</description> + <version>1.22.0</version> + <licence>agpl</licence> + <author>Bjoern Schiessle</author> + <namespace>ShareByMail</namespace> + + <types> + <filesystem/> + </types> + <category>social</category> + <bugs>https://github.com/nextcloud/server/issues</bugs> + <dependencies> + <nextcloud min-version="32" max-version="32"/> + </dependencies> + + <settings> + <admin>OCA\ShareByMail\Settings\Admin</admin> + </settings> + + <activity> + <providers> + <provider>OCA\ShareByMail\Activity</provider> + </providers> + </activity> +</info> diff --git a/apps/sharebymail/composer/autoload.php b/apps/sharebymail/composer/autoload.php new file mode 100644 index 00000000000..a9fb0613ee8 --- /dev/null +++ b/apps/sharebymail/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 ComposerAutoloaderInitShareByMail::getLoader(); diff --git a/apps/sharebymail/composer/composer.json b/apps/sharebymail/composer/composer.json new file mode 100644 index 00000000000..160930a37ad --- /dev/null +++ b/apps/sharebymail/composer/composer.json @@ -0,0 +1,13 @@ +{ + "config" : { + "vendor-dir": ".", + "optimize-autoloader": true, + "classmap-authoritative": true, + "autoloader-suffix": "ShareByMail" + }, + "autoload" : { + "psr-4": { + "OCA\\ShareByMail\\": "../lib/" + } + } +} diff --git a/apps/sharebymail/composer/composer.lock b/apps/sharebymail/composer/composer.lock new file mode 100644 index 00000000000..fd0bcbcb753 --- /dev/null +++ b/apps/sharebymail/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/sharebymail/composer/composer/ClassLoader.php b/apps/sharebymail/composer/composer/ClassLoader.php new file mode 100644 index 00000000000..7824d8f7eaf --- /dev/null +++ b/apps/sharebymail/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/sharebymail/composer/composer/InstalledVersions.php b/apps/sharebymail/composer/composer/InstalledVersions.php new file mode 100644 index 00000000000..51e734a774b --- /dev/null +++ b/apps/sharebymail/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/sharebymail/composer/composer/LICENSE b/apps/sharebymail/composer/composer/LICENSE new file mode 100644 index 00000000000..f27399a042d --- /dev/null +++ b/apps/sharebymail/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/sharebymail/composer/composer/autoload_classmap.php b/apps/sharebymail/composer/composer/autoload_classmap.php new file mode 100644 index 00000000000..38fec4de278 --- /dev/null +++ b/apps/sharebymail/composer/composer/autoload_classmap.php @@ -0,0 +1,16 @@ +<?php + +// autoload_classmap.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = $vendorDir; + +return array( + 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', + 'OCA\\ShareByMail\\Activity' => $baseDir . '/../lib/Activity.php', + 'OCA\\ShareByMail\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php', + 'OCA\\ShareByMail\\Capabilities' => $baseDir . '/../lib/Capabilities.php', + 'OCA\\ShareByMail\\Settings\\Admin' => $baseDir . '/../lib/Settings/Admin.php', + 'OCA\\ShareByMail\\Settings\\SettingsManager' => $baseDir . '/../lib/Settings/SettingsManager.php', + 'OCA\\ShareByMail\\ShareByMailProvider' => $baseDir . '/../lib/ShareByMailProvider.php', +); diff --git a/apps/sharebymail/composer/composer/autoload_namespaces.php b/apps/sharebymail/composer/composer/autoload_namespaces.php new file mode 100644 index 00000000000..3f5c9296251 --- /dev/null +++ b/apps/sharebymail/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/sharebymail/composer/composer/autoload_psr4.php b/apps/sharebymail/composer/composer/autoload_psr4.php new file mode 100644 index 00000000000..d06cafe6ae7 --- /dev/null +++ b/apps/sharebymail/composer/composer/autoload_psr4.php @@ -0,0 +1,10 @@ +<?php + +// autoload_psr4.php @generated by Composer + +$vendorDir = dirname(__DIR__); +$baseDir = $vendorDir; + +return array( + 'OCA\\ShareByMail\\' => array($baseDir . '/../lib'), +); diff --git a/apps/sharebymail/composer/composer/autoload_real.php b/apps/sharebymail/composer/composer/autoload_real.php new file mode 100644 index 00000000000..cfbfdab1b1e --- /dev/null +++ b/apps/sharebymail/composer/composer/autoload_real.php @@ -0,0 +1,37 @@ +<?php + +// autoload_real.php @generated by Composer + +class ComposerAutoloaderInitShareByMail +{ + 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('ComposerAutoloaderInitShareByMail', 'loadClassLoader'), true, true); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); + spl_autoload_unregister(array('ComposerAutoloaderInitShareByMail', 'loadClassLoader')); + + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInitShareByMail::getInitializer($loader)); + + $loader->setClassMapAuthoritative(true); + $loader->register(true); + + return $loader; + } +} diff --git a/apps/sharebymail/composer/composer/autoload_static.php b/apps/sharebymail/composer/composer/autoload_static.php new file mode 100644 index 00000000000..16ce27764b6 --- /dev/null +++ b/apps/sharebymail/composer/composer/autoload_static.php @@ -0,0 +1,42 @@ +<?php + +// autoload_static.php @generated by Composer + +namespace Composer\Autoload; + +class ComposerStaticInitShareByMail +{ + public static $prefixLengthsPsr4 = array ( + 'O' => + array ( + 'OCA\\ShareByMail\\' => 16, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'OCA\\ShareByMail\\' => + array ( + 0 => __DIR__ . '/..' . '/../lib', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + 'OCA\\ShareByMail\\Activity' => __DIR__ . '/..' . '/../lib/Activity.php', + 'OCA\\ShareByMail\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php', + 'OCA\\ShareByMail\\Capabilities' => __DIR__ . '/..' . '/../lib/Capabilities.php', + 'OCA\\ShareByMail\\Settings\\Admin' => __DIR__ . '/..' . '/../lib/Settings/Admin.php', + 'OCA\\ShareByMail\\Settings\\SettingsManager' => __DIR__ . '/..' . '/../lib/Settings/SettingsManager.php', + 'OCA\\ShareByMail\\ShareByMailProvider' => __DIR__ . '/..' . '/../lib/ShareByMailProvider.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitShareByMail::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitShareByMail::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInitShareByMail::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/apps/sharebymail/composer/composer/installed.json b/apps/sharebymail/composer/composer/installed.json new file mode 100644 index 00000000000..f20a6c47c6d --- /dev/null +++ b/apps/sharebymail/composer/composer/installed.json @@ -0,0 +1,5 @@ +{ + "packages": [], + "dev": false, + "dev-package-names": [] +} diff --git a/apps/sharebymail/composer/composer/installed.php b/apps/sharebymail/composer/composer/installed.php new file mode 100644 index 00000000000..1a66c7f2416 --- /dev/null +++ b/apps/sharebymail/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/sharebymail/img/app.svg b/apps/sharebymail/img/app.svg new file mode 100644 index 00000000000..cf1cb307f36 --- /dev/null +++ b/apps/sharebymail/img/app.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#fff"><path d="M708-432v-84h-84v-72h84v-84h72v84h84v72h-84v84h-72Zm-324-48q-60 0-102-42t-42-102q0-60 42-102t102-42q60 0 102 42t42 102q0 60-42 102t-102 42ZM96-192v-92q0-25.78 12.5-47.39T143-366q55-32 116-49t125-17q64 0 125 17t116 49q22 13 34.5 34.61T672-284v92H96Z"/></svg>
\ No newline at end of file diff --git a/apps/sharebymail/l10n/.gitkeep b/apps/sharebymail/l10n/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/apps/sharebymail/l10n/.gitkeep diff --git a/apps/sharebymail/l10n/ar.js b/apps/sharebymail/l10n/ar.js new file mode 100644 index 00000000000..a84854083a0 --- /dev/null +++ b/apps/sharebymail/l10n/ar.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "تمّت مشاركته مع {email}", + "Shared with {email} by {actor}" : "تمّت مشاركته مع {email} من قِبَل {actor}", + "Unshared from {email}" : "تمّ إلغاء المُشاركة مع {email}", + "Unshared from {email} by {actor}" : "تمّ إلغاء المشاركة مع {email} من قِبَل {actor}", + "Password for mail share sent to {email}" : "كلمة مرور المشاركة تمّ إرسالها إلى {email}", + "Password for mail share sent to you" : "كلمة مرور المشاركة تمّ إرسالها إليك", + "You shared {file} with {email} by mail" : "أنت شاركت {file} مع {email} بالبريد الإلكتروني", + "{actor} shared {file} with {email} by mail" : "{actor} شارك {file} مع {email} بالبريد الإلكتروني", + "You unshared {file} from {email} by mail" : "أنت ألغيت المشاركة {file} مع {email} بالبريد الإلكتروني", + "{actor} unshared {file} from {email} by mail" : "{actor} ألغى المشاركة {file} مع {email} بالبريد الإلكتروني", + "Password to access {file} was sent to {email}" : "كلمة مرور لمشاركة {file} تم إرسالها إلى {email}", + "Password to access {file} was sent to you" : "كلمة مرور لمشاركة {file} تمّ إرسالها إليك", + "Share by mail" : "مشاركة بالبريد الإلكتروني", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "فشلت مشاركة %1$s بسبب أن هذه العنصر سبقت مشاركته مع الحساب %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "لا يمكننا أن نرسل لك كلمة المرور التي تم إنشاؤها تلقائيًا. يرجى تعيين عنوان بريد إلكتروني صالح في إعداداتك الشخصية، ثم حاول مرة أخرى.", + "Failed to send share by email. Got an invalid email address" : "تعذّر إرسال المشاركة عبر البريد الإلكتروني. حصلت على عنوان بريد إلكتروني غير صالح.", + "Failed to send share by email" : "تعذّر إرسال مشاركة بالبريد الإلكتروني", + "%1$s shared %2$s with you" : "قام%1$s بمشاركة %2$s معك", + "Note:" : "ملاحظة:", + "This share is valid until %s at midnight" : "هذه المشاركة سارية حتى منتصف الليل من %s ", + "Expiration:" : "إنتهاء الصلاحية:", + "Open %s" : "إفتَح %s", + "%1$s via %2$s" : "%1$s عبر %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "قام %1$s بمشاركة %2$s معك. يُفترض أنك قد استلمت سلفاً إيميلاً خاصاً يحتوي رابطاً للوصول إلى هذه المشاركة.", + "Password to access %1$s shared to you by %2$s" : "كلمة المرور للوصول إلى %1$s تمّت مشاركتها معك من قِبَل %2$s", + "Password to access %s" : "كلمة المرور للوصول إلى %s", + "It is protected with the following password:" : "وهو محمي بكلمة المرور التالية:", + "This password will expire at %s" : "كلمة المرور هذه ستنتهي صلاحيتها في %s", + "%1$s shared %2$s with you and wants to add:" : "قام %1$s بمشاركة %2$s معك، وهو يرغب في إضافة:", + "%1$s shared %2$s with you and wants to add" : "قام%1$s بمشاركة %2$s معك، وهو يرغب في إضافة", + "%s added a note to a file shared with you" : "فام%s بإضافة ملاحظة إلى ملف سبقت مشاركته معك", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "أنت قمت للتوِّ بمشاركة %1$s مع %2$s. المشاركة تمّ إرسالها مسبقاً إلى المستلم. لكن بسبب سياسات الأمن المُعرفة بواسطة مسؤول النظام الـ %3$s، يجب حماية كل مشاركة بكلمة مرور ولا يُسمح بإرسال كلمة المرور مباشرة إلى المستلم. لذلك تحتاج إلى إعادة توجيه كلمة المرور يدويّاً إلى المستلم.", + "Password to access %1$s shared by you with %2$s" : "كلمة المرور للوصول إلى %1$s قمت أنت بمشاركتها مع %2$s", + "This is the password:" : "هذه هي كلمة المرور:", + "You can choose a different password at any time in the share dialog." : "يمكنك اختيار كلمة مرور مختلفة في أي وقت في نافذة حوار المشاركة.", + "Could not find share" : "تعذّر العثور على المُشاركة", + "Share provider which allows you to share files by mail" : "مُزوّد المشاركة share provider الذي مكّنك من المشاركة عبر البريد", + "Unable to update share by mail config" : "تعذّر تحديث إعدادات المشاركة بالبريد الإلكتروني", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "تمكين الأشخاص من المشاركة المخصصة لملف أو مجلد عن طريق تحديد حساب البريد الإلكتروني", + "Send password by mail" : "إرسال كلمة مرور بالبريد الإلكتروني", + "Reply to initiator" : "رد على المنشيء" +}, +"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/sharebymail/l10n/ar.json b/apps/sharebymail/l10n/ar.json new file mode 100644 index 00000000000..f1cd796e842 --- /dev/null +++ b/apps/sharebymail/l10n/ar.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "تمّت مشاركته مع {email}", + "Shared with {email} by {actor}" : "تمّت مشاركته مع {email} من قِبَل {actor}", + "Unshared from {email}" : "تمّ إلغاء المُشاركة مع {email}", + "Unshared from {email} by {actor}" : "تمّ إلغاء المشاركة مع {email} من قِبَل {actor}", + "Password for mail share sent to {email}" : "كلمة مرور المشاركة تمّ إرسالها إلى {email}", + "Password for mail share sent to you" : "كلمة مرور المشاركة تمّ إرسالها إليك", + "You shared {file} with {email} by mail" : "أنت شاركت {file} مع {email} بالبريد الإلكتروني", + "{actor} shared {file} with {email} by mail" : "{actor} شارك {file} مع {email} بالبريد الإلكتروني", + "You unshared {file} from {email} by mail" : "أنت ألغيت المشاركة {file} مع {email} بالبريد الإلكتروني", + "{actor} unshared {file} from {email} by mail" : "{actor} ألغى المشاركة {file} مع {email} بالبريد الإلكتروني", + "Password to access {file} was sent to {email}" : "كلمة مرور لمشاركة {file} تم إرسالها إلى {email}", + "Password to access {file} was sent to you" : "كلمة مرور لمشاركة {file} تمّ إرسالها إليك", + "Share by mail" : "مشاركة بالبريد الإلكتروني", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "فشلت مشاركة %1$s بسبب أن هذه العنصر سبقت مشاركته مع الحساب %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "لا يمكننا أن نرسل لك كلمة المرور التي تم إنشاؤها تلقائيًا. يرجى تعيين عنوان بريد إلكتروني صالح في إعداداتك الشخصية، ثم حاول مرة أخرى.", + "Failed to send share by email. Got an invalid email address" : "تعذّر إرسال المشاركة عبر البريد الإلكتروني. حصلت على عنوان بريد إلكتروني غير صالح.", + "Failed to send share by email" : "تعذّر إرسال مشاركة بالبريد الإلكتروني", + "%1$s shared %2$s with you" : "قام%1$s بمشاركة %2$s معك", + "Note:" : "ملاحظة:", + "This share is valid until %s at midnight" : "هذه المشاركة سارية حتى منتصف الليل من %s ", + "Expiration:" : "إنتهاء الصلاحية:", + "Open %s" : "إفتَح %s", + "%1$s via %2$s" : "%1$s عبر %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "قام %1$s بمشاركة %2$s معك. يُفترض أنك قد استلمت سلفاً إيميلاً خاصاً يحتوي رابطاً للوصول إلى هذه المشاركة.", + "Password to access %1$s shared to you by %2$s" : "كلمة المرور للوصول إلى %1$s تمّت مشاركتها معك من قِبَل %2$s", + "Password to access %s" : "كلمة المرور للوصول إلى %s", + "It is protected with the following password:" : "وهو محمي بكلمة المرور التالية:", + "This password will expire at %s" : "كلمة المرور هذه ستنتهي صلاحيتها في %s", + "%1$s shared %2$s with you and wants to add:" : "قام %1$s بمشاركة %2$s معك، وهو يرغب في إضافة:", + "%1$s shared %2$s with you and wants to add" : "قام%1$s بمشاركة %2$s معك، وهو يرغب في إضافة", + "%s added a note to a file shared with you" : "فام%s بإضافة ملاحظة إلى ملف سبقت مشاركته معك", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "أنت قمت للتوِّ بمشاركة %1$s مع %2$s. المشاركة تمّ إرسالها مسبقاً إلى المستلم. لكن بسبب سياسات الأمن المُعرفة بواسطة مسؤول النظام الـ %3$s، يجب حماية كل مشاركة بكلمة مرور ولا يُسمح بإرسال كلمة المرور مباشرة إلى المستلم. لذلك تحتاج إلى إعادة توجيه كلمة المرور يدويّاً إلى المستلم.", + "Password to access %1$s shared by you with %2$s" : "كلمة المرور للوصول إلى %1$s قمت أنت بمشاركتها مع %2$s", + "This is the password:" : "هذه هي كلمة المرور:", + "You can choose a different password at any time in the share dialog." : "يمكنك اختيار كلمة مرور مختلفة في أي وقت في نافذة حوار المشاركة.", + "Could not find share" : "تعذّر العثور على المُشاركة", + "Share provider which allows you to share files by mail" : "مُزوّد المشاركة share provider الذي مكّنك من المشاركة عبر البريد", + "Unable to update share by mail config" : "تعذّر تحديث إعدادات المشاركة بالبريد الإلكتروني", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "تمكين الأشخاص من المشاركة المخصصة لملف أو مجلد عن طريق تحديد حساب البريد الإلكتروني", + "Send password by mail" : "إرسال كلمة مرور بالبريد الإلكتروني", + "Reply to initiator" : "رد على المنشيء" +},"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/sharebymail/l10n/ast.js b/apps/sharebymail/l10n/ast.js new file mode 100644 index 00000000000..9238d202aaf --- /dev/null +++ b/apps/sharebymail/l10n/ast.js @@ -0,0 +1,33 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartióse con {email}", + "Shared with {email} by {actor}" : "{actor} compartió l'elementu con {email}", + "Unshared from {email}" : "Dexó de compartise con {email}", + "Unshared from {email} by {actor}" : "{actor} dexó de compartir l'elementu con {email}", + "Password for mail share sent to {email}" : "La contraseña pa la compartición per corréu electrónicu unvióse a {email}", + "Password for mail share sent to you" : "Unviáronte la contraseña pa la compartición per corréu electrónicu", + "You shared {file} with {email} by mail" : "Compartió «{file}» con {email} per corréu electrónicu", + "{actor} shared {file} with {email} by mail" : "{actor} compartió «{file}» con {email} per corréu electrónicu", + "You unshared {file} from {email} by mail" : "Dexesti de compartir «{file}» con {email} per corréu electrónicu", + "{actor} unshared {file} from {email} by mail" : "{actor} dexó de compartir «{file}» con {email} per corréu electrónicu", + "Password to access {file} was sent to {email}" : "La contraseña p'acceder a «{file}» unvióse a {email}", + "Password to access {file} was sent to you" : "Unviósete la contraseña p'acceder a «{file}»", + "Share by mail" : "Compartir per corréu electrónicu", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "La compartición de «%1$s» falló porque esti elementu yá ta compartíu cola cuenta «%2$s»", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nun podemos unviate una contraseña xenerada automáticamente. Afita una direición de corréu electrónicu na configuración personal y volvi tentalo.", + "Failed to send share by email. Got an invalid email address" : "Nun se pue unvar l'elementu compartíu per corréu electrónicu. Consiguióse una direición de corréu electrónicu inválida", + "Failed to send share by email" : "Nun se pue unviar l'elementu compartíu per corréu electrónicu", + "%1$s via %2$s" : "%1$s per %2$s", + "It is protected with the following password:" : "L'elementu ta protexíu cola contraseña siguiente:", + "This password will expire at %s" : "La contraseña va caducar a la hora: %s", + "This is the password:" : "Esta ye la contraseña:", + "You can choose a different password at any time in the share dialog." : "Pues escoyer otra contraseña en cualesquier momentu nel diálogu de compartición.", + "Could not find share" : "Nun se pudo atopar la compartición", + "Share provider which allows you to share files by mail" : "El fornidor de compartición que te permite compartir ficheros per corréu electrónicu", + "Unable to update share by mail config" : "Nun ye posible anovar l'elementu compartíu pela configuración de corréu electrónicu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a les persones compartir un enllaz personalizáu a un ficheru o carpeta poniendo una direición de corréu.", + "Send password by mail" : "Unviar la contraseña per corréu electrónicu", + "Reply to initiator" : "Responder al usuariu que comparte l'elementu" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/ast.json b/apps/sharebymail/l10n/ast.json new file mode 100644 index 00000000000..c2947476e97 --- /dev/null +++ b/apps/sharebymail/l10n/ast.json @@ -0,0 +1,31 @@ +{ "translations": { + "Shared with {email}" : "Compartióse con {email}", + "Shared with {email} by {actor}" : "{actor} compartió l'elementu con {email}", + "Unshared from {email}" : "Dexó de compartise con {email}", + "Unshared from {email} by {actor}" : "{actor} dexó de compartir l'elementu con {email}", + "Password for mail share sent to {email}" : "La contraseña pa la compartición per corréu electrónicu unvióse a {email}", + "Password for mail share sent to you" : "Unviáronte la contraseña pa la compartición per corréu electrónicu", + "You shared {file} with {email} by mail" : "Compartió «{file}» con {email} per corréu electrónicu", + "{actor} shared {file} with {email} by mail" : "{actor} compartió «{file}» con {email} per corréu electrónicu", + "You unshared {file} from {email} by mail" : "Dexesti de compartir «{file}» con {email} per corréu electrónicu", + "{actor} unshared {file} from {email} by mail" : "{actor} dexó de compartir «{file}» con {email} per corréu electrónicu", + "Password to access {file} was sent to {email}" : "La contraseña p'acceder a «{file}» unvióse a {email}", + "Password to access {file} was sent to you" : "Unviósete la contraseña p'acceder a «{file}»", + "Share by mail" : "Compartir per corréu electrónicu", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "La compartición de «%1$s» falló porque esti elementu yá ta compartíu cola cuenta «%2$s»", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nun podemos unviate una contraseña xenerada automáticamente. Afita una direición de corréu electrónicu na configuración personal y volvi tentalo.", + "Failed to send share by email. Got an invalid email address" : "Nun se pue unvar l'elementu compartíu per corréu electrónicu. Consiguióse una direición de corréu electrónicu inválida", + "Failed to send share by email" : "Nun se pue unviar l'elementu compartíu per corréu electrónicu", + "%1$s via %2$s" : "%1$s per %2$s", + "It is protected with the following password:" : "L'elementu ta protexíu cola contraseña siguiente:", + "This password will expire at %s" : "La contraseña va caducar a la hora: %s", + "This is the password:" : "Esta ye la contraseña:", + "You can choose a different password at any time in the share dialog." : "Pues escoyer otra contraseña en cualesquier momentu nel diálogu de compartición.", + "Could not find share" : "Nun se pudo atopar la compartición", + "Share provider which allows you to share files by mail" : "El fornidor de compartición que te permite compartir ficheros per corréu electrónicu", + "Unable to update share by mail config" : "Nun ye posible anovar l'elementu compartíu pela configuración de corréu electrónicu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a les persones compartir un enllaz personalizáu a un ficheru o carpeta poniendo una direición de corréu.", + "Send password by mail" : "Unviar la contraseña per corréu electrónicu", + "Reply to initiator" : "Responder al usuariu que comparte l'elementu" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/bg.js b/apps/sharebymail/l10n/bg.js new file mode 100644 index 00000000000..1fcbe05dc5d --- /dev/null +++ b/apps/sharebymail/l10n/bg.js @@ -0,0 +1,31 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Споделено с ({email})", + "Shared with {email} by {actor}" : "Споделено с {email} от {actor}", + "Unshared from {email}" : "Прекратено споделяне от {email}", + "Unshared from {email} by {actor}" : "Прекратено споделяне с {email} от {actor}", + "Password for mail share sent to {email}" : "Паролата за мейл споделяне е изпратена до {email}", + "Password for mail share sent to you" : "Паролата за мейл споделяне е изпратена до вас", + "You shared {file} with {email} by mail" : "Споделихте {file} с {email} чрез имейл", + "{actor} shared {file} with {email} by mail" : "{actor} сподели {file} с {email} чрез имейл", + "You unshared {file} from {email} by mail" : "Вие прекратихте споделяне от {file} с {email} по имейл", + "{actor} unshared {file} from {email} by mail" : "{actor} прекрати споделянето на {file} от {email} по имейл", + "Password to access {file} was sent to {email}" : "Паролата за достъп до {file} беше изпратена до {email}", + "Password to access {file} was sent to you" : "Паролата за достъп до {file} ви беше изпратена", + "Share by mail" : "Споделяне по имейл", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не можем да ви изпратим автоматично генерираната парола. Моля, задайте валиден имейл адрес в личните си настройки и опитайте отново.", + "Failed to send share by email. Got an invalid email address" : "Изпращането на споделяне по имейл беше неуспешно. Имате невалиден имейл адрес", + "Failed to send share by email" : "Изпращането на споделяне по имейл беше неуспешно", + "%1$s via %2$s" : "%1$s чрез %2$s", + "It is protected with the following password:" : "Защитен е със следната парола:", + "This password will expire at %s" : "Тази парола ще изтече в %s", + "This is the password:" : "Паролата е:", + "You can choose a different password at any time in the share dialog." : "Можете да изберете друга парола по всяко време в диалоговия прозорец за споделяне.", + "Could not find share" : "Споделянето не можа да се намери", + "Share provider which allows you to share files by mail" : "Доставчик на споделяне, който ви позволява да споделяте файлове по имейл", + "Unable to update share by mail config" : "Не може да се актуализира конфигурацията за споделяне по поща", + "Send password by mail" : "Изпращане на парола по имейл", + "Reply to initiator" : "Отговор към инициатора" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/bg.json b/apps/sharebymail/l10n/bg.json new file mode 100644 index 00000000000..c5087a06467 --- /dev/null +++ b/apps/sharebymail/l10n/bg.json @@ -0,0 +1,29 @@ +{ "translations": { + "Shared with {email}" : "Споделено с ({email})", + "Shared with {email} by {actor}" : "Споделено с {email} от {actor}", + "Unshared from {email}" : "Прекратено споделяне от {email}", + "Unshared from {email} by {actor}" : "Прекратено споделяне с {email} от {actor}", + "Password for mail share sent to {email}" : "Паролата за мейл споделяне е изпратена до {email}", + "Password for mail share sent to you" : "Паролата за мейл споделяне е изпратена до вас", + "You shared {file} with {email} by mail" : "Споделихте {file} с {email} чрез имейл", + "{actor} shared {file} with {email} by mail" : "{actor} сподели {file} с {email} чрез имейл", + "You unshared {file} from {email} by mail" : "Вие прекратихте споделяне от {file} с {email} по имейл", + "{actor} unshared {file} from {email} by mail" : "{actor} прекрати споделянето на {file} от {email} по имейл", + "Password to access {file} was sent to {email}" : "Паролата за достъп до {file} беше изпратена до {email}", + "Password to access {file} was sent to you" : "Паролата за достъп до {file} ви беше изпратена", + "Share by mail" : "Споделяне по имейл", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не можем да ви изпратим автоматично генерираната парола. Моля, задайте валиден имейл адрес в личните си настройки и опитайте отново.", + "Failed to send share by email. Got an invalid email address" : "Изпращането на споделяне по имейл беше неуспешно. Имате невалиден имейл адрес", + "Failed to send share by email" : "Изпращането на споделяне по имейл беше неуспешно", + "%1$s via %2$s" : "%1$s чрез %2$s", + "It is protected with the following password:" : "Защитен е със следната парола:", + "This password will expire at %s" : "Тази парола ще изтече в %s", + "This is the password:" : "Паролата е:", + "You can choose a different password at any time in the share dialog." : "Можете да изберете друга парола по всяко време в диалоговия прозорец за споделяне.", + "Could not find share" : "Споделянето не можа да се намери", + "Share provider which allows you to share files by mail" : "Доставчик на споделяне, който ви позволява да споделяте файлове по имейл", + "Unable to update share by mail config" : "Не може да се актуализира конфигурацията за споделяне по поща", + "Send password by mail" : "Изпращане на парола по имейл", + "Reply to initiator" : "Отговор към инициатора" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/ca.js b/apps/sharebymail/l10n/ca.js new file mode 100644 index 00000000000..b37d69513a5 --- /dev/null +++ b/apps/sharebymail/l10n/ca.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartit amb {email}", + "Shared with {email} by {actor}" : "Compartit amb {email} per {actor}", + "Unshared from {email}" : "No compartit de {email}", + "Unshared from {email} by {actor}" : "No compartit de {email} per {actor}", + "Password for mail share sent to {email}" : "Contrasenya per compartició per correu enviada a {email}", + "Password for mail share sent to you" : "Contrasenya per compartició per correu que us han enviat", + "You shared {file} with {email} by mail" : "Heu compartit {file} amb {email} per correu electrònic", + "{actor} shared {file} with {email} by mail" : "{actor} ha compartit {file} amb {email} per correu electrònic", + "You unshared {file} from {email} by mail" : "Heu deixat de compartir {file} amb {email} per correu electrònic", + "{actor} unshared {file} from {email} by mail" : "{actor} ha deixat de compartir {file} amb {email} per correu electrònic", + "Password to access {file} was sent to {email}" : "S'ha enviat a {email} la contrasenya per a accedir a {file}", + "Password to access {file} was sent to you" : "Se us ha enviat la contrasenya per a accedir a {file}", + "Share by mail" : "Comparteix per correu electrònic", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No s'ha pogut compartir %1$s perquè l'element ja està compartit amb el compte %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No us podem enviar la contrasenya generada automàticament. Definiu una adreça electrònica vàlida en els paràmetres personals i torneu-ho a provar.", + "Failed to send share by email. Got an invalid email address" : "No s'ha pogut enviar la compartició per correu electrònic. Teniu una adreça electrònica no vàlida", + "Failed to send share by email" : "No s'ha pogut enviar l'element compartit per correu electrònic", + "%1$s shared %2$s with you" : "%1$s ha compartit %2$s amb tu", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Aquesta compartició és vàlida fins a les %s a mitjanit", + "Expiration:" : "Expiració:", + "Open %s" : "Obre %s", + "%1$s via %2$s" : "%1$s mitjançant %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s ha compartit %2$s amb tu. Ja hauríeu d'haver rebut un correu separat amb un enllaç per accedir-hi.", + "Password to access %1$s shared to you by %2$s" : "Contrasenya per accedir a %1$s compartida amb vosaltres per %2$s", + "Password to access %s" : "Contrasenya per accedir a %s", + "It is protected with the following password:" : "Està protegit amb la contrasenya següent:", + "This password will expire at %s" : "Aquesta contrasenya caducarà a les %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s ha compartit %2$s amb tu i vol afegir:", + "%1$s shared %2$s with you and wants to add" : "%1$s ha compartit %2$s amb tu i vol afegir", + "%s added a note to a file shared with you" : "%s ha afegit una nota a un fitxer compartit amb tu", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabeu de compartir %1$s amb %2$s. La compartició ja s'ha enviat al destinatari. A causa de les polítiques de seguretat definides per l'administrador de %3$s, cada compartició ha d'estar protegida amb contrasenya i no es permet enviar la contrasenya directament al destinatari. Per tant, cal reenviar la contrasenya manualment al destinatari.", + "Password to access %1$s shared by you with %2$s" : "Contrasenya per accedir a %1$s que has compartit amb %2$s", + "This is the password:" : "La contrasenya és la següent:", + "You can choose a different password at any time in the share dialog." : "Podeu triar una contrasenya diferent en qualsevol moment en el quadre de diàleg d'ús compartit.", + "Could not find share" : "No s'ha pogut trobar l'element compartit", + "Share provider which allows you to share files by mail" : "Proveïdor d'ús compartit que us permet compartir fitxers per correu electrònic", + "Unable to update share by mail config" : "No s'ha pogut actualitzar la configuració d'ús compartit per correu electrònic", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permet que la gent comparteixi un enllaç personalitzat a un fitxer o carpeta indicant una adreça electrònica.", + "Send password by mail" : "Envia la contrasenya per correu electrònic", + "Reply to initiator" : "Respon a l'usuari que comparteix l'element" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/ca.json b/apps/sharebymail/l10n/ca.json new file mode 100644 index 00000000000..58495d9c8a5 --- /dev/null +++ b/apps/sharebymail/l10n/ca.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Compartit amb {email}", + "Shared with {email} by {actor}" : "Compartit amb {email} per {actor}", + "Unshared from {email}" : "No compartit de {email}", + "Unshared from {email} by {actor}" : "No compartit de {email} per {actor}", + "Password for mail share sent to {email}" : "Contrasenya per compartició per correu enviada a {email}", + "Password for mail share sent to you" : "Contrasenya per compartició per correu que us han enviat", + "You shared {file} with {email} by mail" : "Heu compartit {file} amb {email} per correu electrònic", + "{actor} shared {file} with {email} by mail" : "{actor} ha compartit {file} amb {email} per correu electrònic", + "You unshared {file} from {email} by mail" : "Heu deixat de compartir {file} amb {email} per correu electrònic", + "{actor} unshared {file} from {email} by mail" : "{actor} ha deixat de compartir {file} amb {email} per correu electrònic", + "Password to access {file} was sent to {email}" : "S'ha enviat a {email} la contrasenya per a accedir a {file}", + "Password to access {file} was sent to you" : "Se us ha enviat la contrasenya per a accedir a {file}", + "Share by mail" : "Comparteix per correu electrònic", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No s'ha pogut compartir %1$s perquè l'element ja està compartit amb el compte %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No us podem enviar la contrasenya generada automàticament. Definiu una adreça electrònica vàlida en els paràmetres personals i torneu-ho a provar.", + "Failed to send share by email. Got an invalid email address" : "No s'ha pogut enviar la compartició per correu electrònic. Teniu una adreça electrònica no vàlida", + "Failed to send share by email" : "No s'ha pogut enviar l'element compartit per correu electrònic", + "%1$s shared %2$s with you" : "%1$s ha compartit %2$s amb tu", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Aquesta compartició és vàlida fins a les %s a mitjanit", + "Expiration:" : "Expiració:", + "Open %s" : "Obre %s", + "%1$s via %2$s" : "%1$s mitjançant %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s ha compartit %2$s amb tu. Ja hauríeu d'haver rebut un correu separat amb un enllaç per accedir-hi.", + "Password to access %1$s shared to you by %2$s" : "Contrasenya per accedir a %1$s compartida amb vosaltres per %2$s", + "Password to access %s" : "Contrasenya per accedir a %s", + "It is protected with the following password:" : "Està protegit amb la contrasenya següent:", + "This password will expire at %s" : "Aquesta contrasenya caducarà a les %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s ha compartit %2$s amb tu i vol afegir:", + "%1$s shared %2$s with you and wants to add" : "%1$s ha compartit %2$s amb tu i vol afegir", + "%s added a note to a file shared with you" : "%s ha afegit una nota a un fitxer compartit amb tu", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acabeu de compartir %1$s amb %2$s. La compartició ja s'ha enviat al destinatari. A causa de les polítiques de seguretat definides per l'administrador de %3$s, cada compartició ha d'estar protegida amb contrasenya i no es permet enviar la contrasenya directament al destinatari. Per tant, cal reenviar la contrasenya manualment al destinatari.", + "Password to access %1$s shared by you with %2$s" : "Contrasenya per accedir a %1$s que has compartit amb %2$s", + "This is the password:" : "La contrasenya és la següent:", + "You can choose a different password at any time in the share dialog." : "Podeu triar una contrasenya diferent en qualsevol moment en el quadre de diàleg d'ús compartit.", + "Could not find share" : "No s'ha pogut trobar l'element compartit", + "Share provider which allows you to share files by mail" : "Proveïdor d'ús compartit que us permet compartir fitxers per correu electrònic", + "Unable to update share by mail config" : "No s'ha pogut actualitzar la configuració d'ús compartit per correu electrònic", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permet que la gent comparteixi un enllaç personalitzat a un fitxer o carpeta indicant una adreça electrònica.", + "Send password by mail" : "Envia la contrasenya per correu electrònic", + "Reply to initiator" : "Respon a l'usuari que comparteix l'element" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/cs.js b/apps/sharebymail/l10n/cs.js new file mode 100644 index 00000000000..685f00d565b --- /dev/null +++ b/apps/sharebymail/l10n/cs.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Sdíleno s {email}", + "Shared with {email} by {actor}" : "{actor} sdílí s {email}", + "Unshared from {email}" : "Sdílení zrušeno od {email}", + "Unshared from {email} by {actor}" : "{actor} zrušil(a) sdílení adresátovi {email}", + "Password for mail share sent to {email}" : "Heslo e-mailového sdílení odesláno na {email}", + "Password for mail share sent to you" : "Heslo e-mailového sdílení vám bylo zasláno", + "You shared {file} with {email} by mail" : "E-mailem jste s {email} sdíleli {file}", + "{actor} shared {file} with {email} by mail" : "{actor} sdílel(a) {file} e-mailem s {email}", + "You unshared {file} from {email} by mail" : "Zrušili jste sdílení {file} z {email} e-mailem", + "{actor} unshared {file} from {email} by mail" : "{actor} zrušil(a) sdílení {file} od {email} po e-mailu", + "Password to access {file} was sent to {email}" : "Heslo pro přístup k {file} bylo zasláno na {email}", + "Password to access {file} was sent to you" : "Heslo pro přístupu k {file} vám bylo zasláno", + "Share by mail" : "Sdílet e-mailem", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Sdílení položky %1$s se nezdařilo, protože ta je už s účtem %2$s sdílena", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nemůžeme vám zaslat automaticky vytvořené heslo. Nastavte si v osobním nastavení platnou e-mailovou adresu a zkuste to znovu.", + "Failed to send share by email. Got an invalid email address" : "Nepodařilo se odeslat sdílení e-mailem. Obdržena neplatná e-mailová adresa", + "Failed to send share by email" : "Sdílení e-mailem se nezdařilo", + "%1$s shared %2$s with you" : "%1$s vám nasdílel(a) %2$s", + "Note:" : "Poznámka:", + "This share is valid until %s at midnight" : "Toto sdílení je platné do půlnoci %s", + "Expiration:" : "Konec platnosti:", + "Open %s" : "Otevřít %s", + "%1$s via %2$s" : "%1$s prostřednictvím %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s vám nasdílel(a) %2$s. Měl by vám už přijít e-mail s přístupovými údaji.", + "Password to access %1$s shared to you by %2$s" : "Heslo pro přístup k %1$s které vám nasdílel(a) %2$s", + "Password to access %s" : "Heslo pro přístup k %s", + "It is protected with the following password:" : "Je chráněno následujícím heslem:", + "This password will expire at %s" : "Platnost tohoto hesla skončí %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s vám nasdílel(a) %2$s a chce přidat:", + "%1$s shared %2$s with you and wants to add" : "%1$s vám nasdílel(a) %2$s a chce přidat", + "%s added a note to a file shared with you" : "%s přidal(a) poznámku k vám nasdílenému souboru", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste %2$s nasdíleli %1$s. Sdílení bylo už příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.", + "Password to access %1$s shared by you with %2$s" : "Heslo pro přístup k %1$s, které jste nasdíleli %2$s", + "This is the password:" : "Toto je heslo:", + "You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.", + "Could not find share" : "Sdílení se nedaří nalézt", + "Share provider which allows you to share files by mail" : "Poskytovatel sdílení umožňuje sdílet soubory pomocí e-mailu", + "Unable to update share by mail config" : "Nedaří se aktualizovat sdílení nastavením e-mailu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Dovoluje lidem odeslat personalizovaný odkaz na soubor nebo složku po zadání e-mailové adresy.", + "Send password by mail" : "Odeslat heslo e-mailem", + "Reply to initiator" : "Odpovědět iniciátorovi" +}, +"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/sharebymail/l10n/cs.json b/apps/sharebymail/l10n/cs.json new file mode 100644 index 00000000000..1d4688afe4f --- /dev/null +++ b/apps/sharebymail/l10n/cs.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Sdíleno s {email}", + "Shared with {email} by {actor}" : "{actor} sdílí s {email}", + "Unshared from {email}" : "Sdílení zrušeno od {email}", + "Unshared from {email} by {actor}" : "{actor} zrušil(a) sdílení adresátovi {email}", + "Password for mail share sent to {email}" : "Heslo e-mailového sdílení odesláno na {email}", + "Password for mail share sent to you" : "Heslo e-mailového sdílení vám bylo zasláno", + "You shared {file} with {email} by mail" : "E-mailem jste s {email} sdíleli {file}", + "{actor} shared {file} with {email} by mail" : "{actor} sdílel(a) {file} e-mailem s {email}", + "You unshared {file} from {email} by mail" : "Zrušili jste sdílení {file} z {email} e-mailem", + "{actor} unshared {file} from {email} by mail" : "{actor} zrušil(a) sdílení {file} od {email} po e-mailu", + "Password to access {file} was sent to {email}" : "Heslo pro přístup k {file} bylo zasláno na {email}", + "Password to access {file} was sent to you" : "Heslo pro přístupu k {file} vám bylo zasláno", + "Share by mail" : "Sdílet e-mailem", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Sdílení položky %1$s se nezdařilo, protože ta je už s účtem %2$s sdílena", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nemůžeme vám zaslat automaticky vytvořené heslo. Nastavte si v osobním nastavení platnou e-mailovou adresu a zkuste to znovu.", + "Failed to send share by email. Got an invalid email address" : "Nepodařilo se odeslat sdílení e-mailem. Obdržena neplatná e-mailová adresa", + "Failed to send share by email" : "Sdílení e-mailem se nezdařilo", + "%1$s shared %2$s with you" : "%1$s vám nasdílel(a) %2$s", + "Note:" : "Poznámka:", + "This share is valid until %s at midnight" : "Toto sdílení je platné do půlnoci %s", + "Expiration:" : "Konec platnosti:", + "Open %s" : "Otevřít %s", + "%1$s via %2$s" : "%1$s prostřednictvím %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s vám nasdílel(a) %2$s. Měl by vám už přijít e-mail s přístupovými údaji.", + "Password to access %1$s shared to you by %2$s" : "Heslo pro přístup k %1$s které vám nasdílel(a) %2$s", + "Password to access %s" : "Heslo pro přístup k %s", + "It is protected with the following password:" : "Je chráněno následujícím heslem:", + "This password will expire at %s" : "Platnost tohoto hesla skončí %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s vám nasdílel(a) %2$s a chce přidat:", + "%1$s shared %2$s with you and wants to add" : "%1$s vám nasdílel(a) %2$s a chce přidat", + "%s added a note to a file shared with you" : "%s přidal(a) poznámku k vám nasdílenému souboru", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Právě jste %2$s nasdíleli %1$s. Sdílení bylo už příjemci zasláno. Kvůli bezpečnostní politice nastavené administrátorem %3$s musí být každé sdílení chráněno heslem a toto heslo nemůže být příjemci zasláno přímo. Kvůli tomu ho budete muset ručně přeposlat.", + "Password to access %1$s shared by you with %2$s" : "Heslo pro přístup k %1$s, které jste nasdíleli %2$s", + "This is the password:" : "Toto je heslo:", + "You can choose a different password at any time in the share dialog." : "V dialogu sdílení můžete kdykoliv vybrat jiné heslo.", + "Could not find share" : "Sdílení se nedaří nalézt", + "Share provider which allows you to share files by mail" : "Poskytovatel sdílení umožňuje sdílet soubory pomocí e-mailu", + "Unable to update share by mail config" : "Nedaří se aktualizovat sdílení nastavením e-mailu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Dovoluje lidem odeslat personalizovaný odkaz na soubor nebo složku po zadání e-mailové adresy.", + "Send password by mail" : "Odeslat heslo e-mailem", + "Reply to initiator" : "Odpovědět iniciátorovi" +},"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/sharebymail/l10n/da.js b/apps/sharebymail/l10n/da.js new file mode 100644 index 00000000000..a243d04f14c --- /dev/null +++ b/apps/sharebymail/l10n/da.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Delt med {email}", + "Shared with {email} by {actor}" : "Delt med {email} af {actor}", + "Unshared from {email}" : "Slet deling med {email}", + "Unshared from {email} by {actor}" : "Slet deling med {email} af {actor}", + "Password for mail share sent to {email}" : "Adgangskode for maildeling er sendt til {email}", + "Password for mail share sent to you" : "Adgangskode for maildeling er sendt til dig", + "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-mail", + "You unshared {file} from {email} by mail" : "Du slettede deling af {file} med {email} via mail", + "{actor} unshared {file} from {email} by mail" : "{actor} slettede deling af {file} fra {email} via mail", + "Password to access {file} was sent to {email}" : "Adgangskode for adgang {file} blev sendt til {email}", + "Password to access {file} was sent to you" : "Adgangskode for adgang {file} blev sendt til dig.", + "Share by mail" : "Delt med mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deling af %1$s mislykkedes, fordi dette element allerede er delt med bruger%2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende dig det autogenererede kodeord. Angiv en gyldig e-mailadresse i dine personlige indstillinger og prøv igen.", + "Failed to send share by email. Got an invalid email address" : "Kunne ikke sende deling via mail. Fik en ugyldig mail adresse", + "Failed to send share by email" : "Kunne ikke sende deling via e-mail", + "%1$s shared %2$s with you" : " %1$s delte %2$s med dig", + "Note:" : "Bemærkning:", + "This share is valid until %s at midnight" : "Denne deling gælder indtil %s ved midnat", + "Expiration:" : "Udløbsdato:", + "Open %s" : "Åbn% s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delte %2$s med dig. Du skulle allerede have modtaget en separat mail med et link til at få adgang til den.", + "Password to access %1$s shared to you by %2$s" : "Adgangskode for adgang til %1$s delt med dig af %2$s", + "Password to access %s" : "Adgangskode til adgang %s", + "It is protected with the following password:" : "Beskyttet med følgende adgangskode:", + "This password will expire at %s" : "Denne adgangskode udløber den %s", + "%1$s shared %2$s with you and wants to add:" : " %1$s delte %2$s med dig og ønsker at tilføje:", + "%1$s shared %2$s with you and wants to add" : " %1$s delte %2$s med dig og ønsker at tilføje", + "%s added a note to a file shared with you" : "%s tilføjede en note til en fil delt med dig", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delte lige %1$s med %2$s. Delingen blev allerede sendt til modtageren. På grund af sikkerhedspolitikkerne defineret af administratoren af %3$s hver deling skal beskyttes med adgangskode, og det er ikke tilladt at sende adgangskoden direkte til modtageren. Derfor skal du sende adgangskoden manuelt til modtageren.", + "Password to access %1$s shared by you with %2$s" : "Adgangskode for adgang til %1$s delt af dig med %2$s", + "This is the password:" : "Dette er adgangskoden:", + "You can choose a different password at any time in the share dialog." : "Du kan til enhver tid vælge en anden adgangskode i delings dialogen.", + "Could not find share" : "Kan ikke finde deling", + "Share provider which allows you to share files by mail" : "Del udbyder, som giver dig mulighed for at dele filer via mail", + "Unable to update share by mail config" : "Kan ikke opdatere del via mail konfigurationen", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Giver folk mulighed for at dele et personlig link til en fil eller mappe ved at indsætte en mail adresse.", + "Send password by mail" : "Send kodeord på mail", + "Reply to initiator" : "Svar til initiativtager" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/da.json b/apps/sharebymail/l10n/da.json new file mode 100644 index 00000000000..ee19f408af3 --- /dev/null +++ b/apps/sharebymail/l10n/da.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Delt med {email}", + "Shared with {email} by {actor}" : "Delt med {email} af {actor}", + "Unshared from {email}" : "Slet deling med {email}", + "Unshared from {email} by {actor}" : "Slet deling med {email} af {actor}", + "Password for mail share sent to {email}" : "Adgangskode for maildeling er sendt til {email}", + "Password for mail share sent to you" : "Adgangskode for maildeling er sendt til dig", + "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-mail", + "You unshared {file} from {email} by mail" : "Du slettede deling af {file} med {email} via mail", + "{actor} unshared {file} from {email} by mail" : "{actor} slettede deling af {file} fra {email} via mail", + "Password to access {file} was sent to {email}" : "Adgangskode for adgang {file} blev sendt til {email}", + "Password to access {file} was sent to you" : "Adgangskode for adgang {file} blev sendt til dig.", + "Share by mail" : "Delt med mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deling af %1$s mislykkedes, fordi dette element allerede er delt med bruger%2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende dig det autogenererede kodeord. Angiv en gyldig e-mailadresse i dine personlige indstillinger og prøv igen.", + "Failed to send share by email. Got an invalid email address" : "Kunne ikke sende deling via mail. Fik en ugyldig mail adresse", + "Failed to send share by email" : "Kunne ikke sende deling via e-mail", + "%1$s shared %2$s with you" : " %1$s delte %2$s med dig", + "Note:" : "Bemærkning:", + "This share is valid until %s at midnight" : "Denne deling gælder indtil %s ved midnat", + "Expiration:" : "Udløbsdato:", + "Open %s" : "Åbn% s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delte %2$s med dig. Du skulle allerede have modtaget en separat mail med et link til at få adgang til den.", + "Password to access %1$s shared to you by %2$s" : "Adgangskode for adgang til %1$s delt med dig af %2$s", + "Password to access %s" : "Adgangskode til adgang %s", + "It is protected with the following password:" : "Beskyttet med følgende adgangskode:", + "This password will expire at %s" : "Denne adgangskode udløber den %s", + "%1$s shared %2$s with you and wants to add:" : " %1$s delte %2$s med dig og ønsker at tilføje:", + "%1$s shared %2$s with you and wants to add" : " %1$s delte %2$s med dig og ønsker at tilføje", + "%s added a note to a file shared with you" : "%s tilføjede en note til en fil delt med dig", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delte lige %1$s med %2$s. Delingen blev allerede sendt til modtageren. På grund af sikkerhedspolitikkerne defineret af administratoren af %3$s hver deling skal beskyttes med adgangskode, og det er ikke tilladt at sende adgangskoden direkte til modtageren. Derfor skal du sende adgangskoden manuelt til modtageren.", + "Password to access %1$s shared by you with %2$s" : "Adgangskode for adgang til %1$s delt af dig med %2$s", + "This is the password:" : "Dette er adgangskoden:", + "You can choose a different password at any time in the share dialog." : "Du kan til enhver tid vælge en anden adgangskode i delings dialogen.", + "Could not find share" : "Kan ikke finde deling", + "Share provider which allows you to share files by mail" : "Del udbyder, som giver dig mulighed for at dele filer via mail", + "Unable to update share by mail config" : "Kan ikke opdatere del via mail konfigurationen", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Giver folk mulighed for at dele et personlig link til en fil eller mappe ved at indsætte en mail adresse.", + "Send password by mail" : "Send kodeord på mail", + "Reply to initiator" : "Svar til initiativtager" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/de.js b/apps/sharebymail/l10n/de.js new file mode 100644 index 00000000000..fb16121514f --- /dev/null +++ b/apps/sharebymail/l10n/de.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Geteilt mit {email}", + "Shared with {email} by {actor}" : "Geteilt mit {email} von {actor}", + "Unshared from {email}" : "Nicht mehr geteilt von {email}", + "Unshared from {email} by {actor}" : "Nicht mehr geteilt mit {email} durch {actor}", + "Password for mail share sent to {email}" : "Passwort für E-Mail-Freigabe wurde an {email} versandt", + "Password for mail share sent to you" : "Passwort für E-Mail-Freigabe wurde an dich gesendet", + "You shared {file} with {email} by mail" : "Du teilst {file} mit {email} via E-Mail", + "{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} via E-Mail", + "You unshared {file} from {email} by mail" : "Du teilst {file} nicht mehr mit {email} via E-Mail", + "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet", + "Share by mail" : "Teilen per E-Mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", + "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.", + "Failed to send share by email" : "Freigabe konnte nicht per E-Mail gesendet werden", + "%1$s shared %2$s with you" : "%1$s hat %2$s mit dir geteilt", + "Note:" : "Bemerkung:", + "This share is valid until %s at midnight" : "Diese Freigabe ist bis zum %s um Mitternacht gültig", + "Expiration:" : "Ablauf:", + "Open %s" : "%s öffnen", + "%1$s via %2$s" : "%1$s über %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s hat %2$s mit dir geteilt. Den entsprechenden Link solltest du bereits in einer separaten Mail erhalten haben.", + "Password to access %1$s shared to you by %2$s" : "Passwort für den Zugriff auf %1$s, mit dir geteilt von %2$s", + "Password to access %s" : "Zugriffspasswort %s", + "It is protected with the following password:" : "Dies ist mit dem folgendem Passwort geschützt:", + "This password will expire at %s" : "Dieses Passwort wird um %s ablaufen.", + "%1$s shared %2$s with you and wants to add:" : "%1$s hat %2$s mit dir geteilt und möchte hinzufügen:", + "%1$s shared %2$s with you and wants to add" : "%1$s hat %2$s mit dir geteilt und möchte hinzufügen", + "%s added a note to a file shared with you" : "%s hat eine Notiz zu einer Datei, die mit dir geteilt wurde, hinzugefügt", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du hast %1$s mit %2$s geteilt. Die Freigabe wurde an den Empfänger gesandt. Aufgrund der Sicherheits-Richtlinien, welche die Administration von %3$s vorgegeben hat, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund must du das Passwort selbst an den Empfänger senden.", + "Password to access %1$s shared by you with %2$s" : "Passwort für den Zugriff auf %1$s, von dir mit %2$s geteilt", + "This is the password:" : "Das Passwort lautet: ", + "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst du jederzeit ein anderes Passwort wählen.", + "Could not find share" : "Freigabe konnte nicht gefunden werden", + "Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail", + "Unable to update share by mail config" : "Einstellungen zum Teilen via E-Mail konnten nicht aktualisiert werden", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Personen, einen personalisierten Link zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", + "Send password by mail" : "Passwort per E-Mail senden", + "Reply to initiator" : "Antwort an Initiator" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/de.json b/apps/sharebymail/l10n/de.json new file mode 100644 index 00000000000..2895dfee855 --- /dev/null +++ b/apps/sharebymail/l10n/de.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Geteilt mit {email}", + "Shared with {email} by {actor}" : "Geteilt mit {email} von {actor}", + "Unshared from {email}" : "Nicht mehr geteilt von {email}", + "Unshared from {email} by {actor}" : "Nicht mehr geteilt mit {email} durch {actor}", + "Password for mail share sent to {email}" : "Passwort für E-Mail-Freigabe wurde an {email} versandt", + "Password for mail share sent to you" : "Passwort für E-Mail-Freigabe wurde an dich gesendet", + "You shared {file} with {email} by mail" : "Du teilst {file} mit {email} via E-Mail", + "{actor} shared {file} with {email} by mail" : "{actor} teilt {file} mit {email} via E-Mail", + "You unshared {file} from {email} by mail" : "Du teilst {file} nicht mehr mit {email} via E-Mail", + "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an dich gesendet", + "Share by mail" : "Teilen per E-Mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte gib in deinen persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche es erneut.", + "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Habe eine ungültige E-Mail-Adresse erhalten.", + "Failed to send share by email" : "Freigabe konnte nicht per E-Mail gesendet werden", + "%1$s shared %2$s with you" : "%1$s hat %2$s mit dir geteilt", + "Note:" : "Bemerkung:", + "This share is valid until %s at midnight" : "Diese Freigabe ist bis zum %s um Mitternacht gültig", + "Expiration:" : "Ablauf:", + "Open %s" : "%s öffnen", + "%1$s via %2$s" : "%1$s über %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s hat %2$s mit dir geteilt. Den entsprechenden Link solltest du bereits in einer separaten Mail erhalten haben.", + "Password to access %1$s shared to you by %2$s" : "Passwort für den Zugriff auf %1$s, mit dir geteilt von %2$s", + "Password to access %s" : "Zugriffspasswort %s", + "It is protected with the following password:" : "Dies ist mit dem folgendem Passwort geschützt:", + "This password will expire at %s" : "Dieses Passwort wird um %s ablaufen.", + "%1$s shared %2$s with you and wants to add:" : "%1$s hat %2$s mit dir geteilt und möchte hinzufügen:", + "%1$s shared %2$s with you and wants to add" : "%1$s hat %2$s mit dir geteilt und möchte hinzufügen", + "%s added a note to a file shared with you" : "%s hat eine Notiz zu einer Datei, die mit dir geteilt wurde, hinzugefügt", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du hast %1$s mit %2$s geteilt. Die Freigabe wurde an den Empfänger gesandt. Aufgrund der Sicherheits-Richtlinien, welche die Administration von %3$s vorgegeben hat, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund must du das Passwort selbst an den Empfänger senden.", + "Password to access %1$s shared by you with %2$s" : "Passwort für den Zugriff auf %1$s, von dir mit %2$s geteilt", + "This is the password:" : "Das Passwort lautet: ", + "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog kannst du jederzeit ein anderes Passwort wählen.", + "Could not find share" : "Freigabe konnte nicht gefunden werden", + "Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail", + "Unable to update share by mail config" : "Einstellungen zum Teilen via E-Mail konnten nicht aktualisiert werden", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Personen, einen personalisierten Link zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", + "Send password by mail" : "Passwort per E-Mail senden", + "Reply to initiator" : "Antwort an Initiator" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/de_DE.js b/apps/sharebymail/l10n/de_DE.js new file mode 100644 index 00000000000..9787275ca31 --- /dev/null +++ b/apps/sharebymail/l10n/de_DE.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Geteilt mit {email}", + "Shared with {email} by {actor}" : "Geteilt mit {email} von {actor}", + "Unshared from {email}" : "Nicht mehr geteilt von {email}", + "Unshared from {email} by {actor}" : "Nicht mehr geteilt mit {email} durch {actor}", + "Password for mail share sent to {email}" : "Passwort für E-Mail-Freigabe wurde an {email} versandt", + "Password for mail share sent to you" : "Passwort für E-Mail-Freigabe wurde an Sie versandt", + "You shared {file} with {email} by mail" : "Sie haben {file} mit {email} via E-Mail geteilt ", + "{actor} shared {file} with {email} by mail" : "{actor} hat {file} mit {email} via E-Mail geteilt", + "You unshared {file} from {email} by mail" : "Sie teilen {file} nicht mehr mit {email} via E-Mail", + "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ", + "Share by mail" : "Teilen per E-Mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", + "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.", + "Failed to send share by email" : "Freigabe konnte nicht per E-Mail gesendet werden", + "%1$s shared %2$s with you" : "%1$s hat %2$s mit Ihnen geteilt", + "Note:" : "Anmerkung:", + "This share is valid until %s at midnight" : "Diese Freigabe ist bis zum %s um Mitternacht gültig", + "Expiration:" : "Ablauf:", + "Open %s" : "%s öffnen", + "%1$s via %2$s" : "%1$s über %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s hat %2$s mit Ihnen geteilt. Den entsprechenden Link sollten Sie bereits in einer separaten Mail erhalten haben.", + "Password to access %1$s shared to you by %2$s" : "Passwort für den Zugriff auf %1$s, mit Ihnen geteilt von %2$s", + "Password to access %s" : "Zugriffspasswort %s", + "It is protected with the following password:" : "Dies ist mit dem folgendem Passwort geschützt:", + "This password will expire at %s" : "Dieses Passwort wird um %s ablaufen.", + "%1$s shared %2$s with you and wants to add:" : "%1$s hat %2$s mit Ihnen geteilt und möchte hinzufügen:", + "%1$s shared %2$s with you and wants to add" : "%1$s hat %2$s mit Ihnen geteilt und möchte hinzufügen", + "%s added a note to a file shared with you" : "%s hat eine Notiz zu einer Datei, die mit Ihnen geteilt wurde, hinzugefügt", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Sie haben %1$s mit %2$s geteilt. Die Freigabe wurde an den Empfänger gesandt. Aufgrund der Sicherheits-Richtlinien, welche die Administration von %3$s vorgegeben hat, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund müssen Sie das Passwort selbst an den Empfänger senden.", + "Password to access %1$s shared by you with %2$s" : "Passwort für den Zugriff auf %1$s, von Ihnen mit %2$s geteilt", + "This is the password:" : "Das Passwort lautet:", + "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.", + "Could not find share" : "Freigabe konnte nicht gefunden werden", + "Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail.", + "Unable to update share by mail config" : "Einstellungen zum Teilen via E-Mail konnten nicht aktualisiert werden", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Personen, einen personalisierten Link zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", + "Send password by mail" : "Passwort per Mail senden", + "Reply to initiator" : "Antwort an Initiator" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/de_DE.json b/apps/sharebymail/l10n/de_DE.json new file mode 100644 index 00000000000..4b7aa4a630c --- /dev/null +++ b/apps/sharebymail/l10n/de_DE.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Geteilt mit {email}", + "Shared with {email} by {actor}" : "Geteilt mit {email} von {actor}", + "Unshared from {email}" : "Nicht mehr geteilt von {email}", + "Unshared from {email} by {actor}" : "Nicht mehr geteilt mit {email} durch {actor}", + "Password for mail share sent to {email}" : "Passwort für E-Mail-Freigabe wurde an {email} versandt", + "Password for mail share sent to you" : "Passwort für E-Mail-Freigabe wurde an Sie versandt", + "You shared {file} with {email} by mail" : "Sie haben {file} mit {email} via E-Mail geteilt ", + "{actor} shared {file} with {email} by mail" : "{actor} hat {file} mit {email} via E-Mail geteilt", + "You unshared {file} from {email} by mail" : "Sie teilen {file} nicht mehr mit {email} via E-Mail", + "{actor} unshared {file} from {email} by mail" : "{actor} teilt {file} nicht mehr mit {email} via E-Mail", + "Password to access {file} was sent to {email}" : "Passwort für den Zugriff auf {file} wurde an {email} versandt ", + "Password to access {file} was sent to you" : "Passwort für den Zugriff auf {file} wurde an Sie versandt ", + "Share by mail" : "Teilen per E-Mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Freigeben von %1$s ist fehlgeschlagen, da dieses Element schon mit dem Konto %2$s geteilt wurde", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automatisch erzeugtes Passwort kann nicht versandt werden. Bitte geben Sie in Ihren persönlichen Einstellungen eine gültige E-Mail-Adresse ein und versuche Sie es erneut.", + "Failed to send share by email. Got an invalid email address" : "Die Freigabe per E-Mail konnte nicht gesendet werden. Es wurde eine ungültige E-Mail-Adresse angegeben.", + "Failed to send share by email" : "Freigabe konnte nicht per E-Mail gesendet werden", + "%1$s shared %2$s with you" : "%1$s hat %2$s mit Ihnen geteilt", + "Note:" : "Anmerkung:", + "This share is valid until %s at midnight" : "Diese Freigabe ist bis zum %s um Mitternacht gültig", + "Expiration:" : "Ablauf:", + "Open %s" : "%s öffnen", + "%1$s via %2$s" : "%1$s über %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s hat %2$s mit Ihnen geteilt. Den entsprechenden Link sollten Sie bereits in einer separaten Mail erhalten haben.", + "Password to access %1$s shared to you by %2$s" : "Passwort für den Zugriff auf %1$s, mit Ihnen geteilt von %2$s", + "Password to access %s" : "Zugriffspasswort %s", + "It is protected with the following password:" : "Dies ist mit dem folgendem Passwort geschützt:", + "This password will expire at %s" : "Dieses Passwort wird um %s ablaufen.", + "%1$s shared %2$s with you and wants to add:" : "%1$s hat %2$s mit Ihnen geteilt und möchte hinzufügen:", + "%1$s shared %2$s with you and wants to add" : "%1$s hat %2$s mit Ihnen geteilt und möchte hinzufügen", + "%s added a note to a file shared with you" : "%s hat eine Notiz zu einer Datei, die mit Ihnen geteilt wurde, hinzugefügt", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Sie haben %1$s mit %2$s geteilt. Die Freigabe wurde an den Empfänger gesandt. Aufgrund der Sicherheits-Richtlinien, welche die Administration von %3$s vorgegeben hat, benötigt jede Freigabe einen Passwortschutz und es ist nicht zulässig, ein Passwort direkt an den Empfänger zu versenden. Aus diesem Grund müssen Sie das Passwort selbst an den Empfänger senden.", + "Password to access %1$s shared by you with %2$s" : "Passwort für den Zugriff auf %1$s, von Ihnen mit %2$s geteilt", + "This is the password:" : "Das Passwort lautet:", + "You can choose a different password at any time in the share dialog." : "Im Teilen-Dialog können Sie jederzeit ein anderes Passwort wählen.", + "Could not find share" : "Freigabe konnte nicht gefunden werden", + "Share provider which allows you to share files by mail" : "Anbieter zum Teilen. Ermöglicht das Teilen von Dateien per E-Mail.", + "Unable to update share by mail config" : "Einstellungen zum Teilen via E-Mail konnten nicht aktualisiert werden", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ermöglicht Personen, einen personalisierten Link zu einer Datei oder einem Ordner durch Eingabe einer E-Mail-Adresse zu teilen.", + "Send password by mail" : "Passwort per Mail senden", + "Reply to initiator" : "Antwort an Initiator" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/el.js b/apps/sharebymail/l10n/el.js new file mode 100644 index 00000000000..9f92b1fec01 --- /dev/null +++ b/apps/sharebymail/l10n/el.js @@ -0,0 +1,33 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Διαμοιράστηκε με {email}", + "Shared with {email} by {actor}" : "Διαμοιράστηκε με {email} από {actor}", + "Unshared from {email}" : "Διακοπή διαμοιρασμού από {email}", + "Unshared from {email} by {actor}" : "Διακοπή διαμοιρασμού με {email} από {actor}", + "Password for mail share sent to {email}" : "Ο κωδικός πρόσβασης διαμοιρασμού αλληλογραφίας αποστέλλεται στο {email}", + "Password for mail share sent to you" : " Κωδικός πρόσβασης για διαμοιρασμό αλληλογραφίας σας έχει σταλεί", + "You shared {file} with {email} by mail" : "Διαμοιραστήκατε {file} με {email} μέσω mail", + "{actor} shared {file} with {email} by mail" : "{actor} διαμοίρασε {file} με {email} μέσω mail", + "You unshared {file} from {email} by mail" : "Διακόψατε διαμοιρασμό {file} από {email} με mail", + "{actor} unshared {file} from {email} by mail" : "Ο {actor} διέκοψε τον διαμοιρασμό το {file} από {email} με mail", + "Password to access {file} was sent to {email}" : "Ο κωδικός πρόσβασης για πρόσβαση στο {file} έχει αποσταλεί στο {email}", + "Password to access {file} was sent to you" : "Σας έχει αποσταλεί στο συνθηματικό για πρόσβαση {file}", + "Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε τον κωδικό πρόσβασης που δημιουργείται αυτόματα. Ορίστε μια έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και δοκιμάστε ξανά.", + "Failed to send share by email. Got an invalid email address" : "Αποτυχία αποστολής της κοινής χρήσης μέσω email. Λάβαμε μια μη έγκυρη διεύθυνση email", + "Failed to send share by email" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου", + "Note:" : "Σημείωση:", + "Open %s" : "Άνοιγμα %s", + "%1$s via %2$s" : "%1$s μέσω %2$s", + "It is protected with the following password:" : "Προστατευμένο με το συνθηματικό:", + "This password will expire at %s" : "Αυτός ο κωδικός πρόσβασης θα λήξει την %s", + "This is the password:" : "Αυτό είναι το συνθηματικό:", + "You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.", + "Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου", + "Share provider which allows you to share files by mail" : "Πάροχος διαμοιρασμού που σας επιτρέπει να διαμοιράζεστε αρχεία μέσω mail", + "Unable to update share by mail config" : "Αδυναμία ενημέρωσης των ρυθμίσεων κοινής χρήσης μέσω mail", + "Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία", + "Reply to initiator" : "Απάντηση στον αποστολέα" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/el.json b/apps/sharebymail/l10n/el.json new file mode 100644 index 00000000000..b1aa088faa6 --- /dev/null +++ b/apps/sharebymail/l10n/el.json @@ -0,0 +1,31 @@ +{ "translations": { + "Shared with {email}" : "Διαμοιράστηκε με {email}", + "Shared with {email} by {actor}" : "Διαμοιράστηκε με {email} από {actor}", + "Unshared from {email}" : "Διακοπή διαμοιρασμού από {email}", + "Unshared from {email} by {actor}" : "Διακοπή διαμοιρασμού με {email} από {actor}", + "Password for mail share sent to {email}" : "Ο κωδικός πρόσβασης διαμοιρασμού αλληλογραφίας αποστέλλεται στο {email}", + "Password for mail share sent to you" : " Κωδικός πρόσβασης για διαμοιρασμό αλληλογραφίας σας έχει σταλεί", + "You shared {file} with {email} by mail" : "Διαμοιραστήκατε {file} με {email} μέσω mail", + "{actor} shared {file} with {email} by mail" : "{actor} διαμοίρασε {file} με {email} μέσω mail", + "You unshared {file} from {email} by mail" : "Διακόψατε διαμοιρασμό {file} από {email} με mail", + "{actor} unshared {file} from {email} by mail" : "Ο {actor} διέκοψε τον διαμοιρασμό το {file} από {email} με mail", + "Password to access {file} was sent to {email}" : "Ο κωδικός πρόσβασης για πρόσβαση στο {file} έχει αποσταλεί στο {email}", + "Password to access {file} was sent to you" : "Σας έχει αποσταλεί στο συνθηματικό για πρόσβαση {file}", + "Share by mail" : "Διαμοιρασμός με ηλεκτρονική αλληλογραφία", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Δεν μπορούμε να σας στείλουμε τον κωδικό πρόσβασης που δημιουργείται αυτόματα. Ορίστε μια έγκυρη διεύθυνση email στις προσωπικές σας ρυθμίσεις και δοκιμάστε ξανά.", + "Failed to send share by email. Got an invalid email address" : "Αποτυχία αποστολής της κοινής χρήσης μέσω email. Λάβαμε μια μη έγκυρη διεύθυνση email", + "Failed to send share by email" : "Αποτυχία αποστολής συνδέσμου διαμοιρασμού μέσω Ηλ.ταχυδρομείου", + "Note:" : "Σημείωση:", + "Open %s" : "Άνοιγμα %s", + "%1$s via %2$s" : "%1$s μέσω %2$s", + "It is protected with the following password:" : "Προστατευμένο με το συνθηματικό:", + "This password will expire at %s" : "Αυτός ο κωδικός πρόσβασης θα λήξει την %s", + "This is the password:" : "Αυτό είναι το συνθηματικό:", + "You can choose a different password at any time in the share dialog." : "Μπορείτε να διαλέξετε ένα διαφορετικό συνθηματικό οποιαδήποτε στιγμή στον διάλογο διαμοιρασμού.", + "Could not find share" : "Αδυναμία εύρεσης κοινόχρηστου", + "Share provider which allows you to share files by mail" : "Πάροχος διαμοιρασμού που σας επιτρέπει να διαμοιράζεστε αρχεία μέσω mail", + "Unable to update share by mail config" : "Αδυναμία ενημέρωσης των ρυθμίσεων κοινής χρήσης μέσω mail", + "Send password by mail" : "Αποστολή συνθηματικου με ηλεκτρονική αλληλογραφία", + "Reply to initiator" : "Απάντηση στον αποστολέα" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/en_GB.js b/apps/sharebymail/l10n/en_GB.js new file mode 100644 index 00000000000..9fb45e4ab29 --- /dev/null +++ b/apps/sharebymail/l10n/en_GB.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Shared with {email}", + "Shared with {email} by {actor}" : "Shared with {email} by {actor}", + "Unshared from {email}" : "Unshared from {email}", + "Unshared from {email} by {actor}" : "Unshared from {email} by {actor}", + "Password for mail share sent to {email}" : "Password for mail share sent to {email}", + "Password for mail share sent to you" : "Password for mail share sent to you", + "You shared {file} with {email} by mail" : "You shared {file} with {email} by mail", + "{actor} shared {file} with {email} by mail" : "{actor} shared {file} with {email} by mail", + "You unshared {file} from {email} by mail" : "You unshared {file} from {email} by mail", + "{actor} unshared {file} from {email} by mail" : "{actor} unshared {file} from {email} by mail", + "Password to access {file} was sent to {email}" : "Password to access {file} was sent to {email}", + "Password to access {file} was sent to you" : "Password to access {file} was sent to you", + "Share by mail" : "Share by mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Sharing %1$s failed, because this item is already shared with the account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.", + "Failed to send share by email. Got an invalid email address" : "Failed to send share by email. Got an invalid email address", + "Failed to send share by email" : "Failed to send share by email", + "%1$s shared %2$s with you" : "%1$s shared %2$s with you", + "Note:" : "Note:", + "This share is valid until %s at midnight" : "This share is valid until %s at midnight", + "Expiration:" : "Expiration:", + "Open %s" : "Open %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it.", + "Password to access %1$s shared to you by %2$s" : "Password to access %1$s shared to you by %2$s", + "Password to access %s" : "Password to access %s", + "It is protected with the following password:" : "It is protected with the following password:", + "This password will expire at %s" : "This password will expire at %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s shared %2$s with you and wants to add:", + "%1$s shared %2$s with you and wants to add" : "%1$s shared %2$s with you and wants to add", + "%s added a note to a file shared with you" : "%s added a note to a file shared with you", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient.", + "Password to access %1$s shared by you with %2$s" : "Password to access %1$s shared by you with %2$s", + "This is the password:" : "This is the password:", + "You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialogue.", + "Could not find share" : "Could not find share", + "Share provider which allows you to share files by mail" : "Share provider which allows you to share files by mail", + "Unable to update share by mail config" : "Unable to update share by mail config", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Allows people to share a personalized link to a file or folder by putting in an email address.", + "Send password by mail" : "Send password by mail", + "Reply to initiator" : "Reply to initiator" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/en_GB.json b/apps/sharebymail/l10n/en_GB.json new file mode 100644 index 00000000000..41edba8140f --- /dev/null +++ b/apps/sharebymail/l10n/en_GB.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Shared with {email}", + "Shared with {email} by {actor}" : "Shared with {email} by {actor}", + "Unshared from {email}" : "Unshared from {email}", + "Unshared from {email} by {actor}" : "Unshared from {email} by {actor}", + "Password for mail share sent to {email}" : "Password for mail share sent to {email}", + "Password for mail share sent to you" : "Password for mail share sent to you", + "You shared {file} with {email} by mail" : "You shared {file} with {email} by mail", + "{actor} shared {file} with {email} by mail" : "{actor} shared {file} with {email} by mail", + "You unshared {file} from {email} by mail" : "You unshared {file} from {email} by mail", + "{actor} unshared {file} from {email} by mail" : "{actor} unshared {file} from {email} by mail", + "Password to access {file} was sent to {email}" : "Password to access {file} was sent to {email}", + "Password to access {file} was sent to you" : "Password to access {file} was sent to you", + "Share by mail" : "Share by mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Sharing %1$s failed, because this item is already shared with the account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.", + "Failed to send share by email. Got an invalid email address" : "Failed to send share by email. Got an invalid email address", + "Failed to send share by email" : "Failed to send share by email", + "%1$s shared %2$s with you" : "%1$s shared %2$s with you", + "Note:" : "Note:", + "This share is valid until %s at midnight" : "This share is valid until %s at midnight", + "Expiration:" : "Expiration:", + "Open %s" : "Open %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it.", + "Password to access %1$s shared to you by %2$s" : "Password to access %1$s shared to you by %2$s", + "Password to access %s" : "Password to access %s", + "It is protected with the following password:" : "It is protected with the following password:", + "This password will expire at %s" : "This password will expire at %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s shared %2$s with you and wants to add:", + "%1$s shared %2$s with you and wants to add" : "%1$s shared %2$s with you and wants to add", + "%s added a note to a file shared with you" : "%s added a note to a file shared with you", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient.", + "Password to access %1$s shared by you with %2$s" : "Password to access %1$s shared by you with %2$s", + "This is the password:" : "This is the password:", + "You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialogue.", + "Could not find share" : "Could not find share", + "Share provider which allows you to share files by mail" : "Share provider which allows you to share files by mail", + "Unable to update share by mail config" : "Unable to update share by mail config", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Allows people to share a personalized link to a file or folder by putting in an email address.", + "Send password by mail" : "Send password by mail", + "Reply to initiator" : "Reply to initiator" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/es.js b/apps/sharebymail/l10n/es.js new file mode 100644 index 00000000000..66b4e46ae4e --- /dev/null +++ b/apps/sharebymail/l10n/es.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejado de compartir desde {email}", + "Unshared from {email} by {actor}" : "Dejado de compartir desde {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para compartir por correo se ha enviado a {email}", + "Password for mail share sent to you" : "La contraseña para compartir por correo se te ha enviado", + "You shared {file} with {email} by mail" : "Has compartido {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo electrónico", + "You unshared {file} from {email} by mail" : "Has dejado de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} ha dejado de compartir desde {email} por correo", + "Password to access {file} was sent to {email}" : "Se ha enviado a {email} una contraseña para acceder a {file}", + "Password to access {file} was sent to you" : "Se te ha enviado una contraseña para acceder a {file}", + "Share by mail" : "Enviado por correo electrónico", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s porque este elemento ya está compartido con la cuenta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No te podemos enviar la contraseña auto generada. Por favor, indica una dirección de email válida en tu configuración personal e inténtalo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "No se ha podido enviar el vínculo por correo electrónico. La dirección de correo electrónico no es válida", + "Failed to send share by email" : "Fallo al enviar compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s ha compartido %2$s contigo", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a medianoche", + "Expiration:" : "Caduca el:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s ha compartido %2$s contigo. Deberías haber recibido otro correo con un enlace para acceder.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s, compartido contigo por %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s ha compartido %2$s contigo y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s ha compartido %2$s contigo y quiere añadir", + "%s added a note to a file shared with you" : "%s ha añadido una nota a un archivo compartido contigo", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Has compartido %1$s con %2$s. El recurso compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %3$s, cada recurso compartido debe estar protegido con contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto, tienes que enviarle la contraseña manualmente.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s, compartido contigo por %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en el diálogo de compartir.", + "Could not find share" : "No se pudo encontrar el recurso compartido", + "Share provider which allows you to share files by mail" : "Proveedor que permite compartir archivos por correo", + "Unable to update share by mail config" : "No se puede actualizar la configuración de compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "Enviar contraseñas por email", + "Reply to initiator" : "Responder al iniciador" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/es.json b/apps/sharebymail/l10n/es.json new file mode 100644 index 00000000000..7852ee52f69 --- /dev/null +++ b/apps/sharebymail/l10n/es.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejado de compartir desde {email}", + "Unshared from {email} by {actor}" : "Dejado de compartir desde {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para compartir por correo se ha enviado a {email}", + "Password for mail share sent to you" : "La contraseña para compartir por correo se te ha enviado", + "You shared {file} with {email} by mail" : "Has compartido {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo electrónico", + "You unshared {file} from {email} by mail" : "Has dejado de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} ha dejado de compartir desde {email} por correo", + "Password to access {file} was sent to {email}" : "Se ha enviado a {email} una contraseña para acceder a {file}", + "Password to access {file} was sent to you" : "Se te ha enviado una contraseña para acceder a {file}", + "Share by mail" : "Enviado por correo electrónico", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s porque este elemento ya está compartido con la cuenta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No te podemos enviar la contraseña auto generada. Por favor, indica una dirección de email válida en tu configuración personal e inténtalo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "No se ha podido enviar el vínculo por correo electrónico. La dirección de correo electrónico no es válida", + "Failed to send share by email" : "Fallo al enviar compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s ha compartido %2$s contigo", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a medianoche", + "Expiration:" : "Caduca el:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s ha compartido %2$s contigo. Deberías haber recibido otro correo con un enlace para acceder.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s, compartido contigo por %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s ha compartido %2$s contigo y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s ha compartido %2$s contigo y quiere añadir", + "%s added a note to a file shared with you" : "%s ha añadido una nota a un archivo compartido contigo", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Has compartido %1$s con %2$s. El recurso compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %3$s, cada recurso compartido debe estar protegido con contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto, tienes que enviarle la contraseña manualmente.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s, compartido contigo por %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en el diálogo de compartir.", + "Could not find share" : "No se pudo encontrar el recurso compartido", + "Share provider which allows you to share files by mail" : "Proveedor que permite compartir archivos por correo", + "Unable to update share by mail config" : "No se puede actualizar la configuración de compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "Enviar contraseñas por email", + "Reply to initiator" : "Responder al iniciador" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/es_AR.js b/apps/sharebymail/l10n/es_AR.js new file mode 100644 index 00000000000..732448988da --- /dev/null +++ b/apps/sharebymail/l10n/es_AR.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejó de compartirse con {email}", + "Unshared from {email} by {actor}" : "Dejó de compartirse con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se le ha sido enviada", + "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Has dejado de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se le ha sido enviada", + "Share by mail" : "Compartir por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s, porque este elemento ya está compartido con la cuenta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarle la contraseña generada automáticamente. Por favor, establezca una dirección de correo electrónico válida en sus ajustes personales e inténtelo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "Error al enviar el compartido por correo electrónico. Se proporcionó una dirección de correo electrónico no válida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s ha compartido \"%2$s\" con usted", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a la media noche", + "Expiration:" : "Caducidad:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s le compartió %2$s. Debería ya haber recibido un correo por separado con el enlace para acceder a éste.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s que le compartió %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "La compartición expirará el %s.", + "%1$s shared %2$s with you and wants to add:" : "%1$s le compartió %2$s y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s le compartió %2$s y quiere añadir", + "%s added a note to a file shared with you" : "%s añadió una nota a un archivo compartido con Ud.", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acaba de compartir »%1$s« con %2$s. El recurso compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %3$s, cada recurso compartido debe estar protegido con contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto, debe enviarle manualmente la contraseña.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s que compartió con %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puede elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor de compartidos que te permite compartir archivos por correo electrónico", + "Unable to update share by mail config" : "No se puede actualizar la configuración de compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al remitente" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/es_AR.json b/apps/sharebymail/l10n/es_AR.json new file mode 100644 index 00000000000..e17027730e4 --- /dev/null +++ b/apps/sharebymail/l10n/es_AR.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejó de compartirse con {email}", + "Unshared from {email} by {actor}" : "Dejó de compartirse con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se le ha sido enviada", + "You shared {file} with {email} by mail" : "Usted ha compartido {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} ha compartido {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Has dejado de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se le ha sido enviada", + "Share by mail" : "Compartir por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s, porque este elemento ya está compartido con la cuenta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarle la contraseña generada automáticamente. Por favor, establezca una dirección de correo electrónico válida en sus ajustes personales e inténtelo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "Error al enviar el compartido por correo electrónico. Se proporcionó una dirección de correo electrónico no válida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s ha compartido \"%2$s\" con usted", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a la media noche", + "Expiration:" : "Caducidad:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s le compartió %2$s. Debería ya haber recibido un correo por separado con el enlace para acceder a éste.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s que le compartió %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "La compartición expirará el %s.", + "%1$s shared %2$s with you and wants to add:" : "%1$s le compartió %2$s y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s le compartió %2$s y quiere añadir", + "%s added a note to a file shared with you" : "%s añadió una nota a un archivo compartido con Ud.", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Acaba de compartir »%1$s« con %2$s. El recurso compartido ya ha sido enviado al destinatario. Debido a las políticas de seguridad definidas por el administrador de %3$s, cada recurso compartido debe estar protegido con contraseña y no se permite enviar la contraseña directamente al destinatario. Por lo tanto, debe enviarle manualmente la contraseña.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s que compartió con %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puede elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor de compartidos que te permite compartir archivos por correo electrónico", + "Unable to update share by mail config" : "No se puede actualizar la configuración de compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al remitente" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/es_EC.js b/apps/sharebymail/l10n/es_EC.js new file mode 100644 index 00000000000..41c6056f404 --- /dev/null +++ b/apps/sharebymail/l10n/es_EC.js @@ -0,0 +1,31 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejó de compartirse con {email}", + "Unshared from {email} by {actor}" : "Dejó de compartirse con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado", + "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Dejó de compartir {file} con {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada", + "Share by mail" : "Compartir por correo", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarte la contraseña generada automáticamente. Por favor, establece una dirección de correo electrónico válida en tus ajustes personales e inténtalo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "Error al enviar el compartido por correo electrónico. Se proporcionó una dirección de correo electrónico no válida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s via %2$s" : "%1$s a través de %2$s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor de compartidos que te permite compartir archivos por correo electrónico", + "Unable to update share by mail config" : "No se pudo actualizar la configuración de compartido por correo", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al remitente" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/es_EC.json b/apps/sharebymail/l10n/es_EC.json new file mode 100644 index 00000000000..9deec8ecff6 --- /dev/null +++ b/apps/sharebymail/l10n/es_EC.json @@ -0,0 +1,29 @@ +{ "translations": { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Dejó de compartirse con {email}", + "Unshared from {email} by {actor}" : "Dejó de compartirse con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado", + "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Dejó de compartir {file} con {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada", + "Share by mail" : "Compartir por correo", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarte la contraseña generada automáticamente. Por favor, establece una dirección de correo electrónico válida en tus ajustes personales e inténtalo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "Error al enviar el compartido por correo electrónico. Se proporcionó una dirección de correo electrónico no válida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s via %2$s" : "%1$s a través de %2$s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor de compartidos que te permite compartir archivos por correo electrónico", + "Unable to update share by mail config" : "No se pudo actualizar la configuración de compartido por correo", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al remitente" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/es_MX.js b/apps/sharebymail/l10n/es_MX.js new file mode 100644 index 00000000000..1bb0a00c440 --- /dev/null +++ b/apps/sharebymail/l10n/es_MX.js @@ -0,0 +1,45 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Se dejó de compartir con {email}", + "Unshared from {email} by {actor}" : "Se dejó de compartir con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado", + "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Dejó de compartir {file} con {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada", + "Share by mail" : "Compartir por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s, porque este elemento ya está compartido con la cuenta %2$s ", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarle la contraseña generada automáticamente. Por favor, establezca una dirección de correo electrónico válida en sus ajustes personales e inténtelo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "No se pudo enviar el recurso compartido por correo electrónico. La dirección de correo electrónico es inválida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s le compartió %2$s", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a la media noche", + "Expiration:" : "Caducidad:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s le compartió %2$s. Debería ya haber recibido un correo por separado con el enlace para acceder a éste.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s que le compartió %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s le compartió %2$s y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s le compartió %2$s y quiere añadir", + "%s added a note to a file shared with you" : "%s añadió una nota a un archivo compartido con Ud.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s que compartió con %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor para compartir que te permite compartir archivos por correo", + "Unable to update share by mail config" : "No se pudo actualizar la configuración del recurso compartido por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al iniciador" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/es_MX.json b/apps/sharebymail/l10n/es_MX.json new file mode 100644 index 00000000000..f0a0e7c3cf3 --- /dev/null +++ b/apps/sharebymail/l10n/es_MX.json @@ -0,0 +1,43 @@ +{ "translations": { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Se dejó de compartir con {email}", + "Unshared from {email} by {actor}" : "Se dejó de compartir con {email} por {actor}", + "Password for mail share sent to {email}" : "La contraseña para el elemento compartido fue enviada a {email}", + "Password for mail share sent to you" : "La contraseña para el elemento compartido se te ha enviado", + "You shared {file} with {email} by mail" : "Compartiste {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartió {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Dejó de compartir {file} con {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} dejó de compartir {file} con {email} por correo", + "Password to access {file} was sent to {email}" : "La contraseña para acceder {file} ha sido enviada a {email}", + "Password to access {file} was sent to you" : "La contraseña para acceder {file} se te ha sido enviada", + "Share by mail" : "Compartir por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "No se pudo compartir %1$s, porque este elemento ya está compartido con la cuenta %2$s ", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "No podemos enviarle la contraseña generada automáticamente. Por favor, establezca una dirección de correo electrónico válida en sus ajustes personales e inténtelo de nuevo.", + "Failed to send share by email. Got an invalid email address" : "No se pudo enviar el recurso compartido por correo electrónico. La dirección de correo electrónico es inválida", + "Failed to send share by email" : "Se presentó una falla al enviar el elemento compartido por correo electrónico", + "%1$s shared %2$s with you" : "%1$s le compartió %2$s", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "El recurso compartido es válido hasta el %s a la media noche", + "Expiration:" : "Caducidad:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s vía %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s le compartió %2$s. Debería ya haber recibido un correo por separado con el enlace para acceder a éste.", + "Password to access %1$s shared to you by %2$s" : "Contraseña para acceder a %1$s que le compartió %2$s", + "Password to access %s" : "Contraseña para acceder a %s", + "It is protected with the following password:" : "Está protegido con la siguiente contraseña:", + "This password will expire at %s" : "Esta contraseña caducará a las %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s le compartió %2$s y quiere añadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s le compartió %2$s y quiere añadir", + "%s added a note to a file shared with you" : "%s añadió una nota a un archivo compartido con Ud.", + "Password to access %1$s shared by you with %2$s" : "Contraseña para acceder a %1$s que compartió con %2$s", + "This is the password:" : "Esta es la contraseña:", + "You can choose a different password at any time in the share dialog." : "Puedes elegir una contraseña diferente en cualquier momento en la ventana de diálogo de compartir. ", + "Could not find share" : "No fue posible encontrar el elemento compartido", + "Share provider which allows you to share files by mail" : "Proveedor para compartir que te permite compartir archivos por correo", + "Unable to update share by mail config" : "No se pudo actualizar la configuración del recurso compartido por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite a los usuarios compartir un enlace personalizado a un archivo o carpeta colocando una dirección de correo electrónico.", + "Send password by mail" : "La contraseña ha sido enviada por correo", + "Reply to initiator" : "Responder al iniciador" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/et_EE.js b/apps/sharebymail/l10n/et_EE.js new file mode 100644 index 00000000000..c47755cfca4 --- /dev/null +++ b/apps/sharebymail/l10n/et_EE.js @@ -0,0 +1,41 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Jagatud aadressile {email}", + "Shared with {email} by {actor}" : "Jagatud aadressile {email} {actor} poolt", + "Unshared from {email}" : "Jagamine {email} aadressile on lõpetatud", + "Unshared from {email} by {actor}" : "{actor} lõpetas jagamise {email} aadressile", + "Password for mail share sent to {email}" : "E-kirjaga jagamise salasõna on saadetud aadressile {email}", + "Password for mail share sent to you" : "Sulle saadetud e-kirjaga jagamise salasõna", + "Password to access {file} was sent to {email}" : "Salasõna ligipääsuks „{file}“ failile saadeti aadressile {email}", + "Password to access {file} was sent to you" : "Sulle saadeti salasõna ligipääsuks „{file}“ failile", + "Share by mail" : "Jaga e-postiga", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s jagamine ebaõnnestus, kuna seda üksust on juba jagatud kontoga %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Me ei saa sulle automaatselt loodud salasõna saata. Palun määra oma isiklikes seadistustes korrektne e-posti aadress ja proovi uuesti.", + "Failed to send share by email. Got an invalid email address" : "Jaosmeedia saatmine e-postiga ei õnnestunud. Ilmselt oli e-posti aadress vale.", + "Failed to send share by email" : "Jaosmeediat polnud võimalik e-kirjaga saata", + "%1$s shared %2$s with you" : "%1$s jagas sinuga: %2$s", + "Note:" : "Märkus:", + "This share is valid until %s at midnight" : "See jaosmeedia kehtib vaid %s keskööni", + "Expiration:" : "Aegumine:", + "Open %s" : "Ava %s ", + "%1$s via %2$s" : "%1$s %2$s kaudu", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%2$s jagas sulle „%1$s“ jaosmeediat. Peaksid juba olema saanud eraldi e-kirja ligipääsuks vajaliku lingiga.", + "Password to access %1$s shared to you by %2$s" : "Salasõna ligipääsuks „%1$s“ jaosmeediale, mida sulle jagas %2$s", + "Password to access %s" : "Salasõna ligipääsuks „%s“ jaosmeediale", + "It is protected with the following password:" : "See on kaitstud järgneva salasõnaga:", + "This password will expire at %s" : "See salasõna aegub %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s jagas sinuga %2$s ning soovib lisada:", + "%1$s shared %2$s with you and wants to add" : "%1$s jagas sinuga %2$s ning soovib lisada", + "%s added a note to a file shared with you" : "%s jagas koos sulle jagatud failiga ka märget", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Sa just jagasid „%1$s“ meediat kasutajale „%2$s“. Jaosmeedia teave on juba saadetud kasutajale. Kuna %3$s serveri peakasutaja on kehtestanud turvareeglid, siis iga jaosmeedia peab olema kaitstud salasõnaga ning salasõna ei tohi kasutajale otse saata. Seetõttu pead salasõna saajale edastama käsitsi.", + "Password to access %1$s shared by you with %2$s" : "%2$s jagas sinuga salasõna ligipääsuks „%1$s“ jaosmeediale", + "This is the password:" : "See on vajalik salasõna:", + "You can choose a different password at any time in the share dialog." : "Salasõna saad alati jagamisvaatest muuta.", + "Could not find share" : "Jagamist ei leitud.", + "Share provider which allows you to share files by mail" : "Jagamisteenuse pakkuja, mis võimaldab sul meediat jagada e-posti vahendusel", + "Unable to update share by mail config" : "E-postiga jagamise seadistuste uuendamine ei õnnestu.", + "Send password by mail" : "Saada salasõna e-postiga", + "Reply to initiator" : "Vasta algatajale" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/et_EE.json b/apps/sharebymail/l10n/et_EE.json new file mode 100644 index 00000000000..ad4029da1e0 --- /dev/null +++ b/apps/sharebymail/l10n/et_EE.json @@ -0,0 +1,39 @@ +{ "translations": { + "Shared with {email}" : "Jagatud aadressile {email}", + "Shared with {email} by {actor}" : "Jagatud aadressile {email} {actor} poolt", + "Unshared from {email}" : "Jagamine {email} aadressile on lõpetatud", + "Unshared from {email} by {actor}" : "{actor} lõpetas jagamise {email} aadressile", + "Password for mail share sent to {email}" : "E-kirjaga jagamise salasõna on saadetud aadressile {email}", + "Password for mail share sent to you" : "Sulle saadetud e-kirjaga jagamise salasõna", + "Password to access {file} was sent to {email}" : "Salasõna ligipääsuks „{file}“ failile saadeti aadressile {email}", + "Password to access {file} was sent to you" : "Sulle saadeti salasõna ligipääsuks „{file}“ failile", + "Share by mail" : "Jaga e-postiga", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s jagamine ebaõnnestus, kuna seda üksust on juba jagatud kontoga %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Me ei saa sulle automaatselt loodud salasõna saata. Palun määra oma isiklikes seadistustes korrektne e-posti aadress ja proovi uuesti.", + "Failed to send share by email. Got an invalid email address" : "Jaosmeedia saatmine e-postiga ei õnnestunud. Ilmselt oli e-posti aadress vale.", + "Failed to send share by email" : "Jaosmeediat polnud võimalik e-kirjaga saata", + "%1$s shared %2$s with you" : "%1$s jagas sinuga: %2$s", + "Note:" : "Märkus:", + "This share is valid until %s at midnight" : "See jaosmeedia kehtib vaid %s keskööni", + "Expiration:" : "Aegumine:", + "Open %s" : "Ava %s ", + "%1$s via %2$s" : "%1$s %2$s kaudu", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%2$s jagas sulle „%1$s“ jaosmeediat. Peaksid juba olema saanud eraldi e-kirja ligipääsuks vajaliku lingiga.", + "Password to access %1$s shared to you by %2$s" : "Salasõna ligipääsuks „%1$s“ jaosmeediale, mida sulle jagas %2$s", + "Password to access %s" : "Salasõna ligipääsuks „%s“ jaosmeediale", + "It is protected with the following password:" : "See on kaitstud järgneva salasõnaga:", + "This password will expire at %s" : "See salasõna aegub %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s jagas sinuga %2$s ning soovib lisada:", + "%1$s shared %2$s with you and wants to add" : "%1$s jagas sinuga %2$s ning soovib lisada", + "%s added a note to a file shared with you" : "%s jagas koos sulle jagatud failiga ka märget", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Sa just jagasid „%1$s“ meediat kasutajale „%2$s“. Jaosmeedia teave on juba saadetud kasutajale. Kuna %3$s serveri peakasutaja on kehtestanud turvareeglid, siis iga jaosmeedia peab olema kaitstud salasõnaga ning salasõna ei tohi kasutajale otse saata. Seetõttu pead salasõna saajale edastama käsitsi.", + "Password to access %1$s shared by you with %2$s" : "%2$s jagas sinuga salasõna ligipääsuks „%1$s“ jaosmeediale", + "This is the password:" : "See on vajalik salasõna:", + "You can choose a different password at any time in the share dialog." : "Salasõna saad alati jagamisvaatest muuta.", + "Could not find share" : "Jagamist ei leitud.", + "Share provider which allows you to share files by mail" : "Jagamisteenuse pakkuja, mis võimaldab sul meediat jagada e-posti vahendusel", + "Unable to update share by mail config" : "E-postiga jagamise seadistuste uuendamine ei õnnestu.", + "Send password by mail" : "Saada salasõna e-postiga", + "Reply to initiator" : "Vasta algatajale" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/eu.js b/apps/sharebymail/l10n/eu.js new file mode 100644 index 00000000000..0bed3e0555b --- /dev/null +++ b/apps/sharebymail/l10n/eu.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "{email}-rekin partekatua", + "Shared with {email} by {actor}" : "{actor}-k {email}-rekin partekatua", + "Unshared from {email}" : "{email} -etik partekatzeari utzi zaio", + "Unshared from {email} by {actor}" : "{actor}-(e)k {email}-(e)tik partekatzeari utzi dio", + "Password for mail share sent to {email}" : "E-posta bidezko partekatzearen pasahitza bidali zaio {email} e-postari", + "Password for mail share sent to you" : "E-posta bidezko partekatzearen pasahitza bidali zaizu", + "You shared {file} with {email} by mail" : "{file} partekatu duzu {email}-(r)ekin posta bidez", + "{actor} shared {file} with {email} by mail" : "{actor} -(e)k {file} partekatu du {email} -(r)ekin posta bidez", + "You unshared {file} from {email} by mail" : "{file} partekatzeari utzi diozu {email}-(e)tik posta bidez", + "{actor} unshared {file} from {email} by mail" : "{actor} -(e)k {file} partekatzeari utzi dio {email} -(e)tik posta bidez", + "Password to access {file} was sent to {email}" : "{file} atzitzeko pasahitza bidali da {email}-(e)ra", + "Password to access {file} was sent to you" : "{file} atzitzeko pasahitza bidali zaizu", + "Share by mail" : "Partekatu e-mail bidez", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$spartekatzeak huts egin du, dagoeneko %2$skontuarekin partekatuta dagoelako", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ezin dizugu bidali automatikoki sortutako pasahitza. Ezarri baliozko helbide elektronikoa ezarpen pertsonaletan eta saiatu berriro.", + "Failed to send share by email. Got an invalid email address" : "Ezin izan da partekaturikoa posta elektronikoz bidali. Helbide elektroniko baliogabea lortu du", + "Failed to send share by email" : "Ezin izan da e-posta bidez partekatu", + "%1$s shared %2$s with you" : "%1$sk %2$s partekatu du zurekin", + "Note:" : "Oharra:", + "This share is valid until %s at midnight" : "Partaidetza honek %sko gauerdira arte balio du", + "Expiration:" : "Iraungitzea:", + "Open %s" : "Ireki %s", + "%1$s via %2$s" : "%2$s bidez, %1$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s-k »%2$s« partekatu du zurekin. Bertara iristeko esteka mezu batean eduki behar zenuke dagoeneko zure posta elektronikoan.", + "Password to access %1$s shared to you by %2$s" : "%1$s -ra sartzeko pasahitza partekatu du zurekin %2$s-k", + "Password to access %s" : "%s-ra sartzeko pasahitza", + "It is protected with the following password:" : "Honako pasahitz honekin babestuta dago:", + "This password will expire at %s" : "Pasahitz honek %s(e)(t)an iraungiko du", + "%1$s shared %2$s with you and wants to add:" : "%1$serabiltzaileak %2$s partekatu du zurekin eta hau gehitu nahi du:", + "%1$s shared %2$s with you and wants to add" : "%1$serabiltzaileak %2$s partekatu du zurekin eta hau gehitu nahi du", + "%s added a note to a file shared with you" : "%s erabiltzaileak ohar bat gehitu du partekatu dizun fitxategi batean", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$spartekatu duzu %2$s-rekin. Partekatzea dagoeneko hartzaileari bidali zaio. %3$s-ko administratzaileak zehaztutako segurtasun politikak direla eta, partekatze bakoitza pasahitz bidez babestu behar da eta ezin da pasahitza zuzenean hartzaileari bidali. Beraz, pasahitza eskuz birbidali behar diozu hartzaileari.", + "Password to access %1$s shared by you with %2$s" : "%1$s-ra sartzeko pasahitza partekatu duzu %2$s-rekin", + "This is the password:" : "Hau da pasahitza:", + "You can choose a different password at any time in the share dialog." : "Nahi duzuenan aukeratu dezakezu beste pasahitz bat partekatze-leihoan.", + "Could not find share" : "Ezin da partekatzea topatu", + "Share provider which allows you to share files by mail" : "Partekatze hornitzailea, fitxategiak posta bidez partekatzeko aukera ematen duena", + "Unable to update share by mail config" : "Ezin da eguneratu partekatzea posta konfigurazioaren bidez", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Pertsonei fitxategi edo karpeta baterako esteka pertsonalizatua partekatzeko aukera ematen die helbide elektronikoa jarriz.", + "Send password by mail" : "Bidali pasahitza posta bidez", + "Reply to initiator" : "Erantzun hasieragailuari" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/eu.json b/apps/sharebymail/l10n/eu.json new file mode 100644 index 00000000000..ef922e9373b --- /dev/null +++ b/apps/sharebymail/l10n/eu.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "{email}-rekin partekatua", + "Shared with {email} by {actor}" : "{actor}-k {email}-rekin partekatua", + "Unshared from {email}" : "{email} -etik partekatzeari utzi zaio", + "Unshared from {email} by {actor}" : "{actor}-(e)k {email}-(e)tik partekatzeari utzi dio", + "Password for mail share sent to {email}" : "E-posta bidezko partekatzearen pasahitza bidali zaio {email} e-postari", + "Password for mail share sent to you" : "E-posta bidezko partekatzearen pasahitza bidali zaizu", + "You shared {file} with {email} by mail" : "{file} partekatu duzu {email}-(r)ekin posta bidez", + "{actor} shared {file} with {email} by mail" : "{actor} -(e)k {file} partekatu du {email} -(r)ekin posta bidez", + "You unshared {file} from {email} by mail" : "{file} partekatzeari utzi diozu {email}-(e)tik posta bidez", + "{actor} unshared {file} from {email} by mail" : "{actor} -(e)k {file} partekatzeari utzi dio {email} -(e)tik posta bidez", + "Password to access {file} was sent to {email}" : "{file} atzitzeko pasahitza bidali da {email}-(e)ra", + "Password to access {file} was sent to you" : "{file} atzitzeko pasahitza bidali zaizu", + "Share by mail" : "Partekatu e-mail bidez", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$spartekatzeak huts egin du, dagoeneko %2$skontuarekin partekatuta dagoelako", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ezin dizugu bidali automatikoki sortutako pasahitza. Ezarri baliozko helbide elektronikoa ezarpen pertsonaletan eta saiatu berriro.", + "Failed to send share by email. Got an invalid email address" : "Ezin izan da partekaturikoa posta elektronikoz bidali. Helbide elektroniko baliogabea lortu du", + "Failed to send share by email" : "Ezin izan da e-posta bidez partekatu", + "%1$s shared %2$s with you" : "%1$sk %2$s partekatu du zurekin", + "Note:" : "Oharra:", + "This share is valid until %s at midnight" : "Partaidetza honek %sko gauerdira arte balio du", + "Expiration:" : "Iraungitzea:", + "Open %s" : "Ireki %s", + "%1$s via %2$s" : "%2$s bidez, %1$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s-k »%2$s« partekatu du zurekin. Bertara iristeko esteka mezu batean eduki behar zenuke dagoeneko zure posta elektronikoan.", + "Password to access %1$s shared to you by %2$s" : "%1$s -ra sartzeko pasahitza partekatu du zurekin %2$s-k", + "Password to access %s" : "%s-ra sartzeko pasahitza", + "It is protected with the following password:" : "Honako pasahitz honekin babestuta dago:", + "This password will expire at %s" : "Pasahitz honek %s(e)(t)an iraungiko du", + "%1$s shared %2$s with you and wants to add:" : "%1$serabiltzaileak %2$s partekatu du zurekin eta hau gehitu nahi du:", + "%1$s shared %2$s with you and wants to add" : "%1$serabiltzaileak %2$s partekatu du zurekin eta hau gehitu nahi du", + "%s added a note to a file shared with you" : "%s erabiltzaileak ohar bat gehitu du partekatu dizun fitxategi batean", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$spartekatu duzu %2$s-rekin. Partekatzea dagoeneko hartzaileari bidali zaio. %3$s-ko administratzaileak zehaztutako segurtasun politikak direla eta, partekatze bakoitza pasahitz bidez babestu behar da eta ezin da pasahitza zuzenean hartzaileari bidali. Beraz, pasahitza eskuz birbidali behar diozu hartzaileari.", + "Password to access %1$s shared by you with %2$s" : "%1$s-ra sartzeko pasahitza partekatu duzu %2$s-rekin", + "This is the password:" : "Hau da pasahitza:", + "You can choose a different password at any time in the share dialog." : "Nahi duzuenan aukeratu dezakezu beste pasahitz bat partekatze-leihoan.", + "Could not find share" : "Ezin da partekatzea topatu", + "Share provider which allows you to share files by mail" : "Partekatze hornitzailea, fitxategiak posta bidez partekatzeko aukera ematen duena", + "Unable to update share by mail config" : "Ezin da eguneratu partekatzea posta konfigurazioaren bidez", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Pertsonei fitxategi edo karpeta baterako esteka pertsonalizatua partekatzeko aukera ematen die helbide elektronikoa jarriz.", + "Send password by mail" : "Bidali pasahitza posta bidez", + "Reply to initiator" : "Erantzun hasieragailuari" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/fa.js b/apps/sharebymail/l10n/fa.js new file mode 100644 index 00000000000..e9328c5b102 --- /dev/null +++ b/apps/sharebymail/l10n/fa.js @@ -0,0 +1,37 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "اشتراک گذاری با {email}", + "Shared with {email} by {actor}" : "اشتراک گذاری با {email} توسط {actor}", + "Unshared from {email}" : "عدم اشتراک از {email}", + "Unshared from {email} by {actor}" : "عدم اشتراک از {email} توسط {actor}", + "Password for mail share sent to {email}" : "گذرواژه برای اشتراک ایمیل ارسال شده به {email}", + "Password for mail share sent to you" : "رمزعبور برای پست الکترونیک اشتراک شما ارسال شد", + "You shared {file} with {email} by mail" : "{file} را با {email} از طریق پست به اشتراک گذاشتید", + "{actor} shared {file} with {email} by mail" : "{actor} به اشتراک گذاشته {file} با {email} از طریق پست", + "You unshared {file} from {email} by mail" : "شما {file} از {email} را از طریق پست مشترکاً اشتراک نکردید", + "{actor} unshared {file} from {email} by mail" : "{actor} عدم اشتراک {file} از {email} از طریق پست الکترونیک", + "Password to access {file} was sent to {email}" : "رمز عبور برای دسترسی به {file} به {email} ارسال شد", + "Password to access {file} was sent to you" : "رمز ورود برای دسترسی به {file} برای شما ارسال شد", + "Share by mail" : "اشتراک از طریق پست", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "اشتراکگذاری %1$s ناموفق بود، زیرا این مورد قبلاً با حساب %2$s به اشتراک گذاشته شده است", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "ما نمی توانیم رمز عبور ایجاد شده به صورت خودکار را برای شما ارسال کنیم. لطفاً یک آدرس ایمیل معتبر در تنظیمات شخصی خود تنظیم کنید و دوباره امتحان کنید.", + "Failed to send share by email. Got an invalid email address" : "اشتراک از طریق ایمیل ارسال نشد. یک آدرس ایمیل نامعتبر دریافت کردم", + "Failed to send share by email" : "ارسال اشتراک از طریق ایمیل انجام نشد", + "%1$s shared %2$s with you" : "%1$s %2$s را با شما به اشتراک گذاشت", + "Open %s" : "باز کردن %s", + "%1$s via %2$s" : "%1$s از طریق %2$s", + "It is protected with the following password:" : "با رمز عبور زیر محافظت می شود:", + "This password will expire at %s" : "این رمز عبور در تاریخ منقضی می شود %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s %2$s را با شما به اشتراک گذاشت و میخواهد اضافه کند:", + "%1$s shared %2$s with you and wants to add" : "%1$s %2$s را با شما به اشتراک گذاشت و میخواهد اضافه کند", + "%s added a note to a file shared with you" : "%s یک یادداشت به فایلی که با شما به اشتراک گذاشته شده است اضافه کرد", + "This is the password:" : "این رمز عبور است:", + "You can choose a different password at any time in the share dialog." : "می توانید در هر زمان و در گفتگوی اشتراک ، رمزعبور دیگری را انتخاب کنید.", + "Could not find share" : "اشتراک یافت نشد", + "Share provider which allows you to share files by mail" : "ارائه دهنده به شما امکان می دهد پرونده ها را از طریق پست به اشتراک بگذارید", + "Unable to update share by mail config" : "بهروزرسانی اشتراکگذاری با پیکربندی ایمیل امکانپذیر نیست", + "Send password by mail" : "ارسال رمز عبور از طریق پست", + "Reply to initiator" : "پاسخ به آغازگر" +}, +"nplurals=2; plural=(n > 1);"); diff --git a/apps/sharebymail/l10n/fa.json b/apps/sharebymail/l10n/fa.json new file mode 100644 index 00000000000..4459f308770 --- /dev/null +++ b/apps/sharebymail/l10n/fa.json @@ -0,0 +1,35 @@ +{ "translations": { + "Shared with {email}" : "اشتراک گذاری با {email}", + "Shared with {email} by {actor}" : "اشتراک گذاری با {email} توسط {actor}", + "Unshared from {email}" : "عدم اشتراک از {email}", + "Unshared from {email} by {actor}" : "عدم اشتراک از {email} توسط {actor}", + "Password for mail share sent to {email}" : "گذرواژه برای اشتراک ایمیل ارسال شده به {email}", + "Password for mail share sent to you" : "رمزعبور برای پست الکترونیک اشتراک شما ارسال شد", + "You shared {file} with {email} by mail" : "{file} را با {email} از طریق پست به اشتراک گذاشتید", + "{actor} shared {file} with {email} by mail" : "{actor} به اشتراک گذاشته {file} با {email} از طریق پست", + "You unshared {file} from {email} by mail" : "شما {file} از {email} را از طریق پست مشترکاً اشتراک نکردید", + "{actor} unshared {file} from {email} by mail" : "{actor} عدم اشتراک {file} از {email} از طریق پست الکترونیک", + "Password to access {file} was sent to {email}" : "رمز عبور برای دسترسی به {file} به {email} ارسال شد", + "Password to access {file} was sent to you" : "رمز ورود برای دسترسی به {file} برای شما ارسال شد", + "Share by mail" : "اشتراک از طریق پست", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "اشتراکگذاری %1$s ناموفق بود، زیرا این مورد قبلاً با حساب %2$s به اشتراک گذاشته شده است", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "ما نمی توانیم رمز عبور ایجاد شده به صورت خودکار را برای شما ارسال کنیم. لطفاً یک آدرس ایمیل معتبر در تنظیمات شخصی خود تنظیم کنید و دوباره امتحان کنید.", + "Failed to send share by email. Got an invalid email address" : "اشتراک از طریق ایمیل ارسال نشد. یک آدرس ایمیل نامعتبر دریافت کردم", + "Failed to send share by email" : "ارسال اشتراک از طریق ایمیل انجام نشد", + "%1$s shared %2$s with you" : "%1$s %2$s را با شما به اشتراک گذاشت", + "Open %s" : "باز کردن %s", + "%1$s via %2$s" : "%1$s از طریق %2$s", + "It is protected with the following password:" : "با رمز عبور زیر محافظت می شود:", + "This password will expire at %s" : "این رمز عبور در تاریخ منقضی می شود %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s %2$s را با شما به اشتراک گذاشت و میخواهد اضافه کند:", + "%1$s shared %2$s with you and wants to add" : "%1$s %2$s را با شما به اشتراک گذاشت و میخواهد اضافه کند", + "%s added a note to a file shared with you" : "%s یک یادداشت به فایلی که با شما به اشتراک گذاشته شده است اضافه کرد", + "This is the password:" : "این رمز عبور است:", + "You can choose a different password at any time in the share dialog." : "می توانید در هر زمان و در گفتگوی اشتراک ، رمزعبور دیگری را انتخاب کنید.", + "Could not find share" : "اشتراک یافت نشد", + "Share provider which allows you to share files by mail" : "ارائه دهنده به شما امکان می دهد پرونده ها را از طریق پست به اشتراک بگذارید", + "Unable to update share by mail config" : "بهروزرسانی اشتراکگذاری با پیکربندی ایمیل امکانپذیر نیست", + "Send password by mail" : "ارسال رمز عبور از طریق پست", + "Reply to initiator" : "پاسخ به آغازگر" +},"pluralForm" :"nplurals=2; plural=(n > 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/fi.js b/apps/sharebymail/l10n/fi.js new file mode 100644 index 00000000000..245d187eb6b --- /dev/null +++ b/apps/sharebymail/l10n/fi.js @@ -0,0 +1,29 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Jaettu käyttäjälle {email}", + "Shared with {email} by {actor}" : "Jaettu käyttäjälle {email} käyttäjän {actor} toimesta", + "Unshared from {email}" : "Jako käyttäjälle {email} lopetettu", + "Unshared from {email} by {actor}" : "Jako käyttäjälle {email} lopetettiin käyttäjän {actor} toimesta", + "Password for mail share sent to {email}" : "Salasana sähköpostijakoon lähetettiin osoitteeseen {email}", + "Password for mail share sent to you" : "Salasana sähköpostijakoon lähetettiin sinulle", + "You shared {file} with {email} by mail" : "Jaoit tiedoston {file} sähköpostitse osoitteeseen {email}", + "{actor} shared {file} with {email} by mail" : "{actor} jakoi tiedoston {file} sähköpostitse osoitteeseen {email}", + "You unshared {file} from {email} by mail" : "Lopetit kohteen {file} jaon käyttäjältä {email} sähköpostitse", + "Password to access {file} was sent to {email}" : "Salasana kohteen {file} käyttämiseksi lähetettiin osoitteeseen {email}", + "Password to access {file} was sent to you" : "Salasana tiedoston {file} käyttämiseksi lähetettiin sinulle", + "Share by mail" : "Jaa sähköpostitse", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automaattisesti muodostettua salasanaa ei voi lähettää sinulle. Aseta kelvollinen sähköpostiosoite henkilökohtaisiin asetuksiisi ja yritä uudelleen.", + "Failed to send share by email. Got an invalid email address" : "Jaon lähettäminen sähköpostitse epäonnistui. Virheellinen sähköpostiosoite", + "Failed to send share by email" : "Jaon lähettäminen sähköpostitse epäonnistui", + "Note:" : "Huomioi:", + "%1$s via %2$s" : "%1$s palvelun %2$s kautta", + "It is protected with the following password:" : "Se on suojattu seuraavalla salasanalla:", + "This password will expire at %s" : "Tämä salasana vanhenee %s", + "This is the password:" : "Tämä on salasana:", + "You can choose a different password at any time in the share dialog." : "Voit valita muun salasanan koska tahansa jakovalikossa.", + "Could not find share" : "Jakoa ei löytynyt", + "Send password by mail" : "Lähetä salasana sähköpostitse", + "Reply to initiator" : "Vastaa aloitteentekijälle" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/fi.json b/apps/sharebymail/l10n/fi.json new file mode 100644 index 00000000000..66d78b5f170 --- /dev/null +++ b/apps/sharebymail/l10n/fi.json @@ -0,0 +1,27 @@ +{ "translations": { + "Shared with {email}" : "Jaettu käyttäjälle {email}", + "Shared with {email} by {actor}" : "Jaettu käyttäjälle {email} käyttäjän {actor} toimesta", + "Unshared from {email}" : "Jako käyttäjälle {email} lopetettu", + "Unshared from {email} by {actor}" : "Jako käyttäjälle {email} lopetettiin käyttäjän {actor} toimesta", + "Password for mail share sent to {email}" : "Salasana sähköpostijakoon lähetettiin osoitteeseen {email}", + "Password for mail share sent to you" : "Salasana sähköpostijakoon lähetettiin sinulle", + "You shared {file} with {email} by mail" : "Jaoit tiedoston {file} sähköpostitse osoitteeseen {email}", + "{actor} shared {file} with {email} by mail" : "{actor} jakoi tiedoston {file} sähköpostitse osoitteeseen {email}", + "You unshared {file} from {email} by mail" : "Lopetit kohteen {file} jaon käyttäjältä {email} sähköpostitse", + "Password to access {file} was sent to {email}" : "Salasana kohteen {file} käyttämiseksi lähetettiin osoitteeseen {email}", + "Password to access {file} was sent to you" : "Salasana tiedoston {file} käyttämiseksi lähetettiin sinulle", + "Share by mail" : "Jaa sähköpostitse", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Automaattisesti muodostettua salasanaa ei voi lähettää sinulle. Aseta kelvollinen sähköpostiosoite henkilökohtaisiin asetuksiisi ja yritä uudelleen.", + "Failed to send share by email. Got an invalid email address" : "Jaon lähettäminen sähköpostitse epäonnistui. Virheellinen sähköpostiosoite", + "Failed to send share by email" : "Jaon lähettäminen sähköpostitse epäonnistui", + "Note:" : "Huomioi:", + "%1$s via %2$s" : "%1$s palvelun %2$s kautta", + "It is protected with the following password:" : "Se on suojattu seuraavalla salasanalla:", + "This password will expire at %s" : "Tämä salasana vanhenee %s", + "This is the password:" : "Tämä on salasana:", + "You can choose a different password at any time in the share dialog." : "Voit valita muun salasanan koska tahansa jakovalikossa.", + "Could not find share" : "Jakoa ei löytynyt", + "Send password by mail" : "Lähetä salasana sähköpostitse", + "Reply to initiator" : "Vastaa aloitteentekijälle" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/fr.js b/apps/sharebymail/l10n/fr.js new file mode 100644 index 00000000000..fe6c091a941 --- /dev/null +++ b/apps/sharebymail/l10n/fr.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Partagé avec {email}", + "Shared with {email} by {actor}" : "Partagé avec {email} par {actor}", + "Unshared from {email}" : "Partage supprimé de {email}", + "Unshared from {email} by {actor}" : "Partage supprimé de {email} par {actor}", + "Password for mail share sent to {email}" : "Le mot de passe pour le partage par e-mail a été envoyé à {email}", + "Password for mail share sent to you" : "Le mot de passe pour le partage par e-mail vous a été envoyé", + "You shared {file} with {email} by mail" : "Vous avez partagé {file} avec {email} par e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} a partagé {file} avec {email} par e-mail", + "You unshared {file} from {email} by mail" : "Vous avez supprimé le partage de {file} depuis {email} par e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} a supprimé le partage de {file} depuis {email} par e-mail", + "Password to access {file} was sent to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", + "Password to access {file} was sent to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", + "Share by mail" : "Partage par e-mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Impossible de partager %1$s car il est déjà partagé avec le compte %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Merci de définir une adresse e-mail valide dans vos paramètres personnels et essayez à nouveau.", + "Failed to send share by email. Got an invalid email address" : "Échec lors de l'envoi du partage par e-mail. L'adresse e-mail est invalide", + "Failed to send share by email" : "Échec lors de l'envoi du partage par e-mail", + "%1$s shared %2$s with you" : "%1$s a partagé %2$s avec vous", + "Note:" : "Note :", + "This share is valid until %s at midnight" : "Ce partage est valable jusqu'à minuit le %s", + "Expiration:" : "Expiration:", + "Open %s" : "Ouvrir %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s a partagé %2$s avec vous. Vous devriez déjà avoir reçu un e-mail séparé avec un lien pour y accéder.", + "Password to access %1$s shared to you by %2$s" : "Mot de passe pour accéder à %1$s partagé avec vous par %2$s", + "Password to access %s" : "Mot de passe pour accéder à %s", + "It is protected with the following password:" : "Il est protégé avec le mot de passe suivant :", + "This password will expire at %s" : "Le mot de passe expirera le %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s a partagé %2$s avec vous et souhaite ajouter :", + "%1$s shared %2$s with you and wants to add" : "%1$s a partagé %2$s avec vous et souhaite ajouter", + "%s added a note to a file shared with you" : "%s a ajouté une note à un fichier partagé avec vous", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Vous venez de partager %1$s avec %2$s. Le partage a déjà été envoyé au destinataire. En raison des politiques de sécurité définies par l'administrateur de %3$s, chaque partage doit être protégé par un mot de passe et il n'est pas autorisé d'envoyer le mot de passe directement au destinataire. Vous devez donc transmettre le mot de passe manuellement au destinataire.", + "Password to access %1$s shared by you with %2$s" : "Mot de passe pour accéder à %1$s partagé par vous avec %2$s", + "This is the password:" : "Voici le mot de passe :", + "You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.", + "Could not find share" : "Impossible de trouver le partage", + "Share provider which allows you to share files by mail" : "Fournisseur de partage qui vous permet de partager des fichiers par courrier électronique.", + "Unable to update share by mail config" : "Impossible de mettre à jour la configuration du partage par e-mail", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Autoriser les personnes à partager un lien personnalisé vers un fichier ou un dossier en renseignant une adresse e-mail.", + "Send password by mail" : "Envoyer le mot de passe par e-mail", + "Reply to initiator" : "Répondre à l'initiateur" +}, +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/fr.json b/apps/sharebymail/l10n/fr.json new file mode 100644 index 00000000000..b6a22382300 --- /dev/null +++ b/apps/sharebymail/l10n/fr.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Partagé avec {email}", + "Shared with {email} by {actor}" : "Partagé avec {email} par {actor}", + "Unshared from {email}" : "Partage supprimé de {email}", + "Unshared from {email} by {actor}" : "Partage supprimé de {email} par {actor}", + "Password for mail share sent to {email}" : "Le mot de passe pour le partage par e-mail a été envoyé à {email}", + "Password for mail share sent to you" : "Le mot de passe pour le partage par e-mail vous a été envoyé", + "You shared {file} with {email} by mail" : "Vous avez partagé {file} avec {email} par e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} a partagé {file} avec {email} par e-mail", + "You unshared {file} from {email} by mail" : "Vous avez supprimé le partage de {file} depuis {email} par e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} a supprimé le partage de {file} depuis {email} par e-mail", + "Password to access {file} was sent to {email}" : "Le mot de passe pour accèder à {file} a été envoyé à {email}", + "Password to access {file} was sent to you" : "Le mot de passe pour accèder à {file} vous a été envoyé", + "Share by mail" : "Partage par e-mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Impossible de partager %1$s car il est déjà partagé avec le compte %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nous ne pouvons pas vous envoyer le mot de passe généré automatiquement. Merci de définir une adresse e-mail valide dans vos paramètres personnels et essayez à nouveau.", + "Failed to send share by email. Got an invalid email address" : "Échec lors de l'envoi du partage par e-mail. L'adresse e-mail est invalide", + "Failed to send share by email" : "Échec lors de l'envoi du partage par e-mail", + "%1$s shared %2$s with you" : "%1$s a partagé %2$s avec vous", + "Note:" : "Note :", + "This share is valid until %s at midnight" : "Ce partage est valable jusqu'à minuit le %s", + "Expiration:" : "Expiration:", + "Open %s" : "Ouvrir %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s a partagé %2$s avec vous. Vous devriez déjà avoir reçu un e-mail séparé avec un lien pour y accéder.", + "Password to access %1$s shared to you by %2$s" : "Mot de passe pour accéder à %1$s partagé avec vous par %2$s", + "Password to access %s" : "Mot de passe pour accéder à %s", + "It is protected with the following password:" : "Il est protégé avec le mot de passe suivant :", + "This password will expire at %s" : "Le mot de passe expirera le %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s a partagé %2$s avec vous et souhaite ajouter :", + "%1$s shared %2$s with you and wants to add" : "%1$s a partagé %2$s avec vous et souhaite ajouter", + "%s added a note to a file shared with you" : "%s a ajouté une note à un fichier partagé avec vous", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Vous venez de partager %1$s avec %2$s. Le partage a déjà été envoyé au destinataire. En raison des politiques de sécurité définies par l'administrateur de %3$s, chaque partage doit être protégé par un mot de passe et il n'est pas autorisé d'envoyer le mot de passe directement au destinataire. Vous devez donc transmettre le mot de passe manuellement au destinataire.", + "Password to access %1$s shared by you with %2$s" : "Mot de passe pour accéder à %1$s partagé par vous avec %2$s", + "This is the password:" : "Voici le mot de passe :", + "You can choose a different password at any time in the share dialog." : "Vous pouvez choisir un mot de passe différent à n'importe quel moment dans la boîte de dialogue de partage.", + "Could not find share" : "Impossible de trouver le partage", + "Share provider which allows you to share files by mail" : "Fournisseur de partage qui vous permet de partager des fichiers par courrier électronique.", + "Unable to update share by mail config" : "Impossible de mettre à jour la configuration du partage par e-mail", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Autoriser les personnes à partager un lien personnalisé vers un fichier ou un dossier en renseignant une adresse e-mail.", + "Send password by mail" : "Envoyer le mot de passe par e-mail", + "Reply to initiator" : "Répondre à l'initiateur" +},"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/sharebymail/l10n/ga.js b/apps/sharebymail/l10n/ga.js new file mode 100644 index 00000000000..7aef3efe062 --- /dev/null +++ b/apps/sharebymail/l10n/ga.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Roinnte le {email}", + "Shared with {email} by {actor}" : "Roinnte le {email} ag {actor}", + "Unshared from {email}" : "Díroinnte ó {email}", + "Unshared from {email} by {actor}" : "Dí-roinnte ó {email} ag {actor}", + "Password for mail share sent to {email}" : "Seoladh pasfhocal le haghaidh roinnt ríomhphoist chuig {email}", + "Password for mail share sent to you" : "Seoladh pasfhocal le haghaidh roinnt ríomhphoist chugat", + "You shared {file} with {email} by mail" : "Roinn tú {file} le {email} tríd an ríomhphost", + "{actor} shared {file} with {email} by mail" : "Roinn {actor} {file} le {email} tríd an ríomhphost", + "You unshared {file} from {email} by mail" : "Dhíroinn tú {file} ó {email} tríd an ríomhphost", + "{actor} unshared {file} from {email} by mail" : "Dhí-roinneadh {actor} {file} ó {email} tríd an ríomhphost", + "Password to access {file} was sent to {email}" : "Seoladh pasfhocal chun {file} a rochtain chuig {email}", + "Password to access {file} was sent to you" : "Seoladh pasfhocal chun {file} a rochtain chugat", + "Share by mail" : "Roinn tríd an bpost", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Theip ar chomhroinnt %1$s, toisc go bhfuil an mhír seo roinnte cheana leis an gcuntas %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ní féidir linn an pasfhocal uathghinte a sheoladh chugat. Shocraigh seoladh ríomhphoist bailí i do shocruithe pearsanta agus bain triail eile as le do thoil.", + "Failed to send share by email. Got an invalid email address" : "Theip ar roinnt a sheoladh trí ríomhphost. Fuair tú seoladh ríomhphoist neamhbhailí", + "Failed to send share by email" : "Theip ar roinnt a sheoladh trí ríomhphost", + "%1$s shared %2$s with you" : "%1$s roinnte %2$s leat", + "Note:" : "Nóta:", + "This share is valid until %s at midnight" : "Tá an sciar seo bailí go dtí%sag meán oíche", + "Expiration:" : "Dul in éag:", + "Open %s" : "Oscailte %s", + "%1$s via %2$s" : "%1$s trí %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$sroinnte%2$s leat. Ba chóir go mbeadh post ar leith faighte agat cheana féin le nasc chun rochtain a fháil air.", + "Password to access %1$s shared to you by %2$s" : "Pasfhocal chun rochtain a fháil ar%1$sroinnte leat%2$s", + "Password to access %s" : "Pasfhocal chun rochtain a fháil ar%s", + "It is protected with the following password:" : "Tá sé cosanta leis an bhfocal faire seo a leanas:", + "This password will expire at %s" : "Rachaidh an pasfhocal seo in éag ag%s", + "%1$s shared %2$s with you and wants to add:" : "%1$sroinnte%2$sleat agus ba mhaith leat a chur leis:", + "%1$s shared %2$s with you and wants to add" : "%1$s roinnte%2$sleat agus ba mhaith leat cur leis", + "%s added a note to a file shared with you" : " chuir %s nóta le comhad a roinntear leat", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Roinn tú%1$sle%2$s. Cuireadh an sciar chuig an bhfaighteoir cheana féin. Mar gheall ar na polasaithe slándála a shainmhíníonn an riarthóir%3$sní mór gach scair a chosaint le pasfhocal agus ní cheadaítear dó an focal faire a sheoladh go díreach chuig an bhfaighteoir. Dá bhrí sin ní mór duit an focal faire a chur ar aghaidh de láimh chuig an bhfaighteoir.", + "Password to access %1$s shared by you with %2$s" : "Pasfhocal chun rochtain a fháil ar%1$s roinnte agat le %2$s", + "This is the password:" : "Seo é an pasfhocal:", + "You can choose a different password at any time in the share dialog." : "Is féidir leat pasfhocal difriúil a roghnú ag am ar bith sa dialóg scaireanna.", + "Could not find share" : "Níorbh fhéidir sciar a aimsiú", + "Share provider which allows you to share files by mail" : "Comhroinn soláthraí a ligeann duit comhaid a roinnt tríd an bpost", + "Unable to update share by mail config" : "Níorbh fhéidir an chumraíocht sciar tríd an ríomhphost a nuashonrú", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ligeann sé do dhaoine nasc pearsantaithe chuig comhad nó fillteán a roinnt trí sheoladh ríomhphoist a chur isteach.", + "Send password by mail" : "Seol pasfhocal tríd an bpost", + "Reply to initiator" : "Freagra don thionscnóir" +}, +"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/apps/sharebymail/l10n/ga.json b/apps/sharebymail/l10n/ga.json new file mode 100644 index 00000000000..b1e60f26fcf --- /dev/null +++ b/apps/sharebymail/l10n/ga.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Roinnte le {email}", + "Shared with {email} by {actor}" : "Roinnte le {email} ag {actor}", + "Unshared from {email}" : "Díroinnte ó {email}", + "Unshared from {email} by {actor}" : "Dí-roinnte ó {email} ag {actor}", + "Password for mail share sent to {email}" : "Seoladh pasfhocal le haghaidh roinnt ríomhphoist chuig {email}", + "Password for mail share sent to you" : "Seoladh pasfhocal le haghaidh roinnt ríomhphoist chugat", + "You shared {file} with {email} by mail" : "Roinn tú {file} le {email} tríd an ríomhphost", + "{actor} shared {file} with {email} by mail" : "Roinn {actor} {file} le {email} tríd an ríomhphost", + "You unshared {file} from {email} by mail" : "Dhíroinn tú {file} ó {email} tríd an ríomhphost", + "{actor} unshared {file} from {email} by mail" : "Dhí-roinneadh {actor} {file} ó {email} tríd an ríomhphost", + "Password to access {file} was sent to {email}" : "Seoladh pasfhocal chun {file} a rochtain chuig {email}", + "Password to access {file} was sent to you" : "Seoladh pasfhocal chun {file} a rochtain chugat", + "Share by mail" : "Roinn tríd an bpost", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Theip ar chomhroinnt %1$s, toisc go bhfuil an mhír seo roinnte cheana leis an gcuntas %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ní féidir linn an pasfhocal uathghinte a sheoladh chugat. Shocraigh seoladh ríomhphoist bailí i do shocruithe pearsanta agus bain triail eile as le do thoil.", + "Failed to send share by email. Got an invalid email address" : "Theip ar roinnt a sheoladh trí ríomhphost. Fuair tú seoladh ríomhphoist neamhbhailí", + "Failed to send share by email" : "Theip ar roinnt a sheoladh trí ríomhphost", + "%1$s shared %2$s with you" : "%1$s roinnte %2$s leat", + "Note:" : "Nóta:", + "This share is valid until %s at midnight" : "Tá an sciar seo bailí go dtí%sag meán oíche", + "Expiration:" : "Dul in éag:", + "Open %s" : "Oscailte %s", + "%1$s via %2$s" : "%1$s trí %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$sroinnte%2$s leat. Ba chóir go mbeadh post ar leith faighte agat cheana féin le nasc chun rochtain a fháil air.", + "Password to access %1$s shared to you by %2$s" : "Pasfhocal chun rochtain a fháil ar%1$sroinnte leat%2$s", + "Password to access %s" : "Pasfhocal chun rochtain a fháil ar%s", + "It is protected with the following password:" : "Tá sé cosanta leis an bhfocal faire seo a leanas:", + "This password will expire at %s" : "Rachaidh an pasfhocal seo in éag ag%s", + "%1$s shared %2$s with you and wants to add:" : "%1$sroinnte%2$sleat agus ba mhaith leat a chur leis:", + "%1$s shared %2$s with you and wants to add" : "%1$s roinnte%2$sleat agus ba mhaith leat cur leis", + "%s added a note to a file shared with you" : " chuir %s nóta le comhad a roinntear leat", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Roinn tú%1$sle%2$s. Cuireadh an sciar chuig an bhfaighteoir cheana féin. Mar gheall ar na polasaithe slándála a shainmhíníonn an riarthóir%3$sní mór gach scair a chosaint le pasfhocal agus ní cheadaítear dó an focal faire a sheoladh go díreach chuig an bhfaighteoir. Dá bhrí sin ní mór duit an focal faire a chur ar aghaidh de láimh chuig an bhfaighteoir.", + "Password to access %1$s shared by you with %2$s" : "Pasfhocal chun rochtain a fháil ar%1$s roinnte agat le %2$s", + "This is the password:" : "Seo é an pasfhocal:", + "You can choose a different password at any time in the share dialog." : "Is féidir leat pasfhocal difriúil a roghnú ag am ar bith sa dialóg scaireanna.", + "Could not find share" : "Níorbh fhéidir sciar a aimsiú", + "Share provider which allows you to share files by mail" : "Comhroinn soláthraí a ligeann duit comhaid a roinnt tríd an bpost", + "Unable to update share by mail config" : "Níorbh fhéidir an chumraíocht sciar tríd an ríomhphost a nuashonrú", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Ligeann sé do dhaoine nasc pearsantaithe chuig comhad nó fillteán a roinnt trí sheoladh ríomhphoist a chur isteach.", + "Send password by mail" : "Seol pasfhocal tríd an bpost", + "Reply to initiator" : "Freagra don thionscnóir" +},"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/sharebymail/l10n/gl.js b/apps/sharebymail/l10n/gl.js new file mode 100644 index 00000000000..bb39a878487 --- /dev/null +++ b/apps/sharebymail/l10n/gl.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Compartición eliminada desde {email}", + "Unshared from {email} by {actor}" : "Compartición eliminada desde {email} por {actor}", + "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}", + "Password for mail share sent to you" : "Envióuselle un contrasinal para compartir por correo", + "You shared {file} with {email} by mail" : "Compartiu {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartiu {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Deixou de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} deixou de compartir {file} desde {email} por correo", + "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}", + "Password to access {file} was sent to you" : "Envióuselle a Vde. un correo para acceder a {file}", + "Share by mail" : "Compartido por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Produciuse un erro ao compartir %1$s porque este elemento xa está compartido coa conta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", + "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar a compartición por correo. O enderezo de correo non é válido", + "Failed to send share by email" : "Produciuse un fallo ao enviar acomparticióno por correo", + "%1$s shared %2$s with you" : "%1$s compartiu %2$s con Vde.", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Esta participación é válida ata o %s a medianoite", + "Expiration:" : "Caducidade:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s mediante %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu %2$s con Vde. Debería ter recibido un correo por separado cunha ligazón para acceder a el.", + "Password to access %1$s shared to you by %2$s" : "O contrasinal para acceder a %1$s foi compartido con Vde. por %2$s", + "Password to access %s" : "Contrasinal para acceder a %s", + "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", + "This password will expire at %s" : "Este contrasinal caducará o %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s compartiu %2$s con Vde. e quere engadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s compartiu %2$s con Vde. e quere engadir", + "%s added a note to a file shared with you" : "%s engadiu unha nota a un ficheiro compartido con Vde.", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Vén de de compartir %1$s con %2$s. A compartición xa foi enviada ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada compartición necesita ser protexida por un contrasinal e non está permitido que Vde. envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", + "Password to access %1$s shared by you with %2$s" : "Contrasinal para acceder a %1$s compartida por Vde. con %2$s", + "This is the password:" : "Este é o contrasinal:", + "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.", + "Could not find share" : "Non foi posíbel atopar a compartición", + "Share provider which allows you to share files by mail" : "Provedor que permite compartirficheiros por correo", + "Unable to update share by mail config" : "Non é posíbel actualizar a configuración para compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite que a xente comparta unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.", + "Send password by mail" : "Enviar contrasinal por correo", + "Reply to initiator" : "Resposta ao iniciador" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/gl.json b/apps/sharebymail/l10n/gl.json new file mode 100644 index 00000000000..ff19b1f1674 --- /dev/null +++ b/apps/sharebymail/l10n/gl.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Compartido con {email}", + "Shared with {email} by {actor}" : "Compartido con {email} por {actor}", + "Unshared from {email}" : "Compartición eliminada desde {email}", + "Unshared from {email} by {actor}" : "Compartición eliminada desde {email} por {actor}", + "Password for mail share sent to {email}" : "Enviouse un contrasinal para compartir por correo a {email}", + "Password for mail share sent to you" : "Envióuselle un contrasinal para compartir por correo", + "You shared {file} with {email} by mail" : "Compartiu {file} con {email} por correo", + "{actor} shared {file} with {email} by mail" : "{actor} compartiu {file} con {email} por correo", + "You unshared {file} from {email} by mail" : "Deixou de compartir {file} desde {email} por correo", + "{actor} unshared {file} from {email} by mail" : "{actor} deixou de compartir {file} desde {email} por correo", + "Password to access {file} was sent to {email}" : "Envióuselle a {email} un contrasinal para acceder a {file}", + "Password to access {file} was sent to you" : "Envióuselle a Vde. un correo para acceder a {file}", + "Share by mail" : "Compartido por correo", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Produciuse un erro ao compartir %1$s porque este elemento xa está compartido coa conta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non é posíbel enviarlle o contrasinal xerado automaticamente. Estabeleza un enderezo de correo correcto nos seus axustes persoais e ténteo de novo.", + "Failed to send share by email. Got an invalid email address" : "Produciuse un erro ao enviar a compartición por correo. O enderezo de correo non é válido", + "Failed to send share by email" : "Produciuse un fallo ao enviar acomparticióno por correo", + "%1$s shared %2$s with you" : "%1$s compartiu %2$s con Vde.", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Esta participación é válida ata o %s a medianoite", + "Expiration:" : "Caducidade:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s mediante %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s compartiu %2$s con Vde. Debería ter recibido un correo por separado cunha ligazón para acceder a el.", + "Password to access %1$s shared to you by %2$s" : "O contrasinal para acceder a %1$s foi compartido con Vde. por %2$s", + "Password to access %s" : "Contrasinal para acceder a %s", + "It is protected with the following password:" : "Está protexido co seguinte contrasinal: ", + "This password will expire at %s" : "Este contrasinal caducará o %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s compartiu %2$s con Vde. e quere engadir:", + "%1$s shared %2$s with you and wants to add" : "%1$s compartiu %2$s con Vde. e quere engadir", + "%s added a note to a file shared with you" : "%s engadiu unha nota a un ficheiro compartido con Vde.", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Vén de de compartir %1$s con %2$s. A compartición xa foi enviada ao destinatario. Por mor das directivas de seguranza definidas polo administrador de %3$s cada compartición necesita ser protexida por un contrasinal e non está permitido que Vde. envíe o contrasinal directamente ao destinatario. Daquela, necesita enviar manualmente o contrasinal ao destinatario.", + "Password to access %1$s shared by you with %2$s" : "Contrasinal para acceder a %1$s compartida por Vde. con %2$s", + "This is the password:" : "Este é o contrasinal:", + "You can choose a different password at any time in the share dialog." : "Pode escoller un contrasinal diferente en calquera momento no diálogo de compartir.", + "Could not find share" : "Non foi posíbel atopar a compartición", + "Share provider which allows you to share files by mail" : "Provedor que permite compartirficheiros por correo", + "Unable to update share by mail config" : "Non é posíbel actualizar a configuración para compartir por correo", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite que a xente comparta unha ligazón personalizada ou un ficheiro ou cartafol enviándoo a un enderezo de correo.", + "Send password by mail" : "Enviar contrasinal por correo", + "Reply to initiator" : "Resposta ao iniciador" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/he.js b/apps/sharebymail/l10n/he.js new file mode 100644 index 00000000000..c2596a9961d --- /dev/null +++ b/apps/sharebymail/l10n/he.js @@ -0,0 +1,27 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "משותף עם {email}", + "Shared with {email} by {actor}" : "שותף עם {email} על ידי {actor}", + "Unshared from {email}" : "השיתוף עם {email} בוטל", + "Unshared from {email} by {actor}" : "השיתוף עם {email} בוטל על ידי {actor}", + "Password for mail share sent to {email}" : "ססמת השיתוף בדוא״ל נשלחה אל {email}", + "Password for mail share sent to you" : "ססמת השיתוף בדוא״ל נשלחה אליך", + "You shared {file} with {email} by mail" : "שיתפת את {file} עם {email} בדוא״ל", + "{actor} shared {file} with {email} by mail" : "{file} שותף עם {email} בדוא״ל על ידי {actor}", + "You unshared {file} from {email} by mail" : "ביטלת את השיתוף של {file} מפני {email} בדוא״ל", + "{actor} unshared {file} from {email} by mail" : "{actor} ביטל שיתוף {file} מ- {email} בדואר", + "Password to access {file} was sent to {email}" : "ססמת הגישה אל {file} נשלחה אל {email}", + "Password to access {file} was sent to you" : "ססמת הגישה אל {file} נשלחה אליך", + "Share by mail" : "שיתוף בדוא״ל", + "Failed to send share by email" : "שליחת השיתוף בדוא״ל נכשלה", + "Note:" : "הערה:", + "%1$s via %2$s" : "%1$s דרך %2$s", + "It is protected with the following password:" : "הוא מוגן בססמה הבאה:", + "This is the password:" : "זו הססמה:", + "You can choose a different password at any time in the share dialog." : "ניתן לבחור בססמה אחרת בכל עת בתיבת דו־שיח השיתוף.", + "Could not find share" : "לא ניתן למצוא את השיתוף", + "Share provider which allows you to share files by mail" : "ספק השיתוף שמאפשר לך לשתף קבצים בדוא״ל", + "Send password by mail" : "שליחת ססמה בדוא״ל" +}, +"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); diff --git a/apps/sharebymail/l10n/he.json b/apps/sharebymail/l10n/he.json new file mode 100644 index 00000000000..dc46cfaa6e1 --- /dev/null +++ b/apps/sharebymail/l10n/he.json @@ -0,0 +1,25 @@ +{ "translations": { + "Shared with {email}" : "משותף עם {email}", + "Shared with {email} by {actor}" : "שותף עם {email} על ידי {actor}", + "Unshared from {email}" : "השיתוף עם {email} בוטל", + "Unshared from {email} by {actor}" : "השיתוף עם {email} בוטל על ידי {actor}", + "Password for mail share sent to {email}" : "ססמת השיתוף בדוא״ל נשלחה אל {email}", + "Password for mail share sent to you" : "ססמת השיתוף בדוא״ל נשלחה אליך", + "You shared {file} with {email} by mail" : "שיתפת את {file} עם {email} בדוא״ל", + "{actor} shared {file} with {email} by mail" : "{file} שותף עם {email} בדוא״ל על ידי {actor}", + "You unshared {file} from {email} by mail" : "ביטלת את השיתוף של {file} מפני {email} בדוא״ל", + "{actor} unshared {file} from {email} by mail" : "{actor} ביטל שיתוף {file} מ- {email} בדואר", + "Password to access {file} was sent to {email}" : "ססמת הגישה אל {file} נשלחה אל {email}", + "Password to access {file} was sent to you" : "ססמת הגישה אל {file} נשלחה אליך", + "Share by mail" : "שיתוף בדוא״ל", + "Failed to send share by email" : "שליחת השיתוף בדוא״ל נכשלה", + "Note:" : "הערה:", + "%1$s via %2$s" : "%1$s דרך %2$s", + "It is protected with the following password:" : "הוא מוגן בססמה הבאה:", + "This is the password:" : "זו הססמה:", + "You can choose a different password at any time in the share dialog." : "ניתן לבחור בססמה אחרת בכל עת בתיבת דו־שיח השיתוף.", + "Could not find share" : "לא ניתן למצוא את השיתוף", + "Share provider which allows you to share files by mail" : "ספק השיתוף שמאפשר לך לשתף קבצים בדוא״ל", + "Send password by mail" : "שליחת ססמה בדוא״ל" +},"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/sharebymail/l10n/hr.js b/apps/sharebymail/l10n/hr.js new file mode 100644 index 00000000000..f292d3e683b --- /dev/null +++ b/apps/sharebymail/l10n/hr.js @@ -0,0 +1,28 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Dijeljeno s {email}", + "Shared with {email} by {actor}" : "{actor} dijeli s {email}", + "Unshared from {email}" : "Prekid dijeljenja s {email}", + "Unshared from {email} by {actor}" : "{actor} više ne dijeli s {email}", + "Password for mail share sent to {email}" : "Zaporka za dijeljenje pošte poslana je {email}", + "Password for mail share sent to you" : "Zaporka za dijeljenje pošte poslana je vama", + "You shared {file} with {email} by mail" : "Podijelili ste {file} s {email} putem pošte", + "{actor} shared {file} with {email} by mail" : "{actor} dijeli {file} s {email} putem pošte", + "You unshared {file} from {email} by mail" : "Više ne dijelite {file} s {email} putem pošte", + "{actor} unshared {file} from {email} by mail" : "{actor} više ne dijeli {file} s {email} putem pošte", + "Password to access {file} was sent to {email}" : "Zaporka za pristupanje {file} poslana je {email}", + "Password to access {file} was sent to you" : "Poslana vam je zaporka za pristupanje {file}", + "Share by mail" : "Dijelite poštom", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ne možemo vam poslati automatski generiranu zaporku. U osobnim postavkama postavite valjanu adresu e-pošte i pokušajte ponovo.", + "Failed to send share by email" : "Slanje dijeljenja putem e-pošte nije uspjelo", + "%1$s via %2$s" : "%1$s putem %2$s", + "It is protected with the following password:" : "Zaštićeno je sljedećom zaporkom:", + "This is the password:" : "Ovo je zaporka:", + "You can choose a different password at any time in the share dialog." : "U dijaloškom okviru za dijeljenje možete u bilo kojem trenutku odabrati drugu zaporku.", + "Could not find share" : "Nije moguće pronaći dijeljenje", + "Share provider which allows you to share files by mail" : "Davatelj usluge dijeljenja koji vam omogućuje dijeljenje datoteka poštom", + "Send password by mail" : "Pošalji zaporku poštom", + "Reply to initiator" : "Odgovori pokretaču" +}, +"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/sharebymail/l10n/hr.json b/apps/sharebymail/l10n/hr.json new file mode 100644 index 00000000000..2e4ce30f408 --- /dev/null +++ b/apps/sharebymail/l10n/hr.json @@ -0,0 +1,26 @@ +{ "translations": { + "Shared with {email}" : "Dijeljeno s {email}", + "Shared with {email} by {actor}" : "{actor} dijeli s {email}", + "Unshared from {email}" : "Prekid dijeljenja s {email}", + "Unshared from {email} by {actor}" : "{actor} više ne dijeli s {email}", + "Password for mail share sent to {email}" : "Zaporka za dijeljenje pošte poslana je {email}", + "Password for mail share sent to you" : "Zaporka za dijeljenje pošte poslana je vama", + "You shared {file} with {email} by mail" : "Podijelili ste {file} s {email} putem pošte", + "{actor} shared {file} with {email} by mail" : "{actor} dijeli {file} s {email} putem pošte", + "You unshared {file} from {email} by mail" : "Više ne dijelite {file} s {email} putem pošte", + "{actor} unshared {file} from {email} by mail" : "{actor} više ne dijeli {file} s {email} putem pošte", + "Password to access {file} was sent to {email}" : "Zaporka za pristupanje {file} poslana je {email}", + "Password to access {file} was sent to you" : "Poslana vam je zaporka za pristupanje {file}", + "Share by mail" : "Dijelite poštom", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ne možemo vam poslati automatski generiranu zaporku. U osobnim postavkama postavite valjanu adresu e-pošte i pokušajte ponovo.", + "Failed to send share by email" : "Slanje dijeljenja putem e-pošte nije uspjelo", + "%1$s via %2$s" : "%1$s putem %2$s", + "It is protected with the following password:" : "Zaštićeno je sljedećom zaporkom:", + "This is the password:" : "Ovo je zaporka:", + "You can choose a different password at any time in the share dialog." : "U dijaloškom okviru za dijeljenje možete u bilo kojem trenutku odabrati drugu zaporku.", + "Could not find share" : "Nije moguće pronaći dijeljenje", + "Share provider which allows you to share files by mail" : "Davatelj usluge dijeljenja koji vam omogućuje dijeljenje datoteka poštom", + "Send password by mail" : "Pošalji zaporku poštom", + "Reply to initiator" : "Odgovori pokretaču" +},"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/sharebymail/l10n/hu.js b/apps/sharebymail/l10n/hu.js new file mode 100644 index 00000000000..6d530b01081 --- /dev/null +++ b/apps/sharebymail/l10n/hu.js @@ -0,0 +1,33 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Megosztva a következővel: {email}", + "Shared with {email} by {actor}" : "{actor} megosztotta vele: {email}", + "Unshared from {email}" : "Megosztás visszavonva a következőtől: {email}", + "Unshared from {email} by {actor}" : "{actor} visszavonta tőle a megosztást: {email}", + "Password for mail share sent to {email}" : "Az e-mailes megosztáshoz szükséges jelszó elküldve a következőnek: {email}", + "Password for mail share sent to you" : "Az e-mailes megosztáshoz szükséges jelszó elküldve Önnek", + "You shared {file} with {email} by mail" : "{file} megosztva e-mailben a következővel: {email}", + "{actor} shared {file} with {email} by mail" : "{actor} e-mailben megosztotta a(z) {file} elemet a következővel: {email}", + "You unshared {file} from {email} by mail" : "E-mailben visszavonta a(z) {file} megosztását a következőtől: {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} e-mailben visszavonta a(z) {file} megosztását a következőtől: {email}", + "Password to access {file} was sent to {email}" : "A(z) {file} eléréséhez szükséges jelszó elküldve a következőhöz: {email}", + "Password to access {file} was sent to you" : "A(z) {file} eléréséhez szükséges jelszó elküldve Önnek", + "Share by mail" : "Megosztás e-mailben", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "A(z) %1$s megosztása sikertelen, mert már meg van osztva a(z) %2$s fiókkal", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nem lehet az automatikusan előállított jelszót elküldeni. Állítson be érvényes e-mail-címet a személyes beállításokban, és próbálja újra.", + "Failed to send share by email. Got an invalid email address" : "Az e-mailben történő megosztás sikertelen. Érvénytelen e-mail-cím.", + "Failed to send share by email" : "Az e-mailben történő megosztás sikertelen", + "Note:" : "Megjegyzés:", + "%1$s via %2$s" : "%1$s ezen keresztül: %2$s", + "It is protected with the following password:" : "A következő jelszó védi:", + "This password will expire at %s" : "Ez a jelszó ekkor jár le: %s.", + "This is the password:" : "Ez a jelszó:", + "You can choose a different password at any time in the share dialog." : "Bármikor másik jelszót választhat a megosztási párbeszédablakon.", + "Could not find share" : "Nem található a megosztás", + "Share provider which allows you to share files by mail" : "Megosztási szolgáltató, amely lehetővé teszi fájlok e-mailben történő megosztását", + "Unable to update share by mail config" : "Az e-mailes megosztás beállításai nem frissíthetők", + "Send password by mail" : "Jelszó kiküldése e-mailben", + "Reply to initiator" : "Válasz a kezdeményezőnek" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/hu.json b/apps/sharebymail/l10n/hu.json new file mode 100644 index 00000000000..6def5b9b95a --- /dev/null +++ b/apps/sharebymail/l10n/hu.json @@ -0,0 +1,31 @@ +{ "translations": { + "Shared with {email}" : "Megosztva a következővel: {email}", + "Shared with {email} by {actor}" : "{actor} megosztotta vele: {email}", + "Unshared from {email}" : "Megosztás visszavonva a következőtől: {email}", + "Unshared from {email} by {actor}" : "{actor} visszavonta tőle a megosztást: {email}", + "Password for mail share sent to {email}" : "Az e-mailes megosztáshoz szükséges jelszó elküldve a következőnek: {email}", + "Password for mail share sent to you" : "Az e-mailes megosztáshoz szükséges jelszó elküldve Önnek", + "You shared {file} with {email} by mail" : "{file} megosztva e-mailben a következővel: {email}", + "{actor} shared {file} with {email} by mail" : "{actor} e-mailben megosztotta a(z) {file} elemet a következővel: {email}", + "You unshared {file} from {email} by mail" : "E-mailben visszavonta a(z) {file} megosztását a következőtől: {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} e-mailben visszavonta a(z) {file} megosztását a következőtől: {email}", + "Password to access {file} was sent to {email}" : "A(z) {file} eléréséhez szükséges jelszó elküldve a következőhöz: {email}", + "Password to access {file} was sent to you" : "A(z) {file} eléréséhez szükséges jelszó elküldve Önnek", + "Share by mail" : "Megosztás e-mailben", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "A(z) %1$s megosztása sikertelen, mert már meg van osztva a(z) %2$s fiókkal", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nem lehet az automatikusan előállított jelszót elküldeni. Állítson be érvényes e-mail-címet a személyes beállításokban, és próbálja újra.", + "Failed to send share by email. Got an invalid email address" : "Az e-mailben történő megosztás sikertelen. Érvénytelen e-mail-cím.", + "Failed to send share by email" : "Az e-mailben történő megosztás sikertelen", + "Note:" : "Megjegyzés:", + "%1$s via %2$s" : "%1$s ezen keresztül: %2$s", + "It is protected with the following password:" : "A következő jelszó védi:", + "This password will expire at %s" : "Ez a jelszó ekkor jár le: %s.", + "This is the password:" : "Ez a jelszó:", + "You can choose a different password at any time in the share dialog." : "Bármikor másik jelszót választhat a megosztási párbeszédablakon.", + "Could not find share" : "Nem található a megosztás", + "Share provider which allows you to share files by mail" : "Megosztási szolgáltató, amely lehetővé teszi fájlok e-mailben történő megosztását", + "Unable to update share by mail config" : "Az e-mailes megosztás beállításai nem frissíthetők", + "Send password by mail" : "Jelszó kiküldése e-mailben", + "Reply to initiator" : "Válasz a kezdeményezőnek" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/is.js b/apps/sharebymail/l10n/is.js new file mode 100644 index 00000000000..12b4b2ac202 --- /dev/null +++ b/apps/sharebymail/l10n/is.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Deilt með {email}", + "Shared with {email} by {actor}" : "Deilt með {email} af {actor}", + "Unshared from {email}" : "Tekið úr deilingu frá {email}", + "Unshared from {email} by {actor}" : "Tekið úr deilingu frá {email} af {actor}", + "Password for mail share sent to {email}" : "Lykilorð fyrir póstsameign var sent til {email}", + "Password for mail share sent to you" : "Lykilorð fyrir póstsameign var sent til þín", + "You shared {file} with {email} by mail" : "Þú deildir {file} með {email} með tölvupósti", + "{actor} shared {file} with {email} by mail" : "{actor} deildi {file} með {email} með tölvupósti", + "You unshared {file} from {email} by mail" : "Þú tókst {file} úr deilingu frá {email} með tölvupósti", + "{actor} unshared {file} from {email} by mail" : "{actor} tók {file} úr deilingu frá {email} með tölvupósti", + "Password to access {file} was sent to {email}" : "Lykilorð fyrir aðgang að {file} var sent til {email}", + "Password to access {file} was sent to you" : "Lykilorð fyrir aðgang að {file} var sent til þín", + "Share by mail" : "Deila með tölvupósti", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deiling %1$s mistókst, því þessu atriði er þegar deilt með aðgangnum %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ekki er hægt að senda þér sjálfvirkt framleidda lykilorðið. Settu inn gilt tölvupóstfang í einkastillingunum þínum og prófaðu aftur.", + "Failed to send share by email. Got an invalid email address" : "Mistókst að deila með tölvupósti. Er með rangt tölvupóstfang", + "Failed to send share by email" : "Gat ekki sent sameign með tölvupósti", + "%1$s shared %2$s with you" : "%1$s deildi %2$s með þér", + "Note:" : "Athugaðu:", + "This share is valid until %s at midnight" : "Þessi sameign gildir til %s á miðnætti", + "Expiration:" : "Gildistími:", + "Open %s" : "Opna %s", + "%1$s via %2$s" : "%1$s með %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s deildi %2$s með þér. Þú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.", + "Password to access %1$s shared to you by %2$s" : "Lykilorði fyrir aðgang að %1$s var deilt með þér af %2$s", + "Password to access %s" : "Lykilorð fyrir aðgang að %s", + "It is protected with the following password:" : "Það er varið með eftirfarandi lykilorði:", + "This password will expire at %s" : "Þetta lykilorð rennur út %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s deildi %2$s með þér og vill bæta við:", + "%1$s shared %2$s with you and wants to add" : "%1$s deildi %2$s með þér og vill bæta við", + "%s added a note to a file shared with you" : "%s bætti minnispunkti við skrá sem deilt er með þér", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Þú varst í þessu að deila %1$s með %2$s. Sameignin var þegar send til viðtakandans. Vegna öryggisskilmála sem skilgreindir hafa verið af kerfisstjóra %3$s þarf hver sameign að vera varin með lykilorði og að ekki er leyfilegt að senda það lykilorð beint til viðtakandans. Því er nauðsynlegt að þú homir lykilorðinu beint til sjálfs viðtakandans.", + "Password to access %1$s shared by you with %2$s" : "Lykilorði fyrir aðgang að %1$s var deilt af þér með %2$s", + "This is the password:" : "Þetta er lykilorðið:", + "You can choose a different password at any time in the share dialog." : "Þú getur hvenær sem er valið annað lykilorð með því að fara í deilingargluggann.", + "Could not find share" : "Gat ekki fundið sameign", + "Share provider which allows you to share files by mail" : "Deilingarþjónusta sem gerir þér kleift að deila skrám með tölvupósti", + "Unable to update share by mail config" : "Get ekki uppfært stillingar á deilingu með tölvupósti", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Gerir notendum kleift að deila sérsniðnum tengli á skrá eða möppu með því að setja inn tölvupóstfang.", + "Send password by mail" : "Senda lykilorð með pósti", + "Reply to initiator" : "Svara til upphafsaðila" +}, +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/sharebymail/l10n/is.json b/apps/sharebymail/l10n/is.json new file mode 100644 index 00000000000..7e722bf842c --- /dev/null +++ b/apps/sharebymail/l10n/is.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Deilt með {email}", + "Shared with {email} by {actor}" : "Deilt með {email} af {actor}", + "Unshared from {email}" : "Tekið úr deilingu frá {email}", + "Unshared from {email} by {actor}" : "Tekið úr deilingu frá {email} af {actor}", + "Password for mail share sent to {email}" : "Lykilorð fyrir póstsameign var sent til {email}", + "Password for mail share sent to you" : "Lykilorð fyrir póstsameign var sent til þín", + "You shared {file} with {email} by mail" : "Þú deildir {file} með {email} með tölvupósti", + "{actor} shared {file} with {email} by mail" : "{actor} deildi {file} með {email} með tölvupósti", + "You unshared {file} from {email} by mail" : "Þú tókst {file} úr deilingu frá {email} með tölvupósti", + "{actor} unshared {file} from {email} by mail" : "{actor} tók {file} úr deilingu frá {email} með tölvupósti", + "Password to access {file} was sent to {email}" : "Lykilorð fyrir aðgang að {file} var sent til {email}", + "Password to access {file} was sent to you" : "Lykilorð fyrir aðgang að {file} var sent til þín", + "Share by mail" : "Deila með tölvupósti", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deiling %1$s mistókst, því þessu atriði er þegar deilt með aðgangnum %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ekki er hægt að senda þér sjálfvirkt framleidda lykilorðið. Settu inn gilt tölvupóstfang í einkastillingunum þínum og prófaðu aftur.", + "Failed to send share by email. Got an invalid email address" : "Mistókst að deila með tölvupósti. Er með rangt tölvupóstfang", + "Failed to send share by email" : "Gat ekki sent sameign með tölvupósti", + "%1$s shared %2$s with you" : "%1$s deildi %2$s með þér", + "Note:" : "Athugaðu:", + "This share is valid until %s at midnight" : "Þessi sameign gildir til %s á miðnætti", + "Expiration:" : "Gildistími:", + "Open %s" : "Opna %s", + "%1$s via %2$s" : "%1$s með %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s deildi %2$s með þér. Þú ættir að hafa fengið sérstakan tölvupóst með tengli sem vísar á gögnin.", + "Password to access %1$s shared to you by %2$s" : "Lykilorði fyrir aðgang að %1$s var deilt með þér af %2$s", + "Password to access %s" : "Lykilorð fyrir aðgang að %s", + "It is protected with the following password:" : "Það er varið með eftirfarandi lykilorði:", + "This password will expire at %s" : "Þetta lykilorð rennur út %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s deildi %2$s með þér og vill bæta við:", + "%1$s shared %2$s with you and wants to add" : "%1$s deildi %2$s með þér og vill bæta við", + "%s added a note to a file shared with you" : "%s bætti minnispunkti við skrá sem deilt er með þér", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Þú varst í þessu að deila %1$s með %2$s. Sameignin var þegar send til viðtakandans. Vegna öryggisskilmála sem skilgreindir hafa verið af kerfisstjóra %3$s þarf hver sameign að vera varin með lykilorði og að ekki er leyfilegt að senda það lykilorð beint til viðtakandans. Því er nauðsynlegt að þú homir lykilorðinu beint til sjálfs viðtakandans.", + "Password to access %1$s shared by you with %2$s" : "Lykilorði fyrir aðgang að %1$s var deilt af þér með %2$s", + "This is the password:" : "Þetta er lykilorðið:", + "You can choose a different password at any time in the share dialog." : "Þú getur hvenær sem er valið annað lykilorð með því að fara í deilingargluggann.", + "Could not find share" : "Gat ekki fundið sameign", + "Share provider which allows you to share files by mail" : "Deilingarþjónusta sem gerir þér kleift að deila skrám með tölvupósti", + "Unable to update share by mail config" : "Get ekki uppfært stillingar á deilingu með tölvupósti", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Gerir notendum kleift að deila sérsniðnum tengli á skrá eða möppu með því að setja inn tölvupóstfang.", + "Send password by mail" : "Senda lykilorð með pósti", + "Reply to initiator" : "Svara til upphafsaðila" +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/it.js b/apps/sharebymail/l10n/it.js new file mode 100644 index 00000000000..699537a6595 --- /dev/null +++ b/apps/sharebymail/l10n/it.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Condivisa con {email}", + "Shared with {email} by {actor}" : "Condivisa con {email} da {actor}", + "Unshared from {email}" : "Condivisione rimossa da {email}", + "Unshared from {email} by {actor}" : "Condivisione rimossa da {email} da {actor}", + "Password for mail share sent to {email}" : "Password per la condivisione tramite posta inviata a {email}", + "Password for mail share sent to you" : "Password per la condivisione tramite posta inviata a te", + "You shared {file} with {email} by mail" : "Hai condiviso {file} con {email} tramite posta", + "{actor} shared {file} with {email} by mail" : "{actor} ha condiviso {file} con {email} tramite email", + "You unshared {file} from {email} by mail" : "Hai rimosso la condivisione di {file} con {email} tramite posta", + "{actor} unshared {file} from {email} by mail" : "{actor} ha rimosso la condivisione di {file} da {email} tramite posta", + "Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}", + "Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata", + "Share by mail" : "Condividi tramite email", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Condivisione di %1$s non riuscita, poiché l'elemento è già condiviso con l'account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non possiamo inviarti la password generata automaticamente. Imposta un indirizzo di posta valido nelle impostazioni personali e prova ancora.", + "Failed to send share by email. Got an invalid email address" : "Impossibile inviare la condivisione tramite e-mail. L'indirizzo email non è valido", + "Failed to send share by email" : "Invio non riuscito della condivisione tramite email", + "%1$s shared %2$s with you" : "%1$s condiviso %2$s con te", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Questa condivisione è valida fino %s a mezzanotte", + "Expiration:" : "Scadenza:", + "Open %s" : "Apri %s", + "%1$s via %2$s" : "%1$s tramite %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s condiviso %2$scon te. Dovresti aver già ricevuto una mail separata con un link per accedervi.", + "Password to access %1$s shared to you by %2$s" : "Password per accedere %1$s condiviso con te da %2$s", + "Password to access %s" : "Password per accedere %s", + "It is protected with the following password:" : "È protetta con la password seguente:", + "This password will expire at %s" : "Questa password scadrà il %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s condiviso %2$s con te e vuole aggiungere:", + "%1$s shared %2$s with you and wants to add" : "%1$s condiviso %2$s con te e vuole aggiungere", + "%s added a note to a file shared with you" : "%s ha aggiunto una nota a un file condiviso con te", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Hai appena condiviso%1$s con %2$s. La condivisione è già stata inviata al destinatario. A causa delle policy di sicurezza definite dall'amministratore di %3$s ogni condivisione deve essere protetta da password e non è consentito inviare la password direttamente al destinatario. Pertanto è necessario inoltrare manualmente la password al destinatario.", + "Password to access %1$s shared by you with %2$s" : "Password per accedere %1$s condiviso da te con %2$s", + "This is the password:" : "Questa è la password:", + "You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.", + "Could not find share" : "Non è stato possibile trovare la condivisione", + "Share provider which allows you to share files by mail" : "Fornitore di condivisione che ti consente di condividere file tramite posta", + "Unable to update share by mail config" : "Impossibile aggiornare la configurazione della condivisione per email", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Consente alle persone di condividere un collegamento personalizzato a un file o a una cartella inserendo un indirizzo e-mail.", + "Send password by mail" : "Invia password tramite posta", + "Reply to initiator" : "Rispondi all'iniziatore" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/it.json b/apps/sharebymail/l10n/it.json new file mode 100644 index 00000000000..e75e14c7f42 --- /dev/null +++ b/apps/sharebymail/l10n/it.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Condivisa con {email}", + "Shared with {email} by {actor}" : "Condivisa con {email} da {actor}", + "Unshared from {email}" : "Condivisione rimossa da {email}", + "Unshared from {email} by {actor}" : "Condivisione rimossa da {email} da {actor}", + "Password for mail share sent to {email}" : "Password per la condivisione tramite posta inviata a {email}", + "Password for mail share sent to you" : "Password per la condivisione tramite posta inviata a te", + "You shared {file} with {email} by mail" : "Hai condiviso {file} con {email} tramite posta", + "{actor} shared {file} with {email} by mail" : "{actor} ha condiviso {file} con {email} tramite email", + "You unshared {file} from {email} by mail" : "Hai rimosso la condivisione di {file} con {email} tramite posta", + "{actor} unshared {file} from {email} by mail" : "{actor} ha rimosso la condivisione di {file} da {email} tramite posta", + "Password to access {file} was sent to {email}" : "La password per accedere a {file} ti è stata inviata a {email}", + "Password to access {file} was sent to you" : "La password per accedere a {file} ti è stata inviata", + "Share by mail" : "Condividi tramite email", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Condivisione di %1$s non riuscita, poiché l'elemento è già condiviso con l'account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Non possiamo inviarti la password generata automaticamente. Imposta un indirizzo di posta valido nelle impostazioni personali e prova ancora.", + "Failed to send share by email. Got an invalid email address" : "Impossibile inviare la condivisione tramite e-mail. L'indirizzo email non è valido", + "Failed to send share by email" : "Invio non riuscito della condivisione tramite email", + "%1$s shared %2$s with you" : "%1$s condiviso %2$s con te", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Questa condivisione è valida fino %s a mezzanotte", + "Expiration:" : "Scadenza:", + "Open %s" : "Apri %s", + "%1$s via %2$s" : "%1$s tramite %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s condiviso %2$scon te. Dovresti aver già ricevuto una mail separata con un link per accedervi.", + "Password to access %1$s shared to you by %2$s" : "Password per accedere %1$s condiviso con te da %2$s", + "Password to access %s" : "Password per accedere %s", + "It is protected with the following password:" : "È protetta con la password seguente:", + "This password will expire at %s" : "Questa password scadrà il %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s condiviso %2$s con te e vuole aggiungere:", + "%1$s shared %2$s with you and wants to add" : "%1$s condiviso %2$s con te e vuole aggiungere", + "%s added a note to a file shared with you" : "%s ha aggiunto una nota a un file condiviso con te", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Hai appena condiviso%1$s con %2$s. La condivisione è già stata inviata al destinatario. A causa delle policy di sicurezza definite dall'amministratore di %3$s ogni condivisione deve essere protetta da password e non è consentito inviare la password direttamente al destinatario. Pertanto è necessario inoltrare manualmente la password al destinatario.", + "Password to access %1$s shared by you with %2$s" : "Password per accedere %1$s condiviso da te con %2$s", + "This is the password:" : "Questa è la password:", + "You can choose a different password at any time in the share dialog." : "Puoi scegliere una password diversa in qualsiasi momento nella finestra di condivisione.", + "Could not find share" : "Non è stato possibile trovare la condivisione", + "Share provider which allows you to share files by mail" : "Fornitore di condivisione che ti consente di condividere file tramite posta", + "Unable to update share by mail config" : "Impossibile aggiornare la configurazione della condivisione per email", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Consente alle persone di condividere un collegamento personalizzato a un file o a una cartella inserendo un indirizzo e-mail.", + "Send password by mail" : "Invia password tramite posta", + "Reply to initiator" : "Rispondi all'iniziatore" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/ja.js b/apps/sharebymail/l10n/ja.js new file mode 100644 index 00000000000..943501fd186 --- /dev/null +++ b/apps/sharebymail/l10n/ja.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "{email} と共有", + "Shared with {email} by {actor}" : "{actor} で {email} と共有 ", + "Unshared from {email}" : "{email}から共有解除しました", + "Unshared from {email} by {actor}" : "{actor} で {email} と共有解除しました", + "Password for mail share sent to {email}" : "{email} にメール共有するパスワード", + "Password for mail share sent to you" : "あなたにメール共有するパスワード", + "You shared {file} with {email} by mail" : "メールで {email} と {file} を共有しました", + "{actor} shared {file} with {email} by mail" : "{actor} が {email} と {file} を共有しました", + "You unshared {file} from {email} by mail" : "メールで {email} と {file} を共有解除しました", + "{actor} unshared {file} from {email} by mail" : "{actor} がメールで {email} と {file} を共有解除しました", + "Password to access {file} was sent to {email}" : "{file} にアクセスするパスワードを {email} に送信しました", + "Password to access {file} was sent to you" : "{file} にアクセスするパスワードを あなたに送信しました", + "Share by mail" : "メールで共有", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "このアイテム %1$sはすでにアカウント %2$sと共有されているため、共有に失敗しました", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "あなたに自動生成したパスワードを送信できませんでした。個人設定画面から正しいメールアドレスを設定して再度実施してください。", + "Failed to send share by email. Got an invalid email address" : "共有メールの送信に失敗しました。無効なメールアドレスが入力されています", + "Failed to send share by email" : "メールで共有の送信に失敗しました", + "%1$s shared %2$s with you" : "%1$s は %2$s をあなたと共有しました", + "Note:" : "注意:", + "This share is valid until %s at midnight" : "この共有は%sの午前0時まで有効です。", + "Expiration:" : "期限切れ:", + "Open %s" : "%sを開く", + "%1$s via %2$s" : "%1$s に %2$s から", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$sにより %2$s が共有されました。アクセスするためのリンクは別途メールで受信してください。", + "Password to access %1$s shared to you by %2$s" : "%1$sへの共有アクセスのパスワードが %2$s から共有されました", + "Password to access %s" : "%s にアクセスするパスワード", + "It is protected with the following password:" : "次のパスワードで保護されています。", + "This password will expire at %s" : "このパスワードは%sで期限切れとなります。", + "%1$s shared %2$s with you and wants to add:" : "%1$s さんが %2$s にノートを追加しました:", + "%1$s shared %2$s with you and wants to add" : "%1$s さんが %2$s にノートを追加しました", + "%s added a note to a file shared with you" : "%s があなたと共有しているファイルにノートを追加しました。", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$sを%2$sと共有しました。共有は受信者に送信されています。セキュリティポリシーにより%3$sの管理者が共有はパスワードで保護されるべきで、直接受信者に送信するべきではないと定めている場合、手動で受信者にメールを転送する必要があります。", + "Password to access %1$s shared by you with %2$s" : "%2$s と共有した %1$s にアクセスするパスワード", + "This is the password:" : "パスワード: ", + "You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。", + "Could not find share" : "共有が見つかりませんでした", + "Share provider which allows you to share files by mail" : "メールでファイルを共有できる共有プロバイダー", + "Unable to update share by mail config" : "メール共有の設定の更新に失敗しました", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可します。", + "Send password by mail" : "メールでパスワード送信", + "Reply to initiator" : "返信先を共有開始者にする" +}, +"nplurals=1; plural=0;"); diff --git a/apps/sharebymail/l10n/ja.json b/apps/sharebymail/l10n/ja.json new file mode 100644 index 00000000000..6030aa64df2 --- /dev/null +++ b/apps/sharebymail/l10n/ja.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "{email} と共有", + "Shared with {email} by {actor}" : "{actor} で {email} と共有 ", + "Unshared from {email}" : "{email}から共有解除しました", + "Unshared from {email} by {actor}" : "{actor} で {email} と共有解除しました", + "Password for mail share sent to {email}" : "{email} にメール共有するパスワード", + "Password for mail share sent to you" : "あなたにメール共有するパスワード", + "You shared {file} with {email} by mail" : "メールで {email} と {file} を共有しました", + "{actor} shared {file} with {email} by mail" : "{actor} が {email} と {file} を共有しました", + "You unshared {file} from {email} by mail" : "メールで {email} と {file} を共有解除しました", + "{actor} unshared {file} from {email} by mail" : "{actor} がメールで {email} と {file} を共有解除しました", + "Password to access {file} was sent to {email}" : "{file} にアクセスするパスワードを {email} に送信しました", + "Password to access {file} was sent to you" : "{file} にアクセスするパスワードを あなたに送信しました", + "Share by mail" : "メールで共有", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "このアイテム %1$sはすでにアカウント %2$sと共有されているため、共有に失敗しました", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "あなたに自動生成したパスワードを送信できませんでした。個人設定画面から正しいメールアドレスを設定して再度実施してください。", + "Failed to send share by email. Got an invalid email address" : "共有メールの送信に失敗しました。無効なメールアドレスが入力されています", + "Failed to send share by email" : "メールで共有の送信に失敗しました", + "%1$s shared %2$s with you" : "%1$s は %2$s をあなたと共有しました", + "Note:" : "注意:", + "This share is valid until %s at midnight" : "この共有は%sの午前0時まで有効です。", + "Expiration:" : "期限切れ:", + "Open %s" : "%sを開く", + "%1$s via %2$s" : "%1$s に %2$s から", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$sにより %2$s が共有されました。アクセスするためのリンクは別途メールで受信してください。", + "Password to access %1$s shared to you by %2$s" : "%1$sへの共有アクセスのパスワードが %2$s から共有されました", + "Password to access %s" : "%s にアクセスするパスワード", + "It is protected with the following password:" : "次のパスワードで保護されています。", + "This password will expire at %s" : "このパスワードは%sで期限切れとなります。", + "%1$s shared %2$s with you and wants to add:" : "%1$s さんが %2$s にノートを追加しました:", + "%1$s shared %2$s with you and wants to add" : "%1$s さんが %2$s にノートを追加しました", + "%s added a note to a file shared with you" : "%s があなたと共有しているファイルにノートを追加しました。", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$sを%2$sと共有しました。共有は受信者に送信されています。セキュリティポリシーにより%3$sの管理者が共有はパスワードで保護されるべきで、直接受信者に送信するべきではないと定めている場合、手動で受信者にメールを転送する必要があります。", + "Password to access %1$s shared by you with %2$s" : "%2$s と共有した %1$s にアクセスするパスワード", + "This is the password:" : "パスワード: ", + "You can choose a different password at any time in the share dialog." : "共有ダイアログからいつでも違うパスワードに変更できます。", + "Could not find share" : "共有が見つかりませんでした", + "Share provider which allows you to share files by mail" : "メールでファイルを共有できる共有プロバイダー", + "Unable to update share by mail config" : "メール共有の設定の更新に失敗しました", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "ユーザーがメールアドレスを使ってファイルやフォルダーへの個人リンクを共有することを許可します。", + "Send password by mail" : "メールでパスワード送信", + "Reply to initiator" : "返信先を共有開始者にする" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/ka.js b/apps/sharebymail/l10n/ka.js new file mode 100644 index 00000000000..e2e9800ef24 --- /dev/null +++ b/apps/sharebymail/l10n/ka.js @@ -0,0 +1,31 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Shared with {email}", + "Shared with {email} by {actor}" : "Shared with {email} by {actor}", + "Unshared from {email}" : "Unshared from {email}", + "Unshared from {email} by {actor}" : "Unshared from {email} by {actor}", + "Password for mail share sent to {email}" : "Password for mail share sent to {email}", + "Password for mail share sent to you" : "Password for mail share sent to you", + "You shared {file} with {email} by mail" : "You shared {file} with {email} by mail", + "{actor} shared {file} with {email} by mail" : "{actor} shared {file} with {email} by mail", + "You unshared {file} from {email} by mail" : "You unshared {file} from {email} by mail", + "{actor} unshared {file} from {email} by mail" : "{actor} unshared {file} from {email} by mail", + "Password to access {file} was sent to {email}" : "Password to access {file} was sent to {email}", + "Password to access {file} was sent to you" : "Password to access {file} was sent to you", + "Share by mail" : "Share by mail", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.", + "Failed to send share by email. Got an invalid email address" : "Failed to send share by email. Got an invalid email address", + "Failed to send share by email" : "Failed to send share by email", + "%1$s via %2$s" : "%1$s via %2$s", + "It is protected with the following password:" : "It is protected with the following password:", + "This password will expire at %s" : "This password will expire at %s", + "This is the password:" : "This is the password:", + "You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialog.", + "Could not find share" : "Could not find share", + "Share provider which allows you to share files by mail" : "Share provider which allows you to share files by mail", + "Unable to update share by mail config" : "Unable to update share by mail config", + "Send password by mail" : "Send password by mail", + "Reply to initiator" : "Reply to initiator" +}, +"nplurals=2; plural=(n!=1);"); diff --git a/apps/sharebymail/l10n/ka.json b/apps/sharebymail/l10n/ka.json new file mode 100644 index 00000000000..2f19b89cce8 --- /dev/null +++ b/apps/sharebymail/l10n/ka.json @@ -0,0 +1,29 @@ +{ "translations": { + "Shared with {email}" : "Shared with {email}", + "Shared with {email} by {actor}" : "Shared with {email} by {actor}", + "Unshared from {email}" : "Unshared from {email}", + "Unshared from {email} by {actor}" : "Unshared from {email} by {actor}", + "Password for mail share sent to {email}" : "Password for mail share sent to {email}", + "Password for mail share sent to you" : "Password for mail share sent to you", + "You shared {file} with {email} by mail" : "You shared {file} with {email} by mail", + "{actor} shared {file} with {email} by mail" : "{actor} shared {file} with {email} by mail", + "You unshared {file} from {email} by mail" : "You unshared {file} from {email} by mail", + "{actor} unshared {file} from {email} by mail" : "{actor} unshared {file} from {email} by mail", + "Password to access {file} was sent to {email}" : "Password to access {file} was sent to {email}", + "Password to access {file} was sent to you" : "Password to access {file} was sent to you", + "Share by mail" : "Share by mail", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.", + "Failed to send share by email. Got an invalid email address" : "Failed to send share by email. Got an invalid email address", + "Failed to send share by email" : "Failed to send share by email", + "%1$s via %2$s" : "%1$s via %2$s", + "It is protected with the following password:" : "It is protected with the following password:", + "This password will expire at %s" : "This password will expire at %s", + "This is the password:" : "This is the password:", + "You can choose a different password at any time in the share dialog." : "You can choose a different password at any time in the share dialog.", + "Could not find share" : "Could not find share", + "Share provider which allows you to share files by mail" : "Share provider which allows you to share files by mail", + "Unable to update share by mail config" : "Unable to update share by mail config", + "Send password by mail" : "Send password by mail", + "Reply to initiator" : "Reply to initiator" +},"pluralForm" :"nplurals=2; plural=(n!=1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/lt_LT.js b/apps/sharebymail/l10n/lt_LT.js new file mode 100644 index 00000000000..79f32a984cd --- /dev/null +++ b/apps/sharebymail/l10n/lt_LT.js @@ -0,0 +1,29 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Bendrinama su {email}", + "Shared with {email} by {actor}" : "{actor} pradėjo bendrinti su {email}", + "Unshared from {email}" : "Nustota bendrinti su {email}", + "Unshared from {email} by {actor}" : "{actor} nustojo bendrinti su {email}", + "Password for mail share sent to {email}" : "Slaptažodis pasidalinimui per elektroninį paštą išsiųstas {email}", + "Password for mail share sent to you" : "Jums išsiųstas slaptažodis pasidalinimui per elektroninį paštą", + "You shared {file} with {email} by mail" : "El. paštu pradėjote bendrinti {file} su {email}", + "{actor} shared {file} with {email} by mail" : "{actor} el. paštu pradėjo bendrinti {file} su {email}", + "You unshared {file} from {email} by mail" : "Jūs nustojote el. paštu bendrinti {file} su {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} nebendrintas {file} iš {email} el. paštu", + "Password to access {file} was sent to {email}" : "Slaptažodis, skirtas prieigai prie {file}, buvo išsiųstas į {email}", + "Password to access {file} was sent to you" : "Jums buvo išsiųstas slaptažodis, skirtas prieigai prie {file}", + "Share by mail" : "Bendrinimas el. paštu", + "Failed to send share by email" : "Nepavyko pasidalinti el. paštu", + "Note:" : "Pastaba:", + "Open %s" : "Atverti %s", + "%1$s via %2$s" : "%1$s per %2$s", + "It is protected with the following password:" : "Apsaugota šiuo slaptažodžiu:", + "This is the password:" : "Štai yra slaptažodis:", + "You can choose a different password at any time in the share dialog." : "Dalinimosi dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.", + "Could not find share" : "Nepavyko rasti viešinio", + "Share provider which allows you to share files by mail" : "Bendrinimo teikėjas, kuris leidžia bendrinti failus el. paštu", + "Send password by mail" : "Siųsti slaptažodį el. paštu", + "Reply to initiator" : "Atsakyti iniciatoriui" +}, +"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/sharebymail/l10n/lt_LT.json b/apps/sharebymail/l10n/lt_LT.json new file mode 100644 index 00000000000..ec315d578ec --- /dev/null +++ b/apps/sharebymail/l10n/lt_LT.json @@ -0,0 +1,27 @@ +{ "translations": { + "Shared with {email}" : "Bendrinama su {email}", + "Shared with {email} by {actor}" : "{actor} pradėjo bendrinti su {email}", + "Unshared from {email}" : "Nustota bendrinti su {email}", + "Unshared from {email} by {actor}" : "{actor} nustojo bendrinti su {email}", + "Password for mail share sent to {email}" : "Slaptažodis pasidalinimui per elektroninį paštą išsiųstas {email}", + "Password for mail share sent to you" : "Jums išsiųstas slaptažodis pasidalinimui per elektroninį paštą", + "You shared {file} with {email} by mail" : "El. paštu pradėjote bendrinti {file} su {email}", + "{actor} shared {file} with {email} by mail" : "{actor} el. paštu pradėjo bendrinti {file} su {email}", + "You unshared {file} from {email} by mail" : "Jūs nustojote el. paštu bendrinti {file} su {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} nebendrintas {file} iš {email} el. paštu", + "Password to access {file} was sent to {email}" : "Slaptažodis, skirtas prieigai prie {file}, buvo išsiųstas į {email}", + "Password to access {file} was sent to you" : "Jums buvo išsiųstas slaptažodis, skirtas prieigai prie {file}", + "Share by mail" : "Bendrinimas el. paštu", + "Failed to send share by email" : "Nepavyko pasidalinti el. paštu", + "Note:" : "Pastaba:", + "Open %s" : "Atverti %s", + "%1$s via %2$s" : "%1$s per %2$s", + "It is protected with the following password:" : "Apsaugota šiuo slaptažodžiu:", + "This is the password:" : "Štai yra slaptažodis:", + "You can choose a different password at any time in the share dialog." : "Dalinimosi dialoge bet kuriuo metu galite pasirinkti kitą slaptažodį.", + "Could not find share" : "Nepavyko rasti viešinio", + "Share provider which allows you to share files by mail" : "Bendrinimo teikėjas, kuris leidžia bendrinti failus el. paštu", + "Send password by mail" : "Siųsti slaptažodį el. paštu", + "Reply to initiator" : "Atsakyti iniciatoriui" +},"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/sharebymail/l10n/mk.js b/apps/sharebymail/l10n/mk.js new file mode 100644 index 00000000000..f0b0502fa7f --- /dev/null +++ b/apps/sharebymail/l10n/mk.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Споделено со {email}", + "Shared with {email} by {actor}" : "Споделено со {email} од {actor}", + "Unshared from {email}" : "Не е повеќе споделено со {email}", + "Unshared from {email} by {actor}" : "Не е повеќе споделено со {email} од {actor}", + "Password for mail share sent to {email}" : "Лозинката за споделување е испратена до {email}", + "Password for mail share sent to you" : "Лозинката за споделување е испратена до вас", + "You shared {file} with {email} by mail" : "Споделивте {file} со {email} преку е-пошта", + "{actor} shared {file} with {email} by mail" : "{actor} сподели {file} со {email} преку е-пошта", + "You unshared {file} from {email} by mail" : "Отстранивте споделување преку емаил на {file} со {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} не го споделува повеќе преку емаил {file} со {email}", + "Password to access {file} was sent to {email}" : "Лозинката за пристап до {file} е испратена на {email}", + "Password to access {file} was sent to you" : "Лозинката за пристап до {file} е испратена до вас", + "Share by mail" : "Сподели преку е-пошта", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Споделувањето %1$s е неуспешно, бидејќи ова е веќе споделено со сметката на %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Неможе да се испрати автоматски генерирана лозинка. Ве молиме внесете ја вашата е-пошта адреса во параметрите за лични податоци и обидете се повторно.", + "Failed to send share by email. Got an invalid email address" : "Неможе да се сподели на Е-пошта. Адресата не е валидна", + "Failed to send share by email" : "Неуспешно испраќање на споделување по е-пошта.", + "%1$s shared %2$s with you" : "%1$s сподели %2$s со вас", + "Note:" : "Белешка:", + "This share is valid until %s at midnight" : "Ова споделување е валидно до %s на полноќ", + "Expiration:" : "Истекување:", + "Open %s" : "Отвори %s", + "%1$s via %2$s" : "%1$s преку %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s сподели %2$s со вас. Веќе имате добиено посебна е-пошта со линк за пристап до неа.", + "Password to access %1$s shared to you by %2$s" : "Лозинка за пристап до %1$s е споделена со вас од %2$s", + "Password to access %s" : "Лозинка за пристап %s", + "It is protected with the following password:" : "Заштитено е со следнава лозинка:", + "This password will expire at %s" : "Оваа лозинка ќе истече за на %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s сподели %2$s со вас и сака да додаде:", + "%1$s shared %2$s with you and wants to add" : "%1$s сподели %2$s со вас и сака да додаде", + "%s added a note to a file shared with you" : "%s додаде белешка до датотеката што ја сподели со вас", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вие ја споделивте %1$s со %2$s.Споделувањето веќе е испратено до примачот. Поради безбедносни причини дефинирани од администраторот на %3$s секое споделување треба да биде заштитено со лозинка и лозинката не смее да се испраќаa директно на примачот. Затоа треба оваа лозинка да му ја препратите на примачот.", + "Password to access %1$s shared by you with %2$s" : "Лозинка за пристап до %1$s ја споделивте со %2$s", + "This is the password:" : "Ова е лозинката: ", + "You can choose a different password at any time in the share dialog." : "Можете да изберете било каква лозинка во било кое време.", + "Could not find share" : "Неможе да се пронајде споделувањето", + "Share provider which allows you to share files by mail" : "Провајдер за споделување кој дозволува споделување преки е-пошта", + "Unable to update share by mail config" : "Неможе да се ажурираат параметрите за споделување со е-пошта", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозволете им на корисниците да споделуваат персонални линкови до датотеки и папки со внесување на адреса на е-пошта.", + "Send password by mail" : "Испрати лозинка преку е-пошта", + "Reply to initiator" : "Одговор до иницијаторот" +}, +"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/sharebymail/l10n/mk.json b/apps/sharebymail/l10n/mk.json new file mode 100644 index 00000000000..812fc7f8105 --- /dev/null +++ b/apps/sharebymail/l10n/mk.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Споделено со {email}", + "Shared with {email} by {actor}" : "Споделено со {email} од {actor}", + "Unshared from {email}" : "Не е повеќе споделено со {email}", + "Unshared from {email} by {actor}" : "Не е повеќе споделено со {email} од {actor}", + "Password for mail share sent to {email}" : "Лозинката за споделување е испратена до {email}", + "Password for mail share sent to you" : "Лозинката за споделување е испратена до вас", + "You shared {file} with {email} by mail" : "Споделивте {file} со {email} преку е-пошта", + "{actor} shared {file} with {email} by mail" : "{actor} сподели {file} со {email} преку е-пошта", + "You unshared {file} from {email} by mail" : "Отстранивте споделување преку емаил на {file} со {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} не го споделува повеќе преку емаил {file} со {email}", + "Password to access {file} was sent to {email}" : "Лозинката за пристап до {file} е испратена на {email}", + "Password to access {file} was sent to you" : "Лозинката за пристап до {file} е испратена до вас", + "Share by mail" : "Сподели преку е-пошта", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Споделувањето %1$s е неуспешно, бидејќи ова е веќе споделено со сметката на %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Неможе да се испрати автоматски генерирана лозинка. Ве молиме внесете ја вашата е-пошта адреса во параметрите за лични податоци и обидете се повторно.", + "Failed to send share by email. Got an invalid email address" : "Неможе да се сподели на Е-пошта. Адресата не е валидна", + "Failed to send share by email" : "Неуспешно испраќање на споделување по е-пошта.", + "%1$s shared %2$s with you" : "%1$s сподели %2$s со вас", + "Note:" : "Белешка:", + "This share is valid until %s at midnight" : "Ова споделување е валидно до %s на полноќ", + "Expiration:" : "Истекување:", + "Open %s" : "Отвори %s", + "%1$s via %2$s" : "%1$s преку %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s сподели %2$s со вас. Веќе имате добиено посебна е-пошта со линк за пристап до неа.", + "Password to access %1$s shared to you by %2$s" : "Лозинка за пристап до %1$s е споделена со вас од %2$s", + "Password to access %s" : "Лозинка за пристап %s", + "It is protected with the following password:" : "Заштитено е со следнава лозинка:", + "This password will expire at %s" : "Оваа лозинка ќе истече за на %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s сподели %2$s со вас и сака да додаде:", + "%1$s shared %2$s with you and wants to add" : "%1$s сподели %2$s со вас и сака да додаде", + "%s added a note to a file shared with you" : "%s додаде белешка до датотеката што ја сподели со вас", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вие ја споделивте %1$s со %2$s.Споделувањето веќе е испратено до примачот. Поради безбедносни причини дефинирани од администраторот на %3$s секое споделување треба да биде заштитено со лозинка и лозинката не смее да се испраќаa директно на примачот. Затоа треба оваа лозинка да му ја препратите на примачот.", + "Password to access %1$s shared by you with %2$s" : "Лозинка за пристап до %1$s ја споделивте со %2$s", + "This is the password:" : "Ова е лозинката: ", + "You can choose a different password at any time in the share dialog." : "Можете да изберете било каква лозинка во било кое време.", + "Could not find share" : "Неможе да се пронајде споделувањето", + "Share provider which allows you to share files by mail" : "Провајдер за споделување кој дозволува споделување преки е-пошта", + "Unable to update share by mail config" : "Неможе да се ажурираат параметрите за споделување со е-пошта", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозволете им на корисниците да споделуваат персонални линкови до датотеки и папки со внесување на адреса на е-пошта.", + "Send password by mail" : "Испрати лозинка преку е-пошта", + "Reply to initiator" : "Одговор до иницијаторот" +},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/nb.js b/apps/sharebymail/l10n/nb.js new file mode 100644 index 00000000000..bdac2e92692 --- /dev/null +++ b/apps/sharebymail/l10n/nb.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Delt med {email}", + "Shared with {email} by {actor}" : "Delt med {email} av {actor}", + "Unshared from {email}" : "Opphevde deling fra {email}", + "Unshared from {email} by {actor}" : "Opphevde deling fra {email} av {actor}", + "Password for mail share sent to {email}" : "Passord for e-postlager sendt til {email}", + "Password for mail share sent to you" : "Passord for e-postlager sendt til deg", + "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-post", + "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-post", + "You unshared {file} from {email} by mail" : "Du opphevde delingen {file} med {email} via e-post", + "{actor} unshared {file} from {email} by mail" : "{actor} opphevde deling av {file} fra {email} via e-post", + "Password to access {file} was sent to {email}" : "Passord for tilgang til {file} ble sendt til {email}", + "Password to access {file} was sent to you" : "Du ble tildelt passord for å benytte {file}", + "Share by mail" : "Del via e-post", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deling av %1$s feilet, fordi dette elementet er allerede delt med kontoen %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende deg det automatisk genererte passordet. Angi en gyldig e-postadresse i dine personlige innstillinger og prøv igjen.", + "Failed to send share by email. Got an invalid email address" : "Kunne ikke sende deling via e-post. Fikk en ugyldig e-postadresse", + "Failed to send share by email" : "Delingen kunne ikke sendes med e-post", + "%1$s shared %2$s with you" : "%1$s delte %2$s med deg", + "Note:" : "Merk:", + "This share is valid until %s at midnight" : "Denne delte ressursen er gyldig til %s ved midnatt", + "Expiration:" : "Utløp:", + "Open %s" : "Åpne %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delte %2$s med deg. Du skal allerede ha mottatt en egen e-post med en lenke for å få tilgang til den.", + "Password to access %1$s shared to you by %2$s" : "Passord for å få tilgang til %1$s delt med deg av %2$s", + "Password to access %s" : "Passord for å få tilgang til %s", + "It is protected with the following password:" : "Den er beskyttet med følgende passord:", + "This password will expire at %s" : "Dette passordet vil utløpe ved %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s delte %2$s med deg og ønsker å legge til:", + "%1$s shared %2$s with you and wants to add" : "%1$s delte %2$s med deg og ønsker å legge til", + "%s added a note to a file shared with you" : "%s la til et notat i en fil som er delt med deg", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du har nettopp delt %1$s med %2$s. Delingen er allerede sendt til mottakeren. På grunn av sikkerhetsreglene som er definert av administratoren for %3$s, må hver delt passord beskyttes og det er ikke tillatt å sende passordet direkte til mottakeren. Derfor må du videresende passordet manuelt til mottakeren.", + "Password to access %1$s shared by you with %2$s" : "Passord for å få tilgang til %1$s delt av deg med %2$s", + "This is the password:" : "Dette er passordet:", + "You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.", + "Could not find share" : "Delingen ble ikke funnet", + "Share provider which allows you to share files by mail" : "Delingsleverandør som lar deg dele filer via post", + "Unable to update share by mail config" : "Kan ikke oppdatere deling via e-postkonfigurasjon", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Tillater personer å dele en personalisert lenke til en fil eller mappe ved å skrive inn en e-postadresse.", + "Send password by mail" : "Send passord via e-post", + "Reply to initiator" : "Svar til initiativtaker" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/nb.json b/apps/sharebymail/l10n/nb.json new file mode 100644 index 00000000000..6a8685ecb45 --- /dev/null +++ b/apps/sharebymail/l10n/nb.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Delt med {email}", + "Shared with {email} by {actor}" : "Delt med {email} av {actor}", + "Unshared from {email}" : "Opphevde deling fra {email}", + "Unshared from {email} by {actor}" : "Opphevde deling fra {email} av {actor}", + "Password for mail share sent to {email}" : "Passord for e-postlager sendt til {email}", + "Password for mail share sent to you" : "Passord for e-postlager sendt til deg", + "You shared {file} with {email} by mail" : "Du delte {file} med {email} via e-post", + "{actor} shared {file} with {email} by mail" : "{actor} delte {file} med {email} via e-post", + "You unshared {file} from {email} by mail" : "Du opphevde delingen {file} med {email} via e-post", + "{actor} unshared {file} from {email} by mail" : "{actor} opphevde deling av {file} fra {email} via e-post", + "Password to access {file} was sent to {email}" : "Passord for tilgang til {file} ble sendt til {email}", + "Password to access {file} was sent to you" : "Du ble tildelt passord for å benytte {file}", + "Share by mail" : "Del via e-post", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Deling av %1$s feilet, fordi dette elementet er allerede delt med kontoen %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan ikke sende deg det automatisk genererte passordet. Angi en gyldig e-postadresse i dine personlige innstillinger og prøv igjen.", + "Failed to send share by email. Got an invalid email address" : "Kunne ikke sende deling via e-post. Fikk en ugyldig e-postadresse", + "Failed to send share by email" : "Delingen kunne ikke sendes med e-post", + "%1$s shared %2$s with you" : "%1$s delte %2$s med deg", + "Note:" : "Merk:", + "This share is valid until %s at midnight" : "Denne delte ressursen er gyldig til %s ved midnatt", + "Expiration:" : "Utløp:", + "Open %s" : "Åpne %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delte %2$s med deg. Du skal allerede ha mottatt en egen e-post med en lenke for å få tilgang til den.", + "Password to access %1$s shared to you by %2$s" : "Passord for å få tilgang til %1$s delt med deg av %2$s", + "Password to access %s" : "Passord for å få tilgang til %s", + "It is protected with the following password:" : "Den er beskyttet med følgende passord:", + "This password will expire at %s" : "Dette passordet vil utløpe ved %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s delte %2$s med deg og ønsker å legge til:", + "%1$s shared %2$s with you and wants to add" : "%1$s delte %2$s med deg og ønsker å legge til", + "%s added a note to a file shared with you" : "%s la til et notat i en fil som er delt med deg", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du har nettopp delt %1$s med %2$s. Delingen er allerede sendt til mottakeren. På grunn av sikkerhetsreglene som er definert av administratoren for %3$s, må hver delt passord beskyttes og det er ikke tillatt å sende passordet direkte til mottakeren. Derfor må du videresende passordet manuelt til mottakeren.", + "Password to access %1$s shared by you with %2$s" : "Passord for å få tilgang til %1$s delt av deg med %2$s", + "This is the password:" : "Dette er passordet:", + "You can choose a different password at any time in the share dialog." : "Du kan velge et annet passord når som helst i delingsdialogvinduet.", + "Could not find share" : "Delingen ble ikke funnet", + "Share provider which allows you to share files by mail" : "Delingsleverandør som lar deg dele filer via post", + "Unable to update share by mail config" : "Kan ikke oppdatere deling via e-postkonfigurasjon", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Tillater personer å dele en personalisert lenke til en fil eller mappe ved å skrive inn en e-postadresse.", + "Send password by mail" : "Send passord via e-post", + "Reply to initiator" : "Svar til initiativtaker" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/nl.js b/apps/sharebymail/l10n/nl.js new file mode 100644 index 00000000000..c2b96958a58 --- /dev/null +++ b/apps/sharebymail/l10n/nl.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Gedeeld met {email}", + "Shared with {email} by {actor}" : "Gedeeld met {email} door {actor}", + "Unshared from {email}" : "Niet langer gedeeld door {email}", + "Unshared from {email} by {actor}" : "Niet langer gedeeld met {email} door {actor}", + "Password for mail share sent to {email}" : "Wachtwoord voor het delen per mail is naar {email}", + "Password for mail share sent to you" : "Wachtwoord voor het delen per mail is naar je verstuurd", + "You shared {file} with {email} by mail" : "Je deelde {file} met {email} per mail", + "{actor} shared {file} with {email} by mail" : "{actor} deelde {file} met {email} per mail", + "You unshared {file} from {email} by mail" : "Je deelde niet langer {file} met {email} per mail", + "{actor} unshared {file} from {email} by mail" : "{actor} deelde niet langer {file} met {email} per mail", + "Password to access {file} was sent to {email}" : "Wachtwoord voor toegang tot {file} is gestuurd naar {email}", + "Password to access {file} was sent to you" : "Wachtwoord voor toegang tot {file} is naar je verstuurd", + "Share by mail" : "Delen via email", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Het delen van%1$s is mislukt, omdat dit item al gedeeld wordt met het account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.", + "Failed to send share by email. Got an invalid email address" : "Het delen van het bestand per e-mail is mislukt. Ongeldig e-mailadres", + "Failed to send share by email" : "Versturen share per e-mail is mislukt", + "%1$s shared %2$s with you" : "%1$s deelde %2$s met jou", + "Note:" : "Notitie:", + "This share is valid until %s at midnight" : "Deze share is geldig tot %s middernacht", + "Expiration:" : "Vervaldatum:", + "Open %s" : "%s openen", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s deelde %2$s met jou. Je zou een aparte e-mail hebben moeten ontvangen met een link om er toegang toe te krijgen.", + "Password to access %1$s shared to you by %2$s" : "Wachtwoord om toegang te krijgen tot %1$sdat met jou gedeeld werd door %2$s", + "Password to access %s" : "Wachtwoord om toegang te krijgen tot %s", + "It is protected with the following password:" : "Het is beveiligd met het volgende wachtwoord:", + "This password will expire at %s" : "Dit wachtwoord verloopt op %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s deelde %2$s met jou en wil toevoegen:", + "%1$s shared %2$s with you and wants to add" : "%1$s deelde %2$s met jou en wil toevoegen", + "%s added a note to a file shared with you" : "%s heeft een notitie toegevoegd aan een bestand dat met jou werd gedeeld", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Je deelde %1$s met %2$s. Het deling werd al naar de ontvanger gestuurd. Vanwege het beveiligingsbeleid dat is gedefinieerd door de beheerder van %3$s moet elke share worden beveiligd met een wachtwoord en het is niet toegestaan het wachtwoord rechtstreeks naar de ontvanger te sturen. Daarom moet je het wachtwoord handmatig doorsturen naar de ontvanger.", + "Password to access %1$s shared by you with %2$s" : "Wachtwoord om toegang te krijgen tot %1$s door jou gedeeld met %2$s", + "This is the password:" : "Dit is het wachtwoord:", + "You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.", + "Could not find share" : "Kon gedeeld niet vinden", + "Share provider which allows you to share files by mail" : "Share provider waarmee je bestanden via de mail kunt delen", + "Unable to update share by mail config" : "Kan share niet bijwerken via mailconfiguratie", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Hiermee kunnen mensen een gepersonaliseerde link naar een bestand of map delen door een e-mailadres in te voeren.", + "Send password by mail" : "Wachtwoord per email verzenden", + "Reply to initiator" : "Antwoord aan oproeper" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/nl.json b/apps/sharebymail/l10n/nl.json new file mode 100644 index 00000000000..260dd9c4912 --- /dev/null +++ b/apps/sharebymail/l10n/nl.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Gedeeld met {email}", + "Shared with {email} by {actor}" : "Gedeeld met {email} door {actor}", + "Unshared from {email}" : "Niet langer gedeeld door {email}", + "Unshared from {email} by {actor}" : "Niet langer gedeeld met {email} door {actor}", + "Password for mail share sent to {email}" : "Wachtwoord voor het delen per mail is naar {email}", + "Password for mail share sent to you" : "Wachtwoord voor het delen per mail is naar je verstuurd", + "You shared {file} with {email} by mail" : "Je deelde {file} met {email} per mail", + "{actor} shared {file} with {email} by mail" : "{actor} deelde {file} met {email} per mail", + "You unshared {file} from {email} by mail" : "Je deelde niet langer {file} met {email} per mail", + "{actor} unshared {file} from {email} by mail" : "{actor} deelde niet langer {file} met {email} per mail", + "Password to access {file} was sent to {email}" : "Wachtwoord voor toegang tot {file} is gestuurd naar {email}", + "Password to access {file} was sent to you" : "Wachtwoord voor toegang tot {file} is naar je verstuurd", + "Share by mail" : "Delen via email", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Het delen van%1$s is mislukt, omdat dit item al gedeeld wordt met het account %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "We kunnen je geen automatisch gegenereerd wachtwoord toesturen. Vermeld een geldig e-mailadres in je persoonlijke instellingen en probeer het nogmaals.", + "Failed to send share by email. Got an invalid email address" : "Het delen van het bestand per e-mail is mislukt. Ongeldig e-mailadres", + "Failed to send share by email" : "Versturen share per e-mail is mislukt", + "%1$s shared %2$s with you" : "%1$s deelde %2$s met jou", + "Note:" : "Notitie:", + "This share is valid until %s at midnight" : "Deze share is geldig tot %s middernacht", + "Expiration:" : "Vervaldatum:", + "Open %s" : "%s openen", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s deelde %2$s met jou. Je zou een aparte e-mail hebben moeten ontvangen met een link om er toegang toe te krijgen.", + "Password to access %1$s shared to you by %2$s" : "Wachtwoord om toegang te krijgen tot %1$sdat met jou gedeeld werd door %2$s", + "Password to access %s" : "Wachtwoord om toegang te krijgen tot %s", + "It is protected with the following password:" : "Het is beveiligd met het volgende wachtwoord:", + "This password will expire at %s" : "Dit wachtwoord verloopt op %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s deelde %2$s met jou en wil toevoegen:", + "%1$s shared %2$s with you and wants to add" : "%1$s deelde %2$s met jou en wil toevoegen", + "%s added a note to a file shared with you" : "%s heeft een notitie toegevoegd aan een bestand dat met jou werd gedeeld", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Je deelde %1$s met %2$s. Het deling werd al naar de ontvanger gestuurd. Vanwege het beveiligingsbeleid dat is gedefinieerd door de beheerder van %3$s moet elke share worden beveiligd met een wachtwoord en het is niet toegestaan het wachtwoord rechtstreeks naar de ontvanger te sturen. Daarom moet je het wachtwoord handmatig doorsturen naar de ontvanger.", + "Password to access %1$s shared by you with %2$s" : "Wachtwoord om toegang te krijgen tot %1$s door jou gedeeld met %2$s", + "This is the password:" : "Dit is het wachtwoord:", + "You can choose a different password at any time in the share dialog." : "Je kunt in de Delen-dialoog altijd een ander wachtwoord kiezen.", + "Could not find share" : "Kon gedeeld niet vinden", + "Share provider which allows you to share files by mail" : "Share provider waarmee je bestanden via de mail kunt delen", + "Unable to update share by mail config" : "Kan share niet bijwerken via mailconfiguratie", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Hiermee kunnen mensen een gepersonaliseerde link naar een bestand of map delen door een e-mailadres in te voeren.", + "Send password by mail" : "Wachtwoord per email verzenden", + "Reply to initiator" : "Antwoord aan oproeper" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/pl.js b/apps/sharebymail/l10n/pl.js new file mode 100644 index 00000000000..56cf9611ec4 --- /dev/null +++ b/apps/sharebymail/l10n/pl.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Udostępniono {email}", + "Shared with {email} by {actor}" : "Udostępniono {email} przez {actor}", + "Unshared from {email}" : "Udostępnienie zatrzymane dla {email}", + "Unshared from {email} by {actor}" : "Udostępnienie zatrzymane dla {email} przez {actor}", + "Password for mail share sent to {email}" : "Hasło dostępu do pliku zostało wysłane na {email}", + "Password for mail share sent to you" : "Hasło dostępu do pliku zostało do Ciebie wysłane", + "You shared {file} with {email} by mail" : "Udostępniasz {file} dla {email}", + "{actor} shared {file} with {email} by mail" : "{actor} udostępnił {file} dla {email}", + "You unshared {file} from {email} by mail" : "Zatrzymałeś udostępnianie {file} od {email} przez e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} zatrzymał udostępnianie {file} od {email} przez e-mail", + "Password to access {file} was sent to {email}" : "Hasło dostępu do {file} zostało wysłane na {email}", + "Password to access {file} was sent to you" : "Hasło dostępu do {file} zostało wysłane do Ciebie", + "Share by mail" : "Udostępnij e-mailem", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Udostępnianie %1$s nie powiodło się, ponieważ ten element został już udostępniony kontu %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nie można wysłać automatycznie wygenerowanego hasła. Proszę ustawić prawidłowy adres e-mail w ustawieniach osobistych i spróbować ponownie.", + "Failed to send share by email. Got an invalid email address" : "Nie udało się wysłać udostępnienia pocztą e-mail. Masz nieprawidłowy adres e-mail", + "Failed to send share by email" : "Nie udało się wysłać linku udostępnienia e-mailem", + "%1$s shared %2$s with you" : "%1$s udostępnił Tobie %2$s", + "Note:" : "Notatka:", + "This share is valid until %s at midnight" : "Udostępnienie jest ważne do %s do północy", + "Expiration:" : "Wygaśnięcie:", + "Open %s" : "Otwórz %s", + "%1$s via %2$s" : "%1$s przez %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s udostępnił Ci %2$s. Powinieneś już otrzymać osobną wiadomość e-mail z linkiem do niego.", + "Password to access %1$s shared to you by %2$s" : "Hasło dostępu do %1$s udostępnionego Ci przez %2$s", + "Password to access %s" : "Hasło dostępu do %s", + "It is protected with the following password:" : "Zasób jest chroniony następującym hasłem:", + "This password will expire at %s" : "Hasło wygaśnie w %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s udostępnił Ci %2$s i chce dodać:", + "%1$s shared %2$s with you and wants to add" : "%1$s udostępnił Ci %2$s i chce dodać", + "%s added a note to a file shared with you" : "%s dodał notatkę do pliku udostępnionego Tobie", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Właśnie udostępniłeś %1$s użytkownikowi %2$s. Udostępnienie zostało już wysłane do odbiorcy. Ze względu na zasady bezpieczeństwa zdefiniowane przez administratora %3$s każde udostępnienie musi być chronione hasłem i nie jest dozwolone wysyłanie hasła bezpośrednio do odbiorcy. Dlatego musisz ręcznie przesłać hasło do odbiorcy.", + "Password to access %1$s shared by you with %2$s" : "Hasło dostępu do %1$s udostępnione przez Ciebie %2$s", + "This is the password:" : "To jest hasło do zasobu:", + "You can choose a different password at any time in the share dialog." : "W dowolnym momencie możesz zmienić hasło w oknie udostępnienia.", + "Could not find share" : "Nie można odnaleźć udostępnionego zasobu", + "Share provider which allows you to share files by mail" : "Wskaż dostawcę, który umożliwia udostępnianie plików pocztą", + "Unable to update share by mail config" : "Nie można zaktualizować konfiguracji udostępniania przez pocztę", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Umożliwia użytkownikom udostępnianie spersonalizowanego linku do pliku lub katalogu poprzez podanie adresu e-mail.", + "Send password by mail" : "Wyślij hasło e-mailem", + "Reply to initiator" : "Odpowiedz inicjatorowi" +}, +"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/sharebymail/l10n/pl.json b/apps/sharebymail/l10n/pl.json new file mode 100644 index 00000000000..6bd33562909 --- /dev/null +++ b/apps/sharebymail/l10n/pl.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Udostępniono {email}", + "Shared with {email} by {actor}" : "Udostępniono {email} przez {actor}", + "Unshared from {email}" : "Udostępnienie zatrzymane dla {email}", + "Unshared from {email} by {actor}" : "Udostępnienie zatrzymane dla {email} przez {actor}", + "Password for mail share sent to {email}" : "Hasło dostępu do pliku zostało wysłane na {email}", + "Password for mail share sent to you" : "Hasło dostępu do pliku zostało do Ciebie wysłane", + "You shared {file} with {email} by mail" : "Udostępniasz {file} dla {email}", + "{actor} shared {file} with {email} by mail" : "{actor} udostępnił {file} dla {email}", + "You unshared {file} from {email} by mail" : "Zatrzymałeś udostępnianie {file} od {email} przez e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} zatrzymał udostępnianie {file} od {email} przez e-mail", + "Password to access {file} was sent to {email}" : "Hasło dostępu do {file} zostało wysłane na {email}", + "Password to access {file} was sent to you" : "Hasło dostępu do {file} zostało wysłane do Ciebie", + "Share by mail" : "Udostępnij e-mailem", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Udostępnianie %1$s nie powiodło się, ponieważ ten element został już udostępniony kontu %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Nie można wysłać automatycznie wygenerowanego hasła. Proszę ustawić prawidłowy adres e-mail w ustawieniach osobistych i spróbować ponownie.", + "Failed to send share by email. Got an invalid email address" : "Nie udało się wysłać udostępnienia pocztą e-mail. Masz nieprawidłowy adres e-mail", + "Failed to send share by email" : "Nie udało się wysłać linku udostępnienia e-mailem", + "%1$s shared %2$s with you" : "%1$s udostępnił Tobie %2$s", + "Note:" : "Notatka:", + "This share is valid until %s at midnight" : "Udostępnienie jest ważne do %s do północy", + "Expiration:" : "Wygaśnięcie:", + "Open %s" : "Otwórz %s", + "%1$s via %2$s" : "%1$s przez %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s udostępnił Ci %2$s. Powinieneś już otrzymać osobną wiadomość e-mail z linkiem do niego.", + "Password to access %1$s shared to you by %2$s" : "Hasło dostępu do %1$s udostępnionego Ci przez %2$s", + "Password to access %s" : "Hasło dostępu do %s", + "It is protected with the following password:" : "Zasób jest chroniony następującym hasłem:", + "This password will expire at %s" : "Hasło wygaśnie w %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s udostępnił Ci %2$s i chce dodać:", + "%1$s shared %2$s with you and wants to add" : "%1$s udostępnił Ci %2$s i chce dodać", + "%s added a note to a file shared with you" : "%s dodał notatkę do pliku udostępnionego Tobie", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Właśnie udostępniłeś %1$s użytkownikowi %2$s. Udostępnienie zostało już wysłane do odbiorcy. Ze względu na zasady bezpieczeństwa zdefiniowane przez administratora %3$s każde udostępnienie musi być chronione hasłem i nie jest dozwolone wysyłanie hasła bezpośrednio do odbiorcy. Dlatego musisz ręcznie przesłać hasło do odbiorcy.", + "Password to access %1$s shared by you with %2$s" : "Hasło dostępu do %1$s udostępnione przez Ciebie %2$s", + "This is the password:" : "To jest hasło do zasobu:", + "You can choose a different password at any time in the share dialog." : "W dowolnym momencie możesz zmienić hasło w oknie udostępnienia.", + "Could not find share" : "Nie można odnaleźć udostępnionego zasobu", + "Share provider which allows you to share files by mail" : "Wskaż dostawcę, który umożliwia udostępnianie plików pocztą", + "Unable to update share by mail config" : "Nie można zaktualizować konfiguracji udostępniania przez pocztę", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Umożliwia użytkownikom udostępnianie spersonalizowanego linku do pliku lub katalogu poprzez podanie adresu e-mail.", + "Send password by mail" : "Wyślij hasło e-mailem", + "Reply to initiator" : "Odpowiedz inicjatorowi" +},"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/sharebymail/l10n/pt_BR.js b/apps/sharebymail/l10n/pt_BR.js new file mode 100644 index 00000000000..b1e860a1e8a --- /dev/null +++ b/apps/sharebymail/l10n/pt_BR.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Compartilhado com {email}", + "Shared with {email} by {actor}" : "Compartilhado com {email} por {actor}", + "Unshared from {email}" : "Descompartilhado de {email}", + "Unshared from {email} by {actor}" : "Descompartilhado de {email} por {actor}", + "Password for mail share sent to {email}" : "Senha para o correio compartilhado enviado para {email}", + "Password for mail share sent to you" : "Senha do compartilhamento por e-mail foi enviado para você", + "You shared {file} with {email} by mail" : "Você compartilhou {file} com {email} por e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} compartilhou {file} com {email} por e-mail", + "You unshared {file} from {email} by mail" : "Você descompartilhou {file} de {email} por e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} descompartilhou {file} de {email} por e-mail", + "Password to access {file} was sent to {email}" : "A senha para acesso {file} foi enviada para {email}", + "Password to access {file} was sent to you" : "A senha para acesso {file} foi enviada para você", + "Share by mail" : "Compartilhamento por e-mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Falha ao compartilhar %1$s porque este item já está compartilhado com a conta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não conseguimos lhe enviar a senha gerada automaticamente. Defina um endereço de e-mail válido em sua configuração e tente novamente.", + "Failed to send share by email. Got an invalid email address" : "Falha ao enviar o compartilhamento por e-mail. Endereço de e-mail inválido", + "Failed to send share by email" : "Falha ao enviar compartilhamento via e-mail", + "%1$s shared %2$s with you" : "%1$s compartilhou %2$s com você", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Este compartilhamento é válido até %s à meia-noite", + "Expiration:" : "Expiração:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s compartilhou %2$s com você. Você já deve ter recebido um e-mail separado com um link para acessá-lo.", + "Password to access %1$s shared to you by %2$s" : "Senha para acessar %1$s compartilhado com você por %2$s", + "Password to access %s" : "Senha para acessar %s", + "It is protected with the following password:" : "Está protegida com a seguinte senha:", + "This password will expire at %s" : "Essa senha expirará em %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s compartilhou %2$s com você e deseja adicionar:", + "%1$s shared %2$s with you and wants to add" : "%1$s compartilhou %2$s com você e deseja adicionar", + "%s added a note to a file shared with you" : "%s adicionou uma nota a um arquivo compartilhado com você", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Você acabou de compartilhar %1$s com %2$s. O compartilhamento já foi enviado ao destinatário. Devido às políticas de segurança definidas pelo administrador de %3$s cada compartilhamento precisa ser protegido por senha e não é permitido enviar a senha diretamente ao destinatário. Portanto, você precisa encaminhar a senha manualmente ao destinatário.", + "Password to access %1$s shared by you with %2$s" : "Senha para acessar %1$s compartilhada por você com%2$s", + "This is the password:" : "Essa é a senha:", + "You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.", + "Could not find share" : "Não foi possível encontrar o compartilhamento", + "Share provider which allows you to share files by mail" : "Provedor de compartilhamento que permite compartilhar arquivos por e-mail", + "Unable to update share by mail config" : "Não foi possível atualizar a configuração do aplicativo compartilhamento por e-mail", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite que as pessoas compartilhem um link personalizado para um arquivo ou pasta inserindo um endereço de e-mail.", + "Send password by mail" : "Enviar senha por e-mail", + "Reply to initiator" : "Responder ao iniciador" +}, +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/apps/sharebymail/l10n/pt_BR.json b/apps/sharebymail/l10n/pt_BR.json new file mode 100644 index 00000000000..a5ebc64f295 --- /dev/null +++ b/apps/sharebymail/l10n/pt_BR.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Compartilhado com {email}", + "Shared with {email} by {actor}" : "Compartilhado com {email} por {actor}", + "Unshared from {email}" : "Descompartilhado de {email}", + "Unshared from {email} by {actor}" : "Descompartilhado de {email} por {actor}", + "Password for mail share sent to {email}" : "Senha para o correio compartilhado enviado para {email}", + "Password for mail share sent to you" : "Senha do compartilhamento por e-mail foi enviado para você", + "You shared {file} with {email} by mail" : "Você compartilhou {file} com {email} por e-mail", + "{actor} shared {file} with {email} by mail" : "{actor} compartilhou {file} com {email} por e-mail", + "You unshared {file} from {email} by mail" : "Você descompartilhou {file} de {email} por e-mail", + "{actor} unshared {file} from {email} by mail" : "{actor} descompartilhou {file} de {email} por e-mail", + "Password to access {file} was sent to {email}" : "A senha para acesso {file} foi enviada para {email}", + "Password to access {file} was sent to you" : "A senha para acesso {file} foi enviada para você", + "Share by mail" : "Compartilhamento por e-mail", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Falha ao compartilhar %1$s porque este item já está compartilhado com a conta %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Não conseguimos lhe enviar a senha gerada automaticamente. Defina um endereço de e-mail válido em sua configuração e tente novamente.", + "Failed to send share by email. Got an invalid email address" : "Falha ao enviar o compartilhamento por e-mail. Endereço de e-mail inválido", + "Failed to send share by email" : "Falha ao enviar compartilhamento via e-mail", + "%1$s shared %2$s with you" : "%1$s compartilhou %2$s com você", + "Note:" : "Nota:", + "This share is valid until %s at midnight" : "Este compartilhamento é válido até %s à meia-noite", + "Expiration:" : "Expiração:", + "Open %s" : "Abrir %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s compartilhou %2$s com você. Você já deve ter recebido um e-mail separado com um link para acessá-lo.", + "Password to access %1$s shared to you by %2$s" : "Senha para acessar %1$s compartilhado com você por %2$s", + "Password to access %s" : "Senha para acessar %s", + "It is protected with the following password:" : "Está protegida com a seguinte senha:", + "This password will expire at %s" : "Essa senha expirará em %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s compartilhou %2$s com você e deseja adicionar:", + "%1$s shared %2$s with you and wants to add" : "%1$s compartilhou %2$s com você e deseja adicionar", + "%s added a note to a file shared with you" : "%s adicionou uma nota a um arquivo compartilhado com você", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Você acabou de compartilhar %1$s com %2$s. O compartilhamento já foi enviado ao destinatário. Devido às políticas de segurança definidas pelo administrador de %3$s cada compartilhamento precisa ser protegido por senha e não é permitido enviar a senha diretamente ao destinatário. Portanto, você precisa encaminhar a senha manualmente ao destinatário.", + "Password to access %1$s shared by you with %2$s" : "Senha para acessar %1$s compartilhada por você com%2$s", + "This is the password:" : "Essa é a senha:", + "You can choose a different password at any time in the share dialog." : "Você pode escolher uma senha diferente a qualquer momento no diálogo compartilhamento.", + "Could not find share" : "Não foi possível encontrar o compartilhamento", + "Share provider which allows you to share files by mail" : "Provedor de compartilhamento que permite compartilhar arquivos por e-mail", + "Unable to update share by mail config" : "Não foi possível atualizar a configuração do aplicativo compartilhamento por e-mail", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Permite que as pessoas compartilhem um link personalizado para um arquivo ou pasta inserindo um endereço de e-mail.", + "Send password by mail" : "Enviar senha por e-mail", + "Reply to initiator" : "Responder ao iniciador" +},"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/sharebymail/l10n/ru.js b/apps/sharebymail/l10n/ru.js new file mode 100644 index 00000000000..0ee054c416f --- /dev/null +++ b/apps/sharebymail/l10n/ru.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Предоставлен общий доступ для {email}", + "Shared with {email} by {actor}" : "{actor} предоставил(а) общий доступ для {email}", + "Unshared from {email}" : "Закрыт общий доступ для {email}", + "Unshared from {email} by {actor}" : "{actor} закрыл(а) общий доступ для {email}", + "Password for mail share sent to {email}" : "Пароль для доступа по адресу электронной почты был отправлен на адрес {email}", + "Password for mail share sent to you" : "Вам отправлен пароль для доступа", + "You shared {file} with {email} by mail" : "Вы предоставили общий доступ к «{file}» для {email} по электронной почте", + "{actor} shared {file} with {email} by mail" : "{actor} предоставил(а) общий доступ к «{file}» для {email} по электронной почте", + "You unshared {file} from {email} by mail" : "Вы закрыли общий доступ к «{file}» для {email} по электронной почте", + "{actor} unshared {file} from {email} by mail" : "{actor} закрыл(а) общий доступ к «{file}» для {email} по электронной почте", + "Password to access {file} was sent to {email}" : "Пароль для доступа к «{file}» был отправлен на адрес {email}", + "Password to access {file} was sent to you" : "Вам был отправлен пароль для доступа к «{file}»", + "Share by mail" : "Поделиться по почте", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Не удалось предоставить доступ к %1$s, так как этот ресурс уже доступен пользователю %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Мы не можем отправить вам автоматически сгенерированный пароль. Укажите действующий адрес электронной почты в личных настройках и повторите попытку.", + "Failed to send share by email. Got an invalid email address" : "Не удалось отправить ссылку общего доступа по электронной почте. Получен неверный адрес электронной почты", + "Failed to send share by email" : "Не удалось предоставить общий доступ по адресу электронной почты", + "%1$s shared %2$s with you" : "%1$s поделился(ась) %2$s с вами", + "Note:" : "Примечание:", + "This share is valid until %s at midnight" : "Общий ресурс будет действителен до полуночи %s", + "Expiration:" : "Срок действия:", + "Open %s" : "Открыть %s", + "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поделился(ась) с вами %2$s. Вы должны были получить отдельное письмо со ссылкой для доступа.", + "Password to access %1$s shared to you by %2$s" : "Пароль для доступа к %1$s, предоставленному вам пользователем %2$s", + "Password to access %s" : "Пароль для доступа к %s", + "It is protected with the following password:" : "Доступ защищён следующим паролем: ", + "This password will expire at %s" : "Срок действия этого пароля завершится %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поделился(ась) %2$s с вами и хочет добавить:", + "%1$s shared %2$s with you and wants to add" : "%1$s поделился(ась) %2$s с вами и хочет добавить", + "%s added a note to a file shared with you" : "%s добавил(а) заметку к файлу, которым поделился(ась) с вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вы только что поделились %1$s с %2$s. Ссылка на доступ уже отправлена получателю. Согласно политике безопасности, установленной администратором %3$s, каждый общий ресурс должен быть защищён паролем, и его запрещено отправлять пароль напрямую получателю. Пожалуйста, передайте пароль самостоятельно.", + "Password to access %1$s shared by you with %2$s" : "Пароль для доступа к %1$s, которым вы поделились с %2$s", + "This is the password:" : "Пароль: ", + "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».", + "Could not find share" : "Не удалось найти общий ресурс", + "Share provider which allows you to share files by mail" : "Приложение для обмена файлами с помощью электронной почты", + "Unable to update share by mail config" : "Невозможно обновить конфигурацию общего доступа по почте", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Позволить пользователям делиться персонализированной ссылкой на файл или папку, указав адрес электронной почты.", + "Send password by mail" : "Отправлять пароль по электронной почте", + "Reply to initiator" : "Направлять ответ инициатору" +}, +"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/sharebymail/l10n/ru.json b/apps/sharebymail/l10n/ru.json new file mode 100644 index 00000000000..d7bf86c5657 --- /dev/null +++ b/apps/sharebymail/l10n/ru.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Предоставлен общий доступ для {email}", + "Shared with {email} by {actor}" : "{actor} предоставил(а) общий доступ для {email}", + "Unshared from {email}" : "Закрыт общий доступ для {email}", + "Unshared from {email} by {actor}" : "{actor} закрыл(а) общий доступ для {email}", + "Password for mail share sent to {email}" : "Пароль для доступа по адресу электронной почты был отправлен на адрес {email}", + "Password for mail share sent to you" : "Вам отправлен пароль для доступа", + "You shared {file} with {email} by mail" : "Вы предоставили общий доступ к «{file}» для {email} по электронной почте", + "{actor} shared {file} with {email} by mail" : "{actor} предоставил(а) общий доступ к «{file}» для {email} по электронной почте", + "You unshared {file} from {email} by mail" : "Вы закрыли общий доступ к «{file}» для {email} по электронной почте", + "{actor} unshared {file} from {email} by mail" : "{actor} закрыл(а) общий доступ к «{file}» для {email} по электронной почте", + "Password to access {file} was sent to {email}" : "Пароль для доступа к «{file}» был отправлен на адрес {email}", + "Password to access {file} was sent to you" : "Вам был отправлен пароль для доступа к «{file}»", + "Share by mail" : "Поделиться по почте", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Не удалось предоставить доступ к %1$s, так как этот ресурс уже доступен пользователю %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Мы не можем отправить вам автоматически сгенерированный пароль. Укажите действующий адрес электронной почты в личных настройках и повторите попытку.", + "Failed to send share by email. Got an invalid email address" : "Не удалось отправить ссылку общего доступа по электронной почте. Получен неверный адрес электронной почты", + "Failed to send share by email" : "Не удалось предоставить общий доступ по адресу электронной почты", + "%1$s shared %2$s with you" : "%1$s поделился(ась) %2$s с вами", + "Note:" : "Примечание:", + "This share is valid until %s at midnight" : "Общий ресурс будет действителен до полуночи %s", + "Expiration:" : "Срок действия:", + "Open %s" : "Открыть %s", + "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поделился(ась) с вами %2$s. Вы должны были получить отдельное письмо со ссылкой для доступа.", + "Password to access %1$s shared to you by %2$s" : "Пароль для доступа к %1$s, предоставленному вам пользователем %2$s", + "Password to access %s" : "Пароль для доступа к %s", + "It is protected with the following password:" : "Доступ защищён следующим паролем: ", + "This password will expire at %s" : "Срок действия этого пароля завершится %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поделился(ась) %2$s с вами и хочет добавить:", + "%1$s shared %2$s with you and wants to add" : "%1$s поделился(ась) %2$s с вами и хочет добавить", + "%s added a note to a file shared with you" : "%s добавил(а) заметку к файлу, которым поделился(ась) с вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Вы только что поделились %1$s с %2$s. Ссылка на доступ уже отправлена получателю. Согласно политике безопасности, установленной администратором %3$s, каждый общий ресурс должен быть защищён паролем, и его запрещено отправлять пароль напрямую получателю. Пожалуйста, передайте пароль самостоятельно.", + "Password to access %1$s shared by you with %2$s" : "Пароль для доступа к %1$s, которым вы поделились с %2$s", + "This is the password:" : "Пароль: ", + "You can choose a different password at any time in the share dialog." : "В любой момент можно выбрать другой пароль в диалоге «Общий доступ».", + "Could not find share" : "Не удалось найти общий ресурс", + "Share provider which allows you to share files by mail" : "Приложение для обмена файлами с помощью электронной почты", + "Unable to update share by mail config" : "Невозможно обновить конфигурацию общего доступа по почте", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Позволить пользователям делиться персонализированной ссылкой на файл или папку, указав адрес электронной почты.", + "Send password by mail" : "Отправлять пароль по электронной почте", + "Reply to initiator" : "Направлять ответ инициатору" +},"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/sharebymail/l10n/sc.js b/apps/sharebymail/l10n/sc.js new file mode 100644 index 00000000000..c149fddf7bc --- /dev/null +++ b/apps/sharebymail/l10n/sc.js @@ -0,0 +1,28 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Cumpartzidu cun {email}", + "Shared with {email} by {actor}" : "Cumpartzidu cun {email} dae {actor}", + "Unshared from {email}" : "Cumpartzidura annullada {email}", + "Unshared from {email} by {actor}" : "Cumpartzidura annullada dae {email} dae {actor}", + "Password for mail share sent to {email}" : "Crae pro sa cumpartzidura cun posta eletrònica imbiada a {email}", + "Password for mail share sent to you" : "Crae pro sa cumpartzidura cun posta eletrònica imbiada a tie", + "You shared {file} with {email} by mail" : "As cumpartzidu {file} cun {email} tràmite posta eletrònica", + "{actor} shared {file} with {email} by mail" : "{actor} at cumpartzidu {file} cun {email} tràmite posta eletrònica", + "You unshared {file} from {email} by mail" : "As annulladu sa cumpartzidura de {file} dae {email} tràmite posta eletrònica", + "{actor} unshared {file} from {email} by mail" : "{actor} at annulladu sa cumpartzidura de {file} dae {email} tràmite posta eletrònica", + "Password to access {file} was sent to {email}" : "Sa crae pro s'atzessu a {file} est istada imbiada a {email}", + "Password to access {file} was sent to you" : "Sa crae pro s'atzessu a {file} est istada imbiada a tie", + "Share by mail" : "Cumpartzi tràmite posta eletrònica", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Impossìbile a t'imbiare sa crae auto-generada. Cunfigura un'indiritzu de posta eletrònica bàlidu in sa cunfiguratzione personale e torra a proare.", + "Failed to send share by email" : "No at fatu a fàghere sa cumpartzidura tràmite posta eletrònica", + "%1$s via %2$s" : "%1$s cun %2$s", + "It is protected with the following password:" : "Est amparadu cun sa crae in fatu:", + "This is the password:" : "Custa est sa crae:", + "You can choose a different password at any time in the share dialog." : "Podes seberare una crae diferente in ogni momentu in sa ventana de cumpartzidura.", + "Could not find share" : "No at fatu a agatare sa cumpartzidura", + "Share provider which allows you to share files by mail" : "Frunidore de cumpartzidura chi ti permitit de cumpartzire archìvios tràmite posta eletrònica", + "Send password by mail" : "Imbia crae tràmite posta eletrònica", + "Reply to initiator" : "Risponde a chie cumintzat" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/sc.json b/apps/sharebymail/l10n/sc.json new file mode 100644 index 00000000000..22fae4e8265 --- /dev/null +++ b/apps/sharebymail/l10n/sc.json @@ -0,0 +1,26 @@ +{ "translations": { + "Shared with {email}" : "Cumpartzidu cun {email}", + "Shared with {email} by {actor}" : "Cumpartzidu cun {email} dae {actor}", + "Unshared from {email}" : "Cumpartzidura annullada {email}", + "Unshared from {email} by {actor}" : "Cumpartzidura annullada dae {email} dae {actor}", + "Password for mail share sent to {email}" : "Crae pro sa cumpartzidura cun posta eletrònica imbiada a {email}", + "Password for mail share sent to you" : "Crae pro sa cumpartzidura cun posta eletrònica imbiada a tie", + "You shared {file} with {email} by mail" : "As cumpartzidu {file} cun {email} tràmite posta eletrònica", + "{actor} shared {file} with {email} by mail" : "{actor} at cumpartzidu {file} cun {email} tràmite posta eletrònica", + "You unshared {file} from {email} by mail" : "As annulladu sa cumpartzidura de {file} dae {email} tràmite posta eletrònica", + "{actor} unshared {file} from {email} by mail" : "{actor} at annulladu sa cumpartzidura de {file} dae {email} tràmite posta eletrònica", + "Password to access {file} was sent to {email}" : "Sa crae pro s'atzessu a {file} est istada imbiada a {email}", + "Password to access {file} was sent to you" : "Sa crae pro s'atzessu a {file} est istada imbiada a tie", + "Share by mail" : "Cumpartzi tràmite posta eletrònica", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Impossìbile a t'imbiare sa crae auto-generada. Cunfigura un'indiritzu de posta eletrònica bàlidu in sa cunfiguratzione personale e torra a proare.", + "Failed to send share by email" : "No at fatu a fàghere sa cumpartzidura tràmite posta eletrònica", + "%1$s via %2$s" : "%1$s cun %2$s", + "It is protected with the following password:" : "Est amparadu cun sa crae in fatu:", + "This is the password:" : "Custa est sa crae:", + "You can choose a different password at any time in the share dialog." : "Podes seberare una crae diferente in ogni momentu in sa ventana de cumpartzidura.", + "Could not find share" : "No at fatu a agatare sa cumpartzidura", + "Share provider which allows you to share files by mail" : "Frunidore de cumpartzidura chi ti permitit de cumpartzire archìvios tràmite posta eletrònica", + "Send password by mail" : "Imbia crae tràmite posta eletrònica", + "Reply to initiator" : "Risponde a chie cumintzat" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/sk.js b/apps/sharebymail/l10n/sk.js new file mode 100644 index 00000000000..65282aba5c1 --- /dev/null +++ b/apps/sharebymail/l10n/sk.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Sprístupnené pre {email}", + "Shared with {email} by {actor}" : "Sprístupnené {email} používateľom {actor}", + "Unshared from {email}" : "Zdieľanie zrušené od {email}", + "Unshared from {email} by {actor}" : "{actor} zrušil zdieľanie od {email}", + "Password for mail share sent to {email}" : "Heslo pre zdieľanie bolo zaslané {email}", + "Password for mail share sent to you" : "Heslo pre zdieľanie Vám bolo zaslané", + "You shared {file} with {email} by mail" : "Sprístupnili ste {file} používateľovi {email} pomocou emailu", + "{actor} shared {file} with {email} by mail" : "{actor} sprístupnil {file} používateľovi {email} pomocou emailu", + "You unshared {file} from {email} by mail" : "E-mailom ste zrušili zdieľanie {file} od {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} e-mailom zrušil zdieľanie {file} od {email}", + "Password to access {file} was sent to {email}" : "Heslo pre zdieľanie {file} bolo zaslané na {email}", + "Password to access {file} was sent to you" : "Heslo pre zdieľanie {file} Vám bolo zaslané", + "Share by mail" : "Sprístupniť e-mailom", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Zdieľanie %1$s zlyhalo, pretože táto položka už je užívateľovi %2$s zozdieľaná.", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vygenerované heslo Vám nemôže byť zaslané. Zadajte správnu mailovú adresu vo Vašich osobných nastaveniach a skúste znovu.", + "Failed to send share by email. Got an invalid email address" : "Odoslanie zdieľania e-mailom zlyhalo. Máte neplatnú e-mailovú adresu", + "Failed to send share by email" : "Zaslanie sprístupnenia cez e-mail zlyhalo", + "%1$s shared %2$s with you" : "%1$s s vami zdieľal %2$s ", + "Note:" : "Poznámka:", + "This share is valid until %s at midnight" : "Toto zdieľanie je platné do %s po polnoci", + "Expiration:" : "Expirácia:", + "Open %s" : "Otvoriť %s", + "%1$s via %2$s" : "%1$s cez %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s s vami zdieľal %2$s. Správa s odkazom by Vám už mala byť doručená.", + "Password to access %1$s shared to you by %2$s" : "Heslo pre prístup k %1$s s vami zdieľal %2$s", + "Password to access %s" : "Heslo pre prístup k %s", + "It is protected with the following password:" : "Je chránené nasledovným heslom:", + "This password will expire at %s" : "Platnosť tohto hesla končí v %s.", + "%1$s shared %2$s with you and wants to add:" : "%1$s zdieľal %2$s s vami a chce pridať:", + "%1$s shared %2$s with you and wants to add" : "%1$s zdieľal %2$s s vami a chce pridať", + "%s added a note to a file shared with you" : "%s pridal poznámku k súboru ktorý s vami zdieľa", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Práve ste zdieľali %1$s s %2$s. Zdieľanie už bolo odoslané príjemcovi. Z dôvodu bezpečnostných pravidiel definovaných správcom %3$s musí byť každá zdieľaná položka chránená heslom, ktoré nemôže byť priamo poslané príjemcovi. Preto musíte heslo poslať príjemcovi ručne.", + "Password to access %1$s shared by you with %2$s" : "Heslo pre prístup k %1$s zdieľate s %2$s", + "This is the password:" : "Toto je heslo:", + "You can choose a different password at any time in the share dialog." : "Kedykoľvek môžete vybrať iné heslo v okne zdieľania.", + "Could not find share" : "Nebolo možné nájsť zdieľanie", + "Share provider which allows you to share files by mail" : "Poskytovateľ zdieľania umožňuje zdieľať súbory pomocou e-mailu", + "Unable to update share by mail config" : "Nepodarila sa aktualizovať konfigurácia zdieľania prostredníctvom e-mailu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Umožňuje ľuďom zdieľať prispôsobený odkaz na súbor alebo priečinok zadaním e-mailovej adresy.", + "Send password by mail" : "Odoslať heslo e-mailom", + "Reply to initiator" : "Odpovedať iniciátorovi" +}, +"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/sharebymail/l10n/sk.json b/apps/sharebymail/l10n/sk.json new file mode 100644 index 00000000000..f88f46854c7 --- /dev/null +++ b/apps/sharebymail/l10n/sk.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Sprístupnené pre {email}", + "Shared with {email} by {actor}" : "Sprístupnené {email} používateľom {actor}", + "Unshared from {email}" : "Zdieľanie zrušené od {email}", + "Unshared from {email} by {actor}" : "{actor} zrušil zdieľanie od {email}", + "Password for mail share sent to {email}" : "Heslo pre zdieľanie bolo zaslané {email}", + "Password for mail share sent to you" : "Heslo pre zdieľanie Vám bolo zaslané", + "You shared {file} with {email} by mail" : "Sprístupnili ste {file} používateľovi {email} pomocou emailu", + "{actor} shared {file} with {email} by mail" : "{actor} sprístupnil {file} používateľovi {email} pomocou emailu", + "You unshared {file} from {email} by mail" : "E-mailom ste zrušili zdieľanie {file} od {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} e-mailom zrušil zdieľanie {file} od {email}", + "Password to access {file} was sent to {email}" : "Heslo pre zdieľanie {file} bolo zaslané na {email}", + "Password to access {file} was sent to you" : "Heslo pre zdieľanie {file} Vám bolo zaslané", + "Share by mail" : "Sprístupniť e-mailom", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Zdieľanie %1$s zlyhalo, pretože táto položka už je užívateľovi %2$s zozdieľaná.", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vygenerované heslo Vám nemôže byť zaslané. Zadajte správnu mailovú adresu vo Vašich osobných nastaveniach a skúste znovu.", + "Failed to send share by email. Got an invalid email address" : "Odoslanie zdieľania e-mailom zlyhalo. Máte neplatnú e-mailovú adresu", + "Failed to send share by email" : "Zaslanie sprístupnenia cez e-mail zlyhalo", + "%1$s shared %2$s with you" : "%1$s s vami zdieľal %2$s ", + "Note:" : "Poznámka:", + "This share is valid until %s at midnight" : "Toto zdieľanie je platné do %s po polnoci", + "Expiration:" : "Expirácia:", + "Open %s" : "Otvoriť %s", + "%1$s via %2$s" : "%1$s cez %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s s vami zdieľal %2$s. Správa s odkazom by Vám už mala byť doručená.", + "Password to access %1$s shared to you by %2$s" : "Heslo pre prístup k %1$s s vami zdieľal %2$s", + "Password to access %s" : "Heslo pre prístup k %s", + "It is protected with the following password:" : "Je chránené nasledovným heslom:", + "This password will expire at %s" : "Platnosť tohto hesla končí v %s.", + "%1$s shared %2$s with you and wants to add:" : "%1$s zdieľal %2$s s vami a chce pridať:", + "%1$s shared %2$s with you and wants to add" : "%1$s zdieľal %2$s s vami a chce pridať", + "%s added a note to a file shared with you" : "%s pridal poznámku k súboru ktorý s vami zdieľa", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Práve ste zdieľali %1$s s %2$s. Zdieľanie už bolo odoslané príjemcovi. Z dôvodu bezpečnostných pravidiel definovaných správcom %3$s musí byť každá zdieľaná položka chránená heslom, ktoré nemôže byť priamo poslané príjemcovi. Preto musíte heslo poslať príjemcovi ručne.", + "Password to access %1$s shared by you with %2$s" : "Heslo pre prístup k %1$s zdieľate s %2$s", + "This is the password:" : "Toto je heslo:", + "You can choose a different password at any time in the share dialog." : "Kedykoľvek môžete vybrať iné heslo v okne zdieľania.", + "Could not find share" : "Nebolo možné nájsť zdieľanie", + "Share provider which allows you to share files by mail" : "Poskytovateľ zdieľania umožňuje zdieľať súbory pomocou e-mailu", + "Unable to update share by mail config" : "Nepodarila sa aktualizovať konfigurácia zdieľania prostredníctvom e-mailu", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Umožňuje ľuďom zdieľať prispôsobený odkaz na súbor alebo priečinok zadaním e-mailovej adresy.", + "Send password by mail" : "Odoslať heslo e-mailom", + "Reply to initiator" : "Odpovedať iniciátorovi" +},"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/sharebymail/l10n/sl.js b/apps/sharebymail/l10n/sl.js new file mode 100644 index 00000000000..cebd8761152 --- /dev/null +++ b/apps/sharebymail/l10n/sl.js @@ -0,0 +1,31 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "V skupni rabi po {email}", + "Shared with {email} by {actor}" : "{actor} omogoči souporabo po {email}", + "Unshared from {email}" : "Souporaba z naslovom {email} je prekinjena", + "Unshared from {email} by {actor}" : "{actor} onemogoči souporabo z naslovom {email}", + "Password for mail share sent to {email}" : "Geslo za dostop je bilo poslano na {email}.", + "Password for mail share sent to you" : "Poslano vam je bilo geslo za dostop", + "You shared {file} with {email} by mail" : "Omogočite souporabo datoteke {file} prek elektronskega naslova {email}.", + "{actor} shared {file} with {email} by mail" : "{actor} omogoči souporabo datoteke {file} prek elektronskega naslova {email}.", + "You unshared {file} from {email} by mail" : "Onemogočite souporabo datoteke {file} prek elektronskega naslova {email}.", + "{actor} unshared {file} from {email} by mail" : "{actor} onemogoči souporabo datoteke {file} prek elektronskega naslova {email}.", + "Password to access {file} was sent to {email}" : "Geslo za dostop do datoteke {file} je bilo poslano na {email}.", + "Password to access {file} was sent to you" : "Geslo za dostop do datoteke {file} je bilo poslano vaš elektronski naslov.", + "Share by mail" : "Souporaba prek elektronske pošte", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Nastavljanje souporabe %1$s je spodletelo, ker je predmet že v souporabi z računom %2$s.", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Samodejno ustvarjenega gesla ni mogoče poslati. Najprej je treba nastaviti veljavni elektronski naslov med osebnimi nastavitvami.", + "Failed to send share by email" : "Pošiljanje povezave po elektronski pošti je spodletelo.", + "Note:" : "Opomba:", + "%1$s via %2$s" : "%1$s prek %2$s", + "It is protected with the following password:" : "Zaščiten je z geslom:", + "This password will expire at %s" : "Geslo bo poteklo %s", + "This is the password:" : "Geslo:", + "You can choose a different password at any time in the share dialog." : "Geslo je mogoče kadarkoli spremeniti med nastavitvami souporabe.", + "Could not find share" : "Mape v souporabi ni mogoče najti", + "Share provider which allows you to share files by mail" : "Ponudnik souporabe, ki omogoča souporabo datotek prek elektronske pošte", + "Send password by mail" : "Pošlji geslo po elektronski pošti", + "Reply to initiator" : "Odgovori pošiljatelju" +}, +"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/sharebymail/l10n/sl.json b/apps/sharebymail/l10n/sl.json new file mode 100644 index 00000000000..b3b0ca9667b --- /dev/null +++ b/apps/sharebymail/l10n/sl.json @@ -0,0 +1,29 @@ +{ "translations": { + "Shared with {email}" : "V skupni rabi po {email}", + "Shared with {email} by {actor}" : "{actor} omogoči souporabo po {email}", + "Unshared from {email}" : "Souporaba z naslovom {email} je prekinjena", + "Unshared from {email} by {actor}" : "{actor} onemogoči souporabo z naslovom {email}", + "Password for mail share sent to {email}" : "Geslo za dostop je bilo poslano na {email}.", + "Password for mail share sent to you" : "Poslano vam je bilo geslo za dostop", + "You shared {file} with {email} by mail" : "Omogočite souporabo datoteke {file} prek elektronskega naslova {email}.", + "{actor} shared {file} with {email} by mail" : "{actor} omogoči souporabo datoteke {file} prek elektronskega naslova {email}.", + "You unshared {file} from {email} by mail" : "Onemogočite souporabo datoteke {file} prek elektronskega naslova {email}.", + "{actor} unshared {file} from {email} by mail" : "{actor} onemogoči souporabo datoteke {file} prek elektronskega naslova {email}.", + "Password to access {file} was sent to {email}" : "Geslo za dostop do datoteke {file} je bilo poslano na {email}.", + "Password to access {file} was sent to you" : "Geslo za dostop do datoteke {file} je bilo poslano vaš elektronski naslov.", + "Share by mail" : "Souporaba prek elektronske pošte", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Nastavljanje souporabe %1$s je spodletelo, ker je predmet že v souporabi z računom %2$s.", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Samodejno ustvarjenega gesla ni mogoče poslati. Najprej je treba nastaviti veljavni elektronski naslov med osebnimi nastavitvami.", + "Failed to send share by email" : "Pošiljanje povezave po elektronski pošti je spodletelo.", + "Note:" : "Opomba:", + "%1$s via %2$s" : "%1$s prek %2$s", + "It is protected with the following password:" : "Zaščiten je z geslom:", + "This password will expire at %s" : "Geslo bo poteklo %s", + "This is the password:" : "Geslo:", + "You can choose a different password at any time in the share dialog." : "Geslo je mogoče kadarkoli spremeniti med nastavitvami souporabe.", + "Could not find share" : "Mape v souporabi ni mogoče najti", + "Share provider which allows you to share files by mail" : "Ponudnik souporabe, ki omogoča souporabo datotek prek elektronske pošte", + "Send password by mail" : "Pošlji geslo po elektronski pošti", + "Reply to initiator" : "Odgovori pošiljatelju" +},"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/sharebymail/l10n/sr.js b/apps/sharebymail/l10n/sr.js new file mode 100644 index 00000000000..335a67828cb --- /dev/null +++ b/apps/sharebymail/l10n/sr.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Подељено са {email}", + "Shared with {email} by {actor}" : "{actor} поделио са {email}", + "Unshared from {email}" : "Уклоњено дељење са {email}", + "Unshared from {email} by {actor}" : "Уклоњено дељење са {email} од стране {actor}", + "Password for mail share sent to {email}" : "Лозинка за дељење е-поштом послата на {email}", + "Password for mail share sent to you" : "Лозинка за дељење е-поштом послата Вама", + "You shared {file} with {email} by mail" : "Поделили сте {file} са {email} е-поштом", + "{actor} shared {file} with {email} by mail" : "{actor} је поделио {file} са {email} е-поштом", + "You unshared {file} from {email} by mail" : "Мејлом сте уклонили дељење фајла {file} преко адресе {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} је мејлом уклонио дељење фајла {file} преко адресе {email}", + "Password to access {file} was sent to {email}" : "Лозинка за приступ {file} је послата на {email}", + "Password to access {file} was sent to you" : "Лозинка за приступ {file} Вам је послата ", + "Share by mail" : "Подели е-поштом", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Дељење %1$s није успело зато што се ова ставка већ дели са налогом %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не можемо да вам пошаљемо аутоматски генерисану лозинку. Молимо вас да у вашим личним подешавањима поставите исправну и-мејл адресу и покушате поново.", + "Failed to send share by email. Got an invalid email address" : "Слање дељења и-мејлом није успело. Добијена је неисправна и-мејл адреса", + "Failed to send share by email" : "Грешка у слању дељења е-поштом", + "%1$s shared %2$s with you" : "%1$s је поделио „%2$s” са вама", + "Note:" : "Белешка:", + "This share is valid until %s at midnight" : "Ово дељење важи до %s у поноћ", + "Expiration:" : "Истек:", + "Open %s" : "Отвори %s", + "%1$s via %2$s" : "%1$s преко %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s је поделио „%2$s” са вама. Требало би да сте већ добили посебан мејл са везом за приступ.", + "Password to access %1$s shared to you by %2$s" : "%2$s је са вама поделио приступ лозинком за %1$s", + "Password to access %s" : "Лозинка за приступ %s", + "It is protected with the following password:" : "Заштићена је следећом лозинком:", + "This password will expire at %s" : "Ова лозинка ће да истекне %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s је поделио %2$s са вама и жели да дода:", + "%1$s shared %2$s with you and wants to add" : "%1$s је поделио %2$s са вама и жели да дода", + "%s added a note to a file shared with you" : "%s је додао белешку на фајл који је поделио са вама", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Управо сте поделили %1$s са корисником %2$s. Дељење је већ послато примаоцу. Због безбедоносне политике коју је дефинисао администратор инстанце %3$s, свако дељење мора бити заштићено лозинком и није дозвољено да пошаљете лозинку директно кориснику. Због тога морате ручно послати лозинку примаоцу.", + "Password to access %1$s shared by you with %2$s" : "Корисник %2$s је поделио са вама лозинку за приступ %1$s", + "This is the password:" : "Ово је лозинка:", + "You can choose a different password at any time in the share dialog." : "Можете да одаберете другу лозинку кад год желите у дијалогу за дељење.", + "Could not find share" : "Не могу да пронађем дељење", + "Share provider which allows you to share files by mail" : "Добављач дељења који Вам дозвољава дељење е-поштом", + "Unable to update share by mail config" : "Није успело ажурирање конфигурације дељења путем и-мејла", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозвољава да људи поделе персонализовани линк на фајл или фолдер уносом имејл адресе.", + "Send password by mail" : "Пошаљи лозинку е-поштом", + "Reply to initiator" : "Одговор иницијатору" +}, +"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/sharebymail/l10n/sr.json b/apps/sharebymail/l10n/sr.json new file mode 100644 index 00000000000..9b6c9b524b8 --- /dev/null +++ b/apps/sharebymail/l10n/sr.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Подељено са {email}", + "Shared with {email} by {actor}" : "{actor} поделио са {email}", + "Unshared from {email}" : "Уклоњено дељење са {email}", + "Unshared from {email} by {actor}" : "Уклоњено дељење са {email} од стране {actor}", + "Password for mail share sent to {email}" : "Лозинка за дељење е-поштом послата на {email}", + "Password for mail share sent to you" : "Лозинка за дељење е-поштом послата Вама", + "You shared {file} with {email} by mail" : "Поделили сте {file} са {email} е-поштом", + "{actor} shared {file} with {email} by mail" : "{actor} је поделио {file} са {email} е-поштом", + "You unshared {file} from {email} by mail" : "Мејлом сте уклонили дељење фајла {file} преко адресе {email}", + "{actor} unshared {file} from {email} by mail" : "{actor} је мејлом уклонио дељење фајла {file} преко адресе {email}", + "Password to access {file} was sent to {email}" : "Лозинка за приступ {file} је послата на {email}", + "Password to access {file} was sent to you" : "Лозинка за приступ {file} Вам је послата ", + "Share by mail" : "Подели е-поштом", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Дељење %1$s није успело зато што се ова ставка већ дели са налогом %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Не можемо да вам пошаљемо аутоматски генерисану лозинку. Молимо вас да у вашим личним подешавањима поставите исправну и-мејл адресу и покушате поново.", + "Failed to send share by email. Got an invalid email address" : "Слање дељења и-мејлом није успело. Добијена је неисправна и-мејл адреса", + "Failed to send share by email" : "Грешка у слању дељења е-поштом", + "%1$s shared %2$s with you" : "%1$s је поделио „%2$s” са вама", + "Note:" : "Белешка:", + "This share is valid until %s at midnight" : "Ово дељење важи до %s у поноћ", + "Expiration:" : "Истек:", + "Open %s" : "Отвори %s", + "%1$s via %2$s" : "%1$s преко %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s је поделио „%2$s” са вама. Требало би да сте већ добили посебан мејл са везом за приступ.", + "Password to access %1$s shared to you by %2$s" : "%2$s је са вама поделио приступ лозинком за %1$s", + "Password to access %s" : "Лозинка за приступ %s", + "It is protected with the following password:" : "Заштићена је следећом лозинком:", + "This password will expire at %s" : "Ова лозинка ће да истекне %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s је поделио %2$s са вама и жели да дода:", + "%1$s shared %2$s with you and wants to add" : "%1$s је поделио %2$s са вама и жели да дода", + "%s added a note to a file shared with you" : "%s је додао белешку на фајл који је поделио са вама", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Управо сте поделили %1$s са корисником %2$s. Дељење је већ послато примаоцу. Због безбедоносне политике коју је дефинисао администратор инстанце %3$s, свако дељење мора бити заштићено лозинком и није дозвољено да пошаљете лозинку директно кориснику. Због тога морате ручно послати лозинку примаоцу.", + "Password to access %1$s shared by you with %2$s" : "Корисник %2$s је поделио са вама лозинку за приступ %1$s", + "This is the password:" : "Ово је лозинка:", + "You can choose a different password at any time in the share dialog." : "Можете да одаберете другу лозинку кад год желите у дијалогу за дељење.", + "Could not find share" : "Не могу да пронађем дељење", + "Share provider which allows you to share files by mail" : "Добављач дељења који Вам дозвољава дељење е-поштом", + "Unable to update share by mail config" : "Није успело ажурирање конфигурације дељења путем и-мејла", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозвољава да људи поделе персонализовани линк на фајл или фолдер уносом имејл адресе.", + "Send password by mail" : "Пошаљи лозинку е-поштом", + "Reply to initiator" : "Одговор иницијатору" +},"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/sharebymail/l10n/sv.js b/apps/sharebymail/l10n/sv.js new file mode 100644 index 00000000000..7190a681b07 --- /dev/null +++ b/apps/sharebymail/l10n/sv.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Delad med {email}", + "Shared with {email} by {actor}" : "Delad med {email} av {actor}", + "Unshared from {email}" : "Delning med {email} borttagen", + "Unshared from {email} by {actor}" : " Delning med {email} borttagen av {actor}", + "Password for mail share sent to {email}" : "Lösenord för e-postdelning skickat till {email}", + "Password for mail share sent to you" : "Lösenord för e-postdelning skickat till dig", + "You shared {file} with {email} by mail" : "Du delade {file} med {email} via e-post", + "{actor} shared {file} with {email} by mail" : "{actor} delade {file} med {email} via e-post", + "You unshared {file} from {email} by mail" : "Du slutade dela {file} från {email} via e-post", + "{actor} unshared {file} from {email} by mail" : "{actor} slutade dela {file} via e-post med {email}", + "Password to access {file} was sent to {email}" : "Lösenord för åtkomst till {file} skickades till {email}", + "Password to access {file} was sent to you" : "Lösenord för åtkomst till {file} skickades till dig", + "Share by mail" : "Dela via e-post", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Delning av %1$s misslyckades eftersom det här objektet redan delas med kontot %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan inte skicka det autogenererade lösenordet till dig. Vänligen ange en giltig e-postadress i dina personliga inställningar och försök igen.", + "Failed to send share by email. Got an invalid email address" : "Kunde inte skicka delning via e-post. Ogiltig e-postadress.", + "Failed to send share by email" : "Kunde inte skicka delning via e-post", + "%1$s shared %2$s with you" : "%1$s delade %2$s med dig", + "Note:" : "Notera:", + "This share is valid until %s at midnight" : "Denna delning gäller t.o.m %s vid midnatt", + "Expiration:" : "Upphör:", + "Open %s" : "Öppna %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delade %2$s med dig. Du bör redan ha fått ett separat e-postmeddelande med en länk för åtkomst.", + "Password to access %1$s shared to you by %2$s" : "Lösenord för åtkomst till %1$s delad med dig av %2$s", + "Password to access %s" : "Lösenord för åtkomst till %s", + "It is protected with the following password:" : "Den är skyddad med följande lösenord:", + "This password will expire at %s" : "Detta lösenord kommer upphöra %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s delade %2$s med dig och vill lägga till:", + "%1$s shared %2$s with you and wants to add" : "%1$s delade %2$s med dig och vill lägga till", + "%s added a note to a file shared with you" : "%s lade till en kommentar till en fil som delats med dig", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delade precis %1$s med %2$s. Delningen var redan skickat till mottagaren. På grund av den definierade säkerhetspolicyn av %3$s så måste varje delning vara lösenordsskyddad, och det är inte tillåtet att skicka lösenordet direkt till mottagaren. Du behöver därför vidarebefordra lösenordet manuellt till mottagaren.", + "Password to access %1$s shared by you with %2$s" : "Lösenord för åtkomst till %1$s delad av dig med %2$s", + "This is the password:" : "Detta är lösenordet:", + "You can choose a different password at any time in the share dialog." : "Du kan välja ett annat lösenord när som helst i delningsdialogen.", + "Could not find share" : "Kunde inte hitta delning", + "Share provider which allows you to share files by mail" : "Möjliggör delning av filer via e-post", + "Unable to update share by mail config" : "Kunde inte uppdatera konfiguration för delning via e-post", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Tillåter personer att dela en personlig länk till en fil eller mapp genom att ange en e-postadress.", + "Send password by mail" : "Skicka lösenord via e-post", + "Reply to initiator" : "Svara till avsändaren" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/sv.json b/apps/sharebymail/l10n/sv.json new file mode 100644 index 00000000000..1fa40a5a2e1 --- /dev/null +++ b/apps/sharebymail/l10n/sv.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Delad med {email}", + "Shared with {email} by {actor}" : "Delad med {email} av {actor}", + "Unshared from {email}" : "Delning med {email} borttagen", + "Unshared from {email} by {actor}" : " Delning med {email} borttagen av {actor}", + "Password for mail share sent to {email}" : "Lösenord för e-postdelning skickat till {email}", + "Password for mail share sent to you" : "Lösenord för e-postdelning skickat till dig", + "You shared {file} with {email} by mail" : "Du delade {file} med {email} via e-post", + "{actor} shared {file} with {email} by mail" : "{actor} delade {file} med {email} via e-post", + "You unshared {file} from {email} by mail" : "Du slutade dela {file} från {email} via e-post", + "{actor} unshared {file} from {email} by mail" : "{actor} slutade dela {file} via e-post med {email}", + "Password to access {file} was sent to {email}" : "Lösenord för åtkomst till {file} skickades till {email}", + "Password to access {file} was sent to you" : "Lösenord för åtkomst till {file} skickades till dig", + "Share by mail" : "Dela via e-post", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Delning av %1$s misslyckades eftersom det här objektet redan delas med kontot %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Vi kan inte skicka det autogenererade lösenordet till dig. Vänligen ange en giltig e-postadress i dina personliga inställningar och försök igen.", + "Failed to send share by email. Got an invalid email address" : "Kunde inte skicka delning via e-post. Ogiltig e-postadress.", + "Failed to send share by email" : "Kunde inte skicka delning via e-post", + "%1$s shared %2$s with you" : "%1$s delade %2$s med dig", + "Note:" : "Notera:", + "This share is valid until %s at midnight" : "Denna delning gäller t.o.m %s vid midnatt", + "Expiration:" : "Upphör:", + "Open %s" : "Öppna %s", + "%1$s via %2$s" : "%1$s via %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s delade %2$s med dig. Du bör redan ha fått ett separat e-postmeddelande med en länk för åtkomst.", + "Password to access %1$s shared to you by %2$s" : "Lösenord för åtkomst till %1$s delad med dig av %2$s", + "Password to access %s" : "Lösenord för åtkomst till %s", + "It is protected with the following password:" : "Den är skyddad med följande lösenord:", + "This password will expire at %s" : "Detta lösenord kommer upphöra %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s delade %2$s med dig och vill lägga till:", + "%1$s shared %2$s with you and wants to add" : "%1$s delade %2$s med dig och vill lägga till", + "%s added a note to a file shared with you" : "%s lade till en kommentar till en fil som delats med dig", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Du delade precis %1$s med %2$s. Delningen var redan skickat till mottagaren. På grund av den definierade säkerhetspolicyn av %3$s så måste varje delning vara lösenordsskyddad, och det är inte tillåtet att skicka lösenordet direkt till mottagaren. Du behöver därför vidarebefordra lösenordet manuellt till mottagaren.", + "Password to access %1$s shared by you with %2$s" : "Lösenord för åtkomst till %1$s delad av dig med %2$s", + "This is the password:" : "Detta är lösenordet:", + "You can choose a different password at any time in the share dialog." : "Du kan välja ett annat lösenord när som helst i delningsdialogen.", + "Could not find share" : "Kunde inte hitta delning", + "Share provider which allows you to share files by mail" : "Möjliggör delning av filer via e-post", + "Unable to update share by mail config" : "Kunde inte uppdatera konfiguration för delning via e-post", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Tillåter personer att dela en personlig länk till en fil eller mapp genom att ange en e-postadress.", + "Send password by mail" : "Skicka lösenord via e-post", + "Reply to initiator" : "Svara till avsändaren" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/tr.js b/apps/sharebymail/l10n/tr.js new file mode 100644 index 00000000000..bf8ca8713eb --- /dev/null +++ b/apps/sharebymail/l10n/tr.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "{email} ile paylaşıldı", + "Shared with {email} by {actor}" : "{email} ile {actor} tarafından paylaşıldı", + "Unshared from {email}" : "{email} ile paylaşımı kaldırıldı", + "Unshared from {email} by {actor}" : "{actor} tarafından {email} ile paylaşılması durduruldu", + "Password for mail share sent to {email}" : "E-posta ile paylaşım parolası {email} adresine gönderildi", + "Password for mail share sent to you" : "E-posta ile paylaşım parolası size gönderildi", + "You shared {file} with {email} by mail" : "{file} dosyasını {email} ile e-posta üzerinden paylaştınız", + "{actor} shared {file} with {email} by mail" : "{actor}, {file} dosyasını {email} ile e-posta üzerinden paylaştı", + "You unshared {file} from {email} by mail" : "{file} dosyasının {email} ile paylaşımını e-posta ile kaldırdınız", + "{actor} unshared {file} from {email} by mail" : "{actor}, {file} dosyasının {email} ile paylaşımını e-posta ile kaldırdı", + "Password to access {file} was sent to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", + "Password to access {file} was sent to you" : "{file} dosyasına erişim parolası size gönderildi", + "Share by mail" : "E-posta ile paylaşım", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s paylaşılamadı. Bu öge zaten %2$s hesabı ile paylaşılmış", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Otomatik oluşturulan parola size gönderilemedi. Lütfen kişisel ayarlarınızdan geçerli bir e-posta adresi ayarlayın ve yeniden deneyin.", + "Failed to send share by email. Got an invalid email address" : "Paylaşım e-posta ile gönderilemedi. Bir e-posta adresi geçersiz", + "Failed to send share by email" : "Paylaşım e-postası gönderilemedi", + "%1$s shared %2$s with you" : "%1$s, sizinle %2$s ögesini paylaştı", + "Note:" : "Not:", + "This share is valid until %s at midnight" : "Bu paylaşım %s gece yarısına kadar kullanılabilir", + "Expiration:" : "Geçerlilik süresi sonu:", + "Open %s" : "%s aç", + "%1$s via %2$s" : "%1$s, %2$s aracılığıyla", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s sizinle %2$s ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.", + "Password to access %1$s shared to you by %2$s" : "%1$s için sizin tarafınızdan %2$s üzerinden paylaşılan erişim parolası", + "Password to access %s" : "%s erişimi parolası", + "It is protected with the following password:" : "Şu parola ile korunuyor:", + "This password will expire at %s" : "Bu parolanın geçerlilik süresi %s tarihinde dolacak", + "%1$s shared %2$s with you and wants to add:" : "%1$s sizinle %2$s ögesini paylaştı ve eklemenizi istiyor:", + "%1$s shared %2$s with you and wants to add" : "%1$s sizinle %2$s ögesini paylaştı ve eklemenizi istiyor", + "%s added a note to a file shared with you" : "%s sizinle paylaştığı bir dosyaya bir not ekledi", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$s ögesini %2$s ile paylaştınız. Paylaşım alıcıya gönderildi. %3$s yöneticisi tarafından belirlenmiş güvenlik ilkelerine göre her bir paylaşım için bir parola belirtilmesi ve bu parolanın alıcıya doğrudan gönderilmemesi gerekiyor. Bu nedenle parolayı alıcıya el ile siz iletmelisiniz.", + "Password to access %1$s shared by you with %2$s" : "%1$s için %2$s üzerinden paylaştığınız erişim parolası", + "This is the password:" : "Parola:", + "You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.", + "Could not find share" : "Paylaşım bulunamadı", + "Share provider which allows you to share files by mail" : "E-posta ile dosya paylaşımı için kullanılacak paylaşım hizmeti sağlayıcısı", + "Unable to update share by mail config" : "E-posta ile paylaşım yapılandırması güncellenemedi", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Kişilerin bir e-posta adresi yazarak bir dosya ya da klasör için kişisel bir bağlantı paylaşmasını sağlar.", + "Send password by mail" : "Parola e-posta ile gönderilsin", + "Reply to initiator" : "Başlatan yanıtlansın" +}, +"nplurals=2; plural=(n > 1);"); diff --git a/apps/sharebymail/l10n/tr.json b/apps/sharebymail/l10n/tr.json new file mode 100644 index 00000000000..50ee7163686 --- /dev/null +++ b/apps/sharebymail/l10n/tr.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "{email} ile paylaşıldı", + "Shared with {email} by {actor}" : "{email} ile {actor} tarafından paylaşıldı", + "Unshared from {email}" : "{email} ile paylaşımı kaldırıldı", + "Unshared from {email} by {actor}" : "{actor} tarafından {email} ile paylaşılması durduruldu", + "Password for mail share sent to {email}" : "E-posta ile paylaşım parolası {email} adresine gönderildi", + "Password for mail share sent to you" : "E-posta ile paylaşım parolası size gönderildi", + "You shared {file} with {email} by mail" : "{file} dosyasını {email} ile e-posta üzerinden paylaştınız", + "{actor} shared {file} with {email} by mail" : "{actor}, {file} dosyasını {email} ile e-posta üzerinden paylaştı", + "You unshared {file} from {email} by mail" : "{file} dosyasının {email} ile paylaşımını e-posta ile kaldırdınız", + "{actor} unshared {file} from {email} by mail" : "{actor}, {file} dosyasının {email} ile paylaşımını e-posta ile kaldırdı", + "Password to access {file} was sent to {email}" : "{file} dosyasına erişim parolası {email} adresine gönderildi", + "Password to access {file} was sent to you" : "{file} dosyasına erişim parolası size gönderildi", + "Share by mail" : "E-posta ile paylaşım", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1$s paylaşılamadı. Bu öge zaten %2$s hesabı ile paylaşılmış", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Otomatik oluşturulan parola size gönderilemedi. Lütfen kişisel ayarlarınızdan geçerli bir e-posta adresi ayarlayın ve yeniden deneyin.", + "Failed to send share by email. Got an invalid email address" : "Paylaşım e-posta ile gönderilemedi. Bir e-posta adresi geçersiz", + "Failed to send share by email" : "Paylaşım e-postası gönderilemedi", + "%1$s shared %2$s with you" : "%1$s, sizinle %2$s ögesini paylaştı", + "Note:" : "Not:", + "This share is valid until %s at midnight" : "Bu paylaşım %s gece yarısına kadar kullanılabilir", + "Expiration:" : "Geçerlilik süresi sonu:", + "Open %s" : "%s aç", + "%1$s via %2$s" : "%1$s, %2$s aracılığıyla", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s sizinle %2$s ögesini paylaştı. Erişim bağlantısını içeren başka bir e-posta daha almış olmalısınız.", + "Password to access %1$s shared to you by %2$s" : "%1$s için sizin tarafınızdan %2$s üzerinden paylaşılan erişim parolası", + "Password to access %s" : "%s erişimi parolası", + "It is protected with the following password:" : "Şu parola ile korunuyor:", + "This password will expire at %s" : "Bu parolanın geçerlilik süresi %s tarihinde dolacak", + "%1$s shared %2$s with you and wants to add:" : "%1$s sizinle %2$s ögesini paylaştı ve eklemenizi istiyor:", + "%1$s shared %2$s with you and wants to add" : "%1$s sizinle %2$s ögesini paylaştı ve eklemenizi istiyor", + "%s added a note to a file shared with you" : "%s sizinle paylaştığı bir dosyaya bir not ekledi", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "%1$s ögesini %2$s ile paylaştınız. Paylaşım alıcıya gönderildi. %3$s yöneticisi tarafından belirlenmiş güvenlik ilkelerine göre her bir paylaşım için bir parola belirtilmesi ve bu parolanın alıcıya doğrudan gönderilmemesi gerekiyor. Bu nedenle parolayı alıcıya el ile siz iletmelisiniz.", + "Password to access %1$s shared by you with %2$s" : "%1$s için %2$s üzerinden paylaştığınız erişim parolası", + "This is the password:" : "Parola:", + "You can choose a different password at any time in the share dialog." : "İstediğiniz zaman paylaşım bölümünden farklı bir parola belirtebilirsiniz.", + "Could not find share" : "Paylaşım bulunamadı", + "Share provider which allows you to share files by mail" : "E-posta ile dosya paylaşımı için kullanılacak paylaşım hizmeti sağlayıcısı", + "Unable to update share by mail config" : "E-posta ile paylaşım yapılandırması güncellenemedi", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Kişilerin bir e-posta adresi yazarak bir dosya ya da klasör için kişisel bir bağlantı paylaşmasını sağlar.", + "Send password by mail" : "Parola e-posta ile gönderilsin", + "Reply to initiator" : "Başlatan yanıtlansın" +},"pluralForm" :"nplurals=2; plural=(n > 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/ug.js b/apps/sharebymail/l10n/ug.js new file mode 100644 index 00000000000..9b895fee9e1 --- /dev/null +++ b/apps/sharebymail/l10n/ug.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "{email} خەت} بىلەن ئورتاقلاشتى", + "Shared with {email} by {actor}" : "{email} تەرىپىدىن {actor} خەت} بىلەن ئورتاقلاشتى", + "Unshared from {email}" : "{email} خەتتىن ئورتاقلاشمىغان}", + "Unshared from {email} by {actor}" : "{email} تەرىپىدىن {actor} خەت} دىن ئورتاقلاشمىغان", + "Password for mail share sent to {email}" : "{email} خەت} غا ئەۋەتىلگەن خەت ئورتاقلىشىشنىڭ پارولى", + "Password for mail share sent to you" : "سىزگە ئەۋەتىلگەن خەت ئورتاقلىشىشنىڭ پارولى", + "You shared {file} with {email} by mail" : "سىز {file} ئارقىلىق {email} ئارقىلىق ئورتاقلاشتىڭىز", + "{actor} shared {file} with {email} by mail" : "{actor} {email} ئارقىلىق {file} بىلەن ئورتاقلاشتى", + "You unshared {file} from {email} by mail" : "سىز ئورتاقلاشمىغان {file} ئارقىلىق {email} ئارقىلىق", + "{actor} unshared {file} from {email} by mail" : "{actor} ھەمبەھىرلەنمىگەن {file} {email} خەت} ئارقىلىق", + "Password to access {file} was sent to {email}" : "{file} نى زىيارەت قىلىدىغان پارول {email} خەت} غا ئەۋەتىلدى", + "Password to access {file} was sent to you" : "{file} نى زىيارەت قىلىدىغان پارول سىزگە ئەۋەتىلدى", + "Share by mail" : "خەت ئارقىلىق ھەمبەھىرلىنىش", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1 $ s نى ئورتاقلىشىش مەغلۇب بولدى ، چۈنكى بۇ تۈر%2 $ s ھېساباتى بىلەن ئورتاقلاشتى", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "بىز ئاپتوماتىك ھاسىل قىلىنغان پارولنى ئەۋەتەلمەيمىز. شەخسىي تەڭشەكلىرىڭىزگە ئۈنۈملۈك ئېلېكترونلۇق خەت ئادرېسىنى ئورنىتىپ قايتا سىناڭ.", + "Failed to send share by email. Got an invalid email address" : "ئېلېكترونلۇق خەت ئارقىلىق ھەمبەھىرلەش مەغلۇپ بولدى. ئىناۋەتسىز ئېلېكترونلۇق خەت ئادرېسىغا ئېرىشتى", + "Failed to send share by email" : "ئېلېكترونلۇق خەت ئارقىلىق ھەمبەھىرلەش مەغلۇپ بولدى", + "%1$s shared %2$s with you" : "%1 $ s سىز بىلەن%2 $ s ئورتاقلاشتى", + "Note:" : "ئەسكەرتىش:", + "This share is valid until %s at midnight" : "بۇ ئۈلۈش يېرىم كېچىدە% s گىچە كۈچكە ئىگە", + "Expiration:" : "ۋاقتى:", + "Open %s" : "% S نى ئېچىڭ", + "%1$s via %2$s" : "%1 $ s ئارقىلىق%2 $ s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1 $ s سىز بىلەن%2 $ s ئورتاقلاشتى. ئۇنى زىيارەت قىلىش ئۈچۈن ئۇلانمىسى بار ئايرىم خەتنى تاپشۇرۇۋالغان بولۇشىڭىز كېرەك.", + "Password to access %1$s shared to you by %2$s" : "%1 $ s نى زىيارەت قىلىدىغان پارول%2 $ s", + "Password to access %s" : "% S نى زىيارەت قىلىدىغان پارول", + "It is protected with the following password:" : "ئۇ تۆۋەندىكى پارول بىلەن قوغدىلىدۇ:", + "This password will expire at %s" : "بۇ پارولنىڭ ۋاقتى% s بولىدۇ", + "%1$s shared %2$s with you and wants to add:" : "%1 $ s%2 $ s نى سىز بىلەن ئورتاقلاشتى ۋە قوشماقچى:", + "%1$s shared %2$s with you and wants to add" : "%1 $ s%2 $ s نى سىز بىلەن ئورتاقلاشتى ۋە قوشماقچى", + "%s added a note to a file shared with you" : "% s سىز بىلەن ئورتاقلاشقان ھۆججەتكە خاتىرە قوشتى", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "سىز پەقەت%2 $ s بىلەن%1 $ s نى ئورتاقلاشتىڭىز. بۇ ئۈلۈش ئاللىبۇرۇن تاپشۇرۇۋالغۇچىغا ئەۋەتىلگەن. باشقۇرغۇچى تەرىپىدىن بېكىتىلگەن بىخەتەرلىك سىياسىتى سەۋەبىدىن%3 $ s ھەر بىر پاينى مەخپىي نومۇر بىلەن قوغداش كېرەك ، پارولنى تاپشۇرۇۋالغۇچىغا بىۋاسىتە ئەۋەتىشكە بولمايدۇ. شۇڭلاشقا پارولنى تاپشۇرۇۋالغۇچىغا قولدا يوللىشىڭىز كېرەك.", + "Password to access %1$s shared by you with %2$s" : "%2 $ s بىلەن ئورتاقلاشقان%1 $ s نى زىيارەت قىلىدىغان پارول", + "This is the password:" : "بۇ پارول:", + "You can choose a different password at any time in the share dialog." : "ھەمبەھىر سۆزلەشكۈدە خالىغان ۋاقىتتا باشقا پارولنى تاللىيالايسىز.", + "Could not find share" : "ئورتاقلىشالمىدى", + "Share provider which allows you to share files by mail" : "ھۆججەتلەرنى خەت ئارقىلىق ھەمبەھىرلىيەلەيسىز", + "Unable to update share by mail config" : "خەت سەپلىمىسى ئارقىلىق ھەمبەھىرنى يېڭىلاشقا ئامالسىز", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "كىشىلەرنىڭ ئېلېكترونلۇق خەت ئادرېسى ئارقىلىق ھۆججەت ياكى ھۆججەت قىسقۇچقا خاسلاشتۇرۇلغان ئۇلىنىشنى ھەمبەھىرلىشىگە يول قويىدۇ.", + "Send password by mail" : "خەت ئارقىلىق پارول ئەۋەتىڭ", + "Reply to initiator" : "تەشەببۇس قىلغۇچىغا جاۋاب قايتۇرۇڭ" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/apps/sharebymail/l10n/ug.json b/apps/sharebymail/l10n/ug.json new file mode 100644 index 00000000000..a1e645522ae --- /dev/null +++ b/apps/sharebymail/l10n/ug.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "{email} خەت} بىلەن ئورتاقلاشتى", + "Shared with {email} by {actor}" : "{email} تەرىپىدىن {actor} خەت} بىلەن ئورتاقلاشتى", + "Unshared from {email}" : "{email} خەتتىن ئورتاقلاشمىغان}", + "Unshared from {email} by {actor}" : "{email} تەرىپىدىن {actor} خەت} دىن ئورتاقلاشمىغان", + "Password for mail share sent to {email}" : "{email} خەت} غا ئەۋەتىلگەن خەت ئورتاقلىشىشنىڭ پارولى", + "Password for mail share sent to you" : "سىزگە ئەۋەتىلگەن خەت ئورتاقلىشىشنىڭ پارولى", + "You shared {file} with {email} by mail" : "سىز {file} ئارقىلىق {email} ئارقىلىق ئورتاقلاشتىڭىز", + "{actor} shared {file} with {email} by mail" : "{actor} {email} ئارقىلىق {file} بىلەن ئورتاقلاشتى", + "You unshared {file} from {email} by mail" : "سىز ئورتاقلاشمىغان {file} ئارقىلىق {email} ئارقىلىق", + "{actor} unshared {file} from {email} by mail" : "{actor} ھەمبەھىرلەنمىگەن {file} {email} خەت} ئارقىلىق", + "Password to access {file} was sent to {email}" : "{file} نى زىيارەت قىلىدىغان پارول {email} خەت} غا ئەۋەتىلدى", + "Password to access {file} was sent to you" : "{file} نى زىيارەت قىلىدىغان پارول سىزگە ئەۋەتىلدى", + "Share by mail" : "خەت ئارقىلىق ھەمبەھىرلىنىش", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "%1 $ s نى ئورتاقلىشىش مەغلۇب بولدى ، چۈنكى بۇ تۈر%2 $ s ھېساباتى بىلەن ئورتاقلاشتى", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "بىز ئاپتوماتىك ھاسىل قىلىنغان پارولنى ئەۋەتەلمەيمىز. شەخسىي تەڭشەكلىرىڭىزگە ئۈنۈملۈك ئېلېكترونلۇق خەت ئادرېسىنى ئورنىتىپ قايتا سىناڭ.", + "Failed to send share by email. Got an invalid email address" : "ئېلېكترونلۇق خەت ئارقىلىق ھەمبەھىرلەش مەغلۇپ بولدى. ئىناۋەتسىز ئېلېكترونلۇق خەت ئادرېسىغا ئېرىشتى", + "Failed to send share by email" : "ئېلېكترونلۇق خەت ئارقىلىق ھەمبەھىرلەش مەغلۇپ بولدى", + "%1$s shared %2$s with you" : "%1 $ s سىز بىلەن%2 $ s ئورتاقلاشتى", + "Note:" : "ئەسكەرتىش:", + "This share is valid until %s at midnight" : "بۇ ئۈلۈش يېرىم كېچىدە% s گىچە كۈچكە ئىگە", + "Expiration:" : "ۋاقتى:", + "Open %s" : "% S نى ئېچىڭ", + "%1$s via %2$s" : "%1 $ s ئارقىلىق%2 $ s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1 $ s سىز بىلەن%2 $ s ئورتاقلاشتى. ئۇنى زىيارەت قىلىش ئۈچۈن ئۇلانمىسى بار ئايرىم خەتنى تاپشۇرۇۋالغان بولۇشىڭىز كېرەك.", + "Password to access %1$s shared to you by %2$s" : "%1 $ s نى زىيارەت قىلىدىغان پارول%2 $ s", + "Password to access %s" : "% S نى زىيارەت قىلىدىغان پارول", + "It is protected with the following password:" : "ئۇ تۆۋەندىكى پارول بىلەن قوغدىلىدۇ:", + "This password will expire at %s" : "بۇ پارولنىڭ ۋاقتى% s بولىدۇ", + "%1$s shared %2$s with you and wants to add:" : "%1 $ s%2 $ s نى سىز بىلەن ئورتاقلاشتى ۋە قوشماقچى:", + "%1$s shared %2$s with you and wants to add" : "%1 $ s%2 $ s نى سىز بىلەن ئورتاقلاشتى ۋە قوشماقچى", + "%s added a note to a file shared with you" : "% s سىز بىلەن ئورتاقلاشقان ھۆججەتكە خاتىرە قوشتى", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "سىز پەقەت%2 $ s بىلەن%1 $ s نى ئورتاقلاشتىڭىز. بۇ ئۈلۈش ئاللىبۇرۇن تاپشۇرۇۋالغۇچىغا ئەۋەتىلگەن. باشقۇرغۇچى تەرىپىدىن بېكىتىلگەن بىخەتەرلىك سىياسىتى سەۋەبىدىن%3 $ s ھەر بىر پاينى مەخپىي نومۇر بىلەن قوغداش كېرەك ، پارولنى تاپشۇرۇۋالغۇچىغا بىۋاسىتە ئەۋەتىشكە بولمايدۇ. شۇڭلاشقا پارولنى تاپشۇرۇۋالغۇچىغا قولدا يوللىشىڭىز كېرەك.", + "Password to access %1$s shared by you with %2$s" : "%2 $ s بىلەن ئورتاقلاشقان%1 $ s نى زىيارەت قىلىدىغان پارول", + "This is the password:" : "بۇ پارول:", + "You can choose a different password at any time in the share dialog." : "ھەمبەھىر سۆزلەشكۈدە خالىغان ۋاقىتتا باشقا پارولنى تاللىيالايسىز.", + "Could not find share" : "ئورتاقلىشالمىدى", + "Share provider which allows you to share files by mail" : "ھۆججەتلەرنى خەت ئارقىلىق ھەمبەھىرلىيەلەيسىز", + "Unable to update share by mail config" : "خەت سەپلىمىسى ئارقىلىق ھەمبەھىرنى يېڭىلاشقا ئامالسىز", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "كىشىلەرنىڭ ئېلېكترونلۇق خەت ئادرېسى ئارقىلىق ھۆججەت ياكى ھۆججەت قىسقۇچقا خاسلاشتۇرۇلغان ئۇلىنىشنى ھەمبەھىرلىشىگە يول قويىدۇ.", + "Send password by mail" : "خەت ئارقىلىق پارول ئەۋەتىڭ", + "Reply to initiator" : "تەشەببۇس قىلغۇچىغا جاۋاب قايتۇرۇڭ" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/uk.js b/apps/sharebymail/l10n/uk.js new file mode 100644 index 00000000000..ccbd680f25c --- /dev/null +++ b/apps/sharebymail/l10n/uk.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "Надано доступ через {email} ", + "Shared with {email} by {actor}" : "Опубліковано {actor} з {email}", + "Unshared from {email}" : "Скасовано доступ з {email}", + "Unshared from {email} by {actor}" : "{actor} скасував доступ до {email}", + "Password for mail share sent to {email}" : "Пароль для обміну поштою надіслано на адресу {email}", + "Password for mail share sent to you" : "Вам надіслано пароль для обміну поштою", + "You shared {file} with {email} by mail" : "Ви поділилися поштою {file} з {email}", + "{actor} shared {file} with {email} by mail" : "{actor} надав(-ла) доступ до файлу {file} через ел.пошту {email}", + "You unshared {file} from {email} by mail" : "Ви скасували доступ до {file} з {email} поштою", + "{actor} unshared {file} from {email} by mail" : "{actor} скасував доступ до {file} з {email} поштою", + "Password to access {file} was sent to {email}" : "Пароль для доступу до {file} надіслано на адресу {email}", + "Password to access {file} was sent to you" : "Вам надіслано пароль для доступу до {file}", + "Share by mail" : "Поділіться за допомогою ел. пошти", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Не вдалося надати %1$s у спільний доступ, оскільки цей ресурс вже у спільному доступі з користувачем %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ми не можемо надіслати вам автоматично згенерований пароль. Укажіть дійсну адресу електронної пошти в особистих налаштуваннях і повторіть спробу.", + "Failed to send share by email. Got an invalid email address" : "Не вдалося надіслати спільний доступ електронною поштою. Отримав недійсну електронну адресу", + "Failed to send share by email" : "Не вдалося надіслати спільний доступ електронною поштою", + "%1$s shared %2$s with you" : "%1$s поділив(ла)ся%2$s з вами", + "Note:" : "Примітка:", + "This share is valid until %s at midnight" : "Доступ до спільного ресурсу є чинний до опівночі %s", + "Expiration:" : "Термін завершення:", + "Open %s" : "Відкрити %s", + "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поділився %2$s з вами. Ви мали отримати окремий лист з посиланням на доступ до цього ресурсу.", + "Password to access %1$s shared to you by %2$s" : "%2$s надіслав вам пароль для доступу до %1$s", + "Password to access %s" : "Пароль для доступу до %s", + "It is protected with the following password:" : "Він захищений таким паролем:", + "This password will expire at %s" : "Цей пароль закінчиться о %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поділив(ла)ся %2$s з вами та бажає додати:", + "%1$s shared %2$s with you and wants to add" : "%1$s поділив(ла)ся %2$s з вами та бажає додати", + "%s added a note to a file shared with you" : "%s додав(-ла) примітку до файлу, яким поділилися з вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ви щойно надали доступ %2$s до %1$s. Цей спільний ресурс було надіслано отримувачеві. Через безпекові політики, які було визначено адміністратором %3$s кожний спільний ресурс має бути захищено паролем, також не дозволено напряму надсилати пароль отримувачеві. Таким чином ви маєте вручну надіслати пароль отримувачеві.", + "Password to access %1$s shared by you with %2$s" : "%2$s надіслав вам пароль для доступу до %1$s", + "This is the password:" : "Це пароль:", + "You can choose a different password at any time in the share dialog." : "Ви можете будь-коли вибрати інший пароль у діалоговому вікні спільного доступу.", + "Could not find share" : "Не вдалося знайти спільний доступ", + "Share provider which allows you to share files by mail" : "Провайдер спільного доступу, який дозволяє обмінюватися файлами поштою", + "Unable to update share by mail config" : "Не вдається оновити конфігурацію спільного доступу за допомогою пошти", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозволяє користувачам надавати персоналізоване посилання на файл або каталог шляхом додавання адреси ел. пошти.", + "Send password by mail" : "Надіслати пароль поштою", + "Reply to initiator" : "Відповідь ініціатору" +}, +"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/sharebymail/l10n/uk.json b/apps/sharebymail/l10n/uk.json new file mode 100644 index 00000000000..a3caf787c87 --- /dev/null +++ b/apps/sharebymail/l10n/uk.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "Надано доступ через {email} ", + "Shared with {email} by {actor}" : "Опубліковано {actor} з {email}", + "Unshared from {email}" : "Скасовано доступ з {email}", + "Unshared from {email} by {actor}" : "{actor} скасував доступ до {email}", + "Password for mail share sent to {email}" : "Пароль для обміну поштою надіслано на адресу {email}", + "Password for mail share sent to you" : "Вам надіслано пароль для обміну поштою", + "You shared {file} with {email} by mail" : "Ви поділилися поштою {file} з {email}", + "{actor} shared {file} with {email} by mail" : "{actor} надав(-ла) доступ до файлу {file} через ел.пошту {email}", + "You unshared {file} from {email} by mail" : "Ви скасували доступ до {file} з {email} поштою", + "{actor} unshared {file} from {email} by mail" : "{actor} скасував доступ до {file} з {email} поштою", + "Password to access {file} was sent to {email}" : "Пароль для доступу до {file} надіслано на адресу {email}", + "Password to access {file} was sent to you" : "Вам надіслано пароль для доступу до {file}", + "Share by mail" : "Поділіться за допомогою ел. пошти", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "Не вдалося надати %1$s у спільний доступ, оскільки цей ресурс вже у спільному доступі з користувачем %2$s", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "Ми не можемо надіслати вам автоматично згенерований пароль. Укажіть дійсну адресу електронної пошти в особистих налаштуваннях і повторіть спробу.", + "Failed to send share by email. Got an invalid email address" : "Не вдалося надіслати спільний доступ електронною поштою. Отримав недійсну електронну адресу", + "Failed to send share by email" : "Не вдалося надіслати спільний доступ електронною поштою", + "%1$s shared %2$s with you" : "%1$s поділив(ла)ся%2$s з вами", + "Note:" : "Примітка:", + "This share is valid until %s at midnight" : "Доступ до спільного ресурсу є чинний до опівночі %s", + "Expiration:" : "Термін завершення:", + "Open %s" : "Відкрити %s", + "%1$s via %2$s" : "%1$s через %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s поділився %2$s з вами. Ви мали отримати окремий лист з посиланням на доступ до цього ресурсу.", + "Password to access %1$s shared to you by %2$s" : "%2$s надіслав вам пароль для доступу до %1$s", + "Password to access %s" : "Пароль для доступу до %s", + "It is protected with the following password:" : "Він захищений таким паролем:", + "This password will expire at %s" : "Цей пароль закінчиться о %s", + "%1$s shared %2$s with you and wants to add:" : "%1$s поділив(ла)ся %2$s з вами та бажає додати:", + "%1$s shared %2$s with you and wants to add" : "%1$s поділив(ла)ся %2$s з вами та бажає додати", + "%s added a note to a file shared with you" : "%s додав(-ла) примітку до файлу, яким поділилися з вами", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "Ви щойно надали доступ %2$s до %1$s. Цей спільний ресурс було надіслано отримувачеві. Через безпекові політики, які було визначено адміністратором %3$s кожний спільний ресурс має бути захищено паролем, також не дозволено напряму надсилати пароль отримувачеві. Таким чином ви маєте вручну надіслати пароль отримувачеві.", + "Password to access %1$s shared by you with %2$s" : "%2$s надіслав вам пароль для доступу до %1$s", + "This is the password:" : "Це пароль:", + "You can choose a different password at any time in the share dialog." : "Ви можете будь-коли вибрати інший пароль у діалоговому вікні спільного доступу.", + "Could not find share" : "Не вдалося знайти спільний доступ", + "Share provider which allows you to share files by mail" : "Провайдер спільного доступу, який дозволяє обмінюватися файлами поштою", + "Unable to update share by mail config" : "Не вдається оновити конфігурацію спільного доступу за допомогою пошти", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "Дозволяє користувачам надавати персоналізоване посилання на файл або каталог шляхом додавання адреси ел. пошти.", + "Send password by mail" : "Надіслати пароль поштою", + "Reply to initiator" : "Відповідь ініціатору" +},"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/sharebymail/l10n/zh_CN.js b/apps/sharebymail/l10n/zh_CN.js new file mode 100644 index 00000000000..5ff72c65228 --- /dev/null +++ b/apps/sharebymail/l10n/zh_CN.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "用 {email} 共享", + "Shared with {email} by {actor}" : "由 {actor} 通过 {email} 共享", + "Unshared from {email}" : "通过 {email} 取消了共享 ", + "Unshared from {email} by {actor}" : "{actor} 通过 {email} 取消了共享 ", + "Password for mail share sent to {email}" : "邮件共享的密码已发送给 {email}", + "Password for mail share sent to you" : "发送给您的邮件共享的密码", + "You shared {file} with {email} by mail" : "您通过邮件 {email} 共享了 {file} ", + "{actor} shared {file} with {email} by mail" : "{actor} 共享 {file} 于 {email} 通过邮件", + "You unshared {file} from {email} by mail" : "您通过邮件 {email} 取消了 {file} 的共享。", + "{actor} unshared {file} from {email} by mail" : "{email} 通过邮件取消了 {actor} 共享的 {file}", + "Password to access {file} was sent to {email}" : "访问 {file} 的密码被发送给 {email}", + "Password to access {file} was sent to you" : "访问 {file} 的密码已发送给您", + "Share by mail" : "通过邮件共享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "共享 %1$s 失败,因为该项目已与账号 %2$s 共享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我们无法将自动生成的密码发送给您。请在您的个人设置中设置一个有效的电子邮件地址,然后重试。 ", + "Failed to send share by email. Got an invalid email address" : "无法通过邮箱发送分享。无效邮箱", + "Failed to send share by email" : "通过邮件发送共享失败", + "%1$s shared %2$s with you" : "%1$s 与您分享了 %2$s ", + "Note:" : "说明:", + "This share is valid until %s at midnight" : "此分享有效期至午夜 %s", + "Expiration:" : "有效期:", + "Open %s" : "打开 %s", + "%1$s via %2$s" : "%1$s 通过 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 与您分享了 %2$s。您应该已经收到一封单独的邮件,其中包含访问链接。", + "Password to access %1$s shared to you by %2$s" : "访问 %1$s 的密码已通过 %2$s 与您分享", + "Password to access %s" : "访问 %s 的密码", + "It is protected with the following password:" : "其已被以下密码保护:", + "This password will expire at %s" : "密码将在 %s 后失效", + "%1$s shared %2$s with you and wants to add:" : "%1$s 与您分享了 %2$s 并想要添加:", + "%1$s shared %2$s with you and wants to add" : "%1$s 与您分享了 %2$s 并希望添加", + "%s added a note to a file shared with you" : "%s 为与您共享的文件添加了注释", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您刚刚与 %2$s 分享了 %1$s。此共享已发送给收件人。根据 %3$s 管理员定义的安全策略,每个共享都需要密码保护,不允许直接将密码发送给收件人。因此,您需要手动将密码转发给收件人。", + "Password to access %1$s shared by you with %2$s" : "您与 %2$s 分享了访问 %1$s 的密码", + "This is the password:" : "这是密码:", + "You can choose a different password at any time in the share dialog." : "您可以随时在共享对话框中选择不同的密码。", + "Could not find share" : "没有发现共享", + "Share provider which allows you to share files by mail" : "共享提供程序,可让您通过邮件共享文件", + "Unable to update share by mail config" : "无法通过邮箱设置更新分享", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允许用户通过填入邮箱以分享文件或文件夹的私人链接。", + "Send password by mail" : "通过电子邮件发送密码", + "Reply to initiator" : "回复发起人" +}, +"nplurals=1; plural=0;"); diff --git a/apps/sharebymail/l10n/zh_CN.json b/apps/sharebymail/l10n/zh_CN.json new file mode 100644 index 00000000000..88b226e8c7a --- /dev/null +++ b/apps/sharebymail/l10n/zh_CN.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "用 {email} 共享", + "Shared with {email} by {actor}" : "由 {actor} 通过 {email} 共享", + "Unshared from {email}" : "通过 {email} 取消了共享 ", + "Unshared from {email} by {actor}" : "{actor} 通过 {email} 取消了共享 ", + "Password for mail share sent to {email}" : "邮件共享的密码已发送给 {email}", + "Password for mail share sent to you" : "发送给您的邮件共享的密码", + "You shared {file} with {email} by mail" : "您通过邮件 {email} 共享了 {file} ", + "{actor} shared {file} with {email} by mail" : "{actor} 共享 {file} 于 {email} 通过邮件", + "You unshared {file} from {email} by mail" : "您通过邮件 {email} 取消了 {file} 的共享。", + "{actor} unshared {file} from {email} by mail" : "{email} 通过邮件取消了 {actor} 共享的 {file}", + "Password to access {file} was sent to {email}" : "访问 {file} 的密码被发送给 {email}", + "Password to access {file} was sent to you" : "访问 {file} 的密码已发送给您", + "Share by mail" : "通过邮件共享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "共享 %1$s 失败,因为该项目已与账号 %2$s 共享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我们无法将自动生成的密码发送给您。请在您的个人设置中设置一个有效的电子邮件地址,然后重试。 ", + "Failed to send share by email. Got an invalid email address" : "无法通过邮箱发送分享。无效邮箱", + "Failed to send share by email" : "通过邮件发送共享失败", + "%1$s shared %2$s with you" : "%1$s 与您分享了 %2$s ", + "Note:" : "说明:", + "This share is valid until %s at midnight" : "此分享有效期至午夜 %s", + "Expiration:" : "有效期:", + "Open %s" : "打开 %s", + "%1$s via %2$s" : "%1$s 通过 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 与您分享了 %2$s。您应该已经收到一封单独的邮件,其中包含访问链接。", + "Password to access %1$s shared to you by %2$s" : "访问 %1$s 的密码已通过 %2$s 与您分享", + "Password to access %s" : "访问 %s 的密码", + "It is protected with the following password:" : "其已被以下密码保护:", + "This password will expire at %s" : "密码将在 %s 后失效", + "%1$s shared %2$s with you and wants to add:" : "%1$s 与您分享了 %2$s 并想要添加:", + "%1$s shared %2$s with you and wants to add" : "%1$s 与您分享了 %2$s 并希望添加", + "%s added a note to a file shared with you" : "%s 为与您共享的文件添加了注释", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您刚刚与 %2$s 分享了 %1$s。此共享已发送给收件人。根据 %3$s 管理员定义的安全策略,每个共享都需要密码保护,不允许直接将密码发送给收件人。因此,您需要手动将密码转发给收件人。", + "Password to access %1$s shared by you with %2$s" : "您与 %2$s 分享了访问 %1$s 的密码", + "This is the password:" : "这是密码:", + "You can choose a different password at any time in the share dialog." : "您可以随时在共享对话框中选择不同的密码。", + "Could not find share" : "没有发现共享", + "Share provider which allows you to share files by mail" : "共享提供程序,可让您通过邮件共享文件", + "Unable to update share by mail config" : "无法通过邮箱设置更新分享", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允许用户通过填入邮箱以分享文件或文件夹的私人链接。", + "Send password by mail" : "通过电子邮件发送密码", + "Reply to initiator" : "回复发起人" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/zh_HK.js b/apps/sharebymail/l10n/zh_HK.js new file mode 100644 index 00000000000..dafd502fba6 --- /dev/null +++ b/apps/sharebymail/l10n/zh_HK.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "已與 {email} 分享", + "Shared with {email} by {actor}" : "{actor} 已與 {email} 分享了", + "Unshared from {email}" : "通過 {email} 取消了分享", + "Unshared from {email} by {actor}" : "{actor} 通過 {email} 取消了分享", + "Password for mail share sent to {email}" : "郵件分享的密碼已發送給 {email}", + "Password for mail share sent to you" : "發送給您的郵件分享密碼", + "You shared {file} with {email} by mail" : "您通過電郵 {email} 分享了 {file} ", + "{actor} shared {file} with {email} by mail" : "{actor} 通過電郵於 {email} 分享 {file}", + "You unshared {file} from {email} by mail" : "您通過電郵 {email} 取消了 {file} 的共享。", + "{actor} unshared {file} from {email} by mail" : "{email} 通過郵件取消了 {actor} 共享的 {file}", + "Password to access {file} was sent to {email}" : "訪問 {file} 的密碼已發送給 {email}", + "Password to access {file} was sent to you" : "訪問 {file} 的密碼已發送給您", + "Share by mail" : "通過郵件分享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "分享 %1$s 失敗,因為此項目已與帳戶 %2$s 分享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我們無法將自動生成的密碼發送與您。請在您的個人設置中提供有效的電郵地址後重試。", + "Failed to send share by email. Got an invalid email address" : "透過電子郵件傳送分享失敗。收到無效的電郵地址", + "Failed to send share by email" : "通過電郵發送分享失敗", + "%1$s shared %2$s with you" : "%1$s 與您分享了 %2$s", + "Note:" : "備註:", + "This share is valid until %s at midnight" : "此分享有效期限至 %s 午夜", + "Expiration:" : "過期於:", + "Open %s" : "打開 %s", + "%1$s via %2$s" : "%1$s 透過 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 與您分享了 %2$s。訪問連結已另外以郵件方式發送到您的郵箱。", + "Password to access %1$s shared to you by %2$s" : "存取 %1$s 的密碼已透過 %2$s 與您分享", + "Password to access %s" : "存取 %s 的密碼", + "It is protected with the following password:" : "其已被以下密碼保護:", + "This password will expire at %s" : "此密碼將於 %s 到期", + "%1$s shared %2$s with you and wants to add:" : "%1$s 與您分享了 %2$s,且想要新增:", + "%1$s shared %2$s with you and wants to add" : "%1$s 與您分享了 %2$s,且想要新增", + "%s added a note to a file shared with you" : "%s 在與您分享的檔案新增了備註", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您剛剛與 %2$s 分享了 %1$s。此共享已發送給收件人。根據管理員定義的安全策略 %3$s,每個共享都需要受密碼保護,並且不允許直接向收件人發送密碼。因此,您需要將密碼手動轉發給收件人。", + "Password to access %1$s shared by you with %2$s" : "您與 %2$s 分享了存取 %1$s 的密碼", + "This is the password:" : "這是密碼:", + "You can choose a different password at any time in the share dialog." : "您可以隨時在分享對話框中選擇不同的密碼。", + "Could not find share" : "沒有發現分享", + "Share provider which allows you to share files by mail" : "分享提供程序,可讓您通過郵件分享檔案", + "Unable to update share by mail config" : "無法更新通過郵件分享配置", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允許人仕透過輸入電子郵件地址來分享到檔案或資料夾的個人化連結。", + "Send password by mail" : "通過電郵發送密碼", + "Reply to initiator" : "回覆發起人" +}, +"nplurals=1; plural=0;"); diff --git a/apps/sharebymail/l10n/zh_HK.json b/apps/sharebymail/l10n/zh_HK.json new file mode 100644 index 00000000000..462a6f31c44 --- /dev/null +++ b/apps/sharebymail/l10n/zh_HK.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "已與 {email} 分享", + "Shared with {email} by {actor}" : "{actor} 已與 {email} 分享了", + "Unshared from {email}" : "通過 {email} 取消了分享", + "Unshared from {email} by {actor}" : "{actor} 通過 {email} 取消了分享", + "Password for mail share sent to {email}" : "郵件分享的密碼已發送給 {email}", + "Password for mail share sent to you" : "發送給您的郵件分享密碼", + "You shared {file} with {email} by mail" : "您通過電郵 {email} 分享了 {file} ", + "{actor} shared {file} with {email} by mail" : "{actor} 通過電郵於 {email} 分享 {file}", + "You unshared {file} from {email} by mail" : "您通過電郵 {email} 取消了 {file} 的共享。", + "{actor} unshared {file} from {email} by mail" : "{email} 通過郵件取消了 {actor} 共享的 {file}", + "Password to access {file} was sent to {email}" : "訪問 {file} 的密碼已發送給 {email}", + "Password to access {file} was sent to you" : "訪問 {file} 的密碼已發送給您", + "Share by mail" : "通過郵件分享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "分享 %1$s 失敗,因為此項目已與帳戶 %2$s 分享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我們無法將自動生成的密碼發送與您。請在您的個人設置中提供有效的電郵地址後重試。", + "Failed to send share by email. Got an invalid email address" : "透過電子郵件傳送分享失敗。收到無效的電郵地址", + "Failed to send share by email" : "通過電郵發送分享失敗", + "%1$s shared %2$s with you" : "%1$s 與您分享了 %2$s", + "Note:" : "備註:", + "This share is valid until %s at midnight" : "此分享有效期限至 %s 午夜", + "Expiration:" : "過期於:", + "Open %s" : "打開 %s", + "%1$s via %2$s" : "%1$s 透過 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 與您分享了 %2$s。訪問連結已另外以郵件方式發送到您的郵箱。", + "Password to access %1$s shared to you by %2$s" : "存取 %1$s 的密碼已透過 %2$s 與您分享", + "Password to access %s" : "存取 %s 的密碼", + "It is protected with the following password:" : "其已被以下密碼保護:", + "This password will expire at %s" : "此密碼將於 %s 到期", + "%1$s shared %2$s with you and wants to add:" : "%1$s 與您分享了 %2$s,且想要新增:", + "%1$s shared %2$s with you and wants to add" : "%1$s 與您分享了 %2$s,且想要新增", + "%s added a note to a file shared with you" : "%s 在與您分享的檔案新增了備註", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您剛剛與 %2$s 分享了 %1$s。此共享已發送給收件人。根據管理員定義的安全策略 %3$s,每個共享都需要受密碼保護,並且不允許直接向收件人發送密碼。因此,您需要將密碼手動轉發給收件人。", + "Password to access %1$s shared by you with %2$s" : "您與 %2$s 分享了存取 %1$s 的密碼", + "This is the password:" : "這是密碼:", + "You can choose a different password at any time in the share dialog." : "您可以隨時在分享對話框中選擇不同的密碼。", + "Could not find share" : "沒有發現分享", + "Share provider which allows you to share files by mail" : "分享提供程序,可讓您通過郵件分享檔案", + "Unable to update share by mail config" : "無法更新通過郵件分享配置", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允許人仕透過輸入電子郵件地址來分享到檔案或資料夾的個人化連結。", + "Send password by mail" : "通過電郵發送密碼", + "Reply to initiator" : "回覆發起人" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/sharebymail/l10n/zh_TW.js b/apps/sharebymail/l10n/zh_TW.js new file mode 100644 index 00000000000..d6db8bc408b --- /dev/null +++ b/apps/sharebymail/l10n/zh_TW.js @@ -0,0 +1,46 @@ +OC.L10N.register( + "sharebymail", + { + "Shared with {email}" : "經由 {email} 分享", + "Shared with {email} by {actor}" : "{actor} 已經由 {email} 分享", + "Unshared from {email}" : "已取消 {email} 的分享", + "Unshared from {email} by {actor}" : "{actor} 已取消 {email} 的分享", + "Password for mail share sent to {email}" : "郵件分享的密碼已寄送給 {email}", + "Password for mail share sent to you" : "郵件分享的密碼已寄送給您", + "You shared {file} with {email} by mail" : "您已經由電子郵件與 {email} 分享 {file}", + "{actor} shared {file} with {email} by mail" : "{actor} 已經由電子郵件與 {email} 分享 {file}", + "You unshared {file} from {email} by mail" : "您取消了經由電子郵件 {email} 分享的 {file}", + "{actor} unshared {file} from {email} by mail" : "{actor} 取消了經由電子郵件 {email} 分享的 {file}", + "Password to access {file} was sent to {email}" : "存取 {file} 的密碼已寄送給 {email}", + "Password to access {file} was sent to you" : "存取 {file} 的密碼已寄送給您", + "Share by mail" : "經由電子郵件分享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "分享 %1$s 失敗,因為此項目已與帳號 %2$s 分享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我們無法將自動生成的密碼寄送給您。請在您的個人設定裡設定有效的電子郵件地址並再試一次。", + "Failed to send share by email. Got an invalid email address" : "經由電子郵件傳送分享失敗。收到無效的電子郵件地址", + "Failed to send share by email" : "經由電子郵件寄送分享失敗", + "%1$s shared %2$s with you" : "%1$s 與您分享了 %2$s", + "Note:" : "備註:", + "This share is valid until %s at midnight" : "此分享有效期限至 %s 午夜", + "Expiration:" : "過期於:", + "Open %s" : "開啟 %s", + "%1$s via %2$s" : "%1$s 經由 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 與您分享了 %2$s。您應該已經收到一封包含了可以存取它的連結的單獨郵件。", + "Password to access %1$s shared to you by %2$s" : "存取 %1$s 的密碼已透過 %2$s 與您分享", + "Password to access %s" : "存取 %s 的密碼", + "It is protected with the following password:" : "受以下密碼保護:", + "This password will expire at %s" : "密碼將於 %s 到期", + "%1$s shared %2$s with you and wants to add:" : "%1$s 與您分享了 %2$s,且想要新增:", + "%1$s shared %2$s with you and wants to add" : "%1$s 與您分享了 %2$s,且想要新增", + "%s added a note to a file shared with you" : "%s 在與您分享的檔案新增了註記", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您剛與 %2$s 分享了 %1$s。分享已寄送給收件者。由於管理員定義的安全策略 %3$s,每個分享都需要使用密碼保護,且不允許將密碼直接傳送給收件者。因此,您必須手動將密碼轉寄給收件者。", + "Password to access %1$s shared by you with %2$s" : "用於存取 %2$s 分享給您的 %1$s 的密碼", + "This is the password:" : "這是密碼:", + "You can choose a different password at any time in the share dialog." : "您隨時可以在分享對話框中選擇其他密碼。", + "Could not find share" : "找不到分享", + "Share provider which allows you to share files by mail" : "分享提供者,讓您可以經由電子郵件分享檔案", + "Unable to update share by mail config" : "無法更新經由郵件分享組態設定", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允許使用者透過輸入電子郵件地址來分享到檔案或資料夾的個人化連結。", + "Send password by mail" : "經由電子郵件寄送密碼", + "Reply to initiator" : "回覆給發起人" +}, +"nplurals=1; plural=0;"); diff --git a/apps/sharebymail/l10n/zh_TW.json b/apps/sharebymail/l10n/zh_TW.json new file mode 100644 index 00000000000..223dde4ca70 --- /dev/null +++ b/apps/sharebymail/l10n/zh_TW.json @@ -0,0 +1,44 @@ +{ "translations": { + "Shared with {email}" : "經由 {email} 分享", + "Shared with {email} by {actor}" : "{actor} 已經由 {email} 分享", + "Unshared from {email}" : "已取消 {email} 的分享", + "Unshared from {email} by {actor}" : "{actor} 已取消 {email} 的分享", + "Password for mail share sent to {email}" : "郵件分享的密碼已寄送給 {email}", + "Password for mail share sent to you" : "郵件分享的密碼已寄送給您", + "You shared {file} with {email} by mail" : "您已經由電子郵件與 {email} 分享 {file}", + "{actor} shared {file} with {email} by mail" : "{actor} 已經由電子郵件與 {email} 分享 {file}", + "You unshared {file} from {email} by mail" : "您取消了經由電子郵件 {email} 分享的 {file}", + "{actor} unshared {file} from {email} by mail" : "{actor} 取消了經由電子郵件 {email} 分享的 {file}", + "Password to access {file} was sent to {email}" : "存取 {file} 的密碼已寄送給 {email}", + "Password to access {file} was sent to you" : "存取 {file} 的密碼已寄送給您", + "Share by mail" : "經由電子郵件分享", + "Sharing %1$s failed, because this item is already shared with the account %2$s" : "分享 %1$s 失敗,因為此項目已與帳號 %2$s 分享", + "We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again." : "我們無法將自動生成的密碼寄送給您。請在您的個人設定裡設定有效的電子郵件地址並再試一次。", + "Failed to send share by email. Got an invalid email address" : "經由電子郵件傳送分享失敗。收到無效的電子郵件地址", + "Failed to send share by email" : "經由電子郵件寄送分享失敗", + "%1$s shared %2$s with you" : "%1$s 與您分享了 %2$s", + "Note:" : "備註:", + "This share is valid until %s at midnight" : "此分享有效期限至 %s 午夜", + "Expiration:" : "過期於:", + "Open %s" : "開啟 %s", + "%1$s via %2$s" : "%1$s 經由 %2$s", + "%1$s shared %2$s with you. You should have already received a separate mail with a link to access it." : "%1$s 與您分享了 %2$s。您應該已經收到一封包含了可以存取它的連結的單獨郵件。", + "Password to access %1$s shared to you by %2$s" : "存取 %1$s 的密碼已透過 %2$s 與您分享", + "Password to access %s" : "存取 %s 的密碼", + "It is protected with the following password:" : "受以下密碼保護:", + "This password will expire at %s" : "密碼將於 %s 到期", + "%1$s shared %2$s with you and wants to add:" : "%1$s 與您分享了 %2$s,且想要新增:", + "%1$s shared %2$s with you and wants to add" : "%1$s 與您分享了 %2$s,且想要新增", + "%s added a note to a file shared with you" : "%s 在與您分享的檔案新增了註記", + "You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient." : "您剛與 %2$s 分享了 %1$s。分享已寄送給收件者。由於管理員定義的安全策略 %3$s,每個分享都需要使用密碼保護,且不允許將密碼直接傳送給收件者。因此,您必須手動將密碼轉寄給收件者。", + "Password to access %1$s shared by you with %2$s" : "用於存取 %2$s 分享給您的 %1$s 的密碼", + "This is the password:" : "這是密碼:", + "You can choose a different password at any time in the share dialog." : "您隨時可以在分享對話框中選擇其他密碼。", + "Could not find share" : "找不到分享", + "Share provider which allows you to share files by mail" : "分享提供者,讓您可以經由電子郵件分享檔案", + "Unable to update share by mail config" : "無法更新經由郵件分享組態設定", + "Allows people to share a personalized link to a file or folder by putting in an email address." : "允許使用者透過輸入電子郵件地址來分享到檔案或資料夾的個人化連結。", + "Send password by mail" : "經由電子郵件寄送密碼", + "Reply to initiator" : "回覆給發起人" +},"pluralForm" :"nplurals=1; plural=0;" +}
\ No newline at end of file diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php new file mode 100644 index 00000000000..2d8289affa4 --- /dev/null +++ b/apps/sharebymail/lib/Activity.php @@ -0,0 +1,301 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail; + +use OCP\Activity\Exceptions\UnknownActivityException; +use OCP\Activity\IEvent; +use OCP\Activity\IManager; +use OCP\Activity\IProvider; +use OCP\Contacts\IManager as IContactsManager; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\IUserManager; +use OCP\L10N\IFactory; + +class Activity implements IProvider { + /** @var IL10N */ + protected $l; + + /** @var array */ + protected $contactNames = []; + + public const SUBJECT_SHARED_EMAIL_SELF = 'shared_with_email_self'; + public const SUBJECT_SHARED_EMAIL_BY = 'shared_with_email_by'; + public const SUBJECT_SHARED_EMAIL_PASSWORD_SEND = 'shared_with_email_password_send'; + public const SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF = 'shared_with_email_password_send_self'; + public const SUBJECT_UNSHARED_EMAIL_SELF = 'unshared_with_email_self'; + public const SUBJECT_UNSHARED_EMAIL_BY = 'unshared_with_email_by'; + + /** + * @param IFactory $languageFactory + * @param IURLGenerator $url + * @param IManager $activityManager + * @param IUserManager $userManager + * @param IContactsManager $contactsManager + */ + public function __construct( + protected IFactory $languageFactory, + protected IURLGenerator $url, + protected IManager $activityManager, + protected IUserManager $userManager, + protected IContactsManager $contactsManager, + ) { + } + + /** + * @param string $language + * @param IEvent $event + * @param IEvent|null $previousEvent + * @return IEvent + * @throws UnknownActivityException + * @since 11.0.0 + */ + public function parse($language, IEvent $event, ?IEvent $previousEvent = null) { + if ($event->getApp() !== 'sharebymail') { + throw new UnknownActivityException(); + } + + $this->l = $this->languageFactory->get('sharebymail', $language); + + if ($this->activityManager->isFormattingFilteredObject()) { + try { + return $this->parseShortVersion($event); + } catch (\InvalidArgumentException $e) { + // Ignore and simply use the long version... + } + } + + return $this->parseLongVersion($event); + } + + /** + * @param IEvent $event + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + public function parseShortVersion(IEvent $event) { + $parsedParameters = $this->getParsedParameters($event); + + if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_SELF) { + $event->setRichSubject($this->l->t('Shared with {email}'), [ + 'email' => $parsedParameters['email'], + ]); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) { + $event->setRichSubject($this->l->t('Shared with {email} by {actor}'), [ + 'email' => $parsedParameters['email'], + 'actor' => $parsedParameters['actor'], + ]); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_UNSHARED_EMAIL_SELF) { + $event->setRichSubject($this->l->t('Unshared from {email}'), [ + 'email' => $parsedParameters['email'], + ]); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_UNSHARED_EMAIL_BY) { + $event->setRichSubject($this->l->t('Unshared from {email} by {actor}'), [ + 'email' => $parsedParameters['email'], + 'actor' => $parsedParameters['actor'], + ]); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND) { + $event->setRichSubject($this->l->t('Password for mail share sent to {email}'), [ + 'email' => $parsedParameters['email'] + ]); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF) { + $event->setRichSubject($this->l->t('Password for mail share sent to you')); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } else { + throw new \InvalidArgumentException(); + } + + return $event; + } + + /** + * @param IEvent $event + * @return IEvent + * @throws \InvalidArgumentException + * @since 11.0.0 + */ + public function parseLongVersion(IEvent $event) { + $parsedParameters = $this->getParsedParameters($event); + + if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_SELF) { + $event->setRichSubject($this->l->t('You shared {file} with {email} by mail'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) { + $event->setRichSubject($this->l->t('{actor} shared {file} with {email} by mail'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_UNSHARED_EMAIL_SELF) { + $event->setRichSubject($this->l->t('You unshared {file} from {email} by mail'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_UNSHARED_EMAIL_BY) { + $event->setRichSubject($this->l->t('{actor} unshared {file} from {email} by mail'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND) { + $event->setRichSubject($this->l->t('Password to access {file} was sent to {email}'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } elseif ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF) { + $event->setRichSubject($this->l->t('Password to access {file} was sent to you'), $parsedParameters); + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } + } else { + throw new \InvalidArgumentException(); + } + + return $event; + } + + protected function getParsedParameters(IEvent $event) { + $subject = $event->getSubject(); + $parameters = $event->getSubjectParameters(); + + switch ($subject) { + case self::SUBJECT_SHARED_EMAIL_SELF: + case self::SUBJECT_UNSHARED_EMAIL_SELF: + return [ + 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + 'email' => $this->generateEmailParameter($parameters[1]), + ]; + case self::SUBJECT_SHARED_EMAIL_BY: + case self::SUBJECT_UNSHARED_EMAIL_BY: + return [ + 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + 'email' => $this->generateEmailParameter($parameters[1]), + 'actor' => $this->generateUserParameter($parameters[2]), + ]; + case self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND: + return [ + 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + 'email' => $this->generateEmailParameter($parameters[1]), + ]; + case self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF: + return [ + 'file' => $this->generateFileParameter($event->getObjectId(), $parameters[0]), + ]; + } + throw new \InvalidArgumentException(); + } + + /** + * @param int $id + * @param string $path + * @return array<string,string> + */ + protected function generateFileParameter($id, $path): array { + return [ + 'type' => 'file', + 'id' => (string)$id, + 'name' => basename($path), + 'path' => trim($path, '/'), + 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $id]), + ]; + } + + /** + * @param string $email + * @return array + */ + protected function generateEmailParameter($email) { + if (!isset($this->contactNames[$email])) { + $this->contactNames[$email] = $this->getContactName($email); + } + + return [ + 'type' => 'email', + 'id' => $email, + 'name' => $this->contactNames[$email], + ]; + } + + /** + * @param string $uid + * @return array + */ + protected function generateUserParameter($uid) { + return [ + 'type' => 'user', + 'id' => $uid, + 'name' => $this->userManager->getDisplayName($uid) ?? $uid, + ]; + } + + /** + * @param string $email + * @return string + */ + protected function getContactName($email) { + $addressBookContacts = $this->contactsManager->search($email, ['EMAIL'], [ + 'limit' => 1, + 'enumeration' => false, + 'fullmatch' => false, + 'strict_search' => true, + ]); + + foreach ($addressBookContacts as $contact) { + if (isset($contact['isLocalSystemBook'])) { + continue; + } + + if (in_array($email, $contact['EMAIL'])) { + return $contact['FN']; + } + } + + return $email; + } +} diff --git a/apps/sharebymail/lib/AppInfo/Application.php b/apps/sharebymail/lib/AppInfo/Application.php new file mode 100644 index 00000000000..792f7f31664 --- /dev/null +++ b/apps/sharebymail/lib/AppInfo/Application.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail\AppInfo; + +use OCA\ShareByMail\Capabilities; +use OCP\AppFramework\App; +use OCP\AppFramework\Bootstrap\IBootContext; +use OCP\AppFramework\Bootstrap\IBootstrap; +use OCP\AppFramework\Bootstrap\IRegistrationContext; + +class Application extends App implements IBootstrap { + public const APP_ID = 'sharebymail'; + + public function __construct() { + parent::__construct(self::APP_ID); + } + + public function register(IRegistrationContext $context): void { + $context->registerCapability(Capabilities::class); + } + + public function boot(IBootContext $context): void { + } +} diff --git a/apps/sharebymail/lib/Capabilities.php b/apps/sharebymail/lib/Capabilities.php new file mode 100644 index 00000000000..425a695ff36 --- /dev/null +++ b/apps/sharebymail/lib/Capabilities.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail; + +use OCA\ShareByMail\Settings\SettingsManager; +use OCP\App\IAppManager; +use OCP\Capabilities\ICapability; +use OCP\Share\IManager; + +class Capabilities implements ICapability { + + public function __construct( + private IManager $manager, + private SettingsManager $settingsManager, + private IAppManager $appManager, + ) { + } + + /** + * @return array{ + * files_sharing?: array{ + * sharebymail: array{ + * enabled: bool, + * send_password_by_mail: bool, + * upload_files_drop: array{ + * enabled: bool, + * }, + * password: array{ + * enabled: bool, + * enforced: bool, + * }, + * expire_date: array{ + * enabled: bool, + * enforced: bool, + * }, + * } + * } + * } + */ + public function getCapabilities(): array { + if (!$this->appManager->isEnabledForUser('files_sharing')) { + return []; + } + return [ + 'files_sharing' + => [ + 'sharebymail' => [ + 'enabled' => $this->manager->shareApiAllowLinks(), + 'send_password_by_mail' => $this->settingsManager->sendPasswordByMail(), + 'upload_files_drop' => [ + 'enabled' => true, + ], + 'password' => [ + 'enabled' => true, + 'enforced' => $this->manager->shareApiLinkEnforcePassword(), + ], + 'expire_date' => [ + 'enabled' => true, + 'enforced' => $this->manager->shareApiLinkDefaultExpireDateEnforced(), + ], + ] + ] + ]; + } +} diff --git a/apps/sharebymail/lib/Settings/Admin.php b/apps/sharebymail/lib/Settings/Admin.php new file mode 100644 index 00000000000..8f27bbff6d6 --- /dev/null +++ b/apps/sharebymail/lib/Settings/Admin.php @@ -0,0 +1,59 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail\Settings; + +use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Services\IInitialState; +use OCP\IL10N; +use OCP\Settings\IDelegatedSettings; + +class Admin implements IDelegatedSettings { + public function __construct( + private SettingsManager $settingsManager, + private IL10N $l, + private IInitialState $initialState, + ) { + } + + /** + * @return TemplateResponse + */ + public function getForm() { + $this->initialState->provideInitialState('sendPasswordMail', $this->settingsManager->sendPasswordByMail()); + $this->initialState->provideInitialState('replyToInitiator', $this->settingsManager->replyToInitiator()); + + return new TemplateResponse('sharebymail', 'settings-admin', [], ''); + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + public function getSection() { + return 'sharing'; + } + + /** + * @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() { + return 40; + } + + public function getName(): ?string { + return $this->l->t('Share by mail'); + } + + public function getAuthorizedAppConfig(): array { + return [ + 'sharebymail' => ['s/(sendpasswordmail|replyToInitiator)/'], + ]; + } +} diff --git a/apps/sharebymail/lib/Settings/SettingsManager.php b/apps/sharebymail/lib/Settings/SettingsManager.php new file mode 100644 index 00000000000..d487bd2ac43 --- /dev/null +++ b/apps/sharebymail/lib/Settings/SettingsManager.php @@ -0,0 +1,43 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail\Settings; + +use OCP\IConfig; + +class SettingsManager { + + private $sendPasswordByMailDefault = 'yes'; + + private $replyToInitiatorDefault = 'yes'; + + public function __construct( + private IConfig $config, + ) { + } + + /** + * should the password for a mail share be send to the recipient + * + * @return bool + */ + public function sendPasswordByMail(): bool { + $sendPasswordByMail = $this->config->getAppValue('sharebymail', 'sendpasswordmail', $this->sendPasswordByMailDefault); + return $sendPasswordByMail === 'yes'; + } + + /** + * should add reply to with initiator mail + * + * @return bool + */ + public function replyToInitiator(): bool { + $replyToInitiator = $this->config->getAppValue('sharebymail', 'replyToInitiator', $this->replyToInitiatorDefault); + return $replyToInitiator === 'yes'; + } +} diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php new file mode 100644 index 00000000000..d28f7c51327 --- /dev/null +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -0,0 +1,1243 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail; + +use OC\Share20\DefaultShareProvider; +use OC\Share20\Exception\InvalidShare; +use OC\Share20\Share; +use OC\User\NoUserException; +use OCA\ShareByMail\Settings\SettingsManager; +use OCP\Activity\IManager; +use OCP\DB\QueryBuilder\IQueryBuilder; +use OCP\Defaults; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Files\Folder; +use OCP\Files\IRootFolder; +use OCP\Files\Node; +use OCP\HintException; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\Mail\IMailer; +use OCP\Security\Events\GenerateSecurePasswordEvent; +use OCP\Security\IHasher; +use OCP\Security\ISecureRandom; +use OCP\Security\PasswordContext; +use OCP\Share\Exceptions\GenericShareException; +use OCP\Share\Exceptions\ShareNotFound; +use OCP\Share\IAttributes; +use OCP\Share\IManager as IShareManager; +use OCP\Share\IShare; +use OCP\Share\IShareProviderWithNotification; +use OCP\Util; +use Psr\Log\LoggerInterface; + +/** + * Class ShareByMail + * + * @package OCA\ShareByMail + */ +class ShareByMailProvider extends DefaultShareProvider implements IShareProviderWithNotification { + /** + * Return the identifier of this provider. + * + * @return string Containing only [a-zA-Z0-9] + */ + public function identifier(): string { + return 'ocMailShare'; + } + + public function __construct( + private IConfig $config, + private IDBConnection $dbConnection, + private ISecureRandom $secureRandom, + private IUserManager $userManager, + private IRootFolder $rootFolder, + private IL10N $l, + private LoggerInterface $logger, + private IMailer $mailer, + private IURLGenerator $urlGenerator, + private IManager $activityManager, + private SettingsManager $settingsManager, + private Defaults $defaults, + private IHasher $hasher, + private IEventDispatcher $eventDispatcher, + private IShareManager $shareManager, + ) { + } + + /** + * Share a path + * + * @throws ShareNotFound + * @throws \Exception + */ + public function create(IShare $share): IShare { + $shareWith = $share->getSharedWith(); + // Check if file is not already shared with the given email, + // if we have an email at all. + $alreadyShared = $this->getSharedWith($shareWith, IShare::TYPE_EMAIL, $share->getNode(), 1, 0); + if ($shareWith !== '' && !empty($alreadyShared)) { + $message = 'Sharing %1$s failed, because this item is already shared with the account %2$s'; + $message_t = $this->l->t('Sharing %1$s failed, because this item is already shared with the account %2$s', [$share->getNode()->getName(), $shareWith]); + $this->logger->debug(sprintf($message, $share->getNode()->getName(), $shareWith), ['app' => 'Federated File Sharing']); + throw new \Exception($message_t); + } + + // if the admin enforces a password for all mail shares we create a + // random password and send it to the recipient + $password = $share->getPassword() ?: ''; + $passwordEnforced = $this->shareManager->shareApiLinkEnforcePassword(); + if ($passwordEnforced && empty($password)) { + $password = $this->autoGeneratePassword($share); + } + + if (!empty($password)) { + $share->setPassword($this->hasher->hash($password)); + } + + $shareId = $this->createMailShare($share); + + $this->createShareActivity($share); + $data = $this->getRawShare($shareId); + + // Temporary set the clear password again to send it by mail + // This need to be done after the share was created in the database + // as the password is hashed in between. + if (!empty($password)) { + $data['password'] = $password; + } + + return $this->createShareObject($data); + } + + /** + * auto generate password in case of password enforcement on mail shares + * + * @throws \Exception + */ + protected function autoGeneratePassword(IShare $share): string { + $initiatorUser = $this->userManager->get($share->getSharedBy()); + $initiatorEMailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; + $allowPasswordByMail = $this->settingsManager->sendPasswordByMail(); + + if ($initiatorEMailAddress === null && !$allowPasswordByMail) { + throw new \Exception( + $this->l->t('We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.') + ); + } + + $passwordEvent = new GenerateSecurePasswordEvent(PasswordContext::SHARING); + $this->eventDispatcher->dispatchTyped($passwordEvent); + + $password = $passwordEvent->getPassword(); + if ($password === null) { + $password = $this->secureRandom->generate(8, ISecureRandom::CHAR_HUMAN_READABLE); + } + + return $password; + } + + /** + * create activity if a file/folder was shared by mail + */ + protected function createShareActivity(IShare $share, string $type = 'share'): void { + $userFolder = $this->rootFolder->getUserFolder($share->getSharedBy()); + + $this->publishActivity( + $type === 'share' ? Activity::SUBJECT_SHARED_EMAIL_SELF : Activity::SUBJECT_UNSHARED_EMAIL_SELF, + [$userFolder->getRelativePath($share->getNode()->getPath()), $share->getSharedWith()], + $share->getSharedBy(), + $share->getNode()->getId(), + (string)$userFolder->getRelativePath($share->getNode()->getPath()) + ); + + if ($share->getShareOwner() !== $share->getSharedBy()) { + $ownerFolder = $this->rootFolder->getUserFolder($share->getShareOwner()); + $fileId = $share->getNode()->getId(); + $nodes = $ownerFolder->getById($fileId); + $ownerPath = $nodes[0]->getPath(); + $this->publishActivity( + $type === 'share' ? Activity::SUBJECT_SHARED_EMAIL_BY : Activity::SUBJECT_UNSHARED_EMAIL_BY, + [$ownerFolder->getRelativePath($ownerPath), $share->getSharedWith(), $share->getSharedBy()], + $share->getShareOwner(), + $fileId, + (string)$ownerFolder->getRelativePath($ownerPath) + ); + } + } + + /** + * create activity if a file/folder was shared by mail + */ + protected function createPasswordSendActivity(IShare $share, string $sharedWith, bool $sendToSelf): void { + $userFolder = $this->rootFolder->getUserFolder($share->getSharedBy()); + + if ($sendToSelf) { + $this->publishActivity( + Activity::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF, + [$userFolder->getRelativePath($share->getNode()->getPath())], + $share->getSharedBy(), + $share->getNode()->getId(), + (string)$userFolder->getRelativePath($share->getNode()->getPath()) + ); + } else { + $this->publishActivity( + Activity::SUBJECT_SHARED_EMAIL_PASSWORD_SEND, + [$userFolder->getRelativePath($share->getNode()->getPath()), $sharedWith], + $share->getSharedBy(), + $share->getNode()->getId(), + (string)$userFolder->getRelativePath($share->getNode()->getPath()) + ); + } + } + + + /** + * publish activity if a file/folder was shared by mail + */ + protected function publishActivity(string $subject, array $parameters, string $affectedUser, int $fileId, string $filePath): void { + $event = $this->activityManager->generateEvent(); + $event->setApp('sharebymail') + ->setType('shared') + ->setSubject($subject, $parameters) + ->setAffectedUser($affectedUser) + ->setObject('files', $fileId, $filePath); + $this->activityManager->publish($event); + } + + /** + * @throws \Exception + */ + protected function createMailShare(IShare $share): int { + $share->setToken($this->generateToken()); + return $this->addShareToDB( + $share->getNodeId(), + $share->getNodeType(), + $share->getSharedWith(), + $share->getSharedBy(), + $share->getShareOwner(), + $share->getPermissions(), + $share->getToken(), + $share->getPassword(), + $share->getPasswordExpirationTime(), + $share->getSendPasswordByTalk(), + $share->getHideDownload(), + $share->getLabel(), + $share->getExpirationDate(), + $share->getNote(), + $share->getAttributes(), + $share->getMailSend(), + ); + } + + /** + * @inheritDoc + */ + public function sendMailNotification(IShare $share): bool { + $shareId = $share->getId(); + + $emails = $this->getSharedWithEmails($share); + $validEmails = array_filter($emails, function (string $email) { + return $this->mailer->validateMailAddress($email); + }); + + if (count($validEmails) === 0) { + $this->removeShareFromTable((int)$shareId); + $e = new HintException('Failed to send share by mail. Could not find a valid email address: ' . join(', ', $emails), + $this->l->t('Failed to send share by email. Got an invalid email address')); + $this->logger->error('Failed to send share by mail. Could not find a valid email address ' . join(', ', $emails), [ + 'app' => 'sharebymail', + 'exception' => $e, + ]); + } + + try { + $this->sendEmail($share, $validEmails); + + // If we have a password set, we send it to the recipient + if ($share->getPassword() !== null) { + // If share-by-talk password is enabled, we do not send the notification + // to the recipient. They will have to request it to the owner after opening the link. + // Secondly, if the password expiration is disabled, we send the notification to the recipient + // Lastly, if the mail to recipient failed, we send the password to the owner as a fallback. + // If a password expires, the recipient will still be able to request a new one via talk. + $passwordExpire = $this->config->getSystemValue('sharing.enable_mail_link_password_expiration', false); + $passwordEnforced = $this->shareManager->shareApiLinkEnforcePassword(); + if ($passwordExpire === false || $share->getSendPasswordByTalk()) { + $send = $this->sendPassword($share, $share->getPassword(), $validEmails); + if ($passwordEnforced && $send === false) { + $this->sendPasswordToOwner($share, $share->getPassword()); + } + } + } + + return true; + } catch (HintException $hintException) { + $this->logger->error('Failed to send share by mail.', [ + 'app' => 'sharebymail', + 'exception' => $hintException, + ]); + $this->removeShareFromTable((int)$shareId); + throw $hintException; + } catch (\Exception $e) { + $this->logger->error('Failed to send share by mail.', [ + 'app' => 'sharebymail', + 'exception' => $e, + ]); + $this->removeShareFromTable((int)$shareId); + throw new HintException( + 'Failed to send share by mail', + $this->l->t('Failed to send share by email'), + 0, + $e, + ); + } + return false; + } + + /** + * @param IShare $share The share to send the email for + * @param array $emails The email addresses to send the email to + */ + protected function sendEmail(IShare $share, array $emails): void { + $link = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.showShare', [ + 'token' => $share->getToken() + ]); + + $expiration = $share->getExpirationDate(); + $filename = $share->getNode()->getName(); + $initiator = $share->getSharedBy(); + $note = $share->getNote(); + $shareWith = $share->getSharedWith(); + + $initiatorUser = $this->userManager->get($initiator); + $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; + $message = $this->mailer->createMessage(); + + $emailTemplate = $this->mailer->createEMailTemplate('sharebymail.RecipientNotification', [ + 'filename' => $filename, + 'link' => $link, + 'initiator' => $initiatorDisplayName, + 'expiration' => $expiration, + 'shareWith' => $shareWith, + 'note' => $note + ]); + + $emailTemplate->setSubject($this->l->t('%1$s shared %2$s with you', [$initiatorDisplayName, $filename])); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($this->l->t('%1$s shared %2$s with you', [$initiatorDisplayName, $filename]), false); + + if ($note !== '') { + $emailTemplate->addBodyListItem( + htmlspecialchars($note), + $this->l->t('Note:'), + $this->getAbsoluteImagePath('caldav/description.png'), + $note + ); + } + + if ($expiration !== null) { + $dateString = (string)$this->l->l('date', $expiration, ['width' => 'medium']); + $emailTemplate->addBodyListItem( + $this->l->t('This share is valid until %s at midnight', [$dateString]), + $this->l->t('Expiration:'), + $this->getAbsoluteImagePath('caldav/time.png'), + ); + } + + $emailTemplate->addBodyButton( + $this->l->t('Open %s', [$filename]), + $link + ); + + // If multiple recipients are given, we send the mail to all of them + if (count($emails) > 1) { + // We do not want to expose the email addresses of the other recipients + $message->setBcc($emails); + } else { + $message->setTo($emails); + } + + // The "From" contains the sharers name + $instanceName = $this->defaults->getName(); + $senderName = $instanceName; + if ($this->settingsManager->replyToInitiator()) { + $senderName = $this->l->t( + '%1$s via %2$s', + [ + $initiatorDisplayName, + $instanceName + ] + ); + } + $message->setFrom([Util::getDefaultEmailAddress($instanceName) => $senderName]); + + // The "Reply-To" is set to the sharer if an mail address is configured + // also the default footer contains a "Do not reply" which needs to be adjusted. + if ($initiatorUser && $this->settingsManager->replyToInitiator()) { + $initiatorEmail = $initiatorUser->getEMailAddress(); + if ($initiatorEmail !== null) { + $message->setReplyTo([$initiatorEmail => $initiatorDisplayName]); + $emailTemplate->addFooter($instanceName . ($this->defaults->getSlogan() !== '' ? ' - ' . $this->defaults->getSlogan() : '')); + } else { + $emailTemplate->addFooter(); + } + } else { + $emailTemplate->addFooter(); + } + + $message->useTemplate($emailTemplate); + $failedRecipients = $this->mailer->send($message); + if (!empty($failedRecipients)) { + $this->logger->error('Share notification mail could not be sent to: ' . implode(', ', $failedRecipients)); + return; + } + } + + /** + * Send password to recipient of a mail share + * Will return false if + * 1. the password is empty + * 2. the setting to send the password by mail is disabled + * 3. the share is set to send the password by talk + * + * @param IShare $share + * @param string $password + * @param array $emails + * @return bool + */ + protected function sendPassword(IShare $share, string $password, array $emails): bool { + $filename = $share->getNode()->getName(); + $initiator = $share->getSharedBy(); + $shareWith = $share->getSharedWith(); + + if ($password === '' || $this->settingsManager->sendPasswordByMail() === false || $share->getSendPasswordByTalk()) { + return false; + } + + $initiatorUser = $this->userManager->get($initiator); + $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; + $initiatorEmailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; + + $plainBodyPart = $this->l->t('%1$s shared %2$s with you. You should have already received a separate mail with a link to access it.', [$initiatorDisplayName, $filename]); + $htmlBodyPart = $this->l->t('%1$s shared %2$s with you. You should have already received a separate mail with a link to access it.', [$initiatorDisplayName, $filename]); + + $message = $this->mailer->createMessage(); + + $emailTemplate = $this->mailer->createEMailTemplate('sharebymail.RecipientPasswordNotification', [ + 'filename' => $filename, + 'password' => $password, + 'initiator' => $initiatorDisplayName, + 'initiatorEmail' => $initiatorEmailAddress, + 'shareWith' => $shareWith, + ]); + + $emailTemplate->setSubject($this->l->t('Password to access %1$s shared to you by %2$s', [$filename, $initiatorDisplayName])); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($this->l->t('Password to access %s', [$filename]), false); + $emailTemplate->addBodyText(htmlspecialchars($htmlBodyPart), $plainBodyPart); + $emailTemplate->addBodyText($this->l->t('It is protected with the following password:')); + $emailTemplate->addBodyText($password); + + if ($this->config->getSystemValue('sharing.enable_mail_link_password_expiration', false) === true) { + $expirationTime = new \DateTime(); + $expirationInterval = $this->config->getSystemValue('sharing.mail_link_password_expiration_interval', 3600); + $expirationTime = $expirationTime->add(new \DateInterval('PT' . $expirationInterval . 'S')); + $emailTemplate->addBodyText($this->l->t('This password will expire at %s', [$expirationTime->format('r')])); + } + + // If multiple recipients are given, we send the mail to all of them + if (count($emails) > 1) { + // We do not want to expose the email addresses of the other recipients + $message->setBcc($emails); + } else { + $message->setTo($emails); + } + + // The "From" contains the sharers name + $instanceName = $this->defaults->getName(); + $senderName = $instanceName; + if ($this->settingsManager->replyToInitiator()) { + $senderName = $this->l->t( + '%1$s via %2$s', + [ + $initiatorDisplayName, + $instanceName + ] + ); + } + $message->setFrom([Util::getDefaultEmailAddress($instanceName) => $senderName]); + + // The "Reply-To" is set to the sharer if an mail address is configured + // also the default footer contains a "Do not reply" which needs to be adjusted. + if ($initiatorUser && $this->settingsManager->replyToInitiator()) { + $initiatorEmail = $initiatorUser->getEMailAddress(); + if ($initiatorEmail !== null) { + $message->setReplyTo([$initiatorEmail => $initiatorDisplayName]); + $emailTemplate->addFooter($instanceName . ($this->defaults->getSlogan() !== '' ? ' - ' . $this->defaults->getSlogan() : '')); + } else { + $emailTemplate->addFooter(); + } + } else { + $emailTemplate->addFooter(); + } + + $message->useTemplate($emailTemplate); + $failedRecipients = $this->mailer->send($message); + if (!empty($failedRecipients)) { + $this->logger->error('Share password mail could not be sent to: ' . implode(', ', $failedRecipients)); + return false; + } + + $this->createPasswordSendActivity($share, $shareWith, false); + return true; + } + + protected function sendNote(IShare $share): void { + $recipient = $share->getSharedWith(); + + + $filename = $share->getNode()->getName(); + $initiator = $share->getSharedBy(); + $note = $share->getNote(); + + $initiatorUser = $this->userManager->get($initiator); + $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; + $initiatorEmailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; + + $plainHeading = $this->l->t('%1$s shared %2$s with you and wants to add:', [$initiatorDisplayName, $filename]); + $htmlHeading = $this->l->t('%1$s shared %2$s with you and wants to add', [$initiatorDisplayName, $filename]); + + $message = $this->mailer->createMessage(); + + $emailTemplate = $this->mailer->createEMailTemplate('shareByMail.sendNote'); + + $emailTemplate->setSubject($this->l->t('%s added a note to a file shared with you', [$initiatorDisplayName])); + $emailTemplate->addHeader(); + $emailTemplate->addHeading(htmlspecialchars($htmlHeading), $plainHeading); + $emailTemplate->addBodyText(htmlspecialchars($note), $note); + + $link = $this->urlGenerator->linkToRouteAbsolute('files_sharing.sharecontroller.showShare', + ['token' => $share->getToken()]); + $emailTemplate->addBodyButton( + $this->l->t('Open %s', [$filename]), + $link + ); + + // The "From" contains the sharers name + $instanceName = $this->defaults->getName(); + $senderName = $instanceName; + if ($this->settingsManager->replyToInitiator()) { + $senderName = $this->l->t( + '%1$s via %2$s', + [ + $initiatorDisplayName, + $instanceName + ] + ); + } + $message->setFrom([Util::getDefaultEmailAddress($instanceName) => $senderName]); + if ($this->settingsManager->replyToInitiator() && $initiatorEmailAddress !== null) { + $message->setReplyTo([$initiatorEmailAddress => $initiatorDisplayName]); + $emailTemplate->addFooter($instanceName . ' - ' . $this->defaults->getSlogan()); + } else { + $emailTemplate->addFooter(); + } + + $message->setTo([$recipient]); + $message->useTemplate($emailTemplate); + $this->mailer->send($message); + } + + /** + * send auto generated password to the owner. This happens if the admin enforces + * a password for mail shares and forbid to send the password by mail to the recipient + * + * @throws \Exception + */ + protected function sendPasswordToOwner(IShare $share, string $password): bool { + $filename = $share->getNode()->getName(); + $initiator = $this->userManager->get($share->getSharedBy()); + $initiatorEMailAddress = ($initiator instanceof IUser) ? $initiator->getEMailAddress() : null; + $initiatorDisplayName = ($initiator instanceof IUser) ? $initiator->getDisplayName() : $share->getSharedBy(); + $shareWith = implode(', ', $this->getSharedWithEmails($share)); + + if ($initiatorEMailAddress === null) { + throw new \Exception( + $this->l->t('We cannot send you the auto-generated password. Please set a valid email address in your personal settings and try again.') + ); + } + + $bodyPart = $this->l->t('You just shared %1$s with %2$s. The share was already sent to the recipient. Due to the security policies defined by the administrator of %3$s each share needs to be protected by password and it is not allowed to send the password directly to the recipient. Therefore you need to forward the password manually to the recipient.', [$filename, $shareWith, $this->defaults->getName()]); + + $message = $this->mailer->createMessage(); + $emailTemplate = $this->mailer->createEMailTemplate('sharebymail.OwnerPasswordNotification', [ + 'filename' => $filename, + 'password' => $password, + 'initiator' => $initiatorDisplayName, + 'initiatorEmail' => $initiatorEMailAddress, + 'shareWith' => $shareWith, + ]); + + $emailTemplate->setSubject($this->l->t('Password to access %1$s shared by you with %2$s', [$filename, $shareWith])); + $emailTemplate->addHeader(); + $emailTemplate->addHeading($this->l->t('Password to access %s', [$filename]), false); + $emailTemplate->addBodyText($bodyPart); + $emailTemplate->addBodyText($this->l->t('This is the password:')); + $emailTemplate->addBodyText($password); + + if ($this->config->getSystemValue('sharing.enable_mail_link_password_expiration', false) === true) { + $expirationTime = new \DateTime(); + $expirationInterval = $this->config->getSystemValue('sharing.mail_link_password_expiration_interval', 3600); + $expirationTime = $expirationTime->add(new \DateInterval('PT' . $expirationInterval . 'S')); + $emailTemplate->addBodyText($this->l->t('This password will expire at %s', [$expirationTime->format('r')])); + } + + $emailTemplate->addBodyText($this->l->t('You can choose a different password at any time in the share dialog.')); + + $emailTemplate->addFooter(); + + $instanceName = $this->defaults->getName(); + $senderName = $this->l->t( + '%1$s via %2$s', + [ + $initiatorDisplayName, + $instanceName + ] + ); + $message->setFrom([Util::getDefaultEmailAddress($instanceName) => $senderName]); + $message->setTo([$initiatorEMailAddress => $initiatorDisplayName]); + $message->useTemplate($emailTemplate); + $this->mailer->send($message); + + $this->createPasswordSendActivity($share, $shareWith, true); + + return true; + } + + private function getAbsoluteImagePath(string $path):string { + return $this->urlGenerator->getAbsoluteURL( + $this->urlGenerator->imagePath('core', $path) + ); + } + + /** + * generate share token + */ + protected function generateToken(int $size = 15): string { + $token = $this->secureRandom->generate($size, ISecureRandom::CHAR_HUMAN_READABLE); + return $token; + } + + public function getChildren(IShare $parent): array { + $children = []; + + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('parent', $qb->createNamedParameter($parent->getId()))) + ->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))) + ->orderBy('id'); + + $cursor = $qb->executeQuery(); + while ($data = $cursor->fetch()) { + $children[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $children; + } + + /** + * Add share to the database and return the ID + */ + protected function addShareToDB( + ?int $itemSource, + ?string $itemType, + ?string $shareWith, + ?string $sharedBy, + ?string $uidOwner, + ?int $permissions, + ?string $token, + ?string $password, + ?\DateTimeInterface $passwordExpirationTime, + ?bool $sendPasswordByTalk, + ?bool $hideDownload, + ?string $label, + ?\DateTimeInterface $expirationTime, + ?string $note = '', + ?IAttributes $attributes = null, + ?bool $mailSend = true, + ): int { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->insert('share') + ->setValue('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)) + ->setValue('item_type', $qb->createNamedParameter($itemType)) + ->setValue('item_source', $qb->createNamedParameter($itemSource)) + ->setValue('file_source', $qb->createNamedParameter($itemSource)) + ->setValue('share_with', $qb->createNamedParameter($shareWith)) + ->setValue('uid_owner', $qb->createNamedParameter($uidOwner)) + ->setValue('uid_initiator', $qb->createNamedParameter($sharedBy)) + ->setValue('permissions', $qb->createNamedParameter($permissions)) + ->setValue('token', $qb->createNamedParameter($token)) + ->setValue('password', $qb->createNamedParameter($password)) + ->setValue('password_expiration_time', $qb->createNamedParameter($passwordExpirationTime, IQueryBuilder::PARAM_DATETIME_MUTABLE)) + ->setValue('password_by_talk', $qb->createNamedParameter($sendPasswordByTalk, IQueryBuilder::PARAM_BOOL)) + ->setValue('stime', $qb->createNamedParameter(time())) + ->setValue('hide_download', $qb->createNamedParameter((int)$hideDownload, IQueryBuilder::PARAM_INT)) + ->setValue('label', $qb->createNamedParameter($label)) + ->setValue('note', $qb->createNamedParameter($note)) + ->setValue('mail_send', $qb->createNamedParameter((int)$mailSend, IQueryBuilder::PARAM_INT)); + + // set share attributes + $shareAttributes = $this->formatShareAttributes($attributes); + + $qb->setValue('attributes', $qb->createNamedParameter($shareAttributes)); + if ($expirationTime !== null) { + $qb->setValue('expiration', $qb->createNamedParameter($expirationTime, IQueryBuilder::PARAM_DATETIME_MUTABLE)); + } + + $qb->executeStatement(); + return $qb->getLastInsertId(); + } + + /** + * Update a share + */ + public function update(IShare $share, ?string $plainTextPassword = null): IShare { + $originalShare = $this->getShareById($share->getId()); + + // a real password was given + $validPassword = $plainTextPassword !== null && $plainTextPassword !== ''; + + if ($validPassword && ($originalShare->getPassword() !== $share->getPassword() + || ($originalShare->getSendPasswordByTalk() && !$share->getSendPasswordByTalk()))) { + $emails = $this->getSharedWithEmails($share); + $validEmails = array_filter($emails, function ($email) { + return $this->mailer->validateMailAddress($email); + }); + $this->sendPassword($share, $plainTextPassword, $validEmails); + } + + $shareAttributes = $this->formatShareAttributes($share->getAttributes()); + + /* + * We allow updating mail shares + */ + $qb = $this->dbConnection->getQueryBuilder(); + $qb->update('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($share->getId()))) + ->set('item_source', $qb->createNamedParameter($share->getNodeId())) + ->set('file_source', $qb->createNamedParameter($share->getNodeId())) + ->set('share_with', $qb->createNamedParameter($share->getSharedWith())) + ->set('permissions', $qb->createNamedParameter($share->getPermissions())) + ->set('uid_owner', $qb->createNamedParameter($share->getShareOwner())) + ->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy())) + ->set('password', $qb->createNamedParameter($share->getPassword())) + ->set('password_expiration_time', $qb->createNamedParameter($share->getPasswordExpirationTime(), IQueryBuilder::PARAM_DATETIME_MUTABLE)) + ->set('label', $qb->createNamedParameter($share->getLabel())) + ->set('password_by_talk', $qb->createNamedParameter($share->getSendPasswordByTalk(), IQueryBuilder::PARAM_BOOL)) + ->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATETIME_MUTABLE)) + ->set('note', $qb->createNamedParameter($share->getNote())) + ->set('hide_download', $qb->createNamedParameter((int)$share->getHideDownload(), IQueryBuilder::PARAM_INT)) + ->set('attributes', $qb->createNamedParameter($shareAttributes)) + ->set('mail_send', $qb->createNamedParameter((int)$share->getMailSend(), IQueryBuilder::PARAM_INT)) + ->set('reminder_sent', $qb->createNamedParameter($share->getReminderSent(), IQueryBuilder::PARAM_BOOL)) + ->executeStatement(); + + if ($originalShare->getNote() !== $share->getNote() && $share->getNote() !== '') { + $this->sendNote($share); + } + + return $share; + } + + /** + * @inheritdoc + */ + public function move(IShare $share, $recipient): IShare { + /** + * nothing to do here, mail shares are only outgoing shares + */ + return $share; + } + + /** + * Delete a share (owner unShares the file) + * + * @param IShare $share + */ + public function delete(IShare $share): void { + try { + $this->createShareActivity($share, 'unshare'); + } catch (\Exception $e) { + } + + $this->removeShareFromTable((int)$share->getId()); + } + + /** + * @inheritdoc + */ + public function deleteFromSelf(IShare $share, $recipient): void { + // nothing to do here, mail shares are only outgoing shares + } + + public function restore(IShare $share, string $recipient): IShare { + throw new GenericShareException('not implemented'); + } + + /** + * @inheritdoc + */ + public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share'); + + $qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))); + + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares === false) { + //Special case for old shares created via the web UI + $or1 = $qb->expr()->andX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->isNull('uid_initiator') + ); + + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)), + $or1 + ) + ); + } elseif ($node === null) { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } + + if ($node !== null) { + $qb->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($node->getId()))); + } + + if ($limit !== -1) { + $qb->setMaxResults($limit); + } + + $qb->setFirstResult($offset); + $qb->orderBy('id'); + + $cursor = $qb->executeQuery(); + $shares = []; + while ($data = $cursor->fetch()) { + $shares[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * @inheritdoc + */ + public function getShareById($id, $recipientId = null): IShare { + $qb = $this->dbConnection->getQueryBuilder(); + + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))) + ->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))); + + $cursor = $qb->executeQuery(); + $data = $cursor->fetch(); + $cursor->closeCursor(); + + if ($data === false) { + throw new ShareNotFound(); + } + + try { + $share = $this->createShareObject($data); + } catch (InvalidShare $e) { + throw new ShareNotFound(); + } + + return $share; + } + + /** + * Get shares for a given path + * + * @return IShare[] + */ + public function getSharesByPath(Node $path): array { + $qb = $this->dbConnection->getQueryBuilder(); + + $cursor = $qb->select('*') + ->from('share') + ->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($path->getId()))) + ->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))) + ->executeQuery(); + + $shares = []; + while ($data = $cursor->fetch()) { + $shares[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * @inheritdoc + */ + public function getSharedWith($userId, $shareType, $node, $limit, $offset): array { + /** @var IShare[] $shares */ + $shares = []; + + //Get shares directly with this user + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share'); + + // Order by id + $qb->orderBy('id'); + + // Set limit and offset + if ($limit !== -1) { + $qb->setMaxResults($limit); + } + $qb->setFirstResult($offset); + + $qb->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))); + $qb->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($userId))); + + // Filter by node if provided + if ($node !== null) { + $qb->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($node->getId()))); + } + + $cursor = $qb->executeQuery(); + + while ($data = $cursor->fetch()) { + $shares[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + + return $shares; + } + + /** + * Get a share by token + * + * @throws ShareNotFound + */ + public function getShareByToken($token): IShare { + $qb = $this->dbConnection->getQueryBuilder(); + + $cursor = $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))) + ->andWhere($qb->expr()->eq('token', $qb->createNamedParameter($token))) + ->executeQuery(); + + $data = $cursor->fetch(); + + if ($data === false) { + throw new ShareNotFound('Share not found', $this->l->t('Could not find share')); + } + + try { + $share = $this->createShareObject($data); + } catch (InvalidShare $e) { + throw new ShareNotFound('Share not found', $this->l->t('Could not find share')); + } + + return $share; + } + + /** + * remove share from table + */ + protected function removeShareFromTable(int $shareId): void { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->delete('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($shareId))); + $qb->executeStatement(); + } + + /** + * Create a share object from a database row + * + * @throws InvalidShare + * @throws ShareNotFound + */ + protected function createShareObject(array $data): IShare { + $share = new Share($this->rootFolder, $this->userManager); + $share->setId((int)$data['id']) + ->setShareType((int)$data['share_type']) + ->setPermissions((int)$data['permissions']) + ->setTarget($data['file_target']) + ->setMailSend((bool)$data['mail_send']) + ->setNote($data['note']) + ->setToken($data['token']); + + $shareTime = new \DateTime(); + $shareTime->setTimestamp((int)$data['stime']); + $share->setShareTime($shareTime); + $share->setSharedWith($data['share_with'] ?? ''); + $share->setPassword($data['password']); + $passwordExpirationTime = \DateTime::createFromFormat('Y-m-d H:i:s', $data['password_expiration_time'] ?? ''); + $share->setPasswordExpirationTime($passwordExpirationTime !== false ? $passwordExpirationTime : null); + $share->setLabel($data['label'] ?? ''); + $share->setSendPasswordByTalk((bool)$data['password_by_talk']); + $share->setHideDownload((bool)$data['hide_download']); + $share->setReminderSent((bool)$data['reminder_sent']); + + if ($data['uid_initiator'] !== null) { + $share->setShareOwner($data['uid_owner']); + $share->setSharedBy($data['uid_initiator']); + } else { + //OLD SHARE + $share->setSharedBy($data['uid_owner']); + $path = $this->getNode($share->getSharedBy(), (int)$data['file_source']); + + $owner = $path->getOwner(); + $share->setShareOwner($owner->getUID()); + } + + if ($data['expiration'] !== null) { + $expiration = \DateTime::createFromFormat('Y-m-d H:i:s', $data['expiration']); + if ($expiration !== false) { + $share->setExpirationDate($expiration); + } + } + + $share = $this->updateShareAttributes($share, $data['attributes']); + + $share->setNodeId((int)$data['file_source']); + $share->setNodeType($data['item_type']); + + $share->setProviderId($this->identifier()); + + return $share; + } + + /** + * Get the node with file $id for $user + * + * @throws InvalidShare + */ + private function getNode(string $userId, int $id): Node { + try { + $userFolder = $this->rootFolder->getUserFolder($userId); + } catch (NoUserException $e) { + throw new InvalidShare(); + } + + $nodes = $userFolder->getById($id); + + if (empty($nodes)) { + throw new InvalidShare(); + } + + return $nodes[0]; + } + + /** + * A user is deleted from the system + * So clean up the relevant shares. + */ + public function userDeleted($uid, $shareType): void { + $qb = $this->dbConnection->getQueryBuilder(); + + $qb->delete('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))) + ->andWhere($qb->expr()->eq('uid_owner', $qb->createNamedParameter($uid))) + ->executeStatement(); + } + + /** + * This provider does not support group shares + */ + public function groupDeleted($gid): void { + } + + /** + * This provider does not support group shares + */ + public function userDeletedFromGroup($uid, $gid): void { + } + + /** + * get database row of a give share + * + * @throws ShareNotFound + */ + protected function getRawShare(int $id): array { + // Now fetch the inserted share and create a complete share object + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))); + + $cursor = $qb->executeQuery(); + $data = $cursor->fetch(); + $cursor->closeCursor(); + + if ($data === false) { + throw new ShareNotFound; + } + + return $data; + } + + public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = true): array { + return $this->getSharesInFolderInternal($userId, $node, $reshares); + } + + public function getAllSharesInFolder(Folder $node): array { + return $this->getSharesInFolderInternal(null, $node, null); + } + + /** + * @return array<int, list<IShare>> + */ + private function getSharesInFolderInternal(?string $userId, Folder $node, ?bool $reshares): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share', 's') + ->andWhere($qb->expr()->in('item_type', $qb->createNamedParameter(['file', 'folder'], IQueryBuilder::PARAM_STR_ARRAY))) + ->andWhere( + $qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)) + ); + + if ($userId !== null) { + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares !== true) { + $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } + } + + $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')); + + $qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId()))); + + $qb->orderBy('id'); + + $cursor = $qb->executeQuery(); + $shares = []; + while ($data = $cursor->fetch()) { + $shares[$data['fileid']][] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * @inheritdoc + */ + public function getAccessList($nodes, $currentAccess): array { + $ids = []; + foreach ($nodes as $node) { + $ids[] = $node->getId(); + } + + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('share_with', 'file_source', 'token') + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))) + ->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($qb->expr()->in('item_type', $qb->createNamedParameter(['file', 'folder'], IQueryBuilder::PARAM_STR_ARRAY))); + $cursor = $qb->executeQuery(); + + $public = false; + $mail = []; + while ($row = $cursor->fetch()) { + $public = true; + if ($currentAccess === false) { + $mail[] = $row['share_with']; + } else { + $mail[$row['share_with']] = [ + 'node_id' => $row['file_source'], + 'token' => $row['token'] + ]; + } + } + $cursor->closeCursor(); + + return ['public' => $public, 'mail' => $mail]; + } + + public function getAllShares(): iterable { + $qb = $this->dbConnection->getQueryBuilder(); + + $qb->select('*') + ->from('share') + ->where( + $qb->expr()->orX( + $qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL)) + ) + ); + + $cursor = $qb->executeQuery(); + while ($data = $cursor->fetch()) { + try { + $share = $this->createShareObject($data); + } catch (InvalidShare $e) { + continue; + } catch (ShareNotFound $e) { + continue; + } + + yield $share; + } + $cursor->closeCursor(); + } + + /** + * Extract the emails from the share + * It can be a single email, from the share_with field + * or a list of emails from the emails attributes field. + * @param IShare $share + * @return string[] + */ + protected function getSharedWithEmails(IShare $share): array { + $attributes = $share->getAttributes(); + + if ($attributes === null) { + return [$share->getSharedWith()]; + } + + $emails = $attributes->getAttribute('shareWith', 'emails'); + if (isset($emails) && is_array($emails) && !empty($emails)) { + return $emails; + } + return [$share->getSharedWith()]; + } +} diff --git a/apps/sharebymail/openapi.json b/apps/sharebymail/openapi.json new file mode 100644 index 00000000000..a64013b1924 --- /dev/null +++ b/apps/sharebymail/openapi.json @@ -0,0 +1,99 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "sharebymail", + "version": "0.0.1", + "description": "Share provider which allows you to share files by mail", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "Capabilities": { + "type": "object", + "properties": { + "files_sharing": { + "type": "object", + "required": [ + "sharebymail" + ], + "properties": { + "sharebymail": { + "type": "object", + "required": [ + "enabled", + "send_password_by_mail", + "upload_files_drop", + "password", + "expire_date" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "send_password_by_mail": { + "type": "boolean" + }, + "upload_files_drop": { + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean" + } + } + }, + "password": { + "type": "object", + "required": [ + "enabled", + "enforced" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "enforced": { + "type": "boolean" + } + } + }, + "expire_date": { + "type": "object", + "required": [ + "enabled", + "enforced" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "enforced": { + "type": "boolean" + } + } + } + } + } + } + } + } + } + } + }, + "paths": {}, + "tags": [] +} diff --git a/apps/sharebymail/openapi.json.license b/apps/sharebymail/openapi.json.license new file mode 100644 index 00000000000..83559daa9dc --- /dev/null +++ b/apps/sharebymail/openapi.json.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +SPDX-License-Identifier: AGPL-3.0-or-later
\ No newline at end of file diff --git a/apps/sharebymail/src/components/AdminSettings.vue b/apps/sharebymail/src/components/AdminSettings.vue new file mode 100644 index 00000000000..a3f813195e7 --- /dev/null +++ b/apps/sharebymail/src/components/AdminSettings.vue @@ -0,0 +1,76 @@ +<!-- + - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + - SPDX-License-Identifier: AGPL-3.0-or-later +--> + +<template> + <NcSettingsSection :name="t('sharebymail', 'Share by mail')" + :description="t('sharebymail', 'Allows people to share a personalized link to a file or folder by putting in an email address.')"> + <NcCheckboxRadioSwitch type="switch" + :checked.sync="sendPasswordMail" + @update:checked="update('sendpasswordmail', sendPasswordMail)"> + {{ t('sharebymail', 'Send password by mail') }} + </NcCheckboxRadioSwitch> + + <NcCheckboxRadioSwitch type="switch" + :checked.sync="replyToInitiator" + @update:checked="update('replyToInitiator', replyToInitiator)"> + {{ t('sharebymail', 'Reply to initiator') }} + </NcCheckboxRadioSwitch> + </NcSettingsSection> +</template> + +<script> +import { loadState } from '@nextcloud/initial-state' +import { showError } from '@nextcloud/dialogs' +import { generateOcsUrl } from '@nextcloud/router' +import { confirmPassword } from '@nextcloud/password-confirmation' +import axios from '@nextcloud/axios' +import NcCheckboxRadioSwitch from '@nextcloud/vue/components/NcCheckboxRadioSwitch' +import NcSettingsSection from '@nextcloud/vue/components/NcSettingsSection' + +import '@nextcloud/password-confirmation/dist/style.css' + +export default { + name: 'AdminSettings', + components: { + NcCheckboxRadioSwitch, + NcSettingsSection, + }, + data() { + return { + sendPasswordMail: loadState('sharebymail', 'sendPasswordMail'), + replyToInitiator: loadState('sharebymail', 'replyToInitiator'), + } + }, + methods: { + async update(key, value) { + await confirmPassword() + const url = generateOcsUrl('/apps/provisioning_api/api/v1/config/apps/{appId}/{key}', { + appId: 'sharebymail', + key, + }) + const stringValue = value ? 'yes' : 'no' + try { + const { data } = await axios.post(url, { + value: stringValue, + }) + this.handleResponse({ + status: data.ocs?.meta?.status, + }) + } catch (e) { + this.handleResponse({ + errorMessage: t('sharebymail', 'Unable to update share by mail config'), + error: e, + }) + } + }, + async handleResponse({ status, errorMessage, error }) { + if (status !== 'ok') { + showError(errorMessage) + console.error(errorMessage, error) + } + }, + }, +} +</script> diff --git a/apps/sharebymail/src/main-admin.js b/apps/sharebymail/src/main-admin.js new file mode 100644 index 00000000000..dd3f6574adf --- /dev/null +++ b/apps/sharebymail/src/main-admin.js @@ -0,0 +1,20 @@ +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { getCSPNonce } from '@nextcloud/auth' +import { translate as t } from '@nextcloud/l10n' +import Vue from 'vue' +import AdminSettings from './components/AdminSettings.vue' + +__webpack_nonce__ = getCSPNonce() + +Vue.mixin({ + methods: { + t, + }, +}) + +const AdminSettingsView = Vue.extend(AdminSettings) +new AdminSettingsView().$mount('#vue-admin-sharebymail') diff --git a/apps/sharebymail/templates/settings-admin.php b/apps/sharebymail/templates/settings-admin.php new file mode 100644 index 00000000000..1db46617fb3 --- /dev/null +++ b/apps/sharebymail/templates/settings-admin.php @@ -0,0 +1,9 @@ +<?php +/** + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +\OCP\Util::addScript('sharebymail', 'vue-settings-admin-sharebymail'); +?> +<div id="vue-admin-sharebymail"></div> diff --git a/apps/sharebymail/tests/CapabilitiesTest.php b/apps/sharebymail/tests/CapabilitiesTest.php new file mode 100644 index 00000000000..7327e679533 --- /dev/null +++ b/apps/sharebymail/tests/CapabilitiesTest.php @@ -0,0 +1,67 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail\Tests; + +use OCA\ShareByMail\Capabilities; +use OCA\ShareByMail\Settings\SettingsManager; +use OCP\App\IAppManager; +use OCP\Share\IManager; +use PHPUnit\Framework\MockObject\MockObject; +use Test\TestCase; + +class CapabilitiesTest extends TestCase { + private IManager&MockObject $manager; + private SettingsManager&MockObject $settingsManager; + private IAppManager&MockObject $appManager; + private Capabilities $capabilities; + + protected function setUp(): void { + parent::setUp(); + + $this->manager = $this::createMock(IManager::class); + $this->settingsManager = $this::createMock(SettingsManager::class); + $this->appManager = $this::createMock(IAppManager::class); + $this->capabilities = new Capabilities($this->manager, $this->settingsManager, $this->appManager); + } + + public function testGetCapabilities(): void { + $this->manager->method('shareApiAllowLinks') + ->willReturn(true); + $this->manager->method('shareApiLinkEnforcePassword') + ->willReturn(false); + $this->manager->method('shareApiLinkDefaultExpireDateEnforced') + ->willReturn(false); + $this->settingsManager->method('sendPasswordByMail') + ->willReturn(true); + $this->appManager->method('isEnabledForUser') + ->willReturn(true); + + $capabilities = [ + 'files_sharing' + => [ + 'sharebymail' => [ + 'enabled' => true, + 'send_password_by_mail' => true, + 'upload_files_drop' => [ + 'enabled' => true, + ], + 'password' => [ + 'enabled' => true, + 'enforced' => false, + ], + 'expire_date' => [ + 'enabled' => true, + 'enforced' => false, + ], + ] + ] + ]; + + $this->assertSame($capabilities, $this->capabilities->getCapabilities()); + } +} diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php new file mode 100644 index 00000000000..8f70516f12c --- /dev/null +++ b/apps/sharebymail/tests/ShareByMailProviderTest.php @@ -0,0 +1,1947 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +namespace OCA\ShareByMail\Tests; + +use DateTime; +use OC\Mail\Message; +use OC\Share20\Share; +use OCA\ShareByMail\Settings\SettingsManager; +use OCA\ShareByMail\ShareByMailProvider; +use OCP\Activity\IManager as IActivityManager; +use OCP\Constants; +use OCP\Defaults; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Files\File; +use OCP\Files\IRootFolder; +use OCP\Files\Node; +use OCP\IConfig; +use OCP\IDBConnection; +use OCP\IL10N; +use OCP\IURLGenerator; +use OCP\IUser; +use OCP\IUserManager; +use OCP\Mail\IEMailTemplate; +use OCP\Mail\IMailer; +use OCP\Mail\IMessage; +use OCP\Security\Events\GenerateSecurePasswordEvent; +use OCP\Security\IHasher; +use OCP\Security\ISecureRandom; +use OCP\Security\PasswordContext; +use OCP\Server; +use OCP\Share\Exceptions\ShareNotFound; +use OCP\Share\IAttributes; +use OCP\Share\IManager; +use OCP\Share\IShare; +use OCP\Util; +use PHPUnit\Framework\MockObject\MockObject; +use Psr\Log\LoggerInterface; +use Test\TestCase; + +/** + * Class ShareByMailProviderTest + * + * @package OCA\ShareByMail\Tests + * @group DB + */ +class ShareByMailProviderTest extends TestCase { + + private IDBConnection $connection; + + private IL10N&MockObject $l; + private IShare&MockObject $share; + private IConfig&MockObject $config; + private IMailer&MockObject $mailer; + private IHasher&MockObject $hasher; + private Defaults&MockObject $defaults; + private IManager&MockObject $shareManager; + private LoggerInterface&MockObject $logger; + private IRootFolder&MockObject $rootFolder; + private IUserManager&MockObject $userManager; + private ISecureRandom&MockObject $secureRandom; + private IURLGenerator&MockObject $urlGenerator; + private SettingsManager&MockObject $settingsManager; + private IActivityManager&MockObject $activityManager; + private IEventDispatcher&MockObject $eventDispatcher; + + protected function setUp(): void { + parent::setUp(); + + $this->connection = Server::get(IDBConnection::class); + + $this->l = $this->createMock(IL10N::class); + $this->l->method('t') + ->willReturnCallback(function ($text, $parameters = []) { + return vsprintf($text, $parameters); + }); + $this->config = $this->createMock(IConfig::class); + $this->logger = $this->createMock(LoggerInterface::class); + $this->rootFolder = $this->createMock('OCP\Files\IRootFolder'); + $this->userManager = $this->createMock(IUserManager::class); + $this->secureRandom = $this->createMock('\OCP\Security\ISecureRandom'); + $this->mailer = $this->createMock('\OCP\Mail\IMailer'); + $this->urlGenerator = $this->createMock(IURLGenerator::class); + $this->share = $this->createMock(IShare::class); + $this->activityManager = $this->createMock('OCP\Activity\IManager'); + $this->settingsManager = $this->createMock(SettingsManager::class); + $this->defaults = $this->createMock(Defaults::class); + $this->hasher = $this->createMock(IHasher::class); + $this->eventDispatcher = $this->createMock(IEventDispatcher::class); + $this->shareManager = $this->createMock(IManager::class); + + $this->userManager->expects($this->any())->method('userExists')->willReturn(true); + $this->config->expects($this->any())->method('getAppValue')->with('core', 'enforce_strict_email_check')->willReturn('yes'); + } + + /** + * get instance of Mocked ShareByMailProvider + * + * @param array $mockedMethods internal methods which should be mocked + * @return \PHPUnit\Framework\MockObject\MockObject | ShareByMailProvider + */ + private function getInstance(array $mockedMethods = []) { + if (!empty($mockedMethods)) { + return $this->getMockBuilder(ShareByMailProvider::class) + ->setConstructorArgs([ + $this->config, + $this->connection, + $this->secureRandom, + $this->userManager, + $this->rootFolder, + $this->l, + $this->logger, + $this->mailer, + $this->urlGenerator, + $this->activityManager, + $this->settingsManager, + $this->defaults, + $this->hasher, + $this->eventDispatcher, + $this->shareManager, + ]) + ->onlyMethods($mockedMethods) + ->getMock(); + } + + return new ShareByMailProvider( + $this->config, + $this->connection, + $this->secureRandom, + $this->userManager, + $this->rootFolder, + $this->l, + $this->logger, + $this->mailer, + $this->urlGenerator, + $this->activityManager, + $this->settingsManager, + $this->defaults, + $this->hasher, + $this->eventDispatcher, + $this->shareManager, + ); + } + + protected function tearDown(): void { + $this->connection + ->getQueryBuilder() + ->delete('share') + ->executeStatement(); + + parent::tearDown(); + } + + public function testCreate(): void { + $expectedShare = $this->createMock(IShare::class); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('user1'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'sendEmail', 'sendPassword']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare'])->willReturn($expectedShare); + $share->expects($this->any())->method('getNode')->willReturn($node); + + // As share api link password is not enforced, the password will not be generated. + $this->shareManager->expects($this->once())->method('shareApiLinkEnforcePassword')->willReturn(false); + $this->settingsManager->expects($this->never())->method('sendPasswordByMail'); + + // Mail notification is triggered by the share manager. + $instance->expects($this->never())->method('sendEmail'); + $instance->expects($this->never())->method('sendPassword'); + + $this->assertSame($expectedShare, $instance->create($share)); + } + + public function testCreateSendPasswordByMailWithoutEnforcedPasswordProtection(): void { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@examplelölöl.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', 'sendEmail', 'sendPassword', 'sendPasswordToOwner']); + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare'])->willReturn($expectedShare); + $share->expects($this->any())->method('getNode')->willReturn($node); + + // The autogenerated password should not be mailed. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(false); + $this->settingsManager->expects($this->any())->method('sendPasswordByMail')->willReturn(true); + $instance->expects($this->never())->method('autoGeneratePassword'); + + // No password is set and no password sent via talk is requested + $instance->expects($this->once())->method('sendEmail')->with($share, ['receiver@examplelölöl.com']); + $instance->expects($this->never())->method('sendPassword'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + // The manager sends the mail notification. + // For the sake of testing simplicity, we will handle it ourselves. + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateSendPasswordByMailWithPasswordAndWithoutEnforcedPasswordProtectionWithPermanentPassword(): void { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', 'sendEmail', 'sendPassword', 'sendPasswordToOwner']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'password']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'password'])->willReturn($expectedShare); + $share->expects($this->any())->method('getNode')->willReturn($node); + + $share->expects($this->any())->method('getPassword')->willReturn('password'); + $this->hasher->expects($this->once())->method('hash')->with('password')->willReturn('passwordHashed'); + $share->expects($this->once())->method('setPassword')->with('passwordHashed'); + + // The given password (but not the autogenerated password) should not be + // mailed to the receiver of the share because permanent passwords are not enforced. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(false); + $this->config->expects($this->once())->method('getSystemValue')->with('sharing.enable_mail_link_password_expiration')->willReturn(false); + $instance->expects($this->never())->method('autoGeneratePassword'); + + // A password is set but no password sent via talk has been requested + $instance->expects($this->once())->method('sendEmail')->with($share, ['receiver@example.com']); + $instance->expects($this->once())->method('sendPassword')->with($share, 'password'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateSendPasswordByMailWithPasswordAndWithoutEnforcedPasswordProtectionWithoutPermanentPassword(): void { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance([ + 'getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', + 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', + 'sendEmail', 'sendPassword', 'sendPasswordToOwner', + ]); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'password']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'password'])->willReturn($expectedShare); + $share->expects($this->any())->method('getNode')->willReturn($node); + + $share->expects($this->any())->method('getPassword')->willReturn('password'); + $this->hasher->expects($this->once())->method('hash')->with('password')->willReturn('passwordHashed'); + $share->expects($this->once())->method('setPassword')->with('passwordHashed'); + + // No password is generated, so no emails need to be sent + // aside from the main email notification. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(false); + $instance->expects($this->never())->method('autoGeneratePassword'); + $this->config->expects($this->once())->method('getSystemValue') + ->with('sharing.enable_mail_link_password_expiration') + ->willReturn(true); + + // No password has been set and no password sent via talk has been requested, + // but password has been enforced for the whole instance and will be generated. + $instance->expects($this->once())->method('sendEmail')->with($share, ['receiver@example.com']); + $instance->expects($this->never())->method('sendPassword'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateSendPasswordByMailWithEnforcedPasswordProtectionWithPermanentPassword(): void { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $this->secureRandom->expects($this->once()) + ->method('generate') + ->with(8, ISecureRandom::CHAR_HUMAN_READABLE) + ->willReturn('autogeneratedPassword'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatchTyped') + ->with(new GenerateSecurePasswordEvent(PasswordContext::SHARING)); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'createPasswordSendActivity', 'sendPasswordToOwner']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'autogeneratedPassword']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'autogeneratedPassword'])->willReturn($expectedShare); + + // Initially not set, but will be set by the autoGeneratePassword method. + $share->expects($this->exactly(3))->method('getPassword')->willReturnOnConsecutiveCalls(null, 'autogeneratedPassword', 'autogeneratedPassword'); + $this->hasher->expects($this->once())->method('hash')->with('autogeneratedPassword')->willReturn('autogeneratedPasswordHashed'); + $share->expects($this->once())->method('setPassword')->with('autogeneratedPasswordHashed'); + + // The autogenerated password should be mailed to the receiver of the share because permanent passwords are enforced. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(true); + $this->config->expects($this->any())->method('getSystemValue')->with('sharing.enable_mail_link_password_expiration')->willReturn(false); + $this->settingsManager->expects($this->any())->method('sendPasswordByMail')->willReturn(true); + + $message = $this->createMock(IMessage::class); + $message->expects($this->exactly(2))->method('setTo')->with(['receiver@example.com']); + $this->mailer->expects($this->exactly(2))->method('createMessage')->willReturn($message); + $calls = [ + [ + 'sharebymail.RecipientNotification', + [ + 'filename' => 'filename', + 'link' => 'https://example.com/file.txt', + 'initiator' => 'owner', + 'expiration' => null, + 'shareWith' => 'receiver@example.com', + 'note' => '', + ], + ], + [ + 'sharebymail.RecipientPasswordNotification', + [ + 'filename' => 'filename', + 'password' => 'autogeneratedPassword', + 'initiator' => 'owner', + 'initiatorEmail' => null, + 'shareWith' => 'receiver@example.com', + ], + ], + ]; + $this->mailer->expects($this->exactly(2)) + ->method('createEMailTemplate') + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + return $this->createMock(IEMailTemplate::class); + }); + + // Main email notification is sent as well as the password + // to the recipient because shareApiLinkEnforcePassword is enabled. + $this->mailer->expects($this->exactly(2))->method('send'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateSendPasswordByMailWithPasswordAndWithEnforcedPasswordProtectionWithPermanentPassword(): void { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', 'sendPasswordToOwner']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'password']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'password'])->willReturn($expectedShare); + + $share->expects($this->exactly(3))->method('getPassword')->willReturn('password'); + $this->hasher->expects($this->once())->method('hash')->with('password')->willReturn('passwordHashed'); + $share->expects($this->once())->method('setPassword')->with('passwordHashed'); + + // The given password (but not the autogenerated password) should be + // mailed to the receiver of the share. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(true); + $this->config->expects($this->any())->method('getSystemValue')->with('sharing.enable_mail_link_password_expiration')->willReturn(false); + $this->settingsManager->expects($this->any())->method('sendPasswordByMail')->willReturn(true); + $instance->expects($this->never())->method('autoGeneratePassword'); + + $message = $this->createMock(IMessage::class); + $message->expects($this->exactly(2))->method('setTo')->with(['receiver@example.com']); + $this->mailer->expects($this->exactly(2))->method('createMessage')->willReturn($message); + + $calls = [ + [ + 'sharebymail.RecipientNotification', + [ + 'filename' => 'filename', + 'link' => 'https://example.com/file.txt', + 'initiator' => 'owner', + 'expiration' => null, + 'shareWith' => 'receiver@example.com', + 'note' => '', + ], + ], + [ + 'sharebymail.RecipientPasswordNotification', + [ + 'filename' => 'filename', + 'password' => 'password', + 'initiator' => 'owner', + 'initiatorEmail' => null, + 'shareWith' => 'receiver@example.com', + ], + ], + ]; + $this->mailer->expects($this->exactly(2)) + ->method('createEMailTemplate') + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + return $this->createMock(IEMailTemplate::class); + }); + + // Main email notification is sent as well as the password + // to the recipient because the password is set. + $this->mailer->expects($this->exactly(2))->method('send'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateSendPasswordByTalkWithEnforcedPasswordProtectionWithPermanentPassword(): void { + $expectedShare = $this->createMock(IShare::class); + + // The owner of the share. + $owner = $this->createMock(IUser::class); + $this->userManager->expects($this->any())->method('get')->with('owner')->willReturn($owner); + $owner->expects($this->any())->method('getEMailAddress')->willReturn('owner@example.com'); + $owner->expects($this->any())->method('getDisplayName')->willReturn('owner'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(true); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'autogeneratedPassword']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'autogeneratedPassword'])->willReturn($expectedShare); + + $share->expects($this->exactly(4))->method('getPassword')->willReturnOnConsecutiveCalls(null, 'autogeneratedPassword', 'autogeneratedPassword', 'autogeneratedPassword'); + $this->hasher->expects($this->once())->method('hash')->with('autogeneratedPassword')->willReturn('autogeneratedPasswordHashed'); + $share->expects($this->once())->method('setPassword')->with('autogeneratedPasswordHashed'); + + // The autogenerated password should be mailed to the owner of the share. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(true); + $this->config->expects($this->any())->method('getSystemValue')->with('sharing.enable_mail_link_password_expiration')->willReturn(false); + $this->settingsManager->expects($this->any())->method('sendPasswordByMail')->willReturn(true); + $instance->expects($this->once())->method('autoGeneratePassword')->with($share)->willReturn('autogeneratedPassword'); + + $message = $this->createMock(IMessage::class); + $setToCalls = [ + [['receiver@example.com']], + [['owner@example.com' => 'owner']], + ]; + $message->expects($this->exactly(2)) + ->method('setTo') + ->willReturnCallback(function () use (&$setToCalls, $message) { + $expected = array_shift($setToCalls); + $this->assertEquals($expected, func_get_args()); + return $message; + }); + $this->mailer->expects($this->exactly(2))->method('createMessage')->willReturn($message); + + $calls = [ + [ + 'sharebymail.RecipientNotification', + [ + 'filename' => 'filename', + 'link' => 'https://example.com/file.txt', + 'initiator' => 'owner', + 'expiration' => null, + 'shareWith' => 'receiver@example.com', + 'note' => '', + ], + ], + [ + 'sharebymail.OwnerPasswordNotification', + [ + 'filename' => 'filename', + 'password' => 'autogeneratedPassword', + 'initiator' => 'owner', + 'initiatorEmail' => 'owner@example.com', + 'shareWith' => 'receiver@example.com', + ], + ], + ]; + $this->mailer->expects($this->exactly(2)) + ->method('createEMailTemplate') + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + return $this->createMock(IEMailTemplate::class); + }); + + // Main email notification is sent as well as the password to owner + // because the password is set and SendPasswordByTalk is enabled. + $this->mailer->expects($this->exactly(2))->method('send'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + // If attributes is set to multiple emails, use them as BCC + public function sendNotificationToMultipleEmails() { + $expectedShare = $this->createMock(IShare::class); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn(''); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn(false); + $share->expects($this->any())->method('getSharedBy')->willReturn('owner'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + $attributes = $this->createMock(IAttributes::class); + $share->expects($this->any())->method('getAttributes')->willReturn($attributes); + $attributes->expects($this->any())->method('getAttribute')->with('shareWith', 'emails')->willReturn([ + 'receiver1@example.com', + 'receiver2@example.com', + 'receiver3@example.com', + ]); + + // Assume the mail address is valid. + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject', 'createShareActivity', 'autoGeneratePassword', 'createPasswordSendActivity', 'sendEmail', 'sendPassword', 'sendPasswordToOwner']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn([]); + $instance->expects($this->once())->method('createMailShare')->with($share)->willReturn(42); + $instance->expects($this->once())->method('createShareActivity')->with($share); + $instance->expects($this->once())->method('getRawShare')->with(42)->willReturn(['rawShare', 'password' => 'password']); + $instance->expects($this->once())->method('createShareObject')->with(['rawShare', 'password' => 'password'])->willReturn($expectedShare); + $share->expects($this->any())->method('getNode')->willReturn($node); + + $share->expects($this->any())->method('getPassword')->willReturn('password'); + $this->hasher->expects($this->once())->method('hash')->with('password')->willReturn('passwordHashed'); + $share->expects($this->once())->method('setPassword')->with('passwordHashed'); + + // The given password (but not the autogenerated password) should not be + // mailed to the receiver of the share because permanent passwords are not enforced. + $this->shareManager->expects($this->any())->method('shareApiLinkEnforcePassword')->willReturn(false); + $this->config->expects($this->once())->method('getSystemValue')->with('sharing.enable_mail_link_password_expiration')->willReturn(false); + $instance->expects($this->never())->method('autoGeneratePassword'); + + // A password is set but no password sent via talk has been requested + $instance->expects($this->once())->method('sendEmail') + ->with($share, ['receiver1@example.com', 'receiver2@example.com', 'receiver3@example.com']); + $instance->expects($this->once())->method('sendPassword')->with($share, 'password'); + $instance->expects($this->never())->method('sendPasswordToOwner'); + + + $message = $this->createMock(IMessage::class); + $message->expects($this->never())->method('setTo'); + $message->expects($this->exactly(2))->method('setBcc')->with(['receiver1@example.com', 'receiver2@example.com', 'receiver3@example.com']); + $this->mailer->expects($this->exactly(2))->method('createMessage')->willReturn($message); + + // Main email notification is sent as well as the password + // to recipients because the password is set. + $this->mailer->expects($this->exactly(2))->method('send'); + + $this->assertSame($expectedShare, $instance->create($share)); + $instance->sendMailNotification($share); + } + + public function testCreateFailed(): void { + $this->expectException(\Exception::class); + + $this->share->expects($this->once())->method('getSharedWith')->willReturn('user1'); + $node = $this->createMock('OCP\Files\Node'); + $node->expects($this->any())->method('getName')->willReturn('fileName'); + $this->share->expects($this->any())->method('getNode')->willReturn($node); + + $instance = $this->getInstance(['getSharedWith', 'createMailShare', 'getRawShare', 'createShareObject']); + + $instance->expects($this->once())->method('getSharedWith')->willReturn(['found']); + $instance->expects($this->never())->method('createMailShare'); + $instance->expects($this->never())->method('getRawShare'); + $instance->expects($this->never())->method('createShareObject'); + + $this->assertSame('shareObject', + $instance->create($this->share) + ); + } + + public function testCreateMailShare(): void { + $this->share->expects($this->any())->method('getToken')->willReturn('token'); + $this->share->expects($this->once())->method('setToken')->with('token'); + $this->share->expects($this->any())->method('getSharedBy')->willReturn('validby@valid.com'); + $this->share->expects($this->any())->method('getSharedWith')->willReturn('validwith@valid.com'); + $this->share->expects($this->any())->method('getNote')->willReturn('Check this!'); + $this->share->expects($this->any())->method('getMailSend')->willReturn(true); + + $node = $this->createMock('OCP\Files\Node'); + $node->expects($this->any())->method('getName')->willReturn('fileName'); + $this->share->expects($this->any())->method('getNode')->willReturn($node); + + $instance = $this->getInstance(['generateToken', 'addShareToDB', 'sendMailNotification']); + + $instance->expects($this->once())->method('generateToken')->willReturn('token'); + $instance->expects($this->once())->method('addShareToDB')->willReturn(42); + + // The manager handle the mail sending + $instance->expects($this->never())->method('sendMailNotification'); + + $this->assertSame(42, + $this->invokePrivate($instance, 'createMailShare', [$this->share]) + ); + } + + public function testGenerateToken(): void { + $instance = $this->getInstance(); + + $this->secureRandom->expects($this->once())->method('generate')->willReturn('token'); + + $this->assertSame('token', + $this->invokePrivate($instance, 'generateToken') + ); + } + + public function testAddShareToDB(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + $password = 'password'; + $sendPasswordByTalk = true; + $hideDownload = true; + $label = 'label'; + $expiration = new \DateTime(); + $passwordExpirationTime = new \DateTime(); + + + $instance = $this->getInstance(); + $id = $this->invokePrivate( + $instance, + 'addShareToDB', + [ + $itemSource, + $itemType, + $shareWith, + $sharedBy, + $uidOwner, + $permissions, + $token, + $password, + $passwordExpirationTime, + $sendPasswordByTalk, + $hideDownload, + $label, + $expiration + ] + ); + + $qb = $this->connection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))); + + $qResult = $qb->execute(); + $result = $qResult->fetchAll(); + $qResult->closeCursor(); + + $this->assertSame(1, count($result)); + + $this->assertSame($itemSource, (int)$result[0]['item_source']); + $this->assertSame($itemType, $result[0]['item_type']); + $this->assertSame($shareWith, $result[0]['share_with']); + $this->assertSame($sharedBy, $result[0]['uid_initiator']); + $this->assertSame($uidOwner, $result[0]['uid_owner']); + $this->assertSame($permissions, (int)$result[0]['permissions']); + $this->assertSame($token, $result[0]['token']); + $this->assertSame($password, $result[0]['password']); + $this->assertSame($passwordExpirationTime->getTimestamp(), \DateTime::createFromFormat('Y-m-d H:i:s', $result[0]['password_expiration_time'])->getTimestamp()); + $this->assertSame($sendPasswordByTalk, (bool)$result[0]['password_by_talk']); + $this->assertSame($hideDownload, (bool)$result[0]['hide_download']); + $this->assertSame($label, $result[0]['label']); + $this->assertSame($expiration->getTimestamp(), \DateTime::createFromFormat('Y-m-d H:i:s', $result[0]['expiration'])->getTimestamp()); + } + + public function testUpdate(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + $note = 'personal note'; + + + $instance = $this->getInstance(); + + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token, $note); + + $this->share->expects($this->once())->method('getPermissions')->willReturn($permissions + 1); + $this->share->expects($this->once())->method('getShareOwner')->willReturn($uidOwner); + $this->share->expects($this->once())->method('getSharedBy')->willReturn($sharedBy); + $this->share->expects($this->any())->method('getNote')->willReturn($note); + $this->share->expects($this->atLeastOnce())->method('getId')->willReturn($id); + $this->share->expects($this->atLeastOnce())->method('getNodeId')->willReturn($itemSource); + $this->share->expects($this->once())->method('getSharedWith')->willReturn($shareWith); + + $this->assertSame($this->share, + $instance->update($this->share) + ); + + $qb = $this->connection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))); + + $qResult = $qb->execute(); + $result = $qResult->fetchAll(); + $qResult->closeCursor(); + + $this->assertSame(1, count($result)); + + $this->assertSame($itemSource, (int)$result[0]['item_source']); + $this->assertSame($itemType, $result[0]['item_type']); + $this->assertSame($shareWith, $result[0]['share_with']); + $this->assertSame($sharedBy, $result[0]['uid_initiator']); + $this->assertSame($uidOwner, $result[0]['uid_owner']); + $this->assertSame($permissions + 1, (int)$result[0]['permissions']); + $this->assertSame($token, $result[0]['token']); + $this->assertSame($note, $result[0]['note']); + } + + public static function dataUpdateSendPassword(): array { + return [ + ['password', 'hashed', 'hashed new', false, false, true], + ['', 'hashed', 'hashed new', false, false, false], + [null, 'hashed', 'hashed new', false, false, false], + ['password', 'hashed', 'hashed', false, false, false], + ['password', 'hashed', 'hashed new', false, true, false], + ['password', 'hashed', 'hashed new', true, false, true], + ['password', 'hashed', 'hashed', true, false, true], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataUpdateSendPassword')] + public function testUpdateSendPassword(?string $plainTextPassword, string $originalPassword, string $newPassword, bool $originalSendPasswordByTalk, bool $newSendPasswordByTalk, bool $sendMail): void { + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('filename'); + + $this->settingsManager->method('sendPasswordByMail')->willReturn(true); + + $originalShare = $this->createMock(IShare::class); + $originalShare->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $originalShare->expects($this->any())->method('getNode')->willReturn($node); + $originalShare->expects($this->any())->method('getId')->willReturn(42); + $originalShare->expects($this->any())->method('getPassword')->willReturn($originalPassword); + $originalShare->expects($this->any())->method('getSendPasswordByTalk')->willReturn($originalSendPasswordByTalk); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedWith')->willReturn('receiver@example.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getPassword')->willReturn($newPassword); + $share->expects($this->any())->method('getSendPasswordByTalk')->willReturn($newSendPasswordByTalk); + + if ($sendMail) { + $this->mailer->expects($this->once())->method('createEMailTemplate')->with('sharebymail.RecipientPasswordNotification', [ + 'filename' => 'filename', + 'password' => $plainTextPassword, + 'initiator' => null, + 'initiatorEmail' => null, + 'shareWith' => 'receiver@example.com', + ]); + $this->mailer->expects($this->once())->method('send'); + } else { + $this->mailer->expects($this->never())->method('send'); + } + + $instance = $this->getInstance(['getShareById', 'createPasswordSendActivity']); + $instance->expects($this->once())->method('getShareById')->willReturn($originalShare); + + $this->assertSame($share, + $instance->update($share, $plainTextPassword) + ); + } + + public function testDelete(): void { + $instance = $this->getInstance(['removeShareFromTable', 'createShareActivity']); + $this->share->expects($this->once())->method('getId')->willReturn(42); + $instance->expects($this->once())->method('removeShareFromTable')->with(42); + $instance->expects($this->once())->method('createShareActivity')->with($this->share, 'unshare'); + $instance->delete($this->share); + } + + public function testGetShareById(): void { + $instance = $this->getInstance(['createShareObject']); + + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $this->createDummyShare($itemType, $itemSource, $shareWith, 'user1wrong', 'user2wrong', $permissions, $token); + $id2 = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $instance->expects($this->once())->method('createShareObject') + ->willReturnCallback( + function ($data) use ($uidOwner, $sharedBy, $id2) { + $this->assertSame($uidOwner, $data['uid_owner']); + $this->assertSame($sharedBy, $data['uid_initiator']); + $this->assertSame($id2, (int)$data['id']); + return $this->share; + } + ); + + $result = $instance->getShareById($id2); + + $this->assertInstanceOf('OCP\Share\IShare', $result); + } + + + public function testGetShareByIdFailed(): void { + $this->expectException(ShareNotFound::class); + + $instance = $this->getInstance(['createShareObject']); + + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $instance->getShareById($id + 1); + } + + public function testGetShareByPath(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $node = $this->createMock(Node::class); + $node->expects($this->once())->method('getId')->willReturn($itemSource); + + + $instance = $this->getInstance(['createShareObject']); + + $this->createDummyShare($itemType, 111, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $instance->expects($this->once())->method('createShareObject') + ->willReturnCallback( + function ($data) use ($uidOwner, $sharedBy, $id) { + $this->assertSame($uidOwner, $data['uid_owner']); + $this->assertSame($sharedBy, $data['uid_initiator']); + $this->assertSame($id, (int)$data['id']); + return $this->share; + } + ); + + $result = $instance->getSharesByPath($node); + + $this->assertTrue(is_array($result)); + $this->assertSame(1, count($result)); + $this->assertInstanceOf('OCP\Share\IShare', $result[0]); + } + + public function testGetShareByToken(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $instance = $this->getInstance(['createShareObject']); + + $idMail = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + $idPublic = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token, '', IShare::TYPE_LINK); + + $this->assertTrue($idMail !== $idPublic); + + $instance->expects($this->once())->method('createShareObject') + ->willReturnCallback( + function ($data) use ($idMail) { + $this->assertSame($idMail, (int)$data['id']); + return $this->share; + } + ); + + $result = $instance->getShareByToken('token'); + + $this->assertInstanceOf('OCP\Share\IShare', $result); + } + + + public function testGetShareByTokenFailed(): void { + $this->expectException(ShareNotFound::class); + + + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $instance = $this->getInstance(['createShareObject']); + + $idMail = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + $idPublic = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, 'token2', '', IShare::TYPE_LINK); + + $this->assertTrue($idMail !== $idPublic); + + $this->assertInstanceOf('OCP\Share\IShare', + $instance->getShareByToken('token2') + ); + } + + public function testRemoveShareFromTable(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $instance = $this->getInstance(); + + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $query = $this->connection->getQueryBuilder(); + $query->select('*')->from('share') + ->where($query->expr()->eq('id', $query->createNamedParameter($id))); + + $result = $query->execute(); + $before = $result->fetchAll(); + $result->closeCursor(); + + $this->assertTrue(is_array($before)); + $this->assertSame(1, count($before)); + + $this->invokePrivate($instance, 'removeShareFromTable', [$id]); + + $query = $this->connection->getQueryBuilder(); + $query->select('*')->from('share') + ->where($query->expr()->eq('id', $query->createNamedParameter($id))); + + $result = $query->execute(); + $after = $result->fetchAll(); + $result->closeCursor(); + + $this->assertTrue(is_array($after)); + $this->assertEmpty($after); + } + + public function testUserDeleted(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, 'user2Wrong', $permissions, $token); + + $query = $this->connection->getQueryBuilder(); + $query->select('*')->from('share'); + + $result = $query->execute(); + $before = $result->fetchAll(); + $result->closeCursor(); + + $this->assertTrue(is_array($before)); + $this->assertSame(2, count($before)); + + + $instance = $this->getInstance(); + + $instance->userDeleted($uidOwner, IShare::TYPE_EMAIL); + + $query = $this->connection->getQueryBuilder(); + $query->select('*')->from('share'); + + $result = $query->execute(); + $after = $result->fetchAll(); + $result->closeCursor(); + + $this->assertTrue(is_array($after)); + $this->assertSame(1, count($after)); + $this->assertSame($id, (int)$after[0]['id']); + } + + public function testGetRawShare(): void { + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $instance = $this->getInstance(); + + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $result = $this->invokePrivate($instance, 'getRawShare', [$id]); + + $this->assertTrue(is_array($result)); + $this->assertSame($itemSource, (int)$result['item_source']); + $this->assertSame($itemType, $result['item_type']); + $this->assertSame($shareWith, $result['share_with']); + $this->assertSame($sharedBy, $result['uid_initiator']); + $this->assertSame($uidOwner, $result['uid_owner']); + $this->assertSame($permissions, (int)$result['permissions']); + $this->assertSame($token, $result['token']); + } + + + public function testGetRawShareFailed(): void { + $this->expectException(ShareNotFound::class); + + $itemSource = 11; + $itemType = 'file'; + $shareWith = 'user@server.com'; + $sharedBy = 'user1'; + $uidOwner = 'user2'; + $permissions = 1; + $token = 'token'; + + $instance = $this->getInstance(); + + $id = $this->createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token); + + $this->invokePrivate($instance, 'getRawShare', [$id + 1]); + } + + private function createDummyShare($itemType, $itemSource, $shareWith, $sharedBy, $uidOwner, $permissions, $token, $note = '', $shareType = IShare::TYPE_EMAIL) { + $qb = $this->connection->getQueryBuilder(); + $qb->insert('share') + ->setValue('share_type', $qb->createNamedParameter($shareType)) + ->setValue('item_type', $qb->createNamedParameter($itemType)) + ->setValue('item_source', $qb->createNamedParameter($itemSource)) + ->setValue('file_source', $qb->createNamedParameter($itemSource)) + ->setValue('share_with', $qb->createNamedParameter($shareWith)) + ->setValue('uid_owner', $qb->createNamedParameter($uidOwner)) + ->setValue('uid_initiator', $qb->createNamedParameter($sharedBy)) + ->setValue('permissions', $qb->createNamedParameter($permissions)) + ->setValue('token', $qb->createNamedParameter($token)) + ->setValue('note', $qb->createNamedParameter($note)) + ->setValue('stime', $qb->createNamedParameter(time())); + + /* + * Added to fix https://github.com/owncloud/core/issues/22215 + * Can be removed once we get rid of ajax/share.php + */ + $qb->setValue('file_target', $qb->createNamedParameter('')); + + $qb->execute(); + $id = $qb->getLastInsertId(); + + return (int)$id; + } + + public function testGetSharesInFolder(): void { + $userManager = Server::get(IUserManager::class); + $rootFolder = Server::get(IRootFolder::class); + + $this->shareManager->expects($this->any()) + ->method('newShare') + ->willReturn(new Share($rootFolder, $userManager)); + + $provider = $this->getInstance(['sendMailNotification', 'createShareActivity']); + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $u1 = $userManager->createUser('testFed', md5((string)time())); + $u2 = $userManager->createUser('testFed2', md5((string)time())); + + $folder1 = $rootFolder->getUserFolder($u1->getUID())->newFolder('foo'); + $file1 = $folder1->newFile('bar1'); + $file2 = $folder1->newFile('bar2'); + + $share1 = $this->shareManager->newShare(); + $share1->setSharedWith('user@server.com') + ->setSharedBy($u1->getUID()) + ->setShareOwner($u1->getUID()) + ->setPermissions(Constants::PERMISSION_READ) + ->setNode($file1); + $provider->create($share1); + + $share2 = $this->shareManager->newShare(); + $share2->setSharedWith('user@server.com') + ->setSharedBy($u2->getUID()) + ->setShareOwner($u1->getUID()) + ->setPermissions(Constants::PERMISSION_READ) + ->setNode($file2); + $provider->create($share2); + + $result = $provider->getSharesInFolder($u1->getUID(), $folder1, false); + $this->assertCount(1, $result); + $this->assertCount(1, $result[$file1->getId()]); + + $result = $provider->getSharesInFolder($u1->getUID(), $folder1, true); + $this->assertCount(2, $result); + $this->assertCount(1, $result[$file1->getId()]); + $this->assertCount(1, $result[$file2->getId()]); + + $u1->delete(); + $u2->delete(); + } + + public function testGetAccessList(): void { + $userManager = Server::get(IUserManager::class); + $rootFolder = Server::get(IRootFolder::class); + + $this->shareManager->expects($this->any()) + ->method('newShare') + ->willReturn(new Share($rootFolder, $userManager)); + + $provider = $this->getInstance(['sendMailNotification', 'createShareActivity']); + $this->mailer->expects($this->any())->method('validateMailAddress')->willReturn(true); + + $u1 = $userManager->createUser('testFed', md5((string)time())); + $u2 = $userManager->createUser('testFed2', md5((string)time())); + + $folder = $rootFolder->getUserFolder($u1->getUID())->newFolder('foo'); + + $accessList = $provider->getAccessList([$folder], true); + $this->assertArrayHasKey('public', $accessList); + $this->assertFalse($accessList['public']); + $accessList = $provider->getAccessList([$folder], false); + $this->assertArrayHasKey('public', $accessList); + $this->assertFalse($accessList['public']); + + $share1 = $this->shareManager->newShare(); + $share1->setSharedWith('user@server.com') + ->setSharedBy($u1->getUID()) + ->setShareOwner($u1->getUID()) + ->setPermissions(Constants::PERMISSION_READ) + ->setNode($folder); + $share1 = $provider->create($share1); + + $share2 = $this->shareManager->newShare(); + $share2->setSharedWith('user2@server.com') + ->setSharedBy($u2->getUID()) + ->setShareOwner($u1->getUID()) + ->setPermissions(Constants::PERMISSION_READ) + ->setNode($folder); + $share2 = $provider->create($share2); + + $accessList = $provider->getAccessList([$folder], true); + $this->assertArrayHasKey('public', $accessList); + $this->assertTrue($accessList['public']); + $accessList = $provider->getAccessList([$folder], false); + $this->assertArrayHasKey('public', $accessList); + $this->assertTrue($accessList['public']); + + $provider->delete($share2); + + $accessList = $provider->getAccessList([$folder], true); + $this->assertArrayHasKey('public', $accessList); + $this->assertTrue($accessList['public']); + $accessList = $provider->getAccessList([$folder], false); + $this->assertArrayHasKey('public', $accessList); + $this->assertTrue($accessList['public']); + + $provider->delete($share1); + + $accessList = $provider->getAccessList([$folder], true); + $this->assertArrayHasKey('public', $accessList); + $this->assertFalse($accessList['public']); + $accessList = $provider->getAccessList([$folder], false); + $this->assertArrayHasKey('public', $accessList); + $this->assertFalse($accessList['public']); + + $u1->delete(); + $u2->delete(); + } + + public function testSendMailNotificationWithSameUserAndUserEmail(): void { + $provider = $this->getInstance(); + $user = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('OwnerUser') + ->willReturn($user); + $user + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mrs. Owner User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mrs. Owner User shared file.txt with you'); + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'Mrs. Owner User via UnitTestCloud' + ]); + $user + ->expects($this->once()) + ->method('getEMailAddress') + ->willReturn('owner@example.com'); + $message + ->expects($this->once()) + ->method('setReplyTo') + ->with(['owner@example.com' => 'Mrs. Owner User']); + $this->defaults + ->expects($this->exactly(2)) + ->method('getSlogan') + ->willReturn('Testing like 1990'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with('UnitTestCloud - Testing like 1990'); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mrs. Owner User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('OwnerUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } + + public function testSendMailNotificationWithSameUserAndUserEmailAndNote(): void { + $provider = $this->getInstance(); + $user = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('OwnerUser') + ->willReturn($user); + $user + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mrs. Owner User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mrs. Owner User shared file.txt with you'); + + $this->urlGenerator->expects($this->once())->method('imagePath') + ->with('core', 'caldav/description.png') + ->willReturn('core/img/caldav/description.png'); + $this->urlGenerator->expects($this->once())->method('getAbsoluteURL') + ->with('core/img/caldav/description.png') + ->willReturn('https://example.com/core/img/caldav/description.png'); + $template + ->expects($this->once()) + ->method('addBodyListItem') + ->with( + 'This is a note to the recipient', + 'Note:', + 'https://example.com/core/img/caldav/description.png', + 'This is a note to the recipient' + ); + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'Mrs. Owner User via UnitTestCloud' + ]); + $user + ->expects($this->once()) + ->method('getEMailAddress') + ->willReturn('owner@example.com'); + $message + ->expects($this->once()) + ->method('setReplyTo') + ->with(['owner@example.com' => 'Mrs. Owner User']); + $this->defaults + ->expects($this->exactly(2)) + ->method('getSlogan') + ->willReturn('Testing like 1990'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with('UnitTestCloud - Testing like 1990'); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mrs. Owner User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('OwnerUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn('This is a note to the recipient'); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } + + public function testSendMailNotificationWithSameUserAndUserEmailAndExpiration(): void { + $provider = $this->getInstance(); + $user = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('OwnerUser') + ->willReturn($user); + $user + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mrs. Owner User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mrs. Owner User shared file.txt with you'); + + $expiration = new DateTime('2001-01-01'); + $this->l->expects($this->once()) + ->method('l') + ->with('date', $expiration, ['width' => 'medium']) + ->willReturn('2001-01-01'); + $this->urlGenerator->expects($this->once())->method('imagePath') + ->with('core', 'caldav/time.png') + ->willReturn('core/img/caldav/time.png'); + $this->urlGenerator->expects($this->once())->method('getAbsoluteURL') + ->with('core/img/caldav/time.png') + ->willReturn('https://example.com/core/img/caldav/time.png'); + $template + ->expects($this->once()) + ->method('addBodyListItem') + ->with( + 'This share is valid until 2001-01-01 at midnight', + 'Expiration:', + 'https://example.com/core/img/caldav/time.png', + ); + + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'Mrs. Owner User via UnitTestCloud' + ]); + $user + ->expects($this->once()) + ->method('getEMailAddress') + ->willReturn('owner@example.com'); + $message + ->expects($this->once()) + ->method('setReplyTo') + ->with(['owner@example.com' => 'Mrs. Owner User']); + $this->defaults + ->expects($this->exactly(2)) + ->method('getSlogan') + ->willReturn('Testing like 1990'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with('UnitTestCloud - Testing like 1990'); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mrs. Owner User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('OwnerUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getExpirationDate')->willReturn($expiration); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } + + public function testSendMailNotificationWithDifferentUserAndNoUserEmail(): void { + $provider = $this->getInstance(); + $initiatorUser = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('InitiatorUser') + ->willReturn($initiatorUser); + $initiatorUser + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mr. Initiator User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mr. Initiator User shared file.txt with you'); + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'Mr. Initiator User via UnitTestCloud' + ]); + $message + ->expects($this->never()) + ->method('setReplyTo'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with(''); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mr. Initiator User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('InitiatorUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } + + public function testSendMailNotificationWithSameUserAndUserEmailAndReplyToDesactivate(): void { + $provider = $this->getInstance(); + $user = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(false); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('OwnerUser') + ->willReturn($user); + $user + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mrs. Owner User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mrs. Owner User shared file.txt with you'); + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'UnitTestCloud' + ]); + // Since replyToInitiator is false, we never get the initiator email address + $user + ->expects($this->never()) + ->method('getEMailAddress'); + $message + ->expects($this->never()) + ->method('setReplyTo'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with(''); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mrs. Owner User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('OwnerUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } + + public function testSendMailNotificationWithDifferentUserAndNoUserEmailAndReplyToDesactivate(): void { + $provider = $this->getInstance(); + $initiatorUser = $this->createMock(IUser::class); + $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(false); + $this->userManager + ->expects($this->once()) + ->method('get') + ->with('InitiatorUser') + ->willReturn($initiatorUser); + $initiatorUser + ->expects($this->once()) + ->method('getDisplayName') + ->willReturn('Mr. Initiator User'); + $message = $this->createMock(Message::class); + $this->mailer + ->expects($this->once()) + ->method('createMessage') + ->willReturn($message); + $template = $this->createMock(IEMailTemplate::class); + $this->mailer + ->expects($this->once()) + ->method('createEMailTemplate') + ->willReturn($template); + $template + ->expects($this->once()) + ->method('addHeader'); + $template + ->expects($this->once()) + ->method('addHeading') + ->with('Mr. Initiator User shared file.txt with you'); + $template + ->expects($this->once()) + ->method('addBodyButton') + ->with( + 'Open file.txt', + 'https://example.com/file.txt' + ); + $message + ->expects($this->once()) + ->method('setTo') + ->with(['john@doe.com']); + $this->defaults + ->expects($this->once()) + ->method('getName') + ->willReturn('UnitTestCloud'); + $message + ->expects($this->once()) + ->method('setFrom') + ->with([ + Util::getDefaultEmailAddress('UnitTestCloud') => 'UnitTestCloud' + ]); + $message + ->expects($this->never()) + ->method('setReplyTo'); + $template + ->expects($this->once()) + ->method('addFooter') + ->with(''); + $template + ->expects($this->once()) + ->method('setSubject') + ->with('Mr. Initiator User shared file.txt with you'); + $message + ->expects($this->once()) + ->method('useTemplate') + ->with($template); + + $this->mailer->expects($this->once()) + ->method('validateMailAddress') + ->willReturn(true); + $this->mailer + ->expects($this->once()) + ->method('send') + ->with($message); + + $this->urlGenerator->expects($this->once())->method('linkToRouteAbsolute') + ->with('files_sharing.sharecontroller.showShare', ['token' => 'token']) + ->willReturn('https://example.com/file.txt'); + + $node = $this->createMock(File::class); + $node->expects($this->any())->method('getName')->willReturn('file.txt'); + + $share = $this->createMock(IShare::class); + $share->expects($this->any())->method('getSharedBy')->willReturn('InitiatorUser'); + $share->expects($this->any())->method('getSharedWith')->willReturn('john@doe.com'); + $share->expects($this->any())->method('getNode')->willReturn($node); + $share->expects($this->any())->method('getId')->willReturn(42); + $share->expects($this->any())->method('getNote')->willReturn(''); + $share->expects($this->any())->method('getToken')->willReturn('token'); + + self::invokePrivate( + $provider, + 'sendMailNotification', + [$share] + ); + } +} |