diff options
Diffstat (limited to 'core')
303 files changed, 13377 insertions, 6731 deletions
diff --git a/core/ajax/appconfig.php b/core/ajax/appconfig.php index 4b670d8c5c3..3ad32ff1a3e 100644 --- a/core/ajax/appconfig.php +++ b/core/ajax/appconfig.php @@ -1,8 +1,25 @@ <?php /** - * Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com> - * This file is licensed under the Affero General Public License version 3 or later. - * See the COPYING-README file. + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ OC_Util::checkAdminUser(); diff --git a/core/ajax/preview.php b/core/ajax/preview.php index f7e24e0ec28..fc98d80eb0e 100644 --- a/core/ajax/preview.php +++ b/core/ajax/preview.php @@ -1,9 +1,26 @@ <?php /** - * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Georg Ehrke <georg@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ \OC_Util::checkLoggedIn(); \OC::$server->getSession()->close(); @@ -18,24 +35,23 @@ $always = array_key_exists('forceIcon', $_GET) ? (bool)$_GET['forceIcon'] : true if ($file === '') { //400 Bad Request \OC_Response::setStatus(400); - \OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG); + \OCP\Util::writeLog('core-preview', 'No file parameter was passed', \OCP\Util::DEBUG); exit; } if ($maxX === 0 || $maxY === 0) { //400 Bad Request \OC_Response::setStatus(400); - \OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG); + \OCP\Util::writeLog('core-preview', 'x and/or y set to 0', \OCP\Util::DEBUG); exit; } -$preview = new \OC\Preview(\OC_User::getUser(), 'files'); - $info = \OC\Files\Filesystem::getFileInfo($file); -if (!$info instanceof OCP\Files\FileInfo || !$always && !$preview->isAvailable($info)) { +if (!$info instanceof OCP\Files\FileInfo || !$always && !\OC::$server->getPreviewManager()->isAvailable($info)) { \OC_Response::setStatus(404); } else { + $preview = new \OC\Preview(\OC_User::getUser(), 'files'); $preview->setFile($file); $preview->setMaxX($maxX); $preview->setMaxY($maxY); diff --git a/core/ajax/share.php b/core/ajax/share.php index 95219ce8791..69b84564ab1 100644 --- a/core/ajax/share.php +++ b/core/ajax/share.php @@ -1,23 +1,38 @@ <?php /** -* ownCloud -* -* @author Michael Gapczynski -* @copyright 2012 Michael Gapczynski mtgap@owncloud.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -*/ + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Bart Visscher <bartv@thisnet.nl> + * @author Björn Schießle <schiessle@owncloud.com> + * @author Craig Morrissey <craig@owncloud.com> + * @author dampfklon <me@dampfklon.de> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Jörn Friedrich Dreyer <jfd@butonic.de> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Michael Gapczynski <GapczynskiM@gmail.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Ramiro Aparicio <rapariciog@gmail.com> + * @author Robin Appelman <icewind@owncloud.com> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Thomas Tanghus <thomas@tanghus.net> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ OC_JSON::checkLoggedIn(); OCP\JSON::callCheck(); @@ -52,6 +67,8 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo } else { OC_JSON::success(); } + } catch (\OC\HintException $exception) { + OC_JSON::error(array('data' => array('message' => $exception->getHint()))); } catch (Exception $exception) { OC_JSON::error(array('data' => array('message' => $exception->getMessage()))); } @@ -105,7 +122,14 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo // don't send a mail to the user who shared the file $recipientList = array_diff($recipientList, array(\OCP\User::getUser())); - $mailNotification = new OC\Share\MailNotifications(); + $mailNotification = new \OC\Share\MailNotifications( + \OC::$server->getUserSession()->getUser()->getUID(), + \OC::$server->getConfig(), + \OC::$server->getL10N('lib'), + \OC::$server->getMailer(), + \OC::$server->getLogger(), + $defaults + ); $result = $mailNotification->sendInternalShareMail($recipientList, $itemSource, $itemType); \OCP\Share::setSendMailStatus($itemType, $itemSource, $shareType, $recipient, true); @@ -137,7 +161,14 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $file = (string)$_POST['file']; $to_address = (string)$_POST['toaddress']; - $mailNotification = new \OC\Share\MailNotifications(); + $mailNotification = new \OC\Share\MailNotifications( + \OC::$server->getUserSession()->getUser()->getUID(), + \OC::$server->getConfig(), + \OC::$server->getL10N('lib'), + \OC::$server->getMailer(), + \OC::$server->getLogger(), + $defaults + ); $expiration = null; if (isset($_POST['expiration']) && $_POST['expiration'] !== '') { @@ -241,19 +272,41 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $usergroups = OC_Group::getUserGroups(OC_User::getUser()); $groups = array_intersect($groups, $usergroups); } + + $sharedUsers = []; + $sharedGroups = []; + if (isset($_GET['itemShares'])) { + if (isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) && + is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) { + $sharedUsers = $_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]; + } + + if (isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) && + is_array($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP])) { + $sharedGroups = isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]); + } + } + $count = 0; $users = array(); $limit = 0; $offset = 0; - while ($count < 15 && count($users) == $limit) { - $limit = 15 - $count; + // limit defaults to 15 if not specified via request parameter and can be no larger than 500 + $request_limit = min((int)$_GET['limit'] ?: 15, 500); + while ($count < $request_limit && count($users) == $limit) { + $limit = $request_limit - $count; if ($shareWithinGroupOnly) { - $users = OC_Group::DisplayNamesInGroups($usergroups, (string)$_GET['search'], $limit, $offset); + $users = OC_Group::displayNamesInGroups($usergroups, (string)$_GET['search'], $limit, $offset); } else { $users = OC_User::getDisplayNames((string)$_GET['search'], $limit, $offset); } + $offset += $limit; foreach ($users as $uid => $displayName) { + if (in_array($uid, $sharedUsers)) { + continue; + } + if ((!isset($_GET['itemShares']) || !is_array((string)$_GET['itemShares'][OCP\Share::SHARE_TYPE_USER]) || !in_array($uid, (string)$_GET['itemShares'][OCP\Share::SHARE_TYPE_USER])) @@ -274,7 +327,11 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo $l = \OC::$server->getL10N('core'); foreach ($groups as $group) { - if ($count < 15) { + if (in_array($group, $sharedGroups)) { + continue; + } + + if ($count < $request_limit) { if (!isset($_GET['itemShares']) || !isset($_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) || !is_array((string)$_GET['itemShares'][OCP\Share::SHARE_TYPE_GROUP]) @@ -305,11 +362,27 @@ if (isset($_POST['action']) && isset($_POST['itemType']) && isset($_POST['itemSo ) ); } + $contactManager = \OC::$server->getContactsManager(); + $addressBookContacts = $contactManager->search($_GET['search'], ['CLOUD', 'FN']); + foreach ($addressBookContacts as $contact) { + if (isset($contact['CLOUD'])) { + foreach ($contact['CLOUD'] as $cloudId) { + $shareWith[] = array( + 'label' => $contact['FN'] . ' (' . $cloudId . ')', + 'value' => array( + 'shareType' => \OCP\Share::SHARE_TYPE_REMOTE, + 'shareWith' => $cloudId + ) + ); + } + } + } } + $sorter = new \OC\Share\SearchResultSorter((string)$_GET['search'], 'label', - new \OC\Log()); + \OC::$server->getLogger()); usort($shareWith, array($sorter, 'sort')); OC_JSON::success(array('data' => $shareWith)); } diff --git a/core/ajax/update.php b/core/ajax/update.php index 6d2dccfac7d..14b4f913f76 100644 --- a/core/ajax/update.php +++ b/core/ajax/update.php @@ -1,4 +1,30 @@ <?php +/** + * @author Bart Visscher <bartv@thisnet.nl> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Michael Gapczynski <GapczynskiM@gmail.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ set_time_limit(0); require_once '../../lib/base.php'; @@ -11,20 +37,24 @@ if (OC::checkUpgrade(false)) { $l = new \OC_L10N('core'); $eventSource = \OC::$server->createEventSource(); + $logger = \OC::$server->getLogger(); $updater = new \OC\Updater( \OC::$server->getHTTPHelper(), \OC::$server->getConfig(), - \OC_Log::$object + $logger ); $incompatibleApps = []; $disabledThirdPartyApps = []; - $updater->listen('\OC\Updater', 'maintenanceStart', function () use ($eventSource, $l) { + $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use ($eventSource, $l) { $eventSource->send('success', (string)$l->t('Turned on maintenance mode')); }); - $updater->listen('\OC\Updater', 'maintenanceEnd', function () use ($eventSource, $l) { + $updater->listen('\OC\Updater', 'maintenanceDisabled', function () use ($eventSource, $l) { $eventSource->send('success', (string)$l->t('Turned off maintenance mode')); }); + $updater->listen('\OC\Updater', 'maintenanceActive', function () use ($eventSource, $l) { + $eventSource->send('success', (string)$l->t('Maintenance mode is kept active')); + }); $updater->listen('\OC\Updater', 'dbUpgrade', function () use ($eventSource, $l) { $eventSource->send('success', (string)$l->t('Updated database')); }); @@ -63,7 +93,7 @@ if (OC::checkUpgrade(false)) { } if (!empty($disabledThirdPartyApps)) { $eventSource->send('notice', - (string)$l->t('Following 3rd party apps have been disabled: %s', implode(', ', $disabledThirdPartyApps))); + (string)$l->t('Following apps have been disabled: %s', implode(', ', $disabledThirdPartyApps))); } $eventSource->send('done', ''); diff --git a/core/application.php b/core/application.php index 568fc34db7d..0fbb8dacdb7 100644 --- a/core/application.php +++ b/core/application.php @@ -1,11 +1,27 @@ <?php /** - * @author Victor Dubiniuk - * @copyright 2014 Victor Dubiniuk victor.dubiniuk@gmail.com + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> * - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. */ namespace OC\Core; @@ -46,7 +62,8 @@ class Application extends App { $c->query('Config'), $c->query('SecureRandom'), $c->query('DefaultEmailAddress'), - $c->query('IsEncryptionEnabled') + $c->query('IsEncryptionEnabled'), + $c->query('Mailer') ); }); $container->registerService('UserController', function(SimpleContainer $c) { @@ -72,8 +89,8 @@ class Application extends App { /** * Core class wrappers */ - $container->registerService('IsEncryptionEnabled', function() { - return \OC_App::isEnabled('files_encryption'); + $container->registerService('IsEncryptionEnabled', function(SimpleContainer $c) { + return $c->query('ServerContainer')->getEncryptionManager()->isEnabled(); }); $container->registerService('URLGenerator', function(SimpleContainer $c) { return $c->query('ServerContainer')->getURLGenerator(); @@ -104,6 +121,9 @@ class Application extends App { $container->registerService('Defaults', function() { return new \OC_Defaults; }); + $container->registerService('Mailer', function(SimpleContainer $c) { + return $c->query('ServerContainer')->getMailer(); + }); $container->registerService('DefaultEmailAddress', function() { return Util::getDefaultEmailAddress('lostpassword-noreply'); }); diff --git a/core/avatar/avatarcontroller.php b/core/avatar/avatarcontroller.php index f63e02b7761..95baf23f4fa 100644 --- a/core/avatar/avatarcontroller.php +++ b/core/avatar/avatarcontroller.php @@ -1,5 +1,9 @@ <?php /** + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> * @author Roeland Jago Douma <roeland@famdouma.nl> * * @copyright Copyright (c) 2015, ownCloud, Inc. @@ -41,7 +45,7 @@ class AvatarController extends Controller { /** @var IAvatarManager */ protected $avatarManager; - /** @var ICache */ + /** @var \OC\Cache\File */ protected $cache; /** @var IL10N */ @@ -57,7 +61,7 @@ class AvatarController extends Controller { * @param string $appName * @param IRequest $request * @param IAvatarManager $avatarManager - * @param ICache $cache + * @param \OC\Cache\File $cache * @param IL10N $l10n * @param IUserManager $userManager * @param IUserSession $userSession @@ -65,7 +69,7 @@ class AvatarController extends Controller { public function __construct($appName, IRequest $request, IAvatarManager $avatarManager, - ICache $cache, + \OC\Cache\File $cache, IL10N $l10n, IUserManager $userManager, IUserSession $userSession) { @@ -95,7 +99,7 @@ class AvatarController extends Controller { $avatar = $this->avatarManager->getAvatar($userId); $image = $avatar->get($size); - if ($image instanceof \OC_Image) { + if ($image instanceof \OCP\IImage) { $resp = new DataDisplayResponse($image->data(), Http::STATUS_OK, ['Content-Type' => $image->mimeType()]); @@ -207,8 +211,7 @@ class AvatarController extends Controller { $resp = new DataDisplayResponse($image->data(), Http::STATUS_OK, - ['Content-Type' => $image->mimeType(), - 'Pragma' => 'public']); + ['Content-Type' => $image->mimeType()]); $resp->setETag(crc32($image->data())); $resp->cacheFor(0); @@ -244,7 +247,7 @@ class AvatarController extends Controller { } $image = new \OC_Image($tmpAvatar); - $image->crop($crop['x'], $crop['y'], $crop['w'], $crop['h']); + $image->crop($crop['x'], $crop['y'], round($crop['w']), round($crop['h'])); try { $avatar = $this->avatarManager->getAvatar($userId); $avatar->set($image); diff --git a/core/command/app/checkcode.php b/core/command/app/checkcode.php index 55c30b900b3..ecec51e5768 100644 --- a/core/command/app/checkcode.php +++ b/core/command/app/checkcode.php @@ -1,9 +1,24 @@ <?php /** - * Copyright (c) 2015 Thomas Müller <deepdiver@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\App; @@ -21,7 +36,7 @@ class CheckCode extends Command { ->addArgument( 'app-id', InputArgument::REQUIRED, - 'enable the specified app' + 'check the specified app' ); } @@ -29,16 +44,27 @@ class CheckCode extends Command { $appId = $input->getArgument('app-id'); $codeChecker = new \OC\App\CodeChecker(); $codeChecker->listen('CodeChecker', 'analyseFileBegin', function($params) use ($output) { - $output->writeln("<info>Analysing {$params}</info>"); + if(OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { + $output->writeln("<info>Analysing {$params}</info>"); + } }); - $codeChecker->listen('CodeChecker', 'analyseFileFinished', function($params) use ($output) { - $count = count($params); - $output->writeln(" {$count} errors"); - usort($params, function($a, $b) { + $codeChecker->listen('CodeChecker', 'analyseFileFinished', function($filename, $errors) use ($output) { + $count = count($errors); + + // show filename if the verbosity is low, but there are errors in a file + if($count > 0 && OutputInterface::VERBOSITY_VERBOSE > $output->getVerbosity()) { + $output->writeln("<info>Analysing {$filename}</info>"); + } + + // show error count if there are errros present or the verbosity is high + if($count > 0 || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { + $output->writeln(" {$count} errors"); + } + usort($errors, function($a, $b) { return $a['line'] >$b['line']; }); - foreach($params as $p) { + foreach($errors as $p) { $line = sprintf("%' 4d", $p['line']); $output->writeln(" <error>line $line: {$p['disallowedToken']} - {$p['reason']}</error>"); } @@ -48,6 +74,7 @@ class CheckCode extends Command { $output->writeln('<info>App is compliant - awesome job!</info>'); } else { $output->writeln('<error>App is not compliant</error>'); + return 1; } } } diff --git a/core/command/app/disable.php b/core/command/app/disable.php index 2e028d183bb..21a88f0a923 100644 --- a/core/command/app/disable.php +++ b/core/command/app/disable.php @@ -1,9 +1,23 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\App; diff --git a/core/command/app/enable.php b/core/command/app/enable.php index f08546602ee..2e68cfa97ff 100644 --- a/core/command/app/enable.php +++ b/core/command/app/enable.php @@ -1,9 +1,23 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\App; diff --git a/core/command/app/listapps.php b/core/command/app/listapps.php index e957c15547a..e30baddb745 100644 --- a/core/command/app/listapps.php +++ b/core/command/app/listapps.php @@ -1,28 +1,45 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\App; -use Symfony\Component\Console\Command\Command; +use OC\Core\Command\Base; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class ListApps extends Command { +class ListApps extends Base { protected function configure() { + parent::configure(); + $this ->setName('app:list') - ->setDescription('List all available apps'); + ->setDescription('List all available apps') + ; } protected function execute(InputInterface $input, OutputInterface $output) { $apps = \OC_App::getAllApps(); - $enabledApps = array(); - $disabledApps = array(); + $enabledApps = $disabledApps = []; $versions = \OC_App::getAppVersions(); //sort enabled apps above disabled apps @@ -34,15 +51,39 @@ class ListApps extends Command { } } + $apps = ['enabled' => [], 'disabled' => []]; + sort($enabledApps); - sort($disabledApps); - $output->writeln('Enabled:'); foreach ($enabledApps as $app) { - $output->writeln(' - ' . $app . (isset($versions[$app]) ? ' (' . $versions[$app] . ')' : '')); + $apps['enabled'][$app] = (isset($versions[$app])) ? $versions[$app] : true; } - $output->writeln('Disabled:'); + + sort($disabledApps); foreach ($disabledApps as $app) { - $output->writeln(' - ' . $app . (isset($versions[$app]) ? ' (' . $versions[$app] . ')' : '')); + $apps['disabled'][$app] = null; + } + + $this->writeAppList($input, $output, $apps); + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @param array $items + */ + protected function writeAppList(InputInterface $input, OutputInterface $output, $items) { + switch ($input->getOption('output')) { + case 'plain': + $output->writeln('Enabled:'); + parent::writeArrayInOutputFormat($input, $output, $items['enabled']); + + $output->writeln('Disabled:'); + parent::writeArrayInOutputFormat($input, $output, $items['disabled']); + break; + + default: + parent::writeArrayInOutputFormat($input, $output, $items); + break; } } } diff --git a/core/command/base.php b/core/command/base.php new file mode 100644 index 00000000000..7e61c0cb9ab --- /dev/null +++ b/core/command/base.php @@ -0,0 +1,113 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class Base extends Command { + protected function configure() { + $this + ->addOption( + 'output', + null, + InputOption::VALUE_OPTIONAL, + 'Output format (plain, json or json_pretty, default is plain)', + 'plain' + ) + ; + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @param array $items + * @param string $prefix + */ + protected function writeArrayInOutputFormat(InputInterface $input, OutputInterface $output, $items, $prefix = ' - ') { + switch ($input->getOption('output')) { + case 'json': + $output->writeln(json_encode($items)); + break; + case 'json_pretty': + $output->writeln(json_encode($items, JSON_PRETTY_PRINT)); + break; + default: + foreach ($items as $key => $item) { + if (is_array($item)) { + $output->writeln($prefix . $key . ':'); + $this->writeArrayInOutputFormat($input, $output, $item, ' ' . $prefix); + continue; + } + if (!is_int($key)) { + $value = $this->valueToString($item); + if (!is_null($value)) { + $output->writeln($prefix . $key . ': ' . $value); + } else { + $output->writeln($prefix . $key); + } + } else { + $output->writeln($prefix . $this->valueToString($item)); + } + } + break; + } + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @param mixed $item + */ + protected function writeMixedInOutputFormat(InputInterface $input, OutputInterface $output, $item) { + if (is_array($item)) { + $this->writeArrayInOutputFormat($input, $output, $item, ''); + return; + } + + switch ($input->getOption('output')) { + case 'json': + $output->writeln(json_encode($item)); + break; + case 'json_pretty': + $output->writeln(json_encode($item, JSON_PRETTY_PRINT)); + break; + default: + $output->writeln($this->valueToString($item, false)); + break; + } + } + + protected function valueToString($value, $returnNull = true) { + if ($value === false) { + return 'false'; + } else if ($value === true) { + return 'true'; + } else if ($value === null) { + return ($returnNull) ? null : 'null'; + } else { + return $value; + } + } +} diff --git a/core/command/check.php b/core/command/check.php new file mode 100644 index 00000000000..cd7f8ee8e4c --- /dev/null +++ b/core/command/check.php @@ -0,0 +1,61 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OC\Core\Command; + +use OCP\IConfig; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Check extends Base { + /** + * @var IConfig + */ + private $config; + + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('check') + ->setDescription('check dependencies of the server environment') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $errors = \OC_Util::checkServer($this->config); + if (!empty($errors)) { + $errors = array_map(function($item) { + return (string) $item['error']; + }, $errors); + + $this->writeArrayInOutputFormat($input, $output, $errors); + return 1; + } + return 0; + } +} diff --git a/core/command/config/app/deleteconfig.php b/core/command/config/app/deleteconfig.php new file mode 100644 index 00000000000..0031142358e --- /dev/null +++ b/core/command/config/app/deleteconfig.php @@ -0,0 +1,81 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\App; + +use OC\Core\Command\Base; +use OCP\IConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class DeleteConfig extends Base { + /** * @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:app:delete') + ->setDescription('Delete an app config value') + ->addArgument( + 'app', + InputArgument::REQUIRED, + 'Name of the app' + ) + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to delete' + ) + ->addOption( + 'error-if-not-exists', + null, + InputOption::VALUE_NONE, + 'Checks whether the config exists before deleting it' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $appName = $input->getArgument('app'); + $configName = $input->getArgument('name'); + + if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->config->getAppKeys($appName))) { + $output->writeln('<error>Config ' . $configName . ' could not be deleted because it did not exist</error>'); + return 1; + } + + $this->config->deleteAppValue($appName, $configName); + $output->writeln('<info>System config value ' . $configName . ' deleted</info>'); + return 0; + } +} diff --git a/core/command/config/app/getconfig.php b/core/command/config/app/getconfig.php new file mode 100644 index 00000000000..186ed46999f --- /dev/null +++ b/core/command/config/app/getconfig.php @@ -0,0 +1,93 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\App; + +use OC\Core\Command\Base; +use OCP\IConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class GetConfig extends Base { + /** * @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:app:get') + ->setDescription('Get an app config value') + ->addArgument( + 'app', + InputArgument::REQUIRED, + 'Name of the app' + ) + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to get' + ) + ->addOption( + 'default-value', + null, + InputOption::VALUE_OPTIONAL, + 'If no default value is set and the config does not exist, the command will exit with 1' + ) + ; + } + + /** + * Executes the current command. + * + * @param InputInterface $input An InputInterface instance + * @param OutputInterface $output An OutputInterface instance + * @return null|int null or 0 if everything went fine, or an error code + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $appName = $input->getArgument('app'); + $configName = $input->getArgument('name'); + $defaultValue = $input->getOption('default-value'); + + if (!in_array($configName, $this->config->getAppKeys($appName)) && !$input->hasParameterOption('--default-value')) { + return 1; + } + + if (!in_array($configName, $this->config->getAppKeys($appName))) { + $configValue = $defaultValue; + } else { + $configValue = $this->config->getAppValue($appName, $configName); + } + + $this->writeMixedInOutputFormat($input, $output, $configValue); + return 0; + } +} diff --git a/core/command/config/app/setconfig.php b/core/command/config/app/setconfig.php new file mode 100644 index 00000000000..91775094fdd --- /dev/null +++ b/core/command/config/app/setconfig.php @@ -0,0 +1,89 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\App; + +use OC\Core\Command\Base; +use OCP\IConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class SetConfig extends Base { + /** * @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:app:set') + ->setDescription('Set an app config value') + ->addArgument( + 'app', + InputArgument::REQUIRED, + 'Name of the app' + ) + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to set' + ) + ->addOption( + 'value', + null, + InputOption::VALUE_REQUIRED, + 'The new value of the config' + ) + ->addOption( + 'update-only', + null, + InputOption::VALUE_NONE, + 'Only updates the value, if it is not set before, it is not being added' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $appName = $input->getArgument('app'); + $configName = $input->getArgument('name'); + + if (!in_array($configName, $this->config->getAppKeys($appName)) && $input->hasParameterOption('--update-only')) { + $output->writeln('<comment>Value not updated, as it has not been set before.</comment>'); + return 1; + } + + $configValue = $input->getOption('value'); + $this->config->setAppValue($appName, $configName, $configValue); + + $output->writeln('<info>Config value ' . $configName . ' for app ' . $appName . ' set to ' . $configValue . '</info>'); + return 0; + } +} diff --git a/core/command/config/import.php b/core/command/config/import.php new file mode 100644 index 00000000000..c53fd7255f9 --- /dev/null +++ b/core/command/config/import.php @@ -0,0 +1,195 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config; + +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Import extends Command { + protected $validRootKeys = ['system', 'apps']; + + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + $this + ->setName('config:import') + ->setDescription('Import a list of configs') + ->addArgument( + 'file', + InputArgument::OPTIONAL, + 'File with the json array to import' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $importFile = $input->getArgument('file'); + if ($importFile !== null) { + $content = $this->getArrayFromFile($importFile); + } else { + $content = $this->getArrayFromStdin(); + } + + try { + $configs = $this->validateFileContent($content); + } catch (\UnexpectedValueException $e) { + $output->writeln('<error>' . $e->getMessage(). '</error>'); + return; + } + + if (!empty($configs['system'])) { + $this->config->setSystemValues($configs['system']); + } + + if (!empty($configs['apps'])) { + foreach ($configs['apps'] as $app => $appConfigs) { + foreach ($appConfigs as $key => $value) { + if ($value === null) { + $this->config->deleteAppValue($app, $key); + } else { + $this->config->setAppValue($app, $key, $value); + } + } + } + } + + $output->writeln('<info>Config successfully imported from: ' . $importFile . '</info>'); + } + + /** + * Get the content from stdin ("config:import < file.json") + * + * @return string + */ + protected function getArrayFromStdin() { + // Read from stdin. stream_set_blocking is used to prevent blocking + // when nothing is passed via stdin. + stream_set_blocking(STDIN, 0); + $content = file_get_contents('php://stdin'); + stream_set_blocking(STDIN, 1); + return $content; + } + + /** + * Get the content of the specified file ("config:import file.json") + * + * @param string $importFile + * @return string + */ + protected function getArrayFromFile($importFile) { + $content = file_get_contents($importFile); + return $content; + } + + /** + * @param string $content + * @return array + * @throws \UnexpectedValueException when the array is invalid + */ + protected function validateFileContent($content) { + $decodedContent = json_decode($content, true); + if (!is_array($decodedContent) || empty($decodedContent)) { + throw new \UnexpectedValueException('The file must contain a valid json array'); + } + + $this->validateArray($decodedContent); + + return $decodedContent; + } + + /** + * Validates that the array only contains `system` and `apps` + * + * @param array $array + */ + protected function validateArray($array) { + $arrayKeys = array_keys($array); + $additionalKeys = array_diff($arrayKeys, $this->validRootKeys); + $commonKeys = array_intersect($arrayKeys, $this->validRootKeys); + if (!empty($additionalKeys)) { + throw new \UnexpectedValueException('Found invalid entries in root: ' . implode(', ', $additionalKeys)); + } + if (empty($commonKeys)) { + throw new \UnexpectedValueException('At least one key of the following is expected: ' . implode(', ', $this->validRootKeys)); + } + + if (isset($array['system'])) { + if (is_array($array['system'])) { + foreach ($array['system'] as $name => $value) { + $this->checkTypeRecursively($value, $name); + } + } else { + throw new \UnexpectedValueException('The system config array is not an array'); + } + } + + if (isset($array['apps'])) { + if (is_array($array['apps'])) { + $this->validateAppsArray($array['apps']); + } else { + throw new \UnexpectedValueException('The apps config array is not an array'); + } + } + } + + /** + * @param mixed $configValue + * @param string $configName + */ + protected function checkTypeRecursively($configValue, $configName) { + if (!is_array($configValue) && !is_bool($configValue) && !is_int($configValue) && !is_string($configValue) && !is_null($configValue)) { + throw new \UnexpectedValueException('Invalid system config value for "' . $configName . '". Only arrays, bools, integers, strings and null (delete) are allowed.'); + } + if (is_array($configValue)) { + foreach ($configValue as $key => $value) { + $this->checkTypeRecursively($value, $configName); + } + } + } + + /** + * Validates that app configs are only integers and strings + * + * @param array $array + */ + protected function validateAppsArray($array) { + foreach ($array as $app => $configs) { + foreach ($configs as $name => $value) { + if (!is_int($value) && !is_string($value) && !is_null($value)) { + throw new \UnexpectedValueException('Invalid app config value for "' . $app . '":"' . $name . '". Only integers, strings and null (delete) are allowed.'); + } + } + } + } +} diff --git a/core/command/config/listconfigs.php b/core/command/config/listconfigs.php new file mode 100644 index 00000000000..be3073e54d9 --- /dev/null +++ b/core/command/config/listconfigs.php @@ -0,0 +1,141 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config; + +use OC\Core\Command\Base; +use OC\SystemConfig; +use OCP\IAppConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class ListConfigs extends Base { + /** @var array */ + protected $sensitiveValues = [ + 'dbpassword', + 'dbuser', + 'mail_smtpname', + 'mail_smtppassword', + 'passwordsalt', + 'secret', + ]; + + /** * @var SystemConfig */ + protected $systemConfig; + + /** @var IAppConfig */ + protected $appConfig; + + /** + * @param SystemConfig $systemConfig + * @param IAppConfig $appConfig + */ + public function __construct(SystemConfig $systemConfig, IAppConfig $appConfig) { + parent::__construct(); + $this->systemConfig = $systemConfig; + $this->appConfig = $appConfig; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:list') + ->setDescription('List all configs') + ->addArgument( + 'app', + InputArgument::OPTIONAL, + 'Name of the app ("system" to get the config.php values, "all" for all apps and system)', + 'all' + ) + ->addOption( + 'private', + null, + InputOption::VALUE_NONE, + 'Use this option when you want to include sensitive configs like passwords, salts, ...' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $app = $input->getArgument('app'); + $noSensitiveValues = !$input->getOption('private'); + + if ($noSensitiveValues && !$input->hasParameterOption('--output')) { + // If you post this publicly we prefer the json format + $input->setOption('output', 'json_pretty'); + } + + switch ($app) { + case 'system': + $configs = [ + 'system' => $this->getSystemConfigs($noSensitiveValues), + ]; + break; + + case 'all': + $apps = $this->appConfig->getApps(); + $configs = [ + 'system' => $this->getSystemConfigs($noSensitiveValues), + 'apps' => [], + ]; + foreach ($apps as $appName) { + $configs['apps'][$appName] = $this->appConfig->getValues($appName, false); + } + break; + + default: + $configs = [ + 'apps' => [ + $app => $this->appConfig->getValues($app, false), + ], + ]; + } + + $this->writeArrayInOutputFormat($input, $output, $configs); + } + + /** + * Get the system configs + * + * @param bool $noSensitiveValues + * @return array + */ + protected function getSystemConfigs($noSensitiveValues) { + $keys = $this->systemConfig->getKeys(); + + $configs = []; + foreach ($keys as $key) { + if ($noSensitiveValues && in_array($key, $this->sensitiveValues)) { + continue; + } + + $value = $this->systemConfig->getValue($key, serialize(null)); + if ($value !== 'N;') { + $configs[$key] = $value; + } + } + + return $configs; + } +} diff --git a/core/command/config/system/deleteconfig.php b/core/command/config/system/deleteconfig.php new file mode 100644 index 00000000000..49bc2bc8c03 --- /dev/null +++ b/core/command/config/system/deleteconfig.php @@ -0,0 +1,75 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\System; + +use OC\Core\Command\Base; +use OC\SystemConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class DeleteConfig extends Base { + /** * @var SystemConfig */ + protected $systemConfig; + + /** + * @param SystemConfig $systemConfig + */ + public function __construct(SystemConfig $systemConfig) { + parent::__construct(); + $this->systemConfig = $systemConfig; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:system:delete') + ->setDescription('Delete a system config value') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to delete' + ) + ->addOption( + 'error-if-not-exists', + null, + InputOption::VALUE_NONE, + 'Checks whether the config exists before deleting it' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $configName = $input->getArgument('name'); + + if ($input->hasParameterOption('--error-if-not-exists') && !in_array($configName, $this->systemConfig->getKeys())) { + $output->writeln('<error>Config ' . $configName . ' could not be deleted because it did not exist</error>'); + return 1; + } + + $this->systemConfig->deleteValue($configName); + $output->writeln('<info>System config value ' . $configName . ' deleted</info>'); + return 0; + } +} diff --git a/core/command/config/system/getconfig.php b/core/command/config/system/getconfig.php new file mode 100644 index 00000000000..d53de18a0bb --- /dev/null +++ b/core/command/config/system/getconfig.php @@ -0,0 +1,87 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\System; + +use OC\Core\Command\Base; +use OC\SystemConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class GetConfig extends Base { + /** * @var SystemConfig */ + protected $systemConfig; + + /** + * @param SystemConfig $systemConfig + */ + public function __construct(SystemConfig $systemConfig) { + parent::__construct(); + $this->systemConfig = $systemConfig; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:system:get') + ->setDescription('Get a system config value') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to get' + ) + ->addOption( + 'default-value', + null, + InputOption::VALUE_OPTIONAL, + 'If no default value is set and the config does not exist, the command will exit with 1' + ) + ; + } + + /** + * Executes the current command. + * + * @param InputInterface $input An InputInterface instance + * @param OutputInterface $output An OutputInterface instance + * @return null|int null or 0 if everything went fine, or an error code + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $configName = $input->getArgument('name'); + $defaultValue = $input->getOption('default-value'); + + if (!in_array($configName, $this->systemConfig->getKeys()) && !$input->hasParameterOption('--default-value')) { + return 1; + } + + if (!in_array($configName, $this->systemConfig->getKeys())) { + $configValue = $defaultValue; + } else { + $configValue = $this->systemConfig->getValue($configName); + } + + $this->writeMixedInOutputFormat($input, $output, $configValue); + return 0; + } +} diff --git a/core/command/config/system/setconfig.php b/core/command/config/system/setconfig.php new file mode 100644 index 00000000000..cb2f9fe616f --- /dev/null +++ b/core/command/config/system/setconfig.php @@ -0,0 +1,82 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Config\System; + +use OC\Core\Command\Base; +use OC\SystemConfig; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +class SetConfig extends Base { + /** * @var SystemConfig */ + protected $systemConfig; + + /** + * @param SystemConfig $systemConfig + */ + public function __construct(SystemConfig $systemConfig) { + parent::__construct(); + $this->systemConfig = $systemConfig; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('config:system:set') + ->setDescription('Set a system config value') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'Name of the config to set' + ) + ->addOption( + 'value', + null, + InputOption::VALUE_REQUIRED, + 'The new value of the config' + ) + ->addOption( + 'update-only', + null, + InputOption::VALUE_NONE, + 'Only updates the value, if it is not set before, it is not being added' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $configName = $input->getArgument('name'); + + if (!in_array($configName, $this->systemConfig->getKeys()) && $input->hasParameterOption('--update-only')) { + $output->writeln('<comment>Value not updated, as it has not been set before.</comment>'); + return 1; + } + $configValue = $input->getOption('value'); + + $this->systemConfig->setValue($configName, $configValue); + $output->writeln('<info>System config value ' . $configName . ' set to ' . $configValue . '</info>'); + return 0; + } +} diff --git a/core/command/db/converttype.php b/core/command/db/converttype.php index a2fdab99ba3..e6c0f5caa35 100644 --- a/core/command/db/converttype.php +++ b/core/command/db/converttype.php @@ -1,10 +1,27 @@ <?php /** - * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> - * Copyright (c) 2014 Andreas Fischer <bantu@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Andreas Fischer <bantu@owncloud.com> + * @author Bart Visscher <bartv@thisnet.nl> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author tbelau666 <thomas.belau@gmx.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author unclejamal3000 <andreas.pramhaas@posteo.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> * */ @@ -13,7 +30,6 @@ namespace OC\Core\Command\Db; use \OCP\IConfig; use OC\DB\Connection; use OC\DB\ConnectionFactory; - use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; diff --git a/core/command/db/generatechangescript.php b/core/command/db/generatechangescript.php index a4d710aa974..956921206f9 100644 --- a/core/command/db/generatechangescript.php +++ b/core/command/db/generatechangescript.php @@ -1,9 +1,23 @@ <?php /** - * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\Db; diff --git a/core/command/encryption/disable.php b/core/command/encryption/disable.php new file mode 100644 index 00000000000..e3c0b8d7489 --- /dev/null +++ b/core/command/encryption/disable.php @@ -0,0 +1,56 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Disable extends Command { + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + parent::__construct(); + $this->config = $config; + } + + protected function configure() { + $this + ->setName('encryption:disable') + ->setDescription('Disable encryption') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + if ($this->config->getAppValue('core', 'encryption_enabled', 'no') !== 'yes') { + $output->writeln('Encryption is already disabled'); + } else { + $this->config->setAppValue('core', 'encryption_enabled', 'no'); + $output->writeln('<info>Encryption disabled</info>'); + } + } +} diff --git a/core/command/encryption/enable.php b/core/command/encryption/enable.php new file mode 100644 index 00000000000..b615a7f4f85 --- /dev/null +++ b/core/command/encryption/enable.php @@ -0,0 +1,78 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OCP\Encryption\IManager; +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Enable extends Command { + /** @var IConfig */ + protected $config; + + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IConfig $config + * @param IManager $encryptionManager + */ + public function __construct(IConfig $config, IManager $encryptionManager) { + parent::__construct(); + + $this->encryptionManager = $encryptionManager; + $this->config = $config; + } + + protected function configure() { + $this + ->setName('encryption:enable') + ->setDescription('Enable encryption') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + if ($this->config->getAppValue('core', 'encryption_enabled', 'no') === 'yes') { + $output->writeln('Encryption is already enabled'); + } else { + $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + $output->writeln('<info>Encryption enabled</info>'); + } + $output->writeln(''); + + $modules = $this->encryptionManager->getEncryptionModules(); + if (empty($modules)) { + $output->writeln('<error>No encryption module is loaded</error>'); + } else { + $defaultModule = $this->config->getAppValue('core', 'default_encryption_module', null); + if ($defaultModule === null) { + $output->writeln('<error>No default module is set</error>'); + } else if (!isset($modules[$defaultModule])) { + $output->writeln('<error>The current default module does not exist: ' . $defaultModule . '</error>'); + } else { + $output->writeln('Default module: ' . $defaultModule); + } + } + } +} diff --git a/core/command/encryption/listmodules.php b/core/command/encryption/listmodules.php new file mode 100644 index 00000000000..d55480def87 --- /dev/null +++ b/core/command/encryption/listmodules.php @@ -0,0 +1,80 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OC\Core\Command\Base; +use OCP\Encryption\IManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ListModules extends Base { + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IManager $encryptionManager + */ + public function __construct(IManager $encryptionManager) { + parent::__construct(); + $this->encryptionManager = $encryptionManager; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('encryption:list-modules') + ->setDescription('List all available encryption modules') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $encryptionModules = $this->encryptionManager->getEncryptionModules(); + $defaultEncryptionModuleId = $this->encryptionManager->getDefaultEncryptionModuleId(); + + $encModules = array(); + foreach ($encryptionModules as $module) { + $encModules[$module['id']]['displayName'] = $module['displayName']; + $encModules[$module['id']]['default'] = $module['id'] === $defaultEncryptionModuleId; + } + $this->writeModuleList($input, $output, $encModules); + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * @param array $items + */ + protected function writeModuleList(InputInterface $input, OutputInterface $output, $items) { + if ($input->getOption('output') === 'plain') { + array_walk($items, function(&$item) { + if (!$item['default']) { + $item = $item['displayName']; + } else { + $item = $item['displayName'] . ' [default*]'; + } + }); + } + + $this->writeArrayInOutputFormat($input, $output, $items); + } +} diff --git a/core/command/encryption/setdefaultmodule.php b/core/command/encryption/setdefaultmodule.php new file mode 100644 index 00000000000..a605b470d43 --- /dev/null +++ b/core/command/encryption/setdefaultmodule.php @@ -0,0 +1,68 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + + +use OCP\Encryption\IManager; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class SetDefaultModule extends Command { + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IManager $encryptionManager + */ + public function __construct(IManager $encryptionManager) { + parent::__construct(); + $this->encryptionManager = $encryptionManager; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('encryption:set-default-module') + ->setDescription('Set the encryption default module') + ->addArgument( + 'module', + InputArgument::REQUIRED, + 'ID of the encryption module that should be used' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $moduleId = $input->getArgument('module'); + + if ($moduleId === $this->encryptionManager->getDefaultEncryptionModuleId()) { + $output->writeln('"' . $moduleId . '"" is already the default module'); + } else if ($this->encryptionManager->setDefaultEncryptionModule($moduleId)) { + $output->writeln('<info>Set default module to "' . $moduleId . '"</info>'); + } else { + $output->writeln('<error>The specified module "' . $moduleId . '" does not exist</error>'); + } + } +} diff --git a/core/command/encryption/status.php b/core/command/encryption/status.php new file mode 100644 index 00000000000..1a52500cf29 --- /dev/null +++ b/core/command/encryption/status.php @@ -0,0 +1,56 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Encryption; + +use OC\Core\Command\Base; +use OCP\Encryption\IManager; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class Status extends Base { + /** @var IManager */ + protected $encryptionManager; + + /** + * @param IManager $encryptionManager + */ + public function __construct(IManager $encryptionManager) { + parent::__construct(); + $this->encryptionManager = $encryptionManager; + } + + protected function configure() { + parent::configure(); + + $this + ->setName('encryption:status') + ->setDescription('Lists the current status of encryption') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $this->writeArrayInOutputFormat($input, $output, [ + 'enabled' => $this->encryptionManager->isEnabled(), + 'defaultModule' => $this->encryptionManager->getDefaultEncryptionModuleId(), + ]); + } +} diff --git a/core/command/l10n/createjs.php b/core/command/l10n/createjs.php index f7d232bcc37..78f3229b179 100644 --- a/core/command/l10n/createjs.php +++ b/core/command/l10n/createjs.php @@ -1,10 +1,23 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> and - * Copyright (c) 2014 Stephen Colebrook <scolebrook@mac.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\L10n; @@ -15,6 +28,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use UnexpectedValueException; class CreateJs extends Command { @@ -113,6 +127,9 @@ class CreateJs extends Command { $phpFile = "$path/l10n/$lang.php"; $TRANSLATIONS = array(); $PLURAL_FORMS = ''; + if (!file_exists($phpFile)) { + throw new UnexpectedValueException("PHP translation file <$phpFile> does not exist."); + } require $phpFile; return array($TRANSLATIONS, $PLURAL_FORMS); diff --git a/core/command/maintenance/install.php b/core/command/maintenance/install.php index 5ce68e9afa3..2fea5add438 100644 --- a/core/command/maintenance/install.php +++ b/core/command/maintenance/install.php @@ -1,5 +1,26 @@ <?php - +/** + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @author Christian Kampka <christian@kampka.net> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ namespace OC\Core\Command\Maintenance; use InvalidArgumentException; @@ -30,7 +51,7 @@ class Install extends Command { ->addOption('database-name', null, InputOption::VALUE_REQUIRED, 'Name of the database') ->addOption('database-host', null, InputOption::VALUE_REQUIRED, 'Hostname of the database', 'localhost') ->addOption('database-user', null, InputOption::VALUE_REQUIRED, 'User name to connect to the database') - ->addOption('database-pass', null, InputOption::VALUE_REQUIRED, 'Password of the database user') + ->addOption('database-pass', null, InputOption::VALUE_OPTIONAL, 'Password of the database user', null) ->addOption('database-table-prefix', null, InputOption::VALUE_OPTIONAL, 'Prefix for all tables (default: oc_)', null) ->addOption('admin-user', null, InputOption::VALUE_REQUIRED, 'User name of the admin account', 'admin') ->addOption('admin-pass', null, InputOption::VALUE_REQUIRED, 'Password of the admin account') @@ -83,6 +104,9 @@ class Install extends Command { $dbTablePrefix = (string) $input->getOption('database-table-prefix'); $dbTablePrefix = trim($dbTablePrefix); } + if ($input->hasParameterOption('--database-pass')) { + $dbPass = (string) $input->getOption('database-pass'); + } $adminLogin = $input->getOption('admin-user'); $adminPassword = $input->getOption('admin-pass'); $dataDir = $input->getOption('data-dir'); diff --git a/core/command/maintenance/mimetypesjs.php b/core/command/maintenance/mimetypesjs.php new file mode 100644 index 00000000000..8b01f0acf79 --- /dev/null +++ b/core/command/maintenance/mimetypesjs.php @@ -0,0 +1,117 @@ +<?php +/** + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Core\Command\Maintenance; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class MimeTypesJS extends Command { + protected function configure() { + $this + ->setName('maintenance:mimetypesjs') + ->setDescription('Update mimetypelist.js'); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + // Fetch all the aliases + $aliases = json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mimetypealiases.dist.json'), true); + + if (file_exists(\OC::$SERVERROOT . '/config/mimetypealiases.json')) { + $custom = get_object_vars(json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mimetypealiases.json'))); + $aliases = array_merge($aliases, $custom); + } + + // Remove comments + $keys = array_filter(array_keys($aliases), function($k) { + return $k[0] === '_'; + }); + foreach($keys as $key) { + unset($aliases[$key]); + } + + // Fetch all files + $dir = new \DirectoryIterator(dirname(__DIR__) . '/../img/filetypes'); + + $files = []; + foreach($dir as $fileInfo) { + if ($fileInfo->isFile()) { + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $files[] = $file; + } + } + + //Remove duplicates + $files = array_values(array_unique($files)); + + + // Fetch all themes! + $themes = []; + $dirs = new \DirectoryIterator(dirname(__DIR__) . '/../../themes/'); + foreach($dirs as $dir) { + //Valid theme dir + if ($dir->isFile() || $dir->isDot()) { + continue; + } + + $theme = $dir->getFilename(); + $themeDir = $dir->getPath() . '/' . $theme . '/core/img/filetypes/'; + // Check if this theme has its own filetype icons + if (!file_exists($themeDir)) { + continue; + } + + $themes[$theme] = []; + // Fetch all the theme icons! + $themeIt = new \DirectoryIterator($themeDir); + foreach ($themeIt as $fileInfo) { + if ($fileInfo->isFile()) { + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $themes[$theme][] = $file; + } + } + + //Remove Duplicates + $themes[$theme] = array_values(array_unique($themes[$theme])); + } + + //Generate the JS + $js = '/** +* This file is automatically generated +* DO NOT EDIT MANUALLY! +* +* You can update the list of MimeType Aliases in config/mimetypealiases.json +* The list of files is fetched from core/img/filetypes +* To regenerate this file run ./occ maintenance:mimetypesjs +*/ +OC.MimeTypeList={ + aliases: ' . json_encode($aliases, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . ', + files: ' . json_encode($files, JSON_PRETTY_PRINT) . ', + themes: ' . json_encode($themes, JSON_PRETTY_PRINT) . ' +}; +'; + + //Output the JS + file_put_contents(dirname(__DIR__) . '/../js/mimetypelist.js', $js); + + $output->writeln('<info>mimetypelist.js is updated'); + } +} diff --git a/core/command/maintenance/mode.php b/core/command/maintenance/mode.php index f48a9d012c4..e9d36510def 100644 --- a/core/command/maintenance/mode.php +++ b/core/command/maintenance/mode.php @@ -1,10 +1,23 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> and - * Copyright (c) 2014 Stephen Colebrook <scolebrook@mac.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author scolebrook <scolebrook@mac.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\Maintenance; diff --git a/core/command/maintenance/repair.php b/core/command/maintenance/repair.php index bf2cac32ff9..5df362f8111 100644 --- a/core/command/maintenance/repair.php +++ b/core/command/maintenance/repair.php @@ -1,9 +1,25 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\Maintenance; diff --git a/core/command/maintenance/singleuser.php b/core/command/maintenance/singleuser.php index f9a1bbcaca6..44e124e9d3b 100644 --- a/core/command/maintenance/singleuser.php +++ b/core/command/maintenance/singleuser.php @@ -1,9 +1,23 @@ <?php /** - * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\Maintenance; @@ -13,8 +27,21 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use OCP\IConfig; + class SingleUser extends Command { + /** @var IConfig */ + protected $config; + + /** + * @param IConfig $config + */ + public function __construct(IConfig $config) { + $this->config = $config; + parent::__construct(); + } + protected function configure() { $this ->setName('maintenance:singleuser') @@ -35,13 +62,13 @@ class SingleUser extends Command { protected function execute(InputInterface $input, OutputInterface $output) { if ($input->getOption('on')) { - \OC_Config::setValue('singleuser', true); + $this->config->setSystemValue('singleuser', true); $output->writeln('Single user mode enabled'); } elseif ($input->getOption('off')) { - \OC_Config::setValue('singleuser', false); + $this->config->setSystemValue('singleuser', false); $output->writeln('Single user mode disabled'); } else { - if (\OC_Config::getValue('singleuser', false)) { + if ($this->config->getSystemValue('singleuser', false)) { $output->writeln('Single user mode is currently enabled'); } else { $output->writeln('Single user mode is currently disabled'); diff --git a/core/command/status.php b/core/command/status.php index 6bc1dba44aa..a65e985a9ec 100644 --- a/core/command/status.php +++ b/core/command/status.php @@ -1,19 +1,35 @@ <?php /** - * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bart Visscher <bartv@thisnet.nl> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command; -use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class Status extends Command { +class Status extends Base { protected function configure() { + parent::configure(); + $this ->setName('status') ->setDescription('show some status information') @@ -22,11 +38,12 @@ class Status extends Command { protected function execute(InputInterface $input, OutputInterface $output) { $values = array( - 'installed' => \OC_Config::getValue('installed') ? 'true' : 'false', + 'installed' => (bool) \OC_Config::getValue('installed'), 'version' => implode('.', \OC_Util::getVersion()), 'versionstring' => \OC_Util::getVersionString(), 'edition' => \OC_Util::getEditionString(), ); - print_r($values); + + $this->writeArrayInOutputFormat($input, $output, $values); } } diff --git a/core/command/upgrade.php b/core/command/upgrade.php index 8c3fbacb3f4..44e0b66c17c 100644 --- a/core/command/upgrade.php +++ b/core/command/upgrade.php @@ -1,13 +1,32 @@ <?php /** - * Copyright (c) 2013 Owen Winkler <ringmaster@midnightcircus.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Andreas Fischer <bantu@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Owen Winkler <a_github@midnightcircus.com> + * @author Steffen Lindner <mail@steffen-lindner.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command; +use OC\Console\TimestampFormatter; use OC\Updater; use OCP\IConfig; use Symfony\Component\Console\Command\Command; @@ -22,8 +41,7 @@ class Upgrade extends Command { const ERROR_MAINTENANCE_MODE = 2; const ERROR_UP_TO_DATE = 3; const ERROR_INVALID_ARGUMENTS = 4; - - public $upgradeFailed = false; + const ERROR_FAILURE = 5; /** * @var IConfig @@ -41,7 +59,7 @@ class Upgrade extends Command { protected function configure() { $this ->setName('upgrade') - ->setDescription('run upgrade routines') + ->setDescription('run upgrade routines after installation of a new release. The release has to be installed before.') ->addOption( '--skip-migration-test', null, @@ -53,6 +71,12 @@ class Upgrade extends Command { null, InputOption::VALUE_NONE, 'only runs the database schema migration simulation, do not actually update' + ) + ->addOption( + '--no-app-disable', + null, + InputOption::VALUE_NONE, + 'skips the disable of third party apps' ); } @@ -66,6 +90,7 @@ class Upgrade extends Command { $simulateStepEnabled = true; $updateStepEnabled = true; + $skip3rdPartyAppsDisable = false; if ($input->getOption('skip-migration-test')) { $simulateStepEnabled = false; @@ -73,6 +98,9 @@ class Upgrade extends Command { if ($input->getOption('dry-run')) { $updateStepEnabled = false; } + if ($input->getOption('no-app-disable')) { + $skip3rdPartyAppsDisable = true; + } if (!$simulateStepEnabled && !$updateStepEnabled) { $output->writeln( @@ -83,22 +111,37 @@ class Upgrade extends Command { } if(\OC::checkUpgrade(false)) { + if (OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { + // Prepend each line with a little timestamp + $timestampFormatter = new TimestampFormatter($this->config, $output->getFormatter()); + $output->setFormatter($timestampFormatter); + } + $self = $this; $updater = new Updater(\OC::$server->getHTTPHelper(), \OC::$server->getConfig()); $updater->setSimulateStepEnabled($simulateStepEnabled); $updater->setUpdateStepEnabled($updateStepEnabled); + $updater->setSkip3rdPartyAppsDisable($skip3rdPartyAppsDisable); - $updater->listen('\OC\Updater', 'maintenanceStart', function () use($output) { + $updater->listen('\OC\Updater', 'maintenanceEnabled', function () use($output) { $output->writeln('<info>Turned on maintenance mode</info>'); }); - $updater->listen('\OC\Updater', 'maintenanceEnd', - function () use($output, $updateStepEnabled, $self) { - $output->writeln('<info>Turned off maintenance mode</info>'); + $updater->listen('\OC\Updater', 'maintenanceDisabled', function () use($output) { + $output->writeln('<info>Turned off maintenance mode</info>'); + }); + $updater->listen('\OC\Updater', 'maintenanceActive', function () use($output) { + $output->writeln('<info>Maintenance mode is kept active</info>'); + }); + $updater->listen('\OC\Updater', 'updateEnd', + function ($success) use($output, $updateStepEnabled, $self) { $mode = $updateStepEnabled ? 'Update' : 'Update simulation'; - $status = $self->upgradeFailed ? 'failed' : 'successful'; - $message = "<info>$mode $status</info>"; + if ($success) { + $message = "<info>$mode successful</info>"; + } else { + $message = "<error>$mode failed</error>"; + } $output->writeln($message); }); $updater->listen('\OC\Updater', 'dbUpgrade', function () use($output) { @@ -110,9 +153,12 @@ class Upgrade extends Command { $updater->listen('\OC\Updater', 'incompatibleAppDisabled', function ($app) use($output) { $output->writeln('<info>Disabled incompatible app: ' . $app . '</info>'); }); - $updater->listen('\OC\Updater', 'thirdPartyAppDisabled', function ($app) use($output) { + $updater->listen('\OC\Updater', 'thirdPartyAppDisabled', function ($app) use ($output) { $output->writeln('<info>Disabled 3rd-party app: ' . $app . '</info>'); }); + $updater->listen('\OC\Updater', 'upgradeAppStoreApp', function ($app) use($output) { + $output->writeln('<info>Update 3rd-party app: ' . $app . '</info>'); + }); $updater->listen('\OC\Updater', 'repairWarning', function ($app) use($output) { $output->writeln('<error>Repair warning: ' . $app . '</error>'); }); @@ -122,19 +168,33 @@ class Upgrade extends Command { $updater->listen('\OC\Updater', 'appUpgradeCheck', function () use ($output) { $output->writeln('<info>Checked database schema update for apps</info>'); }); + $updater->listen('\OC\Updater', 'appUpgradeStarted', function ($app, $version) use ($output) { + $output->writeln("<info>Updating <$app> ...</info>"); + }); $updater->listen('\OC\Updater', 'appUpgrade', function ($app, $version) use ($output) { $output->writeln("<info>Updated <$app> to $version</info>"); }); - $updater->listen('\OC\Updater', 'failure', function ($message) use($output, $self) { $output->writeln("<error>$message</error>"); - $self->upgradeFailed = true; }); - $updater->upgrade(); + if(OutputInterface::VERBOSITY_NORMAL < $output->getVerbosity()) { + $updater->listen('\OC\Updater', 'repairInfo', function ($message) use($output) { + $output->writeln('<info>Repair info: ' . $message . '</info>'); + }); + $updater->listen('\OC\Updater', 'repairStep', function ($message) use($output) { + $output->writeln('<info>Repair step: ' . $message . '</info>'); + }); + } + + $success = $updater->upgrade(); $this->postUpgradeCheck($input, $output); + if(!$success) { + return self::ERROR_FAILURE; + } + return self::ERROR_SUCCESS; } else if($this->config->getSystemValue('maintenance', false)) { //Possible scenario: ownCloud core is updated but an app failed diff --git a/core/command/user/add.php b/core/command/user/add.php index cc11255255f..07060bb172f 100644 --- a/core/command/user/add.php +++ b/core/command/user/add.php @@ -1,13 +1,24 @@ <?php /** - * ownCloud + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Laurens Post <lkpost@scept.re> + * @author Morris Jobke <hey@morrisjobke.de> * - * @author Joas Schilling - * @copyright 2015 Joas Schilling nickvergessen@owncloud.com + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> * - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. */ namespace OC\Core\Command\User; @@ -49,10 +60,10 @@ class Add extends Command { 'User ID used to login (must only contain a-z, A-Z, 0-9, -, _ and @)' ) ->addOption( - 'password', - 'p', - InputOption::VALUE_OPTIONAL, - '' + 'password-from-env', + null, + InputOption::VALUE_NONE, + 'read password from environment variable OC_PASS' ) ->addOption( 'display-name', @@ -72,17 +83,36 @@ class Add extends Command { $uid = $input->getArgument('uid'); if ($this->userManager->userExists($uid)) { $output->writeln('<error>The user "' . $uid . '" already exists.</error>'); - return; + return 1; } - $password = $input->getOption('password'); - while (!$password) { - $question = new Question('Please enter a non-empty password:'); - $question->setHidden(true); - $question->setHiddenFallback(false); + if ($input->getOption('password-from-env')) { + $password = getenv('OC_PASS'); + if (!$password) { + $output->writeln('<error>--password-from-env given, but OC_PASS is empty!</error>'); + return 1; + } + } elseif ($input->isInteractive()) { + /** @var $dialog \Symfony\Component\Console\Helper\DialogHelper */ + $dialog = $this->getHelperSet()->get('dialog'); + $password = $dialog->askHiddenResponse( + $output, + '<question>Enter password: </question>', + false + ); + $confirm = $dialog->askHiddenResponse( + $output, + '<question>Confirm password: </question>', + false + ); - $helper = $this->getHelper('question'); - $password = $helper->ask($input, $output, $question); + if ($password !== $confirm) { + $output->writeln("<error>Passwords did not match!</error>"); + return 1; + } + } else { + $output->writeln("<error>Interactive input or --password-from-env is needed for entering a password!</error>"); + return 1; } $user = $this->userManager->createUser( @@ -91,9 +121,10 @@ class Add extends Command { ); if ($user instanceof IUser) { - $output->writeln('The user "' . $user->getUID() . '" was created successfully'); + $output->writeln('<info>The user "' . $user->getUID() . '" was created successfully</info>'); } else { $output->writeln('<error>An error occurred while creating the user</error>'); + return 1; } if ($input->getOption('display-name')) { diff --git a/core/command/user/delete.php b/core/command/user/delete.php index d5ec3ee0bde..e80c63bc732 100644 --- a/core/command/user/delete.php +++ b/core/command/user/delete.php @@ -1,26 +1,43 @@ <?php /** - * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Jens-Christian Fischer <jens-christian.fischer@switch.ch> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; class Delete extends Command { - /** @var \OC\User\Manager */ + /** @var IUserManager */ protected $userManager; /** - * @param \OC\User\Manager $userManager + * @param IUserManager $userManager */ - public function __construct(\OC\User\Manager $userManager) { + public function __construct(IUserManager $userManager) { $this->userManager = $userManager; parent::__construct(); } @@ -37,11 +54,17 @@ class Delete extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - $wasSuccessful = $this->userManager->get($input->getArgument('uid'))->delete(); - if($wasSuccessful === true) { - $output->writeln('The specified user was deleted'); + $user = $this->userManager->get($input->getArgument('uid')); + if (is_null($user)) { + $output->writeln('<error>User does not exist</error>'); return; } - $output->writeln('<error>The specified could not be deleted. Please check the logs.</error>'); + + if ($user->delete()) { + $output->writeln('<info>The specified user was deleted</info>'); + return; + } + + $output->writeln('<error>The specified user could not be deleted. Please check the logs.</error>'); } } diff --git a/core/command/user/lastseen.php b/core/command/user/lastseen.php index 7a8db013e3a..931165ef9f6 100644 --- a/core/command/user/lastseen.php +++ b/core/command/user/lastseen.php @@ -1,19 +1,46 @@ <?php /** - * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; class LastSeen extends Command { + /** @var IUserManager */ + protected $userManager; + + /** + * @param IUserManager $userManager + */ + public function __construct(IUserManager $userManager) { + $this->userManager = $userManager; + parent::__construct(); + } + protected function configure() { $this ->setName('user:lastseen') @@ -26,10 +53,9 @@ class LastSeen extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { - $userManager = \OC::$server->getUserManager(); - $user = $userManager->get($input->getArgument('uid')); + $user = $this->userManager->get($input->getArgument('uid')); if(is_null($user)) { - $output->writeln('User does not exist'); + $output->writeln('<error>User does not exist</error>'); return; } diff --git a/core/command/user/report.php b/core/command/user/report.php index a5159310af1..7a830f64c07 100644 --- a/core/command/user/report.php +++ b/core/command/user/report.php @@ -1,18 +1,46 @@ <?php /** - * Copyright (c) 2014 Arthur Schiwon <blizzz@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class Report extends Command { + /** @var IUserManager */ + protected $userManager; + + /** + * @param IUserManager $userManager + */ + public function __construct(IUserManager $userManager) { + $this->userManager = $userManager; + parent::__construct(); + } + protected function configure() { $this ->setName('user:report') @@ -20,6 +48,7 @@ class Report extends Command { } protected function execute(InputInterface $input, OutputInterface $output) { + /** @var \Symfony\Component\Console\Helper\TableHelper $table */ $table = $this->getHelperSet()->get('table'); $table->setHeaders(array('User Report', '')); $userCountArray = $this->countUsers(); @@ -46,8 +75,7 @@ class Report extends Command { } private function countUsers() { - $userManager = \OC::$server->getUserManager(); - return $userManager->countUsers(); + return $this->userManager->countUsers(); } private function countUserDirectories() { diff --git a/core/command/user/resetpassword.php b/core/command/user/resetpassword.php index 10a21960849..6c5846bcef3 100644 --- a/core/command/user/resetpassword.php +++ b/core/command/user/resetpassword.php @@ -1,24 +1,44 @@ <?php /** - * Copyright (c) 2014 Christopher Schäpers <christopher@schaepers.it> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Andreas Fischer <bantu@owncloud.com> + * @author Christopher Schäpers <kondou@ts.unde.re> + * @author Clark Tomlinson <fallen013@gmail.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Laurens Post <lkpost@scept.re> + * @author Morris Jobke <hey@morrisjobke.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Command\User; +use OCP\IUserManager; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class ResetPassword extends Command { - /** @var \OC\User\Manager */ + /** @var IUserManager */ protected $userManager; - public function __construct(\OC\User\Manager $userManager) { + public function __construct(IUserManager $userManager) { $this->userManager = $userManager; parent::__construct(); } @@ -32,24 +52,36 @@ class ResetPassword extends Command { InputArgument::REQUIRED, 'Username to reset password' ) + ->addOption( + 'password-from-env', + null, + InputOption::VALUE_NONE, + 'read password from environment variable OC_PASS' + ) ; } protected function execute(InputInterface $input, OutputInterface $output) { $username = $input->getArgument('user'); - /** @var $user \OC\User\User */ + /** @var $user \OCP\IUser */ $user = $this->userManager->get($username); if (is_null($user)) { - $output->writeln("<error>There is no user called " . $username . "</error>"); + $output->writeln('<error>User does not exist</error>'); return 1; } - if ($input->isInteractive()) { + if ($input->getOption('password-from-env')) { + $password = getenv('OC_PASS'); + if (!$password) { + $output->writeln('<error>--password-from-env given, but OC_PASS is empty!</error>'); + return 1; + } + } elseif ($input->isInteractive()) { /** @var $dialog \Symfony\Component\Console\Helper\DialogHelper */ $dialog = $this->getHelperSet()->get('dialog'); - if (\OCP\App::isEnabled('files_encryption')) { + if (\OCP\App::isEnabled('encryption')) { $output->writeln( '<error>Warning: Resetting the password when using encryption will result in data loss!</error>' ); @@ -69,20 +101,20 @@ class ResetPassword extends Command { false ); - if ($password === $confirm) { - $success = $user->setPassword($password); - if ($success) { - $output->writeln("<info>Successfully reset password for " . $username . "</info>"); - } else { - $output->writeln("<error>Error while resetting password!</error>"); - return 1; - } - } else { + if ($password !== $confirm) { $output->writeln("<error>Passwords did not match!</error>"); return 1; } } else { - $output->writeln("<error>Interactive input is needed for entering a new password!</error>"); + $output->writeln("<error>Interactive input or --password-from-env is needed for entering a new password!</error>"); + return 1; + } + + $success = $user->setPassword($password); + if ($success) { + $output->writeln("<info>Successfully reset password for " . $username . "</info>"); + } else { + $output->writeln("<error>Error while resetting password!</error>"); return 1; } } diff --git a/core/css/apps.css b/core/css/apps.css index a460bcf46c8..57133729f15 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -32,7 +32,9 @@ #app-navigation > ul { position: relative; height: 100%; + width: inherit; overflow: auto; + padding-bottom: 44px; -moz-box-sizing: border-box; box-sizing: border-box; } #app-navigation li { @@ -455,11 +457,16 @@ width: 100%; padding: 0; margin: 0; - background-color: transparent; background-image: url('../img/actions/settings.svg'); - background-position: 10px center; background-repeat: no-repeat; + background-color: transparent; + background-image: url('../img/actions/settings.svg'); + background-position: 14px center; + background-repeat: no-repeat; box-shadow: none; border: 0; border-radius: 0; + text-align: left; + padding-left: 42px; + font-weight: normal; } .settings-button:hover, .settings-button:focus { @@ -488,6 +495,12 @@ button.loading { .section.hidden { display: none !important; } +.sub-section { + position: relative; + margin-top: 10px; + margin-left: 27px; + margin-bottom: 10px; +} /* no top border for first settings item */ #app-content > .section:first-child { border-top: none; @@ -498,8 +511,9 @@ button.loading { font-weight: normal; } .section h3 { - font-size: 16px; + font-size: 15px; font-weight: normal; + margin: 12px 0; } /* slight position correction of checkboxes and radio buttons */ .section input[type="checkbox"], @@ -524,6 +538,21 @@ button.loading { em { font-style: normal; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } + +/* generic dropdown style */ +.dropdown { + background:#eee; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + box-shadow:0 1px 1px #777; + display:block; + margin-right: 0; + position:absolute; + right:0; + width:420px; + z-index:500; + padding:16px; +} + diff --git a/core/css/fixes.css b/core/css/fixes.css index 38d2147f3e2..7ef44ba6909 100644 --- a/core/css/fixes.css +++ b/core/css/fixes.css @@ -66,6 +66,7 @@ select { /* fix installation screen rendering issue for IE8+9 */ .lte9 #body-login { + min-height: 100%; height: auto !important; } @@ -91,8 +92,9 @@ select { } /* fix background of navigation popup in IE8 */ -.ie8 #navigation { - background-color: #24282F; +.ie8 #navigation, +.ie8 #expanddiv { + background-color: #111; } /* needed else IE8 will randomly hide the borders... */ diff --git a/core/css/header.css b/core/css/header.css index b4e074a5e44..466022e9f76 100644 --- a/core/css/header.css +++ b/core/css/header.css @@ -56,6 +56,17 @@ height: 45px; /* header height */ -moz-box-sizing: border-box; box-sizing: border-box; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} +#owncloud:focus { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; + opacity: .75; +} +#owncloud:hover, +#owncloud:active { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; } #header .logo { @@ -66,13 +77,6 @@ margin: 0 auto; } -#header .logo-wide { - background-image: url(../img/logo-wide.svg); - background-repeat: no-repeat; - width: 150px; - height: 34px; -} - #header .logo-icon { /* display logo so appname can be shown next to it */ display: inline-block; @@ -82,7 +86,7 @@ height: 34px; } -#header .menutoggle { +#header .header-appname-container { display: inline-block; position: absolute; left: 70px; @@ -92,10 +96,9 @@ } /* hover effect for app switcher label */ -.menutoggle .header-appname, +.header-appname-container .header-appname, .menutoggle .icon-caret { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)"; - filter: alpha(opacity=75); opacity: .75; } .menutoggle:hover .header-appname, @@ -105,7 +108,6 @@ .menutoggle.active .header-appname, .menutoggle.active .icon-caret { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } @@ -142,18 +144,43 @@ #navigation { position: fixed; top: 45px; + left: 10px; width: 265px; max-height: 85%; margin-top: 0; padding-bottom: 10px; - background-color: rgba(36, 40, 47, .97); - border-bottom-right-radius: 7px; - box-shadow: 0 0 7px rgba(29,45,68,.97); + background-color: rgba(0, 0, 0, .97); + box-shadow: 0 1px 10px rgba(50, 50, 50, .7); + border-radius: 3px; + border-top-left-radius: 0; + border-top-right-radius: 0; display: none; - overflow-y: auto; - overflow-x: hidden; + /*overflow-y: auto; + overflow-x: hidden;*/ z-index: 2000; } +/* arrow look */ +#navigation:after, #expanddiv:after { + bottom: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: rgba(0, 0, 0, 0); + border-bottom-color: rgba(0, 0, 0, .97); + border-width: 10px; + margin-left: -10px; +} +/* position of dropdown arrow */ +#navigation:after { + left: 47%; +} +#expanddiv:after { + right: 15px; +} + #navigation, #navigation * { -moz-box-sizing:border-box; box-sizing:border-box; @@ -184,18 +211,16 @@ /* icon opacity and hover effect */ #navigation a img, #navigation a span { - /* 50% opacity when inactive */ - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); - opacity: .5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; } - #navigation a:hover img, #navigation a:focus img, - #navigation a:hover span, #navigation a:focus span, + #navigation a:hover img, + #navigation a:focus img, + #navigation a:hover span, + #navigation a:focus span, #navigation a.active img, #navigation a.active span { - /* full opacity for the active app or when hovered/focused */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } @@ -209,7 +234,6 @@ /* Apps management */ #apps-management { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; min-height: initial; height: initial; @@ -228,7 +252,6 @@ } #navigation .app-loading .app-icon { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)"; - filter: alpha(opacity=10); opacity: .1; } @@ -254,7 +277,7 @@ #header .avatardiv { float: left; display: inline-block; - margin-right: 5px; + margin-right: 8px; cursor: pointer; height: 32px; width: 32px; @@ -271,24 +294,39 @@ } #expand { display: block; - padding: 7px 12px 6px 7px; + padding: 7px 30px 6px 22px; cursor: pointer; } #expand * { cursor: pointer; } -#expand:hover, #expand:focus, #expand:active { color:#fff; } -#expand img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity:.7; margin-bottom:-2px; } -#expand:hover img, #expand:focus img, #expand:active img { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; } +#expand:hover, +#expand:focus, +#expand:active { + color: #fff; +} +#expand img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; + margin-bottom: -2px; +} +#expand:hover img, +#expand:focus img, +#expand:active img { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; +} #expanddiv { position: absolute; - right: 0; + right: 10px; top: 45px; z-index: 2000; display: none; - background-color: #383c43; - border-bottom-left-radius: 7px; - box-shadow: 0 0 7px rgb(29,45,68); + background-color: rgba(0, 0, 0, .97); + box-shadow: 0 1px 10px rgba(50, 50, 50, .7); + border-radius: 3px; + border-top-left-radius: 0; + border-top-right-radius: 0; -moz-box-sizing: border-box; box-sizing: border-box; } #expanddiv a { @@ -297,7 +335,6 @@ color: #fff; padding: 4px 12px 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter: alpha(opacity=70); opacity: .7; -moz-box-sizing: border-box; box-sizing: border-box; @@ -306,8 +343,10 @@ margin-bottom: -3px; margin-right: 6px; } - #expanddiv a:hover, #expanddiv a:focus, #expanddiv a:active { + #expanddiv a:hover, + #expanddiv a:focus, + #expanddiv a:active, + #expanddiv a.active { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } diff --git a/core/css/icons.css b/core/css/icons.css index ecf6b17995d..e44f9880052 100644 --- a/core/css/icons.css +++ b/core/css/icons.css @@ -56,7 +56,9 @@ background-image: url('../img/actions/confirm.svg'); } -.icon-delete { +.icon-delete, +.icon-delete.no-permission:hover, +.icon-delete.no-permission:focus { background-image: url('../img/actions/delete.svg'); } .icon-delete:hover, @@ -79,6 +81,9 @@ .icon-info { background-image: url('../img/actions/info.svg'); } +.icon-info-white { + background-image: url('../img/actions/info-white.svg'); +} .icon-logout { background-image: url('../img/actions/logout.svg'); diff --git a/core/css/jquery-ui-fixes.css b/core/css/jquery-ui-fixes.css index 0bfa9479893..7e0cdd18204 100644 --- a/core/css/jquery-ui-fixes.css +++ b/core/css/jquery-ui-fixes.css @@ -128,13 +128,11 @@ .ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .5; - filter: Alpha(Opacity=50); } .ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .2; - filter: Alpha(Opacity=20); border-radius: 5px; } diff --git a/core/css/jquery.ocdialog.css b/core/css/jquery.ocdialog.css index 93930bf435f..bada0b73a5e 100644 --- a/core/css/jquery.ocdialog.css +++ b/core/css/jquery.ocdialog.css @@ -52,7 +52,7 @@ .oc-dialog-dim { background-color: #000; - opacity: .20;filter:Alpha(Opacity=20); + opacity: .20; z-index: 999; position: fixed; top: 0; left: 0; diff --git a/core/css/mobile.css b/core/css/mobile.css index a98547596b2..80217d7069c 100644 --- a/core/css/mobile.css +++ b/core/css/mobile.css @@ -21,12 +21,9 @@ box-align: center; } -/* on mobile, show logo-icon instead of logo-wide */ -#header .logo-wide { - background-image: url(../img/logo-icon.svg); - background-repeat: no-repeat; - width: 62px; - height: 34px; +/* on mobile public share, show only the icon of the logo, hide the text */ +#body-public #header .header-appname-container { + display: none; } /* compress search box on mobile, expand when focused */ @@ -39,6 +36,8 @@ -moz-transition: all 100ms; -o-transition: all 100ms; transition: all 100ms; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; } .searchbox input[type="search"]:focus, .searchbox input[type="search"]:active { @@ -47,12 +46,23 @@ cursor: text; background-color: #fff; background-image: url('../img/actions/search.svg'); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; } /* do not show display name on mobile when profile picture is present */ #header .avatardiv.avatardiv-shown + #expandDisplayName { display: none; } +#header #expand { + display: block; + padding: 7px 30px 6px 7px; +} + +/* do not show update notification on mobile */ +#update-notification { + display: none !important; +} /* position share dropdown */ #dropdown { @@ -109,14 +119,10 @@ z-index: 149; background-color: rgba(255, 255, 255, .7); cursor: pointer; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; } #app-navigation-toggle:hover, #app-navigation-toggle:focus { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } diff --git a/core/css/multiselect.css b/core/css/multiselect.css index b3393c450d4..17fd81bf6c3 100644 --- a/core/css/multiselect.css +++ b/core/css/multiselect.css @@ -51,7 +51,7 @@ ul.multiselectoptions > li input[type='checkbox']:checked+label { div.multiselect, select.multiselect { display: inline-block; max-width: 200px; - min-width: 150px; + min-width: 150px !important; padding-right: 10px; min-height: 20px; position: relative; @@ -88,6 +88,7 @@ div.multiselect>span:first-child { overflow: hidden; text-overflow: ellipsis; width: 90%; + white-space: nowrap; } div.multiselect>span:last-child { diff --git a/core/css/share.css b/core/css/share.css index bf38ce83a02..0d687cb76da 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -3,17 +3,17 @@ See the COPYING-README file. */ #dropdown { - background:#eee; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - box-shadow:0 1px 1px #777; - display:block; + background: #eee; + border-bottom-left-radius: 3px; + border-bottom-right-radius: 3px; + box-shadow: 0 2px 3px rgba(50, 50, 50, .4); + display: block; margin-right: 0; - position:absolute; - right:0; - width:420px; - z-index:500; - padding:16px; + position: absolute; + right: 0; + width: 420px; + z-index: 500; + padding: 16px; } @media only screen and (min-width: 768px) and (max-width: 990px) { @@ -32,13 +32,21 @@ display: inline-block !important; padding-left: 10px; } - +#dropdown.shareDropDown .shareWithLoading { + position: relative; + right: 70px; + top: 2px; +} #dropdown.shareDropDown .icon-loading-small.hidden { display: none !important; } +#dropdown .shareWithRemoteInfo { + padding: 11px 20px; +} + #dropdown .avatar { - margin-right: 2px; + margin-right: 8px; display: inline-block; overflow: hidden; vertical-align: middle; @@ -65,7 +73,6 @@ #shareWithList label input[type=checkbox]{ margin-left: 0; - top: 3px; position: relative; } #shareWithList .username{ @@ -87,6 +94,7 @@ #dropdown input[type="checkbox"] { margin:0 3px 0 8px; + vertical-align: middle; } a.showCruds { @@ -108,7 +116,8 @@ a.unshare { } #dropdown input[type="text"],#dropdown input[type="password"] { - width:90%; + width: 86%; + margin-left: 7px; } #dropdown form { @@ -126,8 +135,10 @@ a.unshare { width:12px; } -.reshare,#link label,#expiration label { - padding-left:8px; +.reshare,#link label, +#expiration label { + display: inline-block; + padding: 6px 4px; } a.showCruds:hover,a.unshare:hover { diff --git a/core/css/styles.css b/core/css/styles.css index 74df29140a9..e019b874f61 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -40,6 +40,10 @@ body { height: 32px; display: none; } +#body-login .float-spinner { + margin-top: -32px; + padding-top: 32px; +} #nojavascript { position: fixed; @@ -71,7 +75,14 @@ body { } + /* INPUTS */ + +/* specifically override browser styles */ +input, textarea, select, button { + font-family: 'Open Sans', Frutiger, Calibri, 'Myriad Pro', Myriad, sans-serif; +} + input[type="text"], input[type="password"], input[type="search"], @@ -133,7 +144,8 @@ input[type="url"]:hover, input[type="url"]:focus, input[type="url"]:active, input[type="time"]:hover, input[type="time"]:focus, input[type="time"]:active, textarea:hover, textarea:focus, textarea:active { color: #333; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + opacity: 1; } input[type="checkbox"] { margin:0; padding:0; height:auto; width:auto; } input[type="checkbox"]:hover+label, input[type="checkbox"]:focus+label { color:#111 !important; } @@ -216,6 +228,10 @@ textarea:disabled { color: #999; cursor: default; } +input:disabled+label, input:disabled:hover+label, input:disabled:focus+label { + color: #999 !important; + cursor: default; +} /* Primary action button, use sparingly */ .primary, input[type="submit"].primary, input[type="button"].primary, button.primary, .button.primary { @@ -225,12 +241,13 @@ textarea:disabled { } .primary:hover, input[type="submit"].primary:hover, input[type="button"].primary:hover, button.primary:hover, .button.primary:hover, .primary:focus, input[type="submit"].primary:focus, input[type="button"].primary:focus, button.primary:focus, .button.primary:focus { - border: 1px solid #1d2d44; background-color: #304d76; color: #fff; } - .primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active { - border: 1px solid #1d2d44; + .primary:active, input[type="submit"].primary:active, input[type="button"].primary:active, button.primary:active, .button.primary:active, + .primary:disabled, input[type="submit"].primary:disabled, input[type="button"].primary:disabled, button.primary:disabled, .button.primary:disabled, + .primary:disabled:hover, input[type="submit"].primary:disabled:hover, input[type="button"].primary:disabled:hover, button.primary:disabled:hover, .button.primary:disabled:hover, + .primary:disabled:focus, input[type="submit"].primary:disabled:focus, input[type="button"].primary:disabled:focus, button.primary:disabled:focus, .button.primary:disabled:focus { background-color: #1d2d44; color: #bbb; } @@ -239,14 +256,22 @@ textarea:disabled { .searchbox input[type="search"] { position: relative; font-size: 1.2em; - padding-left: 1.5em; - background: #fff url('../img/actions/search.svg') no-repeat .5em center; + padding: 3px; + padding-left: 25px; + background: #fff url('../img/actions/search.svg') no-repeat 6px center; border: 0; - border-radius: 2em; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70); opacity: .7; - margin-top: 6px; + border-radius: 3px; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; + opacity: .3; + margin-top: 9px; float: right; } +.searchbox input[type="search"]:hover, +.searchbox input[type="search"]:focus, +.searchbox input[type="search"]:active { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; + opacity: .7; +} input[type="submit"].enabled { background-color: #66f866; @@ -324,7 +349,8 @@ input[type="submit"].enabled { overflow-x: auto; } -#emptycontent { +#emptycontent, +.emptycontent { font-size: 16px; color: #888; position: absolute; @@ -332,19 +358,21 @@ input[type="submit"].enabled { top: 30%; width: 100%; } -#emptycontent h2 { +#emptycontent h2, +.emptycontent h2 { font-size: 22px; margin-bottom: 10px; } #emptycontent [class^="icon-"], -#emptycontent [class*=" icon-"] { +.emptycontent [class^="icon-"], +#emptycontent [class*=" icon-"], +.emptycontent [class*=" icon-"] { background-size: 64px; height: 64px; width: 64px; margin: 0 auto 15px; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); - opacity: .5; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)"; + opacity: .4; } @@ -368,7 +396,6 @@ input[type="submit"].enabled { text-align: center; color: #ccc; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=60)"; - filter: alpha(opacity=60); opacity: .6; } /* overrides another !important statement that sets this to unreadable black */ @@ -398,7 +425,9 @@ input[type="submit"].enabled { padding: 5px; } -#body-login div.buttons { text-align:center; } +#body-login div.buttons { + text-align: center; +} #body-login p.info { width: 22em; margin: 0 auto; @@ -409,14 +438,26 @@ input[type="submit"].enabled { padding: 13px; margin: -13px; } -#body-login #submit.login { margin-right:7px; } /* quick fix for log in button not being aligned with input fields, should be properly fixed by input field width later */ - -#body-login form { width:22em; margin:2em auto 2em; padding:0; } +/* quick fix for log in button not being aligned with input fields, should be properly fixed by input field width later */ +#body-login #submit.login { + margin-right: 7px; +} +#body-login form { + width: 22em; + margin: 2em auto 2em; + padding: 0; +} #body-login form fieldset { margin-bottom: 20px; text-align: left; } -#body-login form #adminaccount { margin-bottom:15px; } +#body-login form #sqliteInformation { + margin-top: -20px; + margin-bottom: 20px; +} +#body-login form #adminaccount { + margin-bottom: 15px; +} #body-login form fieldset legend, #datadirContent label { width: 100%; } @@ -434,6 +475,9 @@ input[type="submit"].enabled { vertical-align: bottom; /* adjust position of Advanced dropdown arrow */ margin-left: -4px; } +#body-login .icon-info-white { + padding: 10px; +} /* strengthify wrapper */ #body-login .strengthify-wrapper { @@ -468,7 +512,6 @@ input[name='password-clone'] { left: 16px; top: 22px; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); opacity: .3; } #adminpass-icon, #password-icon { @@ -572,7 +615,6 @@ label.infield { } #show:checked + label, #dbpassword:checked + label, #personal-show:checked + label { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); opacity: .8; } #show + label, #dbpassword + label, #personal-show + label { @@ -583,7 +625,6 @@ label.infield { background-repeat: no-repeat; background-position: center; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; - filter: alpha(opacity=30); opacity: .3; } #pass2, input[name="personal-password-clone"] { @@ -601,6 +642,9 @@ label.infield { /* Database selector */ #body-login form #selectDbType { text-align:center; white-space: nowrap; } +#body-login form #selectDbType .info { + white-space: normal; +} #body-login form #selectDbType label { position:static; margin:0 -3px 5px; padding:.4em; font-size:12px; background:#f8f8f8; color:#888; cursor:pointer; @@ -610,7 +654,9 @@ label.infield { /* Warnings and errors are the same */ -#body-login .warning, #body-login .update, #body-login .error { +#body-login .warning, +#body-login .update, +#body-login .error { display: block; padding: 10px; background-color: rgba(0,0,0,.3); @@ -662,7 +708,7 @@ label.infield { } .warning-input { - border-color: #cc3333 !important; + border-color: #ce3702 !important; } /* Fixes for log in page, TODO should be removed some time */ @@ -675,7 +721,6 @@ label.infield { } #body-login .warning legend { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } #body-login a.warning { @@ -763,8 +808,7 @@ label.infield { top: 0; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=90)"; - filter:alpha(opacity=90); + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)"; opacity: .9; } #notification span, #update-notification span { @@ -775,7 +819,6 @@ label.infield { tr .action:not(.permanent), .selectedActions a { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); opacity: 0; } tr:hover .action, @@ -783,7 +826,6 @@ tr:focus .action, tr .action.permanent, .selectedActions a { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; - filter: alpha(opacity=50); opacity: .5; } tr .action { @@ -792,7 +834,6 @@ tr .action { } .header-action { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; - filter: alpha(opacity=80); opacity: .8; } tr:hover .action:hover, @@ -802,7 +843,6 @@ tr:focus .action:focus, .header-action:hover, .header-action:focus { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; - filter: alpha(opacity=100); opacity: 1; } tbody tr:hover, @@ -854,7 +894,7 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin background-image:url('../img/places/home.svg'); background-repeat:no-repeat; background-position: left center; - width: 26px; + width: 30px; display: inline-block; } #oc-dialog-filepicker-content .dirtree span:not(:last-child) { cursor: pointer; } @@ -981,7 +1021,6 @@ div.crumb:focus, div.crumb a:focus, div.crumb:active { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; - filter:alpha(opacity=70); opacity:.7; } @@ -1033,4 +1072,3 @@ fieldset.warning legend + p, fieldset.update legend + p { @-ms-viewport { width: device-width; } - diff --git a/core/img/actions/info-white.png b/core/img/actions/info-white.png Binary files differnew file mode 100644 index 00000000000..670d7309c4e --- /dev/null +++ b/core/img/actions/info-white.png diff --git a/core/img/actions/info-white.svg b/core/img/actions/info-white.svg new file mode 100644 index 00000000000..d1f9ddb78cf --- /dev/null +++ b/core/img/actions/info-white.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> + <path d="m4.9999 7.4745c0.1553 0.3811 0.3254 0.6881 0.6445 0.2459 0.4066-0.2685 1.7587-1.4279 1.6616-0.3421-0.3681 2.0169-0.8342 4.0167-1.1711 6.0387-0.3916 1.115 0.635 2.068 1.6379 1.312 1.0779-0.503 1.9915-1.288 2.9275-2.012-0.144-0.322-0.25-0.789-0.596-0.346-0.4687 0.239-1.4695 1.317-1.6967 0.471 0.3154-2.181 0.9755-4.2953 1.3654-6.4616 0.3973-1.0049-0.3645-2.2233-1.3997-1.3634-1.2565 0.6173-2.2895 1.5844-3.3734 2.4575zm4.4593-7.4718c-1.3075-0.017336-1.9056 2.1455-0.6427 2.6795 1.0224 0.378 2.0768-0.7138 1.7898-1.7504-0.098-0.54186-0.598-0.96979-1.1471-0.92912h-0.000001z" fill="#fff"/> +</svg> diff --git a/core/img/actions/info.png b/core/img/actions/info.png Binary files differindex cb25905a5c5..b280a019ab4 100644 --- a/core/img/actions/info.png +++ b/core/img/actions/info.png diff --git a/core/img/actions/info.svg b/core/img/actions/info.svg index 527c1d3dbd1..3be67826423 100644 --- a/core/img/actions/info.svg +++ b/core/img/actions/info.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> - <path opacity=".7" d="m4.9999 7.4745c0.1553 0.3811 0.3254 0.6881 0.6445 0.2459 0.4066-0.2685 1.7587-1.4279 1.6616-0.3421-0.3681 2.0169-0.8342 4.0167-1.1711 6.0387-0.3916 1.115 0.635 2.068 1.6379 1.312 1.0779-0.503 1.9915-1.288 2.9275-2.012-0.144-0.322-0.25-0.789-0.596-0.346-0.4687 0.239-1.4695 1.317-1.6967 0.471 0.3154-2.181 0.9755-4.2953 1.3654-6.4616 0.3973-1.0049-0.3645-2.2233-1.3997-1.3634-1.2565 0.6173-2.2895 1.5844-3.3734 2.4575zm4.4593-7.4718c-1.3075-0.017336-1.9056 2.1455-0.6427 2.6795 1.0224 0.378 2.0768-0.7138 1.7898-1.7504-0.098-0.54186-0.598-0.96979-1.1471-0.92912h-0.000001z" fill="#1e1e1e"/> + <path opacity=".5" d="m4.9999 7.4745c0.1553 0.3811 0.3254 0.6881 0.6445 0.2459 0.4066-0.2685 1.7587-1.4279 1.6616-0.3421-0.3681 2.0169-0.8342 4.0167-1.1711 6.0387-0.3916 1.115 0.635 2.068 1.6379 1.312 1.0779-0.503 1.9915-1.288 2.9275-2.012-0.144-0.322-0.25-0.789-0.596-0.346-0.4687 0.239-1.4695 1.317-1.6967 0.471 0.3154-2.181 0.9755-4.2953 1.3654-6.4616 0.3973-1.0049-0.3645-2.2233-1.3997-1.3634-1.2565 0.6173-2.2895 1.5844-3.3734 2.4575zm4.4593-7.4718c-1.3075-0.017336-1.9056 2.1455-0.6427 2.6795 1.0224 0.378 2.0768-0.7138 1.7898-1.7504-0.098-0.54186-0.598-0.96979-1.1471-0.92912h-0.000001z"/> </svg> diff --git a/core/img/actions/search.png b/core/img/actions/search.png Binary files differindex 82ebac97255..5f4767a6f46 100644 --- a/core/img/actions/search.png +++ b/core/img/actions/search.png diff --git a/core/img/actions/search.svg b/core/img/actions/search.svg index 7e7a41a2ea7..6024607dd0a 100644 --- a/core/img/actions/search.svg +++ b/core/img/actions/search.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> - <path opacity=".7" style="color:#000000" d="m6 1c-2.7614 0-5 2.2386-5 5s2.2386 5 5 5c0.98478 0 1.8823-0.28967 2.6562-0.78125l4.4688 4.625c0.09558 0.10527 0.22619 0.16452 0.375 0.15625 0.14882-0.0083 0.3031-0.07119 0.40625-0.1875l0.9375-1.0625c0.19194-0.22089 0.19549-0.53592 0-0.71875l-4.594-4.406c0.478-0.7663 0.75-1.6555 0.75-2.625 0-2.7614-2.2386-5-5-5zm0 2c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3-3-1.3431-3-3 1.3431-3 3-3z" fill="#1e1e1e"/> + <path opacity=".5" style="color:#000000" d="m6 1c-2.7614 0-5 2.2386-5 5s2.2386 5 5 5c0.98478 0 1.8823-0.28967 2.6562-0.78125l4.4688 4.625c0.09558 0.10527 0.22619 0.16452 0.375 0.15625 0.14882-0.0083 0.3031-0.07119 0.40625-0.1875l0.9375-1.0625c0.19194-0.22089 0.19549-0.53592 0-0.71875l-4.594-4.406c0.478-0.7663 0.75-1.6555 0.75-2.625 0-2.7614-2.2386-5-5-5zm0 2c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3-3-1.3431-3-3 1.3431-3 3-3z"/> </svg> diff --git a/core/img/actions/settings.png b/core/img/actions/settings.png Binary files differindex 28f01bc7927..3ab939ca37a 100644 --- a/core/img/actions/settings.png +++ b/core/img/actions/settings.png diff --git a/core/img/actions/settings.svg b/core/img/actions/settings.svg index 51bd7460389..251bd54c19d 100644 --- a/core/img/actions/settings.svg +++ b/core/img/actions/settings.svg @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <g opacity=".7" transform="translate(0 -.056)" fill="#1e1e1e"> - <path fill="#1e1e1e" display="block" d="m6.9375 0.056c-0.2484 0-0.4375 0.18908-0.4375 0.4375v1.25c-0.5539 0.1422-1.0512 0.3719-1.5312 0.6563l-0.9063-0.9063c-0.17566-0.17566-0.44934-0.17566-0.625 0l-1.5 1.5c-0.17566 0.17566-0.17566 0.44934 0 0.625l0.9063 0.9063c-0.2844 0.48-0.5141 0.9773-0.6563 1.5312h-1.25c-0.24842 0-0.4375 0.1891-0.4375 0.4375v2.125c1e-8 0.24842 0.18908 0.4375 0.4375 0.4375h1.25c0.1422 0.5539 0.37188 1.0512 0.65625 1.5312l-0.9063 0.907c-0.17566 0.17566-0.17566 0.44934 0 0.625l1.5 1.5c0.17566 0.17566 0.44934 0.17566 0.625 0l0.9063-0.907c0.48 0.285 0.9773 0.514 1.5312 0.656v1.25c1e-7 0.24842 0.18908 0.4375 0.4375 0.4375h2.125c0.2484 0 0.4375-0.189 0.4375-0.438v-1.25c0.5539-0.1422 1.0512-0.37188 1.5312-0.65625l0.90625 0.90625c0.17566 0.17566 0.44934 0.17566 0.625 0l1.5-1.5c0.17566-0.17566 0.17566-0.44934 0-0.625l-0.906-0.906c0.285-0.48 0.514-0.9771 0.656-1.531h1.25c0.249 0 0.438-0.1891 0.438-0.4375v-2.125c0-0.2484-0.189-0.4375-0.438-0.4375h-1.25c-0.142-0.5539-0.371-1.0512-0.656-1.5312l0.906-0.9063c0.17566-0.17566 0.17566-0.44934 0-0.625l-1.5-1.5c-0.17566-0.17566-0.44934-0.17566-0.625 0l-0.906 0.9063c-0.48-0.2844-0.977-0.5141-1.531-0.6563v-1.25c0-0.24842-0.1891-0.4375-0.4375-0.4375zm1.0625 4.1573c1.8451 0 3.3427 1.4975 3.3427 3.3427 0 1.8451-1.4975 3.3427-3.3427 3.3427-1.8451 0-3.3427-1.4979-3.3427-3.343s1.4976-3.3427 3.3427-3.3427z"/> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <g opacity=".5" transform="translate(0 -.056)"> + <path d="m6.9375 0.056c-0.2484 0-0.4375 0.18908-0.4375 0.4375v1.25c-0.5539 0.1422-1.0512 0.3719-1.5312 0.6563l-0.9063-0.9063c-0.17566-0.17566-0.44934-0.17566-0.625 0l-1.5 1.5c-0.17566 0.17566-0.17566 0.44934 0 0.625l0.9063 0.9063c-0.2844 0.48-0.5141 0.9773-0.6563 1.5312h-1.25c-0.24842 0-0.4375 0.1891-0.4375 0.4375v2.125c1e-8 0.24842 0.18908 0.4375 0.4375 0.4375h1.25c0.1422 0.5539 0.37188 1.0512 0.65625 1.5312l-0.9063 0.907c-0.17566 0.17566-0.17566 0.44934 0 0.625l1.5 1.5c0.17566 0.17566 0.44934 0.17566 0.625 0l0.9063-0.907c0.48 0.285 0.9773 0.514 1.5312 0.656v1.25c1e-7 0.24842 0.18908 0.4375 0.4375 0.4375h2.125c0.2484 0 0.4375-0.189 0.4375-0.438v-1.25c0.5539-0.1422 1.0512-0.37188 1.5312-0.65625l0.90625 0.90625c0.17566 0.17566 0.44934 0.17566 0.625 0l1.5-1.5c0.17566-0.17566 0.17566-0.44934 0-0.625l-0.906-0.906c0.285-0.48 0.514-0.9771 0.656-1.531h1.25c0.249 0 0.438-0.1891 0.438-0.4375v-2.125c0-0.2484-0.189-0.4375-0.438-0.4375h-1.25c-0.142-0.5539-0.371-1.0512-0.656-1.5312l0.906-0.9063c0.17566-0.17566 0.17566-0.44934 0-0.625l-1.5-1.5c-0.17566-0.17566-0.44934-0.17566-0.625 0l-0.906 0.9063c-0.48-0.2844-0.977-0.5141-1.531-0.6563v-1.25c0-0.24842-0.1891-0.4375-0.4375-0.4375zm1.0625 4.1573c1.8451 0 3.3427 1.4975 3.3427 3.3427 0 1.8451-1.4975 3.3427-3.3427 3.3427-1.8451 0-3.3427-1.4979-3.3427-3.343s1.4976-3.3427 3.3427-3.3427z" display="block"/> </g> </svg> diff --git a/core/img/actions/star.png b/core/img/actions/star.png Binary files differindex 6a04282f3fa..88e4ad54584 100644 --- a/core/img/actions/star.png +++ b/core/img/actions/star.png diff --git a/core/img/actions/star.svg b/core/img/actions/star.svg index c2b3b60a2b8..36e08170a9a 100644 --- a/core/img/actions/star.svg +++ b/core/img/actions/star.svg @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="22" width="22" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <g transform="matrix(.068322 0 0 .068322 -10.114 -50.902)"> - <path d="m330.36 858.43 43.111 108.06 117.64 9.2572-89.445 74.392 27.55 114.75-98.391-62.079-100.62 61.66 28.637-112.76-89.734-76.638 116.09-7.6094z" transform="translate(-21.071,-112.5)" fill="#CCC"/> + <g opacity=".5" transform="matrix(.068322 0 0 .068322 -10.114 -50.902)"> + <path d="m330.36 858.43 43.111 108.06 117.64 9.2572-89.445 74.392 27.55 114.75-98.391-62.079-100.62 61.66 28.637-112.76-89.734-76.638 116.09-7.6094z" transform="translate(-21.071,-112.5)"/> </g> </svg> diff --git a/core/img/logo-icon.png b/core/img/logo-icon.png Binary files differindex 4f494d6121f..6874c83673f 100644 --- a/core/img/logo-icon.png +++ b/core/img/logo-icon.png diff --git a/core/img/logo-icon.svg b/core/img/logo-icon.svg index 9c4260f56a3..c1fb4c8274f 100644 --- a/core/img/logo-icon.svg +++ b/core/img/logo-icon.svg @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="34" width="62" version="1.1" y="0px" x="0px" xmlns:cc="http://creativecommons.org/ns#" enable-background="new 0 0 595.275 311.111" viewBox="0 0 62.001102 34" xmlns:dc="http://purl.org/dc/elements/1.1/"><path style="block-progression:tb;color:#000000;enable-background:accumulate;text-transform:none;text-indent:0" d="m27.8 0.99971c-4.4056 0-7.9651 3.5593-7.9651 7.9651 0 1.816 0.60473 3.4874 1.6242 4.8258 2.2117-2.5599 5.4761-4.1855 9.1208-4.1855 1.7831 0 3.474 0.39707 4.9976 1.0932 0.12336-0.55787 0.18742-1.138 0.18742-1.7335 0-4.4056-3.5593-7.9651-7.9651-7.9651zm-10.402 3.6856c-2.2943 0-4.1387 1.86-4.1387 4.1543 0 0.74284 0.19164 1.4447 0.53099 2.0459 1.3845-0.78102 2.9851-1.2338 4.6853-1.2338 0.16407 0 0.32211 0.0059 0.48415 0.01578-0.01835-0.23258-0.03122-0.46553-0.03122-0.70279 0-1.2779 0.27755-2.4937 0.76528-3.592-0.65667-0.44034-1.4434-0.68715-2.2958-0.68715zm19.647 2.858c-0.16951 0-0.33288 0.020716-0.49977 0.031173 0.0722 0.45514 0.12493 0.91469 0.12493 1.39 0 0.73959-0.094 1.4533-0.2655 2.1396 2.01 1.1123 3.6792 2.7767 4.779 4.7946 1.1407-0.59388 2.4132-0.97146 3.7638-1.062-0.34808-4.0821-3.7299-7.2933-7.9024-7.2933zm-6.4656 2.9673c-6.1647 0-11.151 4.9858-11.151 11.151 0 6.1647 4.9858 11.151 11.151 11.151s11.151-4.9863 11.151-11.151c0-6.1652-4.9863-11.151-11.151-11.151zm-12.103 0.04676c-4.7827 0-8.6522 3.8694-8.6522 8.6522 0 2.8155 1.3415 5.3079 3.4202 6.8873 0.87636-1.6903 2.6365-2.8424 4.6696-2.8424 0.24572 0 0.48158 0.02979 0.71842 0.06255-0.07434-0.5409-0.10932-1.0942-0.10932-1.6555 0-2.6832 0.8734-5.1644 2.3582-7.1685-0.88884-1.1122-1.5249-2.4486-1.796-3.9044-0.20094-0.01381-0.40458-0.03117-0.60907-0.03117zm27.112 5.154c-1.4522 0-2.8126 0.37077-4.0137 0.99953 0.68202 1.5107 1.062 3.1869 1.062 4.9508 0 3.3027-1.3279 6.3018-3.4827 8.4805 1.583 1.7575 3.8798 2.858 6.4345 2.858 4.7827 0 8.6522-3.8694 8.6522-8.6522 0-4.7827-3.8694-8.6364-8.6522-8.6364zm-36.607 1.14c-4.4062-0.000493-7.9809 3.543-7.9809 7.9488 0 4.4057 3.5748 7.9804 7.9804 7.9804 1.6769 0 3.2303-0.52246 4.5135-1.4056-0.53025-0.82393-0.84337-1.809-0.84337-2.858 0-0.54446 0.08034-1.0676 0.23426-1.5617-2.4023-1.7361-3.9669-4.5613-3.9669-7.7461 0-0.80923 0.10664-1.5917 0.29674-2.3427-0.0789-0.002-0.15478-0.01578-0.23427-0.01578zm46.837 6.8405c-0.23502 0-0.46245 0.02683-0.68715 0.06255 0.0124 0.19866 0.0156 0.39168 0.0156 0.59348 0 2.5403-1.0023 4.846-2.6238 6.5593 0.79769 0.92761 1.9694 1.5149 3.2953 1.5149 2.4152 0 4.3729-1.9421 4.3729-4.3573s-1.9577-4.3729-4.3729-4.3729zm-37.904 0.46851c-2.4151 0-4.3573 1.9422-4.3573 4.3573s1.9422 4.3729 4.3573 4.3729c1.8512 0 3.4225-1.1551 4.0606-2.7799-1.557-1.5858-2.676-3.6087-3.1703-5.8564-0.28933-0.05978-0.58298-0.09372-0.89022-0.09372z" fill="#FFF"/></svg> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="34" viewBox="0 0 62.001102 34" width="62" version="1.1" y="0px" x="0px" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" enable-background="new 0 0 595.275 311.111"><path style="block-progression:tb;color:#000000;enable-background:accumulate;text-transform:none;text-indent:0" fill="#fff" d="m29.639 2.9681c-3.7216 0-6.7285 3.0067-6.7285 6.7285 0 1.5341 0.51084 2.946 1.372 4.0766 1.8683-2.1625 4.6259-3.5357 7.7047-3.5357 1.5063 0 2.9346 0.33542 4.2217 0.92347 0.10421-0.47126 0.15832-0.96132 0.15832-1.4644 0-3.7216-3.0067-6.7285-6.7285-6.7285zm-8.787 3.1134c-1.9381 0-3.4961 1.5712-3.4961 3.5093 0 0.62751 0.16189 1.2204 0.44855 1.7283 1.1695-0.65976 2.5216-1.0422 3.9579-1.0422 0.1386 0 0.2721 0.005 0.40898 0.01333-0.0155-0.19647-0.02637-0.39325-0.02637-0.59368 0-1.0795 0.23446-2.1065 0.64646-3.0343-0.55472-0.37197-1.2193-0.58046-1.9394-0.58046zm16.597 2.4143c-0.14319 0-0.2812 0.0175-0.42218 0.02633 0.06099 0.38448 0.10553 0.77268 0.10553 1.1742 0 0.62476-0.07941 1.2277-0.22428 1.8074 1.6979 0.93961 3.108 2.3456 4.037 4.0502 0.9636-0.50168 2.0385-0.82063 3.1794-0.89712-0.29404-3.4483-3.1508-6.161-6.6755-6.161zm-5.4618 2.5066c-5.2076 0-9.4197 4.2117-9.4197 9.4197 0 5.2076 4.2117 9.4197 9.4197 9.4197s9.4197-4.2121 9.4197-9.4197c0-5.208-4.2121-9.4197-9.4197-9.4197zm-10.224 0.0395c-4.0401 0-7.3089 3.2686-7.3089 7.3089 0 2.3784 1.1332 4.4838 2.8892 5.818 0.7403-1.4279 2.2272-2.4011 3.9446-2.4011 0.20757 0 0.40681 0.02517 0.60688 0.05284-0.0628-0.45692-0.09235-0.92432-0.09235-1.3985 0-2.2666 0.7378-4.3626 1.9921-6.0555-0.75084-0.93952-1.2881-2.0684-1.5172-3.2982-0.16974-0.01167-0.34177-0.02633-0.51451-0.02633zm22.903 4.3538c-1.2267 0-2.3759 0.3132-3.3905 0.84434 0.57613 1.2762 0.89712 2.6921 0.89712 4.1821 0 2.7899-1.1217 5.3234-2.942 7.1638 1.3372 1.4846 3.2774 2.4143 5.4355 2.4143 4.0401 0 7.3089-3.2686 7.3089-7.3089 0-4.0401-3.2686-7.2955-7.3089-7.2955zm-30.923 0.96301c-3.7221-0.000417-6.7418 2.9929-6.7418 6.7147 0 3.7217 3.0198 6.7414 6.7414 6.7414 1.4165 0 2.7288-0.44134 3.8127-1.1874-0.44792-0.69601-0.71243-1.5281-0.71243-2.4143 0-0.45993 0.06787-0.90185 0.19789-1.3192-2.0293-1.4666-3.351-3.8531-3.351-6.5435 0-0.68359 0.09008-1.3446 0.25067-1.979-0.06665-0.0017-0.13075-0.01333-0.1979-0.01333zm39.565 5.7785c-0.19853 0-0.39065 0.02266-0.58046 0.05284 0.01047 0.16782 0.01318 0.33087 0.01318 0.50134 0 2.1459-0.84668 4.0936-2.2164 5.5409 0.67384 0.78359 1.6636 1.2797 2.7837 1.2797 2.0402 0 3.694-1.6406 3.694-3.6808s-1.6538-3.694-3.694-3.694zm-32.019 0.39577c-2.0401 0-3.6808 1.6407-3.6808 3.6808s1.6407 3.694 3.6808 3.694c1.5638 0 2.8911-0.97576 3.4302-2.3483-1.3153-1.3396-2.2605-3.0484-2.6781-4.9471-0.24441-0.0505-0.49247-0.07917-0.75201-0.07917z"/></svg> diff --git a/core/img/logo-mail.gif b/core/img/logo-mail.gif Binary files differindex f1dd108450e..32ba878b80b 100644 --- a/core/img/logo-mail.gif +++ b/core/img/logo-mail.gif diff --git a/core/img/logo-wide.png b/core/img/logo-wide.png Binary files differdeleted file mode 100644 index bca5fa7997f..00000000000 --- a/core/img/logo-wide.png +++ /dev/null diff --git a/core/img/logo-wide.svg b/core/img/logo-wide.svg deleted file mode 100644 index 1ee00e725e5..00000000000 --- a/core/img/logo-wide.svg +++ /dev/null @@ -1,2 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" height="34" width="150" version="1.1" y="0px" x="0px" xmlns:cc="http://creativecommons.org/ns#" enable-background="new 0 0 595.275 311.111" viewBox="0 0 150.00267 34" xmlns:dc="http://purl.org/dc/elements/1.1/"><g transform="translate(1 .99987)" fill="#FFF"><path style="block-progression:tb;color:#000000;enable-background:accumulate;text-transform:none;text-indent:0" d="m104 13v15.344c0 2.008 1.71 3.656 3.72 3.656v-1c-1.52 0-2.72-1.137-2.72-2.656v-15.344h-1zm42 0v8h-4.53c-2.99 0-5.47 2.571-5.47 5.562s2.48 5.466 5.47 5.438h1.78c0.88 0 1.74-0.442 2.44-1.094 0.7-0.651 1.29-1.555 1.31-2.562v-15.344h-1zm-44.5 2c-4.635 0-8.5 3.865-8.5 8.5s3.865 8.5 8.5 8.5v-1c-4.146 0-7.5-3.353-7.5-7.5s3.354-7.5 7.5-7.5v-1zm-46 6c-0.606 0-1.201 0.092-1.75 0.281 0.071 0.325 0.15 0.664 0.188 1 0.489-0.18 1.007-0.281 1.562-0.281 2.503 0 4.5 1.997 4.5 4.5s-1.997 4.5-4.5 4.5c-1.444 0-2.71-0.676-3.531-1.719-0.198 0.255-0.434 0.485-0.657 0.719 1.017 1.208 2.521 2 4.188 2 2.991 0 5.5-2.509 5.5-5.5s-2.509-5.5-5.5-5.5zm7.5 0v7.344c0 2.008 1.992 3.656 4 3.656 1.368 0 2.905-0.695 3.531-1.812 0.622 1.117 2.101 1.812 3.469 1.812 2.008 0 4-1.648 4-3.656v-7.344h-1v7.344c0 1.519-1.481 2.656-3 2.656s-3-1.002-3-2.656v-7.344h-1v7.344c0 1.519-1.48 2.656-3 2.656-1.519 0-3-1.137-3-2.656v-7.344h-1zm22.531 0c-2.991 0-5.531 2.54-5.531 5.531v5.469h1v-5.469c0-2.502 2.029-4.531 4.531-4.531 2.503 0 4.469 2.029 4.469 4.531v5.469h1v-5.469c0-2.991-2.477-5.531-5.469-5.531zm29.969 0c-2.99 0-5.5 2.509-5.5 5.5s2.51 5.5 5.5 5.5 5.5-2.509 5.5-5.5-2.51-5.5-5.5-5.5zm7.5 0v5.562c0 2.991 2.48 5.438 5.47 5.438s5.53-2.447 5.53-5.438v-5.562h-1v5.562c0 2.502-2.03 4.438-4.53 4.438s-4.47-1.936-4.47-4.438v-5.562h-1zm-7.5 1c2.5 0 4.5 1.997 4.5 4.5s-2 4.5-4.5 4.5-4.5-1.997-4.5-4.5 2-4.5 4.5-4.5zm25.97 0h4.53v6.344c-0.01 0.7-0.35 1.387-0.91 1.906-0.55 0.519-1.27 0.75-1.84 0.75h-1.78c-2.5 0-4.47-1.936-4.47-4.438s1.97-4.562 4.47-4.562z" transform="translate(-3.1714e-6,0)"/><path d="m16.398 3.6857c-2.2943 0-4.1386 1.8599-4.1386 4.1542 0 0.74283 0.19165 1.4447 0.53099 2.0459 1.3845-0.781 2.9851-1.2338 4.6852-1.2338 0.16408 0 0.32211 0.00666 0.48414 0.015617-0.01834-0.23258-0.03123-0.46554-0.03123-0.70278 0-1.2779 0.27755-2.4937 0.76525-3.592-0.657-0.4403-1.443-0.6871-2.296-0.6871z"/><path d="m7.9805 15.852c-4.4057 0-7.9805 3.544-7.9805 7.949 0 4.4057 3.5748 7.9805 7.9805 7.9805 1.6769 0 3.2302-0.52246 4.5134-1.4056-0.53024-0.82393-0.84334-1.809-0.84334-2.858 0-0.54446 0.08034-1.0675 0.23426-1.5617-2.4023-1.7361-3.9668-4.5612-3.9668-7.7462 0-0.80924 0.10664-1.5917 0.29673-2.3426-0.0791-0.002-0.1549-0.015-0.2344-0.015z"/><path d="m17.476 9.5578c-4.7826 0-8.652 3.8694-8.652 8.652 0 2.8154 1.3414 5.3078 3.4202 6.8873 0.87636-1.6903 2.6365-2.8424 4.6696-2.8424 0.24572 0 0.48158 0.02978 0.7184 0.06247-0.07434-0.54088-0.10932-1.0943-0.10932-1.6554 0-2.6831 0.87339-5.1644 2.3582-7.1684-0.889-1.112-1.525-2.448-1.796-3.9039-0.201-0.014-0.405-0.0313-0.609-0.0313z"/><path d="m36.045 6.5437c-0.1695 0-0.33288 0.02081-0.49976 0.031235 0.07218 0.45513 0.12494 0.9147 0.12494 1.3899 0 0.7396-0.09406 1.4533-0.2655 2.1396 2.01 1.1123 3.6791 2.7767 4.7789 4.7945 1.1407-0.59386 2.4132-0.97147 3.7638-1.062-0.34807-4.082-3.7298-7.2933-7.9024-7.2933z"/><path d="m26.799 5.1362e-7c-4.4056 0-7.9649 3.5593-7.9649 7.9649 0 1.816 0.60469 3.4874 1.6242 4.8258 2.2117-2.5599 5.4759-4.1855 9.1205-4.1855 1.7831 0 3.474 0.39707 4.9976 1.0932 0.124-0.5582 0.188-1.1384 0.188-1.7338 0-4.4056-3.559-7.9649-7.965-7.9649z"/><path d="m44.588 14.712c-1.4522 0-2.8126 0.37076-4.0137 0.99951 0.682 1.5107 1.062 3.1868 1.062 4.9507 0 3.3027-1.3279 6.3016-3.4827 8.4802 1.583 1.7575 3.8797 2.858 6.4344 2.858 4.7826 0 8.652-3.8694 8.652-8.652 0-4.7827-3.8694-8.6364-8.652-8.6364z"/><path d="m16.914 23.161c-2.415 0-4.3572 1.9422-4.3572 4.3572s1.9422 4.3729 4.3572 4.3729c1.8512 0 3.4224-1.1551 4.0605-2.7799-1.557-1.5857-2.6759-3.6087-3.1703-5.8565-0.28932-0.05983-0.58298-0.09371-0.89019-0.09371z"/><path d="m29.579 9.511c-6.1647 0-11.151 4.9857-11.151 11.151 0 6.1645 4.9858 11.151 11.151 11.151 6.165 0 11.151-4.9864 11.151-11.151 0-6.1651-4.9861-11.151-11.151-11.151z"/></g></svg> diff --git a/core/img/places/file.png b/core/img/places/file.png Binary files differindex c2e5db953a8..e0f04c31731 100644 --- a/core/img/places/file.png +++ b/core/img/places/file.png diff --git a/core/img/places/file.svg b/core/img/places/file.svg index be6d9866835..7db9a201a9f 100644 --- a/core/img/places/file.svg +++ b/core/img/places/file.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> - <path opacity=".7" style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" d="m3.3501 1.002c-0.1975 0.0382-0.3535 0.2333-0.35 0.4374v13.123c0.0000047 0.22904 0.20522 0.43743 0.43077 0.43744h10.139c0.22555-0.000006 0.43076-0.2084 0.43077-0.43744v-10.143c-0.004-0.06684-0.022-0.13284-0.054-0.19134-0.966-1.3896-2.035-2.4191-3.312-3.1988-0.043-0.0164-0.088-0.0256-0.134-0.0274h-7.0695c-0.026843-0.0026-0.053928-0.0026-0.080774 0zm5.6499 2.498c0-0.2357 0.2643-0.5 0.5-0.5h0.5v2h2v0.5c0 0.2357-0.264 0.5-0.5 0.5h-2c-0.2357 0-0.5-0.2643-0.5-0.5 0-0.46411 0.0000019-1.4917 0.0000019-2z" fill="#1e1e1e"/> + <path opacity=".5" style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" d="m3.3501 1.002c-0.1975 0.0382-0.3535 0.2333-0.35 0.4374v13.123c0.0000047 0.22904 0.20522 0.43743 0.43077 0.43744h10.139c0.22555-0.000006 0.43076-0.2084 0.43077-0.43744v-10.143c-0.004-0.06684-0.022-0.13284-0.054-0.19134-0.966-1.3896-2.035-2.4191-3.312-3.1988-0.043-0.0164-0.088-0.0256-0.134-0.0274h-7.0695c-0.026843-0.0026-0.053928-0.0026-0.080774 0zm5.6499 2.498c0-0.2357 0.2643-0.5 0.5-0.5h0.5v2h2v0.5c0 0.2357-0.264 0.5-0.5 0.5h-2c-0.2357 0-0.5-0.2643-0.5-0.5 0-0.46411 0.0000019-1.4917 0.0000019-2z"/> </svg> diff --git a/core/img/places/folder.png b/core/img/places/folder.png Binary files differindex f96c26aa62e..e7882298a83 100644 --- a/core/img/places/folder.png +++ b/core/img/places/folder.png diff --git a/core/img/places/folder.svg b/core/img/places/folder.svg index 3b131829cdb..08633f60a80 100644 --- a/core/img/places/folder.svg +++ b/core/img/places/folder.svg @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <g opacity=".7" fill="#1e1e1e" transform="matrix(.86667 0 0 .86667 -172.04 -864.43)" fill-rule="evenodd"> - <path fill="#1e1e1e" d="m200.2 998.57c-0.28913 0-0.53125 0.24212-0.53125 0.53125v13.938c0 0.2985 0.23264 0.5312 0.53125 0.5312h15.091c0.2986 0 0.53125-0.2327 0.53125-0.5312l0.0004-8.1661c0-0.289-0.24212-0.5338-0.53125-0.5338h-12.161l-0.0004 6.349c0 0.2771-0.30237 0.5638-0.57937 0.5638s-0.57447-0.2867-0.57447-0.5638l0.0004-7.0055c0-0.2771 0.23357-0.4974 0.51057-0.4974h2.6507l8.3774 0.0003-0.0004-1.7029c0-0.3272-0.24549-0.6047-0.57258-0.6047h-7.5043v-1.7764c0-0.28915-0.23415-0.53125-0.52328-0.53125z" fill-rule="evenodd"/> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <g fill-rule="evenodd" transform="matrix(.86667 0 0 .86667 -172.04 -864.43)"> + <path d="m200.2 998.57c-0.28913 0-0.53125 0.24212-0.53125 0.53125v13.938c0 0.2985 0.23264 0.5312 0.53125 0.5312h15.091c0.2986 0 0.53125-0.2327 0.53125-0.5312l0.0004-8.1661c0-0.289-0.24212-0.5338-0.53125-0.5338h-12.161l-0.0004 6.349c0 0.2771-0.30237 0.5638-0.57937 0.5638s-0.57447-0.2867-0.57447-0.5638l0.0004-7.0055c0-0.2771 0.23357-0.4974 0.51057-0.4974h2.6507l8.3774 0.0003-0.0004-1.7029c0-0.3272-0.24549-0.6047-0.57258-0.6047h-7.5043v-1.7764c0-0.28915-0.23415-0.53125-0.52328-0.53125z" fill-rule="evenodd"/> </g> </svg> diff --git a/core/img/places/home.png b/core/img/places/home.png Binary files differindex 5cf94495c34..2e0313d59a7 100644 --- a/core/img/places/home.png +++ b/core/img/places/home.png diff --git a/core/img/places/home.svg b/core/img/places/home.svg index 020a90f7720..2edc3af25bb 100644 --- a/core/img/places/home.svg +++ b/core/img/places/home.svg @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> <rect style="color:#000000" fill-opacity="0" height="97.986" width="163.31" y="-32.993" x="-62.897"/> - <path opacity=".7" fill="#1e1e1e" d="m8 1.0306-8 7.9694h3v6.0001h10v-6h3l-3-3.0306v-3.9695h-3v1.0812l-2-2.0505z" fill-rule="evenodd"/> + <path opacity=".5" d="m8 1.0306-8 7.9694h3v6.0001h10v-6h3l-3-3.0306v-3.9695h-3v1.0812l-2-2.0505z" fill-rule="evenodd"/> </svg> diff --git a/core/js/apps.js b/core/js/apps.js index 21fae58985e..ecefa48caa1 100644 --- a/core/js/apps.js +++ b/core/js/apps.js @@ -44,12 +44,12 @@ var area = $(areaSelector); function hideArea() { - area.slideUp(function() { + area.slideUp(OC.menuSpeed*4, function() { area.trigger(new $.Event('hide')); }); } function showArea() { - area.slideDown(function() { + area.slideDown(OC.menuSpeed*4, function() { area.trigger(new $.Event('show')); }); } @@ -58,7 +58,7 @@ if (!area.is(':animated')) { // button toggles the area - if (button === event.target) { + if (button === event.target.closest('[data-apps-slide-toggle]')) { if (area.is(':visible')) { hideArea(); } else { diff --git a/core/js/backgroundjobs.js b/core/js/backgroundjobs.js index 4a558a66b4b..c3100792e9e 100644 --- a/core/js/backgroundjobs.js +++ b/core/js/backgroundjobs.js @@ -22,4 +22,6 @@ // start worker once page has loaded $(document).ready(function(){ $.get( OC.webroot+'/cron.php' ); + + $('.section .icon-info').tipsy({gravity: 'w'}); }); diff --git a/core/js/config.php b/core/js/config.php index b7224253461..cecbf27e4b2 100644 --- a/core/js/config.php +++ b/core/js/config.php @@ -1,9 +1,34 @@ <?php /** - * Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bart Visscher <bartv@thisnet.nl> + * @author Björn Schießle <schiessle@owncloud.com> + * @author Guillaume AMAT <guillaume.amat@informatique-libre.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Jörn Friedrich Dreyer <jfd@butonic.de> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Matthias Rieber <matthias@zu-con.org> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Owen Winkler <a_github@midnightcircus.com> + * @author Robin Appelman <icewind@owncloud.com> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ // Set the content type to Javascript @@ -25,14 +50,16 @@ foreach(OC_App::getEnabledApps() as $app) { $apps_paths[$app] = OC_App::getAppWebPath($app); } -$value = \OCP\Config::getAppValue('core', 'shareapi_default_expire_date', 'no'); +$config = \OC::$server->getConfig(); +$value = $config->getAppValue('core', 'shareapi_default_expire_date', 'no'); $defaultExpireDateEnabled = ($value === 'yes') ? true :false; $defaultExpireDate = $enforceDefaultExpireDate = null; if ($defaultExpireDateEnabled) { - $defaultExpireDate = (int)\OCP\Config::getAppValue('core', 'shareapi_expire_after_n_days', '7'); - $value = \OCP\Config::getAppValue('core', 'shareapi_enforce_expire_date', 'no'); + $defaultExpireDate = (int) $config->getAppValue('core', 'shareapi_expire_after_n_days', '7'); + $value = $config->getAppValue('core', 'shareapi_enforce_expire_date', 'no'); $enforceDefaultExpireDate = ($value === 'yes') ? true : false; } +$outgoingServer2serverShareEnabled = $config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes'; $array = array( "oc_debug" => (defined('DEBUG') && DEBUG) ? 'true' : 'false', @@ -85,6 +112,8 @@ $array = array( 'enforcePasswordForPublicLink' => \OCP\Util::isPublicLinkPasswordRequired(), 'sharingDisabledForUser' => \OCP\Util::isSharingDisabledForUser(), 'resharingAllowed' => \OCP\Share::isResharingAllowed(), + 'remoteShareAllowed' => $outgoingServer2serverShareEnabled, + 'federatedCloudShareDoc' => \OC::$server->getURLGenerator()->linkToDocs('user-sharing-federated') ) ) ), @@ -99,7 +128,8 @@ $array = array( 'slogan' => $defaults->getSlogan(), 'logoClaim' => $defaults->getLogoClaim(), 'shortFooter' => $defaults->getShortFooter(), - 'longFooter' => $defaults->getLongFooter() + 'longFooter' => $defaults->getLongFooter(), + 'folder' => OC_Util::getTheme(), ) ) ); diff --git a/core/js/core.json b/core/js/core.json index f57061a2c81..e75db534550 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -1,7 +1,7 @@ { "vendor": [ "jquery/jquery.min.js", - "jquery/jquery-migrate.min.js", + "jquery-migrate/jquery-migrate.min.js", "jquery-ui/ui/jquery-ui.custom.js", "underscore/underscore.js", "moment/min/moment-with-locales.js", @@ -27,6 +27,8 @@ "multiselect.js", "oc-requesttoken.js", "setupchecks.js", - "../search/js/search.js" + "../search/js/search.js", + "mimetype.js", + "mimetypelist.js" ] } diff --git a/core/js/jquery.ocdialog.js b/core/js/jquery.ocdialog.js index e48e3e8df6a..ea034f0aff7 100644 --- a/core/js/jquery.ocdialog.js +++ b/core/js/jquery.ocdialog.js @@ -78,8 +78,12 @@ var pos = self.parent.position(); self.$dialog.css({ left: pos.left + ($(window).innerWidth() - self.$dialog.outerWidth())/2, - top: pos.top + ($(window).innerHeight() - self.$dialog.outerHeight())/2 + top: pos.top + ($(window).innerHeight() - self.$dialog.outerHeight())/2, + width: Math.min(self.options.width, $(window).innerWidth() - 20 ), + height: Math.min(self.options.height, $(window).innerHeight() - 20) }); + // set sizes of content + self._setSizes(); }); this._setOptions(this.options); diff --git a/core/js/js.js b/core/js/js.js index f24694124ad..ba456b54c6d 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -68,14 +68,24 @@ var OC={ PERMISSION_ALL:31, TAG_FAVORITE: '_$!<Favorite>!$_', /* jshint camelcase: false */ + /** + * Relative path to ownCloud root. + * For example: "/owncloud" + * + * @type string + * + * @deprecated since 8.2, use OC.getRootPath() instead + * @see OC#getRootPath + */ webroot:oc_webroot, + appswebroots:(typeof oc_appswebroots !== 'undefined') ? oc_appswebroots:false, currentUser:(typeof oc_current_user!=='undefined')?oc_current_user:false, config: window.oc_config, appConfig: window.oc_appconfig || {}, theme: window.oc_defaults || {}, coreApps:['', 'admin','log','core/search','settings','core','3rdparty'], - menuSpeed: 100, + menuSpeed: 50, /** * Get an absolute url to a file in an app @@ -219,6 +229,41 @@ var OC={ }, /** + * Returns the host name used to access this ownCloud instance + * + * @return {string} host name + * + * @since 8.2 + */ + getHost: function() { + return window.location.host; + }, + + /** + * Returns the port number used to access this ownCloud instance + * + * @return {int} port number + * + * @since 8.2 + */ + getPort: function() { + return window.location.port; + }, + + /** + * Returns the web root path where this ownCloud instance + * is accessible, with a leading slash. + * For example "/owncloud". + * + * @return {string} web root path + * + * @since 8.2 + */ + getRootPath: function() { + return OC.webroot; + }, + + /** * get the absolute path to an image file * if no extension is given for the image, it will automatically decide * between .png and .svg based on what the browser supports @@ -326,6 +371,58 @@ var OC={ }, /** + * Join path sections + * + * @param {...String} path sections + * + * @return {String} joined path, any leading or trailing slash + * will be kept + * + * @since 8.2 + */ + joinPaths: function() { + if (arguments.length < 1) { + return ''; + } + var path = ''; + // convert to array + var args = Array.prototype.slice.call(arguments); + // discard empty arguments + args = _.filter(args, function(arg) { + return arg.length > 0; + }); + if (args.length < 1) { + return ''; + } + + var lastArg = args[args.length - 1]; + var leadingSlash = args[0].charAt(0) === '/'; + var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/'; + var sections = []; + var i; + for (i = 0; i < args.length; i++) { + sections = sections.concat(args[i].split('/')); + } + var first = !leadingSlash; + for (i = 0; i < sections.length; i++) { + if (sections[i] !== '') { + if (first) { + first = false; + } else { + path += '/'; + } + path += sections[i]; + } + } + + if (trailingSlash) { + // add it back + path += '/'; + } + return path; + }, + + /** * Do a search query and display the results * @param {string} query the search query */ @@ -476,11 +573,14 @@ var OC={ registerMenu: function($toggle, $menuEl) { $menuEl.addClass('menu'); $toggle.on('click.menu', function(event) { + // prevent the link event (append anchor to URL) + event.preventDefault(); + if ($menuEl.is(OC._currentMenu)) { $menuEl.slideUp(OC.menuSpeed); OC._currentMenu = null; OC._currentMenuToggle = null; - return false; + return; } // another menu was open? else if (OC._currentMenu) { @@ -490,7 +590,6 @@ var OC={ $menuEl.slideToggle(OC.menuSpeed); OC._currentMenu = $menuEl; OC._currentMenuToggle = $toggle; - return false; }); }, @@ -1140,16 +1239,16 @@ function initCore() { }); // all the tipsy stuff needs to be here (in reverse order) to work - $('.displayName .action').tipsy({gravity:'se', fade:true, live:true}); - $('.password .action').tipsy({gravity:'se', fade:true, live:true}); - $('#upload').tipsy({gravity:'w', fade:true}); - $('.selectedActions a').tipsy({gravity:'s', fade:true, live:true}); - $('a.action.delete').tipsy({gravity:'e', fade:true, live:true}); - $('a.action').tipsy({gravity:'s', fade:true, live:true}); - $('td .modified').tipsy({gravity:'s', fade:true, live:true}); - $('td.lastLogin').tipsy({gravity:'s', fade:true, html:true}); - $('input').tipsy({gravity:'w', fade:true}); - $('.extra-data').tipsy({gravity:'w', fade:true, live:true}); + $('.displayName .action').tipsy({gravity:'se', live:true}); + $('.password .action').tipsy({gravity:'se', live:true}); + $('#upload').tipsy({gravity:'w'}); + $('.selectedActions a').tipsy({gravity:'s', live:true}); + $('a.action.delete').tipsy({gravity:'e', live:true}); + $('a.action').tipsy({gravity:'s', live:true}); + $('td .modified').tipsy({gravity:'s', live:true}); + $('td.lastLogin').tipsy({gravity:'s', html:true}); + $('input').tipsy({gravity:'w'}); + $('.extra-data').tipsy({gravity:'w', live:true}); // toggle for menus $(document).on('mouseup.closemenus', function(event) { @@ -1196,6 +1295,20 @@ function initCore() { setupMainMenu(); + // move triangle of apps dropdown to align with app name triangle + // 2 is the additional offset between the triangles + if($('#navigation').length) { + $('#header #owncloud + .menutoggle').one('click', function(){ + var caretPosition = $('.header-appname + .icon-caret').offset().left - 2; + if(caretPosition > 255) { + // if the app name is longer than the menu, just put the triangle in the middle + return; + } else { + $('head').append('<style>#navigation:after { left: '+ caretPosition +'px; }</style>'); + } + }); + } + // just add snapper for logged in users if($('#app-navigation').length && !$('html').hasClass('lte9')) { @@ -1215,7 +1328,7 @@ function initCore() { }); // close sidebar when switching navigation entry var $appNavigation = $('#app-navigation'); - $appNavigation.delegate('a', 'click', function(event) { + $appNavigation.delegate('a, :button', 'click', function(event) { var $target = $(event.target); // don't hide navigation when changing settings or adding things if($target.is('.app-navigation-noclose') || @@ -1247,6 +1360,33 @@ function initCore() { // initial call toggleSnapperOnSize(); + // adjust controls bar width + var adjustControlsWidth = function() { + if($('#controls').length) { + var controlsWidth; + // if there is a scrollbar … + if($('#app-content').get(0).scrollHeight > $('#app-content').height()) { + if($(window).width() > 768) { + controlsWidth = $('#content').width() - $('#app-navigation').width() - getScrollBarWidth(); + } else { + controlsWidth = $('#content').width() - getScrollBarWidth(); + } + } else { // if there is none + if($(window).width() > 768) { + controlsWidth = $('#content').width() - $('#app-navigation').width(); + } else { + controlsWidth = $('#content').width(); + } + } + $('#controls').css('width', controlsWidth); + $('#controls').css('min-width', controlsWidth); + } + }; + + $(window).resize(_.debounce(adjustControlsWidth, 250)); + + $('body').delegate('#app-content', 'apprendered', adjustControlsWidth); + } } @@ -1338,7 +1478,7 @@ OC.Util = { * @returns {string} timestamp formatted as requested */ formatDate: function (timestamp, format) { - format = format || "MMMM D, YYYY h:mm"; + format = format || "LLL"; return moment(timestamp).format(format); }, @@ -1671,3 +1811,31 @@ jQuery.fn.selectRange = function(start, end) { jQuery.fn.exists = function(){ return this.length > 0; }; + +function getScrollBarWidth() { + var inner = document.createElement('p'); + inner.style.width = "100%"; + inner.style.height = "200px"; + + var outer = document.createElement('div'); + outer.style.position = "absolute"; + outer.style.top = "0px"; + outer.style.left = "0px"; + outer.style.visibility = "hidden"; + outer.style.width = "200px"; + outer.style.height = "150px"; + outer.style.overflow = "hidden"; + outer.appendChild (inner); + + document.body.appendChild (outer); + var w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var w2 = inner.offsetWidth; + if(w1 === w2) { + w2 = outer.clientWidth; + } + + document.body.removeChild (outer); + + return (w1 - w2); +} diff --git a/core/js/l10n.js b/core/js/l10n.js index 60ffa949191..fb93d7b789e 100644 --- a/core/js/l10n.js +++ b/core/js/l10n.js @@ -226,3 +226,7 @@ window.t = _.bind(OC.L10N.translate, OC.L10N); */ window.n = _.bind(OC.L10N.translatePlural, OC.L10N); +Handlebars.registerHelper('t', function(app, text) { + return OC.L10N.translate(app, text); +}); + diff --git a/core/js/maintenance-check.js b/core/js/maintenance-check.js index 8ca00456fef..663f7fb5f00 100644 --- a/core/js/maintenance-check.js +++ b/core/js/maintenance-check.js @@ -3,18 +3,15 @@ window.setInterval(checkStatus, 20000); function checkStatus() { var request = new XMLHttpRequest(); - var ocroot = location.pathname.substr( - 0, location.pathname.indexOf('index.php') - ); - request.open("GET", ocroot+'status.php', true); - request.send(); + request.open("GET", OC.webroot+'/status.php', true); request.onreadystatechange = function() { if (request.readyState === 4) { var response = request.responseText; var responseobj = JSON.parse(response); - if (responseobj.maintenance === 'false') { + if (responseobj.maintenance === false) { window.location.reload(); } } }; + request.send(); } diff --git a/core/js/mimetype.js b/core/js/mimetype.js new file mode 100644 index 00000000000..d22b0a2378a --- /dev/null +++ b/core/js/mimetype.js @@ -0,0 +1,113 @@ +/** + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +/** + * Namespace to hold functions related to convert mimetype to icons + * + * @namespace + */ +OC.MimeType = { + + /** + * Cache that maps mimeTypes to icon urls + */ + _mimeTypeIcons: {}, + + /** + * Return the file icon we want to use for the given mimeType. + * The file needs to be present in the supplied file list + * + * @param {string} mimeType The mimeType we want an icon for + * @param {array} files The available icons in this theme + * @return {string} The icon to use or null if there is no match + */ + _getFile: function(mimeType, files) { + var icon = mimeType.replace(new RegExp('/', 'g'), '-'); + + // Generate path + if (mimeType === 'dir' && $.inArray('folder', files) !== -1) { + return 'folder'; + } else if (mimeType === 'dir-shared' && $.inArray('folder-shared', files) !== -1) { + return 'folder-shared'; + } else if (mimeType === 'dir-external' && $.inArray('folder-external', files) !== -1) { + return 'folder-external'; + } else if ($.inArray(icon, files) !== -1) { + return icon; + } else if ($.inArray(icon.split('-')[0], files) !== -1) { + return icon.split('-')[0]; + } else if ($.inArray('file', files) !== -1) { + return 'file'; + } + + return null; + }, + + /** + * Return the url to icon of the given mimeType + * + * @param {string} mimeType The mimeType to get the icon for + * @return {string} Url to the icon for mimeType + */ + getIconUrl: function(mimeType) { + if (_.isUndefined(mimeType)) { + return undefined; + } + + if (mimeType in OC.MimeTypeList.aliases) { + mimeType = OC.MimeTypeList.aliases[mimeType]; + } + if (mimeType in OC.MimeType._mimeTypeIcons) { + return OC.MimeType._mimeTypeIcons[mimeType]; + } + + // First try to get the correct icon from the current theme + var gotIcon = null; + var path = ''; + if (OC.theme.folder !== '' && $.isArray(OC.MimeTypeList.themes[OC.theme.folder])) { + path = OC.webroot + '/themes/' + OC.theme.folder + '/core/img/filetypes/'; + var icon = OC.MimeType._getFile(mimeType, OC.MimeTypeList.themes[OC.theme.folder]); + + if (icon !== null) { + gotIcon = true; + path += icon; + } + } + + // If we do not yet have an icon fall back to the default + if (gotIcon === null) { + path = OC.webroot + '/core/img/filetypes/'; + path += OC.MimeType._getFile(mimeType, OC.MimeTypeList.files); + } + + // Use svg if we can + if(OC.Util.hasSVGSupport()){ + path += '.svg'; + } else { + path += '.png'; + } + + // Cache the result + OC.MimeType._mimeTypeIcons[mimeType] = path; + return path; + } + +}; + + diff --git a/core/js/mimetypelist.js b/core/js/mimetypelist.js new file mode 100644 index 00000000000..b4de98247d1 --- /dev/null +++ b/core/js/mimetypelist.js @@ -0,0 +1,108 @@ +/** +* This file is automatically generated +* DO NOT EDIT MANUALLY! +* +* You can update the list of MimeType Aliases in config/mimetypealiases.json +* The list of files is fetched from core/img/filetypes +* To regenerate this file run ./occ maintenance:mimetypesjs +*/ +OC.MimeTypeList={ + aliases: { + "application/coreldraw": "image", + "application/font-sfnt": "font", + "application/font-woff": "font", + "application/illustrator": "image/vector", + "application/json": "text/code", + "application/msaccess": "database", + "application/msexcel": "x-office/spreadsheet", + "application/mspowerpoint": "x-office/presentation", + "application/msword": "x-office/document", + "application/octet-stream": "file", + "application/postscript": "image/vector", + "application/vnd.android.package-archive": "package/x-generic", + "application/vnd.ms-excel": "x-office/spreadsheet", + "application/vnd.ms-excel.addin.macroEnabled.12": "x-office/spreadsheet", + "application/vnd.ms-excel.sheet.binary.macroEnabled.12": "x-office/spreadsheet", + "application/vnd.ms-excel.sheet.macroEnabled.12": "x-office/spreadsheet", + "application/vnd.ms-excel.template.macroEnabled.12": "x-office/spreadsheet", + "application/vnd.ms-fontobject": "font", + "application/vnd.ms-powerpoint": "x-office/presentation", + "application/vnd.ms-powerpoint.addin.macroEnabled.12": "x-office/presentation", + "application/vnd.ms-powerpoint.presentation.macroEnabled.12": "x-office/presentation", + "application/vnd.ms-powerpoint.slideshow.macroEnabled.12": "x-office/presentation", + "application/vnd.ms-powerpoint.template.macroEnabled.12": "x-office/presentation", + "application/vnd.ms-word.document.macroEnabled.12": "x-office/document", + "application/vnd.ms-word.template.macroEnabled.12": "x-office/document", + "application/vnd.oasis.opendocument.presentation": "x-office/presentation", + "application/vnd.oasis.opendocument.presentation-template": "x-office/presentation", + "application/vnd.oasis.opendocument.spreadsheet": "x-office/spreadsheet", + "application/vnd.oasis.opendocument.spreadsheet-template": "x-office/spreadsheet", + "application/vnd.oasis.opendocument.text": "x-office/document", + "application/vnd.oasis.opendocument.text-master": "x-office/document", + "application/vnd.oasis.opendocument.text-template": "x-office/document", + "application/vnd.oasis.opendocument.text-web": "x-office/document", + "application/vnd.openxmlformats-officedocument.presentationml.presentation": "x-office/presentation", + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": "x-office/presentation", + "application/vnd.openxmlformats-officedocument.presentationml.template": "x-office/presentation", + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "x-office/spreadsheet", + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": "x-office/spreadsheet", + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "x-office/document", + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": "x-office/document", + "application/x-7z-compressed": "package/x-generic", + "application/x-compressed": "package/x-generic", + "application/x-dcraw": "image", + "application/x-deb": "package/x-generic", + "application/x-font": "font", + "application/x-gimp": "image", + "application/x-gzip": "package/x-generic", + "application/x-perl": "text/code", + "application/x-photoshop": "image", + "application/x-php": "text/code", + "application/x-rar-compressed": "package/x-generic", + "application/x-tar": "package/x-generic", + "application/x-tex": "text", + "application/xml": "text/html", + "application/yaml": "text/code", + "application/zip": "package/x-generic", + "httpd/unix-directory": "dir", + "image/svg+xml": "image/vector", + "text/css": "text/code", + "text/csv": "x-office/spreadsheet", + "text/x-shellscript": "text/code" +}, + files: [ + "text-x-h", + "application-rss+xml", + "video", + "folder-drag-accept", + "application-epub+zip", + "folder-public", + "package-x-generic", + "application-x-shockwave-flash", + "text", + "folder-external", + "web", + "text-vcard", + "application", + "image-vector", + "database", + "text-code", + "text-x-python", + "x-office-spreadsheet", + "application-pdf", + "folder", + "x-office-document", + "text-html", + "text-calendar", + "x-office-presentation", + "text-x-c", + "file", + "font", + "folder-shared", + "application-x-cbr", + "application-javascript", + "image", + "audio" +], + themes: [] +}; diff --git a/core/js/multiselect.js b/core/js/multiselect.js index 565b793200f..96144d39ee0 100644 --- a/core/js/multiselect.js +++ b/core/js/multiselect.js @@ -76,7 +76,7 @@ var self = this; self.menuDirection = 'down'; button.click(function(event){ - + var button=$(this); if(button.parent().children('ul').length>0) { if(self.menuDirection === 'down') { @@ -113,8 +113,9 @@ input.attr('name', 'ms'+multiSelectId+'-option'); } var label=$('<label/>'); - label.attr('for',id); + label.attr('for', id); label.text(element.text() || item); + label.attr('title', element.text() || item); if(settings.checked.indexOf(item) !== -1 || checked) { input.attr('checked', true); } @@ -190,7 +191,8 @@ }); button.parent().data('preventHide',false); if(settings.createText){ - var li=$('<li class="creator">+ '+settings.createText+'</li>'); + var li=$('<li class="creator" title="' + settings.createText + + '">+ ' + settings.createText + '</li>'); li.click(function(event){ li.empty(); var input=$('<input type="text" class="new">'); @@ -258,7 +260,7 @@ }); list.append(li); } - + var doSort = function(list, selector) { var rows = list.find('li'+selector).get(); @@ -299,7 +301,7 @@ top:pos.top - list.height(), left:pos.left, width:(button.outerWidth()-2)+'px' - + }); list.detach().insertBefore($(this)); list.addClass('up'); @@ -327,7 +329,7 @@ } } }); - + return span; }; })( jQuery ); diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js index 0c046d8ef0e..52ed34f61ec 100644 --- a/core/js/oc-dialogs.js +++ b/core/js/oc-dialogs.js @@ -138,7 +138,7 @@ var OCdialogs = { * @param title dialog title * @param callback which will be triggered when user presses Choose * @param multiselect whether it should be possible to select multiple files - * @param mimetypeFilter mimetype to filter by + * @param mimetypeFilter mimetype to filter by - directories will always be included * @param modal make the dialog modal */ filepicker:function(title, callback, multiselect, mimetypeFilter, modal) { @@ -207,7 +207,8 @@ var OCdialogs = { self.$filePicker.ocdialog({ closeOnEscape: true, - width: (4/5)*$(document).width(), + // max-width of 600 + width: Math.min((4/5)*$(document).width(), 600), height: 420, modal: modal, buttons: buttonlist, @@ -380,16 +381,23 @@ var OCdialogs = { $replacementDiv.find('.mtime').text(formatDate(replacement.lastModifiedDate)); } var path = original.directory + '/' +original.name; - Files.lazyLoadPreview(path, original.mimetype, function(previewpath){ - $originalDiv.find('.icon').css('background-image','url('+previewpath+')'); - }, 96, 96, original.etag); + var urlSpec = { + file: path, + x: 96, + y: 96, + c: original.etag, + forceIcon: 0 + }; + var previewpath = OC.generateUrl('/core/preview.png?') + $.param(urlSpec); + // Escaping single quotes + previewpath = previewpath.replace(/'/g, "%27") + $originalDiv.find('.icon').css({"background-image": "url('" + previewpath + "')"}); getCroppedPreview(replacement).then( function(path){ $replacementDiv.find('.icon').css('background-image','url(' + path + ')'); }, function(){ - Files.getMimeIcon(replacement.type,function(path){ - $replacementDiv.find('.icon').css('background-image','url(' + path + ')'); - }); + path = OC.MimeType.getIconUrl(replacement.type); + $replacementDiv.find('.icon').css('background-image','url(' + path + ')'); } ); $conflicts.append($conflict); @@ -693,7 +701,7 @@ var OCdialogs = { } $template.octemplate({ dir: '', - name: ' ' // Ugly but works ;) + name: ' ' // Ugly but works ;) }, {escapeFunction: null}).addClass('home svg').prependTo(this.$dirTree); }, /** diff --git a/core/js/placeholder.js b/core/js/placeholder.js index 47cff780d2f..74bb9b1881d 100644 --- a/core/js/placeholder.js +++ b/core/js/placeholder.js @@ -59,7 +59,7 @@ // CSS rules this.css('color', '#fff'); - this.css('font-weight', 'bold'); + this.css('font-weight', 'normal'); this.css('text-align', 'center'); // calculate the height diff --git a/core/js/setup.js b/core/js/setup.js index 95237165b40..cfa11a99c3a 100644 --- a/core/js/setup.js +++ b/core/js/setup.js @@ -9,6 +9,8 @@ $(document).ready(function() { }; $('#selectDbType').buttonset(); + // change links inside an info box back to their default appearance + $('#selectDbType p.info a').button('destroy'); if($('#hasSQLite').val()){ $('#use_other_db').hide(); @@ -57,7 +59,10 @@ $(document).ready(function() { // Disable inputs $(':submit', this).attr('disabled','disabled').val($(':submit', this).data('finishing')); $('input', this).addClass('ui-state-disabled').attr('disabled','disabled'); - $('#selectDbType').buttonset('disable'); + // only disable buttons if they are present + if($('#selectDbType').find('.ui-button').length > 0) { + $('#selectDbType').buttonset('disable'); + } $('.strengthify-wrapper, .tipsy') .css('-ms-filter', '"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"') .css('filter', 'alpha(opacity=30)') diff --git a/core/js/setupchecks.js b/core/js/setupchecks.js index d5bd1c465b2..02d7ef94b7e 100644 --- a/core/js/setupchecks.js +++ b/core/js/setupchecks.js @@ -59,6 +59,16 @@ t('core', 'Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.') ); } + if(!data.isMemcacheConfigured) { + messages.push( + t('core', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="{docLink}">documentation</a>.', {docLink: data.memcacheDocs}) + ); + } + if(!data.isUrandomAvailable) { + messages.push( + t('core', '/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href="{docLink}">documentation</a>.', {docLink: data.securityDocs}) + ); + } } else { messages.push(t('core', 'Error occurred while checking server setup')); } @@ -115,9 +125,9 @@ }; for (var header in securityHeaders) { - if(xhr.getResponseHeader(header) !== securityHeaders[header]) { + if(!xhr.getResponseHeader(header) || xhr.getResponseHeader(header).toLowerCase() !== securityHeaders[header].toLowerCase()) { messages.push( - t('core', 'The "{header}" HTTP header is not configured to equal to "{expected}". This is a potential security risk and we recommend adjusting this setting.', {header: header, expected: securityHeaders[header]}) + t('core', 'The "{header}" HTTP header is not configured to equal to "{expected}". This is a potential security or privacy risk and we recommend adjusting this setting.', {header: header, expected: securityHeaders[header]}) ); } } @@ -144,20 +154,21 @@ if(transportSecurityValidity !== null && transportSecurityValidity.length > 8) { var firstComma = transportSecurityValidity.indexOf(";"); if(firstComma !== -1) { - transportSecurityValidity = transportSecurityValidity.substring(0, firstComma); + transportSecurityValidity = transportSecurityValidity.substring(8, firstComma); } else { transportSecurityValidity = transportSecurityValidity.substring(8); } } - if(isNaN(transportSecurityValidity) || transportSecurityValidity <= 2678399) { + var minimumSeconds = 15768000; + if(isNaN(transportSecurityValidity) || transportSecurityValidity <= (minimumSeconds - 1)) { messages.push( - t('core', 'The "Strict-Transport-Security" HTTP header is not configured to least "2,678,400" seconds. This is a potential security risk and we recommend adjusting this setting.') + t('core', 'The "Strict-Transport-Security" HTTP header is not configured to least "{seconds}" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="{docUrl}">security tips</a>.', {'seconds': minimumSeconds, docUrl: '#admin-tips'}) ); } } else { messages.push( - t('core', 'You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.') + t('core', 'You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href="{docUrl}">security tips</a>.', {docUrl: '#admin-tips'}) ); } } else { diff --git a/core/js/share.js b/core/js/share.js index 8804db12a08..c0bc2c8ab80 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -15,7 +15,7 @@ OC.Share={ * "user@example.com/path/to/owncloud" * "user@anotherexample.com@example.com/path/to/owncloud */ - _REMOTE_OWNER_REGEXP: new RegExp("^([^@]*)@(([^@]*)@)?([^/]*)(.*)?$"), + _REMOTE_OWNER_REGEXP: new RegExp("^([^@]*)@(([^@]*)@)?([^/]*)([/](.*)?)?$"), /** * @deprecated use OC.Share.currentShares instead @@ -183,21 +183,22 @@ OC.Share={ } }, /** - * Format remote share owner to make it more readable + * Format a remote address * - * @param {String} owner full remote share owner name - * @return {String} HTML code for the owner display + * @param {String} remoteAddress full remote share + * @return {String} HTML code to display */ - _formatSharedByOwner: function(owner) { - var parts = this._REMOTE_OWNER_REGEXP.exec(owner); + _formatRemoteShare: function(remoteAddress) { + var parts = this._REMOTE_OWNER_REGEXP.exec(remoteAddress); if (!parts) { // display as is, most likely to be a simple owner name - return escapeHTML(owner); + return escapeHTML(remoteAddress); } var userName = parts[1]; var userDomain = parts[3]; var server = parts[4]; + var dir = parts[6]; var tooltip = userName; if (userDomain) { tooltip += '@' + userDomain; @@ -209,7 +210,7 @@ OC.Share={ tooltip += '@' + server; } - var html = '<span class="remoteOwner" title="' + escapeHTML(tooltip) + '">'; + var html = '<span class="remoteAddress" title="' + escapeHTML(tooltip) + '">'; html += '<span class="username">' + escapeHTML(userName) + '</span>'; if (userDomain) { html += '<span class="userDomain">@' + escapeHTML(userDomain) + '</span>'; @@ -218,6 +219,20 @@ OC.Share={ return html; }, /** + * Loop over all recipients in the list and format them using + * all kind of fancy magic. + * + * @param {String[]} recipients array of all the recipients + * @return {String[]} modified list of recipients + */ + _formatShareList: function(recipients) { + var _parent = this; + return $.map(recipients, function(recipient) { + recipient = _parent._formatRemoteShare(recipient); + return recipient; + }); + }, + /** * Marks/unmarks a given file as shared by changing its action icon * and folder icon. * @@ -255,14 +270,14 @@ OC.Share={ message = t('core', 'Shared'); // even if reshared, only show "Shared by" if (owner) { - message = this._formatSharedByOwner(owner); + message = this._formatRemoteShare(owner); } else if (recipients) { - message = t('core', 'Shared with {recipients}', {recipients: recipients}); + message = t('core', 'Shared with {recipients}', {recipients: this._formatShareList(recipients.split(", ")).join(", ")}, 0, {escape: false}); } action.html(' <span>' + message + '</span>').prepend(img); - if (owner) { - action.find('.remoteOwner').tipsy({gravity: 's'}); + if (owner || recipients) { + action.find('.remoteAddress').tipsy({gravity: 's'}); } } else { @@ -356,7 +371,7 @@ OC.Share={ var data = OC.Share.loadItem(itemType, itemSource); var dropDownEl; var html = '<div id="dropdown" class="drop shareDropDown" data-item-type="'+itemType+'" data-item-source="'+itemSource+'">'; - if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) { + if (data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined && data.reshare.uid_owner !== OC.currentUser) { html += '<span class="reshare">'; if (oc_config.enable_avatars === true) { html += '<div class="avatar"></div> '; @@ -391,8 +406,18 @@ OC.Share={ } }); + var sharePlaceholder = t('core', 'Share with users or groups …'); + if(oc_appconfig.core.remoteShareAllowed) { + sharePlaceholder = t('core', 'Share with users, groups or remote users …'); + } + html += '<label for="shareWith" class="hidden-visually">'+t('core', 'Share')+'</label>'; - html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Share with user or group …')+'" />'; + html += '<input id="shareWith" type="text" placeholder="' + sharePlaceholder + '" />'; + if(oc_appconfig.core.remoteShareAllowed) { + var federatedCloudSharingDoc = '<a target="_blank" class="icon-info svg shareWithRemoteInfo" href="{docLink}" ' + + 'title="' + t('core', 'Share with people on other ownClouds using the syntax username@example.com/owncloud') + '"></a>'; + html += federatedCloudSharingDoc.replace('{docLink}', oc_appconfig.core.federatedCloudShareDoc); + } html += '<span class="shareWithLoading icon-loading-small hidden"></span>'; html += '<ul id="shareWithList">'; html += '</ul>'; @@ -443,6 +468,11 @@ OC.Share={ dropDownEl = $(html); dropDownEl = dropDownEl.appendTo(appendTo); + // trigger remote share info tooltip + if(oc_appconfig.core.remoteShareAllowed) { + $('.shareWithRemoteInfo').tipsy({gravity: 'e'}); + } + //Get owner avatars if (oc_config.enable_avatars === true && data !== false && data.reshare !== false && data.reshare.uid_owner !== undefined) { dropDownEl.find(".avatar").avatar(data.reshare.uid_owner, 32); @@ -476,7 +506,7 @@ OC.Share={ $('#shareWith').autocomplete({minLength: 2, delay: 750, source: function(search, response) { var $loading = $('#dropdown .shareWithLoading'); $loading.removeClass('hidden'); - $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term.trim(), itemShares: OC.Share.itemShares, itemType: itemType }, function(result) { + $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWith', search: search.term.trim(), limit: 200, itemShares: OC.Share.itemShares, itemType: itemType }, function(result) { $loading.addClass('hidden'); if (result.status == 'success' && result.data.length > 0) { $( "#shareWith" ).autocomplete( "option", "autoFocus", true ); @@ -484,6 +514,10 @@ OC.Share={ } else { response(); } + }).fail(function(){ + $('#dropdown').find('.shareWithLoading').addClass('hidden'); + OC.Notification.show(t('core', 'An error occured. Please try again')); + window.setTimeout(OC.Notification.hide, 5000); }); }, focus: function(event, focused) { @@ -590,7 +624,7 @@ OC.Share={ dropDownEl.appendTo(appendTo); } dropDownEl.attr('data-item-source-name', filename); - $('#dropdown').show('blind', function() { + $('#dropdown').slideDown(OC.menuSpeed, function() { OC.Share.droppedDown = true; }); if ($('html').hasClass('lte9')){ @@ -600,7 +634,7 @@ OC.Share={ }, hideDropDown:function(callback) { OC.Share.currentShares = null; - $('#dropdown').hide('blind', function() { + $('#dropdown').slideUp(OC.menuSpeed, function() { OC.Share.droppedDown = false; $('#dropdown').remove(); if (typeof FileActions !== 'undefined') { @@ -674,23 +708,23 @@ OC.Share={ html += '<label><input type="checkbox" name="mailNotification" class="mailNotification" ' + checked + ' />'+t('core', 'notify by email')+'</label> '; } if (oc_appconfig.core.resharingAllowed && (possiblePermissions & OC.PERMISSION_SHARE)) { - html += '<input id="canShare-'+escapeHTML(shareWith)+'" type="checkbox" name="share" class="permissions" '+shareChecked+' data-permissions="'+OC.PERMISSION_SHARE+'" /><label for="canShare-'+escapeHTML(shareWith)+'">'+t('core', 'can share')+'</label>'; + html += '<label><input id="canShare-'+escapeHTML(shareWith)+'" type="checkbox" name="share" class="permissions" '+shareChecked+' data-permissions="'+OC.PERMISSION_SHARE+'" />'+t('core', 'can share')+'</label>'; } if (possiblePermissions & OC.PERMISSION_CREATE || possiblePermissions & OC.PERMISSION_UPDATE || possiblePermissions & OC.PERMISSION_DELETE) { - html += '<input id="canEdit-'+escapeHTML(shareWith)+'" type="checkbox" name="edit" class="permissions" '+editChecked+' /><label for="canEdit-'+escapeHTML(shareWith)+'">'+t('core', 'can edit')+'</label>'; + html += '<label><input id="canEdit-'+escapeHTML(shareWith)+'" type="checkbox" name="edit" class="permissions" '+editChecked+' />'+t('core', 'can edit')+'</label>'; } if (shareType !== OC.Share.SHARE_TYPE_REMOTE) { showCrudsButton = '<a href="#" class="showCruds"><img class="svg" alt="'+t('core', 'access control')+'" src="'+OC.imagePath('core', 'actions/triangle-s')+'"/></a>'; } html += '<div class="cruds" style="display:none;">'; if (possiblePermissions & OC.PERMISSION_CREATE) { - html += '<input id="canCreate-' + escapeHTML(shareWith) + '" type="checkbox" name="create" class="permissions" ' + createChecked + ' data-permissions="' + OC.PERMISSION_CREATE + '"/><label for="canCreate-' + escapeHTML(shareWith) + '">' + t('core', 'create') + '</label>'; + html += '<label><input id="canCreate-' + escapeHTML(shareWith) + '" type="checkbox" name="create" class="permissions" ' + createChecked + ' data-permissions="' + OC.PERMISSION_CREATE + '"/>' + t('core', 'create') + '</label>'; } if (possiblePermissions & OC.PERMISSION_UPDATE) { - html += '<input id="canUpdate-' + escapeHTML(shareWith) + '" type="checkbox" name="update" class="permissions" ' + updateChecked + ' data-permissions="' + OC.PERMISSION_UPDATE + '"/><label for="canUpdate-' + escapeHTML(shareWith) + '">' + t('core', 'change') + '</label>'; + html += '<label><input id="canUpdate-' + escapeHTML(shareWith) + '" type="checkbox" name="update" class="permissions" ' + updateChecked + ' data-permissions="' + OC.PERMISSION_UPDATE + '"/>' + t('core', 'change') + '</label>'; } if (possiblePermissions & OC.PERMISSION_DELETE) { - html += '<input id="canDelete-' + escapeHTML(shareWith) + '" type="checkbox" name="delete" class="permissions" ' + deleteChecked + ' data-permissions="' + OC.PERMISSION_DELETE + '"/><label for="canDelete-' + escapeHTML(shareWith) + '">' + t('core', 'delete') + '</label>'; + html += '<label><input id="canDelete-' + escapeHTML(shareWith) + '" type="checkbox" name="delete" class="permissions" ' + deleteChecked + ' data-permissions="' + OC.PERMISSION_DELETE + '"/>' + t('core', 'delete') + '</label>'; } html += '</div>'; html += '</li>'; @@ -753,14 +787,14 @@ OC.Share={ } } $('#linkText').val(link); - $('#linkText').show('blind'); + $('#linkText').slideDown(OC.menuSpeed); $('#linkText').css('display','block'); if (oc_appconfig.core.enforcePasswordForPublicLink === false || password === null) { $('#showPassword').show(); $('#showPassword+label').show(); } if (password != null) { - $('#linkPass').show('blind'); + $('#linkPass').slideDown(OC.menuSpeed); $('#showPassword').attr('checked', true); $('#linkPassText').attr('placeholder', '**********'); } @@ -770,11 +804,11 @@ OC.Share={ $('#allowPublicUploadWrapper').show(); }, hideLink:function() { - $('#linkText').hide('blind'); + $('#linkText').slideUp(OC.menuSpeed); $('#defaultExpireMessage').hide(); $('#showPassword').hide(); $('#showPassword+label').hide(); - $('#linkPass').hide('blind'); + $('#linkPass').slideUp(OC.menuSpeed); $('#emailPrivateLink #email').hide(); $('#emailPrivateLink #emailButton').hide(); $('#allowPublicUploadWrapper').hide(); @@ -805,7 +839,7 @@ OC.Share={ } $('#expirationCheckbox').attr('checked', true); $('#expirationDate').val(date); - $('#expirationDate').show('blind'); + $('#expirationDate').slideDown(OC.menuSpeed); $('#expirationDate').css('display','block'); $('#expirationDate').datepicker({ dateFormat : 'dd-mm-yy' @@ -817,9 +851,27 @@ OC.Share={ datePickerOptions.maxDate = new Date(shareTime + oc_appconfig.core.defaultExpireDate * 24 * 3600 * 1000); } if(oc_appconfig.core.defaultExpireDateEnabled) { - $('#defaultExpireMessage').show('blind'); + $('#defaultExpireMessage').slideDown(OC.menuSpeed); } $.datepicker.setDefaults(datePickerOptions); + }, + /** + * Get the default Expire date + * + * @return {String} The expire date + */ + getDefaultExpirationDate:function() { + var expireDateString = ''; + if (oc_appconfig.core.defaultExpireDateEnabled) { + var date = new Date().getTime(); + var expireAfterMs = oc_appconfig.core.defaultExpireDate * 24 * 60 * 60 * 1000; + var expireDate = new Date(date + expireAfterMs); + var month = expireDate.getMonth() + 1; + var year = expireDate.getFullYear(); + var day = expireDate.getDate(); + expireDateString = year + "-" + month + '-' + day + ' 00:00:00'; + } + return expireDateString; } }; @@ -905,7 +957,7 @@ $(document).ready(function() { $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); if (typeof OC.Share.statuses[itemSource] === 'undefined') { - $('#expiration').hide('blind'); + $('#expiration').slideUp(OC.menuSpeed); } }); @@ -963,18 +1015,19 @@ $(document).ready(function() { } if (this.checked) { + // Reset password placeholder + $('#linkPassText').attr('placeholder', t('core', 'Choose a password for the public link')); + // Reset link + $('#linkText').val(''); + $('#showPassword').prop('checked', false); + $('#linkPass').hide(); + $('#sharingDialogAllowPublicUpload').prop('checked', false); + $('#expirationCheckbox').prop('checked', false); + $('#expirationDate').hide(); var expireDateString = ''; - if (oc_appconfig.core.defaultExpireDateEnabled) { - var date = new Date().getTime(); - var expireAfterMs = oc_appconfig.core.defaultExpireDate * 24 * 60 * 60 * 1000; - var expireDate = new Date(date + expireAfterMs); - var month = expireDate.getMonth() + 1; - var year = expireDate.getFullYear(); - var day = expireDate.getDate(); - expireDateString = year + "-" + month + '-' + day + ' 00:00:00'; - } // Create a link if (oc_appconfig.core.enforcePasswordForPublicLink === false) { + expireDateString = OC.Share.getDefaultExpirationDate(); $loading.removeClass('hidden'); $button.addClass('hidden'); $button.prop('disabled', true); @@ -988,7 +1041,12 @@ $(document).ready(function() { OC.Share.updateIcon(itemType, itemSource); }); } else { - $('#linkPass').toggle('blind'); + $('#linkPass').slideToggle(OC.menuSpeed); + // TODO drop with IE8 drop + if($('html').hasClass('ie8')) { + $('#linkPassText').attr('placeholder', null); + $('#linkPassText').val(''); + } $('#linkPassText').focus(); } if (expireDateString !== '') { @@ -997,7 +1055,7 @@ $(document).ready(function() { } else { // Delete private link OC.Share.hideLink(); - $('#expiration').hide('blind'); + $('#expiration').slideUp(OC.menuSpeed); if ($('#linkText').val() !== '') { $loading.removeClass('hidden'); $button.addClass('hidden'); @@ -1010,7 +1068,7 @@ $(document).ready(function() { $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); OC.Share.updateIcon(itemType, itemSource); if (typeof OC.Share.statuses[itemSource] === 'undefined') { - $('#expiration').hide('blind'); + $('#expiration').slideUp(OC.menuSpeed); } }); } @@ -1063,7 +1121,7 @@ $(document).ready(function() { }); $(document).on('click', '#dropdown #showPassword', function() { - $('#linkPass').toggle('blind'); + $('#linkPass').slideToggle(OC.menuSpeed); if (!$('#showPassword').is(':checked') ) { var itemType = $('#dropdown').data('item-type'); var itemSource = $('#dropdown').data('item-source'); @@ -1092,7 +1150,6 @@ $(document).ready(function() { $(document).on('focusout keyup', '#dropdown #linkPassText', function(event) { var linkPassText = $('#linkPassText'); if ( linkPassText.val() != '' && (event.type == 'focusout' || event.keyCode == 13) ) { - var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked'); var dropDown = $('#dropdown'); var itemType = dropDown.data('item-type'); @@ -1108,8 +1165,10 @@ $(document).ready(function() { permissions = OC.PERMISSION_READ; } + var expireDateString = OC.Share.getDefaultExpirationDate(); + $loading.removeClass('hidden'); - OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, $('#linkPassText').val(), permissions, itemSourceName, function(data) { + OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, $('#linkPassText').val(), permissions, itemSourceName, expireDateString, function(data) { $loading.addClass('hidden'); linkPassText.val(''); linkPassText.attr('placeholder', t('core', 'Password protected')); @@ -1118,8 +1177,12 @@ $(document).ready(function() { OC.Share.showLink(data.token, "password set", itemSource); OC.Share.updateIcon(itemType, itemSource); } + $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); }); + if (expireDateString !== '') { + OC.Share.showExpirationDate(expireDateString); + } } }); @@ -1133,9 +1196,9 @@ $(document).ready(function() { if (!result || result.status !== 'success') { OC.dialogs.alert(t('core', 'Error unsetting expiration date'), t('core', 'Error')); } - $('#expirationDate').hide('blind'); + $('#expirationDate').slideUp(OC.menuSpeed); if (oc_appconfig.core.defaultExpireDateEnforced === false) { - $('#defaultExpireMessage').show('blind'); + $('#defaultExpireMessage').slideDown(OC.menuSpeed); } }); } @@ -1156,12 +1219,12 @@ $(document).ready(function() { } else { expirationDateField.attr('original-title', result.data.message); } - expirationDateField.tipsy({gravity: 'n', fade: true}); + expirationDateField.tipsy({gravity: 'n'}); expirationDateField.tipsy('show'); expirationDateField.addClass('error'); } else { if (oc_appconfig.core.defaultExpireDateEnforced === 'no') { - $('#defaultExpireMessage'). hide('blind'); + $('#defaultExpireMessage').slideUp(OC.menuSpeed); } } }); @@ -1189,10 +1252,10 @@ $(document).ready(function() { $('#email').prop('disabled', false); $('#emailButton').prop('disabled', false); if (result && result.status == 'success') { - $('#email').css('font-weight', 'bold'); - $('#email').animate({ fontWeight: 'normal' }, 2000, function() { - $(this).val(''); - }).val(t('core','Email sent')); + $('#email').css('font-weight', 'bold').val(t('core','Email sent')); + setTimeout(function() { + $('#email').css('font-weight', 'normal').val(''); + }, 2000); } else { OC.dialogs.alert(result.data.message, t('core', 'Error while sharing')); } diff --git a/core/js/tests/lib/sinon-1.15.4.js b/core/js/tests/lib/sinon-1.15.4.js new file mode 100644 index 00000000000..20bc9e208d7 --- /dev/null +++ b/core/js/tests/lib/sinon-1.15.4.js @@ -0,0 +1,5949 @@ +/** + * Sinon.JS 1.15.4, 2015/06/27 + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS + * + * (The BSD License) + * + * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * * Neither the name of Christian Johansen nor the names of his contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +(function (root, factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define('sinon', [], function () { + return (root.sinon = factory()); + }); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.sinon = factory(); + } +}(this, function () { + 'use strict'; + var samsam, formatio, lolex; + (function () { + function define(mod, deps, fn) { + if (mod == "samsam") { + samsam = deps(); + } else if (typeof deps === "function" && mod.length === 0) { + lolex = deps(); + } else if (typeof fn === "function") { + formatio = fn(samsam); + } + } + define.amd = {}; +((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) || + (typeof module === "object" && + function (m) { module.exports = m(); }) || // Node + function (m) { this.samsam = m(); } // Browser globals +)(function () { + var o = Object.prototype; + var div = typeof document !== "undefined" && document.createElement("div"); + + function isNaN(value) { + // Unlike global isNaN, this avoids type coercion + // typeof check avoids IE host object issues, hat tip to + // lodash + var val = value; // JsLint thinks value !== value is "weird" + return typeof value === "number" && value !== val; + } + + function getClass(value) { + // Returns the internal [[Class]] by calling Object.prototype.toString + // with the provided value as this. Return value is a string, naming the + // internal class, e.g. "Array" + return o.toString.call(value).split(/[ \]]/)[1]; + } + + /** + * @name samsam.isArguments + * @param Object object + * + * Returns ``true`` if ``object`` is an ``arguments`` object, + * ``false`` otherwise. + */ + function isArguments(object) { + if (getClass(object) === 'Arguments') { return true; } + if (typeof object !== "object" || typeof object.length !== "number" || + getClass(object) === "Array") { + return false; + } + if (typeof object.callee == "function") { return true; } + try { + object[object.length] = 6; + delete object[object.length]; + } catch (e) { + return true; + } + return false; + } + + /** + * @name samsam.isElement + * @param Object object + * + * Returns ``true`` if ``object`` is a DOM element node. Unlike + * Underscore.js/lodash, this function will return ``false`` if ``object`` + * is an *element-like* object, i.e. a regular object with a ``nodeType`` + * property that holds the value ``1``. + */ + function isElement(object) { + if (!object || object.nodeType !== 1 || !div) { return false; } + try { + object.appendChild(div); + object.removeChild(div); + } catch (e) { + return false; + } + return true; + } + + /** + * @name samsam.keys + * @param Object object + * + * Return an array of own property names. + */ + function keys(object) { + var ks = [], prop; + for (prop in object) { + if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); } + } + return ks; + } + + /** + * @name samsam.isDate + * @param Object value + * + * Returns true if the object is a ``Date``, or *date-like*. Duck typing + * of date objects work by checking that the object has a ``getTime`` + * function whose return value equals the return value from the object's + * ``valueOf``. + */ + function isDate(value) { + return typeof value.getTime == "function" && + value.getTime() == value.valueOf(); + } + + /** + * @name samsam.isNegZero + * @param Object value + * + * Returns ``true`` if ``value`` is ``-0``. + */ + function isNegZero(value) { + return value === 0 && 1 / value === -Infinity; + } + + /** + * @name samsam.equal + * @param Object obj1 + * @param Object obj2 + * + * Returns ``true`` if two objects are strictly equal. Compared to + * ``===`` there are two exceptions: + * + * - NaN is considered equal to NaN + * - -0 and +0 are not considered equal + */ + function identical(obj1, obj2) { + if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) { + return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2); + } + } + + + /** + * @name samsam.deepEqual + * @param Object obj1 + * @param Object obj2 + * + * Deep equal comparison. Two values are "deep equal" if: + * + * - They are equal, according to samsam.identical + * - They are both date objects representing the same time + * - They are both arrays containing elements that are all deepEqual + * - They are objects with the same set of properties, and each property + * in ``obj1`` is deepEqual to the corresponding property in ``obj2`` + * + * Supports cyclic objects. + */ + function deepEqualCyclic(obj1, obj2) { + + // used for cyclic comparison + // contain already visited objects + var objects1 = [], + objects2 = [], + // contain pathes (position in the object structure) + // of the already visited objects + // indexes same as in objects arrays + paths1 = [], + paths2 = [], + // contains combinations of already compared objects + // in the manner: { "$1['ref']$2['ref']": true } + compared = {}; + + /** + * used to check, if the value of a property is an object + * (cyclic logic is only needed for objects) + * only needed for cyclic logic + */ + function isObject(value) { + + if (typeof value === 'object' && value !== null && + !(value instanceof Boolean) && + !(value instanceof Date) && + !(value instanceof Number) && + !(value instanceof RegExp) && + !(value instanceof String)) { + + return true; + } + + return false; + } + + /** + * returns the index of the given object in the + * given objects array, -1 if not contained + * only needed for cyclic logic + */ + function getIndex(objects, obj) { + + var i; + for (i = 0; i < objects.length; i++) { + if (objects[i] === obj) { + return i; + } + } + + return -1; + } + + // does the recursion for the deep equal check + return (function deepEqual(obj1, obj2, path1, path2) { + var type1 = typeof obj1; + var type2 = typeof obj2; + + // == null also matches undefined + if (obj1 === obj2 || + isNaN(obj1) || isNaN(obj2) || + obj1 == null || obj2 == null || + type1 !== "object" || type2 !== "object") { + + return identical(obj1, obj2); + } + + // Elements are only equal if identical(expected, actual) + if (isElement(obj1) || isElement(obj2)) { return false; } + + var isDate1 = isDate(obj1), isDate2 = isDate(obj2); + if (isDate1 || isDate2) { + if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) { + return false; + } + } + + if (obj1 instanceof RegExp && obj2 instanceof RegExp) { + if (obj1.toString() !== obj2.toString()) { return false; } + } + + var class1 = getClass(obj1); + var class2 = getClass(obj2); + var keys1 = keys(obj1); + var keys2 = keys(obj2); + + if (isArguments(obj1) || isArguments(obj2)) { + if (obj1.length !== obj2.length) { return false; } + } else { + if (type1 !== type2 || class1 !== class2 || + keys1.length !== keys2.length) { + return false; + } + } + + var key, i, l, + // following vars are used for the cyclic logic + value1, value2, + isObject1, isObject2, + index1, index2, + newPath1, newPath2; + + for (i = 0, l = keys1.length; i < l; i++) { + key = keys1[i]; + if (!o.hasOwnProperty.call(obj2, key)) { + return false; + } + + // Start of the cyclic logic + + value1 = obj1[key]; + value2 = obj2[key]; + + isObject1 = isObject(value1); + isObject2 = isObject(value2); + + // determine, if the objects were already visited + // (it's faster to check for isObject first, than to + // get -1 from getIndex for non objects) + index1 = isObject1 ? getIndex(objects1, value1) : -1; + index2 = isObject2 ? getIndex(objects2, value2) : -1; + + // determine the new pathes of the objects + // - for non cyclic objects the current path will be extended + // by current property name + // - for cyclic objects the stored path is taken + newPath1 = index1 !== -1 + ? paths1[index1] + : path1 + '[' + JSON.stringify(key) + ']'; + newPath2 = index2 !== -1 + ? paths2[index2] + : path2 + '[' + JSON.stringify(key) + ']'; + + // stop recursion if current objects are already compared + if (compared[newPath1 + newPath2]) { + return true; + } + + // remember the current objects and their pathes + if (index1 === -1 && isObject1) { + objects1.push(value1); + paths1.push(newPath1); + } + if (index2 === -1 && isObject2) { + objects2.push(value2); + paths2.push(newPath2); + } + + // remember that the current objects are already compared + if (isObject1 && isObject2) { + compared[newPath1 + newPath2] = true; + } + + // End of cyclic logic + + // neither value1 nor value2 is a cycle + // continue with next level + if (!deepEqual(value1, value2, newPath1, newPath2)) { + return false; + } + } + + return true; + + }(obj1, obj2, '$1', '$2')); + } + + var match; + + function arrayContains(array, subset) { + if (subset.length === 0) { return true; } + var i, l, j, k; + for (i = 0, l = array.length; i < l; ++i) { + if (match(array[i], subset[0])) { + for (j = 0, k = subset.length; j < k; ++j) { + if (!match(array[i + j], subset[j])) { return false; } + } + return true; + } + } + return false; + } + + /** + * @name samsam.match + * @param Object object + * @param Object matcher + * + * Compare arbitrary value ``object`` with matcher. + */ + match = function match(object, matcher) { + if (matcher && typeof matcher.test === "function") { + return matcher.test(object); + } + + if (typeof matcher === "function") { + return matcher(object) === true; + } + + if (typeof matcher === "string") { + matcher = matcher.toLowerCase(); + var notNull = typeof object === "string" || !!object; + return notNull && + (String(object)).toLowerCase().indexOf(matcher) >= 0; + } + + if (typeof matcher === "number") { + return matcher === object; + } + + if (typeof matcher === "boolean") { + return matcher === object; + } + + if (typeof(matcher) === "undefined") { + return typeof(object) === "undefined"; + } + + if (matcher === null) { + return object === null; + } + + if (getClass(object) === "Array" && getClass(matcher) === "Array") { + return arrayContains(object, matcher); + } + + if (matcher && typeof matcher === "object") { + if (matcher === object) { + return true; + } + var prop; + for (prop in matcher) { + var value = object[prop]; + if (typeof value === "undefined" && + typeof object.getAttribute === "function") { + value = object.getAttribute(prop); + } + if (matcher[prop] === null || typeof matcher[prop] === 'undefined') { + if (value !== matcher[prop]) { + return false; + } + } else if (typeof value === "undefined" || !match(value, matcher[prop])) { + return false; + } + } + return true; + } + + throw new Error("Matcher was not a string, a number, a " + + "function, a boolean or an object"); + }; + + return { + isArguments: isArguments, + isElement: isElement, + isDate: isDate, + isNegZero: isNegZero, + identical: identical, + deepEqual: deepEqualCyclic, + match: match, + keys: keys + }; +}); +((typeof define === "function" && define.amd && function (m) { + define("formatio", ["samsam"], m); +}) || (typeof module === "object" && function (m) { + module.exports = m(require("samsam")); +}) || function (m) { this.formatio = m(this.samsam); } +)(function (samsam) { + + var formatio = { + excludeConstructors: ["Object", /^.$/], + quoteStrings: true, + limitChildrenCount: 0 + }; + + var hasOwn = Object.prototype.hasOwnProperty; + + var specialObjects = []; + if (typeof global !== "undefined") { + specialObjects.push({ object: global, value: "[object global]" }); + } + if (typeof document !== "undefined") { + specialObjects.push({ + object: document, + value: "[object HTMLDocument]" + }); + } + if (typeof window !== "undefined") { + specialObjects.push({ object: window, value: "[object Window]" }); + } + + function functionName(func) { + if (!func) { return ""; } + if (func.displayName) { return func.displayName; } + if (func.name) { return func.name; } + var matches = func.toString().match(/function\s+([^\(]+)/m); + return (matches && matches[1]) || ""; + } + + function constructorName(f, object) { + var name = functionName(object && object.constructor); + var excludes = f.excludeConstructors || + formatio.excludeConstructors || []; + + var i, l; + for (i = 0, l = excludes.length; i < l; ++i) { + if (typeof excludes[i] === "string" && excludes[i] === name) { + return ""; + } else if (excludes[i].test && excludes[i].test(name)) { + return ""; + } + } + + return name; + } + + function isCircular(object, objects) { + if (typeof object !== "object") { return false; } + var i, l; + for (i = 0, l = objects.length; i < l; ++i) { + if (objects[i] === object) { return true; } + } + return false; + } + + function ascii(f, object, processed, indent) { + if (typeof object === "string") { + var qs = f.quoteStrings; + var quote = typeof qs !== "boolean" || qs; + return processed || quote ? '"' + object + '"' : object; + } + + if (typeof object === "function" && !(object instanceof RegExp)) { + return ascii.func(object); + } + + processed = processed || []; + + if (isCircular(object, processed)) { return "[Circular]"; } + + if (Object.prototype.toString.call(object) === "[object Array]") { + return ascii.array.call(f, object, processed); + } + + if (!object) { return String((1/object) === -Infinity ? "-0" : object); } + if (samsam.isElement(object)) { return ascii.element(object); } + + if (typeof object.toString === "function" && + object.toString !== Object.prototype.toString) { + return object.toString(); + } + + var i, l; + for (i = 0, l = specialObjects.length; i < l; i++) { + if (object === specialObjects[i].object) { + return specialObjects[i].value; + } + } + + return ascii.object.call(f, object, processed, indent); + } + + ascii.func = function (func) { + return "function " + functionName(func) + "() {}"; + }; + + ascii.array = function (array, processed) { + processed = processed || []; + processed.push(array); + var pieces = []; + var i, l; + l = (this.limitChildrenCount > 0) ? + Math.min(this.limitChildrenCount, array.length) : array.length; + + for (i = 0; i < l; ++i) { + pieces.push(ascii(this, array[i], processed)); + } + + if(l < array.length) + pieces.push("[... " + (array.length - l) + " more elements]"); + + return "[" + pieces.join(", ") + "]"; + }; + + ascii.object = function (object, processed, indent) { + processed = processed || []; + processed.push(object); + indent = indent || 0; + var pieces = [], properties = samsam.keys(object).sort(); + var length = 3; + var prop, str, obj, i, k, l; + l = (this.limitChildrenCount > 0) ? + Math.min(this.limitChildrenCount, properties.length) : properties.length; + + for (i = 0; i < l; ++i) { + prop = properties[i]; + obj = object[prop]; + + if (isCircular(obj, processed)) { + str = "[Circular]"; + } else { + str = ascii(this, obj, processed, indent + 2); + } + + str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; + length += str.length; + pieces.push(str); + } + + var cons = constructorName(this, object); + var prefix = cons ? "[" + cons + "] " : ""; + var is = ""; + for (i = 0, k = indent; i < k; ++i) { is += " "; } + + if(l < properties.length) + pieces.push("[... " + (properties.length - l) + " more elements]"); + + if (length + indent > 80) { + return prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + + is + "}"; + } + return prefix + "{ " + pieces.join(", ") + " }"; + }; + + ascii.element = function (element) { + var tagName = element.tagName.toLowerCase(); + var attrs = element.attributes, attr, pairs = [], attrName, i, l, val; + + for (i = 0, l = attrs.length; i < l; ++i) { + attr = attrs.item(i); + attrName = attr.nodeName.toLowerCase().replace("html:", ""); + val = attr.nodeValue; + if (attrName !== "contenteditable" || val !== "inherit") { + if (!!val) { pairs.push(attrName + "=\"" + val + "\""); } + } + } + + var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); + var content = element.innerHTML; + + if (content.length > 20) { + content = content.substr(0, 20) + "[...]"; + } + + var res = formatted + pairs.join(" ") + ">" + content + + "</" + tagName + ">"; + + return res.replace(/ contentEditable="inherit"/, ""); + }; + + function Formatio(options) { + for (var opt in options) { + this[opt] = options[opt]; + } + } + + Formatio.prototype = { + functionName: functionName, + + configure: function (options) { + return new Formatio(options); + }, + + constructorName: function (object) { + return constructorName(this, object); + }, + + ascii: function (object, processed, indent) { + return ascii(this, object, processed, indent); + } + }; + + return Formatio.prototype; +}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ +(function (global){ +/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ +/*global global*/ +/** + * @author Christian Johansen (christian@cjohansen.no) and contributors + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ + +// node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref() +// browsers, a number. +// see https://github.com/cjohansen/Sinon.JS/pull/436 +var timeoutResult = setTimeout(function() {}, 0); +var addTimerReturnsObject = typeof timeoutResult === "object"; +clearTimeout(timeoutResult); + +var NativeDate = Date; +var id = 1; + +/** + * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into + * number of milliseconds. This is used to support human-readable strings passed + * to clock.tick() + */ +function parseTime(str) { + if (!str) { + return 0; + } + + var strings = str.split(":"); + var l = strings.length, i = l; + var ms = 0, parsed; + + if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { + throw new Error("tick only understands numbers and 'h:m:s'"); + } + + while (i--) { + parsed = parseInt(strings[i], 10); + + if (parsed >= 60) { + throw new Error("Invalid time " + str); + } + + ms += parsed * Math.pow(60, (l - i - 1)); + } + + return ms * 1000; +} + +/** + * Used to grok the `now` parameter to createClock. + */ +function getEpoch(epoch) { + if (!epoch) { return 0; } + if (typeof epoch.getTime === "function") { return epoch.getTime(); } + if (typeof epoch === "number") { return epoch; } + throw new TypeError("now should be milliseconds since UNIX epoch"); +} + +function inRange(from, to, timer) { + return timer && timer.callAt >= from && timer.callAt <= to; +} + +function mirrorDateProperties(target, source) { + if (source.now) { + target.now = function now() { + return target.clock.now; + }; + } else { + delete target.now; + } + + if (source.toSource) { + target.toSource = function toSource() { + return source.toSource(); + }; + } else { + delete target.toSource; + } + + target.toString = function toString() { + return source.toString(); + }; + + target.prototype = source.prototype; + target.parse = source.parse; + target.UTC = source.UTC; + target.prototype.toUTCString = source.prototype.toUTCString; + + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + return target; +} + +function createDate() { + function ClockDate(year, month, date, hour, minute, second, ms) { + // Defensive and verbose to avoid potential harm in passing + // explicit undefined when user does not pass argument + switch (arguments.length) { + case 0: + return new NativeDate(ClockDate.clock.now); + case 1: + return new NativeDate(year); + case 2: + return new NativeDate(year, month); + case 3: + return new NativeDate(year, month, date); + case 4: + return new NativeDate(year, month, date, hour); + case 5: + return new NativeDate(year, month, date, hour, minute); + case 6: + return new NativeDate(year, month, date, hour, minute, second); + default: + return new NativeDate(year, month, date, hour, minute, second, ms); + } + } + + return mirrorDateProperties(ClockDate, NativeDate); +} + +function addTimer(clock, timer) { + if (typeof timer.func === "undefined") { + throw new Error("Callback must be provided to timer calls"); + } + + if (!clock.timers) { + clock.timers = {}; + } + + timer.id = id++; + timer.createdAt = clock.now; + timer.callAt = clock.now + (timer.delay || 0); + + clock.timers[timer.id] = timer; + + if (addTimerReturnsObject) { + return { + id: timer.id, + ref: function() {}, + unref: function() {} + }; + } + else { + return timer.id; + } +} + +function firstTimerInRange(clock, from, to) { + var timers = clock.timers, timer = null; + + for (var id in timers) { + if (!inRange(from, to, timers[id])) { + continue; + } + + if (!timer || ~compareTimers(timer, timers[id])) { + timer = timers[id]; + } + } + + return timer; +} + +function compareTimers(a, b) { + // Sort first by absolute timing + if (a.callAt < b.callAt) { + return -1; + } + if (a.callAt > b.callAt) { + return 1; + } + + // Sort next by immediate, immediate timers take precedence + if (a.immediate && !b.immediate) { + return -1; + } + if (!a.immediate && b.immediate) { + return 1; + } + + // Sort next by creation time, earlier-created timers take precedence + if (a.createdAt < b.createdAt) { + return -1; + } + if (a.createdAt > b.createdAt) { + return 1; + } + + // Sort next by id, lower-id timers take precedence + if (a.id < b.id) { + return -1; + } + if (a.id > b.id) { + return 1; + } + + // As timer ids are unique, no fallback `0` is necessary +} + +function callTimer(clock, timer) { + if (typeof timer.interval == "number") { + clock.timers[timer.id].callAt += timer.interval; + } else { + delete clock.timers[timer.id]; + } + + try { + if (typeof timer.func == "function") { + timer.func.apply(null, timer.args); + } else { + eval(timer.func); + } + } catch (e) { + var exception = e; + } + + if (!clock.timers[timer.id]) { + if (exception) { + throw exception; + } + return; + } + + if (exception) { + throw exception; + } +} + +function uninstall(clock, target) { + var method; + + for (var i = 0, l = clock.methods.length; i < l; i++) { + method = clock.methods[i]; + + if (target[method].hadOwnProperty) { + target[method] = clock["_" + method]; + } else { + try { + delete target[method]; + } catch (e) {} + } + } + + // Prevent multiple executions which will completely remove these props + clock.methods = []; +} + +function hijackMethod(target, method, clock) { + clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method); + clock["_" + method] = target[method]; + + if (method == "Date") { + var date = mirrorDateProperties(clock[method], target[method]); + target[method] = date; + } else { + target[method] = function () { + return clock[method].apply(clock, arguments); + }; + + for (var prop in clock[method]) { + if (clock[method].hasOwnProperty(prop)) { + target[method][prop] = clock[method][prop]; + } + } + } + + target[method].clock = clock; +} + +var timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), + clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined), + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date +}; + +var keys = Object.keys || function (obj) { + var ks = []; + for (var key in obj) { + ks.push(key); + } + return ks; +}; + +exports.timers = timers; + +var createClock = exports.createClock = function (now) { + var clock = { + now: getEpoch(now), + timeouts: {}, + Date: createDate() + }; + + clock.Date.clock = clock; + + clock.setTimeout = function setTimeout(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout + }); + }; + + clock.clearTimeout = function clearTimeout(timerId) { + if (!timerId) { + // null appears to be allowed in most browsers, and appears to be + // relied upon by some libraries, like Bootstrap carousel + return; + } + if (!clock.timers) { + clock.timers = []; + } + // in Node, timerId is an object with .ref()/.unref(), and + // its .id field is the actual timer id. + if (typeof timerId === "object") { + timerId = timerId.id + } + if (timerId in clock.timers) { + delete clock.timers[timerId]; + } + }; + + clock.setInterval = function setInterval(func, timeout) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 2), + delay: timeout, + interval: timeout + }); + }; + + clock.clearInterval = function clearInterval(timerId) { + clock.clearTimeout(timerId); + }; + + clock.setImmediate = function setImmediate(func) { + return addTimer(clock, { + func: func, + args: Array.prototype.slice.call(arguments, 1), + immediate: true + }); + }; + + clock.clearImmediate = function clearImmediate(timerId) { + clock.clearTimeout(timerId); + }; + + clock.tick = function tick(ms) { + ms = typeof ms == "number" ? ms : parseTime(ms); + var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now; + var timer = firstTimerInRange(clock, tickFrom, tickTo); + + var firstException; + while (timer && tickFrom <= tickTo) { + if (clock.timers[timer.id]) { + tickFrom = clock.now = timer.callAt; + try { + callTimer(clock, timer); + } catch (e) { + firstException = firstException || e; + } + } + + timer = firstTimerInRange(clock, previous, tickTo); + previous = tickFrom; + } + + clock.now = tickTo; + + if (firstException) { + throw firstException; + } + + return clock.now; + }; + + clock.reset = function reset() { + clock.timers = {}; + }; + + return clock; +}; + +exports.install = function install(target, now, toFake) { + if (typeof target === "number") { + toFake = now; + now = target; + target = null; + } + + if (!target) { + target = global; + } + + var clock = createClock(now); + + clock.uninstall = function () { + uninstall(clock, target); + }; + + clock.methods = toFake || []; + + if (clock.methods.length === 0) { + clock.methods = keys(timers); + } + + for (var i = 0, l = clock.methods.length; i < l; i++) { + hijackMethod(target, clock.methods[i], clock); + } + + return clock; +}; + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}]},{},[1])(1) +}); + })(); + var define; +/** + * Sinon core utilities. For internal use only. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +var sinon = (function () { +"use strict"; + + var sinon; + var isNode = typeof module !== "undefined" && module.exports && typeof require === "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + sinon = module.exports = require("./sinon/util/core"); + require("./sinon/extend"); + require("./sinon/typeOf"); + require("./sinon/times_in_words"); + require("./sinon/spy"); + require("./sinon/call"); + require("./sinon/behavior"); + require("./sinon/stub"); + require("./sinon/mock"); + require("./sinon/collection"); + require("./sinon/assert"); + require("./sinon/sandbox"); + require("./sinon/test"); + require("./sinon/test_case"); + require("./sinon/match"); + require("./sinon/format"); + require("./sinon/log_error"); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + sinon = module.exports; + } else { + sinon = {}; + } + + return sinon; +}()); + +/** + * @depend ../../sinon.js + */ +/** + * Sinon core utilities. For internal use only. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + var div = typeof document != "undefined" && document.createElement("div"); + var hasOwn = Object.prototype.hasOwnProperty; + + function isDOMNode(obj) { + var success = false; + + try { + obj.appendChild(div); + success = div.parentNode == obj; + } catch (e) { + return false; + } finally { + try { + obj.removeChild(div); + } catch (e) { + // Remove failed, not much we can do about that + } + } + + return success; + } + + function isElement(obj) { + return div && obj && obj.nodeType === 1 && isDOMNode(obj); + } + + function isFunction(obj) { + return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); + } + + function isReallyNaN(val) { + return typeof val === "number" && isNaN(val); + } + + function mirrorProperties(target, source) { + for (var prop in source) { + if (!hasOwn.call(target, prop)) { + target[prop] = source[prop]; + } + } + } + + function isRestorable(obj) { + return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; + } + + // Cheap way to detect if we have ES5 support. + var hasES5Support = "keys" in Object; + + function makeApi(sinon) { + sinon.wrapMethod = function wrapMethod(object, property, method) { + if (!object) { + throw new TypeError("Should wrap property of object"); + } + + if (typeof method != "function" && typeof method != "object") { + throw new TypeError("Method wrapper should be a function or a property descriptor"); + } + + function checkWrappedMethod(wrappedMethod) { + if (!isFunction(wrappedMethod)) { + error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + + property + " as function"); + } else if (wrappedMethod.restore && wrappedMethod.restore.sinon) { + error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); + } else if (wrappedMethod.calledBefore) { + var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; + error = new TypeError("Attempted to wrap " + property + " which is already " + verb); + } + + if (error) { + if (wrappedMethod && wrappedMethod.stackTrace) { + error.stack += "\n--------------\n" + wrappedMethod.stackTrace; + } + throw error; + } + } + + var error, wrappedMethod; + + // IE 8 does not support hasOwnProperty on the window object and Firefox has a problem + // when using hasOwn.call on objects from other frames. + var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property); + + if (hasES5Support) { + var methodDesc = (typeof method == "function") ? {value: method} : method, + wrappedMethodDesc = sinon.getPropertyDescriptor(object, property), + i; + + if (!wrappedMethodDesc) { + error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + + property + " as function"); + } else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) { + error = new TypeError("Attempted to wrap " + property + " which is already wrapped"); + } + if (error) { + if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) { + error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace; + } + throw error; + } + + var types = sinon.objectKeys(methodDesc); + for (i = 0; i < types.length; i++) { + wrappedMethod = wrappedMethodDesc[types[i]]; + checkWrappedMethod(wrappedMethod); + } + + mirrorProperties(methodDesc, wrappedMethodDesc); + for (i = 0; i < types.length; i++) { + mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]); + } + Object.defineProperty(object, property, methodDesc); + } else { + wrappedMethod = object[property]; + checkWrappedMethod(wrappedMethod); + object[property] = method; + method.displayName = property; + } + + method.displayName = property; + + // Set up a stack trace which can be used later to find what line of + // code the original method was created on. + method.stackTrace = (new Error("Stack Trace for original")).stack; + + method.restore = function () { + // For prototype properties try to reset by delete first. + // If this fails (ex: localStorage on mobile safari) then force a reset + // via direct assignment. + if (!owned) { + // In some cases `delete` may throw an error + try { + delete object[property]; + } catch (e) {} + // For native code functions `delete` fails without throwing an error + // on Chrome < 43, PhantomJS, etc. + } else if (hasES5Support) { + Object.defineProperty(object, property, wrappedMethodDesc); + } + + // Use strict equality comparison to check failures then force a reset + // via direct assignment. + if (object[property] === method) { + object[property] = wrappedMethod; + } + }; + + method.restore.sinon = true; + + if (!hasES5Support) { + mirrorProperties(method, wrappedMethod); + } + + return method; + }; + + sinon.create = function create(proto) { + var F = function () {}; + F.prototype = proto; + return new F(); + }; + + sinon.deepEqual = function deepEqual(a, b) { + if (sinon.match && sinon.match.isMatcher(a)) { + return a.test(b); + } + + if (typeof a != "object" || typeof b != "object") { + if (isReallyNaN(a) && isReallyNaN(b)) { + return true; + } else { + return a === b; + } + } + + if (isElement(a) || isElement(b)) { + return a === b; + } + + if (a === b) { + return true; + } + + if ((a === null && b !== null) || (a !== null && b === null)) { + return false; + } + + if (a instanceof RegExp && b instanceof RegExp) { + return (a.source === b.source) && (a.global === b.global) && + (a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline); + } + + var aString = Object.prototype.toString.call(a); + if (aString != Object.prototype.toString.call(b)) { + return false; + } + + if (aString == "[object Date]") { + return a.valueOf() === b.valueOf(); + } + + var prop, aLength = 0, bLength = 0; + + if (aString == "[object Array]" && a.length !== b.length) { + return false; + } + + for (prop in a) { + aLength += 1; + + if (!(prop in b)) { + return false; + } + + if (!deepEqual(a[prop], b[prop])) { + return false; + } + } + + for (prop in b) { + bLength += 1; + } + + return aLength == bLength; + }; + + sinon.functionName = function functionName(func) { + var name = func.displayName || func.name; + + // Use function decomposition as a last resort to get function + // name. Does not rely on function decomposition to work - if it + // doesn't debugging will be slightly less informative + // (i.e. toString will say 'spy' rather than 'myFunc'). + if (!name) { + var matches = func.toString().match(/function ([^\s\(]+)/); + name = matches && matches[1]; + } + + return name; + }; + + sinon.functionToString = function toString() { + if (this.getCall && this.callCount) { + var thisValue, prop, i = this.callCount; + + while (i--) { + thisValue = this.getCall(i).thisValue; + + for (prop in thisValue) { + if (thisValue[prop] === this) { + return prop; + } + } + } + } + + return this.displayName || "sinon fake"; + }; + + sinon.objectKeys = function objectKeys(obj) { + if (obj !== Object(obj)) { + throw new TypeError("sinon.objectKeys called on a non-object"); + } + + var keys = []; + var key; + for (key in obj) { + if (hasOwn.call(obj, key)) { + keys.push(key); + } + } + + return keys; + }; + + sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) { + var proto = object, descriptor; + while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) { + proto = Object.getPrototypeOf(proto); + } + return descriptor; + } + + sinon.getConfig = function (custom) { + var config = {}; + custom = custom || {}; + var defaults = sinon.defaultConfig; + + for (var prop in defaults) { + if (defaults.hasOwnProperty(prop)) { + config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; + } + } + + return config; + }; + + sinon.defaultConfig = { + injectIntoThis: true, + injectInto: null, + properties: ["spy", "stub", "mock", "clock", "server", "requests"], + useFakeTimers: true, + useFakeServer: true + }; + + sinon.timesInWords = function timesInWords(count) { + return count == 1 && "once" || + count == 2 && "twice" || + count == 3 && "thrice" || + (count || 0) + " times"; + }; + + sinon.calledInOrder = function (spies) { + for (var i = 1, l = spies.length; i < l; i++) { + if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { + return false; + } + } + + return true; + }; + + sinon.orderByFirstCall = function (spies) { + return spies.sort(function (a, b) { + // uuid, won't ever be equal + var aCall = a.getCall(0); + var bCall = b.getCall(0); + var aId = aCall && aCall.callId || -1; + var bId = bCall && bCall.callId || -1; + + return aId < bId ? -1 : 1; + }); + }; + + sinon.createStubInstance = function (constructor) { + if (typeof constructor !== "function") { + throw new TypeError("The constructor should be a function."); + } + return sinon.stub(sinon.create(constructor.prototype)); + }; + + sinon.restore = function (object) { + if (object !== null && typeof object === "object") { + for (var prop in object) { + if (isRestorable(object[prop])) { + object[prop].restore(); + } + } + } else if (isRestorable(object)) { + object.restore(); + } + }; + + return sinon; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports) { + makeApi(exports); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + */ + +(function (sinon) { + function makeApi(sinon) { + + // Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + var hasDontEnumBug = (function () { + var obj = { + constructor: function () { + return "0"; + }, + toString: function () { + return "1"; + }, + valueOf: function () { + return "2"; + }, + toLocaleString: function () { + return "3"; + }, + prototype: function () { + return "4"; + }, + isPrototypeOf: function () { + return "5"; + }, + propertyIsEnumerable: function () { + return "6"; + }, + hasOwnProperty: function () { + return "7"; + }, + length: function () { + return "8"; + }, + unique: function () { + return "9" + } + }; + + var result = []; + for (var prop in obj) { + result.push(obj[prop]()); + } + return result.join("") !== "0123456789"; + })(); + + /* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will + * override properties in previous sources. + * + * target - The Object to extend + * sources - Objects to copy properties from. + * + * Returns the extended target + */ + function extend(target /*, sources */) { + var sources = Array.prototype.slice.call(arguments, 1), + source, i, prop; + + for (i = 0; i < sources.length; i++) { + source = sources[i]; + + for (prop in source) { + if (source.hasOwnProperty(prop)) { + target[prop] = source[prop]; + } + } + + // Make sure we copy (own) toString method even when in JScript with DontEnum bug + // See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug + if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) { + target.toString = source.toString; + } + } + + return target; + }; + + sinon.extend = extend; + return sinon.extend; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + */ + +(function (sinon) { + function makeApi(sinon) { + + function timesInWords(count) { + switch (count) { + case 1: + return "once"; + case 2: + return "twice"; + case 3: + return "thrice"; + default: + return (count || 0) + " times"; + } + } + + sinon.timesInWords = timesInWords; + return sinon.timesInWords; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + */ +/** + * Format functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ + +(function (sinon, formatio) { + function makeApi(sinon) { + function typeOf(value) { + if (value === null) { + return "null"; + } else if (value === undefined) { + return "undefined"; + } + var string = Object.prototype.toString.call(value); + return string.substring(8, string.length - 1).toLowerCase(); + }; + + sinon.typeOf = typeOf; + return sinon.typeOf; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}( + (typeof sinon == "object" && sinon || null), + (typeof formatio == "object" && formatio) +)); + +/** + * @depend util/core.js + * @depend typeOf.js + */ +/*jslint eqeqeq: false, onevar: false, plusplus: false*/ +/*global module, require, sinon*/ +/** + * Match functions + * + * @author Maximilian Antoni (mail@maxantoni.de) + * @license BSD + * + * Copyright (c) 2012 Maximilian Antoni + */ + +(function (sinon) { + function makeApi(sinon) { + function assertType(value, type, name) { + var actual = sinon.typeOf(value); + if (actual !== type) { + throw new TypeError("Expected type of " + name + " to be " + + type + ", but was " + actual); + } + } + + var matcher = { + toString: function () { + return this.message; + } + }; + + function isMatcher(object) { + return matcher.isPrototypeOf(object); + } + + function matchObject(expectation, actual) { + if (actual === null || actual === undefined) { + return false; + } + for (var key in expectation) { + if (expectation.hasOwnProperty(key)) { + var exp = expectation[key]; + var act = actual[key]; + if (match.isMatcher(exp)) { + if (!exp.test(act)) { + return false; + } + } else if (sinon.typeOf(exp) === "object") { + if (!matchObject(exp, act)) { + return false; + } + } else if (!sinon.deepEqual(exp, act)) { + return false; + } + } + } + return true; + } + + matcher.or = function (m2) { + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } else if (!isMatcher(m2)) { + m2 = match(m2); + } + var m1 = this; + var or = sinon.create(matcher); + or.test = function (actual) { + return m1.test(actual) || m2.test(actual); + }; + or.message = m1.message + ".or(" + m2.message + ")"; + return or; + }; + + matcher.and = function (m2) { + if (!arguments.length) { + throw new TypeError("Matcher expected"); + } else if (!isMatcher(m2)) { + m2 = match(m2); + } + var m1 = this; + var and = sinon.create(matcher); + and.test = function (actual) { + return m1.test(actual) && m2.test(actual); + }; + and.message = m1.message + ".and(" + m2.message + ")"; + return and; + }; + + var match = function (expectation, message) { + var m = sinon.create(matcher); + var type = sinon.typeOf(expectation); + switch (type) { + case "object": + if (typeof expectation.test === "function") { + m.test = function (actual) { + return expectation.test(actual) === true; + }; + m.message = "match(" + sinon.functionName(expectation.test) + ")"; + return m; + } + var str = []; + for (var key in expectation) { + if (expectation.hasOwnProperty(key)) { + str.push(key + ": " + expectation[key]); + } + } + m.test = function (actual) { + return matchObject(expectation, actual); + }; + m.message = "match(" + str.join(", ") + ")"; + break; + case "number": + m.test = function (actual) { + return expectation == actual; + }; + break; + case "string": + m.test = function (actual) { + if (typeof actual !== "string") { + return false; + } + return actual.indexOf(expectation) !== -1; + }; + m.message = "match(\"" + expectation + "\")"; + break; + case "regexp": + m.test = function (actual) { + if (typeof actual !== "string") { + return false; + } + return expectation.test(actual); + }; + break; + case "function": + m.test = expectation; + if (message) { + m.message = message; + } else { + m.message = "match(" + sinon.functionName(expectation) + ")"; + } + break; + default: + m.test = function (actual) { + return sinon.deepEqual(expectation, actual); + }; + } + if (!m.message) { + m.message = "match(" + expectation + ")"; + } + return m; + }; + + match.isMatcher = isMatcher; + + match.any = match(function () { + return true; + }, "any"); + + match.defined = match(function (actual) { + return actual !== null && actual !== undefined; + }, "defined"); + + match.truthy = match(function (actual) { + return !!actual; + }, "truthy"); + + match.falsy = match(function (actual) { + return !actual; + }, "falsy"); + + match.same = function (expectation) { + return match(function (actual) { + return expectation === actual; + }, "same(" + expectation + ")"); + }; + + match.typeOf = function (type) { + assertType(type, "string", "type"); + return match(function (actual) { + return sinon.typeOf(actual) === type; + }, "typeOf(\"" + type + "\")"); + }; + + match.instanceOf = function (type) { + assertType(type, "function", "type"); + return match(function (actual) { + return actual instanceof type; + }, "instanceOf(" + sinon.functionName(type) + ")"); + }; + + function createPropertyMatcher(propertyTest, messagePrefix) { + return function (property, value) { + assertType(property, "string", "property"); + var onlyProperty = arguments.length === 1; + var message = messagePrefix + "(\"" + property + "\""; + if (!onlyProperty) { + message += ", " + value; + } + message += ")"; + return match(function (actual) { + if (actual === undefined || actual === null || + !propertyTest(actual, property)) { + return false; + } + return onlyProperty || sinon.deepEqual(value, actual[property]); + }, message); + }; + } + + match.has = createPropertyMatcher(function (actual, property) { + if (typeof actual === "object") { + return property in actual; + } + return actual[property] !== undefined; + }, "has"); + + match.hasOwn = createPropertyMatcher(function (actual, property) { + return actual.hasOwnProperty(property); + }, "hasOwn"); + + match.bool = match.typeOf("boolean"); + match.number = match.typeOf("number"); + match.string = match.typeOf("string"); + match.object = match.typeOf("object"); + match.func = match.typeOf("function"); + match.array = match.typeOf("array"); + match.regexp = match.typeOf("regexp"); + match.date = match.typeOf("date"); + + sinon.match = match; + return match; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./typeOf"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + */ +/** + * Format functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ + +(function (sinon, formatio) { + function makeApi(sinon) { + function valueFormatter(value) { + return "" + value; + } + + function getFormatioFormatter() { + var formatter = formatio.configure({ + quoteStrings: false, + limitChildrenCount: 250 + }); + + function format() { + return formatter.ascii.apply(formatter, arguments); + }; + + return format; + } + + function getNodeFormatter(value) { + function format(value) { + return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; + }; + + try { + var util = require("util"); + } catch (e) { + /* Node, but no util module - would be very old, but better safe than sorry */ + } + + return util ? format : valueFormatter; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function", + formatter; + + if (isNode) { + try { + formatio = require("formatio"); + } catch (e) {} + } + + if (formatio) { + formatter = getFormatioFormatter() + } else if (isNode) { + formatter = getNodeFormatter(); + } else { + formatter = valueFormatter; + } + + sinon.format = formatter; + return sinon.format; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}( + (typeof sinon == "object" && sinon || null), + (typeof formatio == "object" && formatio) +)); + +/** + * @depend util/core.js + * @depend match.js + * @depend format.js + */ +/** + * Spy calls + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Maximilian Antoni (mail@maxantoni.de) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + * Copyright (c) 2013 Maximilian Antoni + */ + +(function (sinon) { + function makeApi(sinon) { + function throwYieldError(proxy, text, args) { + var msg = sinon.functionName(proxy) + text; + if (args.length) { + msg += " Received [" + slice.call(args).join(", ") + "]"; + } + throw new Error(msg); + } + + var slice = Array.prototype.slice; + + var callProto = { + calledOn: function calledOn(thisValue) { + if (sinon.match && sinon.match.isMatcher(thisValue)) { + return thisValue.test(this.thisValue); + } + return this.thisValue === thisValue; + }, + + calledWith: function calledWith() { + var l = arguments.length; + if (l > this.args.length) { + return false; + } + for (var i = 0; i < l; i += 1) { + if (!sinon.deepEqual(arguments[i], this.args[i])) { + return false; + } + } + + return true; + }, + + calledWithMatch: function calledWithMatch() { + var l = arguments.length; + if (l > this.args.length) { + return false; + } + for (var i = 0; i < l; i += 1) { + var actual = this.args[i]; + var expectation = arguments[i]; + if (!sinon.match || !sinon.match(expectation).test(actual)) { + return false; + } + } + return true; + }, + + calledWithExactly: function calledWithExactly() { + return arguments.length == this.args.length && + this.calledWith.apply(this, arguments); + }, + + notCalledWith: function notCalledWith() { + return !this.calledWith.apply(this, arguments); + }, + + notCalledWithMatch: function notCalledWithMatch() { + return !this.calledWithMatch.apply(this, arguments); + }, + + returned: function returned(value) { + return sinon.deepEqual(value, this.returnValue); + }, + + threw: function threw(error) { + if (typeof error === "undefined" || !this.exception) { + return !!this.exception; + } + + return this.exception === error || this.exception.name === error; + }, + + calledWithNew: function calledWithNew() { + return this.proxy.prototype && this.thisValue instanceof this.proxy; + }, + + calledBefore: function (other) { + return this.callId < other.callId; + }, + + calledAfter: function (other) { + return this.callId > other.callId; + }, + + callArg: function (pos) { + this.args[pos](); + }, + + callArgOn: function (pos, thisValue) { + this.args[pos].apply(thisValue); + }, + + callArgWith: function (pos) { + this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); + }, + + callArgOnWith: function (pos, thisValue) { + var args = slice.call(arguments, 2); + this.args[pos].apply(thisValue, args); + }, + + yield: function () { + this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); + }, + + yieldOn: function (thisValue) { + var args = this.args; + for (var i = 0, l = args.length; i < l; ++i) { + if (typeof args[i] === "function") { + args[i].apply(thisValue, slice.call(arguments, 1)); + return; + } + } + throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); + }, + + yieldTo: function (prop) { + this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); + }, + + yieldToOn: function (prop, thisValue) { + var args = this.args; + for (var i = 0, l = args.length; i < l; ++i) { + if (args[i] && typeof args[i][prop] === "function") { + args[i][prop].apply(thisValue, slice.call(arguments, 2)); + return; + } + } + throwYieldError(this.proxy, " cannot yield to '" + prop + + "' since no callback was passed.", args); + }, + + toString: function () { + var callStr = this.proxy.toString() + "("; + var args = []; + + for (var i = 0, l = this.args.length; i < l; ++i) { + args.push(sinon.format(this.args[i])); + } + + callStr = callStr + args.join(", ") + ")"; + + if (typeof this.returnValue != "undefined") { + callStr += " => " + sinon.format(this.returnValue); + } + + if (this.exception) { + callStr += " !" + this.exception.name; + + if (this.exception.message) { + callStr += "(" + this.exception.message + ")"; + } + } + + return callStr; + } + }; + + callProto.invokeCallback = callProto.yield; + + function createSpyCall(spy, thisValue, args, returnValue, exception, id) { + if (typeof id !== "number") { + throw new TypeError("Call id is not a number"); + } + var proxyCall = sinon.create(callProto); + proxyCall.proxy = spy; + proxyCall.thisValue = thisValue; + proxyCall.args = args; + proxyCall.returnValue = returnValue; + proxyCall.exception = exception; + proxyCall.callId = id; + + return proxyCall; + } + createSpyCall.toString = callProto.toString; // used by mocks + + sinon.spyCall = createSpyCall; + return createSpyCall; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./match"); + require("./format"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend extend.js + * @depend call.js + * @depend format.js + */ +/** + * Spy functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + + function makeApi(sinon) { + var push = Array.prototype.push; + var slice = Array.prototype.slice; + var callId = 0; + + function spy(object, property, types) { + if (!property && typeof object == "function") { + return spy.create(object); + } + + if (!object && !property) { + return spy.create(function () { }); + } + + if (types) { + var methodDesc = sinon.getPropertyDescriptor(object, property); + for (var i = 0; i < types.length; i++) { + methodDesc[types[i]] = spy.create(methodDesc[types[i]]); + } + return sinon.wrapMethod(object, property, methodDesc); + } else { + var method = object[property]; + return sinon.wrapMethod(object, property, spy.create(method)); + } + } + + function matchingFake(fakes, args, strict) { + if (!fakes) { + return; + } + + for (var i = 0, l = fakes.length; i < l; i++) { + if (fakes[i].matches(args, strict)) { + return fakes[i]; + } + } + } + + function incrementCallCount() { + this.called = true; + this.callCount += 1; + this.notCalled = false; + this.calledOnce = this.callCount == 1; + this.calledTwice = this.callCount == 2; + this.calledThrice = this.callCount == 3; + } + + function createCallProperties() { + this.firstCall = this.getCall(0); + this.secondCall = this.getCall(1); + this.thirdCall = this.getCall(2); + this.lastCall = this.getCall(this.callCount - 1); + } + + var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; + function createProxy(func, proxyLength) { + // Retain the function length: + var p; + if (proxyLength) { + eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) + + ") { return p.invoke(func, this, slice.call(arguments)); });"); + } else { + p = function proxy() { + return p.invoke(func, this, slice.call(arguments)); + }; + } + p.isSinonProxy = true; + return p; + } + + var uuid = 0; + + // Public API + var spyApi = { + reset: function () { + if (this.invoking) { + var err = new Error("Cannot reset Sinon function while invoking it. " + + "Move the call to .reset outside of the callback."); + err.name = "InvalidResetException"; + throw err; + } + + this.called = false; + this.notCalled = true; + this.calledOnce = false; + this.calledTwice = false; + this.calledThrice = false; + this.callCount = 0; + this.firstCall = null; + this.secondCall = null; + this.thirdCall = null; + this.lastCall = null; + this.args = []; + this.returnValues = []; + this.thisValues = []; + this.exceptions = []; + this.callIds = []; + if (this.fakes) { + for (var i = 0; i < this.fakes.length; i++) { + this.fakes[i].reset(); + } + } + + return this; + }, + + create: function create(func, spyLength) { + var name; + + if (typeof func != "function") { + func = function () { }; + } else { + name = sinon.functionName(func); + } + + if (!spyLength) { + spyLength = func.length; + } + + var proxy = createProxy(func, spyLength); + + sinon.extend(proxy, spy); + delete proxy.create; + sinon.extend(proxy, func); + + proxy.reset(); + proxy.prototype = func.prototype; + proxy.displayName = name || "spy"; + proxy.toString = sinon.functionToString; + proxy.instantiateFake = sinon.spy.create; + proxy.id = "spy#" + uuid++; + + return proxy; + }, + + invoke: function invoke(func, thisValue, args) { + var matching = matchingFake(this.fakes, args); + var exception, returnValue; + + incrementCallCount.call(this); + push.call(this.thisValues, thisValue); + push.call(this.args, args); + push.call(this.callIds, callId++); + + // Make call properties available from within the spied function: + createCallProperties.call(this); + + try { + this.invoking = true; + + if (matching) { + returnValue = matching.invoke(func, thisValue, args); + } else { + returnValue = (this.func || func).apply(thisValue, args); + } + + var thisCall = this.getCall(this.callCount - 1); + if (thisCall.calledWithNew() && typeof returnValue !== "object") { + returnValue = thisValue; + } + } catch (e) { + exception = e; + } finally { + delete this.invoking; + } + + push.call(this.exceptions, exception); + push.call(this.returnValues, returnValue); + + // Make return value and exception available in the calls: + createCallProperties.call(this); + + if (exception !== undefined) { + throw exception; + } + + return returnValue; + }, + + named: function named(name) { + this.displayName = name; + return this; + }, + + getCall: function getCall(i) { + if (i < 0 || i >= this.callCount) { + return null; + } + + return sinon.spyCall(this, this.thisValues[i], this.args[i], + this.returnValues[i], this.exceptions[i], + this.callIds[i]); + }, + + getCalls: function () { + var calls = []; + var i; + + for (i = 0; i < this.callCount; i++) { + calls.push(this.getCall(i)); + } + + return calls; + }, + + calledBefore: function calledBefore(spyFn) { + if (!this.called) { + return false; + } + + if (!spyFn.called) { + return true; + } + + return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; + }, + + calledAfter: function calledAfter(spyFn) { + if (!this.called || !spyFn.called) { + return false; + } + + return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; + }, + + withArgs: function () { + var args = slice.call(arguments); + + if (this.fakes) { + var match = matchingFake(this.fakes, args, true); + + if (match) { + return match; + } + } else { + this.fakes = []; + } + + var original = this; + var fake = this.instantiateFake(); + fake.matchingAguments = args; + fake.parent = this; + push.call(this.fakes, fake); + + fake.withArgs = function () { + return original.withArgs.apply(original, arguments); + }; + + for (var i = 0; i < this.args.length; i++) { + if (fake.matches(this.args[i])) { + incrementCallCount.call(fake); + push.call(fake.thisValues, this.thisValues[i]); + push.call(fake.args, this.args[i]); + push.call(fake.returnValues, this.returnValues[i]); + push.call(fake.exceptions, this.exceptions[i]); + push.call(fake.callIds, this.callIds[i]); + } + } + createCallProperties.call(fake); + + return fake; + }, + + matches: function (args, strict) { + var margs = this.matchingAguments; + + if (margs.length <= args.length && + sinon.deepEqual(margs, args.slice(0, margs.length))) { + return !strict || margs.length == args.length; + } + }, + + printf: function (format) { + var spy = this; + var args = slice.call(arguments, 1); + var formatter; + + return (format || "").replace(/%(.)/g, function (match, specifyer) { + formatter = spyApi.formatters[specifyer]; + + if (typeof formatter == "function") { + return formatter.call(null, spy, args); + } else if (!isNaN(parseInt(specifyer, 10))) { + return sinon.format(args[specifyer - 1]); + } + + return "%" + specifyer; + }); + } + }; + + function delegateToCalls(method, matchAny, actual, notCalled) { + spyApi[method] = function () { + if (!this.called) { + if (notCalled) { + return notCalled.apply(this, arguments); + } + return false; + } + + var currentCall; + var matches = 0; + + for (var i = 0, l = this.callCount; i < l; i += 1) { + currentCall = this.getCall(i); + + if (currentCall[actual || method].apply(currentCall, arguments)) { + matches += 1; + + if (matchAny) { + return true; + } + } + } + + return matches === this.callCount; + }; + } + + delegateToCalls("calledOn", true); + delegateToCalls("alwaysCalledOn", false, "calledOn"); + delegateToCalls("calledWith", true); + delegateToCalls("calledWithMatch", true); + delegateToCalls("alwaysCalledWith", false, "calledWith"); + delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); + delegateToCalls("calledWithExactly", true); + delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); + delegateToCalls("neverCalledWith", false, "notCalledWith", function () { + return true; + }); + delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", function () { + return true; + }); + delegateToCalls("threw", true); + delegateToCalls("alwaysThrew", false, "threw"); + delegateToCalls("returned", true); + delegateToCalls("alwaysReturned", false, "returned"); + delegateToCalls("calledWithNew", true); + delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); + delegateToCalls("callArg", false, "callArgWith", function () { + throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); + }); + spyApi.callArgWith = spyApi.callArg; + delegateToCalls("callArgOn", false, "callArgOnWith", function () { + throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); + }); + spyApi.callArgOnWith = spyApi.callArgOn; + delegateToCalls("yield", false, "yield", function () { + throw new Error(this.toString() + " cannot yield since it was not yet invoked."); + }); + // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. + spyApi.invokeCallback = spyApi.yield; + delegateToCalls("yieldOn", false, "yieldOn", function () { + throw new Error(this.toString() + " cannot yield since it was not yet invoked."); + }); + delegateToCalls("yieldTo", false, "yieldTo", function (property) { + throw new Error(this.toString() + " cannot yield to '" + property + + "' since it was not yet invoked."); + }); + delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { + throw new Error(this.toString() + " cannot yield to '" + property + + "' since it was not yet invoked."); + }); + + spyApi.formatters = { + c: function (spy) { + return sinon.timesInWords(spy.callCount); + }, + + n: function (spy) { + return spy.toString(); + }, + + C: function (spy) { + var calls = []; + + for (var i = 0, l = spy.callCount; i < l; ++i) { + var stringifiedCall = " " + spy.getCall(i).toString(); + if (/\n/.test(calls[i - 1])) { + stringifiedCall = "\n" + stringifiedCall; + } + push.call(calls, stringifiedCall); + } + + return calls.length > 0 ? "\n" + calls.join("\n") : ""; + }, + + t: function (spy) { + var objects = []; + + for (var i = 0, l = spy.callCount; i < l; ++i) { + push.call(objects, sinon.format(spy.thisValues[i])); + } + + return objects.join(", "); + }, + + "*": function (spy, args) { + var formatted = []; + + for (var i = 0, l = args.length; i < l; ++i) { + push.call(formatted, sinon.format(args[i])); + } + + return formatted.join(", "); + } + }; + + sinon.extend(spy, spyApi); + + spy.spyCall = sinon.spyCall; + sinon.spy = spy; + + return spy; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./call"); + require("./extend"); + require("./times_in_words"); + require("./format"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + * @depend extend.js + */ +/** + * Stub behavior + * + * @author Christian Johansen (christian@cjohansen.no) + * @author Tim Fischbach (mail@timfischbach.de) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + var slice = Array.prototype.slice; + var join = Array.prototype.join; + var useLeftMostCallback = -1; + var useRightMostCallback = -2; + + var nextTick = (function () { + if (typeof process === "object" && typeof process.nextTick === "function") { + return process.nextTick; + } else if (typeof setImmediate === "function") { + return setImmediate; + } else { + return function (callback) { + setTimeout(callback, 0); + }; + } + })(); + + function throwsException(error, message) { + if (typeof error == "string") { + this.exception = new Error(message || ""); + this.exception.name = error; + } else if (!error) { + this.exception = new Error("Error"); + } else { + this.exception = error; + } + + return this; + } + + function getCallback(behavior, args) { + var callArgAt = behavior.callArgAt; + + if (callArgAt >= 0) { + return args[callArgAt]; + } + + var argumentList; + + if (callArgAt === useLeftMostCallback) { + argumentList = args; + } + + if (callArgAt === useRightMostCallback) { + argumentList = slice.call(args).reverse(); + } + + var callArgProp = behavior.callArgProp; + + for (var i = 0, l = argumentList.length; i < l; ++i) { + if (!callArgProp && typeof argumentList[i] == "function") { + return argumentList[i]; + } + + if (callArgProp && argumentList[i] && + typeof argumentList[i][callArgProp] == "function") { + return argumentList[i][callArgProp]; + } + } + + return null; + } + + function makeApi(sinon) { + function getCallbackError(behavior, func, args) { + if (behavior.callArgAt < 0) { + var msg; + + if (behavior.callArgProp) { + msg = sinon.functionName(behavior.stub) + + " expected to yield to '" + behavior.callArgProp + + "', but no object with such a property was passed."; + } else { + msg = sinon.functionName(behavior.stub) + + " expected to yield, but no callback was passed."; + } + + if (args.length > 0) { + msg += " Received [" + join.call(args, ", ") + "]"; + } + + return msg; + } + + return "argument at index " + behavior.callArgAt + " is not a function: " + func; + } + + function callCallback(behavior, args) { + if (typeof behavior.callArgAt == "number") { + var func = getCallback(behavior, args); + + if (typeof func != "function") { + throw new TypeError(getCallbackError(behavior, func, args)); + } + + if (behavior.callbackAsync) { + nextTick(function () { + func.apply(behavior.callbackContext, behavior.callbackArguments); + }); + } else { + func.apply(behavior.callbackContext, behavior.callbackArguments); + } + } + } + + var proto = { + create: function create(stub) { + var behavior = sinon.extend({}, sinon.behavior); + delete behavior.create; + behavior.stub = stub; + + return behavior; + }, + + isPresent: function isPresent() { + return (typeof this.callArgAt == "number" || + this.exception || + typeof this.returnArgAt == "number" || + this.returnThis || + this.returnValueDefined); + }, + + invoke: function invoke(context, args) { + callCallback(this, args); + + if (this.exception) { + throw this.exception; + } else if (typeof this.returnArgAt == "number") { + return args[this.returnArgAt]; + } else if (this.returnThis) { + return context; + } + + return this.returnValue; + }, + + onCall: function onCall(index) { + return this.stub.onCall(index); + }, + + onFirstCall: function onFirstCall() { + return this.stub.onFirstCall(); + }, + + onSecondCall: function onSecondCall() { + return this.stub.onSecondCall(); + }, + + onThirdCall: function onThirdCall() { + return this.stub.onThirdCall(); + }, + + withArgs: function withArgs(/* arguments */) { + throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " + + "Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments."); + }, + + callsArg: function callsArg(pos) { + if (typeof pos != "number") { + throw new TypeError("argument index is not number"); + } + + this.callArgAt = pos; + this.callbackArguments = []; + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgOn: function callsArgOn(pos, context) { + if (typeof pos != "number") { + throw new TypeError("argument index is not number"); + } + if (typeof context != "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = pos; + this.callbackArguments = []; + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgWith: function callsArgWith(pos) { + if (typeof pos != "number") { + throw new TypeError("argument index is not number"); + } + + this.callArgAt = pos; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + callsArgOnWith: function callsArgWith(pos, context) { + if (typeof pos != "number") { + throw new TypeError("argument index is not number"); + } + if (typeof context != "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = pos; + this.callbackArguments = slice.call(arguments, 2); + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yields: function () { + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 0); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsRight: function () { + this.callArgAt = useRightMostCallback; + this.callbackArguments = slice.call(arguments, 0); + this.callbackContext = undefined; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsOn: function (context) { + if (typeof context != "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = context; + this.callArgProp = undefined; + this.callbackAsync = false; + + return this; + }, + + yieldsTo: function (prop) { + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 1); + this.callbackContext = undefined; + this.callArgProp = prop; + this.callbackAsync = false; + + return this; + }, + + yieldsToOn: function (prop, context) { + if (typeof context != "object") { + throw new TypeError("argument context is not an object"); + } + + this.callArgAt = useLeftMostCallback; + this.callbackArguments = slice.call(arguments, 2); + this.callbackContext = context; + this.callArgProp = prop; + this.callbackAsync = false; + + return this; + }, + + throws: throwsException, + throwsException: throwsException, + + returns: function returns(value) { + this.returnValue = value; + this.returnValueDefined = true; + + return this; + }, + + returnsArg: function returnsArg(pos) { + if (typeof pos != "number") { + throw new TypeError("argument index is not number"); + } + + this.returnArgAt = pos; + + return this; + }, + + returnsThis: function returnsThis() { + this.returnThis = true; + + return this; + } + }; + + // create asynchronous versions of callsArg* and yields* methods + for (var method in proto) { + // need to avoid creating anotherasync versions of the newly added async methods + if (proto.hasOwnProperty(method) && + method.match(/^(callsArg|yields)/) && + !method.match(/Async/)) { + proto[method + "Async"] = (function (syncFnName) { + return function () { + var result = this[syncFnName].apply(this, arguments); + this.callbackAsync = true; + return result; + }; + })(method); + } + } + + sinon.behavior = proto; + return proto; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./extend"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + * @depend extend.js + * @depend spy.js + * @depend behavior.js + */ +/** + * Stub functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + function makeApi(sinon) { + function stub(object, property, func) { + if (!!func && typeof func != "function" && typeof func != "object") { + throw new TypeError("Custom stub should be a function or a property descriptor"); + } + + var wrapper; + + if (func) { + if (typeof func == "function") { + wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; + } else { + wrapper = func; + if (sinon.spy && sinon.spy.create) { + var types = sinon.objectKeys(wrapper); + for (var i = 0; i < types.length; i++) { + wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]); + } + } + } + } else { + var stubLength = 0; + if (typeof object == "object" && typeof object[property] == "function") { + stubLength = object[property].length; + } + wrapper = stub.create(stubLength); + } + + if (!object && typeof property === "undefined") { + return sinon.stub.create(); + } + + if (typeof property === "undefined" && typeof object == "object") { + for (var prop in object) { + if (typeof sinon.getPropertyDescriptor(object, prop).value === "function") { + stub(object, prop); + } + } + + return object; + } + + return sinon.wrapMethod(object, property, wrapper); + } + + function getDefaultBehavior(stub) { + return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub); + } + + function getParentBehaviour(stub) { + return (stub.parent && getCurrentBehavior(stub.parent)); + } + + function getCurrentBehavior(stub) { + var behavior = stub.behaviors[stub.callCount - 1]; + return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub); + } + + var uuid = 0; + + var proto = { + create: function create(stubLength) { + var functionStub = function () { + return getCurrentBehavior(functionStub).invoke(this, arguments); + }; + + functionStub.id = "stub#" + uuid++; + var orig = functionStub; + functionStub = sinon.spy.create(functionStub, stubLength); + functionStub.func = orig; + + sinon.extend(functionStub, stub); + functionStub.instantiateFake = sinon.stub.create; + functionStub.displayName = "stub"; + functionStub.toString = sinon.functionToString; + + functionStub.defaultBehavior = null; + functionStub.behaviors = []; + + return functionStub; + }, + + resetBehavior: function () { + var i; + + this.defaultBehavior = null; + this.behaviors = []; + + delete this.returnValue; + delete this.returnArgAt; + this.returnThis = false; + + if (this.fakes) { + for (i = 0; i < this.fakes.length; i++) { + this.fakes[i].resetBehavior(); + } + } + }, + + onCall: function onCall(index) { + if (!this.behaviors[index]) { + this.behaviors[index] = sinon.behavior.create(this); + } + + return this.behaviors[index]; + }, + + onFirstCall: function onFirstCall() { + return this.onCall(0); + }, + + onSecondCall: function onSecondCall() { + return this.onCall(1); + }, + + onThirdCall: function onThirdCall() { + return this.onCall(2); + } + }; + + for (var method in sinon.behavior) { + if (sinon.behavior.hasOwnProperty(method) && + !proto.hasOwnProperty(method) && + method != "create" && + method != "withArgs" && + method != "invoke") { + proto[method] = (function (behaviorMethod) { + return function () { + this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this); + this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments); + return this; + }; + }(method)); + } + } + + sinon.extend(stub, proto); + sinon.stub = stub; + + return stub; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./behavior"); + require("./spy"); + require("./extend"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend call.js + * @depend extend.js + * @depend match.js + * @depend spy.js + * @depend stub.js + * @depend format.js + */ +/** + * Mock functions. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + function makeApi(sinon) { + var push = [].push; + var match = sinon.match; + + function mock(object) { + // if (typeof console !== undefined && console.warn) { + // console.warn("mock will be removed from Sinon.JS v2.0"); + // } + + if (!object) { + return sinon.expectation.create("Anonymous mock"); + } + + return mock.create(object); + } + + function each(collection, callback) { + if (!collection) { + return; + } + + for (var i = 0, l = collection.length; i < l; i += 1) { + callback(collection[i]); + } + } + + sinon.extend(mock, { + create: function create(object) { + if (!object) { + throw new TypeError("object is null"); + } + + var mockObject = sinon.extend({}, mock); + mockObject.object = object; + delete mockObject.create; + + return mockObject; + }, + + expects: function expects(method) { + if (!method) { + throw new TypeError("method is falsy"); + } + + if (!this.expectations) { + this.expectations = {}; + this.proxies = []; + } + + if (!this.expectations[method]) { + this.expectations[method] = []; + var mockObject = this; + + sinon.wrapMethod(this.object, method, function () { + return mockObject.invokeMethod(method, this, arguments); + }); + + push.call(this.proxies, method); + } + + var expectation = sinon.expectation.create(method); + push.call(this.expectations[method], expectation); + + return expectation; + }, + + restore: function restore() { + var object = this.object; + + each(this.proxies, function (proxy) { + if (typeof object[proxy].restore == "function") { + object[proxy].restore(); + } + }); + }, + + verify: function verify() { + var expectations = this.expectations || {}; + var messages = [], met = []; + + each(this.proxies, function (proxy) { + each(expectations[proxy], function (expectation) { + if (!expectation.met()) { + push.call(messages, expectation.toString()); + } else { + push.call(met, expectation.toString()); + } + }); + }); + + this.restore(); + + if (messages.length > 0) { + sinon.expectation.fail(messages.concat(met).join("\n")); + } else if (met.length > 0) { + sinon.expectation.pass(messages.concat(met).join("\n")); + } + + return true; + }, + + invokeMethod: function invokeMethod(method, thisValue, args) { + var expectations = this.expectations && this.expectations[method]; + var length = expectations && expectations.length || 0, i; + + for (i = 0; i < length; i += 1) { + if (!expectations[i].met() && + expectations[i].allowsCall(thisValue, args)) { + return expectations[i].apply(thisValue, args); + } + } + + var messages = [], available, exhausted = 0; + + for (i = 0; i < length; i += 1) { + if (expectations[i].allowsCall(thisValue, args)) { + available = available || expectations[i]; + } else { + exhausted += 1; + } + push.call(messages, " " + expectations[i].toString()); + } + + if (exhausted === 0) { + return available.apply(thisValue, args); + } + + messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ + proxy: method, + args: args + })); + + sinon.expectation.fail(messages.join("\n")); + } + }); + + var times = sinon.timesInWords; + var slice = Array.prototype.slice; + + function callCountInWords(callCount) { + if (callCount == 0) { + return "never called"; + } else { + return "called " + times(callCount); + } + } + + function expectedCallCountInWords(expectation) { + var min = expectation.minCalls; + var max = expectation.maxCalls; + + if (typeof min == "number" && typeof max == "number") { + var str = times(min); + + if (min != max) { + str = "at least " + str + " and at most " + times(max); + } + + return str; + } + + if (typeof min == "number") { + return "at least " + times(min); + } + + return "at most " + times(max); + } + + function receivedMinCalls(expectation) { + var hasMinLimit = typeof expectation.minCalls == "number"; + return !hasMinLimit || expectation.callCount >= expectation.minCalls; + } + + function receivedMaxCalls(expectation) { + if (typeof expectation.maxCalls != "number") { + return false; + } + + return expectation.callCount == expectation.maxCalls; + } + + function verifyMatcher(possibleMatcher, arg) { + if (match && match.isMatcher(possibleMatcher)) { + return possibleMatcher.test(arg); + } else { + return true; + } + } + + sinon.expectation = { + minCalls: 1, + maxCalls: 1, + + create: function create(methodName) { + var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); + delete expectation.create; + expectation.method = methodName; + + return expectation; + }, + + invoke: function invoke(func, thisValue, args) { + this.verifyCallAllowed(thisValue, args); + + return sinon.spy.invoke.apply(this, arguments); + }, + + atLeast: function atLeast(num) { + if (typeof num != "number") { + throw new TypeError("'" + num + "' is not number"); + } + + if (!this.limitsSet) { + this.maxCalls = null; + this.limitsSet = true; + } + + this.minCalls = num; + + return this; + }, + + atMost: function atMost(num) { + if (typeof num != "number") { + throw new TypeError("'" + num + "' is not number"); + } + + if (!this.limitsSet) { + this.minCalls = null; + this.limitsSet = true; + } + + this.maxCalls = num; + + return this; + }, + + never: function never() { + return this.exactly(0); + }, + + once: function once() { + return this.exactly(1); + }, + + twice: function twice() { + return this.exactly(2); + }, + + thrice: function thrice() { + return this.exactly(3); + }, + + exactly: function exactly(num) { + if (typeof num != "number") { + throw new TypeError("'" + num + "' is not a number"); + } + + this.atLeast(num); + return this.atMost(num); + }, + + met: function met() { + return !this.failed && receivedMinCalls(this); + }, + + verifyCallAllowed: function verifyCallAllowed(thisValue, args) { + if (receivedMaxCalls(this)) { + this.failed = true; + sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + + this.expectedThis); + } + + if (!("expectedArguments" in this)) { + return; + } + + if (!args) { + sinon.expectation.fail(this.method + " received no arguments, expected " + + sinon.format(this.expectedArguments)); + } + + if (args.length < this.expectedArguments.length) { + sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + + "), expected " + sinon.format(this.expectedArguments)); + } + + if (this.expectsExactArgCount && + args.length != this.expectedArguments.length) { + sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + + "), expected " + sinon.format(this.expectedArguments)); + } + + for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { + + if (!verifyMatcher(this.expectedArguments[i], args[i])) { + sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + + ", didn't match " + this.expectedArguments.toString()); + } + + if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { + sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + + ", expected " + sinon.format(this.expectedArguments)); + } + } + }, + + allowsCall: function allowsCall(thisValue, args) { + if (this.met() && receivedMaxCalls(this)) { + return false; + } + + if ("expectedThis" in this && this.expectedThis !== thisValue) { + return false; + } + + if (!("expectedArguments" in this)) { + return true; + } + + args = args || []; + + if (args.length < this.expectedArguments.length) { + return false; + } + + if (this.expectsExactArgCount && + args.length != this.expectedArguments.length) { + return false; + } + + for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { + if (!verifyMatcher(this.expectedArguments[i], args[i])) { + return false; + } + + if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { + return false; + } + } + + return true; + }, + + withArgs: function withArgs() { + this.expectedArguments = slice.call(arguments); + return this; + }, + + withExactArgs: function withExactArgs() { + this.withArgs.apply(this, arguments); + this.expectsExactArgCount = true; + return this; + }, + + on: function on(thisValue) { + this.expectedThis = thisValue; + return this; + }, + + toString: function () { + var args = (this.expectedArguments || []).slice(); + + if (!this.expectsExactArgCount) { + push.call(args, "[...]"); + } + + var callStr = sinon.spyCall.toString.call({ + proxy: this.method || "anonymous mock expectation", + args: args + }); + + var message = callStr.replace(", [...", "[, ...") + " " + + expectedCallCountInWords(this); + + if (this.met()) { + return "Expectation met: " + message; + } + + return "Expected " + message + " (" + + callCountInWords(this.callCount) + ")"; + }, + + verify: function verify() { + if (!this.met()) { + sinon.expectation.fail(this.toString()); + } else { + sinon.expectation.pass(this.toString()); + } + + return true; + }, + + pass: function pass(message) { + sinon.assert.pass(message); + }, + + fail: function fail(message) { + var exception = new Error(message); + exception.name = "ExpectationError"; + + throw exception; + } + }; + + sinon.mock = mock; + return mock; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./times_in_words"); + require("./call"); + require("./extend"); + require("./match"); + require("./spy"); + require("./stub"); + require("./format"); + + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + * @depend spy.js + * @depend stub.js + * @depend mock.js + */ +/** + * Collections of stubs, spies and mocks. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + var push = [].push; + var hasOwnProperty = Object.prototype.hasOwnProperty; + + function getFakes(fakeCollection) { + if (!fakeCollection.fakes) { + fakeCollection.fakes = []; + } + + return fakeCollection.fakes; + } + + function each(fakeCollection, method) { + var fakes = getFakes(fakeCollection); + + for (var i = 0, l = fakes.length; i < l; i += 1) { + if (typeof fakes[i][method] == "function") { + fakes[i][method](); + } + } + } + + function compact(fakeCollection) { + var fakes = getFakes(fakeCollection); + var i = 0; + while (i < fakes.length) { + fakes.splice(i, 1); + } + } + + function makeApi(sinon) { + var collection = { + verify: function resolve() { + each(this, "verify"); + }, + + restore: function restore() { + each(this, "restore"); + compact(this); + }, + + reset: function restore() { + each(this, "reset"); + }, + + verifyAndRestore: function verifyAndRestore() { + var exception; + + try { + this.verify(); + } catch (e) { + exception = e; + } + + this.restore(); + + if (exception) { + throw exception; + } + }, + + add: function add(fake) { + push.call(getFakes(this), fake); + return fake; + }, + + spy: function spy() { + return this.add(sinon.spy.apply(sinon, arguments)); + }, + + stub: function stub(object, property, value) { + if (property) { + var original = object[property]; + + if (typeof original != "function") { + if (!hasOwnProperty.call(object, property)) { + throw new TypeError("Cannot stub non-existent own property " + property); + } + + object[property] = value; + + return this.add({ + restore: function () { + object[property] = original; + } + }); + } + } + if (!property && !!object && typeof object == "object") { + var stubbedObj = sinon.stub.apply(sinon, arguments); + + for (var prop in stubbedObj) { + if (typeof stubbedObj[prop] === "function") { + this.add(stubbedObj[prop]); + } + } + + return stubbedObj; + } + + return this.add(sinon.stub.apply(sinon, arguments)); + }, + + mock: function mock() { + return this.add(sinon.mock.apply(sinon, arguments)); + }, + + inject: function inject(obj) { + var col = this; + + obj.spy = function () { + return col.spy.apply(col, arguments); + }; + + obj.stub = function () { + return col.stub.apply(col, arguments); + }; + + obj.mock = function () { + return col.mock.apply(col, arguments); + }; + + return obj; + } + }; + + sinon.collection = collection; + return collection; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./mock"); + require("./spy"); + require("./stub"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/*global lolex */ + +/** + * Fake timer API + * setTimeout + * setInterval + * clearTimeout + * clearInterval + * tick + * reset + * Date + * + * Inspired by jsUnitMockTimeOut from JsUnit + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +if (typeof sinon == "undefined") { + var sinon = {}; +} + +(function (global) { + function makeApi(sinon, lol) { + var llx = typeof lolex !== "undefined" ? lolex : lol; + + sinon.useFakeTimers = function () { + var now, methods = Array.prototype.slice.call(arguments); + + if (typeof methods[0] === "string") { + now = 0; + } else { + now = methods.shift(); + } + + var clock = llx.install(now || 0, methods); + clock.restore = clock.uninstall; + return clock; + }; + + sinon.clock = { + create: function (now) { + return llx.createClock(now); + } + }; + + sinon.timers = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined), + clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined), + setInterval: setInterval, + clearInterval: clearInterval, + Date: Date + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, epxorts, module, lolex) { + var sinon = require("./core"); + makeApi(sinon, lolex); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module, require("lolex")); + } else { + makeApi(sinon); + } +}(typeof global != "undefined" && typeof global !== "function" ? global : this)); + +/** + * Minimal Event interface implementation + * + * Original implementation by Sven Fuchs: https://gist.github.com/995028 + * Modifications and tests by Christian Johansen. + * + * @author Sven Fuchs (svenfuchs@artweb-design.de) + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2011 Sven Fuchs, Christian Johansen + */ + +if (typeof sinon == "undefined") { + this.sinon = {}; +} + +(function () { + var push = [].push; + + function makeApi(sinon) { + sinon.Event = function Event(type, bubbles, cancelable, target) { + this.initEvent(type, bubbles, cancelable, target); + }; + + sinon.Event.prototype = { + initEvent: function (type, bubbles, cancelable, target) { + this.type = type; + this.bubbles = bubbles; + this.cancelable = cancelable; + this.target = target; + }, + + stopPropagation: function () {}, + + preventDefault: function () { + this.defaultPrevented = true; + } + }; + + sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) { + this.initEvent(type, false, false, target); + this.loaded = progressEventRaw.loaded || null; + this.total = progressEventRaw.total || null; + this.lengthComputable = !!progressEventRaw.total; + }; + + sinon.ProgressEvent.prototype = new sinon.Event(); + + sinon.ProgressEvent.prototype.constructor = sinon.ProgressEvent; + + sinon.CustomEvent = function CustomEvent(type, customData, target) { + this.initEvent(type, false, false, target); + this.detail = customData.detail || null; + }; + + sinon.CustomEvent.prototype = new sinon.Event(); + + sinon.CustomEvent.prototype.constructor = sinon.CustomEvent; + + sinon.EventTarget = { + addEventListener: function addEventListener(event, listener) { + this.eventListeners = this.eventListeners || {}; + this.eventListeners[event] = this.eventListeners[event] || []; + push.call(this.eventListeners[event], listener); + }, + + removeEventListener: function removeEventListener(event, listener) { + var listeners = this.eventListeners && this.eventListeners[event] || []; + + for (var i = 0, l = listeners.length; i < l; ++i) { + if (listeners[i] == listener) { + return listeners.splice(i, 1); + } + } + }, + + dispatchEvent: function dispatchEvent(event) { + var type = event.type; + var listeners = this.eventListeners && this.eventListeners[type] || []; + + for (var i = 0; i < listeners.length; i++) { + if (typeof listeners[i] == "function") { + listeners[i].call(this, event); + } else { + listeners[i].handleEvent(event); + } + } + + return !!event.defaultPrevented; + } + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require) { + var sinon = require("./core"); + makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require); + } else { + makeApi(sinon); + } +}()); + +/** + * @depend util/core.js + */ +/** + * Logs errors + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2014 Christian Johansen + */ + +(function (sinon) { + // cache a reference to setTimeout, so that our reference won't be stubbed out + // when using fake timers and errors will still get logged + // https://github.com/cjohansen/Sinon.JS/issues/381 + var realSetTimeout = setTimeout; + + function makeApi(sinon) { + + function log() {} + + function logError(label, err) { + var msg = label + " threw exception: "; + + sinon.log(msg + "[" + err.name + "] " + err.message); + + if (err.stack) { + sinon.log(err.stack); + } + + logError.setTimeout(function () { + err.message = msg + err.message; + throw err; + }, 0); + }; + + // wrap realSetTimeout with something we can stub in tests + logError.setTimeout = function (func, timeout) { + realSetTimeout(func, timeout); + } + + var exports = {}; + exports.log = sinon.log = log; + exports.logError = sinon.logError = logError; + + return exports; + } + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + module.exports = makeApi(sinon); + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend core.js + * @depend ../extend.js + * @depend event.js + * @depend ../log_error.js + */ +/** + * Fake XDomainRequest object + */ + +if (typeof sinon == "undefined") { + this.sinon = {}; +} + +// wrapper for global +(function (global) { + var xdr = { XDomainRequest: global.XDomainRequest }; + xdr.GlobalXDomainRequest = global.XDomainRequest; + xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined"; + xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest : false; + + function makeApi(sinon) { + sinon.xdr = xdr; + + function FakeXDomainRequest() { + this.readyState = FakeXDomainRequest.UNSENT; + this.requestBody = null; + this.requestHeaders = {}; + this.status = 0; + this.timeout = null; + + if (typeof FakeXDomainRequest.onCreate == "function") { + FakeXDomainRequest.onCreate(this); + } + } + + function verifyState(xdr) { + if (xdr.readyState !== FakeXDomainRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xdr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + function verifyRequestSent(xdr) { + if (xdr.readyState == FakeXDomainRequest.UNSENT) { + throw new Error("Request not sent"); + } + if (xdr.readyState == FakeXDomainRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyResponseBodyType(body) { + if (typeof body != "string") { + var error = new Error("Attempted to respond to fake XDomainRequest with " + + body + ", which is not a string."); + error.name = "InvalidBodyException"; + throw error; + } + } + + sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, { + open: function open(method, url) { + this.method = method; + this.url = url; + + this.responseText = null; + this.sendFlag = false; + + this.readyStateChange(FakeXDomainRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + var eventName = ""; + switch (this.readyState) { + case FakeXDomainRequest.UNSENT: + break; + case FakeXDomainRequest.OPENED: + break; + case FakeXDomainRequest.LOADING: + if (this.sendFlag) { + //raise the progress event + eventName = "onprogress"; + } + break; + case FakeXDomainRequest.DONE: + if (this.isTimeout) { + eventName = "ontimeout" + } else if (this.errorFlag || (this.status < 200 || this.status > 299)) { + eventName = "onerror"; + } else { + eventName = "onload" + } + break; + } + + // raising event (if defined) + if (eventName) { + if (typeof this[eventName] == "function") { + try { + this[eventName](); + } catch (e) { + sinon.logError("Fake XHR " + eventName + " handler", e); + } + } + } + }, + + send: function send(data) { + verifyState(this); + + if (!/^(get|head)$/i.test(this.method)) { + this.requestBody = data; + } + this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; + + this.errorFlag = false; + this.sendFlag = true; + this.readyStateChange(FakeXDomainRequest.OPENED); + + if (typeof this.onSend == "function") { + this.onSend(this); + } + }, + + abort: function abort() { + this.aborted = true; + this.responseText = null; + this.errorFlag = true; + + if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) { + this.readyStateChange(sinon.FakeXDomainRequest.DONE); + this.sendFlag = false; + } + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyResponseBodyType(body); + + var chunkSize = this.chunkSize || 10; + var index = 0; + this.responseText = ""; + + do { + this.readyStateChange(FakeXDomainRequest.LOADING); + this.responseText += body.substring(index, index + chunkSize); + index += chunkSize; + } while (index < body.length); + + this.readyStateChange(FakeXDomainRequest.DONE); + }, + + respond: function respond(status, contentType, body) { + // content-type ignored, since XDomainRequest does not carry this + // we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease + // test integration across browsers + this.status = typeof status == "number" ? status : 200; + this.setResponseBody(body || ""); + }, + + simulatetimeout: function simulatetimeout() { + this.status = 0; + this.isTimeout = true; + // Access to this should actually throw an error + this.responseText = undefined; + this.readyStateChange(FakeXDomainRequest.DONE); + } + }); + + sinon.extend(FakeXDomainRequest, { + UNSENT: 0, + OPENED: 1, + LOADING: 3, + DONE: 4 + }); + + sinon.useFakeXDomainRequest = function useFakeXDomainRequest() { + sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) { + if (xdr.supportsXDR) { + global.XDomainRequest = xdr.GlobalXDomainRequest; + } + + delete sinon.FakeXDomainRequest.restore; + + if (keepOnCreate !== true) { + delete sinon.FakeXDomainRequest.onCreate; + } + }; + if (xdr.supportsXDR) { + global.XDomainRequest = sinon.FakeXDomainRequest; + } + return sinon.FakeXDomainRequest; + }; + + sinon.FakeXDomainRequest = FakeXDomainRequest; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("../extend"); + require("./event"); + require("../log_error"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else { + makeApi(sinon); + } +})(typeof global !== "undefined" ? global : self); + +/** + * @depend core.js + * @depend ../extend.js + * @depend event.js + * @depend ../log_error.js + */ +/** + * Fake XMLHttpRequest object + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (global) { + + var supportsProgress = typeof ProgressEvent !== "undefined"; + var supportsCustomEvent = typeof CustomEvent !== "undefined"; + var supportsFormData = typeof FormData !== "undefined"; + var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest }; + sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest; + sinonXhr.GlobalActiveXObject = global.ActiveXObject; + sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined"; + sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined"; + sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX + ? function () { + return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") + } : false; + sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest()); + + /*jsl:ignore*/ + var unsafeHeaders = { + "Accept-Charset": true, + "Accept-Encoding": true, + Connection: true, + "Content-Length": true, + Cookie: true, + Cookie2: true, + "Content-Transfer-Encoding": true, + Date: true, + Expect: true, + Host: true, + "Keep-Alive": true, + Referer: true, + TE: true, + Trailer: true, + "Transfer-Encoding": true, + Upgrade: true, + "User-Agent": true, + Via: true + }; + /*jsl:end*/ + + // Note that for FakeXMLHttpRequest to work pre ES5 + // we lose some of the alignment with the spec. + // To ensure as close a match as possible, + // set responseType before calling open, send or respond; + function FakeXMLHttpRequest() { + this.readyState = FakeXMLHttpRequest.UNSENT; + this.requestHeaders = {}; + this.requestBody = null; + this.status = 0; + this.statusText = ""; + this.upload = new UploadProgress(); + this.responseType = ""; + this.response = ""; + if (sinonXhr.supportsCORS) { + this.withCredentials = false; + } + + var xhr = this; + var events = ["loadstart", "load", "abort", "loadend"]; + + function addEventListener(eventName) { + xhr.addEventListener(eventName, function (event) { + var listener = xhr["on" + eventName]; + + if (listener && typeof listener == "function") { + listener.call(this, event); + } + }); + } + + for (var i = events.length - 1; i >= 0; i--) { + addEventListener(events[i]); + } + + if (typeof FakeXMLHttpRequest.onCreate == "function") { + FakeXMLHttpRequest.onCreate(this); + } + } + + // An upload object is created for each + // FakeXMLHttpRequest and allows upload + // events to be simulated using uploadProgress + // and uploadError. + function UploadProgress() { + this.eventListeners = { + progress: [], + load: [], + abort: [], + error: [] + } + } + + UploadProgress.prototype.addEventListener = function addEventListener(event, listener) { + this.eventListeners[event].push(listener); + }; + + UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) { + var listeners = this.eventListeners[event] || []; + + for (var i = 0, l = listeners.length; i < l; ++i) { + if (listeners[i] == listener) { + return listeners.splice(i, 1); + } + } + }; + + UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) { + var listeners = this.eventListeners[event.type] || []; + + for (var i = 0, listener; (listener = listeners[i]) != null; i++) { + listener(event); + } + }; + + function verifyState(xhr) { + if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR"); + } + + if (xhr.sendFlag) { + throw new Error("INVALID_STATE_ERR"); + } + } + + function getHeader(headers, header) { + header = header.toLowerCase(); + + for (var h in headers) { + if (h.toLowerCase() == header) { + return h; + } + } + + return null; + } + + // filtering to enable a white-list version of Sinon FakeXhr, + // where whitelisted requests are passed through to real XHR + function each(collection, callback) { + if (!collection) { + return; + } + + for (var i = 0, l = collection.length; i < l; i += 1) { + callback(collection[i]); + } + } + function some(collection, callback) { + for (var index = 0; index < collection.length; index++) { + if (callback(collection[index]) === true) { + return true; + } + } + return false; + } + // largest arity in XHR is 5 - XHR#open + var apply = function (obj, method, args) { + switch (args.length) { + case 0: return obj[method](); + case 1: return obj[method](args[0]); + case 2: return obj[method](args[0], args[1]); + case 3: return obj[method](args[0], args[1], args[2]); + case 4: return obj[method](args[0], args[1], args[2], args[3]); + case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]); + } + }; + + FakeXMLHttpRequest.filters = []; + FakeXMLHttpRequest.addFilter = function addFilter(fn) { + this.filters.push(fn) + }; + var IE6Re = /MSIE 6/; + FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) { + var xhr = new sinonXhr.workingXHR(); + each([ + "open", + "setRequestHeader", + "send", + "abort", + "getResponseHeader", + "getAllResponseHeaders", + "addEventListener", + "overrideMimeType", + "removeEventListener" + ], function (method) { + fakeXhr[method] = function () { + return apply(xhr, method, arguments); + }; + }); + + var copyAttrs = function (args) { + each(args, function (attr) { + try { + fakeXhr[attr] = xhr[attr] + } catch (e) { + if (!IE6Re.test(navigator.userAgent)) { + throw e; + } + } + }); + }; + + var stateChange = function stateChange() { + fakeXhr.readyState = xhr.readyState; + if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { + copyAttrs(["status", "statusText"]); + } + if (xhr.readyState >= FakeXMLHttpRequest.LOADING) { + copyAttrs(["responseText", "response"]); + } + if (xhr.readyState === FakeXMLHttpRequest.DONE) { + copyAttrs(["responseXML"]); + } + if (fakeXhr.onreadystatechange) { + fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr }); + } + }; + + if (xhr.addEventListener) { + for (var event in fakeXhr.eventListeners) { + if (fakeXhr.eventListeners.hasOwnProperty(event)) { + each(fakeXhr.eventListeners[event], function (handler) { + xhr.addEventListener(event, handler); + }); + } + } + xhr.addEventListener("readystatechange", stateChange); + } else { + xhr.onreadystatechange = stateChange; + } + apply(xhr, "open", xhrArgs); + }; + FakeXMLHttpRequest.useFilters = false; + + function verifyRequestOpened(xhr) { + if (xhr.readyState != FakeXMLHttpRequest.OPENED) { + throw new Error("INVALID_STATE_ERR - " + xhr.readyState); + } + } + + function verifyRequestSent(xhr) { + if (xhr.readyState == FakeXMLHttpRequest.DONE) { + throw new Error("Request done"); + } + } + + function verifyHeadersReceived(xhr) { + if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { + throw new Error("No headers received"); + } + } + + function verifyResponseBodyType(body) { + if (typeof body != "string") { + var error = new Error("Attempted to respond to fake XMLHttpRequest with " + + body + ", which is not a string."); + error.name = "InvalidBodyException"; + throw error; + } + } + + FakeXMLHttpRequest.parseXML = function parseXML(text) { + var xmlDoc; + + if (typeof DOMParser != "undefined") { + var parser = new DOMParser(); + xmlDoc = parser.parseFromString(text, "text/xml"); + } else { + xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); + xmlDoc.async = "false"; + xmlDoc.loadXML(text); + } + + return xmlDoc; + }; + + FakeXMLHttpRequest.statusCodes = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 207: "Multi-Status", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + function makeApi(sinon) { + sinon.xhr = sinonXhr; + + sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { + async: true, + + open: function open(method, url, async, username, password) { + this.method = method; + this.url = url; + this.async = typeof async == "boolean" ? async : true; + this.username = username; + this.password = password; + this.responseText = null; + this.response = this.responseType === "json" ? null : ""; + this.responseXML = null; + this.requestHeaders = {}; + this.sendFlag = false; + + if (FakeXMLHttpRequest.useFilters === true) { + var xhrArgs = arguments; + var defake = some(FakeXMLHttpRequest.filters, function (filter) { + return filter.apply(this, xhrArgs) + }); + if (defake) { + return FakeXMLHttpRequest.defake(this, arguments); + } + } + this.readyStateChange(FakeXMLHttpRequest.OPENED); + }, + + readyStateChange: function readyStateChange(state) { + this.readyState = state; + + if (typeof this.onreadystatechange == "function") { + try { + this.onreadystatechange(); + } catch (e) { + sinon.logError("Fake XHR onreadystatechange handler", e); + } + } + + switch (this.readyState) { + case FakeXMLHttpRequest.DONE: + if (supportsProgress) { + this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); + this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100})); + } + this.upload.dispatchEvent(new sinon.Event("load", false, false, this)); + this.dispatchEvent(new sinon.Event("load", false, false, this)); + this.dispatchEvent(new sinon.Event("loadend", false, false, this)); + break; + } + + this.dispatchEvent(new sinon.Event("readystatechange")); + }, + + setRequestHeader: function setRequestHeader(header, value) { + verifyState(this); + + if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { + throw new Error("Refused to set unsafe header \"" + header + "\""); + } + + if (this.requestHeaders[header]) { + this.requestHeaders[header] += "," + value; + } else { + this.requestHeaders[header] = value; + } + }, + + // Helps testing + setResponseHeaders: function setResponseHeaders(headers) { + verifyRequestOpened(this); + this.responseHeaders = {}; + + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + this.responseHeaders[header] = headers[header]; + } + } + + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); + } else { + this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; + } + }, + + // Currently treats ALL data as a DOMString (i.e. no Document) + send: function send(data) { + verifyState(this); + + if (!/^(get|head)$/i.test(this.method)) { + var contentType = getHeader(this.requestHeaders, "Content-Type"); + if (this.requestHeaders[contentType]) { + var value = this.requestHeaders[contentType].split(";"); + this.requestHeaders[contentType] = value[0] + ";charset=utf-8"; + } else if (supportsFormData && !(data instanceof FormData)) { + this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; + } + + this.requestBody = data; + } + + this.errorFlag = false; + this.sendFlag = this.async; + this.response = this.responseType === "json" ? null : ""; + this.readyStateChange(FakeXMLHttpRequest.OPENED); + + if (typeof this.onSend == "function") { + this.onSend(this); + } + + this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); + }, + + abort: function abort() { + this.aborted = true; + this.responseText = null; + this.response = this.responseType === "json" ? null : ""; + this.errorFlag = true; + this.requestHeaders = {}; + this.responseHeaders = {}; + + if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) { + this.readyStateChange(FakeXMLHttpRequest.DONE); + this.sendFlag = false; + } + + this.readyState = FakeXMLHttpRequest.UNSENT; + + this.dispatchEvent(new sinon.Event("abort", false, false, this)); + + this.upload.dispatchEvent(new sinon.Event("abort", false, false, this)); + + if (typeof this.onerror === "function") { + this.onerror(); + } + }, + + getResponseHeader: function getResponseHeader(header) { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return null; + } + + if (/^Set-Cookie2?$/i.test(header)) { + return null; + } + + header = getHeader(this.responseHeaders, header); + + return this.responseHeaders[header] || null; + }, + + getAllResponseHeaders: function getAllResponseHeaders() { + if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { + return ""; + } + + var headers = ""; + + for (var header in this.responseHeaders) { + if (this.responseHeaders.hasOwnProperty(header) && + !/^Set-Cookie2?$/i.test(header)) { + headers += header + ": " + this.responseHeaders[header] + "\r\n"; + } + } + + return headers; + }, + + setResponseBody: function setResponseBody(body) { + verifyRequestSent(this); + verifyHeadersReceived(this); + verifyResponseBodyType(body); + + var chunkSize = this.chunkSize || 10; + var index = 0; + this.responseText = ""; + + do { + if (this.async) { + this.readyStateChange(FakeXMLHttpRequest.LOADING); + } + + this.responseText += body.substring(index, index + chunkSize); + index += chunkSize; + } while (index < body.length); + + var type = this.getResponseHeader("Content-Type"); + + if (this.responseText && + (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { + try { + this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); + } catch (e) { + // Unable to parse XML - no biggie + } + } + + this.response = this.responseType === "json" ? JSON.parse(this.responseText) : this.responseText; + this.readyStateChange(FakeXMLHttpRequest.DONE); + }, + + respond: function respond(status, headers, body) { + this.status = typeof status == "number" ? status : 200; + this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; + this.setResponseHeaders(headers || {}); + this.setResponseBody(body || ""); + }, + + uploadProgress: function uploadProgress(progressEventRaw) { + if (supportsProgress) { + this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); + } + }, + + downloadProgress: function downloadProgress(progressEventRaw) { + if (supportsProgress) { + this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw)); + } + }, + + uploadError: function uploadError(error) { + if (supportsCustomEvent) { + this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error})); + } + } + }); + + sinon.extend(FakeXMLHttpRequest, { + UNSENT: 0, + OPENED: 1, + HEADERS_RECEIVED: 2, + LOADING: 3, + DONE: 4 + }); + + sinon.useFakeXMLHttpRequest = function () { + FakeXMLHttpRequest.restore = function restore(keepOnCreate) { + if (sinonXhr.supportsXHR) { + global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + global.ActiveXObject = sinonXhr.GlobalActiveXObject; + } + + delete FakeXMLHttpRequest.restore; + + if (keepOnCreate !== true) { + delete FakeXMLHttpRequest.onCreate; + } + }; + if (sinonXhr.supportsXHR) { + global.XMLHttpRequest = FakeXMLHttpRequest; + } + + if (sinonXhr.supportsActiveX) { + global.ActiveXObject = function ActiveXObject(objId) { + if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { + + return new FakeXMLHttpRequest(); + } + + return new sinonXhr.GlobalActiveXObject(objId); + }; + } + + return FakeXMLHttpRequest; + }; + + sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("../extend"); + require("./event"); + require("../log_error"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (typeof sinon === "undefined") { + return; + } else { + makeApi(sinon); + } + +})(typeof global !== "undefined" ? global : self); + +/** + * @depend fake_xdomain_request.js + * @depend fake_xml_http_request.js + * @depend ../format.js + * @depend ../log_error.js + */ +/** + * The Sinon "server" mimics a web server that receives requests from + * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, + * both synchronously and asynchronously. To respond synchronuously, canned + * answers have to be provided upfront. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +if (typeof sinon == "undefined") { + var sinon = {}; +} + +(function () { + var push = [].push; + function F() {} + + function create(proto) { + F.prototype = proto; + return new F(); + } + + function responseArray(handler) { + var response = handler; + + if (Object.prototype.toString.call(handler) != "[object Array]") { + response = [200, {}, handler]; + } + + if (typeof response[2] != "string") { + throw new TypeError("Fake server response body should be string, but was " + + typeof response[2]); + } + + return response; + } + + var wloc = typeof window !== "undefined" ? window.location : {}; + var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); + + function matchOne(response, reqMethod, reqUrl) { + var rmeth = response.method; + var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); + var url = response.url; + var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); + + return matchMethod && matchUrl; + } + + function match(response, request) { + var requestUrl = request.url; + + if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { + requestUrl = requestUrl.replace(rCurrLoc, ""); + } + + if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { + if (typeof response.response == "function") { + var ru = response.url; + var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []); + return response.response.apply(response, args); + } + + return true; + } + + return false; + } + + function makeApi(sinon) { + sinon.fakeServer = { + create: function () { + var server = create(this); + if (!sinon.xhr.supportsCORS) { + this.xhr = sinon.useFakeXDomainRequest(); + } else { + this.xhr = sinon.useFakeXMLHttpRequest(); + } + server.requests = []; + + this.xhr.onCreate = function (xhrObj) { + server.addRequest(xhrObj); + }; + + return server; + }, + + addRequest: function addRequest(xhrObj) { + var server = this; + push.call(this.requests, xhrObj); + + xhrObj.onSend = function () { + server.handleRequest(this); + + if (server.respondImmediately) { + server.respond(); + } else if (server.autoRespond && !server.responding) { + setTimeout(function () { + server.responding = false; + server.respond(); + }, server.autoRespondAfter || 10); + + server.responding = true; + } + }; + }, + + getHTTPMethod: function getHTTPMethod(request) { + if (this.fakeHTTPMethods && /post/i.test(request.method)) { + var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); + return !!matches ? matches[1] : request.method; + } + + return request.method; + }, + + handleRequest: function handleRequest(xhr) { + if (xhr.async) { + if (!this.queue) { + this.queue = []; + } + + push.call(this.queue, xhr); + } else { + this.processRequest(xhr); + } + }, + + log: function log(response, request) { + var str; + + str = "Request:\n" + sinon.format(request) + "\n\n"; + str += "Response:\n" + sinon.format(response) + "\n\n"; + + sinon.log(str); + }, + + respondWith: function respondWith(method, url, body) { + if (arguments.length == 1 && typeof method != "function") { + this.response = responseArray(method); + return; + } + + if (!this.responses) { + this.responses = []; + } + + if (arguments.length == 1) { + body = method; + url = method = null; + } + + if (arguments.length == 2) { + body = url; + url = method; + method = null; + } + + push.call(this.responses, { + method: method, + url: url, + response: typeof body == "function" ? body : responseArray(body) + }); + }, + + respond: function respond() { + if (arguments.length > 0) { + this.respondWith.apply(this, arguments); + } + + var queue = this.queue || []; + var requests = queue.splice(0, queue.length); + var request; + + while (request = requests.shift()) { + this.processRequest(request); + } + }, + + processRequest: function processRequest(request) { + try { + if (request.aborted) { + return; + } + + var response = this.response || [404, {}, ""]; + + if (this.responses) { + for (var l = this.responses.length, i = l - 1; i >= 0; i--) { + if (match.call(this, this.responses[i], request)) { + response = this.responses[i].response; + break; + } + } + } + + if (request.readyState != 4) { + this.log(response, request); + + request.respond(response[0], response[1], response[2]); + } + } catch (e) { + sinon.logError("Fake server request processing", e); + } + }, + + restore: function restore() { + return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); + } + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./core"); + require("./fake_xdomain_request"); + require("./fake_xml_http_request"); + require("../format"); + makeApi(sinon); + module.exports = sinon; + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else { + makeApi(sinon); + } +}()); + +/** + * @depend fake_server.js + * @depend fake_timers.js + */ +/** + * Add-on for sinon.fakeServer that automatically handles a fake timer along with + * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery + * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, + * it polls the object for completion with setInterval. Dispite the direct + * motivation, there is nothing jQuery-specific in this file, so it can be used + * in any environment where the ajax implementation depends on setInterval or + * setTimeout. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function () { + function makeApi(sinon) { + function Server() {} + Server.prototype = sinon.fakeServer; + + sinon.fakeServerWithClock = new Server(); + + sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { + if (xhr.async) { + if (typeof setTimeout.clock == "object") { + this.clock = setTimeout.clock; + } else { + this.clock = sinon.useFakeTimers(); + this.resetClock = true; + } + + if (!this.longestTimeout) { + var clockSetTimeout = this.clock.setTimeout; + var clockSetInterval = this.clock.setInterval; + var server = this; + + this.clock.setTimeout = function (fn, timeout) { + server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + + return clockSetTimeout.apply(this, arguments); + }; + + this.clock.setInterval = function (fn, timeout) { + server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); + + return clockSetInterval.apply(this, arguments); + }; + } + } + + return sinon.fakeServer.addRequest.call(this, xhr); + }; + + sinon.fakeServerWithClock.respond = function respond() { + var returnVal = sinon.fakeServer.respond.apply(this, arguments); + + if (this.clock) { + this.clock.tick(this.longestTimeout || 0); + this.longestTimeout = 0; + + if (this.resetClock) { + this.clock.restore(); + this.resetClock = false; + } + } + + return returnVal; + }; + + sinon.fakeServerWithClock.restore = function restore() { + if (this.clock) { + this.clock.restore(); + } + + return sinon.fakeServer.restore.apply(this, arguments); + }; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require) { + var sinon = require("./core"); + require("./fake_server"); + require("./fake_timers"); + makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require); + } else { + makeApi(sinon); + } +}()); + +/** + * @depend util/core.js + * @depend extend.js + * @depend collection.js + * @depend util/fake_timers.js + * @depend util/fake_server_with_clock.js + */ +/** + * Manages fake collections as well as fake utilities such as Sinon's + * timers and fake XHR implementation in one convenient object. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function () { + function makeApi(sinon) { + var push = [].push; + + function exposeValue(sandbox, config, key, value) { + if (!value) { + return; + } + + if (config.injectInto && !(key in config.injectInto)) { + config.injectInto[key] = value; + sandbox.injectedKeys.push(key); + } else { + push.call(sandbox.args, value); + } + } + + function prepareSandboxFromConfig(config) { + var sandbox = sinon.create(sinon.sandbox); + + if (config.useFakeServer) { + if (typeof config.useFakeServer == "object") { + sandbox.serverPrototype = config.useFakeServer; + } + + sandbox.useFakeServer(); + } + + if (config.useFakeTimers) { + if (typeof config.useFakeTimers == "object") { + sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); + } else { + sandbox.useFakeTimers(); + } + } + + return sandbox; + } + + sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { + useFakeTimers: function useFakeTimers() { + this.clock = sinon.useFakeTimers.apply(sinon, arguments); + + return this.add(this.clock); + }, + + serverPrototype: sinon.fakeServer, + + useFakeServer: function useFakeServer() { + var proto = this.serverPrototype || sinon.fakeServer; + + if (!proto || !proto.create) { + return null; + } + + this.server = proto.create(); + return this.add(this.server); + }, + + inject: function (obj) { + sinon.collection.inject.call(this, obj); + + if (this.clock) { + obj.clock = this.clock; + } + + if (this.server) { + obj.server = this.server; + obj.requests = this.server.requests; + } + + obj.match = sinon.match; + + return obj; + }, + + restore: function () { + sinon.collection.restore.apply(this, arguments); + this.restoreContext(); + }, + + restoreContext: function () { + if (this.injectedKeys) { + for (var i = 0, j = this.injectedKeys.length; i < j; i++) { + delete this.injectInto[this.injectedKeys[i]]; + } + this.injectedKeys = []; + } + }, + + create: function (config) { + if (!config) { + return sinon.create(sinon.sandbox); + } + + var sandbox = prepareSandboxFromConfig(config); + sandbox.args = sandbox.args || []; + sandbox.injectedKeys = []; + sandbox.injectInto = config.injectInto; + var prop, value, exposed = sandbox.inject({}); + + if (config.properties) { + for (var i = 0, l = config.properties.length; i < l; i++) { + prop = config.properties[i]; + value = exposed[prop] || prop == "sandbox" && sandbox; + exposeValue(sandbox, config, prop, value); + } + } else { + exposeValue(sandbox, config, "sandbox", value); + } + + return sandbox; + }, + + match: sinon.match + }); + + sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; + + return sinon.sandbox; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./extend"); + require("./util/fake_server_with_clock"); + require("./util/fake_timers"); + require("./collection"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}()); + +/** + * @depend util/core.js + * @depend sandbox.js + */ +/** + * Test function, sandboxes fakes + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + function makeApi(sinon) { + var slice = Array.prototype.slice; + + function test(callback) { + var type = typeof callback; + + if (type != "function") { + throw new TypeError("sinon.test needs to wrap a test function, got " + type); + } + + function sinonSandboxedTest() { + var config = sinon.getConfig(sinon.config); + config.injectInto = config.injectIntoThis && this || config.injectInto; + var sandbox = sinon.sandbox.create(config); + var args = slice.call(arguments); + var oldDone = args.length && args[args.length - 1]; + var exception, result; + + if (typeof oldDone == "function") { + args[args.length - 1] = function sinonDone(result) { + if (result) { + sandbox.restore(); + throw exception; + } else { + sandbox.verifyAndRestore(); + } + oldDone(result); + }; + } + + try { + result = callback.apply(this, args.concat(sandbox.args)); + } catch (e) { + exception = e; + } + + if (typeof oldDone != "function") { + if (typeof exception !== "undefined") { + sandbox.restore(); + throw exception; + } else { + sandbox.verifyAndRestore(); + } + } + + return result; + } + + if (callback.length) { + return function sinonAsyncSandboxedTest(callback) { + return sinonSandboxedTest.apply(this, arguments); + }; + } + + return sinonSandboxedTest; + } + + test.config = { + injectIntoThis: true, + injectInto: null, + properties: ["spy", "stub", "mock", "clock", "server", "requests"], + useFakeTimers: true, + useFakeServer: true + }; + + sinon.test = test; + return test; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./sandbox"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (sinon) { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend util/core.js + * @depend test.js + */ +/** + * Test case, sandboxes all test functions + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon) { + function createTest(property, setUp, tearDown) { + return function () { + if (setUp) { + setUp.apply(this, arguments); + } + + var exception, result; + + try { + result = property.apply(this, arguments); + } catch (e) { + exception = e; + } + + if (tearDown) { + tearDown.apply(this, arguments); + } + + if (exception) { + throw exception; + } + + return result; + }; + } + + function makeApi(sinon) { + function testCase(tests, prefix) { + if (!tests || typeof tests != "object") { + throw new TypeError("sinon.testCase needs an object with test functions"); + } + + prefix = prefix || "test"; + var rPrefix = new RegExp("^" + prefix); + var methods = {}, testName, property, method; + var setUp = tests.setUp; + var tearDown = tests.tearDown; + + for (testName in tests) { + if (tests.hasOwnProperty(testName) && !/^(setUp|tearDown)$/.test(testName)) { + property = tests[testName]; + + if (typeof property == "function" && rPrefix.test(testName)) { + method = property; + + if (setUp || tearDown) { + method = createTest(property, setUp, tearDown); + } + + methods[testName] = sinon.test(method); + } else { + methods[testName] = tests[testName]; + } + } + } + + return methods; + } + + sinon.testCase = testCase; + return testCase; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./test"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } +}(typeof sinon == "object" && sinon || null)); + +/** + * @depend times_in_words.js + * @depend util/core.js + * @depend match.js + * @depend format.js + */ +/** + * Assertions matching the test spy retrieval interface. + * + * @author Christian Johansen (christian@cjohansen.no) + * @license BSD + * + * Copyright (c) 2010-2013 Christian Johansen + */ + +(function (sinon, global) { + var slice = Array.prototype.slice; + + function makeApi(sinon) { + var assert; + + function verifyIsStub() { + var method; + + for (var i = 0, l = arguments.length; i < l; ++i) { + method = arguments[i]; + + if (!method) { + assert.fail("fake is not a spy"); + } + + if (method.proxy && method.proxy.isSinonProxy) { + verifyIsStub(method.proxy); + } else { + if (typeof method != "function") { + assert.fail(method + " is not a function"); + } + + if (typeof method.getCall != "function") { + assert.fail(method + " is not stubbed"); + } + } + + } + } + + function failAssertion(object, msg) { + object = object || global; + var failMethod = object.fail || assert.fail; + failMethod.call(object, msg); + } + + function mirrorPropAsAssertion(name, method, message) { + if (arguments.length == 2) { + message = method; + method = name; + } + + assert[name] = function (fake) { + verifyIsStub(fake); + + var args = slice.call(arguments, 1); + var failed = false; + + if (typeof method == "function") { + failed = !method(fake); + } else { + failed = typeof fake[method] == "function" ? + !fake[method].apply(fake, args) : !fake[method]; + } + + if (failed) { + failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args))); + } else { + assert.pass(name); + } + }; + } + + function exposedName(prefix, prop) { + return !prefix || /^fail/.test(prop) ? prop : + prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); + } + + assert = { + failException: "AssertError", + + fail: function fail(message) { + var error = new Error(message); + error.name = this.failException || assert.failException; + + throw error; + }, + + pass: function pass(assertion) {}, + + callOrder: function assertCallOrder() { + verifyIsStub.apply(null, arguments); + var expected = "", actual = ""; + + if (!sinon.calledInOrder(arguments)) { + try { + expected = [].join.call(arguments, ", "); + var calls = slice.call(arguments); + var i = calls.length; + while (i) { + if (!calls[--i].called) { + calls.splice(i, 1); + } + } + actual = sinon.orderByFirstCall(calls).join(", "); + } catch (e) { + // If this fails, we'll just fall back to the blank string + } + + failAssertion(this, "expected " + expected + " to be " + + "called in order but were called as " + actual); + } else { + assert.pass("callOrder"); + } + }, + + callCount: function assertCallCount(method, count) { + verifyIsStub(method); + + if (method.callCount != count) { + var msg = "expected %n to be called " + sinon.timesInWords(count) + + " but was called %c%C"; + failAssertion(this, method.printf(msg)); + } else { + assert.pass("callCount"); + } + }, + + expose: function expose(target, options) { + if (!target) { + throw new TypeError("target is null or undefined"); + } + + var o = options || {}; + var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; + var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; + + for (var method in this) { + if (method != "expose" && (includeFail || !/^(fail)/.test(method))) { + target[exposedName(prefix, method)] = this[method]; + } + } + + return target; + }, + + match: function match(actual, expectation) { + var matcher = sinon.match(expectation); + if (matcher.test(actual)) { + assert.pass("match"); + } else { + var formatted = [ + "expected value to match", + " expected = " + sinon.format(expectation), + " actual = " + sinon.format(actual) + ] + failAssertion(this, formatted.join("\n")); + } + } + }; + + mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); + mirrorPropAsAssertion("notCalled", function (spy) { + return !spy.called; + }, "expected %n to not have been called but was called %c%C"); + mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); + mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); + mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); + mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); + mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); + mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); + mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); + mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); + mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); + mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); + mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); + mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); + mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); + mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); + mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); + mirrorPropAsAssertion("threw", "%n did not throw exception%C"); + mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); + + sinon.assert = assert; + return assert; + } + + var isNode = typeof module !== "undefined" && module.exports && typeof require == "function"; + var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd; + + function loadDependencies(require, exports, module) { + var sinon = require("./util/core"); + require("./match"); + require("./format"); + module.exports = makeApi(sinon); + } + + if (isAMD) { + define(loadDependencies); + } else if (isNode) { + loadDependencies(require, module.exports, module); + } else if (!sinon) { + return; + } else { + makeApi(sinon); + } + +}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); + + return sinon; +})); diff --git a/core/js/tests/lib/sinon-1.7.3.js b/core/js/tests/lib/sinon-1.7.3.js deleted file mode 100644 index 26c4bd9c46b..00000000000 --- a/core/js/tests/lib/sinon-1.7.3.js +++ /dev/null @@ -1,4290 +0,0 @@ -/** - * Sinon.JS 1.7.3, 2013/06/20 - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS - * - * (The BSD License) - * - * Copyright (c) 2010-2013, Christian Johansen, christian@cjohansen.no - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * * Neither the name of Christian Johansen nor the names of his contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -this.sinon = (function () { -var buster = (function (setTimeout, B) { - var isNode = typeof require == "function" && typeof module == "object"; - var div = typeof document != "undefined" && document.createElement("div"); - var F = function () {}; - - var buster = { - bind: function bind(obj, methOrProp) { - var method = typeof methOrProp == "string" ? obj[methOrProp] : methOrProp; - var args = Array.prototype.slice.call(arguments, 2); - return function () { - var allArgs = args.concat(Array.prototype.slice.call(arguments)); - return method.apply(obj, allArgs); - }; - }, - - partial: function partial(fn) { - var args = [].slice.call(arguments, 1); - return function () { - return fn.apply(this, args.concat([].slice.call(arguments))); - }; - }, - - create: function create(object) { - F.prototype = object; - return new F(); - }, - - extend: function extend(target) { - if (!target) { return; } - for (var i = 1, l = arguments.length, prop; i < l; ++i) { - for (prop in arguments[i]) { - target[prop] = arguments[i][prop]; - } - } - return target; - }, - - nextTick: function nextTick(callback) { - if (typeof process != "undefined" && process.nextTick) { - return process.nextTick(callback); - } - setTimeout(callback, 0); - }, - - functionName: function functionName(func) { - if (!func) return ""; - if (func.displayName) return func.displayName; - if (func.name) return func.name; - var matches = func.toString().match(/function\s+([^\(]+)/m); - return matches && matches[1] || ""; - }, - - isNode: function isNode(obj) { - if (!div) return false; - try { - obj.appendChild(div); - obj.removeChild(div); - } catch (e) { - return false; - } - return true; - }, - - isElement: function isElement(obj) { - return obj && obj.nodeType === 1 && buster.isNode(obj); - }, - - isArray: function isArray(arr) { - return Object.prototype.toString.call(arr) == "[object Array]"; - }, - - flatten: function flatten(arr) { - var result = [], arr = arr || []; - for (var i = 0, l = arr.length; i < l; ++i) { - result = result.concat(buster.isArray(arr[i]) ? flatten(arr[i]) : arr[i]); - } - return result; - }, - - each: function each(arr, callback) { - for (var i = 0, l = arr.length; i < l; ++i) { - callback(arr[i]); - } - }, - - map: function map(arr, callback) { - var results = []; - for (var i = 0, l = arr.length; i < l; ++i) { - results.push(callback(arr[i])); - } - return results; - }, - - parallel: function parallel(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - callback = null; - } - } - if (fns.length == 0) { return cb(null, []); } - var remaining = fns.length, results = []; - function makeDone(num) { - return function done(err, result) { - if (err) { return cb(err); } - results[num] = result; - if (--remaining == 0) { cb(null, results); } - }; - } - for (var i = 0, l = fns.length; i < l; ++i) { - fns[i](makeDone(i)); - } - }, - - series: function series(fns, callback) { - function cb(err, res) { - if (typeof callback == "function") { - callback(err, res); - } - } - var remaining = fns.slice(); - var results = []; - function callNext() { - if (remaining.length == 0) return cb(null, results); - var promise = remaining.shift()(next); - if (promise && typeof promise.then == "function") { - promise.then(buster.partial(next, null), next); - } - } - function next(err, result) { - if (err) return cb(err); - results.push(result); - callNext(); - } - callNext(); - }, - - countdown: function countdown(num, done) { - return function () { - if (--num == 0) done(); - }; - } - }; - - if (typeof process === "object" && - typeof require === "function" && typeof module === "object") { - var crypto = require("crypto"); - var path = require("path"); - - buster.tmpFile = function (fileName) { - var hashed = crypto.createHash("sha1"); - hashed.update(fileName); - var tmpfileName = hashed.digest("hex"); - - if (process.platform == "win32") { - return path.join(process.env["TEMP"], tmpfileName); - } else { - return path.join("/tmp", tmpfileName); - } - }; - } - - if (Array.prototype.some) { - buster.some = function (arr, fn, thisp) { - return arr.some(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some - buster.some = function (arr, fun, thisp) { - if (arr == null) { throw new TypeError(); } - arr = Object(arr); - var len = arr.length >>> 0; - if (typeof fun !== "function") { throw new TypeError(); } - - for (var i = 0; i < len; i++) { - if (arr.hasOwnProperty(i) && fun.call(thisp, arr[i], i, arr)) { - return true; - } - } - - return false; - }; - } - - if (Array.prototype.filter) { - buster.filter = function (arr, fn, thisp) { - return arr.filter(fn, thisp); - }; - } else { - // https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter - buster.filter = function (fn, thisp) { - if (this == null) { throw new TypeError(); } - - var t = Object(this); - var len = t.length >>> 0; - if (typeof fn != "function") { throw new TypeError(); } - - var res = []; - for (var i = 0; i < len; i++) { - if (i in t) { - var val = t[i]; // in case fun mutates this - if (fn.call(thisp, val, i, t)) { res.push(val); } - } - } - - return res; - }; - } - - if (isNode) { - module.exports = buster; - buster.eventEmitter = require("./buster-event-emitter"); - Object.defineProperty(buster, "defineVersionGetter", { - get: function () { - return require("./define-version-getter"); - } - }); - } - - return buster.extend(B || {}, buster); -}(setTimeout, buster)); -if (typeof buster === "undefined") { - var buster = {}; -} - -if (typeof module === "object" && typeof require === "function") { - buster = require("buster-core"); -} - -buster.format = buster.format || {}; -buster.format.excludeConstructors = ["Object", /^.$/]; -buster.format.quoteStrings = true; - -buster.format.ascii = (function () { - - var hasOwn = Object.prototype.hasOwnProperty; - - var specialObjects = []; - if (typeof global != "undefined") { - specialObjects.push({ obj: global, value: "[object global]" }); - } - if (typeof document != "undefined") { - specialObjects.push({ obj: document, value: "[object HTMLDocument]" }); - } - if (typeof window != "undefined") { - specialObjects.push({ obj: window, value: "[object Window]" }); - } - - function keys(object) { - var k = Object.keys && Object.keys(object) || []; - - if (k.length == 0) { - for (var prop in object) { - if (hasOwn.call(object, prop)) { - k.push(prop); - } - } - } - - return k.sort(); - } - - function isCircular(object, objects) { - if (typeof object != "object") { - return false; - } - - for (var i = 0, l = objects.length; i < l; ++i) { - if (objects[i] === object) { - return true; - } - } - - return false; - } - - function ascii(object, processed, indent) { - if (typeof object == "string") { - var quote = typeof this.quoteStrings != "boolean" || this.quoteStrings; - return processed || quote ? '"' + object + '"' : object; - } - - if (typeof object == "function" && !(object instanceof RegExp)) { - return ascii.func(object); - } - - processed = processed || []; - - if (isCircular(object, processed)) { - return "[Circular]"; - } - - if (Object.prototype.toString.call(object) == "[object Array]") { - return ascii.array.call(this, object, processed); - } - - if (!object) { - return "" + object; - } - - if (buster.isElement(object)) { - return ascii.element(object); - } - - if (typeof object.toString == "function" && - object.toString !== Object.prototype.toString) { - return object.toString(); - } - - for (var i = 0, l = specialObjects.length; i < l; i++) { - if (object === specialObjects[i].obj) { - return specialObjects[i].value; - } - } - - return ascii.object.call(this, object, processed, indent); - } - - ascii.func = function (func) { - return "function " + buster.functionName(func) + "() {}"; - }; - - ascii.array = function (array, processed) { - processed = processed || []; - processed.push(array); - var pieces = []; - - for (var i = 0, l = array.length; i < l; ++i) { - pieces.push(ascii.call(this, array[i], processed)); - } - - return "[" + pieces.join(", ") + "]"; - }; - - ascii.object = function (object, processed, indent) { - processed = processed || []; - processed.push(object); - indent = indent || 0; - var pieces = [], properties = keys(object), prop, str, obj; - var is = ""; - var length = 3; - - for (var i = 0, l = indent; i < l; ++i) { - is += " "; - } - - for (i = 0, l = properties.length; i < l; ++i) { - prop = properties[i]; - obj = object[prop]; - - if (isCircular(obj, processed)) { - str = "[Circular]"; - } else { - str = ascii.call(this, obj, processed, indent + 2); - } - - str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str; - length += str.length; - pieces.push(str); - } - - var cons = ascii.constructorName.call(this, object); - var prefix = cons ? "[" + cons + "] " : "" - - return (length + indent) > 80 ? - prefix + "{\n " + is + pieces.join(",\n " + is) + "\n" + is + "}" : - prefix + "{ " + pieces.join(", ") + " }"; - }; - - ascii.element = function (element) { - var tagName = element.tagName.toLowerCase(); - var attrs = element.attributes, attribute, pairs = [], attrName; - - for (var i = 0, l = attrs.length; i < l; ++i) { - attribute = attrs.item(i); - attrName = attribute.nodeName.toLowerCase().replace("html:", ""); - - if (attrName == "contenteditable" && attribute.nodeValue == "inherit") { - continue; - } - - if (!!attribute.nodeValue) { - pairs.push(attrName + "=\"" + attribute.nodeValue + "\""); - } - } - - var formatted = "<" + tagName + (pairs.length > 0 ? " " : ""); - var content = element.innerHTML; - - if (content.length > 20) { - content = content.substr(0, 20) + "[...]"; - } - - var res = formatted + pairs.join(" ") + ">" + content + "</" + tagName + ">"; - - return res.replace(/ contentEditable="inherit"/, ""); - }; - - ascii.constructorName = function (object) { - var name = buster.functionName(object && object.constructor); - var excludes = this.excludeConstructors || buster.format.excludeConstructors || []; - - for (var i = 0, l = excludes.length; i < l; ++i) { - if (typeof excludes[i] == "string" && excludes[i] == name) { - return ""; - } else if (excludes[i].test && excludes[i].test(name)) { - return ""; - } - } - - return name; - }; - - return ascii; -}()); - -if (typeof module != "undefined") { - module.exports = buster.format; -} -/*jslint eqeqeq: false, onevar: false, forin: true, nomen: false, regexp: false, plusplus: false*/ -/*global module, require, __dirname, document*/ -/** - * Sinon core utilities. For internal use only. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -var sinon = (function (buster) { - var div = typeof document != "undefined" && document.createElement("div"); - var hasOwn = Object.prototype.hasOwnProperty; - - function isDOMNode(obj) { - var success = false; - - try { - obj.appendChild(div); - success = div.parentNode == obj; - } catch (e) { - return false; - } finally { - try { - obj.removeChild(div); - } catch (e) { - // Remove failed, not much we can do about that - } - } - - return success; - } - - function isElement(obj) { - return div && obj && obj.nodeType === 1 && isDOMNode(obj); - } - - function isFunction(obj) { - return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply); - } - - function mirrorProperties(target, source) { - for (var prop in source) { - if (!hasOwn.call(target, prop)) { - target[prop] = source[prop]; - } - } - } - - function isRestorable (obj) { - return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon; - } - - var sinon = { - wrapMethod: function wrapMethod(object, property, method) { - if (!object) { - throw new TypeError("Should wrap property of object"); - } - - if (typeof method != "function") { - throw new TypeError("Method wrapper should be function"); - } - - var wrappedMethod = object[property]; - - if (!isFunction(wrappedMethod)) { - throw new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " + - property + " as function"); - } - - if (wrappedMethod.restore && wrappedMethod.restore.sinon) { - throw new TypeError("Attempted to wrap " + property + " which is already wrapped"); - } - - if (wrappedMethod.calledBefore) { - var verb = !!wrappedMethod.returns ? "stubbed" : "spied on"; - throw new TypeError("Attempted to wrap " + property + " which is already " + verb); - } - - // IE 8 does not support hasOwnProperty on the window object. - var owned = hasOwn.call(object, property); - object[property] = method; - method.displayName = property; - - method.restore = function () { - // For prototype properties try to reset by delete first. - // If this fails (ex: localStorage on mobile safari) then force a reset - // via direct assignment. - if (!owned) { - delete object[property]; - } - if (object[property] === method) { - object[property] = wrappedMethod; - } - }; - - method.restore.sinon = true; - mirrorProperties(method, wrappedMethod); - - return method; - }, - - extend: function extend(target) { - for (var i = 1, l = arguments.length; i < l; i += 1) { - for (var prop in arguments[i]) { - if (arguments[i].hasOwnProperty(prop)) { - target[prop] = arguments[i][prop]; - } - - // DONT ENUM bug, only care about toString - if (arguments[i].hasOwnProperty("toString") && - arguments[i].toString != target.toString) { - target.toString = arguments[i].toString; - } - } - } - - return target; - }, - - create: function create(proto) { - var F = function () {}; - F.prototype = proto; - return new F(); - }, - - deepEqual: function deepEqual(a, b) { - if (sinon.match && sinon.match.isMatcher(a)) { - return a.test(b); - } - if (typeof a != "object" || typeof b != "object") { - return a === b; - } - - if (isElement(a) || isElement(b)) { - return a === b; - } - - if (a === b) { - return true; - } - - if ((a === null && b !== null) || (a !== null && b === null)) { - return false; - } - - var aString = Object.prototype.toString.call(a); - if (aString != Object.prototype.toString.call(b)) { - return false; - } - - if (aString == "[object Array]") { - if (a.length !== b.length) { - return false; - } - - for (var i = 0, l = a.length; i < l; i += 1) { - if (!deepEqual(a[i], b[i])) { - return false; - } - } - - return true; - } - - if (aString == "[object Date]") { - return a.valueOf() === b.valueOf(); - } - - var prop, aLength = 0, bLength = 0; - - for (prop in a) { - aLength += 1; - - if (!deepEqual(a[prop], b[prop])) { - return false; - } - } - - for (prop in b) { - bLength += 1; - } - - return aLength == bLength; - }, - - functionName: function functionName(func) { - var name = func.displayName || func.name; - - // Use function decomposition as a last resort to get function - // name. Does not rely on function decomposition to work - if it - // doesn't debugging will be slightly less informative - // (i.e. toString will say 'spy' rather than 'myFunc'). - if (!name) { - var matches = func.toString().match(/function ([^\s\(]+)/); - name = matches && matches[1]; - } - - return name; - }, - - functionToString: function toString() { - if (this.getCall && this.callCount) { - var thisValue, prop, i = this.callCount; - - while (i--) { - thisValue = this.getCall(i).thisValue; - - for (prop in thisValue) { - if (thisValue[prop] === this) { - return prop; - } - } - } - } - - return this.displayName || "sinon fake"; - }, - - getConfig: function (custom) { - var config = {}; - custom = custom || {}; - var defaults = sinon.defaultConfig; - - for (var prop in defaults) { - if (defaults.hasOwnProperty(prop)) { - config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop]; - } - } - - return config; - }, - - format: function (val) { - return "" + val; - }, - - defaultConfig: { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }, - - timesInWords: function timesInWords(count) { - return count == 1 && "once" || - count == 2 && "twice" || - count == 3 && "thrice" || - (count || 0) + " times"; - }, - - calledInOrder: function (spies) { - for (var i = 1, l = spies.length; i < l; i++) { - if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) { - return false; - } - } - - return true; - }, - - orderByFirstCall: function (spies) { - return spies.sort(function (a, b) { - // uuid, won't ever be equal - var aCall = a.getCall(0); - var bCall = b.getCall(0); - var aId = aCall && aCall.callId || -1; - var bId = bCall && bCall.callId || -1; - - return aId < bId ? -1 : 1; - }); - }, - - log: function () {}, - - logError: function (label, err) { - var msg = label + " threw exception: " - sinon.log(msg + "[" + err.name + "] " + err.message); - if (err.stack) { sinon.log(err.stack); } - - setTimeout(function () { - err.message = msg + err.message; - throw err; - }, 0); - }, - - typeOf: function (value) { - if (value === null) { - return "null"; - } - else if (value === undefined) { - return "undefined"; - } - var string = Object.prototype.toString.call(value); - return string.substring(8, string.length - 1).toLowerCase(); - }, - - createStubInstance: function (constructor) { - if (typeof constructor !== "function") { - throw new TypeError("The constructor should be a function."); - } - return sinon.stub(sinon.create(constructor.prototype)); - }, - - restore: function (object) { - if (object !== null && typeof object === "object") { - for (var prop in object) { - if (isRestorable(object[prop])) { - object[prop].restore(); - } - } - } - else if (isRestorable(object)) { - object.restore(); - } - } - }; - - var isNode = typeof module == "object" && typeof require == "function"; - - if (isNode) { - try { - buster = { format: require("buster-format") }; - } catch (e) {} - module.exports = sinon; - module.exports.spy = require("./sinon/spy"); - module.exports.stub = require("./sinon/stub"); - module.exports.mock = require("./sinon/mock"); - module.exports.collection = require("./sinon/collection"); - module.exports.assert = require("./sinon/assert"); - module.exports.sandbox = require("./sinon/sandbox"); - module.exports.test = require("./sinon/test"); - module.exports.testCase = require("./sinon/test_case"); - module.exports.assert = require("./sinon/assert"); - module.exports.match = require("./sinon/match"); - } - - if (buster) { - var formatter = sinon.create(buster.format); - formatter.quoteStrings = false; - sinon.format = function () { - return formatter.ascii.apply(formatter, arguments); - }; - } else if (isNode) { - try { - var util = require("util"); - sinon.format = function (value) { - return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value; - }; - } catch (e) { - /* Node, but no util module - would be very old, but better safe than - sorry */ - } - } - - return sinon; -}(typeof buster == "object" && buster)); - -/* @depend ../sinon.js */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Match functions - * - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2012 Maximilian Antoni - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function assertType(value, type, name) { - var actual = sinon.typeOf(value); - if (actual !== type) { - throw new TypeError("Expected type of " + name + " to be " + - type + ", but was " + actual); - } - } - - var matcher = { - toString: function () { - return this.message; - } - }; - - function isMatcher(object) { - return matcher.isPrototypeOf(object); - } - - function matchObject(expectation, actual) { - if (actual === null || actual === undefined) { - return false; - } - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - var exp = expectation[key]; - var act = actual[key]; - if (match.isMatcher(exp)) { - if (!exp.test(act)) { - return false; - } - } else if (sinon.typeOf(exp) === "object") { - if (!matchObject(exp, act)) { - return false; - } - } else if (!sinon.deepEqual(exp, act)) { - return false; - } - } - } - return true; - } - - matcher.or = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var or = sinon.create(matcher); - or.test = function (actual) { - return m1.test(actual) || m2.test(actual); - }; - or.message = m1.message + ".or(" + m2.message + ")"; - return or; - }; - - matcher.and = function (m2) { - if (!isMatcher(m2)) { - throw new TypeError("Matcher expected"); - } - var m1 = this; - var and = sinon.create(matcher); - and.test = function (actual) { - return m1.test(actual) && m2.test(actual); - }; - and.message = m1.message + ".and(" + m2.message + ")"; - return and; - }; - - var match = function (expectation, message) { - var m = sinon.create(matcher); - var type = sinon.typeOf(expectation); - switch (type) { - case "object": - if (typeof expectation.test === "function") { - m.test = function (actual) { - return expectation.test(actual) === true; - }; - m.message = "match(" + sinon.functionName(expectation.test) + ")"; - return m; - } - var str = []; - for (var key in expectation) { - if (expectation.hasOwnProperty(key)) { - str.push(key + ": " + expectation[key]); - } - } - m.test = function (actual) { - return matchObject(expectation, actual); - }; - m.message = "match(" + str.join(", ") + ")"; - break; - case "number": - m.test = function (actual) { - return expectation == actual; - }; - break; - case "string": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return actual.indexOf(expectation) !== -1; - }; - m.message = "match(\"" + expectation + "\")"; - break; - case "regexp": - m.test = function (actual) { - if (typeof actual !== "string") { - return false; - } - return expectation.test(actual); - }; - break; - case "function": - m.test = expectation; - if (message) { - m.message = message; - } else { - m.message = "match(" + sinon.functionName(expectation) + ")"; - } - break; - default: - m.test = function (actual) { - return sinon.deepEqual(expectation, actual); - }; - } - if (!m.message) { - m.message = "match(" + expectation + ")"; - } - return m; - }; - - match.isMatcher = isMatcher; - - match.any = match(function () { - return true; - }, "any"); - - match.defined = match(function (actual) { - return actual !== null && actual !== undefined; - }, "defined"); - - match.truthy = match(function (actual) { - return !!actual; - }, "truthy"); - - match.falsy = match(function (actual) { - return !actual; - }, "falsy"); - - match.same = function (expectation) { - return match(function (actual) { - return expectation === actual; - }, "same(" + expectation + ")"); - }; - - match.typeOf = function (type) { - assertType(type, "string", "type"); - return match(function (actual) { - return sinon.typeOf(actual) === type; - }, "typeOf(\"" + type + "\")"); - }; - - match.instanceOf = function (type) { - assertType(type, "function", "type"); - return match(function (actual) { - return actual instanceof type; - }, "instanceOf(" + sinon.functionName(type) + ")"); - }; - - function createPropertyMatcher(propertyTest, messagePrefix) { - return function (property, value) { - assertType(property, "string", "property"); - var onlyProperty = arguments.length === 1; - var message = messagePrefix + "(\"" + property + "\""; - if (!onlyProperty) { - message += ", " + value; - } - message += ")"; - return match(function (actual) { - if (actual === undefined || actual === null || - !propertyTest(actual, property)) { - return false; - } - return onlyProperty || sinon.deepEqual(value, actual[property]); - }, message); - }; - } - - match.has = createPropertyMatcher(function (actual, property) { - if (typeof actual === "object") { - return property in actual; - } - return actual[property] !== undefined; - }, "has"); - - match.hasOwn = createPropertyMatcher(function (actual, property) { - return actual.hasOwnProperty(property); - }, "hasOwn"); - - match.bool = match.typeOf("boolean"); - match.number = match.typeOf("number"); - match.string = match.typeOf("string"); - match.object = match.typeOf("object"); - match.func = match.typeOf("function"); - match.array = match.typeOf("array"); - match.regexp = match.typeOf("regexp"); - match.date = match.typeOf("date"); - - if (commonJSModule) { - module.exports = match; - } else { - sinon.match = match; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend match.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy calls - * - * @author Christian Johansen (christian@cjohansen.no) - * @author Maximilian Antoni (mail@maxantoni.de) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - * Copyright (c) 2013 Maximilian Antoni - */ - -var commonJSModule = typeof module == "object" && typeof require == "function"; - -if (!this.sinon && commonJSModule) { - var sinon = require("../sinon"); -} - -(function (sinon) { - function throwYieldError(proxy, text, args) { - var msg = sinon.functionName(proxy) + text; - if (args.length) { - msg += " Received [" + slice.call(args).join(", ") + "]"; - } - throw new Error(msg); - } - - var slice = Array.prototype.slice; - - var callProto = { - calledOn: function calledOn(thisValue) { - if (sinon.match && sinon.match.isMatcher(thisValue)) { - return thisValue.test(this.thisValue); - } - return this.thisValue === thisValue; - }, - - calledWith: function calledWith() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - if (!sinon.deepEqual(arguments[i], this.args[i])) { - return false; - } - } - - return true; - }, - - calledWithMatch: function calledWithMatch() { - for (var i = 0, l = arguments.length; i < l; i += 1) { - var actual = this.args[i]; - var expectation = arguments[i]; - if (!sinon.match || !sinon.match(expectation).test(actual)) { - return false; - } - } - return true; - }, - - calledWithExactly: function calledWithExactly() { - return arguments.length == this.args.length && - this.calledWith.apply(this, arguments); - }, - - notCalledWith: function notCalledWith() { - return !this.calledWith.apply(this, arguments); - }, - - notCalledWithMatch: function notCalledWithMatch() { - return !this.calledWithMatch.apply(this, arguments); - }, - - returned: function returned(value) { - return sinon.deepEqual(value, this.returnValue); - }, - - threw: function threw(error) { - if (typeof error === "undefined" || !this.exception) { - return !!this.exception; - } - - return this.exception === error || this.exception.name === error; - }, - - calledWithNew: function calledWithNew(thisValue) { - return this.thisValue instanceof this.proxy; - }, - - calledBefore: function (other) { - return this.callId < other.callId; - }, - - calledAfter: function (other) { - return this.callId > other.callId; - }, - - callArg: function (pos) { - this.args[pos](); - }, - - callArgOn: function (pos, thisValue) { - this.args[pos].apply(thisValue); - }, - - callArgWith: function (pos) { - this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1))); - }, - - callArgOnWith: function (pos, thisValue) { - var args = slice.call(arguments, 2); - this.args[pos].apply(thisValue, args); - }, - - "yield": function () { - this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0))); - }, - - yieldOn: function (thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (typeof args[i] === "function") { - args[i].apply(thisValue, slice.call(arguments, 1)); - return; - } - } - throwYieldError(this.proxy, " cannot yield since no callback was passed.", args); - }, - - yieldTo: function (prop) { - this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1))); - }, - - yieldToOn: function (prop, thisValue) { - var args = this.args; - for (var i = 0, l = args.length; i < l; ++i) { - if (args[i] && typeof args[i][prop] === "function") { - args[i][prop].apply(thisValue, slice.call(arguments, 2)); - return; - } - } - throwYieldError(this.proxy, " cannot yield to '" + prop + - "' since no callback was passed.", args); - }, - - toString: function () { - var callStr = this.proxy.toString() + "("; - var args = []; - - for (var i = 0, l = this.args.length; i < l; ++i) { - args.push(sinon.format(this.args[i])); - } - - callStr = callStr + args.join(", ") + ")"; - - if (typeof this.returnValue != "undefined") { - callStr += " => " + sinon.format(this.returnValue); - } - - if (this.exception) { - callStr += " !" + this.exception.name; - - if (this.exception.message) { - callStr += "(" + this.exception.message + ")"; - } - } - - return callStr; - } - }; - - callProto.invokeCallback = callProto.yield; - - function createSpyCall(spy, thisValue, args, returnValue, exception, id) { - if (typeof id !== "number") { - throw new TypeError("Call id is not a number"); - } - var proxyCall = sinon.create(callProto); - proxyCall.proxy = spy; - proxyCall.thisValue = thisValue; - proxyCall.args = args; - proxyCall.returnValue = returnValue; - proxyCall.exception = exception; - proxyCall.callId = id; - - return proxyCall; - }; - createSpyCall.toString = callProto.toString; // used by mocks - - sinon.spyCall = createSpyCall; -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Spy functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = Array.prototype.push; - var slice = Array.prototype.slice; - var callId = 0; - - function spy(object, property) { - if (!property && typeof object == "function") { - return spy.create(object); - } - - if (!object && !property) { - return spy.create(function () { }); - } - - var method = object[property]; - return sinon.wrapMethod(object, property, spy.create(method)); - } - - function matchingFake(fakes, args, strict) { - if (!fakes) { - return; - } - - var alen = args.length; - - for (var i = 0, l = fakes.length; i < l; i++) { - if (fakes[i].matches(args, strict)) { - return fakes[i]; - } - } - } - - function incrementCallCount() { - this.called = true; - this.callCount += 1; - this.notCalled = false; - this.calledOnce = this.callCount == 1; - this.calledTwice = this.callCount == 2; - this.calledThrice = this.callCount == 3; - } - - function createCallProperties() { - this.firstCall = this.getCall(0); - this.secondCall = this.getCall(1); - this.thirdCall = this.getCall(2); - this.lastCall = this.getCall(this.callCount - 1); - } - - var vars = "a,b,c,d,e,f,g,h,i,j,k,l"; - function createProxy(func) { - // Retain the function length: - var p; - if (func.length) { - eval("p = (function proxy(" + vars.substring(0, func.length * 2 - 1) + - ") { return p.invoke(func, this, slice.call(arguments)); });"); - } - else { - p = function proxy() { - return p.invoke(func, this, slice.call(arguments)); - }; - } - return p; - } - - var uuid = 0; - - // Public API - var spyApi = { - reset: function () { - this.called = false; - this.notCalled = true; - this.calledOnce = false; - this.calledTwice = false; - this.calledThrice = false; - this.callCount = 0; - this.firstCall = null; - this.secondCall = null; - this.thirdCall = null; - this.lastCall = null; - this.args = []; - this.returnValues = []; - this.thisValues = []; - this.exceptions = []; - this.callIds = []; - if (this.fakes) { - for (var i = 0; i < this.fakes.length; i++) { - this.fakes[i].reset(); - } - } - }, - - create: function create(func) { - var name; - - if (typeof func != "function") { - func = function () { }; - } else { - name = sinon.functionName(func); - } - - var proxy = createProxy(func); - - sinon.extend(proxy, spy); - delete proxy.create; - sinon.extend(proxy, func); - - proxy.reset(); - proxy.prototype = func.prototype; - proxy.displayName = name || "spy"; - proxy.toString = sinon.functionToString; - proxy._create = sinon.spy.create; - proxy.id = "spy#" + uuid++; - - return proxy; - }, - - invoke: function invoke(func, thisValue, args) { - var matching = matchingFake(this.fakes, args); - var exception, returnValue; - - incrementCallCount.call(this); - push.call(this.thisValues, thisValue); - push.call(this.args, args); - push.call(this.callIds, callId++); - - try { - if (matching) { - returnValue = matching.invoke(func, thisValue, args); - } else { - returnValue = (this.func || func).apply(thisValue, args); - } - } catch (e) { - push.call(this.returnValues, undefined); - exception = e; - throw e; - } finally { - push.call(this.exceptions, exception); - } - - push.call(this.returnValues, returnValue); - - createCallProperties.call(this); - - return returnValue; - }, - - getCall: function getCall(i) { - if (i < 0 || i >= this.callCount) { - return null; - } - - return sinon.spyCall(this, this.thisValues[i], this.args[i], - this.returnValues[i], this.exceptions[i], - this.callIds[i]); - }, - - calledBefore: function calledBefore(spyFn) { - if (!this.called) { - return false; - } - - if (!spyFn.called) { - return true; - } - - return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1]; - }, - - calledAfter: function calledAfter(spyFn) { - if (!this.called || !spyFn.called) { - return false; - } - - return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1]; - }, - - withArgs: function () { - var args = slice.call(arguments); - - if (this.fakes) { - var match = matchingFake(this.fakes, args, true); - - if (match) { - return match; - } - } else { - this.fakes = []; - } - - var original = this; - var fake = this._create(); - fake.matchingAguments = args; - push.call(this.fakes, fake); - - fake.withArgs = function () { - return original.withArgs.apply(original, arguments); - }; - - for (var i = 0; i < this.args.length; i++) { - if (fake.matches(this.args[i])) { - incrementCallCount.call(fake); - push.call(fake.thisValues, this.thisValues[i]); - push.call(fake.args, this.args[i]); - push.call(fake.returnValues, this.returnValues[i]); - push.call(fake.exceptions, this.exceptions[i]); - push.call(fake.callIds, this.callIds[i]); - } - } - createCallProperties.call(fake); - - return fake; - }, - - matches: function (args, strict) { - var margs = this.matchingAguments; - - if (margs.length <= args.length && - sinon.deepEqual(margs, args.slice(0, margs.length))) { - return !strict || margs.length == args.length; - } - }, - - printf: function (format) { - var spy = this; - var args = slice.call(arguments, 1); - var formatter; - - return (format || "").replace(/%(.)/g, function (match, specifyer) { - formatter = spyApi.formatters[specifyer]; - - if (typeof formatter == "function") { - return formatter.call(null, spy, args); - } else if (!isNaN(parseInt(specifyer), 10)) { - return sinon.format(args[specifyer - 1]); - } - - return "%" + specifyer; - }); - } - }; - - function delegateToCalls(method, matchAny, actual, notCalled) { - spyApi[method] = function () { - if (!this.called) { - if (notCalled) { - return notCalled.apply(this, arguments); - } - return false; - } - - var currentCall; - var matches = 0; - - for (var i = 0, l = this.callCount; i < l; i += 1) { - currentCall = this.getCall(i); - - if (currentCall[actual || method].apply(currentCall, arguments)) { - matches += 1; - - if (matchAny) { - return true; - } - } - } - - return matches === this.callCount; - }; - } - - delegateToCalls("calledOn", true); - delegateToCalls("alwaysCalledOn", false, "calledOn"); - delegateToCalls("calledWith", true); - delegateToCalls("calledWithMatch", true); - delegateToCalls("alwaysCalledWith", false, "calledWith"); - delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch"); - delegateToCalls("calledWithExactly", true); - delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly"); - delegateToCalls("neverCalledWith", false, "notCalledWith", - function () { return true; }); - delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch", - function () { return true; }); - delegateToCalls("threw", true); - delegateToCalls("alwaysThrew", false, "threw"); - delegateToCalls("returned", true); - delegateToCalls("alwaysReturned", false, "returned"); - delegateToCalls("calledWithNew", true); - delegateToCalls("alwaysCalledWithNew", false, "calledWithNew"); - delegateToCalls("callArg", false, "callArgWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgWith = spyApi.callArg; - delegateToCalls("callArgOn", false, "callArgOnWith", function () { - throw new Error(this.toString() + " cannot call arg since it was not yet invoked."); - }); - spyApi.callArgOnWith = spyApi.callArgOn; - delegateToCalls("yield", false, "yield", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - // "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode. - spyApi.invokeCallback = spyApi.yield; - delegateToCalls("yieldOn", false, "yieldOn", function () { - throw new Error(this.toString() + " cannot yield since it was not yet invoked."); - }); - delegateToCalls("yieldTo", false, "yieldTo", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - delegateToCalls("yieldToOn", false, "yieldToOn", function (property) { - throw new Error(this.toString() + " cannot yield to '" + property + - "' since it was not yet invoked."); - }); - - spyApi.formatters = { - "c": function (spy) { - return sinon.timesInWords(spy.callCount); - }, - - "n": function (spy) { - return spy.toString(); - }, - - "C": function (spy) { - var calls = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - var stringifiedCall = " " + spy.getCall(i).toString(); - if (/\n/.test(calls[i - 1])) { - stringifiedCall = "\n" + stringifiedCall; - } - push.call(calls, stringifiedCall); - } - - return calls.length > 0 ? "\n" + calls.join("\n") : ""; - }, - - "t": function (spy) { - var objects = []; - - for (var i = 0, l = spy.callCount; i < l; ++i) { - push.call(objects, sinon.format(spy.thisValues[i])); - } - - return objects.join(", "); - }, - - "*": function (spy, args) { - var formatted = []; - - for (var i = 0, l = args.length; i < l; ++i) { - push.call(formatted, sinon.format(args[i])); - } - - return formatted.join(", "); - } - }; - - sinon.extend(spy, spyApi); - - spy.spyCall = sinon.spyCall; - - if (commonJSModule) { - module.exports = spy; - } else { - sinon.spy = spy; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend spy.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global module, require, sinon*/ -/** - * Stub functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function stub(object, property, func) { - if (!!func && typeof func != "function") { - throw new TypeError("Custom stub should be function"); - } - - var wrapper; - - if (func) { - wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func; - } else { - wrapper = stub.create(); - } - - if (!object && !property) { - return sinon.stub.create(); - } - - if (!property && !!object && typeof object == "object") { - for (var prop in object) { - if (typeof object[prop] === "function") { - stub(object, prop); - } - } - - return object; - } - - return sinon.wrapMethod(object, property, wrapper); - } - - function getChangingValue(stub, property) { - var index = stub.callCount - 1; - var values = stub[property]; - var prop = index in values ? values[index] : values[values.length - 1]; - stub[property + "Last"] = prop; - - return prop; - } - - function getCallback(stub, args) { - var callArgAt = getChangingValue(stub, "callArgAts"); - - if (callArgAt < 0) { - var callArgProp = getChangingValue(stub, "callArgProps"); - - for (var i = 0, l = args.length; i < l; ++i) { - if (!callArgProp && typeof args[i] == "function") { - return args[i]; - } - - if (callArgProp && args[i] && - typeof args[i][callArgProp] == "function") { - return args[i][callArgProp]; - } - } - - return null; - } - - return args[callArgAt]; - } - - var join = Array.prototype.join; - - function getCallbackError(stub, func, args) { - if (stub.callArgAtsLast < 0) { - var msg; - - if (stub.callArgPropsLast) { - msg = sinon.functionName(stub) + - " expected to yield to '" + stub.callArgPropsLast + - "', but no object with such a property was passed." - } else { - msg = sinon.functionName(stub) + - " expected to yield, but no callback was passed." - } - - if (args.length > 0) { - msg += " Received [" + join.call(args, ", ") + "]"; - } - - return msg; - } - - return "argument at index " + stub.callArgAtsLast + " is not a function: " + func; - } - - var nextTick = (function () { - if (typeof process === "object" && typeof process.nextTick === "function") { - return process.nextTick; - } else if (typeof setImmediate === "function") { - return setImmediate; - } else { - return function (callback) { - setTimeout(callback, 0); - }; - } - })(); - - function callCallback(stub, args) { - if (stub.callArgAts.length > 0) { - var func = getCallback(stub, args); - - if (typeof func != "function") { - throw new TypeError(getCallbackError(stub, func, args)); - } - - var callbackArguments = getChangingValue(stub, "callbackArguments"); - var callbackContext = getChangingValue(stub, "callbackContexts"); - - if (stub.callbackAsync) { - nextTick(function() { - func.apply(callbackContext, callbackArguments); - }); - } else { - func.apply(callbackContext, callbackArguments); - } - } - } - - var uuid = 0; - - sinon.extend(stub, (function () { - var slice = Array.prototype.slice, proto; - - function throwsException(error, message) { - if (typeof error == "string") { - this.exception = new Error(message || ""); - this.exception.name = error; - } else if (!error) { - this.exception = new Error("Error"); - } else { - this.exception = error; - } - - return this; - } - - proto = { - create: function create() { - var functionStub = function () { - - callCallback(functionStub, arguments); - - if (functionStub.exception) { - throw functionStub.exception; - } else if (typeof functionStub.returnArgAt == 'number') { - return arguments[functionStub.returnArgAt]; - } else if (functionStub.returnThis) { - return this; - } - return functionStub.returnValue; - }; - - functionStub.id = "stub#" + uuid++; - var orig = functionStub; - functionStub = sinon.spy.create(functionStub); - functionStub.func = orig; - - functionStub.callArgAts = []; - functionStub.callbackArguments = []; - functionStub.callbackContexts = []; - functionStub.callArgProps = []; - - sinon.extend(functionStub, stub); - functionStub._create = sinon.stub.create; - functionStub.displayName = "stub"; - functionStub.toString = sinon.functionToString; - - return functionStub; - }, - - resetBehavior: function () { - var i; - - this.callArgAts = []; - this.callbackArguments = []; - this.callbackContexts = []; - this.callArgProps = []; - - delete this.returnValue; - delete this.returnArgAt; - this.returnThis = false; - - if (this.fakes) { - for (i = 0; i < this.fakes.length; i++) { - this.fakes[i].resetBehavior(); - } - } - }, - - returns: function returns(value) { - this.returnValue = value; - - return this; - }, - - returnsArg: function returnsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.returnArgAt = pos; - - return this; - }, - - returnsThis: function returnsThis() { - this.returnThis = true; - - return this; - }, - - "throws": throwsException, - throwsException: throwsException, - - callsArg: function callsArg(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOn: function callsArgOn(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push([]); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgWith: function callsArgWith(pos) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - callsArgOnWith: function callsArgWith(pos, context) { - if (typeof pos != "number") { - throw new TypeError("argument index is not number"); - } - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(pos); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yields: function () { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 0)); - this.callbackContexts.push(undefined); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsOn: function (context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(context); - this.callArgProps.push(undefined); - - return this; - }, - - yieldsTo: function (prop) { - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 1)); - this.callbackContexts.push(undefined); - this.callArgProps.push(prop); - - return this; - }, - - yieldsToOn: function (prop, context) { - if (typeof context != "object") { - throw new TypeError("argument context is not an object"); - } - - this.callArgAts.push(-1); - this.callbackArguments.push(slice.call(arguments, 2)); - this.callbackContexts.push(context); - this.callArgProps.push(prop); - - return this; - } - }; - - // create asynchronous versions of callsArg* and yields* methods - for (var method in proto) { - // need to avoid creating anotherasync versions of the newly added async methods - if (proto.hasOwnProperty(method) && - method.match(/^(callsArg|yields|thenYields$)/) && - !method.match(/Async/)) { - proto[method + 'Async'] = (function (syncFnName) { - return function () { - this.callbackAsync = true; - return this[syncFnName].apply(this, arguments); - }; - })(method); - } - } - - return proto; - - }())); - - if (commonJSModule) { - module.exports = stub; - } else { - sinon.stub = stub; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false*/ -/*global module, require, sinon*/ -/** - * Mock functions. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function mock(object) { - if (!object) { - return sinon.expectation.create("Anonymous mock"); - } - - return mock.create(object); - } - - sinon.mock = mock; - - sinon.extend(mock, (function () { - function each(collection, callback) { - if (!collection) { - return; - } - - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - - return { - create: function create(object) { - if (!object) { - throw new TypeError("object is null"); - } - - var mockObject = sinon.extend({}, mock); - mockObject.object = object; - delete mockObject.create; - - return mockObject; - }, - - expects: function expects(method) { - if (!method) { - throw new TypeError("method is falsy"); - } - - if (!this.expectations) { - this.expectations = {}; - this.proxies = []; - } - - if (!this.expectations[method]) { - this.expectations[method] = []; - var mockObject = this; - - sinon.wrapMethod(this.object, method, function () { - return mockObject.invokeMethod(method, this, arguments); - }); - - push.call(this.proxies, method); - } - - var expectation = sinon.expectation.create(method); - push.call(this.expectations[method], expectation); - - return expectation; - }, - - restore: function restore() { - var object = this.object; - - each(this.proxies, function (proxy) { - if (typeof object[proxy].restore == "function") { - object[proxy].restore(); - } - }); - }, - - verify: function verify() { - var expectations = this.expectations || {}; - var messages = [], met = []; - - each(this.proxies, function (proxy) { - each(expectations[proxy], function (expectation) { - if (!expectation.met()) { - push.call(messages, expectation.toString()); - } else { - push.call(met, expectation.toString()); - } - }); - }); - - this.restore(); - - if (messages.length > 0) { - sinon.expectation.fail(messages.concat(met).join("\n")); - } else { - sinon.expectation.pass(messages.concat(met).join("\n")); - } - - return true; - }, - - invokeMethod: function invokeMethod(method, thisValue, args) { - var expectations = this.expectations && this.expectations[method]; - var length = expectations && expectations.length || 0, i; - - for (i = 0; i < length; i += 1) { - if (!expectations[i].met() && - expectations[i].allowsCall(thisValue, args)) { - return expectations[i].apply(thisValue, args); - } - } - - var messages = [], available, exhausted = 0; - - for (i = 0; i < length; i += 1) { - if (expectations[i].allowsCall(thisValue, args)) { - available = available || expectations[i]; - } else { - exhausted += 1; - } - push.call(messages, " " + expectations[i].toString()); - } - - if (exhausted === 0) { - return available.apply(thisValue, args); - } - - messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({ - proxy: method, - args: args - })); - - sinon.expectation.fail(messages.join("\n")); - } - }; - }())); - - var times = sinon.timesInWords; - - sinon.expectation = (function () { - var slice = Array.prototype.slice; - var _invoke = sinon.spy.invoke; - - function callCountInWords(callCount) { - if (callCount == 0) { - return "never called"; - } else { - return "called " + times(callCount); - } - } - - function expectedCallCountInWords(expectation) { - var min = expectation.minCalls; - var max = expectation.maxCalls; - - if (typeof min == "number" && typeof max == "number") { - var str = times(min); - - if (min != max) { - str = "at least " + str + " and at most " + times(max); - } - - return str; - } - - if (typeof min == "number") { - return "at least " + times(min); - } - - return "at most " + times(max); - } - - function receivedMinCalls(expectation) { - var hasMinLimit = typeof expectation.minCalls == "number"; - return !hasMinLimit || expectation.callCount >= expectation.minCalls; - } - - function receivedMaxCalls(expectation) { - if (typeof expectation.maxCalls != "number") { - return false; - } - - return expectation.callCount == expectation.maxCalls; - } - - return { - minCalls: 1, - maxCalls: 1, - - create: function create(methodName) { - var expectation = sinon.extend(sinon.stub.create(), sinon.expectation); - delete expectation.create; - expectation.method = methodName; - - return expectation; - }, - - invoke: function invoke(func, thisValue, args) { - this.verifyCallAllowed(thisValue, args); - - return _invoke.apply(this, arguments); - }, - - atLeast: function atLeast(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.maxCalls = null; - this.limitsSet = true; - } - - this.minCalls = num; - - return this; - }, - - atMost: function atMost(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not number"); - } - - if (!this.limitsSet) { - this.minCalls = null; - this.limitsSet = true; - } - - this.maxCalls = num; - - return this; - }, - - never: function never() { - return this.exactly(0); - }, - - once: function once() { - return this.exactly(1); - }, - - twice: function twice() { - return this.exactly(2); - }, - - thrice: function thrice() { - return this.exactly(3); - }, - - exactly: function exactly(num) { - if (typeof num != "number") { - throw new TypeError("'" + num + "' is not a number"); - } - - this.atLeast(num); - return this.atMost(num); - }, - - met: function met() { - return !this.failed && receivedMinCalls(this); - }, - - verifyCallAllowed: function verifyCallAllowed(thisValue, args) { - if (receivedMaxCalls(this)) { - this.failed = true; - sinon.expectation.fail(this.method + " already called " + times(this.maxCalls)); - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " + - this.expectedThis); - } - - if (!("expectedArguments" in this)) { - return; - } - - if (!args) { - sinon.expectation.fail(this.method + " received no arguments, expected " + - sinon.format(this.expectedArguments)); - } - - if (args.length < this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) + - "), expected " + sinon.format(this.expectedArguments)); - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) + - ", expected " + sinon.format(this.expectedArguments)); - } - } - }, - - allowsCall: function allowsCall(thisValue, args) { - if (this.met() && receivedMaxCalls(this)) { - return false; - } - - if ("expectedThis" in this && this.expectedThis !== thisValue) { - return false; - } - - if (!("expectedArguments" in this)) { - return true; - } - - args = args || []; - - if (args.length < this.expectedArguments.length) { - return false; - } - - if (this.expectsExactArgCount && - args.length != this.expectedArguments.length) { - return false; - } - - for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) { - if (!sinon.deepEqual(this.expectedArguments[i], args[i])) { - return false; - } - } - - return true; - }, - - withArgs: function withArgs() { - this.expectedArguments = slice.call(arguments); - return this; - }, - - withExactArgs: function withExactArgs() { - this.withArgs.apply(this, arguments); - this.expectsExactArgCount = true; - return this; - }, - - on: function on(thisValue) { - this.expectedThis = thisValue; - return this; - }, - - toString: function () { - var args = (this.expectedArguments || []).slice(); - - if (!this.expectsExactArgCount) { - push.call(args, "[...]"); - } - - var callStr = sinon.spyCall.toString.call({ - proxy: this.method || "anonymous mock expectation", - args: args - }); - - var message = callStr.replace(", [...", "[, ...") + " " + - expectedCallCountInWords(this); - - if (this.met()) { - return "Expectation met: " + message; - } - - return "Expected " + message + " (" + - callCountInWords(this.callCount) + ")"; - }, - - verify: function verify() { - if (!this.met()) { - sinon.expectation.fail(this.toString()); - } else { - sinon.expectation.pass(this.toString()); - } - - return true; - }, - - pass: function(message) { - sinon.assert.pass(message); - }, - fail: function (message) { - var exception = new Error(message); - exception.name = "ExpectationError"; - - throw exception; - } - }; - }()); - - if (commonJSModule) { - module.exports = mock; - } else { - sinon.mock = mock; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true*/ -/*global module, require, sinon*/ -/** - * Collections of stubs, spies and mocks. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var push = [].push; - var hasOwnProperty = Object.prototype.hasOwnProperty; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function getFakes(fakeCollection) { - if (!fakeCollection.fakes) { - fakeCollection.fakes = []; - } - - return fakeCollection.fakes; - } - - function each(fakeCollection, method) { - var fakes = getFakes(fakeCollection); - - for (var i = 0, l = fakes.length; i < l; i += 1) { - if (typeof fakes[i][method] == "function") { - fakes[i][method](); - } - } - } - - function compact(fakeCollection) { - var fakes = getFakes(fakeCollection); - var i = 0; - while (i < fakes.length) { - fakes.splice(i, 1); - } - } - - var collection = { - verify: function resolve() { - each(this, "verify"); - }, - - restore: function restore() { - each(this, "restore"); - compact(this); - }, - - verifyAndRestore: function verifyAndRestore() { - var exception; - - try { - this.verify(); - } catch (e) { - exception = e; - } - - this.restore(); - - if (exception) { - throw exception; - } - }, - - add: function add(fake) { - push.call(getFakes(this), fake); - return fake; - }, - - spy: function spy() { - return this.add(sinon.spy.apply(sinon, arguments)); - }, - - stub: function stub(object, property, value) { - if (property) { - var original = object[property]; - - if (typeof original != "function") { - if (!hasOwnProperty.call(object, property)) { - throw new TypeError("Cannot stub non-existent own property " + property); - } - - object[property] = value; - - return this.add({ - restore: function () { - object[property] = original; - } - }); - } - } - if (!property && !!object && typeof object == "object") { - var stubbedObj = sinon.stub.apply(sinon, arguments); - - for (var prop in stubbedObj) { - if (typeof stubbedObj[prop] === "function") { - this.add(stubbedObj[prop]); - } - } - - return stubbedObj; - } - - return this.add(sinon.stub.apply(sinon, arguments)); - }, - - mock: function mock() { - return this.add(sinon.mock.apply(sinon, arguments)); - }, - - inject: function inject(obj) { - var col = this; - - obj.spy = function () { - return col.spy.apply(col, arguments); - }; - - obj.stub = function () { - return col.stub.apply(col, arguments); - }; - - obj.mock = function () { - return col.mock.apply(col, arguments); - }; - - return obj; - } - }; - - if (commonJSModule) { - module.exports = collection; - } else { - sinon.collection = collection; - } -}(typeof sinon == "object" && sinon || null)); - -/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/ -/*global module, require, window*/ -/** - * Fake timer API - * setTimeout - * setInterval - * clearTimeout - * clearInterval - * tick - * reset - * Date - * - * Inspired by jsUnitMockTimeOut from JsUnit - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -(function (global) { - var id = 1; - - function addTimer(args, recurring) { - if (args.length === 0) { - throw new Error("Function requires at least 1 parameter"); - } - - var toId = id++; - var delay = args[1] || 0; - - if (!this.timeouts) { - this.timeouts = {}; - } - - this.timeouts[toId] = { - id: toId, - func: args[0], - callAt: this.now + delay, - invokeArgs: Array.prototype.slice.call(args, 2) - }; - - if (recurring === true) { - this.timeouts[toId].interval = delay; - } - - return toId; - } - - function parseTime(str) { - if (!str) { - return 0; - } - - var strings = str.split(":"); - var l = strings.length, i = l; - var ms = 0, parsed; - - if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) { - throw new Error("tick only understands numbers and 'h:m:s'"); - } - - while (i--) { - parsed = parseInt(strings[i], 10); - - if (parsed >= 60) { - throw new Error("Invalid time " + str); - } - - ms += parsed * Math.pow(60, (l - i - 1)); - } - - return ms * 1000; - } - - function createObject(object) { - var newObject; - - if (Object.create) { - newObject = Object.create(object); - } else { - var F = function () {}; - F.prototype = object; - newObject = new F(); - } - - newObject.Date.clock = newObject; - return newObject; - } - - sinon.clock = { - now: 0, - - create: function create(now) { - var clock = createObject(this); - - if (typeof now == "number") { - clock.now = now; - } - - if (!!now && typeof now == "object") { - throw new TypeError("now should be milliseconds since UNIX epoch"); - } - - return clock; - }, - - setTimeout: function setTimeout(callback, timeout) { - return addTimer.call(this, arguments, false); - }, - - clearTimeout: function clearTimeout(timerId) { - if (!this.timeouts) { - this.timeouts = []; - } - - if (timerId in this.timeouts) { - delete this.timeouts[timerId]; - } - }, - - setInterval: function setInterval(callback, timeout) { - return addTimer.call(this, arguments, true); - }, - - clearInterval: function clearInterval(timerId) { - this.clearTimeout(timerId); - }, - - tick: function tick(ms) { - ms = typeof ms == "number" ? ms : parseTime(ms); - var tickFrom = this.now, tickTo = this.now + ms, previous = this.now; - var timer = this.firstTimerInRange(tickFrom, tickTo); - - var firstException; - while (timer && tickFrom <= tickTo) { - if (this.timeouts[timer.id]) { - tickFrom = this.now = timer.callAt; - try { - this.callTimer(timer); - } catch (e) { - firstException = firstException || e; - } - } - - timer = this.firstTimerInRange(previous, tickTo); - previous = tickFrom; - } - - this.now = tickTo; - - if (firstException) { - throw firstException; - } - - return this.now; - }, - - firstTimerInRange: function (from, to) { - var timer, smallest, originalTimer; - - for (var id in this.timeouts) { - if (this.timeouts.hasOwnProperty(id)) { - if (this.timeouts[id].callAt < from || this.timeouts[id].callAt > to) { - continue; - } - - if (!smallest || this.timeouts[id].callAt < smallest) { - originalTimer = this.timeouts[id]; - smallest = this.timeouts[id].callAt; - - timer = { - func: this.timeouts[id].func, - callAt: this.timeouts[id].callAt, - interval: this.timeouts[id].interval, - id: this.timeouts[id].id, - invokeArgs: this.timeouts[id].invokeArgs - }; - } - } - } - - return timer || null; - }, - - callTimer: function (timer) { - if (typeof timer.interval == "number") { - this.timeouts[timer.id].callAt += timer.interval; - } else { - delete this.timeouts[timer.id]; - } - - try { - if (typeof timer.func == "function") { - timer.func.apply(null, timer.invokeArgs); - } else { - eval(timer.func); - } - } catch (e) { - var exception = e; - } - - if (!this.timeouts[timer.id]) { - if (exception) { - throw exception; - } - return; - } - - if (exception) { - throw exception; - } - }, - - reset: function reset() { - this.timeouts = {}; - }, - - Date: (function () { - var NativeDate = Date; - - function ClockDate(year, month, date, hour, minute, second, ms) { - // Defensive and verbose to avoid potential harm in passing - // explicit undefined when user does not pass argument - switch (arguments.length) { - case 0: - return new NativeDate(ClockDate.clock.now); - case 1: - return new NativeDate(year); - case 2: - return new NativeDate(year, month); - case 3: - return new NativeDate(year, month, date); - case 4: - return new NativeDate(year, month, date, hour); - case 5: - return new NativeDate(year, month, date, hour, minute); - case 6: - return new NativeDate(year, month, date, hour, minute, second); - default: - return new NativeDate(year, month, date, hour, minute, second, ms); - } - } - - return mirrorDateProperties(ClockDate, NativeDate); - }()) - }; - - function mirrorDateProperties(target, source) { - if (source.now) { - target.now = function now() { - return target.clock.now; - }; - } else { - delete target.now; - } - - if (source.toSource) { - target.toSource = function toSource() { - return source.toSource(); - }; - } else { - delete target.toSource; - } - - target.toString = function toString() { - return source.toString(); - }; - - target.prototype = source.prototype; - target.parse = source.parse; - target.UTC = source.UTC; - target.prototype.toUTCString = source.prototype.toUTCString; - return target; - } - - var methods = ["Date", "setTimeout", "setInterval", - "clearTimeout", "clearInterval"]; - - function restore() { - var method; - - for (var i = 0, l = this.methods.length; i < l; i++) { - method = this.methods[i]; - if (global[method].hadOwnProperty) { - global[method] = this["_" + method]; - } else { - delete global[method]; - } - } - - // Prevent multiple executions which will completely remove these props - this.methods = []; - } - - function stubGlobal(method, clock) { - clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(global, method); - clock["_" + method] = global[method]; - - if (method == "Date") { - var date = mirrorDateProperties(clock[method], global[method]); - global[method] = date; - } else { - global[method] = function () { - return clock[method].apply(clock, arguments); - }; - - for (var prop in clock[method]) { - if (clock[method].hasOwnProperty(prop)) { - global[method][prop] = clock[method][prop]; - } - } - } - - global[method].clock = clock; - } - - sinon.useFakeTimers = function useFakeTimers(now) { - var clock = sinon.clock.create(now); - clock.restore = restore; - clock.methods = Array.prototype.slice.call(arguments, - typeof now == "number" ? 1 : 0); - - if (clock.methods.length === 0) { - clock.methods = methods; - } - - for (var i = 0, l = clock.methods.length; i < l; i++) { - stubGlobal(clock.methods[i], clock); - } - - return clock; - }; -}(typeof global != "undefined" && typeof global !== "function" ? global : this)); - -sinon.timers = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval, - Date: Date -}; - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Minimal Event interface implementation - * - * Original implementation by Sven Fuchs: https://gist.github.com/995028 - * Modifications and tests by Christian Johansen. - * - * @author Sven Fuchs (svenfuchs@artweb-design.de) - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2011 Sven Fuchs, Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} - -(function () { - var push = [].push; - - sinon.Event = function Event(type, bubbles, cancelable, target) { - this.initEvent(type, bubbles, cancelable, target); - }; - - sinon.Event.prototype = { - initEvent: function(type, bubbles, cancelable, target) { - this.type = type; - this.bubbles = bubbles; - this.cancelable = cancelable; - this.target = target; - }, - - stopPropagation: function () {}, - - preventDefault: function () { - this.defaultPrevented = true; - } - }; - - sinon.EventTarget = { - addEventListener: function addEventListener(event, listener, useCapture) { - this.eventListeners = this.eventListeners || {}; - this.eventListeners[event] = this.eventListeners[event] || []; - push.call(this.eventListeners[event], listener); - }, - - removeEventListener: function removeEventListener(event, listener, useCapture) { - var listeners = this.eventListeners && this.eventListeners[event] || []; - - for (var i = 0, l = listeners.length; i < l; ++i) { - if (listeners[i] == listener) { - return listeners.splice(i, 1); - } - } - }, - - dispatchEvent: function dispatchEvent(event) { - var type = event.type; - var listeners = this.eventListeners && this.eventListeners[type] || []; - - for (var i = 0; i < listeners.length; i++) { - if (typeof listeners[i] == "function") { - listeners[i].call(this, event); - } else { - listeners[i].handleEvent(event); - } - } - - return !!event.defaultPrevented; - } - }; -}()); - -/** - * @depend ../../sinon.js - * @depend event.js - */ -/*jslint eqeqeq: false, onevar: false*/ -/*global sinon, module, require, ActiveXObject, XMLHttpRequest, DOMParser*/ -/** - * Fake XMLHttpRequest object - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - this.sinon = {}; -} -sinon.xhr = { XMLHttpRequest: this.XMLHttpRequest }; - -// wrapper for global -(function(global) { - var xhr = sinon.xhr; - xhr.GlobalXMLHttpRequest = global.XMLHttpRequest; - xhr.GlobalActiveXObject = global.ActiveXObject; - xhr.supportsActiveX = typeof xhr.GlobalActiveXObject != "undefined"; - xhr.supportsXHR = typeof xhr.GlobalXMLHttpRequest != "undefined"; - xhr.workingXHR = xhr.supportsXHR ? xhr.GlobalXMLHttpRequest : xhr.supportsActiveX - ? function() { return new xhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false; - - /*jsl:ignore*/ - var unsafeHeaders = { - "Accept-Charset": true, - "Accept-Encoding": true, - "Connection": true, - "Content-Length": true, - "Cookie": true, - "Cookie2": true, - "Content-Transfer-Encoding": true, - "Date": true, - "Expect": true, - "Host": true, - "Keep-Alive": true, - "Referer": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, - "Upgrade": true, - "User-Agent": true, - "Via": true - }; - /*jsl:end*/ - - function FakeXMLHttpRequest() { - this.readyState = FakeXMLHttpRequest.UNSENT; - this.requestHeaders = {}; - this.requestBody = null; - this.status = 0; - this.statusText = ""; - - var xhr = this; - var events = ["loadstart", "load", "abort", "loadend"]; - - function addEventListener(eventName) { - xhr.addEventListener(eventName, function (event) { - var listener = xhr["on" + eventName]; - - if (listener && typeof listener == "function") { - listener(event); - } - }); - } - - for (var i = events.length - 1; i >= 0; i--) { - addEventListener(events[i]); - } - - if (typeof FakeXMLHttpRequest.onCreate == "function") { - FakeXMLHttpRequest.onCreate(this); - } - } - - function verifyState(xhr) { - if (xhr.readyState !== FakeXMLHttpRequest.OPENED) { - throw new Error("INVALID_STATE_ERR"); - } - - if (xhr.sendFlag) { - throw new Error("INVALID_STATE_ERR"); - } - } - - // filtering to enable a white-list version of Sinon FakeXhr, - // where whitelisted requests are passed through to real XHR - function each(collection, callback) { - if (!collection) return; - for (var i = 0, l = collection.length; i < l; i += 1) { - callback(collection[i]); - } - } - function some(collection, callback) { - for (var index = 0; index < collection.length; index++) { - if(callback(collection[index]) === true) return true; - }; - return false; - } - // largest arity in XHR is 5 - XHR#open - var apply = function(obj,method,args) { - switch(args.length) { - case 0: return obj[method](); - case 1: return obj[method](args[0]); - case 2: return obj[method](args[0],args[1]); - case 3: return obj[method](args[0],args[1],args[2]); - case 4: return obj[method](args[0],args[1],args[2],args[3]); - case 5: return obj[method](args[0],args[1],args[2],args[3],args[4]); - }; - }; - - FakeXMLHttpRequest.filters = []; - FakeXMLHttpRequest.addFilter = function(fn) { - this.filters.push(fn) - }; - var IE6Re = /MSIE 6/; - FakeXMLHttpRequest.defake = function(fakeXhr,xhrArgs) { - var xhr = new sinon.xhr.workingXHR(); - each(["open","setRequestHeader","send","abort","getResponseHeader", - "getAllResponseHeaders","addEventListener","overrideMimeType","removeEventListener"], - function(method) { - fakeXhr[method] = function() { - return apply(xhr,method,arguments); - }; - }); - - var copyAttrs = function(args) { - each(args, function(attr) { - try { - fakeXhr[attr] = xhr[attr] - } catch(e) { - if(!IE6Re.test(navigator.userAgent)) throw e; - } - }); - }; - - var stateChange = function() { - fakeXhr.readyState = xhr.readyState; - if(xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) { - copyAttrs(["status","statusText"]); - } - if(xhr.readyState >= FakeXMLHttpRequest.LOADING) { - copyAttrs(["responseText"]); - } - if(xhr.readyState === FakeXMLHttpRequest.DONE) { - copyAttrs(["responseXML"]); - } - if(fakeXhr.onreadystatechange) fakeXhr.onreadystatechange.call(fakeXhr); - }; - if(xhr.addEventListener) { - for(var event in fakeXhr.eventListeners) { - if(fakeXhr.eventListeners.hasOwnProperty(event)) { - each(fakeXhr.eventListeners[event],function(handler) { - xhr.addEventListener(event, handler); - }); - } - } - xhr.addEventListener("readystatechange",stateChange); - } else { - xhr.onreadystatechange = stateChange; - } - apply(xhr,"open",xhrArgs); - }; - FakeXMLHttpRequest.useFilters = false; - - function verifyRequestSent(xhr) { - if (xhr.readyState == FakeXMLHttpRequest.DONE) { - throw new Error("Request done"); - } - } - - function verifyHeadersReceived(xhr) { - if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) { - throw new Error("No headers received"); - } - } - - function verifyResponseBodyType(body) { - if (typeof body != "string") { - var error = new Error("Attempted to respond to fake XMLHttpRequest with " + - body + ", which is not a string."); - error.name = "InvalidBodyException"; - throw error; - } - } - - sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, { - async: true, - - open: function open(method, url, async, username, password) { - this.method = method; - this.url = url; - this.async = typeof async == "boolean" ? async : true; - this.username = username; - this.password = password; - this.responseText = null; - this.responseXML = null; - this.requestHeaders = {}; - this.sendFlag = false; - if(sinon.FakeXMLHttpRequest.useFilters === true) { - var xhrArgs = arguments; - var defake = some(FakeXMLHttpRequest.filters,function(filter) { - return filter.apply(this,xhrArgs) - }); - if (defake) { - return sinon.FakeXMLHttpRequest.defake(this,arguments); - } - } - this.readyStateChange(FakeXMLHttpRequest.OPENED); - }, - - readyStateChange: function readyStateChange(state) { - this.readyState = state; - - if (typeof this.onreadystatechange == "function") { - try { - this.onreadystatechange(); - } catch (e) { - sinon.logError("Fake XHR onreadystatechange handler", e); - } - } - - this.dispatchEvent(new sinon.Event("readystatechange")); - - switch (this.readyState) { - case FakeXMLHttpRequest.DONE: - this.dispatchEvent(new sinon.Event("load", false, false, this)); - this.dispatchEvent(new sinon.Event("loadend", false, false, this)); - break; - } - }, - - setRequestHeader: function setRequestHeader(header, value) { - verifyState(this); - - if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) { - throw new Error("Refused to set unsafe header \"" + header + "\""); - } - - if (this.requestHeaders[header]) { - this.requestHeaders[header] += "," + value; - } else { - this.requestHeaders[header] = value; - } - }, - - // Helps testing - setResponseHeaders: function setResponseHeaders(headers) { - this.responseHeaders = {}; - - for (var header in headers) { - if (headers.hasOwnProperty(header)) { - this.responseHeaders[header] = headers[header]; - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED); - } else { - this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED; - } - }, - - // Currently treats ALL data as a DOMString (i.e. no Document) - send: function send(data) { - verifyState(this); - - if (!/^(get|head)$/i.test(this.method)) { - if (this.requestHeaders["Content-Type"]) { - var value = this.requestHeaders["Content-Type"].split(";"); - this.requestHeaders["Content-Type"] = value[0] + ";charset=utf-8"; - } else { - this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8"; - } - - this.requestBody = data; - } - - this.errorFlag = false; - this.sendFlag = this.async; - this.readyStateChange(FakeXMLHttpRequest.OPENED); - - if (typeof this.onSend == "function") { - this.onSend(this); - } - - this.dispatchEvent(new sinon.Event("loadstart", false, false, this)); - }, - - abort: function abort() { - this.aborted = true; - this.responseText = null; - this.errorFlag = true; - this.requestHeaders = {}; - - if (this.readyState > sinon.FakeXMLHttpRequest.UNSENT && this.sendFlag) { - this.readyStateChange(sinon.FakeXMLHttpRequest.DONE); - this.sendFlag = false; - } - - this.readyState = sinon.FakeXMLHttpRequest.UNSENT; - - this.dispatchEvent(new sinon.Event("abort", false, false, this)); - if (typeof this.onerror === "function") { - this.onerror(); - } - }, - - getResponseHeader: function getResponseHeader(header) { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return null; - } - - if (/^Set-Cookie2?$/i.test(header)) { - return null; - } - - header = header.toLowerCase(); - - for (var h in this.responseHeaders) { - if (h.toLowerCase() == header) { - return this.responseHeaders[h]; - } - } - - return null; - }, - - getAllResponseHeaders: function getAllResponseHeaders() { - if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) { - return ""; - } - - var headers = ""; - - for (var header in this.responseHeaders) { - if (this.responseHeaders.hasOwnProperty(header) && - !/^Set-Cookie2?$/i.test(header)) { - headers += header + ": " + this.responseHeaders[header] + "\r\n"; - } - } - - return headers; - }, - - setResponseBody: function setResponseBody(body) { - verifyRequestSent(this); - verifyHeadersReceived(this); - verifyResponseBodyType(body); - - var chunkSize = this.chunkSize || 10; - var index = 0; - this.responseText = ""; - - do { - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.LOADING); - } - - this.responseText += body.substring(index, index + chunkSize); - index += chunkSize; - } while (index < body.length); - - var type = this.getResponseHeader("Content-Type"); - - if (this.responseText && - (!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) { - try { - this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText); - } catch (e) { - // Unable to parse XML - no biggie - } - } - - if (this.async) { - this.readyStateChange(FakeXMLHttpRequest.DONE); - } else { - this.readyState = FakeXMLHttpRequest.DONE; - } - }, - - respond: function respond(status, headers, body) { - this.setResponseHeaders(headers || {}); - this.status = typeof status == "number" ? status : 200; - this.statusText = FakeXMLHttpRequest.statusCodes[this.status]; - this.setResponseBody(body || ""); - if (typeof this.onload === "function"){ - this.onload(); - } - - } - }); - - sinon.extend(FakeXMLHttpRequest, { - UNSENT: 0, - OPENED: 1, - HEADERS_RECEIVED: 2, - LOADING: 3, - DONE: 4 - }); - - // Borrowed from JSpec - FakeXMLHttpRequest.parseXML = function parseXML(text) { - var xmlDoc; - - if (typeof DOMParser != "undefined") { - var parser = new DOMParser(); - xmlDoc = parser.parseFromString(text, "text/xml"); - } else { - xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); - xmlDoc.async = "false"; - xmlDoc.loadXML(text); - } - - return xmlDoc; - }; - - FakeXMLHttpRequest.statusCodes = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - }; - - sinon.useFakeXMLHttpRequest = function () { - sinon.FakeXMLHttpRequest.restore = function restore(keepOnCreate) { - if (xhr.supportsXHR) { - global.XMLHttpRequest = xhr.GlobalXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = xhr.GlobalActiveXObject; - } - - delete sinon.FakeXMLHttpRequest.restore; - - if (keepOnCreate !== true) { - delete sinon.FakeXMLHttpRequest.onCreate; - } - }; - if (xhr.supportsXHR) { - global.XMLHttpRequest = sinon.FakeXMLHttpRequest; - } - - if (xhr.supportsActiveX) { - global.ActiveXObject = function ActiveXObject(objId) { - if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) { - - return new sinon.FakeXMLHttpRequest(); - } - - return new xhr.GlobalActiveXObject(objId); - }; - } - - return sinon.FakeXMLHttpRequest; - }; - - sinon.FakeXMLHttpRequest = FakeXMLHttpRequest; -})(this); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_xml_http_request.js - */ -/*jslint eqeqeq: false, onevar: false, regexp: false, plusplus: false*/ -/*global module, require, window*/ -/** - * The Sinon "server" mimics a web server that receives requests from - * sinon.FakeXMLHttpRequest and provides an API to respond to those requests, - * both synchronously and asynchronously. To respond synchronuously, canned - * answers have to be provided upfront. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof sinon == "undefined") { - var sinon = {}; -} - -sinon.fakeServer = (function () { - var push = [].push; - function F() {} - - function create(proto) { - F.prototype = proto; - return new F(); - } - - function responseArray(handler) { - var response = handler; - - if (Object.prototype.toString.call(handler) != "[object Array]") { - response = [200, {}, handler]; - } - - if (typeof response[2] != "string") { - throw new TypeError("Fake server response body should be string, but was " + - typeof response[2]); - } - - return response; - } - - var wloc = typeof window !== "undefined" ? window.location : {}; - var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host); - - function matchOne(response, reqMethod, reqUrl) { - var rmeth = response.method; - var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase(); - var url = response.url; - var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl)); - - return matchMethod && matchUrl; - } - - function match(response, request) { - var requestMethod = this.getHTTPMethod(request); - var requestUrl = request.url; - - if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) { - requestUrl = requestUrl.replace(rCurrLoc, ""); - } - - if (matchOne(response, this.getHTTPMethod(request), requestUrl)) { - if (typeof response.response == "function") { - var ru = response.url; - var args = [request].concat(!ru ? [] : requestUrl.match(ru).slice(1)); - return response.response.apply(response, args); - } - - return true; - } - - return false; - } - - function log(response, request) { - var str; - - str = "Request:\n" + sinon.format(request) + "\n\n"; - str += "Response:\n" + sinon.format(response) + "\n\n"; - - sinon.log(str); - } - - return { - create: function () { - var server = create(this); - this.xhr = sinon.useFakeXMLHttpRequest(); - server.requests = []; - - this.xhr.onCreate = function (xhrObj) { - server.addRequest(xhrObj); - }; - - return server; - }, - - addRequest: function addRequest(xhrObj) { - var server = this; - push.call(this.requests, xhrObj); - - xhrObj.onSend = function () { - server.handleRequest(this); - }; - - if (this.autoRespond && !this.responding) { - setTimeout(function () { - server.responding = false; - server.respond(); - }, this.autoRespondAfter || 10); - - this.responding = true; - } - }, - - getHTTPMethod: function getHTTPMethod(request) { - if (this.fakeHTTPMethods && /post/i.test(request.method)) { - var matches = (request.requestBody || "").match(/_method=([^\b;]+)/); - return !!matches ? matches[1] : request.method; - } - - return request.method; - }, - - handleRequest: function handleRequest(xhr) { - if (xhr.async) { - if (!this.queue) { - this.queue = []; - } - - push.call(this.queue, xhr); - } else { - this.processRequest(xhr); - } - }, - - respondWith: function respondWith(method, url, body) { - if (arguments.length == 1 && typeof method != "function") { - this.response = responseArray(method); - return; - } - - if (!this.responses) { this.responses = []; } - - if (arguments.length == 1) { - body = method; - url = method = null; - } - - if (arguments.length == 2) { - body = url; - url = method; - method = null; - } - - push.call(this.responses, { - method: method, - url: url, - response: typeof body == "function" ? body : responseArray(body) - }); - }, - - respond: function respond() { - if (arguments.length > 0) this.respondWith.apply(this, arguments); - var queue = this.queue || []; - var request; - - while(request = queue.shift()) { - this.processRequest(request); - } - }, - - processRequest: function processRequest(request) { - try { - if (request.aborted) { - return; - } - - var response = this.response || [404, {}, ""]; - - if (this.responses) { - for (var i = 0, l = this.responses.length; i < l; i++) { - if (match.call(this, this.responses[i], request)) { - response = this.responses[i].response; - break; - } - } - } - - if (request.readyState != 4) { - log(response, request); - - request.respond(response[0], response[1], response[2]); - } - } catch (e) { - sinon.logError("Fake server request processing", e); - } - }, - - restore: function restore() { - return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments); - } - }; -}()); - -if (typeof module == "object" && typeof require == "function") { - module.exports = sinon; -} - -/** - * @depend fake_server.js - * @depend fake_timers.js - */ -/*jslint browser: true, eqeqeq: false, onevar: false*/ -/*global sinon*/ -/** - * Add-on for sinon.fakeServer that automatically handles a fake timer along with - * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery - * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead, - * it polls the object for completion with setInterval. Dispite the direct - * motivation, there is nothing jQuery-specific in this file, so it can be used - * in any environment where the ajax implementation depends on setInterval or - * setTimeout. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function () { - function Server() {} - Server.prototype = sinon.fakeServer; - - sinon.fakeServerWithClock = new Server(); - - sinon.fakeServerWithClock.addRequest = function addRequest(xhr) { - if (xhr.async) { - if (typeof setTimeout.clock == "object") { - this.clock = setTimeout.clock; - } else { - this.clock = sinon.useFakeTimers(); - this.resetClock = true; - } - - if (!this.longestTimeout) { - var clockSetTimeout = this.clock.setTimeout; - var clockSetInterval = this.clock.setInterval; - var server = this; - - this.clock.setTimeout = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetTimeout.apply(this, arguments); - }; - - this.clock.setInterval = function (fn, timeout) { - server.longestTimeout = Math.max(timeout, server.longestTimeout || 0); - - return clockSetInterval.apply(this, arguments); - }; - } - } - - return sinon.fakeServer.addRequest.call(this, xhr); - }; - - sinon.fakeServerWithClock.respond = function respond() { - var returnVal = sinon.fakeServer.respond.apply(this, arguments); - - if (this.clock) { - this.clock.tick(this.longestTimeout || 0); - this.longestTimeout = 0; - - if (this.resetClock) { - this.clock.restore(); - this.resetClock = false; - } - } - - return returnVal; - }; - - sinon.fakeServerWithClock.restore = function restore() { - if (this.clock) { - this.clock.restore(); - } - - return sinon.fakeServer.restore.apply(this, arguments); - }; -}()); - -/** - * @depend ../sinon.js - * @depend collection.js - * @depend util/fake_timers.js - * @depend util/fake_server_with_clock.js - */ -/*jslint eqeqeq: false, onevar: false, plusplus: false*/ -/*global require, module*/ -/** - * Manages fake collections as well as fake utilities such as Sinon's - * timers and fake XHR implementation in one convenient object. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -if (typeof module == "object" && typeof require == "function") { - var sinon = require("../sinon"); - sinon.extend(sinon, require("./util/fake_timers")); -} - -(function () { - var push = [].push; - - function exposeValue(sandbox, config, key, value) { - if (!value) { - return; - } - - if (config.injectInto) { - config.injectInto[key] = value; - } else { - push.call(sandbox.args, value); - } - } - - function prepareSandboxFromConfig(config) { - var sandbox = sinon.create(sinon.sandbox); - - if (config.useFakeServer) { - if (typeof config.useFakeServer == "object") { - sandbox.serverPrototype = config.useFakeServer; - } - - sandbox.useFakeServer(); - } - - if (config.useFakeTimers) { - if (typeof config.useFakeTimers == "object") { - sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers); - } else { - sandbox.useFakeTimers(); - } - } - - return sandbox; - } - - sinon.sandbox = sinon.extend(sinon.create(sinon.collection), { - useFakeTimers: function useFakeTimers() { - this.clock = sinon.useFakeTimers.apply(sinon, arguments); - - return this.add(this.clock); - }, - - serverPrototype: sinon.fakeServer, - - useFakeServer: function useFakeServer() { - var proto = this.serverPrototype || sinon.fakeServer; - - if (!proto || !proto.create) { - return null; - } - - this.server = proto.create(); - return this.add(this.server); - }, - - inject: function (obj) { - sinon.collection.inject.call(this, obj); - - if (this.clock) { - obj.clock = this.clock; - } - - if (this.server) { - obj.server = this.server; - obj.requests = this.server.requests; - } - - return obj; - }, - - create: function (config) { - if (!config) { - return sinon.create(sinon.sandbox); - } - - var sandbox = prepareSandboxFromConfig(config); - sandbox.args = sandbox.args || []; - var prop, value, exposed = sandbox.inject({}); - - if (config.properties) { - for (var i = 0, l = config.properties.length; i < l; i++) { - prop = config.properties[i]; - value = exposed[prop] || prop == "sandbox" && sandbox; - exposeValue(sandbox, config, prop, value); - } - } else { - exposeValue(sandbox, config, "sandbox", value); - } - - return sandbox; - } - }); - - sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer; - - if (typeof module == "object" && typeof require == "function") { - module.exports = sinon.sandbox; - } -}()); - -/** - * @depend ../sinon.js - * @depend stub.js - * @depend mock.js - * @depend sandbox.js - */ -/*jslint eqeqeq: false, onevar: false, forin: true, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Test function, sandboxes fakes - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function test(callback) { - var type = typeof callback; - - if (type != "function") { - throw new TypeError("sinon.test needs to wrap a test function, got " + type); - } - - return function () { - var config = sinon.getConfig(sinon.config); - config.injectInto = config.injectIntoThis && this || config.injectInto; - var sandbox = sinon.sandbox.create(config); - var exception, result; - var args = Array.prototype.slice.call(arguments).concat(sandbox.args); - - try { - result = callback.apply(this, args); - } catch (e) { - exception = e; - } - - if (typeof exception !== "undefined") { - sandbox.restore(); - throw exception; - } - else { - sandbox.verifyAndRestore(); - } - - return result; - }; - } - - test.config = { - injectIntoThis: true, - injectInto: null, - properties: ["spy", "stub", "mock", "clock", "server", "requests"], - useFakeTimers: true, - useFakeServer: true - }; - - if (commonJSModule) { - module.exports = test; - } else { - sinon.test = test; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend test.js - */ -/*jslint eqeqeq: false, onevar: false, eqeqeq: false*/ -/*global module, require, sinon*/ -/** - * Test case, sandboxes all test functions - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon || !Object.prototype.hasOwnProperty) { - return; - } - - function createTest(property, setUp, tearDown) { - return function () { - if (setUp) { - setUp.apply(this, arguments); - } - - var exception, result; - - try { - result = property.apply(this, arguments); - } catch (e) { - exception = e; - } - - if (tearDown) { - tearDown.apply(this, arguments); - } - - if (exception) { - throw exception; - } - - return result; - }; - } - - function testCase(tests, prefix) { - /*jsl:ignore*/ - if (!tests || typeof tests != "object") { - throw new TypeError("sinon.testCase needs an object with test functions"); - } - /*jsl:end*/ - - prefix = prefix || "test"; - var rPrefix = new RegExp("^" + prefix); - var methods = {}, testName, property, method; - var setUp = tests.setUp; - var tearDown = tests.tearDown; - - for (testName in tests) { - if (tests.hasOwnProperty(testName)) { - property = tests[testName]; - - if (/^(setUp|tearDown)$/.test(testName)) { - continue; - } - - if (typeof property == "function" && rPrefix.test(testName)) { - method = property; - - if (setUp || tearDown) { - method = createTest(property, setUp, tearDown); - } - - methods[testName] = sinon.test(method); - } else { - methods[testName] = tests[testName]; - } - } - } - - return methods; - } - - if (commonJSModule) { - module.exports = testCase; - } else { - sinon.testCase = testCase; - } -}(typeof sinon == "object" && sinon || null)); - -/** - * @depend ../sinon.js - * @depend stub.js - */ -/*jslint eqeqeq: false, onevar: false, nomen: false, plusplus: false*/ -/*global module, require, sinon*/ -/** - * Assertions matching the test spy retrieval interface. - * - * @author Christian Johansen (christian@cjohansen.no) - * @license BSD - * - * Copyright (c) 2010-2013 Christian Johansen - */ - -(function (sinon, global) { - var commonJSModule = typeof module == "object" && typeof require == "function"; - var slice = Array.prototype.slice; - var assert; - - if (!sinon && commonJSModule) { - sinon = require("../sinon"); - } - - if (!sinon) { - return; - } - - function verifyIsStub() { - var method; - - for (var i = 0, l = arguments.length; i < l; ++i) { - method = arguments[i]; - - if (!method) { - assert.fail("fake is not a spy"); - } - - if (typeof method != "function") { - assert.fail(method + " is not a function"); - } - - if (typeof method.getCall != "function") { - assert.fail(method + " is not stubbed"); - } - } - } - - function failAssertion(object, msg) { - object = object || global; - var failMethod = object.fail || assert.fail; - failMethod.call(object, msg); - } - - function mirrorPropAsAssertion(name, method, message) { - if (arguments.length == 2) { - message = method; - method = name; - } - - assert[name] = function (fake) { - verifyIsStub(fake); - - var args = slice.call(arguments, 1); - var failed = false; - - if (typeof method == "function") { - failed = !method(fake); - } else { - failed = typeof fake[method] == "function" ? - !fake[method].apply(fake, args) : !fake[method]; - } - - if (failed) { - failAssertion(this, fake.printf.apply(fake, [message].concat(args))); - } else { - assert.pass(name); - } - }; - } - - function exposedName(prefix, prop) { - return !prefix || /^fail/.test(prop) ? prop : - prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1); - }; - - assert = { - failException: "AssertError", - - fail: function fail(message) { - var error = new Error(message); - error.name = this.failException || assert.failException; - - throw error; - }, - - pass: function pass(assertion) {}, - - callOrder: function assertCallOrder() { - verifyIsStub.apply(null, arguments); - var expected = "", actual = ""; - - if (!sinon.calledInOrder(arguments)) { - try { - expected = [].join.call(arguments, ", "); - var calls = slice.call(arguments); - var i = calls.length; - while (i) { - if (!calls[--i].called) { - calls.splice(i, 1); - } - } - actual = sinon.orderByFirstCall(calls).join(", "); - } catch (e) { - // If this fails, we'll just fall back to the blank string - } - - failAssertion(this, "expected " + expected + " to be " + - "called in order but were called as " + actual); - } else { - assert.pass("callOrder"); - } - }, - - callCount: function assertCallCount(method, count) { - verifyIsStub(method); - - if (method.callCount != count) { - var msg = "expected %n to be called " + sinon.timesInWords(count) + - " but was called %c%C"; - failAssertion(this, method.printf(msg)); - } else { - assert.pass("callCount"); - } - }, - - expose: function expose(target, options) { - if (!target) { - throw new TypeError("target is null or undefined"); - } - - var o = options || {}; - var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix; - var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail; - - for (var method in this) { - if (method != "export" && (includeFail || !/^(fail)/.test(method))) { - target[exposedName(prefix, method)] = this[method]; - } - } - - return target; - } - }; - - mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called"); - mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; }, - "expected %n to not have been called but was called %c%C"); - mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C"); - mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C"); - mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C"); - mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t"); - mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new"); - mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new"); - mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C"); - mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C"); - mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C"); - mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C"); - mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C"); - mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C"); - mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C"); - mirrorPropAsAssertion("threw", "%n did not throw exception%C"); - mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C"); - - if (commonJSModule) { - module.exports = assert; - } else { - sinon.assert = assert; - } -}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global)); - -return sinon;}.call(typeof window != 'undefined' && window || {})); diff --git a/core/js/tests/specHelper.js b/core/js/tests/specHelper.js index 59c2a99645f..29293e89bcb 100644 --- a/core/js/tests/specHelper.js +++ b/core/js/tests/specHelper.js @@ -123,6 +123,9 @@ window.isPhantom = /phantom/i.test(navigator.userAgent); // reset plugins OC.Plugins._plugins = []; + + // dummy select2 (which isn't loaded during the tests) + $.fn.select2 = function() {}; }); afterEach(function() { @@ -131,6 +134,8 @@ window.isPhantom = /phantom/i.test(navigator.userAgent); fakeServer.restore(); $testArea.remove(); + + delete($.fn.select2); }); })(); diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index 7d06ac2e7df..3ebe55305f7 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -134,6 +134,51 @@ describe('Core base tests', function() { expect(escapeHTML('This is a good string without HTML.')).toEqual('This is a good string without HTML.'); }); }); + describe('joinPaths', function() { + it('returns empty string with no or empty arguments', function() { + expect(OC.joinPaths()).toEqual(''); + expect(OC.joinPaths('')).toEqual(''); + expect(OC.joinPaths('', '')).toEqual(''); + }); + it('returns joined path sections', function() { + expect(OC.joinPaths('abc')).toEqual('abc'); + expect(OC.joinPaths('abc', 'def')).toEqual('abc/def'); + expect(OC.joinPaths('abc', 'def', 'ghi')).toEqual('abc/def/ghi'); + }); + it('keeps leading slashes', function() { + expect(OC.joinPaths('/abc')).toEqual('/abc'); + expect(OC.joinPaths('/abc', '')).toEqual('/abc'); + expect(OC.joinPaths('', '/abc')).toEqual('/abc'); + expect(OC.joinPaths('/abc', 'def')).toEqual('/abc/def'); + expect(OC.joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi'); + }); + it('keeps trailing slashes', function() { + expect(OC.joinPaths('', 'abc/')).toEqual('abc/'); + expect(OC.joinPaths('abc/')).toEqual('abc/'); + expect(OC.joinPaths('abc/', '')).toEqual('abc/'); + expect(OC.joinPaths('abc', 'def/')).toEqual('abc/def/'); + expect(OC.joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/'); + }); + it('splits paths in specified strings and discards extra slashes', function() { + expect(OC.joinPaths('//abc//')).toEqual('/abc/'); + expect(OC.joinPaths('//abc//def//')).toEqual('/abc/def/'); + expect(OC.joinPaths('//abc//', '//def//')).toEqual('/abc/def/'); + expect(OC.joinPaths('//abc//', '//def//', '//ghi//')).toEqual('/abc/def/ghi/'); + expect(OC.joinPaths('//abc//def//', '//ghi//jkl/mno/', '//pqr//')) + .toEqual('/abc/def/ghi/jkl/mno/pqr/'); + expect(OC.joinPaths('/abc', '/def')).toEqual('/abc/def'); + expect(OC.joinPaths('/abc/', '/def')).toEqual('/abc/def'); + expect(OC.joinPaths('/abc/', 'def')).toEqual('/abc/def'); + }); + it('discards empty sections', function() { + expect(OC.joinPaths('abc', '', 'def')).toEqual('abc/def'); + }); + it('returns root if only slashes', function() { + expect(OC.joinPaths('//')).toEqual('/'); + expect(OC.joinPaths('/', '/')).toEqual('/'); + expect(OC.joinPaths('/', '//', '/')).toEqual('/'); + }); + }); describe('filePath', function() { beforeEach(function() { OC.webroot = 'http://localhost'; @@ -418,7 +463,10 @@ describe('Core base tests', function() { beforeEach(function() { clock = sinon.useFakeTimers(); $('#testArea').append('<div id="header">' + - '<a class="menutoggle" href="#"></a>' + + '<a class="menutoggle" href="#">' + + '<h1 class="header-appname"></h1>' + + '<div class="icon-caret"></div>' + + '</a>' + '</div>' + '<div id="navigation"></div>'); $toggle = $('#header').find('.menutoggle'); diff --git a/core/js/tests/specs/mimeTypeSpec.js b/core/js/tests/specs/mimeTypeSpec.js new file mode 100644 index 00000000000..182941de1a9 --- /dev/null +++ b/core/js/tests/specs/mimeTypeSpec.js @@ -0,0 +1,151 @@ +/** + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +describe('MimeType tests', function() { + var _files; + var _aliases; + var _theme; + + beforeEach(function() { + _files = OC.MimeTypeList.files; + _aliases = OC.MimeTypeList.aliases; + _theme = OC.MimeTypeList.themes['abc']; + + OC.MimeTypeList.files = ['folder', 'folder-shared', 'folder-external', 'foo-bar', 'foo', 'file']; + OC.MimeTypeList.aliases = {'app/foobar': 'foo/bar'}; + OC.MimeTypeList.themes['abc'] = ['folder']; + }); + + afterEach(function() { + OC.MimeTypeList.files = _files; + OC.MimeTypeList.aliases = _aliases; + OC.MimeTypeList.themes['abc'] = _theme; + }); + + describe('_getFile', function() { + + it('returns the correct icon for "dir"', function() { + var res = OC.MimeType._getFile('dir', OC.MimeTypeList.files); + expect(res).toEqual('folder'); + }); + + it('returns the correct icon for "dir-shared"', function() { + var res = OC.MimeType._getFile('dir-shared', OC.MimeTypeList.files); + expect(res).toEqual('folder-shared'); + }); + + it('returns the correct icon for "dir-external"', function() { + var res = OC.MimeType._getFile('dir-external', OC.MimeTypeList.files); + expect(res).toEqual('folder-external'); + }); + + it('returns the correct icon for a mimetype for which we have an icon', function() { + var res = OC.MimeType._getFile('foo/bar', OC.MimeTypeList.files); + expect(res).toEqual('foo-bar'); + }); + + it('returns the correct icon for a mimetype for which we only have a general mimetype icon', function() { + var res = OC.MimeType._getFile('foo/baz', OC.MimeTypeList.files); + expect(res).toEqual('foo'); + }); + + it('return the file mimetype if we have no matching icon but do have a file icon', function() { + var res = OC.MimeType._getFile('foobar', OC.MimeTypeList.files); + expect(res).toEqual('file'); + }); + + it('return null if we do not have a matching icon', function() { + var res = OC.MimeType._getFile('xyz', []); + expect(res).toEqual(null); + }); + }); + + describe('getIconUrl', function() { + + describe('no theme', function() { + var _themeFolder; + + beforeEach(function() { + _themeFolder = OC.theme.folder; + OC.theme.folder = ''; + //Clear mimetypeIcons caches + OC.MimeType._mimeTypeIcons = {}; + }); + + afterEach(function() { + OC.theme.folder = _themeFolder; + }); + + it('return undefined if the an icon for undefined is requested', function() { + var res = OC.MimeType.getIconUrl(undefined); + expect(res).toEqual(undefined); + }); + + it('return the url for the mimetype file', function() { + var res = OC.MimeType.getIconUrl('file'); + expect(res).toEqual(OC.webroot + '/core/img/filetypes/file.svg'); + }); + + it('test if the cache works correctly', function() { + OC.MimeType._mimeTypeIcons = {}; + expect(Object.keys(OC.MimeType._mimeTypeIcons).length).toEqual(0); + + var res = OC.MimeType.getIconUrl('dir'); + expect(Object.keys(OC.MimeType._mimeTypeIcons).length).toEqual(1); + expect(OC.MimeType._mimeTypeIcons['dir']).toEqual(res); + + var res = OC.MimeType.getIconUrl('dir-shared'); + expect(Object.keys(OC.MimeType._mimeTypeIcons).length).toEqual(2); + expect(OC.MimeType._mimeTypeIcons['dir-shared']).toEqual(res); + }); + + it('test if alaiases are converted correctly', function() { + var res = OC.MimeType.getIconUrl('app/foobar'); + expect(res).toEqual(OC.webroot + '/core/img/filetypes/foo-bar.svg'); + expect(OC.MimeType._mimeTypeIcons['foo/bar']).toEqual(res); + }); + }); + + describe('themes', function() { + var _themeFolder; + + beforeEach(function() { + _themeFolder = OC.theme.folder; + OC.theme.folder = 'abc'; + //Clear mimetypeIcons caches + OC.MimeType._mimeTypeIcons = {}; + }); + + afterEach(function() { + OC.theme.folder = _themeFolder; + }); + + it('test if theme path is used if a theme icon is availble', function() { + var res = OC.MimeType.getIconUrl('dir'); + expect(res).toEqual(OC.webroot + '/themes/abc/core/img/filetypes/folder.svg'); + }); + + it('test if we fallback to the default theme if no icon is available in the theme', function() { + var res = OC.MimeType.getIconUrl('dir-shared'); + expect(res).toEqual(OC.webroot + '/core/img/filetypes/folder-shared.svg'); + }); + }); + }); +}); diff --git a/core/js/tests/specs/setupchecksSpec.js b/core/js/tests/specs/setupchecksSpec.js index 487e28a6204..ec8a732b4a1 100644 --- a/core/js/tests/specs/setupchecksSpec.js +++ b/core/js/tests/specs/setupchecksSpec.js @@ -66,11 +66,11 @@ describe('OC.SetupChecks tests', function() { { 'Content-Type': 'application/json' }, - JSON.stringify({data: {serverHasInternetConnection: false}}) + JSON.stringify({isUrandomAvailable: true, serverHasInternetConnection: false, memcacheDocs: 'https://doc.owncloud.org/server/go.php?to=admin-performance'}) ); async.done(function( data, s, x ){ - expect(data).toEqual(['This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.', 'Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.']); + expect(data).toEqual(['This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.', 'Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.']); done(); }); }); @@ -83,7 +83,24 @@ describe('OC.SetupChecks tests', function() { { 'Content-Type': 'application/json' }, - JSON.stringify({data: {serverHasInternetConnection: false, dataDirectoryProtected: false}}) + JSON.stringify({isUrandomAvailable: true, serverHasInternetConnection: false, dataDirectoryProtected: false, memcacheDocs: 'https://doc.owncloud.org/server/go.php?to=admin-performance'}) + ); + + async.done(function( data, s, x ){ + expect(data).toEqual(['This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features.', 'Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.', 'No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href="https://doc.owncloud.org/server/go.php?to=admin-performance">documentation</a>.']); + done(); + }); + }); + + it('should return an error if server has no internet connection and data directory is not protected and memcache is available', function(done) { + var async = OC.SetupChecks.checkSetup(); + + suite.server.requests[0].respond( + 200, + { + 'Content-Type': 'application/json', + }, + JSON.stringify({isUrandomAvailable: true, serverHasInternetConnection: false, dataDirectoryProtected: false, isMemcacheConfigured: true}) ); async.done(function( data, s, x ){ @@ -92,6 +109,23 @@ describe('OC.SetupChecks tests', function() { }); }); + it('should return an error if /dev/urandom is not accessible', function(done) { + var async = OC.SetupChecks.checkSetup(); + + suite.server.requests[0].respond( + 200, + { + 'Content-Type': 'application/json', + }, + JSON.stringify({isUrandomAvailable: false, securityDocs: 'https://docs.owncloud.org/myDocs.html', serverHasInternetConnection: true, dataDirectoryProtected: true, isMemcacheConfigured: true}) + ); + + async.done(function( data, s, x ){ + expect(data).toEqual(['/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href="https://docs.owncloud.org/myDocs.html">documentation</a>.']); + done(); + }); + }); + it('should return an error if the response has no statuscode 200', function(done) { var async = OC.SetupChecks.checkSetup(); @@ -135,12 +169,12 @@ describe('OC.SetupChecks tests', function() { 200, { 'Content-Type': 'application/json', - 'Strict-Transport-Security': '2678400' + 'Strict-Transport-Security': 'max-age=15768000' } ); async.done(function( data, s, x ){ - expect(data).toEqual(['The "X-XSS-Protection" HTTP header is not configured to equal to "1; mode=block". This is a potential security risk and we recommend adjusting this setting.', 'The "X-Content-Type-Options" HTTP header is not configured to equal to "nosniff". This is a potential security risk and we recommend adjusting this setting.', 'The "X-Robots-Tag" HTTP header is not configured to equal to "none". This is a potential security risk and we recommend adjusting this setting.', 'The "X-Frame-Options" HTTP header is not configured to equal to "SAMEORIGIN". This is a potential security risk and we recommend adjusting this setting.']); + expect(data).toEqual(['The "X-XSS-Protection" HTTP header is not configured to equal to "1; mode=block". This is a potential security or privacy risk and we recommend adjusting this setting.', 'The "X-Content-Type-Options" HTTP header is not configured to equal to "nosniff". This is a potential security or privacy risk and we recommend adjusting this setting.', 'The "X-Robots-Tag" HTTP header is not configured to equal to "none". This is a potential security or privacy risk and we recommend adjusting this setting.', 'The "X-Frame-Options" HTTP header is not configured to equal to "SAMEORIGIN". This is a potential security or privacy risk and we recommend adjusting this setting.']); done(); }); }); @@ -154,13 +188,12 @@ describe('OC.SetupChecks tests', function() { { 'X-Robots-Tag': 'none', 'X-Frame-Options': 'SAMEORIGIN', - 'Strict-Transport-Security': '2678400' - + 'Strict-Transport-Security': 'max-age=15768000;preload' } ); async.done(function( data, s, x ){ - expect(data).toEqual(['The "X-XSS-Protection" HTTP header is not configured to equal to "1; mode=block". This is a potential security risk and we recommend adjusting this setting.', 'The "X-Content-Type-Options" HTTP header is not configured to equal to "nosniff". This is a potential security risk and we recommend adjusting this setting.']); + expect(data).toEqual(['The "X-XSS-Protection" HTTP header is not configured to equal to "1; mode=block". This is a potential security or privacy risk and we recommend adjusting this setting.', 'The "X-Content-Type-Options" HTTP header is not configured to equal to "nosniff". This is a potential security or privacy risk and we recommend adjusting this setting.']); done(); }); }); @@ -176,7 +209,7 @@ describe('OC.SetupChecks tests', function() { 'X-Content-Type-Options': 'nosniff', 'X-Robots-Tag': 'none', 'X-Frame-Options': 'SAMEORIGIN', - 'Strict-Transport-Security': '2678400' + 'Strict-Transport-Security': 'max-age=15768000' } ); @@ -201,8 +234,8 @@ describe('OC.SetupChecks tests', function() { ); async.done(function( data, s, x ){ - expect(data).toEqual(['You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.']); - done(); + expect(data).toEqual(['You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href="#admin-tips">security tips</a>.']); + done(); }); }); @@ -218,7 +251,7 @@ describe('OC.SetupChecks tests', function() { ); async.done(function( data, s, x ){ expect(data).toEqual(['Error occurred while checking server setup', 'Error occurred while checking server setup']); - done(); + done(); }); }); @@ -236,8 +269,8 @@ describe('OC.SetupChecks tests', function() { ); async.done(function( data, s, x ){ - expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "2,678,400" seconds. This is a potential security risk and we recommend adjusting this setting.']); - done(); + expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "15768000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips">security tips</a>.']); + done(); }); }); @@ -247,7 +280,7 @@ describe('OC.SetupChecks tests', function() { suite.server.requests[0].respond(200, { - 'Strict-Transport-Security': '2678399', + 'Strict-Transport-Security': 'max-age=15767999', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Robots-Tag': 'none', @@ -256,7 +289,7 @@ describe('OC.SetupChecks tests', function() { ); async.done(function( data, s, x ){ - expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "2,678,400" seconds. This is a potential security risk and we recommend adjusting this setting.']); + expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "15768000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips">security tips</a>.']); done(); }); }); @@ -276,7 +309,7 @@ describe('OC.SetupChecks tests', function() { ); async.done(function( data, s, x ){ - expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "2,678,400" seconds. This is a potential security risk and we recommend adjusting this setting.']); + expect(data).toEqual(['The "Strict-Transport-Security" HTTP header is not configured to least "15768000" seconds. For enhanced security we recommend enabling HSTS as described in our <a href="#admin-tips">security tips</a>.']); done(); }); }); @@ -286,7 +319,7 @@ describe('OC.SetupChecks tests', function() { var async = OC.SetupChecks.checkGeneric(); suite.server.requests[0].respond(200, { - 'Strict-Transport-Security': '2678400', + 'Strict-Transport-Security': 'max-age=15768000', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Robots-Tag': 'none', @@ -304,7 +337,7 @@ describe('OC.SetupChecks tests', function() { var async = OC.SetupChecks.checkGeneric(); suite.server.requests[0].respond(200, { - 'Strict-Transport-Security': '12678400', + 'Strict-Transport-Security': 'max-age=99999999', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Robots-Tag': 'none', @@ -322,7 +355,25 @@ describe('OC.SetupChecks tests', function() { var async = OC.SetupChecks.checkGeneric(); suite.server.requests[0].respond(200, { - 'Strict-Transport-Security': '12678400; includeSubDomains', + 'Strict-Transport-Security': 'max-age=99999999; includeSubDomains', + 'X-XSS-Protection': '1; mode=block', + 'X-Content-Type-Options': 'nosniff', + 'X-Robots-Tag': 'none', + 'X-Frame-Options': 'SAMEORIGIN' + }); + + async.done(function( data, s, x ){ + expect(data).toEqual([]); + done(); + }); + }); + + it('should return no SSL warning if SSL used with to more than the minimum Strict-Transport-Security-Header and includeSubDomains and preload parameter', function(done) { + protocolStub.returns('https'); + var async = OC.SetupChecks.checkGeneric(); + + suite.server.requests[0].respond(200, { + 'Strict-Transport-Security': 'max-age=99999999; preload; includeSubDomains', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'X-Robots-Tag': 'none', diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 4a2da645029..4e12f3bb0cf 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -29,6 +29,7 @@ describe('OC.Share tests', function() { var oldEnableAvatars; var avatarStub; var placeholderStub; + var oldCurrentUser; beforeEach(function() { $('#testArea').append($('<div id="shareContainer"></div>')); @@ -62,8 +63,12 @@ describe('OC.Share tests', function() { oc_config.enable_avatars = false; avatarStub = sinon.stub($.fn, 'avatar'); placeholderStub = sinon.stub($.fn, 'imageplaceholder'); + + oldCurrentUser = OC.currentUser; + OC.currentUser = 'user0'; }); afterEach(function() { + OC.currentUser = oldCurrentUser; /* jshint camelcase:false */ oc_appconfig.core = oldAppConfig; loadItemStub.restore(); @@ -105,6 +110,86 @@ describe('OC.Share tests', function() { describe('Share with link', function() { // TODO: test ajax calls // TODO: test password field visibility (whenever enforced or not) + it('update password on focus out', function() { + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + // Enable password, enter password and focusout + $('#dropdown [name=showPassword]').click(); + $('#dropdown #linkPassText').focus(); + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').focusout(); + + expect(fakeServer.requests[1].method).toEqual('POST'); + var body = OC.parseQueryString(fakeServer.requests[1].requestBody); + expect(body['shareWith']).toEqual('foo'); + + // Set password response + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect($('#dropdown #linkPassText').val()).toEqual(''); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Password protected'); + }); + it('update password on enter', function() { + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + // Enable password and enter password + $('#dropdown [name=showPassword]').click(); + $('#dropdown #linkPassText').focus(); + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + + expect(fakeServer.requests[1].method).toEqual('POST'); + var body = OC.parseQueryString(fakeServer.requests[1].requestBody); + expect(body['shareWith']).toEqual('foo'); + + // Set password response + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect($('#dropdown #linkPassText').val()).toEqual(''); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Password protected'); + }); it('shows share with link checkbox when allowed', function() { $('#allowShareWithLink').val('yes'); OC.Share.showDropDown( @@ -129,6 +214,206 @@ describe('OC.Share tests', function() { ); expect($('#dropdown #linkCheckbox').length).toEqual(0); }); + it('Reset link when password is enforced and link is toggled', function() { + var old = oc_appconfig.core.enforcePasswordForPublicLink; + oc_appconfig.core.enforcePasswordForPublicLink = true; + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkText').val()).toEqual(''); + + // Set password + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + // Remove link + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + /* + * Try to share again + * The linkText should be emptied + */ + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkText').val()).toEqual(''); + + /* + * Do not set password but untoggle + * Since there is no share this should not result in another request to the server + */ + $('#dropdown [name=linkCheckbox]').click(); + expect(fakeServer.requests.length).toEqual(2); + + oc_appconfig.core.enforcePasswordForPublicLink = old; + }); + + it('Reset password placeholder when password is enforced and link is toggled', function() { + var old = oc_appconfig.core.enforcePasswordForPublicLink; + oc_appconfig.core.enforcePasswordForPublicLink = true; + $('#allowShareWithLink').val('yes'); + + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + + // Toggle linkshare + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Choose a password for the public link'); + + // Set password + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('**********'); + + // Remove link + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + // Try to share again + $('#dropdown [name=linkCheckbox]').click(); + expect($('#dropdown #linkPassText').attr('placeholder')).toEqual('Choose a password for the public link'); + + oc_appconfig.core.enforcePasswordForPublicLink = old; + }); + it('reset password on toggle of share', function() { + $('#allowShareWithLink').val('yes'); + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + //Password protection should be unchecked and password field not visible + expect($('#dropdown [name=showPassword]').prop('checked')).toEqual(false); + expect($('#dropdown #linkPass').is(":visible")).toEqual(false); + + // Toggle and set password + $('#dropdown [name=showPassword]').click(); + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz2'}, status: 'success'}) + ); + + // Unshare + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[2].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + // Toggle share again + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[3].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz3'}, status: 'success'}) + ); + + + // Password checkbox should be unchecked + expect($('#dropdown [name=showPassword]').prop('checked')).toEqual(false); + expect($('#dropdown #linkPass').is(":visible")).toEqual(false); + }); + it('reset expiration on toggle of share', function() { + $('#allowShareWithLink').val('yes'); + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + 31, + 'shared_file_name.txt' + ); + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + //Expiration should be unchecked and expiration field not visible + expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(false); + expect($('#dropdown #expirationDate').is(":visible")).toEqual(false); + + // Toggle and set password + $('#dropdown [name=expirationCheckbox]').click(); + d = new Date(); + d.setDate(d.getDate() + 1); + date=d.getDate() + '-' + (d.getMonth()+1) + '-' + d.getFullYear(); + $('#dropdown #expirationDate').val(date); + $('#dropdown #expirationDate').change(); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz2'}, status: 'success'}) + ); + + // Unshare + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[2].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ); + + // Toggle share again + $('#dropdown [name=linkCheckbox]').click(); + fakeServer.requests[3].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz3'}, status: 'success'}) + ); + + // Recheck expire visibility + expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(false); + expect($('#dropdown #expirationDate').is(":visible")).toEqual(false); + }); it('shows populated link share when a link share exists', function() { loadItemStub.returns({ reshare: [], @@ -320,6 +605,7 @@ describe('OC.Share tests', function() { }; loadItemStub.returns(shareData); oc_appconfig.core.defaultExpireDate = 7; + oc_appconfig.core.enforcePasswordForPublicLink = false; oc_appconfig.core.defaultExpireDateEnabled = false; oc_appconfig.core.defaultExpireDateEnforced = false; }); @@ -375,6 +661,32 @@ describe('OC.Share tests', function() { $('#dropdown [name=expirationCheckbox]').click(); expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(true); }); + it('enforces default date when enforced date setting is enabled and password is enforced', function() { + /* jshint camelcase:false */ + oc_appconfig.core.enforcePasswordForPublicLink = true; + oc_appconfig.core.defaultExpireDateEnabled = true; + oc_appconfig.core.defaultExpireDateEnforced = true; + showDropDown(); + $('#dropdown [name=linkCheckbox]').click(); + + //Enter password + $('#dropdown #linkPassText').val('foo'); + $('#dropdown #linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(true); + // TODO: those zeros must go... + expect($('#dropdown #expirationDate').val()).toEqual('2014-1-27 00:00:00'); + + // disabling is not allowed + expect($('#dropdown [name=expirationCheckbox]').prop('disabled')).toEqual(true); + $('#dropdown [name=expirationCheckbox]').click(); + expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(true); + }); it('displayes email form when sending emails is enabled', function() { $('input[name=mailPublicNotificationEnabled]').val('yes'); showDropDown(); @@ -770,6 +1082,26 @@ describe('OC.Share tests', function() { ); expect($('#dropdown #shareWithList').length).toEqual(0); }); + it('allows owner to share their own share when they are also the recipient', function() { + OC.currentUser = 'user1'; + loadItemStub.returns({ + reshare: { + permissions: OC.PERMISSION_READ, + uid_owner: 'user1' + }, + shares: [] + }); + OC.Share.showDropDown( + 'file', + 123, + $container, + true, + OC.PERMISSION_ALL, + 'shared_file_name.txt' + ); + // sharing still allowed + expect($('#dropdown #shareWithList').length).toEqual(1); + }); }); }); }); @@ -802,9 +1134,9 @@ describe('OC.Share tests', function() { $action = $file.find('.action-share>span'); expect($action.text()).toEqual(output); if (_.isString(title)) { - expect($action.find('.remoteOwner').attr('title')).toEqual(title); + expect($action.find('.remoteAddress').attr('title')).toEqual(title); } else { - expect($action.find('.remoteOwner').attr('title')).not.toBeDefined(); + expect($action.find('.remoteAddress').attr('title')).not.toBeDefined(); } expect(tipsyStub.calledOnce).toEqual(true); tipsyStub.reset(); @@ -895,7 +1227,94 @@ describe('OC.Share tests', function() { checkIcon('filetypes/folder-public'); }); }); - // TODO: add unit tests for share recipients + + describe('displaying the recipoients', function() { + function checkRecipients(input, output, title) { + var $action; + + $file.attr('data-share-recipients', input); + OC.Share.markFileAsShared($file, true); + + $action = $file.find('.action-share>span'); + expect($action.text()).toEqual(output); + if (_.isString(title)) { + expect($action.find('.remoteAddress').attr('title')).toEqual(title); + } else if (_.isArray(title)) { + var tooltips = $action.find('.remoteAddress'); + expect(tooltips.length).toEqual(title.length); + + tooltips.each(function(i) { + expect($(this).attr('title')).toEqual(title[i]); + }); + } else { + expect($action.find('.remoteAddress').attr('title')).not.toBeDefined(); + } + expect(tipsyStub.calledOnce).toEqual(true); + tipsyStub.reset(); + } + + it('displays the local share owner as is', function() { + checkRecipients('User One', 'Shared with User One', null); + }); + it('displays the user name part of a remote recipient', function() { + checkRecipients( + 'User One@someserver.com', + 'Shared with User One@…', + 'User One@someserver.com' + ); + checkRecipients( + 'User One@someserver.com/', + 'Shared with User One@…', + 'User One@someserver.com' + ); + checkRecipients( + 'User One@someserver.com/root/of/owncloud', + 'Shared with User One@…', + 'User One@someserver.com' + ); + }); + it('displays the user name part with domain of a remote share owner', function() { + checkRecipients( + 'User One@example.com@someserver.com', + 'Shared with User One@example.com', + 'User One@example.com@someserver.com' + ); + checkRecipients( + 'User One@example.com@someserver.com/', + 'Shared with User One@example.com', + 'User One@example.com@someserver.com' + ); + checkRecipients( + 'User One@example.com@someserver.com/root/of/owncloud', + 'Shared with User One@example.com', + 'User One@example.com@someserver.com' + ); + }); + it('display multiple remote recipients', function() { + checkRecipients( + 'One@someserver.com, two@otherserver.com', + 'Shared with One@…, two@…', + ['One@someserver.com', 'two@otherserver.com'] + ); + checkRecipients( + 'One@someserver.com/, two@otherserver.com', + 'Shared with One@…, two@…', + ['One@someserver.com', 'two@otherserver.com'] + ); + checkRecipients( + 'One@someserver.com/root/of/owncloud, two@otherserver.com', + 'Shared with One@…, two@…', + ['One@someserver.com', 'two@otherserver.com'] + ); + }); + it('display mixed recipients', function() { + checkRecipients( + 'One, two@otherserver.com', + 'Shared with One, two@…', + ['two@otherserver.com'] + ); + }); + }); }); }); diff --git a/core/js/update-notification.js b/core/js/update-notification.js new file mode 100644 index 00000000000..42baa7f4c28 --- /dev/null +++ b/core/js/update-notification.js @@ -0,0 +1,30 @@ +/** + * Copyright (c) 2015 ownCloud Inc + * + * @author Morris Jobke <hey@morrisjobke.de> + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/** + * this gets only loaded if an update is available and then shows a temporary notification + */ +$(document).ready(function(){ + var head = $('html > head'), + version = head.data('update-version'), + docLink = head.data('update-link'), + text = t('core', '{version} is available. Get more information on how to update.', {version: version}), + element = $('<a>').attr('href', docLink).text(text); + + OC.Notification.showTemporary( + element, + { + isHTML: true + } + ); +}); + diff --git a/core/js/update.js b/core/js/update.js index 60f04832935..fd3c7a56bd6 100644 --- a/core/js/update.js +++ b/core/js/update.js @@ -22,6 +22,8 @@ return; } + var hasWarnings = false; + this.$el = $el; this._started = true; @@ -40,6 +42,7 @@ }); updateEventSource.listen('notice', function(message) { $('<span>').addClass('error').append(message).append('<br />').appendTo($el); + hasWarnings = true; }); updateEventSource.listen('error', function(message) { $('<span>').addClass('error').append(message).append('<br />').appendTo($el); @@ -57,14 +60,23 @@ .appendTo($el); }); updateEventSource.listen('done', function() { - // FIXME: use product name - $('<span>').addClass('bold') - .append('<br />') - .append(t('core', 'The update was successful. Redirecting you to ownCloud now.')) - .appendTo($el); - setTimeout(function () { - OC.redirect(OC.webroot); - }, 3000); + if (hasWarnings) { + $('<span>').addClass('bold') + .append('<br />') + .append(t('core', 'The update was successful. There were warnings.')) + .appendTo($el); + var message = t('core', 'Please reload the page.'); + $('<span>').append('<br />').append(message).append('<br />').appendTo($el); + } else { + // FIXME: use product name + $('<span>').addClass('bold') + .append('<br />') + .append(t('core', 'The update was successful. Redirecting you to ownCloud now.')) + .appendTo($el); + setTimeout(function () { + OC.redirect(OC.webroot); + }, 3000); + } }); }, diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js index 175a5cd3b76..43f895fce87 100644 --- a/core/l10n/af_ZA.js +++ b/core/l10n/af_ZA.js @@ -8,6 +8,8 @@ OC.L10N.register( "Checked database schema update" : "Databasis skema opdatering nagegaan", "Checked database schema update for apps" : "Databasis skema opdatering nagegaan vir sagteware", "Updated \"%s\" to %s" : "\"%s\" opgedateer na %s", + "Repair warning: " : "Herstel waarskuwing:", + "Repair error: " : "Herstel fout:", "No image or file provided" : "Geen prent of lêer voorsien", "Unknown filetype" : "Onbekende lêertipe", "Invalid image" : "Ongeldige prent", @@ -42,10 +44,10 @@ OC.L10N.register( "Yes" : "Ja", "Choose" : "Kies", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "One file conflict" : "Een lêer konflik", "New Files" : "Nuwe lêers", "Already existing files" : "Bestaande lêers", + "Which files do you want to keep?" : "Watse lêers wil jy hou?", "Cancel" : "Kanselleer", "Continue" : "Gaan voort", "Very weak password" : "Baie swak wagwoord", @@ -83,20 +85,17 @@ OC.L10N.register( "Warning" : "Waarskuwing", "The object type is not specified." : "Hierdie objek tipe is nie gespesifiseer nie.", "Add" : "Voeg by", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.", "%s password reset" : "%s wagwoord herstel", "Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}", "New password" : "Nuwe wagwoord", "Reset password" : "Herstel wagwoord", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persoonlik", "Users" : "Gebruikers", "Apps" : "Toepassings", "Admin" : "Admin", "Help" : "Hulp", "Access forbidden" : "Toegang verbode", - "Security Warning" : "Sekuriteits waarskuwing", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.", "Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>", @@ -109,7 +108,6 @@ OC.L10N.register( "Database tablespace" : "Databasis tabelspasie", "Database host" : "Databasis gasheer", "Finish setup" : "Maak opstelling klaar", - "%s is available. Get more information on how to update." : "%s is beskikbaar. Kry meer inligting oor opdatering.", "Log out" : "Teken uit", "remember" : "onthou", "Log in" : "Teken aan", diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json index fcafcbd2bce..a919524c8c5 100644 --- a/core/l10n/af_ZA.json +++ b/core/l10n/af_ZA.json @@ -6,6 +6,8 @@ "Checked database schema update" : "Databasis skema opdatering nagegaan", "Checked database schema update for apps" : "Databasis skema opdatering nagegaan vir sagteware", "Updated \"%s\" to %s" : "\"%s\" opgedateer na %s", + "Repair warning: " : "Herstel waarskuwing:", + "Repair error: " : "Herstel fout:", "No image or file provided" : "Geen prent of lêer voorsien", "Unknown filetype" : "Onbekende lêertipe", "Invalid image" : "Ongeldige prent", @@ -40,10 +42,10 @@ "Yes" : "Ja", "Choose" : "Kies", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "One file conflict" : "Een lêer konflik", "New Files" : "Nuwe lêers", "Already existing files" : "Bestaande lêers", + "Which files do you want to keep?" : "Watse lêers wil jy hou?", "Cancel" : "Kanselleer", "Continue" : "Gaan voort", "Very weak password" : "Baie swak wagwoord", @@ -81,20 +83,17 @@ "Warning" : "Waarskuwing", "The object type is not specified." : "Hierdie objek tipe is nie gespesifiseer nie.", "Add" : "Voeg by", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Die opdatering was suksesvol. Jy word nou aan ownCloud terug gelei.", "%s password reset" : "%s wagwoord herstel", "Use the following link to reset your password: {link}" : "Gebruik die volgende skakel om jou wagwoord te herstel: {link}", "New password" : "Nuwe wagwoord", "Reset password" : "Herstel wagwoord", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persoonlik", "Users" : "Gebruikers", "Apps" : "Toepassings", "Admin" : "Admin", "Help" : "Hulp", "Access forbidden" : "Toegang verbode", - "Security Warning" : "Sekuriteits waarskuwing", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jou data gids en lêers is moontlik toeganklik vanaf die internet omdat die .htaccess lêer nie werk nie.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vir inligting oor hoe om jou bediener behoorlik op te stel, sien asseblief die<a href=\"%s\" target=\"_blank\">dokumentasie</a>.", "Create an <strong>admin account</strong>" : "Skep `n <strong>admin-rekening</strong>", @@ -107,7 +106,6 @@ "Database tablespace" : "Databasis tabelspasie", "Database host" : "Databasis gasheer", "Finish setup" : "Maak opstelling klaar", - "%s is available. Get more information on how to update." : "%s is beskikbaar. Kry meer inligting oor opdatering.", "Log out" : "Teken uit", "remember" : "onthou", "Log in" : "Teken aan", diff --git a/core/l10n/ar.js b/core/l10n/ar.js index 40f6d871b08..3fcc7002be0 100644 --- a/core/l10n/ar.js +++ b/core/l10n/ar.js @@ -33,7 +33,6 @@ OC.L10N.register( "Choose" : "اختيار", "Ok" : "موافق", "read-only" : "قراءة فقط", - "_{count} file conflict_::_{count} file conflicts_" : ["","","","","",""], "New Files" : "ملفات جديدة", "Already existing files" : "المفات موجودة مسبقاً", "Which files do you want to keep?" : "ماهي الملفات التي ترغب في إبقاءها ؟", @@ -53,7 +52,6 @@ OC.L10N.register( "Error while changing permissions" : "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل", "Shared with you and the group {group} by {owner}" : "شورك معك ومع المجموعة {group} من قبل {owner}", "Shared with you by {owner}" : "شورك معك من قبل {owner}", - "Share with user or group …" : "المشاركة مع مستخدم أو مجموعة...", "Share link" : "شارك الرابط", "Link" : "الرابط", "Password protect" : "حماية كلمة السر", @@ -88,20 +86,17 @@ OC.L10N.register( "Enter new" : "إدخال جديد", "Delete" : "إلغاء", "Add" : "اضف", - "_download %n file_::_download %n files_" : ["","","","","",""], "The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud", "%s password reset" : "تمت إعادة ضبط كلمة مرور %s", "Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}", "New password" : "كلمات سر جديدة", "Reset password" : "تعديل كلمة السر", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","","","",""], "Personal" : "شخصي", "Users" : "المستخدمين", "Apps" : "التطبيقات", "Admin" : "المدير", "Help" : "المساعدة", "Access forbidden" : "التوصّل محظور", - "Security Warning" : "تحذير أمان", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.", "Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>", diff --git a/core/l10n/ar.json b/core/l10n/ar.json index e9ca9bf366f..d1c70bacab9 100644 --- a/core/l10n/ar.json +++ b/core/l10n/ar.json @@ -31,7 +31,6 @@ "Choose" : "اختيار", "Ok" : "موافق", "read-only" : "قراءة فقط", - "_{count} file conflict_::_{count} file conflicts_" : ["","","","","",""], "New Files" : "ملفات جديدة", "Already existing files" : "المفات موجودة مسبقاً", "Which files do you want to keep?" : "ماهي الملفات التي ترغب في إبقاءها ؟", @@ -51,7 +50,6 @@ "Error while changing permissions" : "حصل خطأ عند عملية إعادة تعيين التصريح بالتوصل", "Shared with you and the group {group} by {owner}" : "شورك معك ومع المجموعة {group} من قبل {owner}", "Shared with you by {owner}" : "شورك معك من قبل {owner}", - "Share with user or group …" : "المشاركة مع مستخدم أو مجموعة...", "Share link" : "شارك الرابط", "Link" : "الرابط", "Password protect" : "حماية كلمة السر", @@ -86,20 +84,17 @@ "Enter new" : "إدخال جديد", "Delete" : "إلغاء", "Add" : "اضف", - "_download %n file_::_download %n files_" : ["","","","","",""], "The update was successful. Redirecting you to ownCloud now." : "تم التحديث بنجاح , يتم اعادة توجيهك الان الى Owncloud", "%s password reset" : "تمت إعادة ضبط كلمة مرور %s", "Use the following link to reset your password: {link}" : "استخدم هذه الوصلة لاسترجاع كلمة السر: {link}", "New password" : "كلمات سر جديدة", "Reset password" : "تعديل كلمة السر", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","","","",""], "Personal" : "شخصي", "Users" : "المستخدمين", "Apps" : "التطبيقات", "Admin" : "المدير", "Help" : "المساعدة", "Access forbidden" : "التوصّل محظور", - "Security Warning" : "تحذير أمان", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "مجلدات البيانات والملفات الخاصة قد تكون قابلة للوصول اليها عن طريق شبكة الانترنت وذلك بسبب ان ملف .htaccess لا يعمل بشكل صحيح.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "لمزيد من المعلومات عن كيفية إعداد خادمك، يرجى الاطلاع على <a href=\"%s\" target=\"_blank\">صفحة المساعدة</a>.", "Create an <strong>admin account</strong>" : "أضف </strong>مستخدم رئيسي <strong>", diff --git a/core/l10n/ast.js b/core/l10n/ast.js index 3151227e440..0eb8951a046 100644 --- a/core/l10n/ast.js +++ b/core/l10n/ast.js @@ -70,7 +70,6 @@ OC.L10N.register( "Error while changing permissions" : "Fallu mientres camudaben los permisos", "Shared with you and the group {group} by {owner}" : "Compartíu contigo y col grupu {group} por {owner}", "Shared with you by {owner}" : "Compartíu contigo por {owner}", - "Share with user or group …" : "Compartir col usuariu o grupu ...", "Share link" : "Compartir enllaz", "The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación", "Password protect" : "Protexer con contraseña", @@ -104,7 +103,6 @@ OC.L10N.register( "Edit tags" : "Editar etiquetes", "Error loading dialog template: {error}" : "Fallu cargando plantía de diálogu: {error}", "No tags selected for deletion." : "Nun s'esbillaron etiquetes pa desaniciar.", - "_download %n file_::_download %n files_" : ["",""], "Updating {productName} to version {version}, this may take a while." : "Anovando {productName} a la versión {version}, esto pue llevar un tiempu.", "Please reload the page." : "Por favor, recarga la páxina", "The update was successful. Redirecting you to ownCloud now." : "L'anovamientu fízose con ésitu. Redirixiendo agora al to ownCloud.", @@ -116,7 +114,6 @@ OC.L10N.register( "New password" : "Contraseña nueva", "New Password" : "Contraseña nueva", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Aplicaciones", @@ -133,7 +130,6 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola, ¿qué hai?\n\nnamái déxanos dicite que %s compartió %s contigo.\nVelu: %s\n\n", "The share will expire on %s." : "La compartición va caducar el %s.", "Cheers!" : "¡Salú!", - "Security Warning" : "Avisu de seguridá", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>", @@ -149,7 +145,6 @@ OC.L10N.register( "Database host" : "Agospiador de la base de datos", "Finish setup" : "Finar la configuración ", "Finishing …" : "Finando ...", - "%s is available. Get more information on how to update." : "Ta disponible %s. Consigui más información en cómo anovar·", "Log out" : "Zarrar sesión", "Search" : "Guetar", "Server side authentication failed!" : "Falló l'autenticación nel sirvidor!", diff --git a/core/l10n/ast.json b/core/l10n/ast.json index 56f1b2be642..4a6ffcbc03c 100644 --- a/core/l10n/ast.json +++ b/core/l10n/ast.json @@ -68,7 +68,6 @@ "Error while changing permissions" : "Fallu mientres camudaben los permisos", "Shared with you and the group {group} by {owner}" : "Compartíu contigo y col grupu {group} por {owner}", "Shared with you by {owner}" : "Compartíu contigo por {owner}", - "Share with user or group …" : "Compartir col usuariu o grupu ...", "Share link" : "Compartir enllaz", "The public link will expire no later than {days} days after it is created" : "L'enllaz públicu va caducar enantes de {days} díes dende la so creación", "Password protect" : "Protexer con contraseña", @@ -102,7 +101,6 @@ "Edit tags" : "Editar etiquetes", "Error loading dialog template: {error}" : "Fallu cargando plantía de diálogu: {error}", "No tags selected for deletion." : "Nun s'esbillaron etiquetes pa desaniciar.", - "_download %n file_::_download %n files_" : ["",""], "Updating {productName} to version {version}, this may take a while." : "Anovando {productName} a la versión {version}, esto pue llevar un tiempu.", "Please reload the page." : "Por favor, recarga la páxina", "The update was successful. Redirecting you to ownCloud now." : "L'anovamientu fízose con ésitu. Redirixiendo agora al to ownCloud.", @@ -114,7 +112,6 @@ "New password" : "Contraseña nueva", "New Password" : "Contraseña nueva", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Aplicaciones", @@ -131,7 +128,6 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola, ¿qué hai?\n\nnamái déxanos dicite que %s compartió %s contigo.\nVelu: %s\n\n", "The share will expire on %s." : "La compartición va caducar el %s.", "Cheers!" : "¡Salú!", - "Security Warning" : "Avisu de seguridá", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "El to direutoriu de datos y ficheros seique ye accesible dende internet por mor qu'el ficheru .htaccess nun furrula.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pa informase de cómo configurar el so sirvidor, por favor güeya la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crea una <strong>cuenta d'alministrador</strong>", @@ -147,7 +143,6 @@ "Database host" : "Agospiador de la base de datos", "Finish setup" : "Finar la configuración ", "Finishing …" : "Finando ...", - "%s is available. Get more information on how to update." : "Ta disponible %s. Consigui más información en cómo anovar·", "Log out" : "Zarrar sesión", "Search" : "Guetar", "Server side authentication failed!" : "Falló l'autenticación nel sirvidor!", diff --git a/core/l10n/az.js b/core/l10n/az.js index 0b71c440759..be8608bdecd 100644 --- a/core/l10n/az.js +++ b/core/l10n/az.js @@ -34,7 +34,6 @@ OC.L10N.register( "Yes" : "Bəli", "Choose" : "Seç", "Ok" : "Oldu", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Dayandır", "Very weak password" : "Çox asan şifrə", "Weak password" : "Asan şifrə", @@ -56,15 +55,12 @@ OC.L10N.register( "Warning" : "Xəbərdarlıq", "Delete" : "Sil", "Add" : "Əlavə etmək", - "_download %n file_::_download %n files_" : ["",""], "New password" : "Yeni şifrə", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Şəxsi", "Users" : "İstifadəçilər", "Admin" : "İnzibatçı", "Help" : "Kömək", "Cheers!" : "Şərəfə!", - "Security Warning" : "Təhlükəsizlik xəbərdarlığı", "Username" : "İstifadəçi adı", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Xüsusilə fayl sinxronizasiyası üçün desktop client-dən istifadə edilərsə, SQLite məsləhət görülmür.", "Search" : "Axtarış", diff --git a/core/l10n/az.json b/core/l10n/az.json index 3eef33835ac..54987978c04 100644 --- a/core/l10n/az.json +++ b/core/l10n/az.json @@ -32,7 +32,6 @@ "Yes" : "Bəli", "Choose" : "Seç", "Ok" : "Oldu", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Dayandır", "Very weak password" : "Çox asan şifrə", "Weak password" : "Asan şifrə", @@ -54,15 +53,12 @@ "Warning" : "Xəbərdarlıq", "Delete" : "Sil", "Add" : "Əlavə etmək", - "_download %n file_::_download %n files_" : ["",""], "New password" : "Yeni şifrə", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Şəxsi", "Users" : "İstifadəçilər", "Admin" : "İnzibatçı", "Help" : "Kömək", "Cheers!" : "Şərəfə!", - "Security Warning" : "Təhlükəsizlik xəbərdarlığı", "Username" : "İstifadəçi adı", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Xüsusilə fayl sinxronizasiyası üçün desktop client-dən istifadə edilərsə, SQLite məsləhət görülmür.", "Search" : "Axtarış", diff --git a/core/l10n/be.js b/core/l10n/be.js index e95df95f284..defe9f70337 100644 --- a/core/l10n/be.js +++ b/core/l10n/be.js @@ -25,11 +25,8 @@ OC.L10N.register( "Yes" : "Так", "Choose" : "Выбар", "Ok" : "Добра", - "_{count} file conflict_::_{count} file conflicts_" : ["","","",""], "Error" : "Памылка", "The object type is not specified." : "Тып аб'екта не ўдакладняецца.", - "_download %n file_::_download %n files_" : ["","","",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Finish setup" : "Завяршыць ўстаноўку." }, -"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); +"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/core/l10n/be.json b/core/l10n/be.json index bc77754270a..50e1a29dcaf 100644 --- a/core/l10n/be.json +++ b/core/l10n/be.json @@ -23,11 +23,8 @@ "Yes" : "Так", "Choose" : "Выбар", "Ok" : "Добра", - "_{count} file conflict_::_{count} file conflicts_" : ["","","",""], "Error" : "Памылка", "The object type is not specified." : "Тып аб'екта не ўдакладняецца.", - "_download %n file_::_download %n files_" : ["","","",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Finish setup" : "Завяршыць ўстаноўку." -},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" +},"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/core/l10n/bg_BG.js b/core/l10n/bg_BG.js index 7c8cfc63b65..e96f8e2d6b0 100644 --- a/core/l10n/bg_BG.js +++ b/core/l10n/bg_BG.js @@ -8,6 +8,10 @@ OC.L10N.register( "Checked database schema update" : "Обновяването на схемата на базата данни е проверено", "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено", "Updated \"%s\" to %s" : "Обновен \"%s\" до %s", + "Repair warning: " : "Предупреждение при поправка:", + "Repair error: " : "Грешка при поправка:", + "Following incompatible apps have been disabled: %s" : "Следните несъвместими приложения бяха изключени: %s", + "Invalid file provided" : "Предоставен е невалиден файл", "No image or file provided" : "Не бяха доставени картинка или файл", "Unknown filetype" : "Непознат файлов тип", "Invalid image" : "Невалидно изображение", @@ -62,6 +66,9 @@ OC.L10N.register( "So-so password" : "Не особено добра парола", "Good password" : "Добра парола", "Strong password" : "Сигурна парола", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашият web сървър все още не е удачно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът изглежда не работи.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.", "Error occurred while checking server setup" : "Настъпи грешка при проверката на настройките на сървъра.", "Shared" : "Споделено", "Shared with {recipients}" : "Споделено с {recipients}.", @@ -72,7 +79,6 @@ OC.L10N.register( "Error while changing permissions" : "Грешка при промяна на привилегиите", "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", "Shared with you by {owner}" : "Споделено с Вас от {owner}.", - "Share with user or group …" : "Споделяне с потребител или група...", "Share link" : "Връзка за споделяне", "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.", "Link" : "Връзка", @@ -130,7 +136,6 @@ OC.L10N.register( "New Password" : "Нова Парола", "Reset password" : "Възстановяване на паролата", "Searching other places" : "Търсене в други места", - "No search result in other places" : "Няма резултати от търсене в други места", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} резултат от търсене в други места","{count} резултати от търсене в други места"], "Personal" : "Лични", "Users" : "Потребители", @@ -158,12 +163,12 @@ OC.L10N.register( "Technical details" : "Технически подробности", "Remote Address: %s" : "Отдалечен адрес: %s", "Request ID: %s" : "ID на заявка: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Съобщение: %s", "File: %s" : "Файл: %s", "Line: %s" : "Линия: %s", "Trace" : "Проследяване на грешките", - "Security Warning" : "Предупреждение за сигурноста", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".htaccess\" не функционира.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.", "Create an <strong>admin account</strong>" : "Създаване на <strong>администраторски профил</strong>.", @@ -177,13 +182,12 @@ OC.L10N.register( "Database name" : "Име на базата данни", "Database tablespace" : "Tablespace на базата данни", "Database host" : "Хост за базата данни", - "Performance Warning" : "Предупреждение за производителността", "SQLite will be used as database." : "Ще бъде използвана SQLite за база данни.", "For larger installations we recommend to choose a different database backend." : "За по- големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особено, когато използвате клиент за работен плот за синхронизация, използването на SQLite e непрепоръчително.", "Finish setup" : "Завършване на настройките", "Finishing …" : "Завършване...", - "%s is available. Get more information on how to update." : "%s е на разположение. Прочети повече как да обновиш. ", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Това приложение изисква JavaScript, за да функционира правилно. Моля, {linkstart}включи JavaScript{linkend} и презареди страницата.", "Log out" : "Отписване", "Search" : "Търсене", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", @@ -207,6 +211,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Моля, увери се, че си направил копия на базата данни, папките с настройки и данни, преди да продължиш.", "Start update" : "Започване на обновяването", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:", + "This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.", "This page will refresh itself when the %s instance is available again." : "Тази страница ще се опресни автоматично, когато %s е отново на линия." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json index 14419b595b7..84b5a5b72a4 100644 --- a/core/l10n/bg_BG.json +++ b/core/l10n/bg_BG.json @@ -6,6 +6,10 @@ "Checked database schema update" : "Обновяването на схемата на базата данни е проверено", "Checked database schema update for apps" : "Обновяването на схемата на базата данни за приложения е проверено", "Updated \"%s\" to %s" : "Обновен \"%s\" до %s", + "Repair warning: " : "Предупреждение при поправка:", + "Repair error: " : "Грешка при поправка:", + "Following incompatible apps have been disabled: %s" : "Следните несъвместими приложения бяха изключени: %s", + "Invalid file provided" : "Предоставен е невалиден файл", "No image or file provided" : "Не бяха доставени картинка или файл", "Unknown filetype" : "Непознат файлов тип", "Invalid image" : "Невалидно изображение", @@ -60,6 +64,9 @@ "So-so password" : "Не особено добра парола", "Good password" : "Добра парола", "Strong password" : "Сигурна парола", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашият web сървър все още не е удачно настроен да позволява синхронизация на файлове, защото WebDAV интерфейсът изглежда не работи.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Сървърът няма работеща интернет връзка. Това означава, че някои функции като прикачването на външни дискови устройства, уведомления за обновяване или инсталиране на външни приложения няма да работят. Достъпът на файлове отвън или изпращане на имейли за уведомление вероятно също няма да работят. Препоръчваме да включиш интернет връзката за този сървър ако искаш да използваш всички тези функции.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Твоята директория за данни и файлове вероятно са достъпни от интернет. .htaccess файла не функционира. Силно препоръчваме да настроиш уебсъръра по такъв начин, че директорията за данни да не бъде достъпна или да я преместиш извън директорията корен на сървъра.", "Error occurred while checking server setup" : "Настъпи грешка при проверката на настройките на сървъра.", "Shared" : "Споделено", "Shared with {recipients}" : "Споделено с {recipients}.", @@ -70,7 +77,6 @@ "Error while changing permissions" : "Грешка при промяна на привилегиите", "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", "Shared with you by {owner}" : "Споделено с Вас от {owner}.", - "Share with user or group …" : "Споделяне с потребител или група...", "Share link" : "Връзка за споделяне", "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.", "Link" : "Връзка", @@ -128,7 +134,6 @@ "New Password" : "Нова Парола", "Reset password" : "Възстановяване на паролата", "Searching other places" : "Търсене в други места", - "No search result in other places" : "Няма резултати от търсене в други места", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} резултат от търсене в други места","{count} резултати от търсене в други места"], "Personal" : "Лични", "Users" : "Потребители", @@ -156,12 +161,12 @@ "Technical details" : "Технически подробности", "Remote Address: %s" : "Отдалечен адрес: %s", "Request ID: %s" : "ID на заявка: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Съобщение: %s", "File: %s" : "Файл: %s", "Line: %s" : "Линия: %s", "Trace" : "Проследяване на грешките", - "Security Warning" : "Предупреждение за сигурноста", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашата директория за данни и файлове Ви вероятно са достъпни от интернет, поради това, че файлът \".htaccess\" не функционира.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "За информация как правилно да настроиш сървъра си, моля прегледай <a href=\"%s\" target=\"_blank\">документацията</a>.", "Create an <strong>admin account</strong>" : "Създаване на <strong>администраторски профил</strong>.", @@ -175,13 +180,12 @@ "Database name" : "Име на базата данни", "Database tablespace" : "Tablespace на базата данни", "Database host" : "Хост за базата данни", - "Performance Warning" : "Предупреждение за производителността", "SQLite will be used as database." : "Ще бъде използвана SQLite за база данни.", "For larger installations we recommend to choose a different database backend." : "За по- големи инсталации Ви препоръчваме да изберете друг сървър за бази данни.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особено, когато използвате клиент за работен плот за синхронизация, използването на SQLite e непрепоръчително.", "Finish setup" : "Завършване на настройките", "Finishing …" : "Завършване...", - "%s is available. Get more information on how to update." : "%s е на разположение. Прочети повече как да обновиш. ", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Това приложение изисква JavaScript, за да функционира правилно. Моля, {linkstart}включи JavaScript{linkend} и презареди страницата.", "Log out" : "Отписване", "Search" : "Търсене", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", @@ -205,6 +209,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Моля, увери се, че си направил копия на базата данни, папките с настройки и данни, преди да продължиш.", "Start update" : "Започване на обновяването", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "За да избегнеш таймаутове при по-големи инсталации, можеш да изпълниш следните команди в инсталанционната директория:", + "This %s instance is currently in maintenance mode, which may take a while." : "В момента този %s се обновява, а това може да отнеме време.", "This page will refresh itself when the %s instance is available again." : "Тази страница ще се опресни автоматично, когато %s е отново на линия." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/bn_BD.js b/core/l10n/bn_BD.js index 1fff5530a73..92e47f1b28a 100644 --- a/core/l10n/bn_BD.js +++ b/core/l10n/bn_BD.js @@ -76,13 +76,11 @@ OC.L10N.register( "Delete" : "মুছে", "Add" : "যোগ কর", "Edit tags" : "ট্যাগ সম্পাদনা", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।", "Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}", "New password" : "নতুন কূটশব্দ", "New Password" : "নতুন কূটশব্দ", "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "ব্যক্তিগত", "Users" : "ব্যবহারকারী", "Apps" : "অ্যাপ", @@ -95,7 +93,6 @@ OC.L10N.register( "Access forbidden" : "অধিগমনের অনুমতি নেই", "File not found" : "ফাইল খুঁজে পাওয়া গেল না", "Cheers!" : "শুভেচ্ছা!", - "Security Warning" : "নিরাপত্তাজনিত সতর্কতা", "Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন", "Username" : "ব্যবহারকারী", "Data folder" : "ডাটা ফোল্ডার ", diff --git a/core/l10n/bn_BD.json b/core/l10n/bn_BD.json index 6ce95ab28a6..b68c9f28410 100644 --- a/core/l10n/bn_BD.json +++ b/core/l10n/bn_BD.json @@ -74,13 +74,11 @@ "Delete" : "মুছে", "Add" : "যোগ কর", "Edit tags" : "ট্যাগ সম্পাদনা", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "দয়া করে পৃষ্ঠাটি পূনরায় লোড করুন।", "Use the following link to reset your password: {link}" : "আপনার কূটশব্দটি পূনঃনির্ধারণ করার জন্য নিম্নোক্ত লিংকটি ব্যবহার করুনঃ {link}", "New password" : "নতুন কূটশব্দ", "New Password" : "নতুন কূটশব্দ", "Reset password" : "কূটশব্দ পূনঃনির্ধারণ কর", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "ব্যক্তিগত", "Users" : "ব্যবহারকারী", "Apps" : "অ্যাপ", @@ -93,7 +91,6 @@ "Access forbidden" : "অধিগমনের অনুমতি নেই", "File not found" : "ফাইল খুঁজে পাওয়া গেল না", "Cheers!" : "শুভেচ্ছা!", - "Security Warning" : "নিরাপত্তাজনিত সতর্কতা", "Create an <strong>admin account</strong>" : "<strong>প্রশাসক একাউন্ট</strong> তৈরী করুন", "Username" : "ব্যবহারকারী", "Data folder" : "ডাটা ফোল্ডার ", diff --git a/core/l10n/bn_IN.js b/core/l10n/bn_IN.js index 9e4c7b4046c..69c51dab414 100644 --- a/core/l10n/bn_IN.js +++ b/core/l10n/bn_IN.js @@ -3,15 +3,12 @@ OC.L10N.register( { "Settings" : "সেটিংস", "Saving..." : "সংরক্ষণ করা হচ্ছে ...", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "বাতিল করা", "Share" : "শেয়ার", "Error" : "ভুল", "Warning" : "সতর্কীকরণ", "Delete" : "মুছে ফেলা", "Add" : "যোগ করা", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Username" : "ইউজারনেম", "Search" : "অনুসন্ধান" }, diff --git a/core/l10n/bn_IN.json b/core/l10n/bn_IN.json index 186e41b1b21..f0f53afe5ad 100644 --- a/core/l10n/bn_IN.json +++ b/core/l10n/bn_IN.json @@ -1,15 +1,12 @@ { "translations": { "Settings" : "সেটিংস", "Saving..." : "সংরক্ষণ করা হচ্ছে ...", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "বাতিল করা", "Share" : "শেয়ার", "Error" : "ভুল", "Warning" : "সতর্কীকরণ", "Delete" : "মুছে ফেলা", "Add" : "যোগ করা", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Username" : "ইউজারনেম", "Search" : "অনুসন্ধান" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/bs.js b/core/l10n/bs.js index e84498c554a..819308dd66e 100644 --- a/core/l10n/bs.js +++ b/core/l10n/bs.js @@ -45,7 +45,6 @@ OC.L10N.register( "Ok" : "Ok", "Error loading message template: {error}" : "Pogrešno učitavanje šablona za poruke: {error}", "read-only" : "samo-čitljivo", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "One file conflict" : "Konflikt jedne datoteke", "New Files" : "Nove datoteke", "Already existing files" : "Postojeće datoteke", @@ -71,7 +70,6 @@ OC.L10N.register( "Error while changing permissions" : "Greška pri mijenjanju dozvola", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you by {owner}" : "Podijeljeno sa vama od {owner}", - "Share with user or group …" : "Podijelite s korisnikom ili grupom ...", "Share link" : "Podijelite vezu", "The public link will expire no later than {days} days after it is created" : "Javna veza ističe najkasnije {days} dana nakon što je kreirana", "Link" : "Veza", @@ -114,7 +112,6 @@ OC.L10N.register( "Hello world!" : "Halo svijete!", "sunny" : "sunčan", "Hello {name}, the weather is {weather}" : "Halo {name}, vrijeme je {weather}", - "_download %n file_::_download %n files_" : ["","",""], "Updating {productName} to version {version}, this may take a while." : "Ažuriranje {productName} u verziiju {version}, to može potrajati neko vrijeme.", "Please reload the page." : "Molim, ponovno učitajte stranicu", "The update was unsuccessful. " : "Ažuriranje nije uspjelo.", @@ -127,7 +124,6 @@ OC.L10N.register( "New password" : "Nova lozinka", "New Password" : "Nova Lozinka", "Reset password" : "Resetuj lozinku", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Osobno", "Users" : "Korisnici", "Apps" : "Aplikacije", @@ -155,7 +151,6 @@ OC.L10N.register( "Message: %s" : "Poruka: %s", "File: %s" : "Datoteka: %s", "Line: %s" : "Red: %s", - "Security Warning" : "Sigurnosno Upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaš direktorij podataka i datoteke vjerojatno se mogu pristupiti s interneta jer .htaccess datoteka ne radi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da valjano konfigurišete vaš server, molim pogledajte <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Kreirajte <strong>administracioni račun</strong>", @@ -171,7 +166,6 @@ OC.L10N.register( "Database host" : "Glavno računalo (host) baze podataka", "Finish setup" : "Završite postavke", "Finishing …" : "Završavanje...", - "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.", "Log out" : "Odjava", "Search" : "Potraži", "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!", diff --git a/core/l10n/bs.json b/core/l10n/bs.json index ce9c1479f99..b1f860fda14 100644 --- a/core/l10n/bs.json +++ b/core/l10n/bs.json @@ -43,7 +43,6 @@ "Ok" : "Ok", "Error loading message template: {error}" : "Pogrešno učitavanje šablona za poruke: {error}", "read-only" : "samo-čitljivo", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "One file conflict" : "Konflikt jedne datoteke", "New Files" : "Nove datoteke", "Already existing files" : "Postojeće datoteke", @@ -69,7 +68,6 @@ "Error while changing permissions" : "Greška pri mijenjanju dozvola", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you by {owner}" : "Podijeljeno sa vama od {owner}", - "Share with user or group …" : "Podijelite s korisnikom ili grupom ...", "Share link" : "Podijelite vezu", "The public link will expire no later than {days} days after it is created" : "Javna veza ističe najkasnije {days} dana nakon što je kreirana", "Link" : "Veza", @@ -112,7 +110,6 @@ "Hello world!" : "Halo svijete!", "sunny" : "sunčan", "Hello {name}, the weather is {weather}" : "Halo {name}, vrijeme je {weather}", - "_download %n file_::_download %n files_" : ["","",""], "Updating {productName} to version {version}, this may take a while." : "Ažuriranje {productName} u verziiju {version}, to može potrajati neko vrijeme.", "Please reload the page." : "Molim, ponovno učitajte stranicu", "The update was unsuccessful. " : "Ažuriranje nije uspjelo.", @@ -125,7 +122,6 @@ "New password" : "Nova lozinka", "New Password" : "Nova Lozinka", "Reset password" : "Resetuj lozinku", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Osobno", "Users" : "Korisnici", "Apps" : "Aplikacije", @@ -153,7 +149,6 @@ "Message: %s" : "Poruka: %s", "File: %s" : "Datoteka: %s", "Line: %s" : "Red: %s", - "Security Warning" : "Sigurnosno Upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaš direktorij podataka i datoteke vjerojatno se mogu pristupiti s interneta jer .htaccess datoteka ne radi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da valjano konfigurišete vaš server, molim pogledajte <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Kreirajte <strong>administracioni račun</strong>", @@ -169,7 +164,6 @@ "Database host" : "Glavno računalo (host) baze podataka", "Finish setup" : "Završite postavke", "Finishing …" : "Završavanje...", - "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.", "Log out" : "Odjava", "Search" : "Potraži", "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!", diff --git a/core/l10n/ca.js b/core/l10n/ca.js index 36f7f1dca7e..7ed783d68ed 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -8,6 +8,9 @@ OC.L10N.register( "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades", "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps", "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s", + "Repair warning: " : "Advertiment de reparació:", + "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", + "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", @@ -72,7 +75,9 @@ OC.L10N.register( "Error while changing permissions" : "Error en canviar els permisos", "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}", "Shared with you by {owner}" : "Compartit amb vos per {owner}", - "Share with user or group …" : "Comparteix amb usuari o grup...", + "Share with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartir amb la gent en altres ownClouds utilitzant la sintaxi username@example.com/owncloud", "Share link" : "Enllaç de compartició", "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo", "Link" : "Enllaç", @@ -85,6 +90,7 @@ OC.L10N.register( "Set expiration date" : "Estableix la data de venciment", "Expiration" : "Expiració", "Expiration date" : "Data de venciment", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", "Adding user..." : "Afegint usuari...", "group" : "grup", "remote" : "remot", @@ -130,7 +136,6 @@ OC.L10N.register( "New Password" : "Contrasenya nova", "Reset password" : "Reinicialitza la contrasenya", "Searching other places" : "Buscant altres ubicacions", - "No search result in other places" : "No s'han trobat resultats en altres ubicacions", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultat de cerca en altres ubicacions","{count} resultats de cerca en altres ubicacions"], "Personal" : "Personal", "Users" : "Usuaris", @@ -151,14 +156,19 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n", "The share will expire on %s." : "La compartició venç el %s.", "Cheers!" : "Salut!", + "Internal Server Error" : "Error Intern del Servidor", "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.", "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.", "Technical details" : "Detalls tècnics", "Remote Address: %s" : "Adreça remota: %s", + "Request ID: %s" : "Sol·licitud ID: %s ", + "Type: %s" : "Tipus: %s", "Code: %s" : "Codi: %s", "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", - "Security Warning" : "Avís de seguretat", + "Line: %s" : "Línia: %s", + "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>", @@ -172,13 +182,20 @@ OC.L10N.register( "Database name" : "Nom de la base de dades", "Database tablespace" : "Espai de taula de la base de dades", "Database host" : "Ordinador central de la base de dades", + "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.", + "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.", "Finish setup" : "Acaba la configuració", "Finishing …" : "Acabant...", - "%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.", + "Need help?" : "Necessites ajuda?", + "See the documentation" : "Consulti la documentació", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.", "Log out" : "Surt", "Search" : "Cerca", "Server side authentication failed!" : "L'autenticació del servidor ha fallat!", "Please contact your administrator." : "Contacteu amb l'administrador.", + "An internal error occured." : "S'ha produït un error intern.", + "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", "Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!", "remember" : "recorda'm", "Log in" : "Inici de sessió", @@ -197,6 +214,8 @@ OC.L10N.register( "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. " + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ca.json b/core/l10n/ca.json index 4f1a5e800af..fc855c2e7b4 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -6,6 +6,9 @@ "Checked database schema update" : "S'ha comprobat l'actualització de l'esquema de la base de dades", "Checked database schema update for apps" : "S'ha comprobat l'actualització de l'esquema de la base de dades per les apps", "Updated \"%s\" to %s" : "Actualitzat \"%s\" a %s", + "Repair warning: " : "Advertiment de reparació:", + "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", + "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", "Unknown filetype" : "Tipus de fitxer desconegut", "Invalid image" : "Imatge no vàlida", @@ -70,7 +73,9 @@ "Error while changing permissions" : "Error en canviar els permisos", "Shared with you and the group {group} by {owner}" : "Compartit amb vos i amb el grup {group} per {owner}", "Shared with you by {owner}" : "Compartit amb vos per {owner}", - "Share with user or group …" : "Comparteix amb usuari o grup...", + "Share with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartir amb la gent en altres ownClouds utilitzant la sintaxi username@example.com/owncloud", "Share link" : "Enllaç de compartició", "The public link will expire no later than {days} days after it is created" : "L'enllaç públic tindrà venciment abans de {days} dies després de crear-lo", "Link" : "Enllaç", @@ -83,6 +88,7 @@ "Set expiration date" : "Estableix la data de venciment", "Expiration" : "Expiració", "Expiration date" : "Data de venciment", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", "Adding user..." : "Afegint usuari...", "group" : "grup", "remote" : "remot", @@ -128,7 +134,6 @@ "New Password" : "Contrasenya nova", "Reset password" : "Reinicialitza la contrasenya", "Searching other places" : "Buscant altres ubicacions", - "No search result in other places" : "No s'han trobat resultats en altres ubicacions", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultat de cerca en altres ubicacions","{count} resultats de cerca en altres ubicacions"], "Personal" : "Personal", "Users" : "Usuaris", @@ -149,14 +154,19 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Ei,\n\nnomés fer-te saber que %s ha compartit %s amb tu.\nMira-ho a: %s\n\n", "The share will expire on %s." : "La compartició venç el %s.", "Cheers!" : "Salut!", + "Internal Server Error" : "Error Intern del Servidor", "The server encountered an internal error and was unable to complete your request." : "El servidor ha trobat un error intern i no pot finalitzar la teva petició.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Per favor, posi's en contacte amb l'administrador del servidor si aquest error torna a aparèixer diverses vegades, per favor inclogui els detalls tècnics de baix en el seu informe.", "More details can be found in the server log." : "Pots trobar més detalls al llistat del servidor.", "Technical details" : "Detalls tècnics", "Remote Address: %s" : "Adreça remota: %s", + "Request ID: %s" : "Sol·licitud ID: %s ", + "Type: %s" : "Tipus: %s", "Code: %s" : "Codi: %s", "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", - "Security Warning" : "Avís de seguretat", + "Line: %s" : "Línia: %s", + "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>compte d'administrador</strong>", @@ -170,13 +180,20 @@ "Database name" : "Nom de la base de dades", "Database tablespace" : "Espai de taula de la base de dades", "Database host" : "Ordinador central de la base de dades", + "SQLite will be used as database." : "SQLite s'utilitzarà com a base de dades.", + "For larger installations we recommend to choose a different database backend." : "Per a instal·lacions més grans es recomana triar una base de dades diferent.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "L'ús de SQLite està desaconsellat especialment quan s'usa el client d'escriptori per sincronitzar els fitxers.", "Finish setup" : "Acaba la configuració", "Finishing …" : "Acabant...", - "%s is available. Get more information on how to update." : "%s està disponible. Obtingueu més informació de com actualitzar.", + "Need help?" : "Necessites ajuda?", + "See the documentation" : "Consulti la documentació", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicació requereix Javascript per al seu correcte funcionament . Per favor, {linkstart}habiliti Javascript{linkend} i torni a carregar la pàgina.", "Log out" : "Surt", "Search" : "Cerca", "Server side authentication failed!" : "L'autenticació del servidor ha fallat!", "Please contact your administrator." : "Contacteu amb l'administrador.", + "An internal error occured." : "S'ha produït un error intern.", + "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", "Forgot your password? Reset it!" : "Heu oblidat la contrasenya? Restabliu-la!", "remember" : "recorda'm", "Log in" : "Inici de sessió", @@ -195,6 +212,8 @@ "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. " + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per evitar que s'esgoti el temps d'espera en instalacions grans, pots en el seu lloc fer córrer la següent comanda en el directori d'instalació. ", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància %s està actualment en manteniment i podria trigar una estona.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pàgina s'actualitzarà automàticament quan la instància %s estigui disponible de nou." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 3dfe54b2f12..df8c8036a13 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s", "Turned on maintenance mode" : "Zapnut režim údržby", "Turned off maintenance mode" : "Vypnut režim údržby", + "Maintenance mode is kept active" : "Mód údržby je aktivní", "Updated database" : "Zaktualizována databáze", "Checked database schema update" : "Aktualizace schéma databáze byla ověřena", "Checked database schema update for apps" : "Aktualizace schéma databáze aplikací byla ověřena", @@ -11,7 +12,7 @@ OC.L10N.register( "Repair warning: " : "Upozornění opravy:", "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Následující nekompatibilní aplikace byly zakázány: %s", - "Following 3rd party apps have been disabled: %s" : "Následující aplikace 3. stran byly zakázány: %s", + "Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s", "Invalid file provided" : "Zadán neplatný soubor", "No image or file provided" : "Soubor nebo obrázek nebyl zadán", "Unknown filetype" : "Neznámý typ souboru", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v <a href=\"{docLink}\">dokumentaci</a>.", "Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována na hodnotu \"{expected}\". To značí možné ohrožení bezpečnosti a je doporučeno upravit toto nastavení.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimálně \"2,678,400\" sekund. To značí možné ohrožení bezpečnosti a je doporučeno upravit toto nastavení.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS jak je popsáno v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", "Shared" : "Sdílené", "Shared with {recipients}" : "Sdíleno s {recipients}", "Share" : "Sdílet", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Chyba při změně oprávnění", "Shared with you and the group {group} by {owner}" : "S Vámi a skupinou {group} sdílí {owner}", "Shared with you by {owner}" : "S Vámi sdílí {owner}", - "Share with user or group …" : "Sdílet s uživatelem nebo skupinou", + "Share with users or groups …" : "Sdílet s uživateli nebo skupinami", + "Share with users, groups or remote users …" : "Sdílet s uživateli, skupinami nebo vzdálenými uživateli", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Sdílejte s lidmi na ownClouds použitím syntaxe username@example.com/owncloud", "Share link" : "Sdílet odkaz", "The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření", "Link" : "Odkaz", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Nastavit datum vypršení platnosti", "Expiration" : "Konec platnosti", "Expiration date" : "Datum vypršení platnosti", + "An error occured. Please try again" : "Nastala chyba. Prosím zkuste to znovu", "Adding user..." : "Přidávám uživatele...", "group" : "skupina", "remote" : "vzdálený", @@ -130,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Ahoj {name}, je {weather}", "Hello {name}" : "Vítej, {name}", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], + "{version} is available. Get more information on how to update." : "Je dostupná {version}. Přečtěte si více informací jak aktualizovat.", "Updating {productName} to version {version}, this may take a while." : "Aktualizuji {productName} na verzi {version}, může to chvíli trvat.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. " : "Aktualizace nebyla úspěšná.", + "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", "The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.", "Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu", "Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.", @@ -143,7 +151,7 @@ OC.L10N.register( "New Password" : "Nové heslo", "Reset password" : "Obnovit heslo", "Searching other places" : "Prohledávání ostatních umístění", - "No search result in other places" : "Žádné nálezy v ostatních umístěních", + "No search results in other places" : "Žádné nálezy v ostatních umístěních", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} nález v ostatních umístěních","{count} nálezy v ostatních umístěních","{count} nálezů v ostatních umístěních"], "Personal" : "Osobní", "Users" : "Uživatelé", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Technické detaily", "Remote Address: %s" : "Vzdálená adresa: %s", "Request ID: %s" : "ID požadavku: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kód: %s", "Message: %s" : "Zpráva: %s", "File: %s" : "Soubor: %s", "Line: %s" : "Řádka: %s", "Trace" : "Trasa", - "Security Warning" : "Bezpečnostní upozornění", + "Security warning" : "Bezpečnostní varování", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.", "Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Složka s daty", "Configure the database" : "Nastavit databázi", "Only %s is available." : "Pouze %s je dostupný.", + "Install and activate additional PHP modules to choose other database types." : "Pro výběr jiných typů databáze je třeba nainstalovat a povolit dodatečné PHP moduly.", + "For more details check out the documentation." : "Více informací lze nalézt v dokumentaci.", "Database user" : "Uživatel databáze", "Database password" : "Heslo databáze", "Database name" : "Název databáze", "Database tablespace" : "Tabulkový prostor databáze", "Database host" : "Hostitel databáze", - "Performance Warning" : "Varování o výkonu", + "Performance warning" : "Varování o výkonu", "SQLite will be used as database." : "Bude použita SQLite databáze.", "For larger installations we recommend to choose a different database backend." : "Pro větší instalace doporučujeme vybrat jiné databázové řešení.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "Finish setup" : "Dokončit nastavení", "Finishing …" : "Dokončuji...", + "Need help?" : "Potřebujete pomoc?", + "See the documentation" : "Shlédnout dokumentaci", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.", - "%s is available. Get more information on how to update." : "%s je dostupná. Získejte více informací k postupu aktualizace.", "Log out" : "Odhlásit se", "Search" : "Hledat", "Server side authentication failed!" : "Autentizace na serveru selhala!", "Please contact your administrator." : "Kontaktujte prosím svého správce systému.", + "An internal error occured." : "Nastala vnitřní chyba.", + "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", "Forgot your password? Reset it!" : "Zapomenuté heslo? Nastavte si nové!", "remember" : "zapamatovat", "Log in" : "Přihlásit", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index 576a5dc605b..c4d112e44b6 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s", "Turned on maintenance mode" : "Zapnut režim údržby", "Turned off maintenance mode" : "Vypnut režim údržby", + "Maintenance mode is kept active" : "Mód údržby je aktivní", "Updated database" : "Zaktualizována databáze", "Checked database schema update" : "Aktualizace schéma databáze byla ověřena", "Checked database schema update for apps" : "Aktualizace schéma databáze aplikací byla ověřena", @@ -9,7 +10,7 @@ "Repair warning: " : "Upozornění opravy:", "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Následující nekompatibilní aplikace byly zakázány: %s", - "Following 3rd party apps have been disabled: %s" : "Následující aplikace 3. stran byly zakázány: %s", + "Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s", "Invalid file provided" : "Zadán neplatný soubor", "No image or file provided" : "Soubor nebo obrázek nebyl zadán", "Unknown filetype" : "Neznámý typ souboru", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Váš webový server ještě není správně nastaven pro umožnění synchronizace souborů, protože rozhraní WebDAV je pravděpodobně rozbité.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tento server nemá funkční připojení k Internetu. Některé moduly jako např. externí úložiště, oznámení o dostupných aktualizacích nebo instalace aplikací třetích stran nebudou fungovat. Přístup k souborům z jiných míst a odesílání oznamovacích emailů také nemusí fungovat. Pokud chcete využívat všechny možnosti ownCloud, doporučujeme povolit pro tento server připojení k Internetu.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Váš datový adresář i vaše soubory jsou pravděpodobně přístupné z Internetu. Soubor .htaccess nefunguje. Důrazně doporučujeme nakonfigurovat webový server tak, aby datový adresář nebyl nadále přístupný, nebo přesunout datový adresář mimo prostor zpřístupňovaný webovým serverem.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nebyla nakonfigurována paměťová cache. Pro zlepšení výkonu a dostupnosti ji prosím nakonfigurujte. Další informace lze nalézt v naší <a href=\"{docLink}\">dokumentaci</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP nemá práva pro čtení v /dev/urandom, to je ale z bezpečnostních důvodů velmi doporučováno. Více informací lze nalézt v <a href=\"{docLink}\">dokumentaci</a>.", "Error occurred while checking server setup" : "Při ověřování nastavení serveru došlo k chybě", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována na hodnotu \"{expected}\". To značí možné ohrožení bezpečnosti a je doporučeno upravit toto nastavení.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimálně \"2,678,400\" sekund. To značí možné ohrožení bezpečnosti a je doporučeno upravit toto nastavení.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP hlavička \"{header}\" není nakonfigurována ve shodě s \"{expected}\". To značí možné ohrožení bezpečnosti a soukromí a je doporučeno toto nastavení upravit.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP hlavička \"Strict-Transport-Security\" není nakonfigurována na minimum \"{seconds}\" sekund. Pro vylepšení bezpečnosti doporučujeme povolit HSTS dle popisu v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Přistupujete na tuto stránku přes protokol HTTP. Důrazně doporučujeme nakonfigurovat server tak, aby vyžadoval použití HTTPS jak je popsáno v našich <a href=\"{docUrl}\">bezpečnostních tipech</a>.", "Shared" : "Sdílené", "Shared with {recipients}" : "Sdíleno s {recipients}", "Share" : "Sdílet", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Chyba při změně oprávnění", "Shared with you and the group {group} by {owner}" : "S Vámi a skupinou {group} sdílí {owner}", "Shared with you by {owner}" : "S Vámi sdílí {owner}", - "Share with user or group …" : "Sdílet s uživatelem nebo skupinou", + "Share with users or groups …" : "Sdílet s uživateli nebo skupinami", + "Share with users, groups or remote users …" : "Sdílet s uživateli, skupinami nebo vzdálenými uživateli", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Sdílejte s lidmi na ownClouds použitím syntaxe username@example.com/owncloud", "Share link" : "Sdílet odkaz", "The public link will expire no later than {days} days after it is created" : "Veřejný odkaz vyprší nejpozději {days} dní od svého vytvoření", "Link" : "Odkaz", @@ -96,6 +101,7 @@ "Set expiration date" : "Nastavit datum vypršení platnosti", "Expiration" : "Konec platnosti", "Expiration date" : "Datum vypršení platnosti", + "An error occured. Please try again" : "Nastala chyba. Prosím zkuste to znovu", "Adding user..." : "Přidávám uživatele...", "group" : "skupina", "remote" : "vzdálený", @@ -128,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Ahoj {name}, je {weather}", "Hello {name}" : "Vítej, {name}", "_download %n file_::_download %n files_" : ["stáhnout %n soubor","stáhnout %n soubory","stáhnout %n souborů"], + "{version} is available. Get more information on how to update." : "Je dostupná {version}. Přečtěte si více informací jak aktualizovat.", "Updating {productName} to version {version}, this may take a while." : "Aktualizuji {productName} na verzi {version}, může to chvíli trvat.", "Please reload the page." : "Načtěte stránku znovu, prosím.", "The update was unsuccessful. " : "Aktualizace nebyla úspěšná.", + "The update was successful. There were warnings." : "Aktualizace byla úspěšná. Zachycen výskyt varování.", "The update was successful. Redirecting you to ownCloud now." : "Aktualizace byla úspěšná. Přesměrovávám na ownCloud.", "Couldn't reset password because the token is invalid" : "Heslo nebylo změněno kvůli neplatnému tokenu", "Couldn't send reset email. Please make sure your username is correct." : "Nelze odeslat email pro změnu hesla. Ujistěte se prosím, že zadáváte správné uživatelské jméno.", @@ -141,7 +149,7 @@ "New Password" : "Nové heslo", "Reset password" : "Obnovit heslo", "Searching other places" : "Prohledávání ostatních umístění", - "No search result in other places" : "Žádné nálezy v ostatních umístěních", + "No search results in other places" : "Žádné nálezy v ostatních umístěních", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} nález v ostatních umístěních","{count} nálezy v ostatních umístěních","{count} nálezů v ostatních umístěních"], "Personal" : "Osobní", "Users" : "Uživatelé", @@ -169,12 +177,13 @@ "Technical details" : "Technické detaily", "Remote Address: %s" : "Vzdálená adresa: %s", "Request ID: %s" : "ID požadavku: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kód: %s", "Message: %s" : "Zpráva: %s", "File: %s" : "Soubor: %s", "Line: %s" : "Řádka: %s", "Trace" : "Trasa", - "Security Warning" : "Bezpečnostní upozornění", + "Security warning" : "Bezpečnostní varování", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš adresář s daty a soubory jsou dostupné z internetu, protože soubor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pro informace, jak správně nastavit váš server, se podívejte do <a href=\"%s\" target=\"_blank\">dokumentace</a>.", "Create an <strong>admin account</strong>" : "Vytvořit <strong>účet správce</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Složka s daty", "Configure the database" : "Nastavit databázi", "Only %s is available." : "Pouze %s je dostupný.", + "Install and activate additional PHP modules to choose other database types." : "Pro výběr jiných typů databáze je třeba nainstalovat a povolit dodatečné PHP moduly.", + "For more details check out the documentation." : "Více informací lze nalézt v dokumentaci.", "Database user" : "Uživatel databáze", "Database password" : "Heslo databáze", "Database name" : "Název databáze", "Database tablespace" : "Tabulkový prostor databáze", "Database host" : "Hostitel databáze", - "Performance Warning" : "Varování o výkonu", + "Performance warning" : "Varování o výkonu", "SQLite will be used as database." : "Bude použita SQLite databáze.", "For larger installations we recommend to choose a different database backend." : "Pro větší instalace doporučujeme vybrat jiné databázové řešení.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Obzvláště při používání klientské aplikace pro synchronizaci s desktopem není SQLite doporučeno.", "Finish setup" : "Dokončit nastavení", "Finishing …" : "Dokončuji...", + "Need help?" : "Potřebujete pomoc?", + "See the documentation" : "Shlédnout dokumentaci", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tato aplikace potřebuje pro správnou funkčnost JavaScript. Prosím {linkstart}povolte JavaScript{linkend} a znovu načtěte stránku.", - "%s is available. Get more information on how to update." : "%s je dostupná. Získejte více informací k postupu aktualizace.", "Log out" : "Odhlásit se", "Search" : "Hledat", "Server side authentication failed!" : "Autentizace na serveru selhala!", "Please contact your administrator." : "Kontaktujte prosím svého správce systému.", + "An internal error occured." : "Nastala vnitřní chyba.", + "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", "Forgot your password? Reset it!" : "Zapomenuté heslo? Nastavte si nové!", "remember" : "zapamatovat", "Log in" : "Přihlásit", diff --git a/core/l10n/cy_GB.js b/core/l10n/cy_GB.js index 8d24afb3df6..f72771889d6 100644 --- a/core/l10n/cy_GB.js +++ b/core/l10n/cy_GB.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "Ie", "Choose" : "Dewisiwch", "Ok" : "Iawn", - "_{count} file conflict_::_{count} file conflicts_" : ["","","",""], "Cancel" : "Diddymu", "Shared" : "Rhannwyd", "Share" : "Rhannu", @@ -59,19 +58,16 @@ OC.L10N.register( "The object type is not specified." : "Nid yw'r math o wrthrych wedi cael ei nodi.", "Delete" : "Dileu", "Add" : "Ychwanegu", - "_download %n file_::_download %n files_" : ["","","",""], "The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.", "Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}", "New password" : "Cyfrinair newydd", "Reset password" : "Ailosod cyfrinair", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Personal" : "Personol", "Users" : "Defnyddwyr", "Apps" : "Pecynnau", "Admin" : "Gweinyddu", "Help" : "Cymorth", "Access forbidden" : "Mynediad wedi'i wahardd", - "Security Warning" : "Rhybudd Diogelwch", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ", "Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>", "Username" : "Enw defnyddiwr", @@ -83,7 +79,6 @@ OC.L10N.register( "Database tablespace" : "Tablespace cronfa ddata", "Database host" : "Gwesteiwr cronfa ddata", "Finish setup" : "Gorffen sefydlu", - "%s is available. Get more information on how to update." : "%s ar gael. Mwy o wybodaeth am sut i ddiweddaru.", "Log out" : "Allgofnodi", "Search" : "Chwilio", "remember" : "cofio", diff --git a/core/l10n/cy_GB.json b/core/l10n/cy_GB.json index 687dad85c2a..a8cac06d4fb 100644 --- a/core/l10n/cy_GB.json +++ b/core/l10n/cy_GB.json @@ -24,7 +24,6 @@ "Yes" : "Ie", "Choose" : "Dewisiwch", "Ok" : "Iawn", - "_{count} file conflict_::_{count} file conflicts_" : ["","","",""], "Cancel" : "Diddymu", "Shared" : "Rhannwyd", "Share" : "Rhannu", @@ -57,19 +56,16 @@ "The object type is not specified." : "Nid yw'r math o wrthrych wedi cael ei nodi.", "Delete" : "Dileu", "Add" : "Ychwanegu", - "_download %n file_::_download %n files_" : ["","","",""], "The update was successful. Redirecting you to ownCloud now." : "Roedd y diweddariad yn llwyddiannus. Cewch eich ailgyfeirio i ownCloud nawr.", "Use the following link to reset your password: {link}" : "Defnyddiwch y ddolen hon i ailosod eich cyfrinair: {link}", "New password" : "Cyfrinair newydd", "Reset password" : "Ailosod cyfrinair", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Personal" : "Personol", "Users" : "Defnyddwyr", "Apps" : "Pecynnau", "Admin" : "Gweinyddu", "Help" : "Cymorth", "Access forbidden" : "Mynediad wedi'i wahardd", - "Security Warning" : "Rhybudd Diogelwch", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Mwy na thebyg fod modd cyrraedd eich cyfeiriadur data a ffeilau o'r rhyngrwyd oherwydd nid yw'r ffeil .htaccess yn gweithio. ", "Create an <strong>admin account</strong>" : "Crewch <strong>gyfrif gweinyddol</strong>", "Username" : "Enw defnyddiwr", @@ -81,7 +77,6 @@ "Database tablespace" : "Tablespace cronfa ddata", "Database host" : "Gwesteiwr cronfa ddata", "Finish setup" : "Gorffen sefydlu", - "%s is available. Get more information on how to update." : "%s ar gael. Mwy o wybodaeth am sut i ddiweddaru.", "Log out" : "Allgofnodi", "Search" : "Chwilio", "remember" : "cofio", diff --git a/core/l10n/da.js b/core/l10n/da.js index a53ab7da494..c6f27c7124a 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Kunne ikke sende mail til følgende brugere: %s", "Turned on maintenance mode" : "Startede vedligeholdelsestilstand", "Turned off maintenance mode" : "standsede vedligeholdelsestilstand", + "Maintenance mode is kept active" : "Vedligeholdelsestilstanden holdes kørende", "Updated database" : "Opdaterede database", "Checked database schema update" : "Tjekket database schema opdatering", "Checked database schema update for apps" : "Tjekkede databaseskemaets opdatering for apps", "Updated \"%s\" to %s" : "Opdaterede \"%s\" til %s", + "Repair warning: " : "Reparationsadvarsel:", + "Repair error: " : "Reparationsfejl:", "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apps er blevet deaktiveret: %s", - "Following 3rd party apps have been disabled: %s" : "Følgende apps fra 3. part er blevet deaktiveret: %s", + "Following apps have been disabled: %s" : "Følgende apps er blevet deaktiveret: %s", + "Invalid file provided" : "Der er angivet en ugyldig fil", "No image or file provided" : "Ingen fil eller billede givet", "Unknown filetype" : "Ukendt filtype", "Invalid image" : "Ugyldigt billede", "No temporary profile picture available, try again" : "Intet midlertidigt profilbillede tilgængeligt, prøv igen", "No crop data provided" : "Ingen beskæringsdata give", + "No valid crop data provided" : "Der er ikke angivet gyldige data om beskæring", + "Crop is not square" : "Beskæringen er ikke kvadratisk", "Sunday" : "Søndag", "Monday" : "Mandag", "Tuesday" : "Tirsdag", @@ -67,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din <a href=\"{docLink}\">dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores <a href=\"{docLink}\">dokumentation</a>.", "Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"2.678.400\" sekunder. Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der i stedet kræves HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der kræves brug af HTTPS i stedet for, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", "Share" : "Del", @@ -80,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Fejl under justering af rettigheder", "Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}", "Shared with you by {owner}" : "Delt med dig af {owner}", - "Share with user or group …" : "Del med bruger eller gruppe ...", + "Share with users or groups …" : "Del med brugere eller grupper", + "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med andre på ownCloud ved hjælp af syntaxen username@example.com/owncloud", "Share link" : "Del link", "The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet", "Link" : "Link", @@ -93,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Vælg udløbsdato", "Expiration" : "Udløb", "Expiration date" : "Udløbsdato", + "An error occured. Please try again" : "Der skete en fejl. Prøv venligst igen", "Adding user..." : "Tilføjer bruger...", "group" : "gruppe", "remote" : "ekstern", @@ -125,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hej {name}, vejret er {weather}", "Hello {name}" : "Hej {name}", "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"], + "{version} is available. Get more information on how to update." : "{version} er tilgængelig. Få mere information om hvordan du opdaterer.", "Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.", "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.", + "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.", "Couldn't reset password because the token is invalid" : "Kunne ikke nulstille kodeordet, fordi symboludtrykket er ugyldigt", "Couldn't send reset email. Please make sure your username is correct." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Kontroller venligst om dit brugernavnet er korrekt", @@ -138,7 +151,7 @@ OC.L10N.register( "New Password" : "Ny adgangskode", "Reset password" : "Nulstil kodeord", "Searching other places" : "Søger på andre steder", - "No search result in other places" : "Ingen søgeresultater fra andre steder", + "No search results in other places" : "Ingen søgeresultater fra andre steder", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} søgeresultat fra andre steder","{count} søgeresultater fra andre steder"], "Personal" : "Personligt", "Users" : "Brugere", @@ -166,12 +179,13 @@ OC.L10N.register( "Technical details" : "Tekniske detaljer", "Remote Address: %s" : "Fjernadresse: %s", "Request ID: %s" : "Forespørgsels-ID: %s", + "Type: %s" : "Indtast: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Besked: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", "Trace" : "Sporing", - "Security Warning" : "Sikkerhedsadvarsel", + "Security warning" : "Sikkerheds advarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>", @@ -180,23 +194,28 @@ OC.L10N.register( "Data folder" : "Datamappe", "Configure the database" : "Konfigurer databasen", "Only %s is available." : "Kun %s er tilgængelig.", + "Install and activate additional PHP modules to choose other database types." : "Installér og aktivér yderligere PHP-moduler for at vælge andre databasetyper.", + "For more details check out the documentation." : "For flere oplysninger, så henvises der til dokumentationen.", "Database user" : "Databasebruger", "Database password" : "Databasekodeord", "Database name" : "Navn på database", "Database tablespace" : "Database tabelplads", "Database host" : "Databasehost", - "Performance Warning" : "Advarsel vedr. ydelsen", + "Performance warning" : "Ydelses advarsel", "SQLite will be used as database." : "SQLite vil blive brugt som database.", "For larger installations we recommend to choose a different database backend." : "Til større installationer anbefaler vi at vælge en anden database-backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Brug af SQLite frarådes især når skrivebordsklienten anvendes til filsynkronisering.", "Finish setup" : "Afslut opsætning", "Finishing …" : "Færdigbehandler ...", + "Need help?" : "Brug for hjælp?", + "See the documentation" : "Se dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", - "%s is available. Get more information on how to update." : "%s er tilgængelig. Få mere information om, hvordan du opdaterer.", "Log out" : "Log ud", "Search" : "Søg", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", + "An internal error occured." : "Der skete en intern fejl.", + "Please try again or contact your administrator." : "Kontakt venligst din administrator.", "Forgot your password? Reset it!" : "Glemt din adgangskode? Nulstil det!", "remember" : "husk", "Log in" : "Log ind", diff --git a/core/l10n/da.json b/core/l10n/da.json index fb9b7652fcb..9688cb28ed7 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "Kunne ikke sende mail til følgende brugere: %s", "Turned on maintenance mode" : "Startede vedligeholdelsestilstand", "Turned off maintenance mode" : "standsede vedligeholdelsestilstand", + "Maintenance mode is kept active" : "Vedligeholdelsestilstanden holdes kørende", "Updated database" : "Opdaterede database", "Checked database schema update" : "Tjekket database schema opdatering", "Checked database schema update for apps" : "Tjekkede databaseskemaets opdatering for apps", "Updated \"%s\" to %s" : "Opdaterede \"%s\" til %s", + "Repair warning: " : "Reparationsadvarsel:", + "Repair error: " : "Reparationsfejl:", "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apps er blevet deaktiveret: %s", - "Following 3rd party apps have been disabled: %s" : "Følgende apps fra 3. part er blevet deaktiveret: %s", + "Following apps have been disabled: %s" : "Følgende apps er blevet deaktiveret: %s", + "Invalid file provided" : "Der er angivet en ugyldig fil", "No image or file provided" : "Ingen fil eller billede givet", "Unknown filetype" : "Ukendt filtype", "Invalid image" : "Ugyldigt billede", "No temporary profile picture available, try again" : "Intet midlertidigt profilbillede tilgængeligt, prøv igen", "No crop data provided" : "Ingen beskæringsdata give", + "No valid crop data provided" : "Der er ikke angivet gyldige data om beskæring", + "Crop is not square" : "Beskæringen er ikke kvadratisk", "Sunday" : "Søndag", "Monday" : "Mandag", "Tuesday" : "Tirsdag", @@ -65,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Din webserver er endnu ikke sat korrekt op til at tillade filsynkronisering, fordi WebDAV-grænsefladen ser ud til at være i stykker.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne ownCloud-server har ikke en fungerende forbindelse til internettet. Det betyder, at visse funktioner som montering af eksterne drev, oplysninger om opdatering eller installation af applikationer fra tredjepart ikke fungerer. Det vil sandsynligvis heller ikke være muligt at tilgå filer fra eksterne drev eller afsendelse af e-mail med notifikationer virker sandsynligvis heller ikke. Vi opfordrer til at etablere forbindelse til internettet for denne server, såfremt du ønsker samtlige funktioner.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Din data mappe og dine filer er muligvis tilgængelige fra internettet. Filen .htaccess fungerer ikke. Vi anbefaler på det kraftigste, at du konfigurerer din webserver således at datamappen ikke længere er tilgængelig, eller at du flytter datamappen uden for webserverens dokumentrod. ", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Der er ikke konfigureret et hukommelsesmellemlager. For at forbedre din ydelse, skal du konfigurere et mellemlager, hvis den er tilgængelig. Du finder mere information i din <a href=\"{docLink}\">dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke læses af PHP, hvilket stærkt frarådes af sikkerhedsmæssige årsager. Der fås mere information i vores <a href=\"{docLink}\">dokumentation</a>.", "Error occurred while checking server setup" : "Der opstod fejl under tjek af serveropsætningen", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"2.678.400\" sekunder. Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der i stedet kræves HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-hovedet \"{header}\" er ikke konfigureret til at være lig med \"{expected}\". Dette er en potentiel sikkerhedsrisiko, og vi anbefaler at du justerer denne indstilling.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-hovedet \"Strict-Transport-Security\" er ikke konfigureret til mindst \"{seconds}\" sekunder. For udvidet sikkerhed anbefaler vi at aktivere HSTS, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du tilgår dette sted gennem HTTP. Vi anbefaler kraftigt at du konfigurerer din server, så der kræves brug af HTTPS i stedet for, som foreskrevet i vores <a href=\"{docUrl}\">sikkerhedstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", "Share" : "Del", @@ -78,7 +86,9 @@ "Error while changing permissions" : "Fejl under justering af rettigheder", "Shared with you and the group {group} by {owner}" : "Delt med dig og gruppen {group} af {owner}", "Shared with you by {owner}" : "Delt med dig af {owner}", - "Share with user or group …" : "Del med bruger eller gruppe ...", + "Share with users or groups …" : "Del med brugere eller grupper", + "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med andre på ownCloud ved hjælp af syntaxen username@example.com/owncloud", "Share link" : "Del link", "The public link will expire no later than {days} days after it is created" : "Det offentlige link udløber senest {days} dage efter det blev oprettet", "Link" : "Link", @@ -91,6 +101,7 @@ "Set expiration date" : "Vælg udløbsdato", "Expiration" : "Udløb", "Expiration date" : "Udløbsdato", + "An error occured. Please try again" : "Der skete en fejl. Prøv venligst igen", "Adding user..." : "Tilføjer bruger...", "group" : "gruppe", "remote" : "ekstern", @@ -123,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Hej {name}, vejret er {weather}", "Hello {name}" : "Hej {name}", "_download %n file_::_download %n files_" : ["hent %n fil","hent %n filer"], + "{version} is available. Get more information on how to update." : "{version} er tilgængelig. Få mere information om hvordan du opdaterer.", "Updating {productName} to version {version}, this may take a while." : "Opdaterer {productName} til version {version}, det kan tage et stykke tid.", "Please reload the page." : "Genindlæs venligst siden", "The update was unsuccessful. " : "Opdateringen blev ikke gennemført.", + "The update was successful. There were warnings." : "Opdateringen blev gennemført. Der fremkom advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Opdateringen blev udført korrekt. Du bliver nu viderestillet til ownCloud.", "Couldn't reset password because the token is invalid" : "Kunne ikke nulstille kodeordet, fordi symboludtrykket er ugyldigt", "Couldn't send reset email. Please make sure your username is correct." : "Der opstod et problem under afsendelse af nulstillings-e-mailen. Kontroller venligst om dit brugernavnet er korrekt", @@ -136,7 +149,7 @@ "New Password" : "Ny adgangskode", "Reset password" : "Nulstil kodeord", "Searching other places" : "Søger på andre steder", - "No search result in other places" : "Ingen søgeresultater fra andre steder", + "No search results in other places" : "Ingen søgeresultater fra andre steder", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} søgeresultat fra andre steder","{count} søgeresultater fra andre steder"], "Personal" : "Personligt", "Users" : "Brugere", @@ -164,12 +177,13 @@ "Technical details" : "Tekniske detaljer", "Remote Address: %s" : "Fjernadresse: %s", "Request ID: %s" : "Forespørgsels-ID: %s", + "Type: %s" : "Indtast: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Besked: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", "Trace" : "Sporing", - "Security Warning" : "Sikkerhedsadvarsel", + "Security warning" : "Sikkerheds advarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dine data mappe og filer er sandsynligvis tilgængelige fra internettet fordi .htaccess filen ikke virker.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information om, hvordan du konfigurerer din server korrekt se <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" : "Opret en <strong>administratorkonto</strong>", @@ -178,23 +192,28 @@ "Data folder" : "Datamappe", "Configure the database" : "Konfigurer databasen", "Only %s is available." : "Kun %s er tilgængelig.", + "Install and activate additional PHP modules to choose other database types." : "Installér og aktivér yderligere PHP-moduler for at vælge andre databasetyper.", + "For more details check out the documentation." : "For flere oplysninger, så henvises der til dokumentationen.", "Database user" : "Databasebruger", "Database password" : "Databasekodeord", "Database name" : "Navn på database", "Database tablespace" : "Database tabelplads", "Database host" : "Databasehost", - "Performance Warning" : "Advarsel vedr. ydelsen", + "Performance warning" : "Ydelses advarsel", "SQLite will be used as database." : "SQLite vil blive brugt som database.", "For larger installations we recommend to choose a different database backend." : "Til større installationer anbefaler vi at vælge en anden database-backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Brug af SQLite frarådes især når skrivebordsklienten anvendes til filsynkronisering.", "Finish setup" : "Afslut opsætning", "Finishing …" : "Færdigbehandler ...", + "Need help?" : "Brug for hjælp?", + "See the documentation" : "Se dokumentationen", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikation kræver JavaScript for at fungere korrekt. {linkstart}Slå venligst JavaScript til{linkend} og genindlæs siden. ", - "%s is available. Get more information on how to update." : "%s er tilgængelig. Få mere information om, hvordan du opdaterer.", "Log out" : "Log ud", "Search" : "Søg", "Server side authentication failed!" : "Server side godkendelse mislykkedes!", "Please contact your administrator." : "Kontakt venligst din administrator", + "An internal error occured." : "Der skete en intern fejl.", + "Please try again or contact your administrator." : "Kontakt venligst din administrator.", "Forgot your password? Reset it!" : "Glemt din adgangskode? Nulstil det!", "remember" : "husk", "Log in" : "Log ind", diff --git a/core/l10n/de.js b/core/l10n/de.js index 8d8ef4ab77e..965f8890813 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Die E-Mail konnte nicht an folgende Benutzer gesendet werden: %s", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", + "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", "Updated database" : "Datenbank aktualisiert", "Checked database schema update" : "Datenbankschema-Aktualisierung überprüft", "Checked database schema update for apps" : "Datenbankschema-Aktualisierung für Apps überprüft", @@ -11,7 +12,6 @@ OC.L10N.register( "Repair warning: " : "Reperaturwarnung:", "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", - "Following 3rd party apps have been disabled: %s" : "Die folgenden Drittanbieter-Apps sind deaktiviert worden: %s", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", "Unknown filetype" : "Unbekannter Dateityp", @@ -72,10 +72,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Der \"{header}\" HTTP-Header ist nicht passend zum \"{expected}\" konfiguriert. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „2.678.400 Sekunden“ eingestellt. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, Deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, Deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", "Shared" : "Geteilt", "Shared with {recipients}" : "Geteilt mit {recipients}", "Share" : "Teilen", @@ -85,7 +87,9 @@ OC.L10N.register( "Error while changing permissions" : "Fehler beim Ändern der Rechte", "Shared with you and the group {group} by {owner}" : "{owner} hat dies mit Dir und der Gruppe {group} geteilt", "Shared with you by {owner}" : "{owner} hat dies mit Dir geteilt", - "Share with user or group …" : "Mit Benutzer oder Gruppe teilen…", + "Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Mit Benutzern anderer ownClouds unter Verwendung der Syntax benutzername@beispiel.com/owncloud teilen", "Share link" : "Link teilen", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Link" : "Link", @@ -98,6 +102,7 @@ OC.L10N.register( "Set expiration date" : "Setze ein Ablaufdatum", "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", "Adding user..." : "Benutzer wird hinzugefügt…", "group" : "Gruppe", "remote" : "Entfernte Freigabe", @@ -130,6 +135,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.", @@ -143,7 +149,7 @@ OC.L10N.register( "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", "Searching other places" : "Andere Orte durchsuchen", - "No search result in other places" : "Keine Suchergebnisse in den anderen Orten", + "No search results in other places" : "Keine Suchergebnisse an anderen Orten", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} Suchergebnis in den anderen Orten","{count} Suchergebnisse in den anderen Orten"], "Personal" : "Persönlich", "Users" : "Benutzer", @@ -171,12 +177,13 @@ OC.L10N.register( "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anforderungskennung: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Code: %s", "Message: %s" : "Nachricht: %s", "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security Warning" : "Sicherheitswarnung", + "Security warning" : "Sicherheitshinweis", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Deines Servers kannst Du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -185,23 +192,28 @@ OC.L10N.register( "Data folder" : "Datenverzeichnis", "Configure the database" : "Datenbank einrichten", "Only %s is available." : "Es ist nur %s verfügbar.", + "Install and activate additional PHP modules to choose other database types." : "Installiere und aktiviere zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.", + "For more details check out the documentation." : "Schau für weitere Informationen in die Dokumentation.", "Database user" : "Datenbank-Benutzer", "Database password" : "Datenbank-Passwort", "Database name" : "Datenbank-Name", "Database tablespace" : "Datenbank-Tablespace", "Database host" : "Datenbank-Host", - "Performance Warning" : "Leistungswarnung", + "Performance warning" : "Leistungswarnung", "SQLite will be used as database." : "SQLite wird als Datenbank benutzt.", "For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "Finish setup" : "Installation abschließen", "Finishing …" : "Abschließen…", + "Need help?" : "Hilfe nötig?", + "See the documentation" : "Schau in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktiviere JavaScript{linkend} und lade die Seite neu.", - "%s is available. Get more information on how to update." : "%s ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", "Log out" : "Abmelden", "Search" : "Suche", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", + "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", "Forgot your password? Reset it!" : "Du hast Dein Passwort vergessen? Setze es zurück!", "remember" : "merken", "Log in" : "Einloggen", diff --git a/core/l10n/de.json b/core/l10n/de.json index 22b95a850f5..3a0cc4d4fe2 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "Die E-Mail konnte nicht an folgende Benutzer gesendet werden: %s", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", + "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", "Updated database" : "Datenbank aktualisiert", "Checked database schema update" : "Datenbankschema-Aktualisierung überprüft", "Checked database schema update for apps" : "Datenbankschema-Aktualisierung für Apps überprüft", @@ -9,7 +10,6 @@ "Repair warning: " : "Reperaturwarnung:", "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", - "Following 3rd party apps have been disabled: %s" : "Die folgenden Drittanbieter-Apps sind deaktiviert worden: %s", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", "Unknown filetype" : "Unbekannter Dateityp", @@ -70,10 +70,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Dein Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Du alle Funktionen nutzen möchtest.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Deinen Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Du es aus dem Document-Root-Verzeichnis des Webservers herausverschiebst.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist für PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu findest Du in unserer <a href=\"{docLink}\">Dokumentation</a>.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Der \"{header}\" HTTP-Header ist nicht passend zum \"{expected}\" konfiguriert. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „2.678.400 Sekunden“ eingestellt. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, Deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du greifst auf diese Site über HTTP zu. Wir raten dringend dazu, Deinen Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", "Shared" : "Geteilt", "Shared with {recipients}" : "Geteilt mit {recipients}", "Share" : "Teilen", @@ -83,7 +85,9 @@ "Error while changing permissions" : "Fehler beim Ändern der Rechte", "Shared with you and the group {group} by {owner}" : "{owner} hat dies mit Dir und der Gruppe {group} geteilt", "Shared with you by {owner}" : "{owner} hat dies mit Dir geteilt", - "Share with user or group …" : "Mit Benutzer oder Gruppe teilen…", + "Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Mit Benutzern anderer ownClouds unter Verwendung der Syntax benutzername@beispiel.com/owncloud teilen", "Share link" : "Link teilen", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Link" : "Link", @@ -96,6 +100,7 @@ "Set expiration date" : "Setze ein Ablaufdatum", "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", "Adding user..." : "Benutzer wird hinzugefügt…", "group" : "Gruppe", "remote" : "Entfernte Freigabe", @@ -128,6 +133,7 @@ "Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", "Updating {productName} to version {version}, this may take a while." : "Aktualisiere {productName} auf Version {version}. Dies könnte eine Weile dauern.", "Please reload the page." : "Bitte lade die Seite neu.", "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.", @@ -141,7 +147,7 @@ "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", "Searching other places" : "Andere Orte durchsuchen", - "No search result in other places" : "Keine Suchergebnisse in den anderen Orten", + "No search results in other places" : "Keine Suchergebnisse an anderen Orten", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} Suchergebnis in den anderen Orten","{count} Suchergebnisse in den anderen Orten"], "Personal" : "Persönlich", "Users" : "Benutzer", @@ -169,12 +175,13 @@ "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anforderungskennung: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Code: %s", "Message: %s" : "Nachricht: %s", "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security Warning" : "Sicherheitswarnung", + "Security warning" : "Sicherheitshinweis", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dein Datenverzeichnis und Deine Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Deines Servers kannst Du der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -183,23 +190,28 @@ "Data folder" : "Datenverzeichnis", "Configure the database" : "Datenbank einrichten", "Only %s is available." : "Es ist nur %s verfügbar.", + "Install and activate additional PHP modules to choose other database types." : "Installiere und aktiviere zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.", + "For more details check out the documentation." : "Schau für weitere Informationen in die Dokumentation.", "Database user" : "Datenbank-Benutzer", "Database password" : "Datenbank-Passwort", "Database name" : "Datenbank-Name", "Database tablespace" : "Datenbank-Tablespace", "Database host" : "Datenbank-Host", - "Performance Warning" : "Leistungswarnung", + "Performance warning" : "Leistungswarnung", "SQLite will be used as database." : "SQLite wird als Datenbank benutzt.", "For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "Finish setup" : "Installation abschließen", "Finishing …" : "Abschließen…", + "Need help?" : "Hilfe nötig?", + "See the documentation" : "Schau in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktiviere JavaScript{linkend} und lade die Seite neu.", - "%s is available. Get more information on how to update." : "%s ist verfügbar. Hole weitere Informationen zu Aktualisierungen ein.", "Log out" : "Abmelden", "Search" : "Suche", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", + "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", "Forgot your password? Reset it!" : "Du hast Dein Passwort vergessen? Setze es zurück!", "remember" : "merken", "Log in" : "Einloggen", diff --git a/core/l10n/de_AT.js b/core/l10n/de_AT.js index 6360bbb6253..7fafeb40208 100644 --- a/core/l10n/de_AT.js +++ b/core/l10n/de_AT.js @@ -21,21 +21,23 @@ OC.L10N.register( "November" : "November", "December" : "Dezember", "Settings" : "Einstellungen", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "No" : "Nein", + "Yes" : "Ja", "Cancel" : "Abbrechen", "Continue" : "Weiter", "Share" : "Freigeben", "Error" : "Fehler", + "Share link" : "Link teilen", "Password" : "Passwort", + "Send" : "Senden", "group" : "Gruppe", "Unshare" : "Teilung zurücknehmen", "can share" : "Kann teilen", "can edit" : "kann bearbeiten", "Delete" : "Löschen", "Add" : "Hinzufügen", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persönlich", - "Help" : "Hilfe" + "Help" : "Hilfe", + "Username" : "Benutzername" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/de_AT.json b/core/l10n/de_AT.json index 21cb4b16102..56557d96d9c 100644 --- a/core/l10n/de_AT.json +++ b/core/l10n/de_AT.json @@ -19,21 +19,23 @@ "November" : "November", "December" : "Dezember", "Settings" : "Einstellungen", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "No" : "Nein", + "Yes" : "Ja", "Cancel" : "Abbrechen", "Continue" : "Weiter", "Share" : "Freigeben", "Error" : "Fehler", + "Share link" : "Link teilen", "Password" : "Passwort", + "Send" : "Senden", "group" : "Gruppe", "Unshare" : "Teilung zurücknehmen", "can share" : "Kann teilen", "can edit" : "kann bearbeiten", "Delete" : "Löschen", "Add" : "Hinzufügen", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persönlich", - "Help" : "Hilfe" + "Help" : "Hilfe", + "Username" : "Benutzername" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/de_CH.js b/core/l10n/de_CH.js index 5a383c104cb..a95205b439b 100644 --- a/core/l10n/de_CH.js +++ b/core/l10n/de_CH.js @@ -30,7 +30,6 @@ OC.L10N.register( "Yes" : "Ja", "Choose" : "Auswählen", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "New Files" : "Neue Dateien", "Cancel" : "Abbrechen", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ihr Web-Server ist noch nicht für eine Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", @@ -67,7 +66,6 @@ OC.L10N.register( "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Delete" : "Löschen", "Add" : "Hinzufügen", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.", "%s password reset" : "%s-Passwort zurücksetzen", "Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}", diff --git a/core/l10n/de_CH.json b/core/l10n/de_CH.json index aa69c7355e0..8d84ade00cd 100644 --- a/core/l10n/de_CH.json +++ b/core/l10n/de_CH.json @@ -28,7 +28,6 @@ "Yes" : "Ja", "Choose" : "Auswählen", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "New Files" : "Neue Dateien", "Cancel" : "Abbrechen", "Your web server is not yet properly setup to allow files synchronization because the WebDAV interface seems to be broken." : "Ihr Web-Server ist noch nicht für eine Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", @@ -65,7 +64,6 @@ "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Delete" : "Löschen", "Add" : "Hinzufügen", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Das Update war erfolgreich. Sie werden nun zu ownCloud weitergeleitet.", "%s password reset" : "%s-Passwort zurücksetzen", "Use the following link to reset your password: {link}" : "Nutzen Sie den nachfolgenden Link, um Ihr Passwort zurückzusetzen: {link}", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 2c6b8f38830..a2a448e21d7 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet ", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", + "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", "Updated database" : "Datenbank aktualisiert", "Checked database schema update" : "Datenbankschema-Aktualisierung überprüft", "Checked database schema update for apps" : "Datenbankschema-Aktualisierung für Apps überprüft", @@ -11,7 +12,6 @@ OC.L10N.register( "Repair warning: " : "Reperaturwarnung:", "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", - "Following 3rd party apps have been disabled: %s" : "Die folgenden Drittanbieter-Apps sind deaktiviert worden: %s", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", "Unknown filetype" : "Unbekannter Dateityp", @@ -72,10 +72,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Der \"{header}\" HTTP-Header ist nicht passend zum \"{expected}\" konfiguriert. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „2.678.400 Sekunden“ eingestellt. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", "Shared" : "Geteilt", "Shared with {recipients}" : "Geteilt mit {recipients}", "Share" : "Teilen", @@ -85,7 +87,9 @@ OC.L10N.register( "Error while changing permissions" : "Fehler bei der Änderung der Rechte", "Shared with you and the group {group} by {owner}" : "Von {owner} mit Ihnen und der Gruppe {group} geteilt.", "Shared with you by {owner}" : "Von {owner} mit Ihnen geteilt.", - "Share with user or group …" : "Mit Benutzer oder Gruppe teilen…", + "Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Mit Benutzern anderer ownClouds unter Verwendung der Syntax benutzername@beispiel.com/owncloud teilen", "Share link" : "Link teilen", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Link" : "Link", @@ -98,6 +102,7 @@ OC.L10N.register( "Set expiration date" : "Ein Ablaufdatum setzen", "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", "Adding user..." : "Benutzer wird hinzugefügt…", "group" : "Gruppe", "remote" : "Entfernte Freigabe", @@ -130,6 +135,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Updating {productName} to version {version}, this may take a while." : "{productName} wird auf Version {version} aktualisiert. Das könnte eine Weile dauern.", "Please reload the page." : "Bitte laden Sie die Seite neu.", "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.", @@ -143,7 +149,7 @@ OC.L10N.register( "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", "Searching other places" : "Andere Orte durchsuchen", - "No search result in other places" : "Keine Suchergebnisse in den anderen Orten", + "No search results in other places" : "Keine Suchergebnisse an anderen Orten", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} Suchergebnis in den anderen Orten","{count} Suchergebnisse in den anderen Orten"], "Personal" : "Persönlich", "Users" : "Benutzer", @@ -171,12 +177,13 @@ OC.L10N.register( "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anforderungskennung: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Code: %s", "Message: %s" : "Nachricht: %s", "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security Warning" : "Sicherheitshinweis", + "Security warning" : "Sicherheitshinweis", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -184,24 +191,29 @@ OC.L10N.register( "Storage & database" : "Speicher & Datenbank", "Data folder" : "Datenverzeichnis", "Configure the database" : "Datenbank einrichten", - "Only %s is available." : "Es sind nur %s verfügbar.", + "Only %s is available." : "Es ist nur %s verfügbar.", + "Install and activate additional PHP modules to choose other database types." : "Installieren und aktivieren Sie zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.", + "For more details check out the documentation." : "Schauen Sie für weitere Informationen in die Dokumentation.", "Database user" : "Datenbank-Benutzer", "Database password" : "Datenbank-Passwort", "Database name" : "Datenbank-Name", "Database tablespace" : "Datenbank-Tablespace", "Database host" : "Datenbank-Host", - "Performance Warning" : "Leistungswarnung", + "Performance warning" : "Leistungswarnung", "SQLite will be used as database." : "SQLite wird als Datenbank benutzt.", "For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "Finish setup" : "Installation abschließen", "Finishing …" : "Abschließen…", + "Need help?" : "Hilfe nötig?", + "See the documentation" : "Schauen Sie in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.", - "%s is available. Get more information on how to update." : "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Log out" : "Abmelden", "Search" : "Suche", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", + "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", "Forgot your password? Reset it!" : "Sie haben Ihr Passwort vergessen? Setzen Sie es zurück!", "remember" : "merken", "Log in" : "Einloggen", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index 52906054484..dd7f50913a0 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet ", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", + "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", "Updated database" : "Datenbank aktualisiert", "Checked database schema update" : "Datenbankschema-Aktualisierung überprüft", "Checked database schema update for apps" : "Datenbankschema-Aktualisierung für Apps überprüft", @@ -9,7 +10,6 @@ "Repair warning: " : "Reperaturwarnung:", "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", - "Following 3rd party apps have been disabled: %s" : "Die folgenden Drittanbieter-Apps sind deaktiviert worden: %s", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", "Unknown filetype" : "Unbekannter Dateityp", @@ -70,10 +70,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ihr Webserver ist noch nicht hinreichend für Datei-Synchronisation konfiguriert, weil die WebDAV-Schnittstelle vermutlich defekt ist.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Dieser Server hat keine funktionierende Internetverbindung. Dies bedeutet, dass einige Funktionen wie das Einhängen externen Speicherplatzes, Update-Benachrichtigungen oder die Installation von Drittanbieter-Apps nicht funktionieren werden. Der Fernzugriff auf Dateien und der Versand von E-Mail-Benachrichtigungen kann ebenfalls nicht funktionieren. Es wird empfohlen, die Internetverbindung dieses Servers zu aktivieren, wenn Sie alle Funktionen nutzen möchten.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar. Die .htaccess-Datei funktioniert nicht. Es wird dringend empfohlen, Ihren Webserver dahingehend zu konfigurieren, dass das Datenverzeichnis nicht mehr vom Internet aus erreichbar ist oder dass Sie es aus dem Document-Root-Verzeichnis des Webservers herausverschieben.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Es wurde kein PHP Memory Cache konfiguriert. Konfiguriere zur Erhöhung der Leistungsfähigkeit, soweit verfügbar, einen Memory Cache. Weitere Informationen finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ist von PHP nicht lesbar, wovon aus Sicherheitsgründen dringend abgeraten wird. Weitere Informationen hierzu finden Sie in unserer <a href=\"{docLink}\">Dokumentation</a>.", "Error occurred while checking server setup" : "Fehler beim Überprüfen der Servereinrichtung", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Der \"{header}\" HTTP-Header ist nicht passend zum \"{expected}\" konfiguriert. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „2.678.400 Sekunden“ eingestellt. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Der „{header}“-HTTP-Header ist nicht so konfiguriert, dass er „{expected}“ entspricht. Dies ist ein potentielles Sicherheitsrisiko und es wird empfohlen, diese Einstellung zu ändern.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Der „Strict-Transport-Security“-HTTP-Header ist nicht auf mindestens „{seconds}“ Sekunden eingestellt. Für umfassende Sicherheit wird das Aktivieren von HSTS empfohlen, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> erläutert ist.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sie greifen auf diese Site über HTTP zu. Wir raten dringend dazu, Ihren Server so zu konfigurieren, dass er stattdessen nur HTTPS akzeptiert, wie es in unseren <a href=\"{docUrl}\">Sicherheitshinweisen</a> beschrieben ist.", "Shared" : "Geteilt", "Shared with {recipients}" : "Geteilt mit {recipients}", "Share" : "Teilen", @@ -83,7 +85,9 @@ "Error while changing permissions" : "Fehler bei der Änderung der Rechte", "Shared with you and the group {group} by {owner}" : "Von {owner} mit Ihnen und der Gruppe {group} geteilt.", "Shared with you by {owner}" : "Von {owner} mit Ihnen geteilt.", - "Share with user or group …" : "Mit Benutzer oder Gruppe teilen…", + "Share with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Mit Benutzern anderer ownClouds unter Verwendung der Syntax benutzername@beispiel.com/owncloud teilen", "Share link" : "Link teilen", "The public link will expire no later than {days} days after it is created" : "Der öffentliche Link wird spätestens {days} Tage nach seiner Erstellung ablaufen", "Link" : "Link", @@ -96,6 +100,7 @@ "Set expiration date" : "Ein Ablaufdatum setzen", "Expiration" : "Ablaufdatum", "Expiration date" : "Ablaufdatum", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", "Adding user..." : "Benutzer wird hinzugefügt…", "group" : "Gruppe", "remote" : "Entfernte Freigabe", @@ -128,6 +133,7 @@ "Hello {name}, the weather is {weather}" : "Hallo {name}, das Wetter ist {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["Lade %n Datei herunter","Lade %n Dateien herunter"], + "{version} is available. Get more information on how to update." : "{version} ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Updating {productName} to version {version}, this may take a while." : "{productName} wird auf Version {version} aktualisiert. Das könnte eine Weile dauern.", "Please reload the page." : "Bitte laden Sie die Seite neu.", "The update was unsuccessful. " : "Die Aktualisierung war nicht erfolgreich.", @@ -141,7 +147,7 @@ "New Password" : "Neues Passwort", "Reset password" : "Passwort zurücksetzen", "Searching other places" : "Andere Orte durchsuchen", - "No search result in other places" : "Keine Suchergebnisse in den anderen Orten", + "No search results in other places" : "Keine Suchergebnisse an anderen Orten", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} Suchergebnis in den anderen Orten","{count} Suchergebnisse in den anderen Orten"], "Personal" : "Persönlich", "Users" : "Benutzer", @@ -169,12 +175,13 @@ "Technical details" : "Technische Details", "Remote Address: %s" : "Entfernte Adresse: %s", "Request ID: %s" : "Anforderungskennung: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Code: %s", "Message: %s" : "Nachricht: %s", "File: %s" : "Datei: %s", "Line: %s" : "Zeile: %s", "Trace" : "Spur", - "Security Warning" : "Sicherheitshinweis", + "Security warning" : "Sicherheitshinweis", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ihr Datenverzeichnis und Ihre Dateien sind wahrscheinlich vom Internet aus erreichbar, weil die .htaccess-Datei nicht funktioniert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Informationen zum richtigen Konfigurieren Ihres Servers können Sie der <a href=\"%s\" target=\"_blank\">Dokumentation</a> entnehmen.", "Create an <strong>admin account</strong>" : "<strong>Administrator-Konto</strong> anlegen", @@ -182,24 +189,29 @@ "Storage & database" : "Speicher & Datenbank", "Data folder" : "Datenverzeichnis", "Configure the database" : "Datenbank einrichten", - "Only %s is available." : "Es sind nur %s verfügbar.", + "Only %s is available." : "Es ist nur %s verfügbar.", + "Install and activate additional PHP modules to choose other database types." : "Installieren und aktivieren Sie zusätzliche PHP-Module, um andere Datenbank-Typen auswählen zu können.", + "For more details check out the documentation." : "Schauen Sie für weitere Informationen in die Dokumentation.", "Database user" : "Datenbank-Benutzer", "Database password" : "Datenbank-Passwort", "Database name" : "Datenbank-Name", "Database tablespace" : "Datenbank-Tablespace", "Database host" : "Datenbank-Host", - "Performance Warning" : "Leistungswarnung", + "Performance warning" : "Leistungswarnung", "SQLite will be used as database." : "SQLite wird als Datenbank benutzt.", "For larger installations we recommend to choose a different database backend." : "Bei größeren Installationen wird die Wahl eines anderen Datenbank-Backends empfohlen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Insbesondere bei Nutzung des Desktop Clients zur Dateisynchronisierung wird vom Einsatz von SQLite abgeraten.", "Finish setup" : "Installation abschließen", "Finishing …" : "Abschließen…", + "Need help?" : "Hilfe nötig?", + "See the documentation" : "Schauen Sie in die Dokumentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Diese Anwendung benötigt zum ordnungsgemäßen Betrieb JavaScript. Bitte {linkstart}aktivieren Sie JavaScript{linkend} und laden Sie die Seite neu.", - "%s is available. Get more information on how to update." : "%s ist verfügbar. Holen Sie weitere Informationen zu Aktualisierungen ein.", "Log out" : "Abmelden", "Search" : "Suche", "Server side authentication failed!" : "Serverseitige Authentifizierung fehlgeschlagen!", "Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.", + "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", + "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", "Forgot your password? Reset it!" : "Sie haben Ihr Passwort vergessen? Setzen Sie es zurück!", "remember" : "merken", "Log in" : "Einloggen", diff --git a/core/l10n/el.js b/core/l10n/el.js index 6b15bd95527..ad5a1310e6c 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s", "Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε", "Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε", + "Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή", "Updated database" : "Ενημερωμένη βάση δεδομένων", "Checked database schema update" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων", "Checked database schema update for apps" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων για εφαρμογές", "Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s", "Repair warning: " : "Προειδοποίηση διόρθωσης:", "Repair error: " : "Σφάλμα διόρθωσης:", + "Following incompatible apps have been disabled: %s" : "Οι παρακάτω εφαρμογές έχουν απενεργοποιηθεί: %s", + "Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s", + "Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο", "No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο", "Unknown filetype" : "Άγνωστος τύπος αρχείου", "Invalid image" : "Μη έγκυρη εικόνα", "No temporary profile picture available, try again" : "Δεν υπάρχει προσωρινή φωτογραφία προφίλ διαθέσιμη, δοκιμάστε ξανά", "No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής", + "No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής", + "Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα", "Sunday" : "Κυριακή", "Monday" : "Δευτέρα", "Tuesday" : "Τρίτη", @@ -64,7 +70,15 @@ OC.L10N.register( "So-so password" : "Μέτριο συνθηματικό", "Good password" : "Καλό συνθηματικό", "Strong password" : "Δυνατό συνθηματικό", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις για ενημερώσεις ή η εγκατάσταση εφαρμογών 3ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a href=\"{docLink}\">τεκμηρίωση</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.", "Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.", "Shared" : "Κοινόχρηστα", "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}", "Share" : "Διαμοιρασμός", @@ -74,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Σφάλμα κατά την αλλαγή των δικαιωμάτων", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", - "Share with user or group …" : "Διαμοιρασμός με χρήστη ή ομάδα ...", + "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", + "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", "Share link" : "Διαμοιρασμός συνδέσμου", "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του", "Link" : "Σύνδεσμος", @@ -87,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Ορισμός ημ. λήξης", "Expiration" : "Λήξη", "Expiration date" : "Ημερομηνία λήξης", + "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", "Adding user..." : "Προσθήκη χρήστη ...", "group" : "ομάδα", "remote" : "απομακρυσμένα", @@ -119,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}", "Hello {name}" : "Γεια σου {name}", "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"], + "{version} is available. Get more information on how to update." : "Η έκδοση {version} είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες για το πως να κάνετε την ενημέρωση.", "Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.", "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.", - "The update was unsuccessful. " : "Η ενημέρωση δεν ήταν επιτυχής.", + "The update was unsuccessful. " : "Η ενημέρωση ήταν ανεπιτυχής.", + "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπήρχαν προειδοποιήσεις.", "The update was successful. Redirecting you to ownCloud now." : "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud.", "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο", "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.", @@ -132,8 +151,8 @@ OC.L10N.register( "New Password" : "Νέος Κωδικός", "Reset password" : "Επαναφορά συνθηματικού", "Searching other places" : "Έρευνα σε άλλα σημεία.", - "No search result in other places" : "Κανένα αποτέλεσμα έρευνας σε άλλα σημεία.", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "No search results in other places" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλες τοποθεσίες", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} αποτελέσματα έρευνας σε άλλα σημεία","{count} αποτελέσματα έρευνας σε άλλα σημεία"], "Personal" : "Προσωπικά", "Users" : "Χρήστες", "Apps" : "Εφαρμογές", @@ -160,12 +179,13 @@ OC.L10N.register( "Technical details" : "Τεχνικές λεπτομέρειες", "Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s", "Request ID: %s" : "Αίτημα ID: %s", + "Type: %s" : "Τύπος: %s", "Code: %s" : "Κωδικός: %s", "Message: %s" : "Μήνυμα: %s", "File: %s" : "Αρχείο: %s", "Line: %s" : "Γραμμή: %s", "Trace" : "Ανίχνευση", - "Security Warning" : "Προειδοποίηση Ασφαλείας", + "Security warning" : "Προειδοποίηση Ασφαλείας", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.", "Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>", @@ -174,22 +194,28 @@ OC.L10N.register( "Data folder" : "Φάκελος δεδομένων", "Configure the database" : "Ρύθμιση της βάσης δεδομένων", "Only %s is available." : "Μόνο %s είναι διαθέσιμο.", + "Install and activate additional PHP modules to choose other database types." : "Εγκαταστήστε και ενεργοποιείστε επιπλέον αρθρώματα PHP για να επιλέξετε άλλους τύπους βάσεων δεδομένων.", + "For more details check out the documentation." : "Για περισσότερες πληροφορίες ανατρέξτε στην τεκμηρίωση.", "Database user" : "Χρήστης της βάσης δεδομένων", "Database password" : "Συνθηματικό βάσης δεδομένων", "Database name" : "Όνομα βάσης δεδομένων", "Database tablespace" : "Κενά Πινάκων Βάσης Δεδομένων", "Database host" : "Διακομιστής βάσης δεδομένων", - "Performance Warning" : "Απόδοση προειδοποίησης", + "Performance warning" : "Προειδοποίηση απόδοσης", "SQLite will be used as database." : "Η SQLite θα χρησιμοποιηθεί ως βάση δεδομένων.", "For larger installations we recommend to choose a different database backend." : "Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.", "Finish setup" : "Ολοκλήρωση εγκατάστασης", "Finishing …" : "Ολοκλήρωση...", - "%s is available. Get more information on how to update." : "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.", + "Need help?" : "Θέλετε βοήθεια;", + "See the documentation" : "Δείτε την τεκμηρίωση", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.", "Log out" : "Αποσύνδεση", "Search" : "Αναζήτηση", "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", + "An internal error occured." : "Παρουσιάστηκε εσωτερικό σφάλμα.", + "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", "Forgot your password? Reset it!" : "Ξεχάσατε τον κωδικό πρόσβασής σας; Επαναφέρετέ τον!", "remember" : "απομνημόνευση", "Log in" : "Είσοδος", @@ -209,6 +235,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.", "Start update" : "Έναρξη ενημέρωσης", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να τρέξετε την ακόλουθη εντολή από τον κατάλογο αρχείων εφαρμογών:", + "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε κατάσταση συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.", "This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/el.json b/core/l10n/el.json index a374909dd3e..e604d813f2e 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "Αδυναμία αποστολής μηνύματος στους ακόλουθους χρήστες: %s", "Turned on maintenance mode" : "Η κατάσταση συντήρησης ενεργοποιήθηκε", "Turned off maintenance mode" : "Η κατάσταση συντήρησης απενεργοποιήθηκε", + "Maintenance mode is kept active" : "Η λειτουργία συντήρησης διατηρήθηκε ενεργή", "Updated database" : "Ενημερωμένη βάση δεδομένων", "Checked database schema update" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων", "Checked database schema update for apps" : "Έλεγχος ενημέρωσης σχήματος βάσης δεδομένων για εφαρμογές", "Updated \"%s\" to %s" : "Αναβαθμίστηκε \"%s\" σε %s", "Repair warning: " : "Προειδοποίηση διόρθωσης:", "Repair error: " : "Σφάλμα διόρθωσης:", + "Following incompatible apps have been disabled: %s" : "Οι παρακάτω εφαρμογές έχουν απενεργοποιηθεί: %s", + "Following apps have been disabled: %s" : "Οι ακόλουθες εφαρμογές έχουν απενεργοποιηθεί: %s", + "Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο", "No image or file provided" : "Δεν δόθηκε εικόνα ή αρχείο", "Unknown filetype" : "Άγνωστος τύπος αρχείου", "Invalid image" : "Μη έγκυρη εικόνα", "No temporary profile picture available, try again" : "Δεν υπάρχει προσωρινή φωτογραφία προφίλ διαθέσιμη, δοκιμάστε ξανά", "No crop data provided" : "Δεν δόθηκαν δεδομένα περικοπής", + "No valid crop data provided" : "Έχουν δοθεί μη έγκυρα δεδομένα περικοπής", + "Crop is not square" : "Η περικοπή δεν εχει τετραγωνικό σχήμα", "Sunday" : "Κυριακή", "Monday" : "Δευτέρα", "Tuesday" : "Τρίτη", @@ -62,7 +68,15 @@ "So-so password" : "Μέτριο συνθηματικό", "Good password" : "Καλό συνθηματικό", "Strong password" : "Δυνατό συνθηματικό", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ο διακομιστής σας δεν έχει ρυθμιστεί κατάλληλα ώστε να επιτρέπει τον συγχρονισμό αρχείων γιατί η διεπαφή WebDAV πιθανόν είναι κατεστραμμένη.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Αυτός ο διακομιστής δεν έχει ενεργή σύνδεση στο διαδίκτυο. Αυτό σημαίνει ότι κάποιες υπηρεσίες όπως η σύνδεση με εξωτερικούς αποθηκευτικούς χώρους, ειδοποιήσεις για ενημερώσεις ή η εγκατάσταση εφαρμογών 3ων δεν θα είναι διαθέσιμες. Η πρόσβαση απομακρυσμένων αρχείων και η αποστολή ειδοποιήσεων μέσω ηλεκτρονικού ταχυδρομείου μπορεί επίσης να μην είναι διαθέσιμες. Προτείνουμε να ενεργοποιήσετε την πρόσβαση στο διαδίκτυο για αυτόν το διακομιστή εάν θέλετε να χρησιμοποιήσετε όλες τις υπηρεσίες.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανόν διαθέσιμα στο διαδίκτυο. Το αρχείο .htaccess δεν λειτουργεί. Σας προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας με τέτοιο τρόπο ώστε ο κατάλογος δεδομένων να μην είναι πλέον προσβάσιμος ή να μετακινήσετε τον κατάλογο δεδομένων εκτός του καταλόγου της ρίζας εγγράφων-document root του διακομιστή.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Δεν έχει οριστεί προσωρινή μνήμη. Για να βελτιώσετε την απόδοσή σας παρακαλούμε να διαμορφώσετε ένα χώρο προσωρινής αποθήκευσης εάν υπάρχει διαθέσιμος. Περαιτέρω πληροφορίες μπορείτε να βρείτε στην <a href=\"{docLink}\">τεκμηρίωση</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Το /dev/urandom δεν είναι αναγνώσιμο από την PHP, το οποίο δεν συνίσταται για λόγους ασφαλείας. Περισσότερες πληροφορίες υπάρχουν στην <a href=\"{docLink}\">τεκμηρίωσή</a> μας.", "Error occurred while checking server setup" : "Παρουσιάστηκε σφάλμα κατά τον έλεγχο της εγκατάστασης με το διακομιστή", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "H \"{header}\" κεφαλίδα HTTP δεν έχει ρυθμιστεί ώστε να ισούται με \"{expected}\". Αυτό αποτελεί ενδεχόμενο κίνδυνο ασφάλειας ή ιδιωτικότητας και συστήνουμε τη διόρθωση αυτής της ρύθμισης.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Η «Strict-Transport-Security\" κεφαλίδα HTTP δεν έχει ρυθμιστεί για τουλάχιστον \"{seconds}\" δευτερόλεπτα. Για αυξημένη ασφάλεια συστήνουμε την ενεργοποίηση του HSTS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Έχετε πρόσβαση σε αυτό τον ιστότοπο μέσω HTTP. Προτείνουμε ανεπιφύλακτα να ρυθμίσετε το διακομιστή σας ώστε να απαιτεί τη χρήση HTTPS όπως περιγράφεται στις <a href=\"{docUrl}\">προτάσεις ασφαλείας</a> μας.", "Shared" : "Κοινόχρηστα", "Shared with {recipients}" : "Διαμοιράστηκε με {recipients}", "Share" : "Διαμοιρασμός", @@ -72,7 +86,9 @@ "Error while changing permissions" : "Σφάλμα κατά την αλλαγή των δικαιωμάτων", "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", - "Share with user or group …" : "Διαμοιρασμός με χρήστη ή ομάδα ...", + "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", + "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", "Share link" : "Διαμοιρασμός συνδέσμου", "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του", "Link" : "Σύνδεσμος", @@ -85,6 +101,7 @@ "Set expiration date" : "Ορισμός ημ. λήξης", "Expiration" : "Λήξη", "Expiration date" : "Ημερομηνία λήξης", + "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", "Adding user..." : "Προσθήκη χρήστη ...", "group" : "ομάδα", "remote" : "απομακρυσμένα", @@ -117,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Γειά σου {name}, ο καιρός είναι {weather}", "Hello {name}" : "Γεια σου {name}", "_download %n file_::_download %n files_" : ["λήψη %n αρχείου","λήψη %n αρχείων"], + "{version} is available. Get more information on how to update." : "Η έκδοση {version} είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες για το πως να κάνετε την ενημέρωση.", "Updating {productName} to version {version}, this may take a while." : "Ενημέρωση του {productName} στην έκδοση {version}, αυτό μπορεί να διαρκέσει λίγη ώρα.", "Please reload the page." : "Παρακαλώ επαναφορτώστε τη σελίδα.", - "The update was unsuccessful. " : "Η ενημέρωση δεν ήταν επιτυχής.", + "The update was unsuccessful. " : "Η ενημέρωση ήταν ανεπιτυχής.", + "The update was successful. There were warnings." : "Η ενημέρωση ήταν επιτυχής. Υπήρχαν προειδοποιήσεις.", "The update was successful. Redirecting you to ownCloud now." : "Η ενημέρωση ήταν επιτυχής. Μετάβαση στο ownCloud.", "Couldn't reset password because the token is invalid" : "Αδυναμία επαναφοράς κωδικού πρόσβασης καθώς το τεκμήριο είναι άκυρο", "Couldn't send reset email. Please make sure your username is correct." : "Αδυναμία αποστολής ηλ. μηνύματος επαναφοράς. Παρακαλώ ελέγξτε ότι το όνομα χρήστη σας είναι ορθό.", @@ -130,8 +149,8 @@ "New Password" : "Νέος Κωδικός", "Reset password" : "Επαναφορά συνθηματικού", "Searching other places" : "Έρευνα σε άλλα σημεία.", - "No search result in other places" : "Κανένα αποτέλεσμα έρευνας σε άλλα σημεία.", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "No search results in other places" : "Δεν υπάρχουν αποτελέσματα αναζήτησης σε άλλες τοποθεσίες", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} αποτελέσματα έρευνας σε άλλα σημεία","{count} αποτελέσματα έρευνας σε άλλα σημεία"], "Personal" : "Προσωπικά", "Users" : "Χρήστες", "Apps" : "Εφαρμογές", @@ -158,12 +177,13 @@ "Technical details" : "Τεχνικές λεπτομέρειες", "Remote Address: %s" : "Απομακρυσμένη Διεύθυνση: %s", "Request ID: %s" : "Αίτημα ID: %s", + "Type: %s" : "Τύπος: %s", "Code: %s" : "Κωδικός: %s", "Message: %s" : "Μήνυμα: %s", "File: %s" : "Αρχείο: %s", "Line: %s" : "Γραμμή: %s", "Trace" : "Ανίχνευση", - "Security Warning" : "Προειδοποίηση Ασφαλείας", + "Security warning" : "Προειδοποίηση Ασφαλείας", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ο κατάλογος δεδομένων και τα αρχεία σας είναι πιθανό προσβάσιμα από το internet γιατί δεν δουλεύει το αρχείο .htaccess.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Για πληροφορίες πως να ρυθμίσετε ορθά τον διακομιστή σας, παρακαλώ δείτε την <a href=\"%s\" target=\"_blank\">τεκμηρίωση</a>.", "Create an <strong>admin account</strong>" : "Δημιουργήστε έναν <strong>λογαριασμό διαχειριστή</strong>", @@ -172,22 +192,28 @@ "Data folder" : "Φάκελος δεδομένων", "Configure the database" : "Ρύθμιση της βάσης δεδομένων", "Only %s is available." : "Μόνο %s είναι διαθέσιμο.", + "Install and activate additional PHP modules to choose other database types." : "Εγκαταστήστε και ενεργοποιείστε επιπλέον αρθρώματα PHP για να επιλέξετε άλλους τύπους βάσεων δεδομένων.", + "For more details check out the documentation." : "Για περισσότερες πληροφορίες ανατρέξτε στην τεκμηρίωση.", "Database user" : "Χρήστης της βάσης δεδομένων", "Database password" : "Συνθηματικό βάσης δεδομένων", "Database name" : "Όνομα βάσης δεδομένων", "Database tablespace" : "Κενά Πινάκων Βάσης Δεδομένων", "Database host" : "Διακομιστής βάσης δεδομένων", - "Performance Warning" : "Απόδοση προειδοποίησης", + "Performance warning" : "Προειδοποίηση απόδοσης", "SQLite will be used as database." : "Η SQLite θα χρησιμοποιηθεί ως βάση δεδομένων.", "For larger installations we recommend to choose a different database backend." : "Για μεγαλύτερες εγκαταστάσεις συνιστούμε να επιλέξετε διαφορετικό σύστημα υποστήριξης βάσης δεδομένων.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Ειδικά όταν χρησιμοποιείτε τον πελάτη για συγχρονισμό στον υπολογιστή σας, δεν συνίσταται η χρήση της SQLite.", "Finish setup" : "Ολοκλήρωση εγκατάστασης", "Finishing …" : "Ολοκλήρωση...", - "%s is available. Get more information on how to update." : "%s είναι διαθέσιμη. Δείτε περισσότερες πληροφορίες στο πώς να αναβαθμίσετε.", + "Need help?" : "Θέλετε βοήθεια;", + "See the documentation" : "Δείτε την τεκμηρίωση", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Αυτή η εφαρμογή απαιτεί JavaScript για σωστή λειτουργία. Παρακαλώ {linkstart} ενεργοποιήστε τη JavaScrip {linkend} και επαναφορτώστε τη σελίδα.", "Log out" : "Αποσύνδεση", "Search" : "Αναζήτηση", "Server side authentication failed!" : "Η διαδικασία επικύρωσης απέτυχε από την πλευρά του διακομιστή!", "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", + "An internal error occured." : "Παρουσιάστηκε εσωτερικό σφάλμα.", + "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", "Forgot your password? Reset it!" : "Ξεχάσατε τον κωδικό πρόσβασής σας; Επαναφέρετέ τον!", "remember" : "απομνημόνευση", "Log in" : "Είσοδος", @@ -207,6 +233,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Παρακαλώ βεβαιωθείτε ότι έχουν ληψθεί αντίγραφα ασφαλείας της βάσης δεδομένων, του φακέλου ρυθμίσεων και του φακέλου δεδομένων πριν προχωρήσετε.", "Start update" : "Έναρξη ενημέρωσης", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Για να αποφύγετε τη λήξη χρόνου με μεγαλύτερες εγκαταστάσεις, μπορείτε αντί αυτού να τρέξετε την ακόλουθη εντολή από τον κατάλογο αρχείων εφαρμογών:", + "This %s instance is currently in maintenance mode, which may take a while." : "Αυτή %s η εγκατάσταση είναι σε κατάσταση συντήρησης, η οποία μπορεί να πάρει κάποιο χρόνο.", "This page will refresh itself when the %s instance is available again." : "Αυτή η σελίδα θα ανανεωθεί από μόνη της όταν η %s εγκατάσταση είναι διαθέσιμη ξανά." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/en@pirate.js b/core/l10n/en@pirate.js index 6a402a35323..adc62c8c962 100644 --- a/core/l10n/en@pirate.js +++ b/core/l10n/en@pirate.js @@ -1,9 +1,6 @@ OC.L10N.register( "core", { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Password" : "Passcode", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Password" : "Passcode" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/en@pirate.json b/core/l10n/en@pirate.json index fff4266c5da..6f74658eb82 100644 --- a/core/l10n/en@pirate.json +++ b/core/l10n/en@pirate.json @@ -1,7 +1,4 @@ { "translations": { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Password" : "Passcode", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Password" : "Passcode" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index bc06017d3cf..4eb6b354261 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -8,13 +8,17 @@ OC.L10N.register( "Checked database schema update" : "Checked database schema update", "Checked database schema update for apps" : "Checked database schema update for apps", "Updated \"%s\" to %s" : "Updated \"%s\" to %s", + "Repair warning: " : "Repair warning: ", + "Repair error: " : "Repair error: ", "Following incompatible apps have been disabled: %s" : "Following incompatible apps have been disabled: %s", - "Following 3rd party apps have been disabled: %s" : "Following 3rd party apps have been disabled: %s", + "Invalid file provided" : "Invalid file provided", "No image or file provided" : "No image or file provided", "Unknown filetype" : "Unknown filetype", "Invalid image" : "Invalid image", "No temporary profile picture available, try again" : "No temporary profile picture available, try again", "No crop data provided" : "No crop data provided", + "No valid crop data provided" : "No valid crop data provided", + "Crop is not square" : "Crop is not square", "Sunday" : "Sunday", "Monday" : "Monday", "Tuesday" : "Tuesday", @@ -67,10 +71,10 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "Shared" : "Shared", "Shared with {recipients}" : "Shared with {recipients}", "Share" : "Share", @@ -80,7 +84,9 @@ OC.L10N.register( "Error while changing permissions" : "Error whilst changing permissions", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", "Shared with you by {owner}" : "Shared with you by {owner}", - "Share with user or group …" : "Share with user or group …", + "Share with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created", "Link" : "Link", @@ -93,6 +99,7 @@ OC.L10N.register( "Set expiration date" : "Set expiration date", "Expiration" : "Expiration", "Expiration date" : "Expiration date", + "An error occured. Please try again" : "An error occured. Please try again", "Adding user..." : "Adding user...", "group" : "group", "remote" : "remote", @@ -125,6 +132,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hello {name}, the weather is {weather}", "Hello {name}" : "Hello {name}", "_download %n file_::_download %n files_" : ["download %n file","download %n files"], + "{version} is available. Get more information on how to update." : "{version} is available. Get more information on how to update.", "Updating {productName} to version {version}, this may take a while." : "Updating {productName} to version {version}, this may take a while.", "Please reload the page." : "Please reload the page.", "The update was unsuccessful. " : "The update was unsuccessful. ", @@ -138,7 +146,7 @@ OC.L10N.register( "New Password" : "New Password", "Reset password" : "Reset password", "Searching other places" : "Searching other places", - "No search result in other places" : "No search result in other places", + "No search results in other places" : "No search results in other places", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} search result in other places","{count} search results in other places"], "Personal" : "Personal", "Users" : "Users", @@ -166,12 +174,13 @@ OC.L10N.register( "Technical details" : "Technical details", "Remote Address: %s" : "Remote Address: %s", "Request ID: %s" : "Request ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Code: %s", "Message: %s" : "Message: %s", "File: %s" : "File: %s", "Line: %s" : "Line: %s", "Trace" : "Trace", - "Security Warning" : "Security Warning", + "Security warning" : "Security warning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>", @@ -180,23 +189,28 @@ OC.L10N.register( "Data folder" : "Data folder", "Configure the database" : "Configure the database", "Only %s is available." : "Only %s is available.", + "Install and activate additional PHP modules to choose other database types." : "Install and activate additional PHP modules to choose other database types.", + "For more details check out the documentation." : "For more details check out the documentation.", "Database user" : "Database user", "Database password" : "Database password", "Database name" : "Database name", "Database tablespace" : "Database tablespace", "Database host" : "Database host", - "Performance Warning" : "Performance Warning", + "Performance warning" : "Performance warning", "SQLite will be used as database." : "SQLite will be used as database.", "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "Finish setup" : "Finish setup", "Finishing …" : "Finishing …", + "Need help?" : "Need help?", + "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", - "%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.", "Log out" : "Log out", "Search" : "Search", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", + "An internal error occured." : "An internal error occured.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", "Forgot your password? Reset it!" : "Forgot your password? Reset it!", "remember" : "remember", "Log in" : "Log in", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 1db6c343b52..e05bd7c73f5 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -6,13 +6,17 @@ "Checked database schema update" : "Checked database schema update", "Checked database schema update for apps" : "Checked database schema update for apps", "Updated \"%s\" to %s" : "Updated \"%s\" to %s", + "Repair warning: " : "Repair warning: ", + "Repair error: " : "Repair error: ", "Following incompatible apps have been disabled: %s" : "Following incompatible apps have been disabled: %s", - "Following 3rd party apps have been disabled: %s" : "Following 3rd party apps have been disabled: %s", + "Invalid file provided" : "Invalid file provided", "No image or file provided" : "No image or file provided", "Unknown filetype" : "Unknown filetype", "Invalid image" : "Invalid image", "No temporary profile picture available, try again" : "No temporary profile picture available, try again", "No crop data provided" : "No crop data provided", + "No valid crop data provided" : "No valid crop data provided", + "Crop is not square" : "Crop is not square", "Sunday" : "Sunday", "Monday" : "Monday", "Tuesday" : "Tuesday", @@ -65,10 +69,10 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Your web server is not yet set up properly to allow file synchronisation because the WebDAV interface seems to be broken.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest enabling the Internet connection for this server.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Error occurred whilst checking server setup", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting.", "Shared" : "Shared", "Shared with {recipients}" : "Shared with {recipients}", "Share" : "Share", @@ -78,7 +82,9 @@ "Error while changing permissions" : "Error whilst changing permissions", "Shared with you and the group {group} by {owner}" : "Shared with you and the group {group} by {owner}", "Shared with you by {owner}" : "Shared with you by {owner}", - "Share with user or group …" : "Share with user or group …", + "Share with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Share with people on other ownClouds using the syntax username@example.com/owncloud", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "The public link will expire no later than {days} days after it is created", "Link" : "Link", @@ -91,6 +97,7 @@ "Set expiration date" : "Set expiration date", "Expiration" : "Expiration", "Expiration date" : "Expiration date", + "An error occured. Please try again" : "An error occured. Please try again", "Adding user..." : "Adding user...", "group" : "group", "remote" : "remote", @@ -123,6 +130,7 @@ "Hello {name}, the weather is {weather}" : "Hello {name}, the weather is {weather}", "Hello {name}" : "Hello {name}", "_download %n file_::_download %n files_" : ["download %n file","download %n files"], + "{version} is available. Get more information on how to update." : "{version} is available. Get more information on how to update.", "Updating {productName} to version {version}, this may take a while." : "Updating {productName} to version {version}, this may take a while.", "Please reload the page." : "Please reload the page.", "The update was unsuccessful. " : "The update was unsuccessful. ", @@ -136,7 +144,7 @@ "New Password" : "New Password", "Reset password" : "Reset password", "Searching other places" : "Searching other places", - "No search result in other places" : "No search result in other places", + "No search results in other places" : "No search results in other places", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} search result in other places","{count} search results in other places"], "Personal" : "Personal", "Users" : "Users", @@ -164,12 +172,13 @@ "Technical details" : "Technical details", "Remote Address: %s" : "Remote Address: %s", "Request ID: %s" : "Request ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Code: %s", "Message: %s" : "Message: %s", "File: %s" : "File: %s", "Line: %s" : "Line: %s", "Trace" : "Trace", - "Security Warning" : "Security Warning", + "Security warning" : "Security warning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Your data directory and files are probably accessible from the internet because the .htaccess file does not work.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Create an <strong>admin account</strong>", @@ -178,23 +187,28 @@ "Data folder" : "Data folder", "Configure the database" : "Configure the database", "Only %s is available." : "Only %s is available.", + "Install and activate additional PHP modules to choose other database types." : "Install and activate additional PHP modules to choose other database types.", + "For more details check out the documentation." : "For more details check out the documentation.", "Database user" : "Database user", "Database password" : "Database password", "Database name" : "Database name", "Database tablespace" : "Database tablespace", "Database host" : "Database host", - "Performance Warning" : "Performance Warning", + "Performance warning" : "Performance warning", "SQLite will be used as database." : "SQLite will be used as database.", "For larger installations we recommend to choose a different database backend." : "For larger installations we recommend to choose a different database backend.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especially when using the desktop client for file syncing, the use of SQLite is discouraged.", "Finish setup" : "Finish setup", "Finishing …" : "Finishing …", + "Need help?" : "Need help?", + "See the documentation" : "See the documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page.", - "%s is available. Get more information on how to update." : "%s is available. Get more information on how to update.", "Log out" : "Log out", "Search" : "Search", "Server side authentication failed!" : "Server side authentication failed!", "Please contact your administrator." : "Please contact your administrator.", + "An internal error occured." : "An internal error occured.", + "Please try again or contact your administrator." : "Please try again or contact your administrator.", "Forgot your password? Reset it!" : "Forgot your password? Reset it!", "remember" : "remember", "Log in" : "Log in", diff --git a/core/l10n/eo.js b/core/l10n/eo.js index 5a976068a16..1b804091266 100644 --- a/core/l10n/eo.js +++ b/core/l10n/eo.js @@ -42,7 +42,7 @@ OC.L10N.register( "So-so password" : "Mezaĉa pasvorto", "Good password" : "Bona pasvorto", "Strong password" : "Forta pasvorto", - "Shared" : "Dividita", + "Shared" : "Kunhavata", "Share" : "Kunhavigi", "Error" : "Eraro", "Error while sharing" : "Eraro dum kunhavigo", @@ -50,7 +50,6 @@ OC.L10N.register( "Error while changing permissions" : "Eraro dum ŝanĝo de permesoj", "Shared with you and the group {group} by {owner}" : "Kunhavigita kun vi kaj la grupo {group} de {owner}", "Shared with you by {owner}" : "Kunhavigita kun vi de {owner}", - "Share with user or group …" : "Kunhavigi kun uzanto aŭ grupo...", "Share link" : "Konhavigi ligilon", "Password protect" : "Protekti per pasvorto", "Password" : "Pasvorto", @@ -81,13 +80,11 @@ OC.L10N.register( "Add" : "Aldoni", "Edit tags" : "Redakti etikedojn", "No tags selected for deletion." : "Neniu etikedo elektitas por forigo.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Bonvolu reŝargi la paĝon.", "The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.", "Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}", "New password" : "Nova pasvorto", "Reset password" : "Rekomenci la pasvorton", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persona", "Users" : "Uzantoj", "Apps" : "Aplikaĵoj", @@ -99,7 +96,6 @@ OC.L10N.register( "Error tagging" : "Eraris etikedado", "Error untagging" : "Eraris maletikedado", "Access forbidden" : "Aliro estas malpermesata", - "Security Warning" : "Sekureca averto", "Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>", "Username" : "Uzantonomo", "Data folder" : "Datuma dosierujo", @@ -111,7 +107,6 @@ OC.L10N.register( "Database host" : "Datumbaza gastigo", "Finish setup" : "Fini la instalon", "Finishing …" : "Finante...", - "%s is available. Get more information on how to update." : "%s haveblas. Ekhavi pli da informo pri kiel ĝisdatigi.", "Log out" : "Elsaluti", "Search" : "Serĉi", "Please contact your administrator." : "Bonvolu kontakti vian administranton.", diff --git a/core/l10n/eo.json b/core/l10n/eo.json index bf5f2bbb69c..8bd13d5cd35 100644 --- a/core/l10n/eo.json +++ b/core/l10n/eo.json @@ -40,7 +40,7 @@ "So-so password" : "Mezaĉa pasvorto", "Good password" : "Bona pasvorto", "Strong password" : "Forta pasvorto", - "Shared" : "Dividita", + "Shared" : "Kunhavata", "Share" : "Kunhavigi", "Error" : "Eraro", "Error while sharing" : "Eraro dum kunhavigo", @@ -48,7 +48,6 @@ "Error while changing permissions" : "Eraro dum ŝanĝo de permesoj", "Shared with you and the group {group} by {owner}" : "Kunhavigita kun vi kaj la grupo {group} de {owner}", "Shared with you by {owner}" : "Kunhavigita kun vi de {owner}", - "Share with user or group …" : "Kunhavigi kun uzanto aŭ grupo...", "Share link" : "Konhavigi ligilon", "Password protect" : "Protekti per pasvorto", "Password" : "Pasvorto", @@ -79,13 +78,11 @@ "Add" : "Aldoni", "Edit tags" : "Redakti etikedojn", "No tags selected for deletion." : "Neniu etikedo elektitas por forigo.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Bonvolu reŝargi la paĝon.", "The update was successful. Redirecting you to ownCloud now." : "La ĝisdatigo estis sukcesa. Alidirektante nun al ownCloud.", "Use the following link to reset your password: {link}" : "Uzu la jenan ligilon por restarigi vian pasvorton: {link}", "New password" : "Nova pasvorto", "Reset password" : "Rekomenci la pasvorton", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Persona", "Users" : "Uzantoj", "Apps" : "Aplikaĵoj", @@ -97,7 +94,6 @@ "Error tagging" : "Eraris etikedado", "Error untagging" : "Eraris maletikedado", "Access forbidden" : "Aliro estas malpermesata", - "Security Warning" : "Sekureca averto", "Create an <strong>admin account</strong>" : "Krei <strong>administran konton</strong>", "Username" : "Uzantonomo", "Data folder" : "Datuma dosierujo", @@ -109,7 +105,6 @@ "Database host" : "Datumbaza gastigo", "Finish setup" : "Fini la instalon", "Finishing …" : "Finante...", - "%s is available. Get more information on how to update." : "%s haveblas. Ekhavi pli da informo pri kiel ĝisdatigi.", "Log out" : "Elsaluti", "Search" : "Serĉi", "Please contact your administrator." : "Bonvolu kontakti vian administranton.", diff --git a/core/l10n/es.js b/core/l10n/es.js index bf58122b2df..6b206f8bb96 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -4,14 +4,15 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "No se pudo enviar el mensaje a los siguientes usuarios: %s", "Turned on maintenance mode" : "Modo mantenimiento activado", "Turned off maintenance mode" : "Modo mantenimiento desactivado", + "Maintenance mode is kept active" : "El modo mantenimiento aún está activo.", "Updated database" : "Base de datos actualizada", "Checked database schema update" : "Actualización del esquema de base de datos revisado", "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones", "Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s", "Repair warning: " : "Advertencia de reparación:", - "Repair error: " : "Error a reparar", - "Following incompatible apps have been disabled: %s" : "Las siguientes apps incompatibles, han sido deshabilitadas: %s", - "Following 3rd party apps have been disabled: %s" : "Las siguientes aplicaciones de terceros han sido deshabilitadas: %s", + "Repair error: " : "Error que reparar:", + "Following incompatible apps have been disabled: %s" : "Las siguientes apps incompatibles se han deshabilitado: %s", + "Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s", "Invalid file provided" : "Archivo inválido", "No image or file provided" : "No se especificó ningún archivo o imagen", "Unknown filetype" : "Tipo de archivo desconocido", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionan. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.", "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurada como se esperaba \"{expected}\". Esto es un riesgo potencial de seguridad y debe ajustar esta opción.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "La \"Strict-Transport-Security\" Cabecera HTTP no está configurada a al menos \"2,678,400\" segundos. Esto es un riesgo potencial de seguridad y debe ajustar esta opción.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a esta web vía HTTP. Le recomendamos encarecidamente que configure su servidor para que use HTTPS en su lugar..", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esta ingresando a este sitio de internet vía HTTP. Sugerimos fuertemente que configure su servidor que utilice HTTPS como es descripto en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.", "Shared" : "Compartido", "Shared with {recipients}" : "Compartido con {recipients}", "Share" : "Compartir", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido contigo por {owner}", - "Share with user or group …" : "Compartido con el usuario o con el grupo ...", + "Share with users or groups …" : "Compartir con usuarios o grupos ...", + "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con personas en otros ownClouds utilizando la sintáxis username@example.com/owncloud", "Share link" : "Enlace compartido", "The public link will expire no later than {days} days after it is created" : "El vínculo público no expirará antes de {days} desde que se creó", "Link" : "Enlace", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Establecer fecha de caducidad", "Expiration" : "Expira en:", "Expiration date" : "Fecha de caducidad", + "An error occured. Please try again" : "Un error ocurrió. Por favor reinténtelo nuevamente.", "Adding user..." : "Añadiendo usuario...", "group" : "grupo", "remote" : "remoto", @@ -130,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hola {name}, el día es {weather}", "Hello {name}" : "Hola {name}", "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n ficheros"], + "{version} is available. Get more information on how to update." : "Una nueva {version} está disponible. Consiga mas información de como actualizar.", "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}. Esto puede tardar un poco.", "Please reload the page." : "Recargue/Actualice la página", "The update was unsuccessful. " : "La actualización ha fallado.", + "The update was successful. There were warnings." : "La actualización fue exitosa. Había advertencias.", "The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.", "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.", "Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar el correo electrónico para el restablecimiento. Por favor, asegúrese de que su nombre de usuario es el correcto.", @@ -143,7 +151,7 @@ OC.L10N.register( "New Password" : "Contraseña nueva", "Reset password" : "Restablecer contraseña", "Searching other places" : "Buscando en otros lugares", - "No search result in other places" : "No hay resultados de búsqueda en otros lugares", + "No search results in other places" : "Sin resultados de búsqueda en otros sitios", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado de búsqueda en otros lugares","{count} resultados de búsqueda en otros lugares"], "Personal" : "Personal", "Users" : "Usuarios", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Detalles técnicos", "Remote Address: %s" : "Dirección remota: %s", "Request ID: %s" : "ID de la solicitud: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensaje: %s", "File: %s" : "Archivo: %s", "Line: %s" : "Línea: %s", "Trace" : "Trazas", - "Security Warning" : "Advertencia de seguridad", + "Security warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Directorio de datos", "Configure the database" : "Configurar la base de datos", "Only %s is available." : "Solo %s está disponible.", + "Install and activate additional PHP modules to choose other database types." : "Instalar y activar módulos PHP adicionales para elegir otros formatos de base de datos.", + "For more details check out the documentation." : "Para más detalles revisar la documentación.", "Database user" : "Usuario de la base de datos", "Database password" : "Contraseña de la base de datos", "Database name" : "Nombre de la base de datos", "Database tablespace" : "Espacio de tablas de la base de datos", "Database host" : "Host de la base de datos", - "Performance Warning" : "Advertencia de rendimiento", + "Performance warning" : "Advertencia de rendimiento", "SQLite will be used as database." : "Se utilizará SQLite como base de datos.", "For larger installations we recommend to choose a different database backend." : "Para grandes instalaciones recomendamos seleccionar una base de datos diferente", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando...", + "Need help?" : "Necesita ayuda?", + "See the documentation" : "Vea la documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.", - "%s is available. Get more information on how to update." : "%s está disponible. Obtener más información de como actualizar.", "Log out" : "Salir", "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", "Please contact your administrator." : "Por favor, contacte con el administrador.", + "An internal error occured." : "Un error interno ocurrió.", + "Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.", "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Restablézcala!", "remember" : "recordar", "Log in" : "Entrar", diff --git a/core/l10n/es.json b/core/l10n/es.json index 2aedc25d61d..ce593dac652 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -2,14 +2,15 @@ "Couldn't send mail to following users: %s " : "No se pudo enviar el mensaje a los siguientes usuarios: %s", "Turned on maintenance mode" : "Modo mantenimiento activado", "Turned off maintenance mode" : "Modo mantenimiento desactivado", + "Maintenance mode is kept active" : "El modo mantenimiento aún está activo.", "Updated database" : "Base de datos actualizada", "Checked database schema update" : "Actualización del esquema de base de datos revisado", "Checked database schema update for apps" : "Comprobada la actualización del esquema de la base de datos para aplicaciones", "Updated \"%s\" to %s" : "Se ha actualizado \"%s\" a %s", "Repair warning: " : "Advertencia de reparación:", - "Repair error: " : "Error a reparar", - "Following incompatible apps have been disabled: %s" : "Las siguientes apps incompatibles, han sido deshabilitadas: %s", - "Following 3rd party apps have been disabled: %s" : "Las siguientes aplicaciones de terceros han sido deshabilitadas: %s", + "Repair error: " : "Error que reparar:", + "Following incompatible apps have been disabled: %s" : "Las siguientes apps incompatibles se han deshabilitado: %s", + "Following apps have been disabled: %s" : "Siguiendo aplicaciones ha sido deshabilitado: %s", "Invalid file provided" : "Archivo inválido", "No image or file provided" : "No se especificó ningún archivo o imagen", "Unknown filetype" : "Tipo de archivo desconocido", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Su servidor web aún no está configurado adecuadamente para permitir sincronización de archivos ya que la interfaz WebDAV parece no estar funcionando.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor no tiene una conexión a Internet. Esto significa que algunas de las características como el montaje de almacenamiento externo, las notificaciones sobre actualizaciones o instalación de aplicaciones de terceros no funcionan. Podría no funcionar el acceso a los archivos de forma remota y el envío de correos electrónicos de notificación. Sugerimos habilitar la conexión a Internet de este servidor, si quiere tener todas las funciones.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Su directorio de datos y sus archivos probablemente sean accesibles desde Internet. El archivo .htaccess no está funcionando. Le sugerimos encarecidamente que configure su servidor web de modo que el directorio de datos ya no sea accesible o que mueva el directorio de datos fuera de la raíz de documentos del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "La memoria caché no ha sido configurada. Para aumentar su performance por favor configure memcache si está disponible. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom no es legible por PHP el mismo es altamente desalentado por razones de seguridad. Más información puede ser encontrada en nuestra <a href=\"{docLink}\">documentación</a>.", "Error occurred while checking server setup" : "Ha ocurrido un error al revisar la configuración del servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurada como se esperaba \"{expected}\". Esto es un riesgo potencial de seguridad y debe ajustar esta opción.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "La \"Strict-Transport-Security\" Cabecera HTTP no está configurada a al menos \"2,678,400\" segundos. Esto es un riesgo potencial de seguridad y debe ajustar esta opción.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está ingresando a esta web vía HTTP. Le recomendamos encarecidamente que configure su servidor para que use HTTPS en su lugar..", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "La \"{header}\" cabecera HTTP no está configurado para ser igual a \"{expected}\". Esto puede suponer un riesgo para la seguridad o la privacidad, por lo que se recomienda ajustar esta opción.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "La cabecera HTTP \"Strict-Transport-Security\" no está configurada en al menos \"{segundos}\" segundos. Para una mejor seguridad recomendamos que habilite HSTS como es descripta en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esta ingresando a este sitio de internet vía HTTP. Sugerimos fuertemente que configure su servidor que utilice HTTPS como es descripto en nuestros <a href=\"{docUrl}\">consejos de seguridad</a>.", "Shared" : "Compartido", "Shared with {recipients}" : "Compartido con {recipients}", "Share" : "Compartir", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido contigo por {owner}", - "Share with user or group …" : "Compartido con el usuario o con el grupo ...", + "Share with users or groups …" : "Compartir con usuarios o grupos ...", + "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con personas en otros ownClouds utilizando la sintáxis username@example.com/owncloud", "Share link" : "Enlace compartido", "The public link will expire no later than {days} days after it is created" : "El vínculo público no expirará antes de {days} desde que se creó", "Link" : "Enlace", @@ -96,6 +101,7 @@ "Set expiration date" : "Establecer fecha de caducidad", "Expiration" : "Expira en:", "Expiration date" : "Fecha de caducidad", + "An error occured. Please try again" : "Un error ocurrió. Por favor reinténtelo nuevamente.", "Adding user..." : "Añadiendo usuario...", "group" : "grupo", "remote" : "remoto", @@ -128,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Hola {name}, el día es {weather}", "Hello {name}" : "Hola {name}", "_download %n file_::_download %n files_" : ["descargar %n ficheros","descargar %n ficheros"], + "{version} is available. Get more information on how to update." : "Una nueva {version} está disponible. Consiga mas información de como actualizar.", "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a la versión {version}. Esto puede tardar un poco.", "Please reload the page." : "Recargue/Actualice la página", "The update was unsuccessful. " : "La actualización ha fallado.", + "The update was successful. There were warnings." : "La actualización fue exitosa. Había advertencias.", "The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.", "Couldn't reset password because the token is invalid" : "No se puede restablecer la contraseña porque el vale de identificación es inválido.", "Couldn't send reset email. Please make sure your username is correct." : "No se pudo enviar el correo electrónico para el restablecimiento. Por favor, asegúrese de que su nombre de usuario es el correcto.", @@ -141,7 +149,7 @@ "New Password" : "Contraseña nueva", "Reset password" : "Restablecer contraseña", "Searching other places" : "Buscando en otros lugares", - "No search result in other places" : "No hay resultados de búsqueda en otros lugares", + "No search results in other places" : "Sin resultados de búsqueda en otros sitios", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado de búsqueda en otros lugares","{count} resultados de búsqueda en otros lugares"], "Personal" : "Personal", "Users" : "Usuarios", @@ -169,12 +177,13 @@ "Technical details" : "Detalles técnicos", "Remote Address: %s" : "Dirección remota: %s", "Request ID: %s" : "ID de la solicitud: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensaje: %s", "File: %s" : "Archivo: %s", "Line: %s" : "Línea: %s", "Trace" : "Trazas", - "Security Warning" : "Advertencia de seguridad", + "Security warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Directorio de datos", "Configure the database" : "Configurar la base de datos", "Only %s is available." : "Solo %s está disponible.", + "Install and activate additional PHP modules to choose other database types." : "Instalar y activar módulos PHP adicionales para elegir otros formatos de base de datos.", + "For more details check out the documentation." : "Para más detalles revisar la documentación.", "Database user" : "Usuario de la base de datos", "Database password" : "Contraseña de la base de datos", "Database name" : "Nombre de la base de datos", "Database tablespace" : "Espacio de tablas de la base de datos", "Database host" : "Host de la base de datos", - "Performance Warning" : "Advertencia de rendimiento", + "Performance warning" : "Advertencia de rendimiento", "SQLite will be used as database." : "Se utilizará SQLite como base de datos.", "For larger installations we recommend to choose a different database backend." : "Para grandes instalaciones recomendamos seleccionar una base de datos diferente", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "El uso de SQLite esta desaconsejado especialmente cuando se usa el cliente de escritorio para sincronizar los ficheros.", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando...", + "Need help?" : "Necesita ayuda?", + "See the documentation" : "Vea la documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación requiere JavaScript para operar correctamente. Por favor, {linkstart}habilite JavaScript{linkend} y recargue la página.", - "%s is available. Get more information on how to update." : "%s está disponible. Obtener más información de como actualizar.", "Log out" : "Salir", "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", "Please contact your administrator." : "Por favor, contacte con el administrador.", + "An internal error occured." : "Un error interno ocurrió.", + "Please try again or contact your administrator." : "Por favor reintente nuevamente o contáctese con su administrador.", "Forgot your password? Reset it!" : "¿Olvidó su contraseña? ¡Restablézcala!", "remember" : "recordar", "Log in" : "Entrar", diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js index 14b10e67899..5ab12bd93f2 100644 --- a/core/l10n/es_AR.js +++ b/core/l10n/es_AR.js @@ -60,7 +60,6 @@ OC.L10N.register( "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido con vos y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con vos por {owner}", - "Share with user or group …" : "Compartir con usuario o grupo ...", "Share link" : "Compartir vínculo", "Password protect" : "Proteger con contraseña ", "Password" : "Contraseña", @@ -92,14 +91,12 @@ OC.L10N.register( "Edit tags" : "Editar etiquetas", "Error loading dialog template: {error}" : "Error cargando la plantilla de dialogo: {error}", "No tags selected for deletion." : "No se han seleccionado etiquetas para eliminar.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Por favor, recargue la página.", "The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.", "%s password reset" : "%s restablecer contraseña", "Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}", "New password" : "Nueva contraseña:", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Apps", @@ -116,7 +113,6 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "¡Hola!\n\nsólo te quería decir que %s acaba de compartir %s contigo.\nVerlo: %s\n\n", "The share will expire on %s." : "El compartir expirará en %s.", "Cheers!" : "¡Saludos!", - "Security Warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -130,7 +126,6 @@ OC.L10N.register( "Database host" : "Huésped de la base de datos", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando...", - "%s is available. Get more information on how to update." : "%s está disponible. Obtené más información sobre cómo actualizar.", "Log out" : "Cerrar la sesión", "Search" : "Buscar", "Server side authentication failed!" : "¡Falló la autenticación del servidor!", diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json index 10dfc88803a..69c7732c436 100644 --- a/core/l10n/es_AR.json +++ b/core/l10n/es_AR.json @@ -58,7 +58,6 @@ "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido con vos y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con vos por {owner}", - "Share with user or group …" : "Compartir con usuario o grupo ...", "Share link" : "Compartir vínculo", "Password protect" : "Proteger con contraseña ", "Password" : "Contraseña", @@ -90,14 +89,12 @@ "Edit tags" : "Editar etiquetas", "Error loading dialog template: {error}" : "Error cargando la plantilla de dialogo: {error}", "No tags selected for deletion." : "No se han seleccionado etiquetas para eliminar.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Por favor, recargue la página.", "The update was successful. Redirecting you to ownCloud now." : "La actualización fue exitosa. Estás siendo redirigido a ownCloud.", "%s password reset" : "%s restablecer contraseña", "Use the following link to reset your password: {link}" : "Usá este enlace para restablecer tu contraseña: {link}", "New password" : "Nueva contraseña:", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Apps", @@ -114,7 +111,6 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "¡Hola!\n\nsólo te quería decir que %s acaba de compartir %s contigo.\nVerlo: %s\n\n", "The share will expire on %s." : "El compartir expirará en %s.", "Cheers!" : "¡Saludos!", - "Security Warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Tu directorio de datos y tus archivos probablemente son accesibles a través de internet, ya que el archivo .htaccess no está funcionando.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información sobre cómo configurar apropiadamente tu servidor, por favor mirá la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -128,7 +124,6 @@ "Database host" : "Huésped de la base de datos", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando...", - "%s is available. Get more information on how to update." : "%s está disponible. Obtené más información sobre cómo actualizar.", "Log out" : "Cerrar la sesión", "Search" : "Buscar", "Server side authentication failed!" : "¡Falló la autenticación del servidor!", diff --git a/core/l10n/es_CL.js b/core/l10n/es_CL.js index f915955b18b..e143b3cb08e 100644 --- a/core/l10n/es_CL.js +++ b/core/l10n/es_CL.js @@ -27,7 +27,6 @@ OC.L10N.register( "Yes" : "Si", "Choose" : "Choose", "Ok" : "Ok", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Cancelar", "Shared" : "Compartido", "Share" : "Compartir", @@ -37,8 +36,6 @@ OC.L10N.register( "Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos", "Password" : "Clave", "The object type is not specified." : "El tipo de objeto no está especificado.", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Admin" : "Administración", diff --git a/core/l10n/es_CL.json b/core/l10n/es_CL.json index 0fbd3ac4609..996aeb75ac7 100644 --- a/core/l10n/es_CL.json +++ b/core/l10n/es_CL.json @@ -25,7 +25,6 @@ "Yes" : "Si", "Choose" : "Choose", "Ok" : "Ok", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Cancelar", "Shared" : "Compartido", "Share" : "Compartir", @@ -35,8 +34,6 @@ "Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos", "Password" : "Clave", "The object type is not specified." : "El tipo de objeto no está especificado.", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Admin" : "Administración", diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js index 7cd5f989f95..cc01b07c8c6 100644 --- a/core/l10n/es_MX.js +++ b/core/l10n/es_MX.js @@ -54,7 +54,6 @@ OC.L10N.register( "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido contigo por {owner}", - "Share with user or group …" : "Compartido con el usuario o con el grupo …", "Share link" : "Enlace compartido", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", @@ -86,14 +85,12 @@ OC.L10N.register( "Edit tags" : "Editar etiquetas", "Error loading dialog template: {error}" : "Error cargando plantilla de diálogo: {error}", "No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Vuelva a cargar la página.", "The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.", "%s password reset" : "%s restablecer contraseña", "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}", "New password" : "Nueva contraseña", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Aplicaciones", @@ -110,7 +107,6 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n", "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", - "Security Warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -124,7 +120,6 @@ OC.L10N.register( "Database host" : "Host de la base de datos", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando …", - "%s is available. Get more information on how to update." : "%s esta disponible. Obtener mas información de como actualizar.", "Log out" : "Salir", "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json index d5dd6de56d4..265788ee9a8 100644 --- a/core/l10n/es_MX.json +++ b/core/l10n/es_MX.json @@ -52,7 +52,6 @@ "Error while changing permissions" : "Error al cambiar permisos", "Shared with you and the group {group} by {owner}" : "Compartido contigo y el grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido contigo por {owner}", - "Share with user or group …" : "Compartido con el usuario o con el grupo …", "Share link" : "Enlace compartido", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", @@ -84,14 +83,12 @@ "Edit tags" : "Editar etiquetas", "Error loading dialog template: {error}" : "Error cargando plantilla de diálogo: {error}", "No tags selected for deletion." : "No hay etiquetas seleccionadas para borrar.", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Vuelva a cargar la página.", "The update was successful. Redirecting you to ownCloud now." : "La actualización se ha realizado con éxito. Redireccionando a ownCloud ahora.", "%s password reset" : "%s restablecer contraseña", "Use the following link to reset your password: {link}" : "Utilice el siguiente enlace para restablecer su contraseña: {link}", "New password" : "Nueva contraseña", "Reset password" : "Restablecer contraseña", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usuarios", "Apps" : "Aplicaciones", @@ -108,7 +105,6 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Hola:\n\nTan solo queremos informarte que %s compartió %s contigo.\nMíralo aquí: %s\n\n", "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", - "Security Warning" : "Advertencia de seguridad", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su directorio de datos y sus archivos probablemente sean accesibles a través de internet ya que el archivo .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para información de cómo configurar apropiadamente su servidor, por favor vea la <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear una <strong>cuenta de administrador</strong>", @@ -122,7 +118,6 @@ "Database host" : "Host de la base de datos", "Finish setup" : "Completar la instalación", "Finishing …" : "Finalizando …", - "%s is available. Get more information on how to update." : "%s esta disponible. Obtener mas información de como actualizar.", "Log out" : "Salir", "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index 7ca18bbb023..b08139a1f3a 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -8,11 +8,15 @@ OC.L10N.register( "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud", "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud", "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s", + "Repair warning: " : "Paranda hoiatus:", + "Repair error: " : "Paranda viga:", + "Invalid file provided" : "Vigane fail", "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", "Invalid image" : "Vigane pilt", "No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", + "Crop is not square" : "Lõikamine pole ruudukujuline", "Sunday" : "Pühapäev", "Monday" : "Esmaspäev", "Tuesday" : "Teisipäev", @@ -45,6 +49,7 @@ OC.L10N.register( "Error loading file picker template: {error}" : "Viga failivalija malli laadimisel: {error}", "Ok" : "Ok", "Error loading message template: {error}" : "Viga sõnumi malli laadimisel: {error}", + "read-only" : "kirjutuskaitstud", "_{count} file conflict_::_{count} file conflicts_" : ["{count} failikonflikt","{count} failikonflikti"], "One file conflict" : "Üks failikonflikt", "New Files" : "Uued failid", @@ -71,17 +76,21 @@ OC.L10N.register( "Error while changing permissions" : "Viga õiguste muutmisel", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt", "Shared with you by {owner}" : "Sinuga jagas {owner}", - "Share with user or group …" : "Jaga kasutaja või grupiga ...", + "Share with users or groups …" : "Jaga kasutajate või gruppidega ...", + "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", "Share link" : "Jaga linki", "The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist", + "Link" : "Link", "Password protect" : "Parooliga kaitstud", "Password" : "Parool", "Choose a password for the public link" : "Vali avaliku lingi jaoks parool", + "Allow editing" : "Luba muutmine", "Email link to person" : "Saada link isikule e-postiga", "Send" : "Saada", "Set expiration date" : "Määra aegumise kuupäev", "Expiration" : "Aegumine", "Expiration date" : "Aegumise kuupäev", + "An error occured. Please try again" : "Tekkis tõrge. Palun proovi uuesti", "Adding user..." : "Kasutaja lisamine...", "group" : "grupp", "Resharing is not allowed" : "Edasijagamine pole lubatud", @@ -92,6 +101,7 @@ OC.L10N.register( "can edit" : "saab muuta", "access control" : "ligipääsukontroll", "create" : "loo", + "change" : "muuda", "delete" : "kustuta", "Password protected" : "Parooliga kaitstud", "Error unsetting expiration date" : "Viga aegumise kuupäeva eemaldamisel", @@ -110,9 +120,12 @@ OC.L10N.register( "Hello world!" : "Tere maailm!", "sunny" : "päikeseline", "Hello {name}, the weather is {weather}" : "Tere {name}, ilm on {weather}", + "Hello {name}" : "Tere, {name}", "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"], + "{version} is available. Get more information on how to update." : "{version} on saadaval. Vaata lisainfot uuendamise kohta.", "Updating {productName} to version {version}, this may take a while." : "Uuendan {productName} versioonile {version}, see võtab veidi aega.", "Please reload the page." : "Palun laadi see uuesti.", + "The update was unsuccessful. " : "Uuendamine ebaõnnestus.", "The update was successful. Redirecting you to ownCloud now." : "Uuendus oli edukas. Kohe suunatakse Sind ownCloudi.", "Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane", "Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.", @@ -122,7 +135,9 @@ OC.L10N.register( "New password" : "Uus parool", "New Password" : "Uus parool", "Reset password" : "Nulli parool", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "Searching other places" : "Otsi teistest kohtadest", + "No search results in other places" : "Teistest kohtadest otsimine ei andnud tulemusi", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} otsingutulemus teistest kohtadest","{count} otsingutulemust teistest kohtadest"], "Personal" : "Isiklik", "Users" : "Kasutajad", "Apps" : "Rakendused", @@ -149,12 +164,13 @@ OC.L10N.register( "Technical details" : "Tehnilised andmed", "Remote Address: %s" : "Kaugaadress: %s", "Request ID: %s" : "Päringu ID: %s", + "Type: %s" : "Tüüp: %s", "Code: %s" : "Kood: %s", "Message: %s" : "Sõnum: %s", "File: %s" : "Fail: %s", "Line: %s" : "Rida: %s", "Trace" : "Jälita", - "Security Warning" : "Turvahoiatus", + "Security warning" : "Turvahoiatus", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.", "Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>", @@ -163,18 +179,25 @@ OC.L10N.register( "Data folder" : "Andmete kaust", "Configure the database" : "Seadista andmebaasi", "Only %s is available." : "Ainult %s on saadaval.", + "For more details check out the documentation." : "Lisainfot vaata dokumentatsioonist.", "Database user" : "Andmebaasi kasutaja", "Database password" : "Andmebaasi parool", "Database name" : "Andmebasi nimi", "Database tablespace" : "Andmebaasi tabeliruum", "Database host" : "Andmebaasi host", + "Performance warning" : "Kiiruse hoiatus", + "SQLite will be used as database." : "Andmebaasina kasutatakse SQLite", "Finish setup" : "Lõpeta seadistamine", "Finishing …" : "Lõpetamine ...", - "%s is available. Get more information on how to update." : "%s on saadaval. Vaata lähemalt kuidas uuendada.", + "Need help?" : "Vajad abi?", + "See the documentation" : "Vaata dokumentatsiooni", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun {linkstart}luba JavaScript{linkend} ning laadi see leht uuesti.", "Log out" : "Logi välja", "Search" : "Otsi", "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!", "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.", + "An internal error occured." : "Tekkis sisemine tõrge.", + "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", "Forgot your password? Reset it!" : "Unustasid parooli? Taasta see!", "remember" : "pea meeles", "Log in" : "Logi sisse", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index 9b8f5c9b356..35494783a6a 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -6,11 +6,15 @@ "Checked database schema update" : "Andmebaasi skeemi uuendus kontrollitud", "Checked database schema update for apps" : "Andmebaasi skeemi uuendus rakendustele on kontrollitud", "Updated \"%s\" to %s" : "Uuendatud \"%s\" -> %s", + "Repair warning: " : "Paranda hoiatus:", + "Repair error: " : "Paranda viga:", + "Invalid file provided" : "Vigane fail", "No image or file provided" : "Ühtegi pilti või faili pole pakutud", "Unknown filetype" : "Tundmatu failitüüp", "Invalid image" : "Vigane pilt", "No temporary profile picture available, try again" : "Ühtegi ajutist profiili pilti pole saadaval, proovi uuesti", "No crop data provided" : "Lõikeandmeid ei leitud", + "Crop is not square" : "Lõikamine pole ruudukujuline", "Sunday" : "Pühapäev", "Monday" : "Esmaspäev", "Tuesday" : "Teisipäev", @@ -43,6 +47,7 @@ "Error loading file picker template: {error}" : "Viga failivalija malli laadimisel: {error}", "Ok" : "Ok", "Error loading message template: {error}" : "Viga sõnumi malli laadimisel: {error}", + "read-only" : "kirjutuskaitstud", "_{count} file conflict_::_{count} file conflicts_" : ["{count} failikonflikt","{count} failikonflikti"], "One file conflict" : "Üks failikonflikt", "New Files" : "Uued failid", @@ -69,17 +74,21 @@ "Error while changing permissions" : "Viga õiguste muutmisel", "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt", "Shared with you by {owner}" : "Sinuga jagas {owner}", - "Share with user or group …" : "Jaga kasutaja või grupiga ...", + "Share with users or groups …" : "Jaga kasutajate või gruppidega ...", + "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", "Share link" : "Jaga linki", "The public link will expire no later than {days} days after it is created" : "Avalik link aegub mitte hiljem kui pärast {days} päeva selle loomist", + "Link" : "Link", "Password protect" : "Parooliga kaitstud", "Password" : "Parool", "Choose a password for the public link" : "Vali avaliku lingi jaoks parool", + "Allow editing" : "Luba muutmine", "Email link to person" : "Saada link isikule e-postiga", "Send" : "Saada", "Set expiration date" : "Määra aegumise kuupäev", "Expiration" : "Aegumine", "Expiration date" : "Aegumise kuupäev", + "An error occured. Please try again" : "Tekkis tõrge. Palun proovi uuesti", "Adding user..." : "Kasutaja lisamine...", "group" : "grupp", "Resharing is not allowed" : "Edasijagamine pole lubatud", @@ -90,6 +99,7 @@ "can edit" : "saab muuta", "access control" : "ligipääsukontroll", "create" : "loo", + "change" : "muuda", "delete" : "kustuta", "Password protected" : "Parooliga kaitstud", "Error unsetting expiration date" : "Viga aegumise kuupäeva eemaldamisel", @@ -108,9 +118,12 @@ "Hello world!" : "Tere maailm!", "sunny" : "päikeseline", "Hello {name}, the weather is {weather}" : "Tere {name}, ilm on {weather}", + "Hello {name}" : "Tere, {name}", "_download %n file_::_download %n files_" : ["laadi alla %n fail","laadi alla %n faili"], + "{version} is available. Get more information on how to update." : "{version} on saadaval. Vaata lisainfot uuendamise kohta.", "Updating {productName} to version {version}, this may take a while." : "Uuendan {productName} versioonile {version}, see võtab veidi aega.", "Please reload the page." : "Palun laadi see uuesti.", + "The update was unsuccessful. " : "Uuendamine ebaõnnestus.", "The update was successful. Redirecting you to ownCloud now." : "Uuendus oli edukas. Kohe suunatakse Sind ownCloudi.", "Couldn't reset password because the token is invalid" : "Ei saanud parooli taastada, kuna märgend on vigane", "Couldn't send reset email. Please make sure your username is correct." : "Ei suutnud lähtestada e-maili. Palun veendu, et kasutajatunnus on õige.", @@ -120,7 +133,9 @@ "New password" : "Uus parool", "New Password" : "Uus parool", "Reset password" : "Nulli parool", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "Searching other places" : "Otsi teistest kohtadest", + "No search results in other places" : "Teistest kohtadest otsimine ei andnud tulemusi", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} otsingutulemus teistest kohtadest","{count} otsingutulemust teistest kohtadest"], "Personal" : "Isiklik", "Users" : "Kasutajad", "Apps" : "Rakendused", @@ -147,12 +162,13 @@ "Technical details" : "Tehnilised andmed", "Remote Address: %s" : "Kaugaadress: %s", "Request ID: %s" : "Päringu ID: %s", + "Type: %s" : "Tüüp: %s", "Code: %s" : "Kood: %s", "Message: %s" : "Sõnum: %s", "File: %s" : "Fail: %s", "Line: %s" : "Rida: %s", "Trace" : "Jälita", - "Security Warning" : "Turvahoiatus", + "Security warning" : "Turvahoiatus", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Su andmete kataloog ja failid on tõenäoliselt internetist vabalt saadaval kuna .htaccess fail ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Serveri korrektseks seadistuseks palun tutvu <a href=\"%s\" target=\"_blank\">dokumentatsiooniga</a>.", "Create an <strong>admin account</strong>" : "Loo <strong>admini konto</strong>", @@ -161,18 +177,25 @@ "Data folder" : "Andmete kaust", "Configure the database" : "Seadista andmebaasi", "Only %s is available." : "Ainult %s on saadaval.", + "For more details check out the documentation." : "Lisainfot vaata dokumentatsioonist.", "Database user" : "Andmebaasi kasutaja", "Database password" : "Andmebaasi parool", "Database name" : "Andmebasi nimi", "Database tablespace" : "Andmebaasi tabeliruum", "Database host" : "Andmebaasi host", + "Performance warning" : "Kiiruse hoiatus", + "SQLite will be used as database." : "Andmebaasina kasutatakse SQLite", "Finish setup" : "Lõpeta seadistamine", "Finishing …" : "Lõpetamine ...", - "%s is available. Get more information on how to update." : "%s on saadaval. Vaata lähemalt kuidas uuendada.", + "Need help?" : "Vajad abi?", + "See the documentation" : "Vaata dokumentatsiooni", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "See rakendus vajab toimimiseks JavaScripti. Palun {linkstart}luba JavaScript{linkend} ning laadi see leht uuesti.", "Log out" : "Logi välja", "Search" : "Otsi", "Server side authentication failed!" : "Serveripoolne autentimine ebaõnnestus!", "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.", + "An internal error occured." : "Tekkis sisemine tõrge.", + "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", "Forgot your password? Reset it!" : "Unustasid parooli? Taasta see!", "remember" : "pea meeles", "Log in" : "Logi sisse", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index fd7a046fed9..9b96a760d4e 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -72,7 +72,6 @@ OC.L10N.register( "Error while changing permissions" : "Errore bat egon da baimenak aldatzean", "Shared with you and the group {group} by {owner}" : "{owner}-k zu eta {group} taldearekin elkarbanatuta", "Shared with you by {owner}" : "{owner}-k zurekin elkarbanatuta", - "Share with user or group …" : "Elkarbanatu erabiltzaile edo taldearekin...", "Share link" : "Elkarbanatu lotura", "The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.", "Link" : "Esteka", @@ -130,7 +129,6 @@ OC.L10N.register( "New Password" : "Pasahitz Berria", "Reset password" : "Berrezarri pasahitza", "Searching other places" : "Beste lekuak bilatzen", - "No search result in other places" : "Ez da bilaketaren emaitzik lortu beste lekuetan", "_{count} search result in other places_::_{count} search results in other places_" : ["Bilaketa emaitza {count} beste lekuetan","{count} emaitza lortu dira beste lekuetan"], "Personal" : "Pertsonala", "Users" : "Erabiltzaileak", @@ -163,7 +161,6 @@ OC.L10N.register( "File: %s" : "Fitxategia: %s", "Line: %s" : "Lerroa: %s", "Trace" : "Arrastoa", - "Security Warning" : "Segurtasun abisua", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.", "Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat", @@ -179,7 +176,6 @@ OC.L10N.register( "Database host" : "Datubasearen hostalaria", "Finish setup" : "Bukatu konfigurazioa", "Finishing …" : "Bukatzen...", - "%s is available. Get more information on how to update." : "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.", "Log out" : "Saioa bukatu", "Search" : "Bilatu", "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index edeea587f5f..35e252a7a7c 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -70,7 +70,6 @@ "Error while changing permissions" : "Errore bat egon da baimenak aldatzean", "Shared with you and the group {group} by {owner}" : "{owner}-k zu eta {group} taldearekin elkarbanatuta", "Shared with you by {owner}" : "{owner}-k zurekin elkarbanatuta", - "Share with user or group …" : "Elkarbanatu erabiltzaile edo taldearekin...", "Share link" : "Elkarbanatu lotura", "The public link will expire no later than {days} days after it is created" : "Esteka publikoak iraungi egingo du, askoz jota, sortu eta {days} egunetara.", "Link" : "Esteka", @@ -128,7 +127,6 @@ "New Password" : "Pasahitz Berria", "Reset password" : "Berrezarri pasahitza", "Searching other places" : "Beste lekuak bilatzen", - "No search result in other places" : "Ez da bilaketaren emaitzik lortu beste lekuetan", "_{count} search result in other places_::_{count} search results in other places_" : ["Bilaketa emaitza {count} beste lekuetan","{count} emaitza lortu dira beste lekuetan"], "Personal" : "Pertsonala", "Users" : "Erabiltzaileak", @@ -161,7 +159,6 @@ "File: %s" : "Fitxategia: %s", "Line: %s" : "Lerroa: %s", "Trace" : "Arrastoa", - "Security Warning" : "Segurtasun abisua", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.", "Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat", @@ -177,7 +174,6 @@ "Database host" : "Datubasearen hostalaria", "Finish setup" : "Bukatu konfigurazioa", "Finishing …" : "Bukatzen...", - "%s is available. Get more information on how to update." : "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.", "Log out" : "Saioa bukatu", "Search" : "Bilatu", "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", diff --git a/core/l10n/eu_ES.js b/core/l10n/eu_ES.js index e1895b17f86..847f4cc5da0 100644 --- a/core/l10n/eu_ES.js +++ b/core/l10n/eu_ES.js @@ -1,10 +1,8 @@ OC.L10N.register( "core", { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Ezeztatu", "Delete" : "Ezabatu", - "_download %n file_::_download %n files_" : ["",""], "Personal" : "Pertsonala" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/eu_ES.json b/core/l10n/eu_ES.json index 7f28faebc14..0f7c86a7b9e 100644 --- a/core/l10n/eu_ES.json +++ b/core/l10n/eu_ES.json @@ -1,8 +1,6 @@ { "translations": { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Ezeztatu", "Delete" : "Ezabatu", - "_download %n file_::_download %n files_" : ["",""], "Personal" : "Pertsonala" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/fa.js b/core/l10n/fa.js index 834bf276874..7263c05da88 100644 --- a/core/l10n/fa.js +++ b/core/l10n/fa.js @@ -41,7 +41,6 @@ OC.L10N.register( "Error loading file picker template: {error}" : "خطا در بارگذاری قالب انتخاب فایل : {error}", "Ok" : "قبول", "Error loading message template: {error}" : "خطا در بارگذاری قالب پیام : {error}", - "_{count} file conflict_::_{count} file conflicts_" : [""], "One file conflict" : "یک فایل متضاد", "New Files" : "فایل های جدید", "Already existing files" : "فایل های موجود در حال حاضر ", @@ -64,7 +63,6 @@ OC.L10N.register( "Error while changing permissions" : "خطا در حال تغییر مجوز", "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", - "Share with user or group …" : "به اشتراک گذاری با کاربر یا گروه", "Share link" : "اشتراک گذاشتن لینک", "Password protect" : "نگهداری کردن رمز عبور", "Password" : "گذرواژه", @@ -94,12 +92,10 @@ OC.L10N.register( "Delete" : "حذف", "Add" : "افزودن", "Edit tags" : "ویرایش تگ ها", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.", "Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}", "New password" : "گذرواژه جدید", "Reset password" : "تنظیم مجدد رمز عبور", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "شخصی", "Users" : "کاربران", "Apps" : " برنامه ها", @@ -114,7 +110,6 @@ OC.L10N.register( "Error unfavoriting" : "خطا هنگام حذف از موارد محبوب", "Access forbidden" : "اجازه دسترسی به مناطق ممنوعه را ندارید", "Cheers!" : "سلامتی!", - "Security Warning" : "اخطار امنیتی", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.", "Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید", "Username" : "نام کاربری", @@ -129,7 +124,6 @@ OC.L10N.register( "Database host" : "هاست پایگاه داده", "Finish setup" : "اتمام نصب", "Finishing …" : "در حال اتمام ...", - "%s is available. Get more information on how to update." : "%s در دسترس است. برای چگونگی به روز رسانی اطلاعات بیشتر را دریافت نمایید.", "Log out" : "خروج", "Search" : "جستوجو", "remember" : "بیاد آوری", diff --git a/core/l10n/fa.json b/core/l10n/fa.json index b25e1ce61f2..804a8a66fa1 100644 --- a/core/l10n/fa.json +++ b/core/l10n/fa.json @@ -39,7 +39,6 @@ "Error loading file picker template: {error}" : "خطا در بارگذاری قالب انتخاب فایل : {error}", "Ok" : "قبول", "Error loading message template: {error}" : "خطا در بارگذاری قالب پیام : {error}", - "_{count} file conflict_::_{count} file conflicts_" : [""], "One file conflict" : "یک فایل متضاد", "New Files" : "فایل های جدید", "Already existing files" : "فایل های موجود در حال حاضر ", @@ -62,7 +61,6 @@ "Error while changing permissions" : "خطا در حال تغییر مجوز", "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", - "Share with user or group …" : "به اشتراک گذاری با کاربر یا گروه", "Share link" : "اشتراک گذاشتن لینک", "Password protect" : "نگهداری کردن رمز عبور", "Password" : "گذرواژه", @@ -92,12 +90,10 @@ "Delete" : "حذف", "Add" : "افزودن", "Edit tags" : "ویرایش تگ ها", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "به روزرسانی موفقیت آمیز بود. در حال انتقال شما به OwnCloud.", "Use the following link to reset your password: {link}" : "از لینک زیر جهت دوباره سازی پسورد استفاده کنید :\n{link}", "New password" : "گذرواژه جدید", "Reset password" : "تنظیم مجدد رمز عبور", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "شخصی", "Users" : "کاربران", "Apps" : " برنامه ها", @@ -112,7 +108,6 @@ "Error unfavoriting" : "خطا هنگام حذف از موارد محبوب", "Access forbidden" : "اجازه دسترسی به مناطق ممنوعه را ندارید", "Cheers!" : "سلامتی!", - "Security Warning" : "اخطار امنیتی", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "فایلها و فهرست های داده های شما قابل از اینترنت قابل دسترسی هستند، چونکه فایل htacces. کار نمی کند.", "Create an <strong>admin account</strong>" : "لطفا یک <strong> شناسه برای مدیر</strong> بسازید", "Username" : "نام کاربری", @@ -127,7 +122,6 @@ "Database host" : "هاست پایگاه داده", "Finish setup" : "اتمام نصب", "Finishing …" : "در حال اتمام ...", - "%s is available. Get more information on how to update." : "%s در دسترس است. برای چگونگی به روز رسانی اطلاعات بیشتر را دریافت نمایید.", "Log out" : "خروج", "Search" : "جستوجو", "remember" : "بیاد آوری", diff --git a/core/l10n/fi.js b/core/l10n/fi.js index 96793fe434e..84301350b9b 100644 --- a/core/l10n/fi.js +++ b/core/l10n/fi.js @@ -5,14 +5,12 @@ OC.L10N.register( "No" : "EI", "Yes" : "KYLLÄ", "Choose" : "Valitse", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Peruuta", "Error" : "Virhe", "Share link" : "Jaa linkki", "Password" : "Salasana", "Delete" : "Poista", "Add" : "Lisää", - "_download %n file_::_download %n files_" : ["",""], "Help" : "Apua", "Username" : "Käyttäjätunnus", "Log in" : "Kirjaudu sisään" diff --git a/core/l10n/fi.json b/core/l10n/fi.json index ab23e1e7e9f..d9a8d572f51 100644 --- a/core/l10n/fi.json +++ b/core/l10n/fi.json @@ -3,14 +3,12 @@ "No" : "EI", "Yes" : "KYLLÄ", "Choose" : "Valitse", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Peruuta", "Error" : "Virhe", "Share link" : "Jaa linkki", "Password" : "Salasana", "Delete" : "Poista", "Add" : "Lisää", - "_download %n file_::_download %n files_" : ["",""], "Help" : "Apua", "Username" : "Käyttäjätunnus", "Log in" : "Kirjaudu sisään" diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index d67e9b71367..52d8364c747 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -2,8 +2,9 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Sähköpostin lähetys seuraaville käyttäjille epäonnistui: %s", - "Turned on maintenance mode" : "Siirrytty ylläpitotilaan", - "Turned off maintenance mode" : "Ylläpitotila laitettu pois päältä", + "Turned on maintenance mode" : "Siirrytty huoltotilaan", + "Turned off maintenance mode" : "Huoltotila asetettu pois päältä", + "Maintenance mode is kept active" : "Huoltotila pidetään aktiivisena", "Updated database" : "Tietokanta ajan tasalla", "Checked database schema update" : "Tarkistettu tietokannan skeemapäivitys", "Checked database schema update for apps" : "Tarkistettu tietokannan skeemapäivitys sovelluksille", @@ -11,7 +12,7 @@ OC.L10N.register( "Repair warning: " : "Korjausvaroitus:", "Repair error: " : "Korjausvirhe:", "Following incompatible apps have been disabled: %s" : "Seuraavat yhteensopimattomat sovellukset on poistettu käytöstä: %s", - "Following 3rd party apps have been disabled: %s" : "Seuraavat kolmansien osapuolten sovellukset on poistettu käytöstä: %s", + "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Invalid file provided" : "Määritetty virheellinen tiedosto", "No image or file provided" : "Kuvaa tai tiedostoa ei määritelty", "Unknown filetype" : "Tuntematon tiedostotyyppi", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ownCloudin ominaisuuksia.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty arvoon \"{expected}\". Tämä on mahdollinen tietoturvariski, joten suosittelemme kyseisen asetuksen muuttamista.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"2,678,400\" sekuntiin. Tämä on mahdollinen tietoturvariski, joten suosittelemme kyseisen asetuksen muuttamista.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät tätä sivustoa HTTP-yhteyden välityksellä. Suosittelemme määrittämään palvelimen asetukset siten, että käytössä on HTTPS-yhteys.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.", "Shared" : "Jaettu", "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa", "Share" : "Jaa", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Virhe oikeuksia muuttaessa", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta", "Shared with you by {owner}" : "Jaettu kanssasi käyttäjän {owner} toimesta", - "Share with user or group …" : "Jaa käyttäjän tai ryhmän kanssa…", + "Share with users or groups …" : "Jaa käyttäjien tai ryhmien kanssa…", + "Share with users, groups or remote users …" : "Jaa käyttäjien, ryhmien tai etäkäyttäjien kanssa…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Jaa toisia ownCloud-järjestelmiä käyttävien kesken käyttäen syntaksia käyttäjätunnus@esimerkki.fi/owncloud", "Share link" : "Jaa linkki", "The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta", "Link" : "Linkki", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Aseta päättymispäivä", "Expiration" : "Erääntyminen", "Expiration date" : "Päättymispäivä", + "An error occured. Please try again" : "Tapahtui virhe. Yritä myöhemmin uudestaan", "Adding user..." : "Lisätään käyttäjä...", "group" : "ryhmä", "remote" : "etä", @@ -130,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}", "Hello {name}" : "Hei {name}", "_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"], + "{version} is available. Get more information on how to update." : "{version} on saatavilla. Tarjolla on lisätietoja päivittämisestä.", "Updating {productName} to version {version}, this may take a while." : "Päivitetään {productName} versioon {version}, tämä saattaa kestää hetken.", "Please reload the page." : "Päivitä sivu.", "The update was unsuccessful. " : "Päivitys epäonnistui.", + "The update was successful. There were warnings." : "Päivitys onnistui, tosin ilmeni varoituksia.", "The update was successful. Redirecting you to ownCloud now." : "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.", "Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa koska valtuutus on virheellinen", "Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.", @@ -143,7 +151,7 @@ OC.L10N.register( "New Password" : "Uusi salasana", "Reset password" : "Palauta salasana", "Searching other places" : "Etsitään muista paikoista", - "No search result in other places" : "Ei hakutuloksia muista paikoista", + "No search results in other places" : "Ei hakutuloksia muista paikoista", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} hakutulos muualla","{count} hakutulosta muualla"], "Personal" : "Henkilökohtainen", "Users" : "Käyttäjät", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Tekniset tiedot", "Remote Address: %s" : "Etäosoite: %s", "Request ID: %s" : "Pyynnön tunniste: %s", + "Type: %s" : "Tyyppi: %s", "Code: %s" : "Koodi: %s", "Message: %s" : "Viesti: %s", "File: %s" : "Tiedosto: %s", "Line: %s" : "Rivi: %s", "Trace" : "Jälki", - "Security Warning" : "Turvallisuusvaroitus", + "Security warning" : "Turvallisuusvaroitus", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.", "Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Datakansio", "Configure the database" : "Muokkaa tietokantaa", "Only %s is available." : "Vain %s on käytettävissä.", + "Install and activate additional PHP modules to choose other database types." : "Asenna ja aktivoi erillisiä PHP-moduuleja valitaksesi muita tietokantatyyppejä.", + "For more details check out the documentation." : "Lisätietoja on saatavilla dokumentaatiossa.", "Database user" : "Tietokannan käyttäjä", "Database password" : "Tietokannan salasana", "Database name" : "Tietokannan nimi", "Database tablespace" : "Tietokannan taulukkotila", "Database host" : "Tietokantapalvelin", - "Performance Warning" : "Suorituskykyvaroitus", + "Performance warning" : "Suorituskykyvaroitus", "SQLite will be used as database." : "SQLitea käytetään tietokantana.", "For larger installations we recommend to choose a different database backend." : "Suuria asennuksia varten suositellaan muun tietokannan käyttöä.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "Finish setup" : "Viimeistele asennus", "Finishing …" : "Valmistellaan…", + "Need help?" : "Tarvitsetko apua?", + "See the documentation" : "Tutustu dokumentaatioon", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.", - "%s is available. Get more information on how to update." : "%s on saatavilla. Lue lisätietoja, miten päivitys asennetaan.", "Log out" : "Kirjaudu ulos", "Search" : "Etsi", "Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!", "Please contact your administrator." : "Ota yhteys ylläpitäjään.", + "An internal error occured." : "Tapahtui sisäinen virhe.", + "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", "Forgot your password? Reset it!" : "Unohditko salasanasi? Palauta se!", "remember" : "muista", "Log in" : "Kirjaudu sisään", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index a343fbcb1c2..1738aeed31f 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -1,7 +1,8 @@ { "translations": { "Couldn't send mail to following users: %s " : "Sähköpostin lähetys seuraaville käyttäjille epäonnistui: %s", - "Turned on maintenance mode" : "Siirrytty ylläpitotilaan", - "Turned off maintenance mode" : "Ylläpitotila laitettu pois päältä", + "Turned on maintenance mode" : "Siirrytty huoltotilaan", + "Turned off maintenance mode" : "Huoltotila asetettu pois päältä", + "Maintenance mode is kept active" : "Huoltotila pidetään aktiivisena", "Updated database" : "Tietokanta ajan tasalla", "Checked database schema update" : "Tarkistettu tietokannan skeemapäivitys", "Checked database schema update for apps" : "Tarkistettu tietokannan skeemapäivitys sovelluksille", @@ -9,7 +10,7 @@ "Repair warning: " : "Korjausvaroitus:", "Repair error: " : "Korjausvirhe:", "Following incompatible apps have been disabled: %s" : "Seuraavat yhteensopimattomat sovellukset on poistettu käytöstä: %s", - "Following 3rd party apps have been disabled: %s" : "Seuraavat kolmansien osapuolten sovellukset on poistettu käytöstä: %s", + "Following apps have been disabled: %s" : "Seuraavat sovellukset on poistettu käytöstä: %s", "Invalid file provided" : "Määritetty virheellinen tiedosto", "No image or file provided" : "Kuvaa tai tiedostoa ei määritelty", "Unknown filetype" : "Tuntematon tiedostotyyppi", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "HTTP-palvelinta ei ole määritetty oikein tiedostojen synkronointia varten, koska WebDAV-liittymä vaikuttaa olevan rikki.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Tällä palvelimella ei ole toimivaa internetyhteyttä. Sen seurauksena jotkin ominaisuudet, kuten erillinen tallennustila, ilmoitukset päivityksistä ja kolmansien osapuolten sovellusten asennus eivät toimi. Tiedostojen käyttö etänä tai ilmoitusten lähetys sähköpostitse eivät välttämättä toimi myöskään. Suosittelemme kytkemään palvelimen internetyhteyteen, jos haluat käyttää kaikkia ownCloudin ominaisuuksia.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datahakemistosi ja tiedostosi ovat luultavasti käytettävissä suoraan internetistä. .htaccess-tiedosto ei toimi oikein. Suosittelemme määrittämään http-palvelimen asetukset siten, ettei datahakemisto ole suoraan käytettävissä internetistä, tai siirtämään datahakemiston http-palvelimen juurihakemiston ulkopuolelle.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Muistissa toimivaa cachea ei ole määritetty. Paranna suorituskykyä ottamalla memcache käyttöön. Lisätietoja on saatavilla <a href=\"{docLink}\">dokumentaatiosta</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ei ole luettavissa PHP:n toimesta. Turvallisuussyistä tämä ei ole suositeltava asetus. Lisätietoja on tarjolla <a href=\"{docLink}\">dokumentaatiossa</a>.", "Error occurred while checking server setup" : "Virhe palvelimen määrityksiä tarkistaessa", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty arvoon \"{expected}\". Tämä on mahdollinen tietoturvariski, joten suosittelemme kyseisen asetuksen muuttamista.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"2,678,400\" sekuntiin. Tämä on mahdollinen tietoturvariski, joten suosittelemme kyseisen asetuksen muuttamista.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Käytät tätä sivustoa HTTP-yhteyden välityksellä. Suosittelemme määrittämään palvelimen asetukset siten, että käytössä on HTTPS-yhteys.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-otsaketta \"{header}\" ei ole määritetty vastaamaan arvoa \"{expected}\". Kyseessä on mahdollinen tietoturvaan tai -suojaan liittyvä riski, joten suosittelemme muuttamaan asetuksen arvoa.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP-otsaketta \"Strict-Transport-Security\" ei ole määritetty vähintään \"{seconds}\" sekuntiin. Suosittelemme HSTS:n käyttöä paremman tietoturvan vuoksi, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Käytät sivustoa HTTP-yhteydellä. Suosittelemme asettamaan palvelimen vaatimaan HTTPS-yhteyden, kuten <a href=\"{docUrl}\">tietoturvavinkeissä</a> neuvotaan.", "Shared" : "Jaettu", "Shared with {recipients}" : "Jaettu henkilöiden {recipients} kanssa", "Share" : "Jaa", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Virhe oikeuksia muuttaessa", "Shared with you and the group {group} by {owner}" : "Jaettu sinun ja ryhmän {group} kanssa käyttäjän {owner} toimesta", "Shared with you by {owner}" : "Jaettu kanssasi käyttäjän {owner} toimesta", - "Share with user or group …" : "Jaa käyttäjän tai ryhmän kanssa…", + "Share with users or groups …" : "Jaa käyttäjien tai ryhmien kanssa…", + "Share with users, groups or remote users …" : "Jaa käyttäjien, ryhmien tai etäkäyttäjien kanssa…", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Jaa toisia ownCloud-järjestelmiä käyttävien kesken käyttäen syntaksia käyttäjätunnus@esimerkki.fi/owncloud", "Share link" : "Jaa linkki", "The public link will expire no later than {days} days after it is created" : "Julkinen linkki vanhenee {days} päivän jälkeen sen luomisesta", "Link" : "Linkki", @@ -96,6 +101,7 @@ "Set expiration date" : "Aseta päättymispäivä", "Expiration" : "Erääntyminen", "Expiration date" : "Päättymispäivä", + "An error occured. Please try again" : "Tapahtui virhe. Yritä myöhemmin uudestaan", "Adding user..." : "Lisätään käyttäjä...", "group" : "ryhmä", "remote" : "etä", @@ -128,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Hei {name}, sää on {weather}", "Hello {name}" : "Hei {name}", "_download %n file_::_download %n files_" : ["lataa %n tiedosto","lataa %n tiedostoa"], + "{version} is available. Get more information on how to update." : "{version} on saatavilla. Tarjolla on lisätietoja päivittämisestä.", "Updating {productName} to version {version}, this may take a while." : "Päivitetään {productName} versioon {version}, tämä saattaa kestää hetken.", "Please reload the page." : "Päivitä sivu.", "The update was unsuccessful. " : "Päivitys epäonnistui.", + "The update was successful. There were warnings." : "Päivitys onnistui, tosin ilmeni varoituksia.", "The update was successful. Redirecting you to ownCloud now." : "Päivitys onnistui. Selain ohjautuu nyt ownCloudiisi.", "Couldn't reset password because the token is invalid" : "Salasanaa ei voitu palauttaa koska valtuutus on virheellinen", "Couldn't send reset email. Please make sure your username is correct." : "Palautussähköpostin lähettäminen ei onnistunut. Varmista, että käyttäjätunnuksesi on oikein.", @@ -141,7 +149,7 @@ "New Password" : "Uusi salasana", "Reset password" : "Palauta salasana", "Searching other places" : "Etsitään muista paikoista", - "No search result in other places" : "Ei hakutuloksia muista paikoista", + "No search results in other places" : "Ei hakutuloksia muista paikoista", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} hakutulos muualla","{count} hakutulosta muualla"], "Personal" : "Henkilökohtainen", "Users" : "Käyttäjät", @@ -169,12 +177,13 @@ "Technical details" : "Tekniset tiedot", "Remote Address: %s" : "Etäosoite: %s", "Request ID: %s" : "Pyynnön tunniste: %s", + "Type: %s" : "Tyyppi: %s", "Code: %s" : "Koodi: %s", "Message: %s" : "Viesti: %s", "File: %s" : "Tiedosto: %s", "Line: %s" : "Rivi: %s", "Trace" : "Jälki", - "Security Warning" : "Turvallisuusvaroitus", + "Security warning" : "Turvallisuusvaroitus", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datakansiosi ja tiedostosi ovat mitä luultavimmin muiden saavutettavissa internetistä, koska .htaccess-tiedosto ei toimi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Lisätietoja palvelimen asetuksien määrittämisestä on saatavilla <a href=\"%s\" target=\"_blank\">dokumentaatiosta</a>.", "Create an <strong>admin account</strong>" : "Luo <strong>ylläpitäjän tunnus</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Datakansio", "Configure the database" : "Muokkaa tietokantaa", "Only %s is available." : "Vain %s on käytettävissä.", + "Install and activate additional PHP modules to choose other database types." : "Asenna ja aktivoi erillisiä PHP-moduuleja valitaksesi muita tietokantatyyppejä.", + "For more details check out the documentation." : "Lisätietoja on saatavilla dokumentaatiossa.", "Database user" : "Tietokannan käyttäjä", "Database password" : "Tietokannan salasana", "Database name" : "Tietokannan nimi", "Database tablespace" : "Tietokannan taulukkotila", "Database host" : "Tietokantapalvelin", - "Performance Warning" : "Suorituskykyvaroitus", + "Performance warning" : "Suorituskykyvaroitus", "SQLite will be used as database." : "SQLitea käytetään tietokantana.", "For larger installations we recommend to choose a different database backend." : "Suuria asennuksia varten suositellaan muun tietokannan käyttöä.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Varsinkin työpöytäsovelluksen tiedostosynkronointia käyttäessä SQLiten käyttö ei ole suositeltavaa.", "Finish setup" : "Viimeistele asennus", "Finishing …" : "Valmistellaan…", + "Need help?" : "Tarvitsetko apua?", + "See the documentation" : "Tutustu dokumentaatioon", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Tämä sovellus vaatii toimiakseen JavaScript-tuen. {linkstart}Ota JavaScript käyttöön{linkend} ja päivitä sivu.", - "%s is available. Get more information on how to update." : "%s on saatavilla. Lue lisätietoja, miten päivitys asennetaan.", "Log out" : "Kirjaudu ulos", "Search" : "Etsi", "Server side authentication failed!" : "Palvelimen puoleinen tunnistautuminen epäonnistui!", "Please contact your administrator." : "Ota yhteys ylläpitäjään.", + "An internal error occured." : "Tapahtui sisäinen virhe.", + "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", "Forgot your password? Reset it!" : "Unohditko salasanasi? Palauta se!", "remember" : "muista", "Log in" : "Kirjaudu sisään", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 6ce1b04b8e3..12dcee2569d 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Impossible d'envoyer un courriel aux utilisateurs suivants : %s", "Turned on maintenance mode" : "Mode de maintenance activé", "Turned off maintenance mode" : "Mode de maintenance désactivé", + "Maintenance mode is kept active" : "Le mode de maintenance est laissé actif", "Updated database" : "Base de données mise à jour", "Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée", "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée", "Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s", + "Repair warning: " : "Avertissement de réparation :", + "Repair error: " : "Erreur de réparation :", "Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s", - "Following 3rd party apps have been disabled: %s" : "Les applications tierce partie suivantes ont été désactivées : %s", + "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", + "Invalid file provided" : "Fichier non valide", "No image or file provided" : "Aucun fichier fourni", "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.", "No crop data provided" : "Aucune donnée de recadrage fournie", + "No valid crop data provided" : "Données de recadrage non valides", + "Crop is not square" : "Le recadrage n'est pas carré", "Sunday" : "Dimanche", "Monday" : "Lundi", "Tuesday" : "Mardi", @@ -37,8 +43,8 @@ OC.L10N.register( "Settings" : "Paramètres", "Saving..." : "Enregistrement…", "Couldn't send reset email. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez contacter votre administrateur.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un lien permettant de réinitialiser votre mot de passe vient de vous être envoyé par courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, contactez votre administrateur.<br>N'oubliez pas de vérifier dans votre dossier pourriel / spam!", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", "I know what I'm doing" : "Je sais ce que je fais", "Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.", "No" : "Non", @@ -64,13 +70,15 @@ OC.L10N.register( "So-so password" : "Mot de passe tout juste acceptable", "Good password" : "Mot de passe de sécurité suffisante", "Strong password" : "Mot de passe fort", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", - "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mails ne seront pas fonctionnels également. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", - "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\". C'est un risque de sécurité potentiel et il est donc recommandé d'ajuster ce paramètre.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée pour durer \"2,678,400\" secondes. C'est un risque de sécurité potentiel et il est donc recommandé d'ajuster ce paramètre.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS à la place.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">aide à la sécurité</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans notre <a href=\"{docUrl}\">aide à la sécurité</a>.", "Shared" : "Partagé", "Shared with {recipients}" : "Partagé avec {recipients}", "Share" : "Partager", @@ -80,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Erreur lors du changement des permissions", "Shared with you and the group {group} by {owner}" : "Partagé avec vous et le groupe {group} par {owner}", "Shared with you by {owner}" : "Partagé avec vous par {owner}", - "Share with user or group …" : "Partager avec un utilisateur ou un groupe...", + "Share with users or groups …" : "Partager avec des utilisateurs ou groupes...", + "Share with users, groups or remote users …" : "Partager avec des utilisateurs, groupes, ou utilisateurs distants", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud", "Share link" : "Partager par lien public", "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.", "Link" : "Lien", @@ -93,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Spécifier une date d'expiration", "Expiration" : "Expiration", "Expiration date" : "Date d'expiration", + "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", "Adding user..." : "Ajout de l'utilisateur...", "group" : "groupe", "remote" : "distant", @@ -125,10 +136,12 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Bonjour {name}, le temps est {weather}", "Hello {name}" : "Hello {name}", "_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"], + "{version} is available. Get more information on how to update." : "La version {version} est disponible. Obtenez plus d'informations à propos de cette mise à jour.", "Updating {productName} to version {version}, this may take a while." : "La mise à jour de {productName} vers la version {version} est en cours. Cela peut prendre un certain temps.", "Please reload the page." : "Veuillez recharger la page.", "The update was unsuccessful. " : "La mise à jour a échoué.", - "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé(e) vers ownCloud.", + "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", + "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé vers ownCloud.", "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", @@ -138,14 +151,14 @@ OC.L10N.register( "New Password" : "Nouveau mot de passe", "Reset password" : "Réinitialiser le mot de passe", "Searching other places" : "Recherche en cours dans d'autres emplacements", - "No search result in other places" : "Aucun résultat dans d'autres emplacements", - "_{count} search result in other places_::_{count} search results in other places_" : ["{count} résultat de recherche dans d'autres lieux","{count} résultats de recherche dans d'autres emplacements"], + "No search results in other places" : "Aucun résultat dans d'autres emplacements", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} résultat dans d'autres emplacements","{count} résultats dans d'autres emplacements"], "Personal" : "Personnel", "Users" : "Utilisateurs", "Apps" : "Applications", "Admin" : "Administration", "Help" : "Aide", - "Error loading tags" : "Erreur de chargement des étiquettes.", + "Error loading tags" : "Erreur lors du chargement des étiquettes", "Tag already exists" : "L'étiquette existe déjà.", "Error deleting tag(s)" : "Erreur de suppression d'étiquette(s)", "Error tagging" : "Erreur lors de l'étiquetage", @@ -156,7 +169,7 @@ OC.L10N.register( "File not found" : "Fichier non trouvé", "The specified document has not been found on the server." : "Impossible de trouver le document spécifié sur le serveur.", "You can click here to return to %s." : "Vous pouvez cliquer ici pour retourner à %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé \"%s\" avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", "Internal Server Error" : "Erreur interne du serveur", @@ -166,12 +179,13 @@ OC.L10N.register( "Technical details" : "Renseignements techniques", "Remote Address: %s" : "Adresse distante : %s", "Request ID: %s" : "ID de la demande : %s", + "Type: %s" : "Type : %s", "Code: %s" : "Code : %s", "Message: %s" : "Message : %s", "File: %s" : "Fichier : %s", "Line: %s" : "Ligne : %s", "Trace" : "Trace", - "Security Warning" : "Avertissement de sécurité", + "Security warning" : "Avertissement de sécurité", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>", @@ -180,28 +194,33 @@ OC.L10N.register( "Data folder" : "Répertoire des données", "Configure the database" : "Configurer la base de données", "Only %s is available." : "%s seulement est disponible.", + "Install and activate additional PHP modules to choose other database types." : "Installez et activez les modules PHP additionnels adéquats pour choisir d'autres types de base de données.", + "For more details check out the documentation." : "Consultez la documentation pour plus de détails.", "Database user" : "Utilisateur de la base de données", "Database password" : "Mot de passe de la base de données", "Database name" : "Nom de la base de données", "Database tablespace" : "Tablespace de la base de données", "Database host" : "Hôte de la base de données", - "Performance Warning" : "Avertissement de performance", + "Performance warning" : "Avertissement de performance", "SQLite will be used as database." : "SQLite sera utilisé comme gestionnaire de base de données.", "For larger installations we recommend to choose a different database backend." : "Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données : l'utilisation de SQLite est alors déconseillée.", "Finish setup" : "Terminer l'installation", "Finishing …" : "Finalisation …", + "Need help?" : "Besoin d'aide ?", + "See the documentation" : "Lire la documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.", - "%s is available. Get more information on how to update." : "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.", "Log out" : "Se déconnecter", "Search" : "Rechercher", "Server side authentication failed!" : "L'authentification sur le serveur a échoué !", "Please contact your administrator." : "Veuillez contacter votre administrateur.", + "An internal error occured." : "Une erreur interne est survenue.", + "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", "Forgot your password? Reset it!" : "Mot de passe oublié ? Réinitialisez-le !", "remember" : "se souvenir de moi", "Log in" : "Connexion", "Alternative Logins" : "Identifiants alternatifs", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Consultez-le !</a><br><br>", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", "This means only administrators can use the instance." : "Cela signifie que seuls les administrateurs peuvent utiliser l'instance.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", @@ -215,7 +234,7 @@ OC.L10N.register( "The theme %s has been disabled." : "Le thème %s a été désactivé.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Veuillez vous assurer qu'une copie de sauvegarde de la base de données, du dossier de configuration (config) et du dossier de données (data) a été réalisée avant de commencer.", "Start update" : "Démarrer la mise à jour", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les dépassements de délai (timeouts) avec les installations de plus grande ampleur, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les timeouts avec les installations de volume conséquent, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :", "This %s instance is currently in maintenance mode, which may take a while." : "Cette instance de %s est en cours de maintenance, cela peut prendre du temps.", "This page will refresh itself when the %s instance is available again." : "Cette page se rafraîchira d'elle-même lorsque l'instance %s sera à nouveau disponible." }, diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 838271cdccf..dc45f141b1c 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "Impossible d'envoyer un courriel aux utilisateurs suivants : %s", "Turned on maintenance mode" : "Mode de maintenance activé", "Turned off maintenance mode" : "Mode de maintenance désactivé", + "Maintenance mode is kept active" : "Le mode de maintenance est laissé actif", "Updated database" : "Base de données mise à jour", "Checked database schema update" : "Mise à jour du schéma de la base de données vérifiée", "Checked database schema update for apps" : "Mise à jour du schéma de la base de données pour les applications vérifiée", "Updated \"%s\" to %s" : "Mise à jour de « %s » vers %s", + "Repair warning: " : "Avertissement de réparation :", + "Repair error: " : "Erreur de réparation :", "Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s", - "Following 3rd party apps have been disabled: %s" : "Les applications tierce partie suivantes ont été désactivées : %s", + "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", + "Invalid file provided" : "Fichier non valide", "No image or file provided" : "Aucun fichier fourni", "Unknown filetype" : "Type de fichier inconnu", "Invalid image" : "Image non valable", "No temporary profile picture available, try again" : "Aucune image temporaire disponible pour le profil. Essayez à nouveau.", "No crop data provided" : "Aucune donnée de recadrage fournie", + "No valid crop data provided" : "Données de recadrage non valides", + "Crop is not square" : "Le recadrage n'est pas carré", "Sunday" : "Dimanche", "Monday" : "Lundi", "Tuesday" : "Mardi", @@ -35,8 +41,8 @@ "Settings" : "Paramètres", "Saving..." : "Enregistrement…", "Couldn't send reset email. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez contacter votre administrateur.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Le lien permettant de réinitialiser votre mot de passe vient d'être envoyé à votre adresse de courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, vérifiez votre dossier de pourriels/spams.<br>Si besoin, contactez votre administrateur.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr(e) de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Un lien permettant de réinitialiser votre mot de passe vient de vous être envoyé par courriel.<br>Si vous ne le recevez pas dans un délai raisonnable, contactez votre administrateur.<br>N'oubliez pas de vérifier dans votre dossier pourriel / spam!", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vos fichiers sont chiffrés. Si vous n'avez pas activé la clef de récupération, il n'y aura aucun moyen de récupérer vos données une fois le mot de passe réinitialisé.<br />Si vous n'êtes pas sûr de ce que vous faites, veuillez contacter votre administrateur avant de continuer. <br />Voulez-vous vraiment continuer ?", "I know what I'm doing" : "Je sais ce que je fais", "Password can not be changed. Please contact your administrator." : "Le mot de passe ne peut être modifié. Veuillez contacter votre administrateur.", "No" : "Non", @@ -62,13 +68,15 @@ "So-so password" : "Mot de passe tout juste acceptable", "Good password" : "Mot de passe de sécurité suffisante", "Strong password" : "Mot de passe fort", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour permettre la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", - "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mails ne seront pas fonctionnels également. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", - "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou bien de le déplacer à l'extérieur de la racine du serveur web.", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Votre serveur web n'est pas correctement configuré pour la synchronisation de fichiers : l'interface WebDAV semble ne pas fonctionner.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Ce serveur ne peut se connecter à internet. Cela signifie que certaines fonctionnalités, telles que le montage de supports de stockage distants, les notifications de mises à jour ou l'installation d'applications tierces ne fonctionneront pas. L'accès aux fichiers à distance, ainsi que les notifications par mail peuvent aussi être indisponibles. Il est recommandé d'activer la connexion internet pour ce serveur si vous souhaitez disposer de l'ensemble des fonctionnalités offertes.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Votre dossier de données et vos fichiers sont probablement accessibles depuis internet. Le fichier .htaccess ne fonctionne pas. Nous vous recommandons vivement de configurer votre serveur web de façon à ce que ce dossier de données ne soit plus accessible, ou de le déplacer hors de la racine du serveur web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Aucun cache de la mémoire n'est configuré. Si possible, configurez un \"memcache\" pour augmenter les performances. Pour plus d'information consultez la <a href=\"{docLink}\">documentation</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom n'est pas lisible par PHP, ce qui est fortement déconseillé pour des raisons de sécurité. Plus d'informations peuvent être trouvées dans notre <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Une erreur s'est produite lors de la vérification de la configuration du serveur", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\". C'est un risque de sécurité potentiel et il est donc recommandé d'ajuster ce paramètre.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée pour durer \"2,678,400\" secondes. C'est un risque de sécurité potentiel et il est donc recommandé d'ajuster ce paramètre.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS à la place.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'en-tête HTTP \"{header}\" n'est pas configurée pour être égale à \"{expected}\" créant potentiellement un risque relié à la sécurité et à la vie privée. Il est donc recommandé d'ajuster ce paramètre.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'en-tête HTTP \"Strict-Transport-Security\" n'est pas configurée à \"{seconds}\" secondes. Pour renforcer la sécurité nous recommandons d'activer HSTS comme décrit dans notre <a href=\"{docUrl}\">aide à la sécurité</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Vous accédez à ce site via HTTP. Nous vous recommandons fortement de configurer votre serveur pour forcer l'utilisation de HTTPS, comme expliqué dans notre <a href=\"{docUrl}\">aide à la sécurité</a>.", "Shared" : "Partagé", "Shared with {recipients}" : "Partagé avec {recipients}", "Share" : "Partager", @@ -78,7 +86,9 @@ "Error while changing permissions" : "Erreur lors du changement des permissions", "Shared with you and the group {group} by {owner}" : "Partagé avec vous et le groupe {group} par {owner}", "Shared with you by {owner}" : "Partagé avec vous par {owner}", - "Share with user or group …" : "Partager avec un utilisateur ou un groupe...", + "Share with users or groups …" : "Partager avec des utilisateurs ou groupes...", + "Share with users, groups or remote users …" : "Partager avec des utilisateurs, groupes, ou utilisateurs distants", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partagez avec des personnes sur d'autres ownClouds en utilisant la syntaxe utilisateur@exemple.com/owncloud", "Share link" : "Partager par lien public", "The public link will expire no later than {days} days after it is created" : "Ce lien public expirera au plus tard {days} jours après sa création.", "Link" : "Lien", @@ -91,6 +101,7 @@ "Set expiration date" : "Spécifier une date d'expiration", "Expiration" : "Expiration", "Expiration date" : "Date d'expiration", + "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", "Adding user..." : "Ajout de l'utilisateur...", "group" : "groupe", "remote" : "distant", @@ -123,10 +134,12 @@ "Hello {name}, the weather is {weather}" : "Bonjour {name}, le temps est {weather}", "Hello {name}" : "Hello {name}", "_download %n file_::_download %n files_" : ["Télécharger %n fichier","Télécharger %n fichiers"], + "{version} is available. Get more information on how to update." : "La version {version} est disponible. Obtenez plus d'informations à propos de cette mise à jour.", "Updating {productName} to version {version}, this may take a while." : "La mise à jour de {productName} vers la version {version} est en cours. Cela peut prendre un certain temps.", "Please reload the page." : "Veuillez recharger la page.", "The update was unsuccessful. " : "La mise à jour a échoué.", - "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé(e) vers ownCloud.", + "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", + "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé vers ownCloud.", "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", @@ -136,14 +149,14 @@ "New Password" : "Nouveau mot de passe", "Reset password" : "Réinitialiser le mot de passe", "Searching other places" : "Recherche en cours dans d'autres emplacements", - "No search result in other places" : "Aucun résultat dans d'autres emplacements", - "_{count} search result in other places_::_{count} search results in other places_" : ["{count} résultat de recherche dans d'autres lieux","{count} résultats de recherche dans d'autres emplacements"], + "No search results in other places" : "Aucun résultat dans d'autres emplacements", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} résultat dans d'autres emplacements","{count} résultats dans d'autres emplacements"], "Personal" : "Personnel", "Users" : "Utilisateurs", "Apps" : "Applications", "Admin" : "Administration", "Help" : "Aide", - "Error loading tags" : "Erreur de chargement des étiquettes.", + "Error loading tags" : "Erreur lors du chargement des étiquettes", "Tag already exists" : "L'étiquette existe déjà.", "Error deleting tag(s)" : "Erreur de suppression d'étiquette(s)", "Error tagging" : "Erreur lors de l'étiquetage", @@ -154,7 +167,7 @@ "File not found" : "Fichier non trouvé", "The specified document has not been found on the server." : "Impossible de trouver le document spécifié sur le serveur.", "You can click here to return to %s." : "Vous pouvez cliquer ici pour retourner à %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé %s avec vous.\nConsultez-le : %s\n", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjour,\n\nNous vous informons que %s a partagé \"%s\" avec vous.\nVous pouvez y accéder à l'adresse suivante : %s\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", "Internal Server Error" : "Erreur interne du serveur", @@ -164,12 +177,13 @@ "Technical details" : "Renseignements techniques", "Remote Address: %s" : "Adresse distante : %s", "Request ID: %s" : "ID de la demande : %s", + "Type: %s" : "Type : %s", "Code: %s" : "Code : %s", "Message: %s" : "Message : %s", "File: %s" : "Fichier : %s", "Line: %s" : "Ligne : %s", "Trace" : "Trace", - "Security Warning" : "Avertissement de sécurité", + "Security warning" : "Avertissement de sécurité", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Votre répertoire de données est certainement accessible depuis l'internet car le fichier .htaccess ne fonctionne pas.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pour les informations de configuration de votre serveur, veuillez lire la <a href=\"%s\" target=\"_blank\">documentation</a>.", "Create an <strong>admin account</strong>" : "Créer un <strong>compte administrateur</strong>", @@ -178,28 +192,33 @@ "Data folder" : "Répertoire des données", "Configure the database" : "Configurer la base de données", "Only %s is available." : "%s seulement est disponible.", + "Install and activate additional PHP modules to choose other database types." : "Installez et activez les modules PHP additionnels adéquats pour choisir d'autres types de base de données.", + "For more details check out the documentation." : "Consultez la documentation pour plus de détails.", "Database user" : "Utilisateur de la base de données", "Database password" : "Mot de passe de la base de données", "Database name" : "Nom de la base de données", "Database tablespace" : "Tablespace de la base de données", "Database host" : "Hôte de la base de données", - "Performance Warning" : "Avertissement de performance", + "Performance warning" : "Avertissement de performance", "SQLite will be used as database." : "SQLite sera utilisé comme gestionnaire de base de données.", "For larger installations we recommend to choose a different database backend." : "Pour des installations plus volumineuses, nous vous conseillons d'utiliser un autre gestionnaire de base de données.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particulier si vous utilisez le client de bureau pour synchroniser vos données : l'utilisation de SQLite est alors déconseillée.", "Finish setup" : "Terminer l'installation", "Finishing …" : "Finalisation …", + "Need help?" : "Besoin d'aide ?", + "See the documentation" : "Lire la documentation", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Cette application requiert JavaScript pour fonctionner correctement. Veuillez {linkstart}activer JavaScript{linkend} et recharger la page.", - "%s is available. Get more information on how to update." : "%s est disponible. Obtenez plus d'informations sur la façon de mettre à jour.", "Log out" : "Se déconnecter", "Search" : "Rechercher", "Server side authentication failed!" : "L'authentification sur le serveur a échoué !", "Please contact your administrator." : "Veuillez contacter votre administrateur.", + "An internal error occured." : "Une erreur interne est survenue.", + "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", "Forgot your password? Reset it!" : "Mot de passe oublié ? Réinitialisez-le !", "remember" : "se souvenir de moi", "Log in" : "Connexion", "Alternative Logins" : "Identifiants alternatifs", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Consultez-le !</a><br><br>", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjour,<br><br>Nous vous informons que %s a partagé <strong>%s</strong> avec vous.<br><a href=\"%s\">Cliquez ici pour y accéder !</a><br><br>", "This ownCloud instance is currently in single user mode." : "Cette instance de ownCloud est actuellement en mode utilisateur unique.", "This means only administrators can use the instance." : "Cela signifie que seuls les administrateurs peuvent utiliser l'instance.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Veuillez contacter votre administrateur système si ce message persiste ou apparaît de façon inattendue.", @@ -213,7 +232,7 @@ "The theme %s has been disabled." : "Le thème %s a été désactivé.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Veuillez vous assurer qu'une copie de sauvegarde de la base de données, du dossier de configuration (config) et du dossier de données (data) a été réalisée avant de commencer.", "Start update" : "Démarrer la mise à jour", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les dépassements de délai (timeouts) avec les installations de plus grande ampleur, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Afin d'éviter les timeouts avec les installations de volume conséquent, vous pouvez exécuter la commande suivante depuis le répertoire d'installation :", "This %s instance is currently in maintenance mode, which may take a while." : "Cette instance de %s est en cours de maintenance, cela peut prendre du temps.", "This page will refresh itself when the %s instance is available again." : "Cette page se rafraîchira d'elle-même lorsque l'instance %s sera à nouveau disponible." },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/core/l10n/gl.js b/core/l10n/gl.js index bb302237824..0d37512f4f5 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Non é posíbel enviar correo aos usuarios seguintes: %s", "Turned on maintenance mode" : "Modo de mantemento activado", "Turned off maintenance mode" : "Modo de mantemento desactivado", + "Maintenance mode is kept active" : "Mantense activo o modo de mantemento", "Updated database" : "Base de datos actualizada", "Checked database schema update" : "Comprobada a actualización do esquema da base de datos", "Checked database schema update for apps" : "Comprobada a actualización do esquema da base de datos para aplicacións", @@ -11,7 +12,7 @@ OC.L10N.register( "Repair warning: " : "Aviso de arranxo:", "Repair error: " : "Arranxar o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes aplicacións incompatíbeis foron desactivadas: %s", - "Following 3rd party apps have been disabled: %s" : "As seguintes aplicacións de terceiros foron desactivadas: %s", + "Following apps have been disabled: %s" : "As seguintes aplicacións foron desactivadas: %s", "Invalid file provided" : "O ficheiro fornecido non é válido", "No image or file provided" : "Non forneceu ningunha imaxe ou ficheiro", "Unknown filetype" : "Tipo de ficheiro descoñecido", @@ -41,9 +42,9 @@ OC.L10N.register( "December" : "decembro", "Settings" : "Axustes", "Saving..." : "Gardando...", - "Couldn't send reset email. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Póñase en contacto co administrador.", + "Couldn't send reset email. Please contact your administrator." : "Non foi posíbel enviar o correo do restabelecemento. Póñase en contacto co administrador.", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere continuar?", "I know what I'm doing" : "Sei o estou a facer", "Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.", "No" : "Non", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.", "Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade, recomendámoslle que axuste esta opción.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "A cabeceira HTTP «Strict-Transport-Security» non está configurado para menos de «2,678,400» segundos . Isto é un posíbel risco para a seguridade, recomendámoslle que axuste esta opción.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a este sitio a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos <a href=\"{docUrl}\">consellos de seguridade</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está accedendo a este sitio a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS, tal e como se descrine nos<a href=\"{docUrl}\">consellos de seguridade</a>.", "Shared" : "Compartido", "Shared with {recipients}" : "Compartido con {recipients}", "Share" : "Compartir", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Produciuse un erro ao cambiar os permisos", "Shared with you and the group {group} by {owner}" : "Compartido con vostede e co grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con vostede por {owner}", - "Share with user or group …" : "Compartir cun usuario ou grupo ...", + "Share with users or groups …" : "Compartir con usuarios ou grupos ...", + "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con outra xente ou con outros ownClouds empregando a sintaxe «nomeusuario@exemplo.com/ouwncloud»", "Share link" : "Ligazón para compartir", "The public link will expire no later than {days} days after it is created" : "A ligazón pública caducará, a máis tardar, {days} días após a súa creación", "Link" : "Ligazón", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Definir a data de caducidade", "Expiration" : "Caducidade", "Expiration date" : "Data de caducidade", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", "Adding user..." : "Engadindo usuario...", "group" : "grupo", "remote" : "remoto", @@ -130,20 +136,22 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Ola {name}, o tempo é {weather}", "Hello {name}" : "Ola {name}", "_download %n file_::_download %n files_" : ["descargar %n ficheiro","descargar %n ficheiros"], + "{version} is available. Get more information on how to update." : "{version} está dispoñíbel. Obteña máis información sobre como actualizar.", "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a versión {version}, isto pode levar un anaco.", "Please reload the page." : "Volva cargar a páxina.", "The update was unsuccessful. " : "Fracasou a actualización.", + "The update was successful. There were warnings." : "A actualización realizouse correctamente. Houbo algún aviso.", "The update was successful. Redirecting you to ownCloud now." : "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud.", "Couldn't reset password because the token is invalid" : "No, foi posíbel restabelecer o contrasinal, a marca non é correcta", - "Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o coreo do restablecemento. Asegúrese de que o nome de usuario é o correcto.", - "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.", + "Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o correo do restabelecemento. Asegúrese de que o nome de usuario é o correcto.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o correo do restabelecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.", "%s password reset" : "Restabelecer o contrasinal %s", "Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}", "New password" : "Novo contrasinal", "New Password" : "Novo contrasinal", "Reset password" : "Restabelecer o contrasinal", "Searching other places" : "Buscando noutros lugares", - "No search result in other places" : "Sen resultados na busca noutros lugares", + "No search results in other places" : "Sen resultados na busca noutros lugares", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado na busca noutros lugares","{count} resultados na busca noutros lugares"], "Personal" : "Persoal", "Users" : "Usuarios", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Detalles técnicos", "Remote Address: %s" : "Enderezo remoto: %s", "Request ID: %s" : "ID da petición: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensaxe: %s", "File: %s" : "Ficheiro: %s", "Line: %s" : "Liña: %s", "Trace" : "Traza", - "Security Warning" : "Aviso de seguranza", + "Security warning" : "Aviso de seguridade", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Cartafol de datos", "Configure the database" : "Configurar a base de datos", "Only %s is available." : "Só está dispoñíbel %s.", + "Install and activate additional PHP modules to choose other database types." : "Instale e active os módulos de PHP adicionais para seleccionar outros tipos de bases de datos.", + "For more details check out the documentation." : "Para obter máis detalles revise a documentación.", "Database user" : "Usuario da base de datos", "Database password" : "Contrasinal da base de datos", "Database name" : "Nome da base de datos", "Database tablespace" : "Táboa de espazos da base de datos", "Database host" : "Servidor da base de datos", - "Performance Warning" : "Aviso de rendemento", + "Performance warning" : "Aviso de rendemento", "SQLite will be used as database." : "Utilizarase SQLite como base de datos", "For larger installations we recommend to choose a different database backend." : "Para instalacións grandes, recomendámoslle que empregue unha infraestrutura de base de datos diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Concretamente, se emprega o cliente de escritorio para sincronización, desaconséllase o uso de SQLite.", "Finish setup" : "Rematar a configuración", "Finishing …" : "Rematando ...", + "Need help?" : "Precisa axuda?", + "See the documentation" : "Vexa a documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación require JavaScript para un correcto funcionamento. {linkstart}Active JavaScript{linkend} e volva cargar a páxina.", - "%s is available. Get more information on how to update." : "%s está dispoñíbel. Obteña máis información sobre como actualizar.", "Log out" : "Desconectar", "Search" : "Buscar", "Server side authentication failed!" : "A autenticación fracasou do lado do servidor!", "Please contact your administrator." : "Contacte co administrador.", + "An internal error occured." : "Produciuse un erro interno.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", "Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!", "remember" : "lembrar", "Log in" : "Conectar", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index b2fd4a3585a..b32d636ecd2 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "Non é posíbel enviar correo aos usuarios seguintes: %s", "Turned on maintenance mode" : "Modo de mantemento activado", "Turned off maintenance mode" : "Modo de mantemento desactivado", + "Maintenance mode is kept active" : "Mantense activo o modo de mantemento", "Updated database" : "Base de datos actualizada", "Checked database schema update" : "Comprobada a actualización do esquema da base de datos", "Checked database schema update for apps" : "Comprobada a actualización do esquema da base de datos para aplicacións", @@ -9,7 +10,7 @@ "Repair warning: " : "Aviso de arranxo:", "Repair error: " : "Arranxar o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes aplicacións incompatíbeis foron desactivadas: %s", - "Following 3rd party apps have been disabled: %s" : "As seguintes aplicacións de terceiros foron desactivadas: %s", + "Following apps have been disabled: %s" : "As seguintes aplicacións foron desactivadas: %s", "Invalid file provided" : "O ficheiro fornecido non é válido", "No image or file provided" : "Non forneceu ningunha imaxe ou ficheiro", "Unknown filetype" : "Tipo de ficheiro descoñecido", @@ -39,9 +40,9 @@ "December" : "decembro", "Settings" : "Axustes", "Saving..." : "Gardando...", - "Couldn't send reset email. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Póñase en contacto co administrador.", + "Couldn't send reset email. Please contact your administrator." : "Non foi posíbel enviar o correo do restabelecemento. Póñase en contacto co administrador.", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "A ligazón para restabelecer o seu contrasinal foi enviada ao seu correo. Se non a recibe nun prazo razoábel de tempo, vexa o seu cartafol de correo lixo. <br> Se non está ali pregúntelle ao administrador local.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere?", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Os seus ficheiros están cifrados. Se non activou a chave de recuperación, non haberá maneira de recuperar os datos após o restabelecemento do contrasinal. <br />Se non está seguro de que facer, póñase en contacto co administrador antes de continuar. <br /> Confirma que quere continuar?", "I know what I'm doing" : "Sei o estou a facer", "Password can not be changed. Please contact your administrator." : "Non é posíbel cambiar o contrasinal. Póñase en contacto co administrador.", "No" : "Non", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O servidor aínda non está configurado correctamente para permitir a sincronización de ficheiros, semella que a interface WebDAV non está a funcionar.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor non ten conexión activa a Internet. Isto significa que algunhas características como a montaxe do almacenamento externo, as notificacións sobre actualizacións ou a instalación de engadidos de terceiros non funcionarán. Así mesmo, o acceso remoto a ficheiros e enviar correos de notificación poderían non funcionar. Suxerímoslle que active a conexión a Internet para este servidor se quere ter todos estes servizos.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O directorio de datos e os seus ficheiros probabelmente son accesíbeis desde a Internet. O ficheiro .htaccess non funciona. Recomendámoslle que configure o seu servidor web de xeito que o directorio de datos non sexa accesíbel ou que mova o directorio de datos fora do directorio root do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non foi configurada a memoria cache. Para mellorar o rendemento configure unha «memcache», se está dispoñíbel. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non é lexíbel por PHP xa que esta absolutamente desaconsellado por razóns de seguridade. Pode atopar máis información na nosa <a href=\"{docLink}\">documentación</a>.", "Error occurred while checking server setup" : "Aconteceu un erro mentras se comprobaba a configuración do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade, recomendámoslle que axuste esta opción.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "A cabeceira HTTP «Strict-Transport-Security» non está configurado para menos de «2,678,400» segundos . Isto é un posíbel risco para a seguridade, recomendámoslle que axuste esta opción.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está accedendo a este sitio a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "A cabeceira HTTP «{header}» non está configurada como igual a «{expected}». Isto é un posíbel risco para a seguridade ou a intimidade, recomendámoslle que axuste esta opción.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "A cabeceira HTTP «Strict-Transport-Security» non está configurada para menos de «{seconds}» segundos . Para mellorar a seguridade, recomendámoslle que active o uso de HTTPS, tal e como se describe nos <a href=\"{docUrl}\">consellos de seguridade</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Está accedendo a este sitio a través de HTTP. Suxerímoslle que configure o seu servidor para requirir, no seu canto, o uso de HTTPS, tal e como se descrine nos<a href=\"{docUrl}\">consellos de seguridade</a>.", "Shared" : "Compartido", "Shared with {recipients}" : "Compartido con {recipients}", "Share" : "Compartir", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Produciuse un erro ao cambiar os permisos", "Shared with you and the group {group} by {owner}" : "Compartido con vostede e co grupo {group} por {owner}", "Shared with you by {owner}" : "Compartido con vostede por {owner}", - "Share with user or group …" : "Compartir cun usuario ou grupo ...", + "Share with users or groups …" : "Compartir con usuarios ou grupos ...", + "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Comparta con outra xente ou con outros ownClouds empregando a sintaxe «nomeusuario@exemplo.com/ouwncloud»", "Share link" : "Ligazón para compartir", "The public link will expire no later than {days} days after it is created" : "A ligazón pública caducará, a máis tardar, {days} días após a súa creación", "Link" : "Ligazón", @@ -96,6 +101,7 @@ "Set expiration date" : "Definir a data de caducidade", "Expiration" : "Caducidade", "Expiration date" : "Data de caducidade", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", "Adding user..." : "Engadindo usuario...", "group" : "grupo", "remote" : "remoto", @@ -128,20 +134,22 @@ "Hello {name}, the weather is {weather}" : "Ola {name}, o tempo é {weather}", "Hello {name}" : "Ola {name}", "_download %n file_::_download %n files_" : ["descargar %n ficheiro","descargar %n ficheiros"], + "{version} is available. Get more information on how to update." : "{version} está dispoñíbel. Obteña máis información sobre como actualizar.", "Updating {productName} to version {version}, this may take a while." : "Actualizando {productName} a versión {version}, isto pode levar un anaco.", "Please reload the page." : "Volva cargar a páxina.", "The update was unsuccessful. " : "Fracasou a actualización.", + "The update was successful. There were warnings." : "A actualización realizouse correctamente. Houbo algún aviso.", "The update was successful. Redirecting you to ownCloud now." : "A actualización realizouse correctamente. Redirixíndoo agora á ownCloud.", "Couldn't reset password because the token is invalid" : "No, foi posíbel restabelecer o contrasinal, a marca non é correcta", - "Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o coreo do restablecemento. Asegúrese de que o nome de usuario é o correcto.", - "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o coreo do restablecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.", + "Couldn't send reset email. Please make sure your username is correct." : "Non foi posíbel enviar o correo do restabelecemento. Asegúrese de que o nome de usuario é o correcto.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Non foi posíbel enviar o correo do restabelecemento. Semella que este correo non corresponde con este nome de usuario. Póñase en contacto co administrador.", "%s password reset" : "Restabelecer o contrasinal %s", "Use the following link to reset your password: {link}" : "Usa a seguinte ligazón para restabelecer o contrasinal: {link}", "New password" : "Novo contrasinal", "New Password" : "Novo contrasinal", "Reset password" : "Restabelecer o contrasinal", "Searching other places" : "Buscando noutros lugares", - "No search result in other places" : "Sen resultados na busca noutros lugares", + "No search results in other places" : "Sen resultados na busca noutros lugares", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado na busca noutros lugares","{count} resultados na busca noutros lugares"], "Personal" : "Persoal", "Users" : "Usuarios", @@ -169,12 +177,13 @@ "Technical details" : "Detalles técnicos", "Remote Address: %s" : "Enderezo remoto: %s", "Request ID: %s" : "ID da petición: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensaxe: %s", "File: %s" : "Ficheiro: %s", "Line: %s" : "Liña: %s", "Trace" : "Traza", - "Security Warning" : "Aviso de seguranza", + "Security warning" : "Aviso de seguridade", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "O seu directorio de datos e os ficheiros probabelmente sexan accesíbeis desde a Internet xa que o ficheiro .htaccess non está a traballar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter información sobre como como configurar axeitadamente o seu servidor, vexa a <a href=\"%s\" target=\"_blank\">documentación</a>.", "Create an <strong>admin account</strong>" : "Crear unha <strong>contra de administrador</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Cartafol de datos", "Configure the database" : "Configurar a base de datos", "Only %s is available." : "Só está dispoñíbel %s.", + "Install and activate additional PHP modules to choose other database types." : "Instale e active os módulos de PHP adicionais para seleccionar outros tipos de bases de datos.", + "For more details check out the documentation." : "Para obter máis detalles revise a documentación.", "Database user" : "Usuario da base de datos", "Database password" : "Contrasinal da base de datos", "Database name" : "Nome da base de datos", "Database tablespace" : "Táboa de espazos da base de datos", "Database host" : "Servidor da base de datos", - "Performance Warning" : "Aviso de rendemento", + "Performance warning" : "Aviso de rendemento", "SQLite will be used as database." : "Utilizarase SQLite como base de datos", "For larger installations we recommend to choose a different database backend." : "Para instalacións grandes, recomendámoslle que empregue unha infraestrutura de base de datos diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Concretamente, se emprega o cliente de escritorio para sincronización, desaconséllase o uso de SQLite.", "Finish setup" : "Rematar a configuración", "Finishing …" : "Rematando ...", + "Need help?" : "Precisa axuda?", + "See the documentation" : "Vexa a documentación", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicación require JavaScript para un correcto funcionamento. {linkstart}Active JavaScript{linkend} e volva cargar a páxina.", - "%s is available. Get more information on how to update." : "%s está dispoñíbel. Obteña máis información sobre como actualizar.", "Log out" : "Desconectar", "Search" : "Buscar", "Server side authentication failed!" : "A autenticación fracasou do lado do servidor!", "Please contact your administrator." : "Contacte co administrador.", + "An internal error occured." : "Produciuse un erro interno.", + "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", "Forgot your password? Reset it!" : "Esqueceu o contrasinal? Restabelézao!", "remember" : "lembrar", "Log in" : "Conectar", diff --git a/core/l10n/he.js b/core/l10n/he.js index 3908a0e372e..e53e3f37b2f 100644 --- a/core/l10n/he.js +++ b/core/l10n/he.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "כן", "Choose" : "בחירה", "Ok" : "בסדר", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "New Files" : "קבצים חדשים", "Cancel" : "ביטול", "Shared" : "שותף", @@ -62,19 +61,16 @@ OC.L10N.register( "The object type is not specified." : "סוג הפריט לא צוין.", "Delete" : "מחיקה", "Add" : "הוספה", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.", "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}", "New password" : "ססמה חדשה", "Reset password" : "איפוס ססמה", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "אישי", "Users" : "משתמשים", "Apps" : "יישומים", "Admin" : "מנהל", "Help" : "עזרה", "Access forbidden" : "הגישה נחסמה", - "Security Warning" : "אזהרת אבטחה", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.", "Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>", "Username" : "שם משתמש", @@ -86,7 +82,6 @@ OC.L10N.register( "Database tablespace" : "מרחב הכתובות של מסד הנתונים", "Database host" : "שרת בסיס נתונים", "Finish setup" : "סיום התקנה", - "%s is available. Get more information on how to update." : "%s זמינה להורדה. ניתן ללחוץ כדי לקבל מידע נוסף כיצד לעדכן.", "Log out" : "התנתקות", "Search" : "חיפוש", "remember" : "שמירת הססמה", diff --git a/core/l10n/he.json b/core/l10n/he.json index 988e193b015..6f6686240e3 100644 --- a/core/l10n/he.json +++ b/core/l10n/he.json @@ -24,7 +24,6 @@ "Yes" : "כן", "Choose" : "בחירה", "Ok" : "בסדר", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "New Files" : "קבצים חדשים", "Cancel" : "ביטול", "Shared" : "שותף", @@ -60,19 +59,16 @@ "The object type is not specified." : "סוג הפריט לא צוין.", "Delete" : "מחיקה", "Add" : "הוספה", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "תהליך העדכון הסתיים בהצלחה. עכשיו מנתב אותך אל ownCloud.", "Use the following link to reset your password: {link}" : "יש להשתמש בקישור הבא כדי לאפס את הססמה שלך: {link}", "New password" : "ססמה חדשה", "Reset password" : "איפוס ססמה", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "אישי", "Users" : "משתמשים", "Apps" : "יישומים", "Admin" : "מנהל", "Help" : "עזרה", "Access forbidden" : "הגישה נחסמה", - "Security Warning" : "אזהרת אבטחה", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "תיקיית וקבצי המידע שלך כנראה נגישים מהאינטרנט מכיוון שקובץ ה.htaccess לא עובד.", "Create an <strong>admin account</strong>" : "יצירת <strong>חשבון מנהל</strong>", "Username" : "שם משתמש", @@ -84,7 +80,6 @@ "Database tablespace" : "מרחב הכתובות של מסד הנתונים", "Database host" : "שרת בסיס נתונים", "Finish setup" : "סיום התקנה", - "%s is available. Get more information on how to update." : "%s זמינה להורדה. ניתן ללחוץ כדי לקבל מידע נוסף כיצד לעדכן.", "Log out" : "התנתקות", "Search" : "חיפוש", "remember" : "שמירת הססמה", diff --git a/core/l10n/hi.js b/core/l10n/hi.js index bc4eba4e83e..4edc0dbeb35 100644 --- a/core/l10n/hi.js +++ b/core/l10n/hi.js @@ -22,7 +22,6 @@ OC.L10N.register( "December" : "दिसम्बर", "Settings" : "सेटिंग्स", "Saving..." : "सहेज रहे हैं...", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "रद्द करें ", "Share" : "साझा करें", "Error" : "त्रुटि", @@ -32,15 +31,12 @@ OC.L10N.register( "Email sent" : "ईमेल भेज दिया गया है ", "Warning" : "चेतावनी ", "Add" : "डाले", - "_download %n file_::_download %n files_" : ["",""], "Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}", "New password" : "नया पासवर्ड", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "यक्तिगत", "Users" : "उपयोगकर्ता", "Apps" : "Apps", "Help" : "सहयोग", - "Security Warning" : "सुरक्षा चेतावनी ", "Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ", "Username" : "प्रयोक्ता का नाम", "Data folder" : "डाटा फोल्डर", diff --git a/core/l10n/hi.json b/core/l10n/hi.json index 80926b9b190..cf6b6bb4773 100644 --- a/core/l10n/hi.json +++ b/core/l10n/hi.json @@ -20,7 +20,6 @@ "December" : "दिसम्बर", "Settings" : "सेटिंग्स", "Saving..." : "सहेज रहे हैं...", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "रद्द करें ", "Share" : "साझा करें", "Error" : "त्रुटि", @@ -30,15 +29,12 @@ "Email sent" : "ईमेल भेज दिया गया है ", "Warning" : "चेतावनी ", "Add" : "डाले", - "_download %n file_::_download %n files_" : ["",""], "Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}", "New password" : "नया पासवर्ड", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "यक्तिगत", "Users" : "उपयोगकर्ता", "Apps" : "Apps", "Help" : "सहयोग", - "Security Warning" : "सुरक्षा चेतावनी ", "Create an <strong>admin account</strong>" : "व्यवस्थापक खाता बनाएँ", "Username" : "प्रयोक्ता का नाम", "Data folder" : "डाटा फोल्डर", diff --git a/core/l10n/hr.js b/core/l10n/hr.js index d721beab0a2..487a85ae1d8 100644 --- a/core/l10n/hr.js +++ b/core/l10n/hr.js @@ -72,7 +72,6 @@ OC.L10N.register( "Error while changing permissions" : "POgreška pri mijenjanju dozvola", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you by {owner}" : "S vama podijelio {owner}", - "Share with user or group …" : "Podijelite s korisnikom ili grupom ...", "Share link" : "Podijelite vezu", "The public link will expire no later than {days} days after it is created" : " Javna veza ističe najkasnije {days} dana nakon što je kreirana", "Link" : "Poveznica", @@ -130,7 +129,6 @@ OC.L10N.register( "New Password" : "Nova lozinka", "Reset password" : "Resetirajte lozinku", "Searching other places" : "Pretraživanje drugih lokacija", - "No search result in other places" : "Nema rezultata na drugim lokacijama", "_{count} search result in other places_::_{count} search results in other places_" : ["Pronađen {count} rezultat na drugim lokacijama","Pronađeno {count} rezultata na drugim lokacijama","Pronađeno {count} rezultata na drugim lokacijama"], "Personal" : "Osobno", "Users" : "Korisnici", @@ -163,7 +161,6 @@ OC.L10N.register( "File: %s" : "Datoteka: %s", "Line: %s" : "Red: %s", "Trace" : "Prati", - "Security Warning" : "Sigurnosno upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>", @@ -179,7 +176,6 @@ OC.L10N.register( "Database host" : "Glavno računalo baze podataka", "Finish setup" : "Završite postavljanje", "Finishing …" : "Završavanje...", - "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.", "Log out" : "Odjavite se", "Search" : "pretraži", "Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!", diff --git a/core/l10n/hr.json b/core/l10n/hr.json index 5bef1ac7e0a..2f9877df2c0 100644 --- a/core/l10n/hr.json +++ b/core/l10n/hr.json @@ -70,7 +70,6 @@ "Error while changing permissions" : "POgreška pri mijenjanju dozvola", "Shared with you and the group {group} by {owner}" : "Dijeljeno s vama i grupom {group} vlasnika {owner}", "Shared with you by {owner}" : "S vama podijelio {owner}", - "Share with user or group …" : "Podijelite s korisnikom ili grupom ...", "Share link" : "Podijelite vezu", "The public link will expire no later than {days} days after it is created" : " Javna veza ističe najkasnije {days} dana nakon što je kreirana", "Link" : "Poveznica", @@ -128,7 +127,6 @@ "New Password" : "Nova lozinka", "Reset password" : "Resetirajte lozinku", "Searching other places" : "Pretraživanje drugih lokacija", - "No search result in other places" : "Nema rezultata na drugim lokacijama", "_{count} search result in other places_::_{count} search results in other places_" : ["Pronađen {count} rezultat na drugim lokacijama","Pronađeno {count} rezultata na drugim lokacijama","Pronađeno {count} rezultata na drugim lokacijama"], "Personal" : "Osobno", "Users" : "Korisnici", @@ -161,7 +159,6 @@ "File: %s" : "Datoteka: %s", "Line: %s" : "Red: %s", "Trace" : "Prati", - "Security Warning" : "Sigurnosno upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vašem podatkovnom direktoriju i datotekama vjerojatno se može pristupiti s interneta jer .htaccess datoteka ne radi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informaciju kako ispravno konfigurirati vaš poslužitelj, molimo vidite <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Kreirajte <strong>admin račun</strong>", @@ -177,7 +174,6 @@ "Database host" : "Glavno računalo baze podataka", "Finish setup" : "Završite postavljanje", "Finishing …" : "Završavanje...", - "%s is available. Get more information on how to update." : "%s je dostupan. Saznajte više informacija o tome kako ažurirati.", "Log out" : "Odjavite se", "Search" : "pretraži", "Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!", diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index 359a386cc62..0371129646f 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -8,6 +8,9 @@ OC.L10N.register( "Checked database schema update" : "Az adatbázis séma frissítését ellenőriztük", "Checked database schema update for apps" : "Az adatbázis séma frissítését ellenőriztük az alkalmazásokra vontakozóan", "Updated \"%s\" to %s" : "Frissítettük \"%s\"-t erre: %s", + "Repair warning: " : "Javítás figyelmeztetés:", + "Repair error: " : "Javítás hiba:", + "Invalid file provided" : "Érvénytelen fájl van megadva", "No image or file provided" : "Nincs kép vagy fájl megadva", "Unknown filetype" : "Ismeretlen fájltípus", "Invalid image" : "Hibás kép", @@ -72,7 +75,6 @@ OC.L10N.register( "Error while changing permissions" : "Nem sikerült módosítani a jogosultságokat", "Shared with you and the group {group} by {owner}" : "Megosztotta Önnel és a(z) {group} csoporttal: {owner}", "Shared with you by {owner}" : "Megosztotta Önnel: {owner}", - "Share with user or group …" : "Megosztani egy felhasználóval vagy csoporttal ...", "Share link" : "Megosztás hivatkozással", "The public link will expire no later than {days} days after it is created" : "A nyilvános link érvényessége legkorábban {days} nappal a létrehozása után jár csak le", "Link" : "Link", @@ -119,7 +121,6 @@ OC.L10N.register( "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"], "Updating {productName} to version {version}, this may take a while." : " {productName} frissítése zajlik erre a verzióra: {version}. Ez eltarthat egy darabig.", "Please reload the page." : "Kérjük frissítse az oldalt!", - "The update was unsuccessful. " : "A frissítés sikerült.", "The update was successful. Redirecting you to ownCloud now." : "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatáshoz.", "Couldn't reset password because the token is invalid" : "Nem lehet a jelszót törölni, mert a token érvénytelen.", "Couldn't send reset email. Please make sure your username is correct." : "Visszaállítási e-mail nem küldhető. Kérjük, lépjen kapcsolatba a rendszergazdával. ", @@ -130,7 +131,6 @@ OC.L10N.register( "New Password" : "Új jelszó", "Reset password" : "Jelszó-visszaállítás", "Searching other places" : "Keresés más helyeken", - "No search result in other places" : "Nem található keresési eredmény más helyeken", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} keresési eredmény más helyeken","{count} keresési eredmény más helyeken"], "Personal" : "Személyes", "Users" : "Felhasználók", @@ -163,7 +163,6 @@ OC.L10N.register( "File: %s" : "Fájl: %s", "Line: %s" : "Sor: %s", "Trace" : "Lekövetés", - "Security Warning" : "Biztonsági figyelmeztetés", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.", "Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása", @@ -179,7 +178,6 @@ OC.L10N.register( "Database host" : "Adatbázis szerver", "Finish setup" : "A beállítások befejezése", "Finishing …" : "Befejezés ...", - "%s is available. Get more information on how to update." : "%s rendelkezésre áll. További információ a frissítéshez.", "Log out" : "Kilépés", "Search" : "Keresés", "Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!", diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index f348b91a701..1c571b93091 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -6,6 +6,9 @@ "Checked database schema update" : "Az adatbázis séma frissítését ellenőriztük", "Checked database schema update for apps" : "Az adatbázis séma frissítését ellenőriztük az alkalmazásokra vontakozóan", "Updated \"%s\" to %s" : "Frissítettük \"%s\"-t erre: %s", + "Repair warning: " : "Javítás figyelmeztetés:", + "Repair error: " : "Javítás hiba:", + "Invalid file provided" : "Érvénytelen fájl van megadva", "No image or file provided" : "Nincs kép vagy fájl megadva", "Unknown filetype" : "Ismeretlen fájltípus", "Invalid image" : "Hibás kép", @@ -70,7 +73,6 @@ "Error while changing permissions" : "Nem sikerült módosítani a jogosultságokat", "Shared with you and the group {group} by {owner}" : "Megosztotta Önnel és a(z) {group} csoporttal: {owner}", "Shared with you by {owner}" : "Megosztotta Önnel: {owner}", - "Share with user or group …" : "Megosztani egy felhasználóval vagy csoporttal ...", "Share link" : "Megosztás hivatkozással", "The public link will expire no later than {days} days after it is created" : "A nyilvános link érvényessége legkorábban {days} nappal a létrehozása után jár csak le", "Link" : "Link", @@ -117,7 +119,6 @@ "_download %n file_::_download %n files_" : ["%n fájl letöltése","%n fájl letöltése"], "Updating {productName} to version {version}, this may take a while." : " {productName} frissítése zajlik erre a verzióra: {version}. Ez eltarthat egy darabig.", "Please reload the page." : "Kérjük frissítse az oldalt!", - "The update was unsuccessful. " : "A frissítés sikerült.", "The update was successful. Redirecting you to ownCloud now." : "A frissítés sikeres volt. Visszairányítjuk az ownCloud szolgáltatáshoz.", "Couldn't reset password because the token is invalid" : "Nem lehet a jelszót törölni, mert a token érvénytelen.", "Couldn't send reset email. Please make sure your username is correct." : "Visszaállítási e-mail nem küldhető. Kérjük, lépjen kapcsolatba a rendszergazdával. ", @@ -128,7 +129,6 @@ "New Password" : "Új jelszó", "Reset password" : "Jelszó-visszaállítás", "Searching other places" : "Keresés más helyeken", - "No search result in other places" : "Nem található keresési eredmény más helyeken", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} keresési eredmény más helyeken","{count} keresési eredmény más helyeken"], "Personal" : "Személyes", "Users" : "Felhasználók", @@ -161,7 +161,6 @@ "File: %s" : "Fájl: %s", "Line: %s" : "Sor: %s", "Trace" : "Lekövetés", - "Security Warning" : "Biztonsági figyelmeztetés", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Az adatkönyvtár és a benne levő állományok valószínűleg közvetlenül is elérhetők az internetről, mert a .htaccess állomány nem érvényesül.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "A kiszolgáló megfelelő beállításához kérjük olvassa el a <a href=\"%sl\" target=\"_blank\">dokumentációt</a>.", "Create an <strong>admin account</strong>" : "<strong>Rendszergazdai belépés</strong> létrehozása", @@ -177,7 +176,6 @@ "Database host" : "Adatbázis szerver", "Finish setup" : "A beállítások befejezése", "Finishing …" : "Befejezés ...", - "%s is available. Get more information on how to update." : "%s rendelkezésre áll. További információ a frissítéshez.", "Log out" : "Kilépés", "Search" : "Keresés", "Server side authentication failed!" : "A szerveroldali hitelesítés sikertelen!", diff --git a/core/l10n/hy.js b/core/l10n/hy.js index fc37a9be206..26250b0c55a 100644 --- a/core/l10n/hy.js +++ b/core/l10n/hy.js @@ -20,9 +20,9 @@ OC.L10N.register( "October" : "Հոկտեմբեր", "November" : "Նոյեմբեր", "December" : "Դեկտեմբեր", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "group" : "խումբ", "Delete" : "Ջնջել", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Add" : "Ավելացնել", + "Personal" : "Անձնական" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/hy.json b/core/l10n/hy.json index 342ea522cf2..76a0da8ccdc 100644 --- a/core/l10n/hy.json +++ b/core/l10n/hy.json @@ -18,9 +18,9 @@ "October" : "Հոկտեմբեր", "November" : "Նոյեմբեր", "December" : "Դեկտեմբեր", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "group" : "խումբ", "Delete" : "Ջնջել", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Add" : "Ավելացնել", + "Personal" : "Անձնական" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/ia.js b/core/l10n/ia.js index 8362076165a..fdadf0c984e 100644 --- a/core/l10n/ia.js +++ b/core/l10n/ia.js @@ -63,7 +63,6 @@ OC.L10N.register( "Error while changing permissions" : "Error quando on modificava permissiones", "Shared with you and the group {group} by {owner}" : "Compartite con te e le gruppo {group} per {owner}", "Shared with you by {owner}" : "Compartite con te per {owner} ", - "Share with user or group …" : "Compartir con usator o gruppo ...", "Share link" : "Compartir ligamine", "Password protect" : "Protegite per contrasigno", "Password" : "Contrasigno", @@ -94,7 +93,6 @@ OC.L10N.register( "Delete" : "Deler", "Add" : "Adder", "Edit tags" : "Modifica etiquettas", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Pro favor recarga le pagina.", "The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.", "%s password reset" : "%s contrasigno re-fixate", @@ -102,7 +100,6 @@ OC.L10N.register( "New password" : "Nove contrasigno", "New Password" : "Nove contrasigno", "Reset password" : "Reinitialisar contrasigno", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usatores", "Apps" : "Applicationes", @@ -123,7 +120,6 @@ OC.L10N.register( "File: %s" : "File: %s", "Line: %s" : "Rango: %s", "Trace" : "Tracia", - "Security Warning" : "Aviso de securitate", "Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>", "Username" : "Nomine de usator", "Storage & database" : "Immagazinage & base de datos", diff --git a/core/l10n/ia.json b/core/l10n/ia.json index ab325860b19..f00f484482f 100644 --- a/core/l10n/ia.json +++ b/core/l10n/ia.json @@ -61,7 +61,6 @@ "Error while changing permissions" : "Error quando on modificava permissiones", "Shared with you and the group {group} by {owner}" : "Compartite con te e le gruppo {group} per {owner}", "Shared with you by {owner}" : "Compartite con te per {owner} ", - "Share with user or group …" : "Compartir con usator o gruppo ...", "Share link" : "Compartir ligamine", "Password protect" : "Protegite per contrasigno", "Password" : "Contrasigno", @@ -92,7 +91,6 @@ "Delete" : "Deler", "Add" : "Adder", "Edit tags" : "Modifica etiquettas", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "Pro favor recarga le pagina.", "The update was successful. Redirecting you to ownCloud now." : "Le actualisation terminava con successo. On redirige nunc a tu ownCloud.", "%s password reset" : "%s contrasigno re-fixate", @@ -100,7 +98,6 @@ "New password" : "Nove contrasigno", "New Password" : "Nove contrasigno", "Reset password" : "Reinitialisar contrasigno", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personal", "Users" : "Usatores", "Apps" : "Applicationes", @@ -121,7 +118,6 @@ "File: %s" : "File: %s", "Line: %s" : "Rango: %s", "Trace" : "Tracia", - "Security Warning" : "Aviso de securitate", "Create an <strong>admin account</strong>" : "Crear un <strong>conto de administration</strong>", "Username" : "Nomine de usator", "Storage & database" : "Immagazinage & base de datos", diff --git a/core/l10n/id.js b/core/l10n/id.js index 55d5668bbdd..b9ea68320af 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -4,15 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", + "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", "Updated database" : "Basis data terbaru", "Checked database schema update" : "Pembaruan skema basis data terperiksa", "Checked database schema update for apps" : "Pembaruan skema basis data terperiksa untuk aplikasi", "Updated \"%s\" to %s" : "Terbaru \"%s\" sampai %s", + "Repair warning: " : "Peringatan perbaikan:", + "Repair error: " : "Kesalahan perbaikan:", + "Following incompatible apps have been disabled: %s" : "Aplikasi tidak kompatibel berikut telah dinonaktifkan: %s", + "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", + "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", "Unknown filetype" : "Tipe berkas tidak dikenal", "Invalid image" : "Gambar tidak sah", "No temporary profile picture available, try again" : "Tidak ada gambar profil sementara yang tersedia, coba lagi", "No crop data provided" : "Tidak ada data krop tersedia", + "No valid crop data provided" : "Tidak ada data valid untuk dipangkas", + "Crop is not square" : "Pangkas ini tidak persegi", "Sunday" : "Minggu", "Monday" : "Senin", "Tuesday" : "Selasa", @@ -62,7 +70,15 @@ OC.L10N.register( "So-so password" : "Sandi lumayan", "Good password" : "Sandi baik", "Strong password" : "Sandi kuat", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">tips keamanan</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.", "Shared" : "Dibagikan", "Shared with {recipients}" : "Dibagikan dengan {recipients}", "Share" : "Bagikan", @@ -72,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Kesalahan saat mengubah izin", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", "Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}", - "Share with user or group …" : "Bagikan dengan pengguna atau grup ...", + "Share with users or groups …" : "Bagikan dengan pengguna atau grup ...", + "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud", "Share link" : "Bagikan tautan", "The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat", "Link" : "Tautan", @@ -85,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Atur tanggal kedaluwarsa", "Expiration" : "Kedaluwarsa", "Expiration date" : "Tanggal kedaluwarsa", + "An error occured. Please try again" : "Terjadi masalah. Mohon coba kembali", "Adding user..." : "Menambahkan pengguna...", "group" : "grup", "remote" : "remote", @@ -117,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Helo {name}, jepang {weather}", "Hello {name}" : "Helo {name}", "_download %n file_::_download %n files_" : ["unduh %n berkas"], + "{version} is available. Get more information on how to update." : "{version} tersedia. Dapatkan informasi lebih lanjut cara memperbaruinya.", "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini memerlukan waktu.", "Please reload the page." : "Silakan muat ulang halaman.", "The update was unsuccessful. " : "Pembaruan tidak berhasil.", + "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", "The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.", "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", @@ -130,7 +151,7 @@ OC.L10N.register( "New Password" : "Sandi Baru", "Reset password" : "Setel ulang sandi", "Searching other places" : "Mencari tempat lainnya", - "No search result in other places" : "Tidak ada hasil pencarian di tampat lainnya", + "No search results in other places" : "Tidak ada hasil pencarian di tempat lain", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} hasil pencarian di tempat lain"], "Personal" : "Pribadi", "Users" : "Pengguna", @@ -158,12 +179,13 @@ OC.L10N.register( "Technical details" : "Rincian teknis", "Remote Address: %s" : "Alamat remote: %s", "Request ID: %s" : "ID Permintaan: %s", + "Type: %s" : "Tipe: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Pesan: %s", "File: %s" : "Berkas: %s", "Line: %s" : "Baris: %s", "Trace" : "Jejak", - "Security Warning" : "Peringatan Keamanan", + "Security warning" : "Peringatan keamanan", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.", "Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>", @@ -172,18 +194,28 @@ OC.L10N.register( "Data folder" : "Folder data", "Configure the database" : "Konfigurasikan basis data", "Only %s is available." : "Hanya %s yang tersedia", + "Install and activate additional PHP modules to choose other database types." : "Pasang dan aktifkan modul PHP tambahan untuk memilih tipe basis data lainnya.", + "For more details check out the documentation." : "Untuk lebih rinci, periksa pada dokumentasi.", "Database user" : "Pengguna basis data", "Database password" : "Sandi basis data", "Database name" : "Nama basis data", "Database tablespace" : "Tablespace basis data", "Database host" : "Host basis data", + "Performance warning" : "Peringatan kinerja", + "SQLite will be used as database." : "SQLite akan digunakan sebagai basis data.", + "For larger installations we recommend to choose a different database backend." : "Untuk instalasi yang lebih besar, kami menyarankan untuk memilih backend basis data yang berbeda.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", "Finish setup" : "Selesaikan instalasi", "Finishing …" : "Menyelesaikan ...", - "%s is available. Get more information on how to update." : "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.", + "Need help?" : "Butuh bantuan?", + "See the documentation" : "Lihat dokumentasi", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.", "Log out" : "Keluar", "Search" : "Cari", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", + "An internal error occured." : "Terjadi kesalahan internal.", + "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", "Forgot your password? Reset it!" : "Lupa sandi Anda? Setel ulang!", "remember" : "selalu masuk", "Log in" : "Masuk", @@ -203,6 +235,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pastikan bahwa basis data, folder konfig, dan folder data telah dicadangkan sebelum melanjutkan.", "Start update" : "Jalankan pembaruan", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Untuk menghindari waktu habis dengan instalasi yang lebih besar, Anda bisa menjalankan perintah berikut dari direktori instalasi Anda:", + "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." }, "nplurals=1; plural=0;"); diff --git a/core/l10n/id.json b/core/l10n/id.json index 2c4a56581ad..0fa7b8134af 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -2,15 +2,23 @@ "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", + "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", "Updated database" : "Basis data terbaru", "Checked database schema update" : "Pembaruan skema basis data terperiksa", "Checked database schema update for apps" : "Pembaruan skema basis data terperiksa untuk aplikasi", "Updated \"%s\" to %s" : "Terbaru \"%s\" sampai %s", + "Repair warning: " : "Peringatan perbaikan:", + "Repair error: " : "Kesalahan perbaikan:", + "Following incompatible apps have been disabled: %s" : "Aplikasi tidak kompatibel berikut telah dinonaktifkan: %s", + "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", + "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", "Unknown filetype" : "Tipe berkas tidak dikenal", "Invalid image" : "Gambar tidak sah", "No temporary profile picture available, try again" : "Tidak ada gambar profil sementara yang tersedia, coba lagi", "No crop data provided" : "Tidak ada data krop tersedia", + "No valid crop data provided" : "Tidak ada data valid untuk dipangkas", + "Crop is not square" : "Pangkas ini tidak persegi", "Sunday" : "Minggu", "Monday" : "Senin", "Tuesday" : "Selasa", @@ -60,7 +68,15 @@ "So-so password" : "Sandi lumayan", "Good password" : "Sandi baik", "Strong password" : "Sandi kuat", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Server web Anda belum diatur dengan benar untuk mengizinkan sinkronisasi berkas karena antarmuka WebDAV nampaknya rusak.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Server ini tidak tersambung ke internet. Ini berarti beberapa fitur seperti me-mount penyimpanan eksternal, notifikasi pembaruan atau instalasi aplikasi pihak ketiga tidak akan bekerja. Mengakses berkas secara remote dan mengirim notifikasi email juga tidak bekerja. Kami menyarankan untuk mengaktifkan koneksi internet untuk server ini jika Anda ingin memiliki fitur ini.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Direktori data dan berkas Anda kemungkinan dapat diakses dari Internet. Berkas .htaccess tidak bekerja. Kami sangat menyarankan Anda untuk mengkonfigurasi server web agar direktori data tidak lagi dapat diakses atau pindahkan direktori data Anda di luar root dokumen server web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Tembolok memori tidak dikonfigurasi. Untuk meningkatkan kinerja, mohon konfigurasi memcache jika tersedia. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom tidak terbaca oleh PHP sangat disarankan untuk alasan keamanan. Informasi lebih lanjut dapat ditemukan di <a href=\"{docLink}\">dokumentasi</a> kami.", "Error occurred while checking server setup" : "Kesalahan tidak terduga saat memeriksa setelan server", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Header HTTP \"{header}\" tidak dikonfigurasi sama dengan \"{expected}\". Hal ini berpotensi pada resiko keamanan dan privasi. Kami sarankan untuk menyesuaikan pengaturan ini.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" tidak diatur kurang dari \"{seconds}\" detik. Untuk peningkatan keamanan, kami menyarankan untuk mengaktifkan HSTS seperti yang dijelaskan di <a href=\"{docUrl}\">tips keamanan</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Anda mengakses situs ini via HTTP. Kami sangat menyarankan Anda untuk mengatur server Anda menggunakan HTTPS yang dibahas di <a href=\"{docUrl}\">tips keamanan</a> kami.", "Shared" : "Dibagikan", "Shared with {recipients}" : "Dibagikan dengan {recipients}", "Share" : "Bagikan", @@ -70,7 +86,9 @@ "Error while changing permissions" : "Kesalahan saat mengubah izin", "Shared with you and the group {group} by {owner}" : "Dibagikan dengan anda dan grup {group} oleh {owner}", "Shared with you by {owner}" : "Dibagikan dengan anda oleh {owner}", - "Share with user or group …" : "Bagikan dengan pengguna atau grup ...", + "Share with users or groups …" : "Bagikan dengan pengguna atau grup ...", + "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Bagikan dengan orang lain di ownCloud menggunakan sintaks username@example.com/owncloud", "Share link" : "Bagikan tautan", "The public link will expire no later than {days} days after it is created" : "Tautan publik akan kadaluarsa tidak lebih dari {days} hari setelah ini dibuat", "Link" : "Tautan", @@ -83,6 +101,7 @@ "Set expiration date" : "Atur tanggal kedaluwarsa", "Expiration" : "Kedaluwarsa", "Expiration date" : "Tanggal kedaluwarsa", + "An error occured. Please try again" : "Terjadi masalah. Mohon coba kembali", "Adding user..." : "Menambahkan pengguna...", "group" : "grup", "remote" : "remote", @@ -115,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Helo {name}, jepang {weather}", "Hello {name}" : "Helo {name}", "_download %n file_::_download %n files_" : ["unduh %n berkas"], + "{version} is available. Get more information on how to update." : "{version} tersedia. Dapatkan informasi lebih lanjut cara memperbaruinya.", "Updating {productName} to version {version}, this may take a while." : "Memperbarui {productName} ke versi {version}, ini memerlukan waktu.", "Please reload the page." : "Silakan muat ulang halaman.", "The update was unsuccessful. " : "Pembaruan tidak berhasil.", + "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", "The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.", "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", @@ -128,7 +149,7 @@ "New Password" : "Sandi Baru", "Reset password" : "Setel ulang sandi", "Searching other places" : "Mencari tempat lainnya", - "No search result in other places" : "Tidak ada hasil pencarian di tampat lainnya", + "No search results in other places" : "Tidak ada hasil pencarian di tempat lain", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} hasil pencarian di tempat lain"], "Personal" : "Pribadi", "Users" : "Pengguna", @@ -156,12 +177,13 @@ "Technical details" : "Rincian teknis", "Remote Address: %s" : "Alamat remote: %s", "Request ID: %s" : "ID Permintaan: %s", + "Type: %s" : "Tipe: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Pesan: %s", "File: %s" : "Berkas: %s", "Line: %s" : "Baris: %s", "Trace" : "Jejak", - "Security Warning" : "Peringatan Keamanan", + "Security warning" : "Peringatan keamanan", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Kemungkinan direktori data dan berkas anda dapat diakses dari internet karena berkas .htaccess tidak berfungsi.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Untuk informasi cara mengkonfigurasi server anda dengan benar, silakan lihat <a href=\"%s\" target=\"_blank\">dokumentasi</a>.", "Create an <strong>admin account</strong>" : "Buat sebuah <strong>akun admin</strong>", @@ -170,18 +192,28 @@ "Data folder" : "Folder data", "Configure the database" : "Konfigurasikan basis data", "Only %s is available." : "Hanya %s yang tersedia", + "Install and activate additional PHP modules to choose other database types." : "Pasang dan aktifkan modul PHP tambahan untuk memilih tipe basis data lainnya.", + "For more details check out the documentation." : "Untuk lebih rinci, periksa pada dokumentasi.", "Database user" : "Pengguna basis data", "Database password" : "Sandi basis data", "Database name" : "Nama basis data", "Database tablespace" : "Tablespace basis data", "Database host" : "Host basis data", + "Performance warning" : "Peringatan kinerja", + "SQLite will be used as database." : "SQLite akan digunakan sebagai basis data.", + "For larger installations we recommend to choose a different database backend." : "Untuk instalasi yang lebih besar, kami menyarankan untuk memilih backend basis data yang berbeda.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Terutama saat menggunakan klien desktop untuk sinkronisasi berkas, penggunaan SQLite tidak disarankan.", "Finish setup" : "Selesaikan instalasi", "Finishing …" : "Menyelesaikan ...", - "%s is available. Get more information on how to update." : "%s tersedia. Dapatkan informasi lebih lanjut tentang cara memperbarui.", + "Need help?" : "Butuh bantuan?", + "See the documentation" : "Lihat dokumentasi", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aplikasi ini memerlukan JavaScript untuk dapat beroperasi dengan benar. Mohon {linkstart}aktifkan JavaScript{linkend} dan muat ulang halaman ini.", "Log out" : "Keluar", "Search" : "Cari", "Server side authentication failed!" : "Otentikasi dari sisi server gagal!", "Please contact your administrator." : "Silahkan hubungi administrator anda.", + "An internal error occured." : "Terjadi kesalahan internal.", + "Please try again or contact your administrator." : "Mohon coba lagi atau hubungi administrator Anda.", "Forgot your password? Reset it!" : "Lupa sandi Anda? Setel ulang!", "remember" : "selalu masuk", "Log in" : "Masuk", @@ -201,6 +233,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pastikan bahwa basis data, folder konfig, dan folder data telah dicadangkan sebelum melanjutkan.", "Start update" : "Jalankan pembaruan", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Untuk menghindari waktu habis dengan instalasi yang lebih besar, Anda bisa menjalankan perintah berikut dari direktori instalasi Anda:", + "This %s instance is currently in maintenance mode, which may take a while." : "Instansi %s ini sedang dalam modus pemeliharaan, mungkin memerlukan beberapa saat.", "This page will refresh itself when the %s instance is available again." : "Halaman ini akan disegarkan dengan sendiri saat instansi %s tersebut tersedia kembali." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/is.js b/core/l10n/is.js index 0764e72cdfe..6b99bff9c0e 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "Já", "Choose" : "Veldu", "Ok" : "Í lagi", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Hætta við", "Shared" : "Deilt", "Share" : "Deila", @@ -58,19 +57,16 @@ OC.L10N.register( "The object type is not specified." : "Tegund ekki tilgreind", "Delete" : "Eyða", "Add" : "Bæta við", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.", "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}", "New password" : "Nýtt lykilorð", "Reset password" : "Endursetja lykilorð", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Um mig", "Users" : "Notendur", "Apps" : "Forrit", "Admin" : "Stjórnun", "Help" : "Hjálp", "Access forbidden" : "Aðgangur bannaður", - "Security Warning" : "Öryggis aðvörun", "Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>", "Username" : "Notendanafn", "Data folder" : "Gagnamappa", @@ -81,9 +77,8 @@ OC.L10N.register( "Database tablespace" : "Töflusvæði gagnagrunns", "Database host" : "Netþjónn gagnagrunns", "Finish setup" : "Virkja uppsetningu", - "%s is available. Get more information on how to update." : "%s er til boða. Fáðu meiri upplýsingar um hvernig þú uppfærir.", "Log out" : "Útskrá", "remember" : "muna eftir mér", "Log in" : "<strong>Skrá inn</strong>" }, -"nplurals=2; plural=(n != 1);"); +"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);"); diff --git a/core/l10n/is.json b/core/l10n/is.json index 1789d6358bc..75958bafa55 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -24,7 +24,6 @@ "Yes" : "Já", "Choose" : "Veldu", "Ok" : "Í lagi", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "Hætta við", "Shared" : "Deilt", "Share" : "Deila", @@ -56,19 +55,16 @@ "The object type is not specified." : "Tegund ekki tilgreind", "Delete" : "Eyða", "Add" : "Bæta við", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Uppfærslan heppnaðist. Beini þér til ownCloud nú.", "Use the following link to reset your password: {link}" : "Notað eftirfarandi veftengil til að endursetja lykilorðið þitt: {link}", "New password" : "Nýtt lykilorð", "Reset password" : "Endursetja lykilorð", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Um mig", "Users" : "Notendur", "Apps" : "Forrit", "Admin" : "Stjórnun", "Help" : "Hjálp", "Access forbidden" : "Aðgangur bannaður", - "Security Warning" : "Öryggis aðvörun", "Create an <strong>admin account</strong>" : "Útbúa <strong>vefstjóra aðgang</strong>", "Username" : "Notendanafn", "Data folder" : "Gagnamappa", @@ -79,9 +75,8 @@ "Database tablespace" : "Töflusvæði gagnagrunns", "Database host" : "Netþjónn gagnagrunns", "Finish setup" : "Virkja uppsetningu", - "%s is available. Get more information on how to update." : "%s er til boða. Fáðu meiri upplýsingar um hvernig þú uppfærir.", "Log out" : "Útskrá", "remember" : "muna eftir mér", "Log in" : "<strong>Skrá inn</strong>" -},"pluralForm" :"nplurals=2; plural=(n != 1);" +},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 || n % 100 != 11);" }
\ No newline at end of file diff --git a/core/l10n/it.js b/core/l10n/it.js index 98fd6c449d3..0651fca572a 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Impossibile inviare email ai seguenti utenti: %s", "Turned on maintenance mode" : "Modalità di manutenzione attivata", "Turned off maintenance mode" : "Modalità di manutenzione disattivata", + "Maintenance mode is kept active" : "La modalità di manutenzione è lasciata attiva", "Updated database" : "Database aggiornato", "Checked database schema update" : "Verificato l'aggiornamento dello schema del database", "Checked database schema update for apps" : "Verificato l'aggiornamento dello schema del database per le applicazioni", @@ -11,7 +12,7 @@ OC.L10N.register( "Repair warning: " : "Avviso di riparazione", "Repair error: " : "Errore di riparazione:", "Following incompatible apps have been disabled: %s" : "Le seguenti applicazioni incompatibili sono state disabilitate: %s", - "Following 3rd party apps have been disabled: %s" : "Le seguenti applicazioni di terze parti sono state disabilitate: %s", + "Following apps have been disabled: %s" : "Le seguenti applicazioni sono state disabilitate: %s", "Invalid file provided" : "File non valido fornito", "No image or file provided" : "Non è stata fornita alcun immagine o file", "Unknown filetype" : "Tipo di file sconosciuto", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.", "Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza e noi consigliamo di modificare questa impostazione.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"2,678,400\" secondi. Questo è un potenziale rischio di sicurezza e noi consigliamo di modificare questa impostazione.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.", "Shared" : "Condiviso", "Shared with {recipients}" : "Condiviso con {recipients}", "Share" : "Condividi", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Errore durante la modifica dei permessi", "Shared with you and the group {group} by {owner}" : "Condiviso con te e con il gruppo {group} da {owner}", "Shared with you by {owner}" : "Condiviso con te da {owner}", - "Share with user or group …" : "Condividi con utente o gruppo ...", + "Share with users or groups …" : "Condividi con utenti o gruppi...", + "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Condividi con persone su altri ownCloud utilizzando la sintassi nomeutente@esempio.com/owncloud", "Share link" : "Condividi collegamento", "The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione", "Link" : "Collegamento", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Imposta data di scadenza", "Expiration" : "Scadenza", "Expiration date" : "Data di scadenza", + "An error occured. Please try again" : "Si è verificato un errore. Prova ancora", "Adding user..." : "Aggiunta utente in corso...", "group" : "gruppo", "remote" : "remota", @@ -130,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Ciao {name}, il tempo è {weather}", "Hello {name}" : "Ciao {name}", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], + "{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.", "Updating {productName} to version {version}, this may take a while." : "Aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. " : "L'aggiornamento non è riuscito.", + "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", "The update was successful. Redirecting you to ownCloud now." : "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud.", "Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido", "Couldn't send reset email. Please make sure your username is correct." : "Impossibile inviare l'email di reimpostazione. Assicurati che il nome utente sia corretto.", @@ -143,7 +151,7 @@ OC.L10N.register( "New Password" : "Nuova password", "Reset password" : "Ripristina la password", "Searching other places" : "Ricerca in altre posizioni", - "No search result in other places" : "Nessun risultato di ricerca in altre posizioni", + "No search results in other places" : "Nessun risultato di ricerca in altre posizioni", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} risultato di ricerca in altre posizioni","{count} risultati di ricerca in altre posizioni"], "Personal" : "Personale", "Users" : "Utenti", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Dettagli tecnici", "Remote Address: %s" : "Indirizzo remoto: %s", "Request ID: %s" : "ID richiesta: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Codice: %s", "Message: %s" : "Messaggio: %s", "File: %s" : "File: %s", "Line: %s" : "Riga: %s", "Trace" : "Traccia", - "Security Warning" : "Avviso di sicurezza", + "Security warning" : "Avviso di sicurezza", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Cartella dati", "Configure the database" : "Configura il database", "Only %s is available." : "È disponibile solo %s.", + "Install and activate additional PHP modules to choose other database types." : "Installa e attiva i moduli PHP aggiuntivi per scegliere gli altri tipi di database.", + "For more details check out the documentation." : "Per ulteriori dettagli, leggi la documentazione.", "Database user" : "Utente del database", "Database password" : "Password del database", "Database name" : "Nome del database", "Database tablespace" : "Spazio delle tabelle del database", "Database host" : "Host del database", - "Performance Warning" : "Avviso di prestazioni", + "Performance warning" : "Avviso di prestazioni", "SQLite will be used as database." : "SQLite sarà utilizzato come database.", "For larger installations we recommend to choose a different database backend." : "Per installazioni più grandi consigliamo di scegliere un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "Finish setup" : "Termina configurazione", "Finishing …" : "Completamento...", + "Need help?" : "Ti serve aiuto?", + "See the documentation" : "Leggi la documentazione", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.", - "%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.", "Log out" : "Esci", "Search" : "Cerca", "Server side authentication failed!" : "Autenticazione lato server non riuscita!", "Please contact your administrator." : "Contatta il tuo amministratore di sistema.", + "An internal error occured." : "Si è verificato un errore interno.", + "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.", "Forgot your password? Reset it!" : "Hai dimenticato la password? Reimpostala!", "remember" : "ricorda", "Log in" : "Accedi", diff --git a/core/l10n/it.json b/core/l10n/it.json index dff9b1cad10..e89883fbedf 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "Impossibile inviare email ai seguenti utenti: %s", "Turned on maintenance mode" : "Modalità di manutenzione attivata", "Turned off maintenance mode" : "Modalità di manutenzione disattivata", + "Maintenance mode is kept active" : "La modalità di manutenzione è lasciata attiva", "Updated database" : "Database aggiornato", "Checked database schema update" : "Verificato l'aggiornamento dello schema del database", "Checked database schema update for apps" : "Verificato l'aggiornamento dello schema del database per le applicazioni", @@ -9,7 +10,7 @@ "Repair warning: " : "Avviso di riparazione", "Repair error: " : "Errore di riparazione:", "Following incompatible apps have been disabled: %s" : "Le seguenti applicazioni incompatibili sono state disabilitate: %s", - "Following 3rd party apps have been disabled: %s" : "Le seguenti applicazioni di terze parti sono state disabilitate: %s", + "Following apps have been disabled: %s" : "Le seguenti applicazioni sono state disabilitate: %s", "Invalid file provided" : "File non valido fornito", "No image or file provided" : "Non è stata fornita alcun immagine o file", "Unknown filetype" : "Tipo di file sconosciuto", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Il tuo server web non è configurato correttamente per consentire la sincronizzazione dei file poiché l'interfaccia WebDAV sembra essere danneggiata.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Questo server non ha una connessione a Internet funzionante. Ciò significa che alcune delle funzionalità come il montaggio di archivi esterni, le notifiche degli aggiornamenti o l'installazione di applicazioni di terze parti non funzioneranno. L'accesso remoto ai file e l'invio di email di notifica potrebbero non funzionare. Ti suggeriamo di abilitare la connessione a Internet del server se desideri disporre di tutte le funzionalità.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La cartella dei dati e i tuoi file sono probabilmente accessibili da Internet.\nIl file .htaccess non funziona. Ti consigliamo vivamente di configurare il server web in modo che la cartella dei dati non sia più accessibile o di spostare la cartella fuori dalla radice del server web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Non è stata configurata alcuna cache di memoria. Per migliorare le prestazioni configura memcache, se disponibile. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom non è leggibile da PHP e ciò è vivamente sconsigliato per motivi di sicurezza. Ulteriori informazioni sono disponibili nella nostra <a href=\"{docLink}\">documentazione</a>.", "Error occurred while checking server setup" : "Si è verificato un errore durante il controllo della configurazione del server", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza e noi consigliamo di modificare questa impostazione.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"2,678,400\" secondi. Questo è un potenziale rischio di sicurezza e noi consigliamo di modificare questa impostazione.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'intestazione HTTP \"{header}\" non è configurata come \"{expected}\". \nQuesto è un potenziale rischio di sicurezza o di riservatezza dei dati e noi consigliamo di modificare questa impostazione.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "L'intestazione HTTP \"Strict-Transport-Security\" non è configurata con un valore almeno di \"{seconds}\" secondi. Per migliorare la sicurezza, consigliamo di abilitare HSTS come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Sei connesso a questo sito tramite HTTP. Ti suggeriamo vivamente di configurare il tuo server per richiedere invece l'utilizzo del protocollo HTTPS, come descritto nei nostri <a href=\"{docUrl}\">consigli sulla sicurezza</a>.", "Shared" : "Condiviso", "Shared with {recipients}" : "Condiviso con {recipients}", "Share" : "Condividi", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Errore durante la modifica dei permessi", "Shared with you and the group {group} by {owner}" : "Condiviso con te e con il gruppo {group} da {owner}", "Shared with you by {owner}" : "Condiviso con te da {owner}", - "Share with user or group …" : "Condividi con utente o gruppo ...", + "Share with users or groups …" : "Condividi con utenti o gruppi...", + "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Condividi con persone su altri ownCloud utilizzando la sintassi nomeutente@esempio.com/owncloud", "Share link" : "Condividi collegamento", "The public link will expire no later than {days} days after it is created" : "Il collegamento pubblico scadrà non più tardi di {days} giorni dopo la sua creazione", "Link" : "Collegamento", @@ -96,6 +101,7 @@ "Set expiration date" : "Imposta data di scadenza", "Expiration" : "Scadenza", "Expiration date" : "Data di scadenza", + "An error occured. Please try again" : "Si è verificato un errore. Prova ancora", "Adding user..." : "Aggiunta utente in corso...", "group" : "gruppo", "remote" : "remota", @@ -128,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Ciao {name}, il tempo è {weather}", "Hello {name}" : "Ciao {name}", "_download %n file_::_download %n files_" : ["scarica %n file","scarica %s file"], + "{version} is available. Get more information on how to update." : "{version} è disponibile. Ottieni ulteriori informazioni su come eseguire l'aggiornamento.", "Updating {productName} to version {version}, this may take a while." : "Aggiornamento di {productName} alla versione {version}, potrebbe richiedere del tempo.", "Please reload the page." : "Ricarica la pagina.", "The update was unsuccessful. " : "L'aggiornamento non è riuscito.", + "The update was successful. There were warnings." : "L'aggiornamento è stato effettuato correttamente. Ci sono degli avvisi.", "The update was successful. Redirecting you to ownCloud now." : "L'aggiornamento è stato effettuato correttamente. Stai per essere reindirizzato a ownCloud.", "Couldn't reset password because the token is invalid" : "Impossibile reimpostare la password poiché il token non è valido", "Couldn't send reset email. Please make sure your username is correct." : "Impossibile inviare l'email di reimpostazione. Assicurati che il nome utente sia corretto.", @@ -141,7 +149,7 @@ "New Password" : "Nuova password", "Reset password" : "Ripristina la password", "Searching other places" : "Ricerca in altre posizioni", - "No search result in other places" : "Nessun risultato di ricerca in altre posizioni", + "No search results in other places" : "Nessun risultato di ricerca in altre posizioni", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} risultato di ricerca in altre posizioni","{count} risultati di ricerca in altre posizioni"], "Personal" : "Personale", "Users" : "Utenti", @@ -169,12 +177,13 @@ "Technical details" : "Dettagli tecnici", "Remote Address: %s" : "Indirizzo remoto: %s", "Request ID: %s" : "ID richiesta: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Codice: %s", "Message: %s" : "Messaggio: %s", "File: %s" : "File: %s", "Line: %s" : "Riga: %s", "Trace" : "Traccia", - "Security Warning" : "Avviso di sicurezza", + "Security warning" : "Avviso di sicurezza", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La cartella dei dati e i file sono probabilmente accessibili da Internet poiché il file .htaccess non funziona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informazioni su come configurare correttamente il tuo server, vedi la <a href=\"%s\" target=\"_blank\">documentazione</a>.", "Create an <strong>admin account</strong>" : "Crea un <strong>account amministratore</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Cartella dati", "Configure the database" : "Configura il database", "Only %s is available." : "È disponibile solo %s.", + "Install and activate additional PHP modules to choose other database types." : "Installa e attiva i moduli PHP aggiuntivi per scegliere gli altri tipi di database.", + "For more details check out the documentation." : "Per ulteriori dettagli, leggi la documentazione.", "Database user" : "Utente del database", "Database password" : "Password del database", "Database name" : "Nome del database", "Database tablespace" : "Spazio delle tabelle del database", "Database host" : "Host del database", - "Performance Warning" : "Avviso di prestazioni", + "Performance warning" : "Avviso di prestazioni", "SQLite will be used as database." : "SQLite sarà utilizzato come database.", "For larger installations we recommend to choose a different database backend." : "Per installazioni più grandi consigliamo di scegliere un motore di database diverso.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "In particolar modo, quando si utilizza il client desktop per la sincronizzazione dei file, l'uso di SQLite è sconsigliato.", "Finish setup" : "Termina configurazione", "Finishing …" : "Completamento...", + "Need help?" : "Ti serve aiuto?", + "See the documentation" : "Leggi la documentazione", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Questa applicazione richiede JavaScript per un corretto funzionamento. {linkstart}Abilita JavaScript{linkend} e ricarica la pagina.", - "%s is available. Get more information on how to update." : "%s è disponibile. Ottieni ulteriori informazioni sull'aggiornamento.", "Log out" : "Esci", "Search" : "Cerca", "Server side authentication failed!" : "Autenticazione lato server non riuscita!", "Please contact your administrator." : "Contatta il tuo amministratore di sistema.", + "An internal error occured." : "Si è verificato un errore interno.", + "Please try again or contact your administrator." : "Prova ancora o contatta il tuo amministratore.", "Forgot your password? Reset it!" : "Hai dimenticato la password? Reimpostala!", "remember" : "ricorda", "Log in" : "Accedi", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 1ff925486dd..8d059e4b655 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "次のユーザーにメールを送信できませんでした: %s", "Turned on maintenance mode" : "メンテナンスモードがオンになりました", "Turned off maintenance mode" : "メンテナンスモードがオフになりました", + "Maintenance mode is kept active" : "メンテナンスモードが継続中です", "Updated database" : "データベース更新済み", "Checked database schema update" : "指定データベースのスキーマを更新", "Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新", "Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。", - "Following incompatible apps have been disabled: %s" : "次の互換性の無いアプリは無効にされています。: %s", - "Following 3rd party apps have been disabled: %s" : "次のサードパーティーアプリは無効にされています。: %s", + "Repair warning: " : "修復警告:", + "Repair error: " : "修復エラー:", + "Following incompatible apps have been disabled: %s" : "次の互換性のないアプリは無効にされています: %s", + "Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s", + "Invalid file provided" : "無効なファイルが提供されました", "No image or file provided" : "画像もしくはファイルが提供されていません", "Unknown filetype" : "不明なファイルタイプ", "Invalid image" : "無効な画像", "No temporary profile picture available, try again" : "一時的なプロファイル用画像が利用できません。もう一度試してください", "No crop data provided" : "クロップデータは提供されません", + "No valid crop data provided" : "有効なクロップデータは提供されません", + "Crop is not square" : "クロップが正方形ではありません", "Sunday" : "日", "Monday" : "月", "Tuesday" : "火", @@ -38,7 +44,7 @@ OC.L10N.register( "Saving..." : "保存中...", "Couldn't send reset email. Please contact your administrator." : "リセットメールを送信できませんでした。管理者に問い合わせてください。", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットするリンクをクリックしたので、メールを送信しました。しばらくたってもメールが届かなかった場合は、スパム/ジャンクフォルダーを確認してください。<br>それでも見つからなかった場合は、管理者に問合わせてください。", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "I know what I'm doing" : "どういう操作をしているか理解しています", "Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。", "No" : "いいえ", @@ -64,8 +70,15 @@ OC.L10N.register( "So-so password" : "まずまずのパスワード", "Good password" : "良好なパスワード", "Strong password" : "強いパスワード", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインタフェースが動作していないと考えられるため、あなたのWEBサーバはまだファイルの同期を許可するように適切な設定がされていません。", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続されていません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できない可能性があります。全ての機能を利用するためには、このサーバーからインターネットに接続できるようにすることをお勧めします。", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照してください。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照ください。", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP ヘッダは最小値の \"{seconds}\" 秒に設定されていません。 セキュリティーを強化するため、<a href=\"{docUrl}\">security tips</a>を参照して HSTS を有効にすることをおすすめします。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP経由でアクセスしています。<a href=\"{docUrl}\">security tips</a>を参照して、代わりにHTTPSを使用するようサーバーを設定することを強くおすすめします。 instead as described in our .", "Shared" : "共有中", "Shared with {recipients}" : "{recipients} と共有", "Share" : "共有", @@ -75,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "権限変更でエラー発生", "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", "Shared with you by {owner}" : "{owner} と共有中", - "Share with user or group …" : "ユーザーもしくはグループと共有 ...", + "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", + "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", "Share link" : "URLで共有", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Link" : "リンク", @@ -88,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "有効期限を設定", "Expiration" : "期限切れ", "Expiration date" : "有効期限", + "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", "Adding user..." : "ユーザーを追加しています...", "group" : "グループ", "remote" : "リモート", @@ -120,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "こんにちは、 {name}、 天気は{weather}です", "Hello {name}" : " {name}さん、こんにちは", "_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"], + "{version} is available. Get more information on how to update." : "{version} が利用可能です。アップデート方法について詳細情報を確認してください。", "Updating {productName} to version {version}, this may take a while." : "{productName} を バージョン {version} に更新しています。しばらくお待ちください。", "Please reload the page." : "ページをリロードしてください。", "The update was unsuccessful. " : "アップデートに失敗しました。", + "The update was successful. There were warnings." : "アップデートは成功しました。警告がありました。", "The update was successful. Redirecting you to ownCloud now." : "アップデートに成功しました。今すぐownCloudにリダイレクトします。", "Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした", "Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。", @@ -133,7 +151,7 @@ OC.L10N.register( "New Password" : "新しいパスワード", "Reset password" : "パスワードをリセット", "Searching other places" : "他の場所の検索", - "No search result in other places" : "その他の場所の検索結果はありません", + "No search results in other places" : "その他の場所の検索結果はありません", "_{count} search result in other places_::_{count} search results in other places_" : ["その他の場所 の検索件数 {count}"], "Personal" : "個人", "Users" : "ユーザー", @@ -156,17 +174,18 @@ OC.L10N.register( "Cheers!" : "それでは!", "Internal Server Error" : "内部サーバエラー", "The server encountered an internal error and was unable to complete your request." : "サーバー内でエラーが発生したため、リクエストを完了できませんでした。", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "このエラーが繰り返し表示されるようであれば、以下の技術情報を添付してサーバー管理者に報告してください。", - "More details can be found in the server log." : "詳しい情報は、サーバーのログを確認してください。", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "このエラーが繰り返し表示されるようであれば、以下の技術情報を添付してサーバー管理者に問い合わせてください。", + "More details can be found in the server log." : "詳細は、サーバーのログを確認してください。", "Technical details" : "技術詳細", "Remote Address: %s" : "リモートアドレス: %s", "Request ID: %s" : "リクエスト ID: %s", + "Type: %s" : "種類: %s", "Code: %s" : "コード: %s", "Message: %s" : "メッセージ: %s", "File: %s" : "ファイル: %s", "Line: %s" : "行: %s", "Trace" : "トレース", - "Security Warning" : "セキュリティ警告", + "Security warning" : "セキュリティ警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。", "Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください", @@ -175,23 +194,28 @@ OC.L10N.register( "Data folder" : "データフォルダー", "Configure the database" : "データベースを設定してください", "Only %s is available." : "%s のみ有効です。", + "Install and activate additional PHP modules to choose other database types." : "他のデータベースタイプを選択するためには、追加の PHP モジュールインストールして有効化してください。", + "For more details check out the documentation." : "詳細は、ドキュメントを確認してください。", "Database user" : "データベースのユーザー名", "Database password" : "データベースのパスワード", "Database name" : "データベース名", "Database tablespace" : "データベースの表領域", "Database host" : "データベースのホスト名", - "Performance Warning" : "パフォーマンス警告", + "Performance warning" : "パフォーマンス警告", "SQLite will be used as database." : "SQLiteをデータベースとして使用しています。", "For larger installations we recommend to choose a different database backend." : "大規模な運用では別のデータベースを選択することをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "Finish setup" : "セットアップを完了します", "Finishing …" : "作業を完了しています ...", + "Need help?" : "ヘルプが必要ですか?", + "See the documentation" : "ドキュメントを確認してください", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ", - "%s is available. Get more information on how to update." : "%s が利用可能です。アップデート方法について詳細情報を確認してください。", "Log out" : "ログアウト", "Search" : "検索", "Server side authentication failed!" : "サーバーサイドの認証に失敗しました!", "Please contact your administrator." : "管理者に問い合わせてください。", + "An internal error occured." : "内部エラーが発生しました。", + "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", "Forgot your password? Reset it!" : "パスワードを忘れましたか?リセットします!", "remember" : "パスワードを保存", "Log in" : "ログイン", @@ -199,10 +223,10 @@ OC.L10N.register( "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "こんにちは、<br><br>%sがあなたと »%s« を共有したことをお知らせします。<br><a href=\"%s\">それを表示</a><br><br>", "This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。", "This means only administrators can use the instance." : "これは、管理者のみがインスタンスを利用できることを意味しています。", - "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に連絡してください。", + "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。", "Thank you for your patience." : "しばらくお待ちください。", "You are accessing the server from an untrusted domain." : "信頼されていないドメインからサーバーにアクセスしています。", - "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に連絡してください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に問い合わせてください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "環境により、下のボタンで信頼するドメインに追加する必要があるかもしれません。", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "%s will be updated to version %s." : "%s はバージョン %s にアップデートされました。", @@ -211,6 +235,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "データベースを確認してください。実行前にconfigフォルダーとdataフォルダーをバックアップします。", "Start update" : "アップデートを開始", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "大規模なサイトの場合、ブラウザーがタイムアウトする可能性があるため、インストールディレクトリで次のコマンドを実行しても構いません。", + "This %s instance is currently in maintenance mode, which may take a while." : "このサーバー %s は現在メンテナンスモードです。しばらくお待ちください。", "This page will refresh itself when the %s instance is available again." : "この画面は、サーバー %s の再起動後に自動的に更新されます。" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/ja.json b/core/l10n/ja.json index 267dfa111e4..fbf2d611ec5 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "次のユーザーにメールを送信できませんでした: %s", "Turned on maintenance mode" : "メンテナンスモードがオンになりました", "Turned off maintenance mode" : "メンテナンスモードがオフになりました", + "Maintenance mode is kept active" : "メンテナンスモードが継続中です", "Updated database" : "データベース更新済み", "Checked database schema update" : "指定データベースのスキーマを更新", "Checked database schema update for apps" : "アプリの指定データベースのスキーマを更新", "Updated \"%s\" to %s" : "\"%s\" を %s にアップデートしました。", - "Following incompatible apps have been disabled: %s" : "次の互換性の無いアプリは無効にされています。: %s", - "Following 3rd party apps have been disabled: %s" : "次のサードパーティーアプリは無効にされています。: %s", + "Repair warning: " : "修復警告:", + "Repair error: " : "修復エラー:", + "Following incompatible apps have been disabled: %s" : "次の互換性のないアプリは無効にされています: %s", + "Following apps have been disabled: %s" : "以下のアプリが無効にされています: %s", + "Invalid file provided" : "無効なファイルが提供されました", "No image or file provided" : "画像もしくはファイルが提供されていません", "Unknown filetype" : "不明なファイルタイプ", "Invalid image" : "無効な画像", "No temporary profile picture available, try again" : "一時的なプロファイル用画像が利用できません。もう一度試してください", "No crop data provided" : "クロップデータは提供されません", + "No valid crop data provided" : "有効なクロップデータは提供されません", + "Crop is not square" : "クロップが正方形ではありません", "Sunday" : "日", "Monday" : "月", "Tuesday" : "火", @@ -36,7 +42,7 @@ "Saving..." : "保存中...", "Couldn't send reset email. Please contact your administrator." : "リセットメールを送信できませんでした。管理者に問い合わせてください。", "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "パスワードをリセットするリンクをクリックしたので、メールを送信しました。しばらくたってもメールが届かなかった場合は、スパム/ジャンクフォルダーを確認してください。<br>それでも見つからなかった場合は、管理者に問合わせてください。", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に連絡してください。<br />続けてよろしいでしょうか?", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ファイルが暗号化されています。リカバリーキーが有効でない場合は、パスワードをリセットした後にあなたのデータを元に戻す方法はありません。<br />どういうことか分からない場合は、操作を継続する前に管理者に問い合わせてください。<br />続けてよろしいでしょうか?", "I know what I'm doing" : "どういう操作をしているか理解しています", "Password can not be changed. Please contact your administrator." : "パスワードは変更できません。管理者に問い合わせてください。", "No" : "いいえ", @@ -62,8 +68,15 @@ "So-so password" : "まずまずのパスワード", "Good password" : "良好なパスワード", "Strong password" : "強いパスワード", - "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインタフェースが動作していないと考えられるため、あなたのWEBサーバはまだファイルの同期を許可するように適切な設定がされていません。", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAVインターフェースが動作していないようです。Webサーバーは、ファイルの同期を許可するよう適切に設定されていません。", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "このサーバーはインターネットに接続されていません。この場合、外部ストレージのマウント、更新の通知やサードパーティ製のアプリ、といったいくつかの機能が使えません。また、リモート接続でのファイルアクセス、通知メールの送信のような機能も利用できない可能性があります。全ての機能を利用するためには、このサーバーからインターネットに接続できるようにすることをお勧めします。", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "データディレクトリとファイルがインターネットからアクセス可能になっている可能性があります。.htaccessファイルが機能していません。データディレクトリがアクセスされないようにWebサーバーを設定するか、Webサーバーのドキュメントルートからデータディレクトリを移動するように強くお勧めします。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照してください。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、<a href=\"{docLink}\">documentation</a> を参照ください。", "Error occurred while checking server setup" : "サーバー設定のチェック中にエラーが発生しました", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP ヘッダは \"{expected}\" に設定されていません。これは潜在的なセキュリティリスクもしくはプライバシーリスクとなる可能性があるため、この設定を見直すことをおすすめします。", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP ヘッダは最小値の \"{seconds}\" 秒に設定されていません。 セキュリティーを強化するため、<a href=\"{docUrl}\">security tips</a>を参照して HSTS を有効にすることをおすすめします。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP経由でアクセスしています。<a href=\"{docUrl}\">security tips</a>を参照して、代わりにHTTPSを使用するようサーバーを設定することを強くおすすめします。 instead as described in our .", "Shared" : "共有中", "Shared with {recipients}" : "{recipients} と共有", "Share" : "共有", @@ -73,7 +86,9 @@ "Error while changing permissions" : "権限変更でエラー発生", "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", "Shared with you by {owner}" : "{owner} と共有中", - "Share with user or group …" : "ユーザーもしくはグループと共有 ...", + "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", + "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", "Share link" : "URLで共有", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", "Link" : "リンク", @@ -86,6 +101,7 @@ "Set expiration date" : "有効期限を設定", "Expiration" : "期限切れ", "Expiration date" : "有効期限", + "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", "Adding user..." : "ユーザーを追加しています...", "group" : "グループ", "remote" : "リモート", @@ -118,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "こんにちは、 {name}、 天気は{weather}です", "Hello {name}" : " {name}さん、こんにちは", "_download %n file_::_download %n files_" : ["%n個のファイルをダウンロード"], + "{version} is available. Get more information on how to update." : "{version} が利用可能です。アップデート方法について詳細情報を確認してください。", "Updating {productName} to version {version}, this may take a while." : "{productName} を バージョン {version} に更新しています。しばらくお待ちください。", "Please reload the page." : "ページをリロードしてください。", "The update was unsuccessful. " : "アップデートに失敗しました。", + "The update was successful. There were warnings." : "アップデートは成功しました。警告がありました。", "The update was successful. Redirecting you to ownCloud now." : "アップデートに成功しました。今すぐownCloudにリダイレクトします。", "Couldn't reset password because the token is invalid" : "トークンが無効なため、パスワードをリセットできませんでした", "Couldn't send reset email. Please make sure your username is correct." : "リセットメールを送信できませんでした。ユーザー名が正しいことを確認してください。", @@ -131,7 +149,7 @@ "New Password" : "新しいパスワード", "Reset password" : "パスワードをリセット", "Searching other places" : "他の場所の検索", - "No search result in other places" : "その他の場所の検索結果はありません", + "No search results in other places" : "その他の場所の検索結果はありません", "_{count} search result in other places_::_{count} search results in other places_" : ["その他の場所 の検索件数 {count}"], "Personal" : "個人", "Users" : "ユーザー", @@ -154,17 +172,18 @@ "Cheers!" : "それでは!", "Internal Server Error" : "内部サーバエラー", "The server encountered an internal error and was unable to complete your request." : "サーバー内でエラーが発生したため、リクエストを完了できませんでした。", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "このエラーが繰り返し表示されるようであれば、以下の技術情報を添付してサーバー管理者に報告してください。", - "More details can be found in the server log." : "詳しい情報は、サーバーのログを確認してください。", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "このエラーが繰り返し表示されるようであれば、以下の技術情報を添付してサーバー管理者に問い合わせてください。", + "More details can be found in the server log." : "詳細は、サーバーのログを確認してください。", "Technical details" : "技術詳細", "Remote Address: %s" : "リモートアドレス: %s", "Request ID: %s" : "リクエスト ID: %s", + "Type: %s" : "種類: %s", "Code: %s" : "コード: %s", "Message: %s" : "メッセージ: %s", "File: %s" : "ファイル: %s", "Line: %s" : "行: %s", "Trace" : "トレース", - "Security Warning" : "セキュリティ警告", + "Security warning" : "セキュリティ警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccessファイルが動作していないため、おそらくあなたのデータディレクトリまたはファイルはインターネットからアクセス可能になっています。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "サーバーを適正に設定する情報は、こちらの<a href=\"%s\" target=\"_blank\">ドキュメント</a>を参照してください。", "Create an <strong>admin account</strong>" : "<strong>管理者アカウント</strong>を作成してください", @@ -173,23 +192,28 @@ "Data folder" : "データフォルダー", "Configure the database" : "データベースを設定してください", "Only %s is available." : "%s のみ有効です。", + "Install and activate additional PHP modules to choose other database types." : "他のデータベースタイプを選択するためには、追加の PHP モジュールインストールして有効化してください。", + "For more details check out the documentation." : "詳細は、ドキュメントを確認してください。", "Database user" : "データベースのユーザー名", "Database password" : "データベースのパスワード", "Database name" : "データベース名", "Database tablespace" : "データベースの表領域", "Database host" : "データベースのホスト名", - "Performance Warning" : "パフォーマンス警告", + "Performance warning" : "パフォーマンス警告", "SQLite will be used as database." : "SQLiteをデータベースとして使用しています。", "For larger installations we recommend to choose a different database backend." : "大規模な運用では別のデータベースを選択することをお勧めします。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特にデスクトップクライアントをファイル同期に使用する場合,SQLiteは非推奨です.", "Finish setup" : "セットアップを完了します", "Finishing …" : "作業を完了しています ...", + "Need help?" : "ヘルプが必要ですか?", + "See the documentation" : "ドキュメントを確認してください", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "このアプリケーションの動作にはJavaScriptが必要です。\n {linkstart}JavaScriptを有効にし{linkend} 、ページを更新してください。 ", - "%s is available. Get more information on how to update." : "%s が利用可能です。アップデート方法について詳細情報を確認してください。", "Log out" : "ログアウト", "Search" : "検索", "Server side authentication failed!" : "サーバーサイドの認証に失敗しました!", "Please contact your administrator." : "管理者に問い合わせてください。", + "An internal error occured." : "内部エラーが発生しました。", + "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", "Forgot your password? Reset it!" : "パスワードを忘れましたか?リセットします!", "remember" : "パスワードを保存", "Log in" : "ログイン", @@ -197,10 +221,10 @@ "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "こんにちは、<br><br>%sがあなたと »%s« を共有したことをお知らせします。<br><a href=\"%s\">それを表示</a><br><br>", "This ownCloud instance is currently in single user mode." : "このownCloudインスタンスは、現在シングルユーザーモードです。", "This means only administrators can use the instance." : "これは、管理者のみがインスタンスを利用できることを意味しています。", - "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に連絡してください。", + "Contact your system administrator if this message persists or appeared unexpectedly." : "このメッセージが引き続きもしくは予期せず現れる場合は、システム管理者に問い合わせてください。", "Thank you for your patience." : "しばらくお待ちください。", "You are accessing the server from an untrusted domain." : "信頼されていないドメインからサーバーにアクセスしています。", - "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に連絡してください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "管理者に問い合わせてください。このサーバーの管理者の場合は、\"trusted_domain\" の設定を config/config.php に設定してください。config/config.sample.php にサンプルの設定方法が記載してあります。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "環境により、下のボタンで信頼するドメインに追加する必要があるかもしれません。", "Add \"%s\" as trusted domain" : "\"%s\" を信頼するドメイン名に追加", "%s will be updated to version %s." : "%s はバージョン %s にアップデートされました。", @@ -209,6 +233,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "データベースを確認してください。実行前にconfigフォルダーとdataフォルダーをバックアップします。", "Start update" : "アップデートを開始", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "大規模なサイトの場合、ブラウザーがタイムアウトする可能性があるため、インストールディレクトリで次のコマンドを実行しても構いません。", + "This %s instance is currently in maintenance mode, which may take a while." : "このサーバー %s は現在メンテナンスモードです。しばらくお待ちください。", "This page will refresh itself when the %s instance is available again." : "この画面は、サーバー %s の再起動後に自動的に更新されます。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/ka_GE.js b/core/l10n/ka_GE.js index d87f7dfcc48..ed9ab2bbd7f 100644 --- a/core/l10n/ka_GE.js +++ b/core/l10n/ka_GE.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "კი", "Choose" : "არჩევა", "Ok" : "დიახ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "New Files" : "ახალი ფაილები", "Cancel" : "უარყოფა", "Shared" : "გაზიარებული", @@ -61,19 +60,16 @@ OC.L10N.register( "The object type is not specified." : "ობიექტის ტიპი არ არის მითითებული.", "Delete" : "წაშლა", "Add" : "დამატება", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.", "Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}", "New password" : "ახალი პაროლი", "Reset password" : "პაროლის შეცვლა", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "პირადი", "Users" : "მომხმარებელი", "Apps" : "აპლიკაციები", "Admin" : "ადმინისტრატორი", "Help" : "დახმარება", "Access forbidden" : "წვდომა აკრძალულია", - "Security Warning" : "უსაფრთხოების გაფრთხილება", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.", "Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>", "Username" : "მომხმარებლის სახელი", diff --git a/core/l10n/ka_GE.json b/core/l10n/ka_GE.json index 02d818c343a..3d5a85a99fd 100644 --- a/core/l10n/ka_GE.json +++ b/core/l10n/ka_GE.json @@ -24,7 +24,6 @@ "Yes" : "კი", "Choose" : "არჩევა", "Ok" : "დიახ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "New Files" : "ახალი ფაილები", "Cancel" : "უარყოფა", "Shared" : "გაზიარებული", @@ -59,19 +58,16 @@ "The object type is not specified." : "ობიექტის ტიპი არ არის მითითებული.", "Delete" : "წაშლა", "Add" : "დამატება", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "განახლება ვერ განხორციელდა. გადამისამართება თქვენს ownCloud–ზე.", "Use the following link to reset your password: {link}" : "გამოიყენე შემდეგი ლინკი პაროლის შესაცვლელად: {link}", "New password" : "ახალი პაროლი", "Reset password" : "პაროლის შეცვლა", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "პირადი", "Users" : "მომხმარებელი", "Apps" : "აპლიკაციები", "Admin" : "ადმინისტრატორი", "Help" : "დახმარება", "Access forbidden" : "წვდომა აკრძალულია", - "Security Warning" : "უსაფრთხოების გაფრთხილება", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "თქვენი data დირექტორია და ფაილები დაშვებადია ინტერნეტში რადგან .htaccess ფაილი არ მუშაობს.", "Create an <strong>admin account</strong>" : "შექმენი <strong>ადმინ ექაუნტი</strong>", "Username" : "მომხმარებლის სახელი", diff --git a/core/l10n/km.js b/core/l10n/km.js index 2708045b078..b3332580e23 100644 --- a/core/l10n/km.js +++ b/core/l10n/km.js @@ -28,7 +28,6 @@ OC.L10N.register( "Yes" : "ព្រម", "Choose" : "ជ្រើស", "Ok" : "ព្រម", - "_{count} file conflict_::_{count} file conflicts_" : [""], "New Files" : "ឯកសារថ្មី", "Already existing files" : "មានឯកសារនេះរួចហើយ", "Cancel" : "លើកលែង", @@ -69,18 +68,15 @@ OC.L10N.register( "The object type is not specified." : "មិនបានកំណត់ប្រភេទវត្ថុ។", "Delete" : "លុប", "Add" : "បញ្ចូល", - "_download %n file_::_download %n files_" : [""], "Please reload the page." : "សូមផ្ទុកទំព័រនេះឡើងវិញ។", "New password" : "ពាក្យសម្ងាត់ថ្មី", "Reset password" : "កំណត់ពាក្យសម្ងាត់ម្ដងទៀត", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "ផ្ទាល់ខ្លួន", "Users" : "អ្នកប្រើ", "Apps" : "កម្មវិធី", "Admin" : "អ្នកគ្រប់គ្រង", "Help" : "ជំនួយ", "Access forbidden" : "បានហាមឃាត់ការចូល", - "Security Warning" : "បម្រាមសុវត្ថិភាព", "Create an <strong>admin account</strong>" : "បង្កើត<strong>គណនីអភិបាល</strong>", "Username" : "ឈ្មោះអ្នកប្រើ", "Storage & database" : "ឃ្លាំងផ្ទុក & មូលដ្ឋានទិន្នន័យ", diff --git a/core/l10n/km.json b/core/l10n/km.json index 2f8057ced21..fceb9e68722 100644 --- a/core/l10n/km.json +++ b/core/l10n/km.json @@ -26,7 +26,6 @@ "Yes" : "ព្រម", "Choose" : "ជ្រើស", "Ok" : "ព្រម", - "_{count} file conflict_::_{count} file conflicts_" : [""], "New Files" : "ឯកសារថ្មី", "Already existing files" : "មានឯកសារនេះរួចហើយ", "Cancel" : "លើកលែង", @@ -67,18 +66,15 @@ "The object type is not specified." : "មិនបានកំណត់ប្រភេទវត្ថុ។", "Delete" : "លុប", "Add" : "បញ្ចូល", - "_download %n file_::_download %n files_" : [""], "Please reload the page." : "សូមផ្ទុកទំព័រនេះឡើងវិញ។", "New password" : "ពាក្យសម្ងាត់ថ្មី", "Reset password" : "កំណត់ពាក្យសម្ងាត់ម្ដងទៀត", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "ផ្ទាល់ខ្លួន", "Users" : "អ្នកប្រើ", "Apps" : "កម្មវិធី", "Admin" : "អ្នកគ្រប់គ្រង", "Help" : "ជំនួយ", "Access forbidden" : "បានហាមឃាត់ការចូល", - "Security Warning" : "បម្រាមសុវត្ថិភាព", "Create an <strong>admin account</strong>" : "បង្កើត<strong>គណនីអភិបាល</strong>", "Username" : "ឈ្មោះអ្នកប្រើ", "Storage & database" : "ឃ្លាំងផ្ទុក & មូលដ្ឋានទិន្នន័យ", diff --git a/core/l10n/kn.js b/core/l10n/kn.js index 67f6759cb2f..365a7ddb3fa 100644 --- a/core/l10n/kn.js +++ b/core/l10n/kn.js @@ -44,7 +44,6 @@ OC.L10N.register( "Choose" : "ಆಯ್ಕೆ", "Ok" : "ಸರಿ", "read-only" : "ಓದಲು ಮಾತ್ರ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "One file conflict" : "ಒಂದು ಕಡತದಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ", "New Files" : "ಹೊಸ ಕಡತಗಳು", "Already existing files" : "ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಡತಗಳು", @@ -69,7 +68,6 @@ OC.L10N.register( "Error while changing permissions" : "ಅನುಮತಿಗಳನ್ನು ಬದಲಾವಣೆ ಮಾಡುವಾಗ ದೋಷವಾಗಿದೆ", "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", - "Share with user or group …" : "ಬಳಕೆದಾರ ಅಥವಾ ಗುಂಪನ್ನು ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಿ ...", "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ", "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", @@ -122,7 +120,6 @@ OC.L10N.register( "New password" : "ಹೊಸ ಗುಪ್ತಪದ", "New Password" : "ಹೊಸ ಗುಪ್ತಪದ", "Reset password" : "ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "ವೈಯಕ್ತಿಕ", "Users" : "ಬಳಕೆದಾರರು", "Apps" : "ಕಾರ್ಯಕ್ರಮಗಳು", @@ -148,7 +145,6 @@ OC.L10N.register( "File: %s" : "ಕಡತ: %s", "Line: %s" : "ಕೋಂಡಿ: %s", "Trace" : "ಕುರುಹು", - "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ", "Username" : "ಬಳಕೆಯ ಹೆಸರು", "Storage & database" : "ಶೇಖರಣಾ ಮತ್ತು ದತ್ತಸಂಚಯ", "Data folder" : "ಮಾಹಿತಿ ಕೋಶ", @@ -161,7 +157,6 @@ OC.L10N.register( "Database host" : "ದತ್ತಸಂಚಯದ ಅತಿಥೆಯ", "Finish setup" : "ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ", "Finishing …" : "ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ ...", - "%s is available. Get more information on how to update." : "%s ಲಭ್ಯವಿದೆ. ಹೇಗೆ ನವೀಕರಿಸಬಹುದೆಂದು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ.", "Log out" : "ಈ ಆವೃತ್ತಿ ಇಂದ ನಿರ್ಗಮಿಸಿ", "Search" : "ಹುಡುಕು", "Please contact your administrator." : "ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲು ಕೋರಲಾಗಿದೆ.", diff --git a/core/l10n/kn.json b/core/l10n/kn.json index a124f435de6..9e03ebd496e 100644 --- a/core/l10n/kn.json +++ b/core/l10n/kn.json @@ -42,7 +42,6 @@ "Choose" : "ಆಯ್ಕೆ", "Ok" : "ಸರಿ", "read-only" : "ಓದಲು ಮಾತ್ರ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "One file conflict" : "ಒಂದು ಕಡತದಲ್ಲಿ ಸಮಸ್ಯೆ ಇದೆ", "New Files" : "ಹೊಸ ಕಡತಗಳು", "Already existing files" : "ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಕಡತಗಳು", @@ -67,7 +66,6 @@ "Error while changing permissions" : "ಅನುಮತಿಗಳನ್ನು ಬದಲಾವಣೆ ಮಾಡುವಾಗ ದೋಷವಾಗಿದೆ", "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", - "Share with user or group …" : "ಬಳಕೆದಾರ ಅಥವಾ ಗುಂಪನ್ನು ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಿ ...", "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ", "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", @@ -120,7 +118,6 @@ "New password" : "ಹೊಸ ಗುಪ್ತಪದ", "New Password" : "ಹೊಸ ಗುಪ್ತಪದ", "Reset password" : "ಗುಪ್ತ ಪದವನ್ನು ಮರುಹೊಂದಿಸಿ", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "ವೈಯಕ್ತಿಕ", "Users" : "ಬಳಕೆದಾರರು", "Apps" : "ಕಾರ್ಯಕ್ರಮಗಳು", @@ -146,7 +143,6 @@ "File: %s" : "ಕಡತ: %s", "Line: %s" : "ಕೋಂಡಿ: %s", "Trace" : "ಕುರುಹು", - "Security Warning" : "ಭದ್ರತಾ ಎಚ್ಚರಿಕೆ", "Username" : "ಬಳಕೆಯ ಹೆಸರು", "Storage & database" : "ಶೇಖರಣಾ ಮತ್ತು ದತ್ತಸಂಚಯ", "Data folder" : "ಮಾಹಿತಿ ಕೋಶ", @@ -159,7 +155,6 @@ "Database host" : "ದತ್ತಸಂಚಯದ ಅತಿಥೆಯ", "Finish setup" : "ಹೊಂದಾಣಿಕೆಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಿ", "Finishing …" : "ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ ...", - "%s is available. Get more information on how to update." : "%s ಲಭ್ಯವಿದೆ. ಹೇಗೆ ನವೀಕರಿಸಬಹುದೆಂದು ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಿರಿ.", "Log out" : "ಈ ಆವೃತ್ತಿ ಇಂದ ನಿರ್ಗಮಿಸಿ", "Search" : "ಹುಡುಕು", "Please contact your administrator." : "ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಲು ಕೋರಲಾಗಿದೆ.", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index d97729e136b..203e944ced3 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -8,11 +8,17 @@ OC.L10N.register( "Checked database schema update" : "데이터베이스 스키마 업데이트 확인됨", "Checked database schema update for apps" : "앱용 데이터베이스 스키마 업데이트 확인됨", "Updated \"%s\" to %s" : "\"%s\"을(를) %s(으)로 업데이트함", + "Repair warning: " : "수리 경고:", + "Repair error: " : "수리 오류:", + "Following incompatible apps have been disabled: %s" : "다음 호환되지 않는 앱이 비활성화되었습니다: %s", + "Invalid file provided" : "잘못된 파일 지정됨", "No image or file provided" : "사진이나 파일이 없음", "Unknown filetype" : "알려지지 않은 파일 형식", "Invalid image" : "잘못된 사진", "No temporary profile picture available, try again" : "사용 가능한 프로필 사진이 없습니다. 다시 시도하십시오.", "No crop data provided" : "선택된 데이터가 없습니다.", + "No valid crop data provided" : "올바른 잘라내기 데이터가 지정되지 않음", + "Crop is not square" : "잘라내는 영역이 사각형이 아님", "Sunday" : "일요일", "Monday" : "월요일", "Tuesday" : "화요일", @@ -62,7 +68,12 @@ OC.L10N.register( "So-so password" : "그저 그런 암호", "Good password" : "좋은 암호", "Strong password" : "강력한 암호", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.", "Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.", "Shared" : "공유됨", "Shared with {recipients}" : "{recipients} 님과 공유됨", "Share" : "공유", @@ -72,7 +83,9 @@ OC.L10N.register( "Error while changing permissions" : "권한 변경하는 중 오류 발생", "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", "Shared with you by {owner}" : "{owner} 님이 공유 중", - "Share with user or group …" : "사용자 및 그룹과 공유...", + "Share with users or groups …" : "사용자 및 그룹과 공유...", + "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", "Share link" : "링크 공유", "The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다", "Link" : "링크", @@ -85,6 +98,7 @@ OC.L10N.register( "Set expiration date" : "만료 날짜 설정", "Expiration" : "만료", "Expiration date" : "만료 날짜", + "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", "Adding user..." : "사용자 추가 중...", "group" : "그룹", "remote" : "원격", @@ -117,6 +131,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "{name} 님 안녕하세요, 오늘 날씨는 {weather}입니다", "Hello {name}" : "{name} 님 안녕하세요", "_download %n file_::_download %n files_" : ["파일 %n개 다운로드"], + "{version} is available. Get more information on how to update." : "{version}을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 알아보십시오.", "Updating {productName} to version {version}, this may take a while." : "{productName}을(를) 버전 {version}으로 업데이트하고 있습니다. 시간이 걸릴 수 있습니다.", "Please reload the page." : "페이지를 새로 고치십시오.", "The update was unsuccessful. " : "업데이트가 실패하였습니다. ", @@ -130,7 +145,6 @@ OC.L10N.register( "New Password" : "새 암호", "Reset password" : "암호 재설정", "Searching other places" : "다른 장소 찾는 중", - "No search result in other places" : "다른 장소 검색 결과 없음", "_{count} search result in other places_::_{count} search results in other places_" : ["다른 장소 검색 결과 {count}개"], "Personal" : "개인", "Users" : "사용자", @@ -158,12 +172,13 @@ OC.L10N.register( "Technical details" : "기술 정보", "Remote Address: %s" : "원격 주소: %s", "Request ID: %s" : "요청 ID: %s", + "Type: %s" : "종류: %s", "Code: %s" : "코드: %s", "Message: %s" : "메시지: %s", "File: %s" : "파일: %s", "Line: %s" : "줄: %s", "Trace" : "추적", - "Security Warning" : "보안 경고", + "Security warning" : "보안 경고", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.", "Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기", @@ -177,17 +192,21 @@ OC.L10N.register( "Database name" : "데이터베이스 이름", "Database tablespace" : "데이터베이스 테이블 공간", "Database host" : "데이터베이스 호스트", - "Performance Warning" : "성능 경고", + "Performance warning" : "성능 경고", "SQLite will be used as database." : "데이터베이스로 SQLite를 사용하게 됩니다.", "For larger installations we recommend to choose a different database backend." : "대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드를 선택할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정일 때는, SQLite를 사용하지 않는 것이 좋습니다.", "Finish setup" : "설치 완료", "Finishing …" : "완료 중 ...", - "%s is available. Get more information on how to update." : "%s을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 자세한 정보를 얻으십시오.", + "Need help?" : "도움이 필요한가요?", + "See the documentation" : "문서 보기", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.", "Log out" : "로그아웃", "Search" : "검색", "Server side authentication failed!" : "서버 인증 실패!", "Please contact your administrator." : "관리자에게 문의하십시오.", + "An internal error occured." : "내부 오류가 발생하였습니다.", + "Please try again or contact your administrator." : "다시 시도하거나 관리자에게 연락하십시오.", "Forgot your password? Reset it!" : "암호를 잊으셨나요? 재설정하세요!", "remember" : "기억하기", "Log in" : "로그인", @@ -207,6 +226,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "계속하기 전에 데이터베이스, 설정 폴더, 데이터 폴더가 백업되어 있는지 확인하십시오.", "Start update" : "업데이트 시작", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "큰 파일을 설치하는 경우 시간이 초과될 수 있으므로, 설치 디렉터리에서 다음 명령을 실행하셔도 됩니다:", + "This %s instance is currently in maintenance mode, which may take a while." : "이 %s 인스턴스는 현재 점검 모드입니다. 시간이 걸릴 수도 있습니다.", "This page will refresh itself when the %s instance is available again." : "%s 인스턴스를 다시 사용할 수 있으면 자동으로 새로 고칩니다." }, "nplurals=1; plural=0;"); diff --git a/core/l10n/ko.json b/core/l10n/ko.json index 460a2c4936c..d1bf81e44a6 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -6,11 +6,17 @@ "Checked database schema update" : "데이터베이스 스키마 업데이트 확인됨", "Checked database schema update for apps" : "앱용 데이터베이스 스키마 업데이트 확인됨", "Updated \"%s\" to %s" : "\"%s\"을(를) %s(으)로 업데이트함", + "Repair warning: " : "수리 경고:", + "Repair error: " : "수리 오류:", + "Following incompatible apps have been disabled: %s" : "다음 호환되지 않는 앱이 비활성화되었습니다: %s", + "Invalid file provided" : "잘못된 파일 지정됨", "No image or file provided" : "사진이나 파일이 없음", "Unknown filetype" : "알려지지 않은 파일 형식", "Invalid image" : "잘못된 사진", "No temporary profile picture available, try again" : "사용 가능한 프로필 사진이 없습니다. 다시 시도하십시오.", "No crop data provided" : "선택된 데이터가 없습니다.", + "No valid crop data provided" : "올바른 잘라내기 데이터가 지정되지 않음", + "Crop is not square" : "잘라내는 영역이 사각형이 아님", "Sunday" : "일요일", "Monday" : "월요일", "Tuesday" : "화요일", @@ -60,7 +66,12 @@ "So-so password" : "그저 그런 암호", "Good password" : "좋은 암호", "Strong password" : "강력한 암호", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "WebDAV 서비스가 올바르게 작동하지 않아서 웹 서버에서 파일 동기화를 사용할 수 없습니다.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "서버에서 인터넷 연결을 사용할 수 없습니다. 외부 저장소 마운트, 업데이트 알림, 제 3자 앱 설치 등 기능을 사용할 수 없습니다. 원격에서 파일에 접근하거나, 알림 이메일을 보내지 못할 수도 있습니다. 모든 기능을 사용하려면 인터넷에 연결하는 것을 추천합니다.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "인터넷에서 데이터 디렉터리와 파일에 접근할 수 있습니다. .htaccess 파일이 작동하지 않습니다. 웹 서버 설정을 변경하여 데이터 디렉터리에 직접 접근할 수 없도록 하거나, 데이터 디렉터리를 웹 서버 문서 경로 바깥에 두십시오.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "메모리 캐시가 설정되지 않았습니다. 성능을 향상시키려면 사용 가능한 경우 메모리 캐시를 설정하십시오. 더 많은 정보를 보려면 <a href=\"{docLink}\">문서</a>를 참고하십시오.", "Error occurred while checking server setup" : "서버 설정을 확인하는 중 오류 발생", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 헤더가 \"{expected}\"와(과) 같이 설정되지 않았습니다. 잠재적인 보안 위협이 될 수 있으므로 설정을 변경하는 것을 추천합니다.", "Shared" : "공유됨", "Shared with {recipients}" : "{recipients} 님과 공유됨", "Share" : "공유", @@ -70,7 +81,9 @@ "Error while changing permissions" : "권한 변경하는 중 오류 발생", "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", "Shared with you by {owner}" : "{owner} 님이 공유 중", - "Share with user or group …" : "사용자 및 그룹과 공유...", + "Share with users or groups …" : "사용자 및 그룹과 공유...", + "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", "Share link" : "링크 공유", "The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다", "Link" : "링크", @@ -83,6 +96,7 @@ "Set expiration date" : "만료 날짜 설정", "Expiration" : "만료", "Expiration date" : "만료 날짜", + "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", "Adding user..." : "사용자 추가 중...", "group" : "그룹", "remote" : "원격", @@ -115,6 +129,7 @@ "Hello {name}, the weather is {weather}" : "{name} 님 안녕하세요, 오늘 날씨는 {weather}입니다", "Hello {name}" : "{name} 님 안녕하세요", "_download %n file_::_download %n files_" : ["파일 %n개 다운로드"], + "{version} is available. Get more information on how to update." : "{version}을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 알아보십시오.", "Updating {productName} to version {version}, this may take a while." : "{productName}을(를) 버전 {version}으로 업데이트하고 있습니다. 시간이 걸릴 수 있습니다.", "Please reload the page." : "페이지를 새로 고치십시오.", "The update was unsuccessful. " : "업데이트가 실패하였습니다. ", @@ -128,7 +143,6 @@ "New Password" : "새 암호", "Reset password" : "암호 재설정", "Searching other places" : "다른 장소 찾는 중", - "No search result in other places" : "다른 장소 검색 결과 없음", "_{count} search result in other places_::_{count} search results in other places_" : ["다른 장소 검색 결과 {count}개"], "Personal" : "개인", "Users" : "사용자", @@ -156,12 +170,13 @@ "Technical details" : "기술 정보", "Remote Address: %s" : "원격 주소: %s", "Request ID: %s" : "요청 ID: %s", + "Type: %s" : "종류: %s", "Code: %s" : "코드: %s", "Message: %s" : "메시지: %s", "File: %s" : "파일: %s", "Line: %s" : "줄: %s", "Trace" : "추적", - "Security Warning" : "보안 경고", + "Security warning" : "보안 경고", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : ".htaccess 파일이 처리되지 않아서 데이터 디렉터리와 파일을 인터넷에서 접근할 수 없을 수도 있습니다.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "올바른 서버 설정을 위한 정보는 <a href=\"%s\" target=\"_blank\">문서</a>를 참조하십시오.", "Create an <strong>admin account</strong>" : "<strong>관리자 계정</strong> 만들기", @@ -175,17 +190,21 @@ "Database name" : "데이터베이스 이름", "Database tablespace" : "데이터베이스 테이블 공간", "Database host" : "데이터베이스 호스트", - "Performance Warning" : "성능 경고", + "Performance warning" : "성능 경고", "SQLite will be used as database." : "데이터베이스로 SQLite를 사용하게 됩니다.", "For larger installations we recommend to choose a different database backend." : "대규모의 파일을 관리하려고 한다면 다른 데이터베이스 백엔드를 선택할 것을 권장합니다.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "특히 파일 동기화를 위해 데스크톱 클라이언트를 사용할 예정일 때는, SQLite를 사용하지 않는 것이 좋습니다.", "Finish setup" : "설치 완료", "Finishing …" : "완료 중 ...", - "%s is available. Get more information on how to update." : "%s을(를) 사용할 수 있습니다. 업데이트하는 방법에 대해서 자세한 정보를 얻으십시오.", + "Need help?" : "도움이 필요한가요?", + "See the documentation" : "문서 보기", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "이 프로그램이 올바르게 작동하려면 JavaScript가 필요합니다. {linkstart}JavaScript를 활성화{linkend}한 다음 페이지를 새로 고치십시오.", "Log out" : "로그아웃", "Search" : "검색", "Server side authentication failed!" : "서버 인증 실패!", "Please contact your administrator." : "관리자에게 문의하십시오.", + "An internal error occured." : "내부 오류가 발생하였습니다.", + "Please try again or contact your administrator." : "다시 시도하거나 관리자에게 연락하십시오.", "Forgot your password? Reset it!" : "암호를 잊으셨나요? 재설정하세요!", "remember" : "기억하기", "Log in" : "로그인", @@ -205,6 +224,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "계속하기 전에 데이터베이스, 설정 폴더, 데이터 폴더가 백업되어 있는지 확인하십시오.", "Start update" : "업데이트 시작", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "큰 파일을 설치하는 경우 시간이 초과될 수 있으므로, 설치 디렉터리에서 다음 명령을 실행하셔도 됩니다:", + "This %s instance is currently in maintenance mode, which may take a while." : "이 %s 인스턴스는 현재 점검 모드입니다. 시간이 걸릴 수도 있습니다.", "This page will refresh itself when the %s instance is available again." : "%s 인스턴스를 다시 사용할 수 있으면 자동으로 새로 고칩니다." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/ku_IQ.js b/core/l10n/ku_IQ.js index f7494f17dab..e68c31a1f37 100644 --- a/core/l10n/ku_IQ.js +++ b/core/l10n/ku_IQ.js @@ -5,17 +5,15 @@ OC.L10N.register( "Saving..." : "پاشکهوتدهکات...", "No" : "نەخێر", "Yes" : "بەڵێ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "Ok" : "باشە", "Cancel" : "لابردن", "Share" : "هاوبەشی کردن", "Error" : "ههڵه", "Password" : "وشەی تێپەربو", "Warning" : "ئاگاداری", "Add" : "زیادکردن", - "_download %n file_::_download %n files_" : ["",""], "New password" : "وشەی نهێنی نوێ", "Reset password" : "دووباره كردنهوهی وشهی نهێنی", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Users" : "بهكارهێنهر", "Apps" : "بهرنامهكان", "Admin" : "بهڕێوهبهری سهرهكی", diff --git a/core/l10n/ku_IQ.json b/core/l10n/ku_IQ.json index da83726bda1..587d2cd018c 100644 --- a/core/l10n/ku_IQ.json +++ b/core/l10n/ku_IQ.json @@ -3,17 +3,15 @@ "Saving..." : "پاشکهوتدهکات...", "No" : "نەخێر", "Yes" : "بەڵێ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "Ok" : "باشە", "Cancel" : "لابردن", "Share" : "هاوبەشی کردن", "Error" : "ههڵه", "Password" : "وشەی تێپەربو", "Warning" : "ئاگاداری", "Add" : "زیادکردن", - "_download %n file_::_download %n files_" : ["",""], "New password" : "وشەی نهێنی نوێ", "Reset password" : "دووباره كردنهوهی وشهی نهێنی", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Users" : "بهكارهێنهر", "Apps" : "بهرنامهكان", "Admin" : "بهڕێوهبهری سهرهكی", diff --git a/core/l10n/lb.js b/core/l10n/lb.js index 8f16e887a2a..2f383be3496 100644 --- a/core/l10n/lb.js +++ b/core/l10n/lb.js @@ -32,7 +32,6 @@ OC.L10N.register( "Yes" : "Jo", "Choose" : "Auswielen", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Which files do you want to keep?" : "Weieng Fichieren wëlls de gär behalen?", "Cancel" : "Ofbriechen", "Continue" : "Weider", @@ -74,13 +73,11 @@ OC.L10N.register( "Delete" : "Läschen", "Add" : "Dobäisetzen", "Edit tags" : "Tags editéieren", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.", "%s password reset" : "%s Passwuert ass nei gesat", "Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}", "New password" : "Neit Passwuert", "Reset password" : "Passwuert zréck setzen", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Perséinlech", "Users" : "Benotzer", "Apps" : "Applikatiounen", @@ -90,7 +87,6 @@ OC.L10N.register( "Error untagging" : "Fehler beim Tag läschen", "Access forbidden" : "Zougrëff net erlaabt", "Cheers!" : "Prost!", - "Security Warning" : "Sécherheets-Warnung", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.", "Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën", "Username" : "Benotzernumm", @@ -103,7 +99,6 @@ OC.L10N.register( "Database host" : "Datebank-Server", "Finish setup" : "Installatioun ofschléissen", "Finishing …" : "Schléissen of ...", - "%s is available. Get more information on how to update." : "%s ass verfügbar. Kréi méi Informatiounen doriwwer wéi d'Aktualiséierung ofleeft.", "Log out" : "Ofmellen", "Search" : "Sichen", "remember" : "verhalen", diff --git a/core/l10n/lb.json b/core/l10n/lb.json index 992527aaed9..44445e3bdac 100644 --- a/core/l10n/lb.json +++ b/core/l10n/lb.json @@ -30,7 +30,6 @@ "Yes" : "Jo", "Choose" : "Auswielen", "Ok" : "OK", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Which files do you want to keep?" : "Weieng Fichieren wëlls de gär behalen?", "Cancel" : "Ofbriechen", "Continue" : "Weider", @@ -72,13 +71,11 @@ "Delete" : "Läschen", "Add" : "Dobäisetzen", "Edit tags" : "Tags editéieren", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Den Update war erfollegräich. Du gëss elo bei d'ownCloud ëmgeleet.", "%s password reset" : "%s Passwuert ass nei gesat", "Use the following link to reset your password: {link}" : "Benotz folgende Link fir däi Passwuert zréckzesetzen: {link}", "New password" : "Neit Passwuert", "Reset password" : "Passwuert zréck setzen", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Perséinlech", "Users" : "Benotzer", "Apps" : "Applikatiounen", @@ -88,7 +85,6 @@ "Error untagging" : "Fehler beim Tag läschen", "Access forbidden" : "Zougrëff net erlaabt", "Cheers!" : "Prost!", - "Security Warning" : "Sécherheets-Warnung", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Däin Daten-Dossier an deng Fichieren si wahrscheinlech iwwert den Internet accessibel well den .htaccess-Fichier net funktionnéiert.", "Create an <strong>admin account</strong>" : "En <strong>Admin-Account</strong> uleeën", "Username" : "Benotzernumm", @@ -101,7 +97,6 @@ "Database host" : "Datebank-Server", "Finish setup" : "Installatioun ofschléissen", "Finishing …" : "Schléissen of ...", - "%s is available. Get more information on how to update." : "%s ass verfügbar. Kréi méi Informatiounen doriwwer wéi d'Aktualiséierung ofleeft.", "Log out" : "Ofmellen", "Search" : "Sichen", "remember" : "verhalen", diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js index ab17b837098..7c27d780e38 100644 --- a/core/l10n/lt_LT.js +++ b/core/l10n/lt_LT.js @@ -54,7 +54,6 @@ OC.L10N.register( "Error while changing permissions" : "Klaida, keičiant privilegijas", "Shared with you and the group {group} by {owner}" : "Pasidalino su Jumis ir {group} grupe {owner}", "Shared with you by {owner}" : "Pasidalino su Jumis {owner}", - "Share with user or group …" : "Dalintis su vartotoju arba grupe...", "Share link" : "Dalintis nuoroda", "Password protect" : "Apsaugotas slaptažodžiu", "Password" : "Slaptažodis", @@ -86,14 +85,12 @@ OC.L10N.register( "Edit tags" : "Redaguoti žymes", "Error loading dialog template: {error}" : "Klaida įkeliant dialogo ruošinį: {error}", "No tags selected for deletion." : "Trynimui nepasirinkta jokia žymė.", - "_download %n file_::_download %n files_" : ["","",""], "Please reload the page." : "Prašome perkrauti puslapį.", "The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.", "%s password reset" : "%s slaptažodžio atnaujinimas", "Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}", "New password" : "Naujas slaptažodis", "Reset password" : "Atkurti slaptažodį", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Asmeniniai", "Users" : "Vartotojai", "Apps" : "Programos", @@ -110,7 +107,6 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Labas,\n\nInformuojame, kad %s pasidalino su Jumis %s.\nPažiūrėti tai: %s\n", "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", "Cheers!" : "Sveikinimai!", - "Security Warning" : "Saugumo pranešimas", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.", "Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>", @@ -124,7 +120,6 @@ OC.L10N.register( "Database host" : "Duomenų bazės serveris", "Finish setup" : "Baigti diegimą", "Finishing …" : "Baigiama ...", - "%s is available. Get more information on how to update." : "%s yra prieinama. Gaukite daugiau informacijos apie atnaujinimą.", "Log out" : "Atsijungti", "Search" : "Ieškoti", "Server side authentication failed!" : "Autentikacija serveryje nepavyko!", diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json index 9cb067ac93e..79184dfdb27 100644 --- a/core/l10n/lt_LT.json +++ b/core/l10n/lt_LT.json @@ -52,7 +52,6 @@ "Error while changing permissions" : "Klaida, keičiant privilegijas", "Shared with you and the group {group} by {owner}" : "Pasidalino su Jumis ir {group} grupe {owner}", "Shared with you by {owner}" : "Pasidalino su Jumis {owner}", - "Share with user or group …" : "Dalintis su vartotoju arba grupe...", "Share link" : "Dalintis nuoroda", "Password protect" : "Apsaugotas slaptažodžiu", "Password" : "Slaptažodis", @@ -84,14 +83,12 @@ "Edit tags" : "Redaguoti žymes", "Error loading dialog template: {error}" : "Klaida įkeliant dialogo ruošinį: {error}", "No tags selected for deletion." : "Trynimui nepasirinkta jokia žymė.", - "_download %n file_::_download %n files_" : ["","",""], "Please reload the page." : "Prašome perkrauti puslapį.", "The update was successful. Redirecting you to ownCloud now." : "Atnaujinimas buvo sėkmingas. Nukreipiame į jūsų ownCloud.", "%s password reset" : "%s slaptažodžio atnaujinimas", "Use the following link to reset your password: {link}" : "Slaptažodio atkūrimui naudokite šią nuorodą: {link}", "New password" : "Naujas slaptažodis", "Reset password" : "Atkurti slaptažodį", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Asmeniniai", "Users" : "Vartotojai", "Apps" : "Programos", @@ -108,7 +105,6 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Labas,\n\nInformuojame, kad %s pasidalino su Jumis %s.\nPažiūrėti tai: %s\n", "The share will expire on %s." : "Bendrinimo laikas baigsis %s.", "Cheers!" : "Sveikinimai!", - "Security Warning" : "Saugumo pranešimas", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Jūsų failai yra tikriausiai prieinami per internetą nes .htaccess failas neveikia.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Kad gauti informaciją apie tai kaip tinkamai sukonfigūruoti savo serverį, prašome skaityti <a href=\"%s\" target=\"_blank\">dokumentaciją</a>.", "Create an <strong>admin account</strong>" : "Sukurti <strong>administratoriaus paskyrą</strong>", @@ -122,7 +118,6 @@ "Database host" : "Duomenų bazės serveris", "Finish setup" : "Baigti diegimą", "Finishing …" : "Baigiama ...", - "%s is available. Get more information on how to update." : "%s yra prieinama. Gaukite daugiau informacijos apie atnaujinimą.", "Log out" : "Atsijungti", "Search" : "Ieškoti", "Server side authentication failed!" : "Autentikacija serveryje nepavyko!", diff --git a/core/l10n/lv.js b/core/l10n/lv.js index f2bad15fee1..1abec29f5b7 100644 --- a/core/l10n/lv.js +++ b/core/l10n/lv.js @@ -35,7 +35,6 @@ OC.L10N.register( "Choose" : "Izvēlieties", "Ok" : "Labi", "read-only" : "tikai-skatīt", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "New Files" : "Jaunās datnes", "Cancel" : "Atcelt", "(all selected)" : "(visus iezīmētos)", @@ -76,20 +75,17 @@ OC.L10N.register( "The object type is not specified." : "Nav norādīts objekta tips.", "Delete" : "Dzēst", "Add" : "Pievienot", - "_download %n file_::_download %n files_" : ["","",""], "The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.", "%s password reset" : "%s paroles maiņa", "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}", "New password" : "Jauna parole", "Reset password" : "Mainīt paroli", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Personīgi", "Users" : "Lietotāji", "Apps" : "Lietotnes", "Admin" : "Administratori", "Help" : "Palīdzība", "Access forbidden" : "Pieeja ir liegta", - "Security Warning" : "Brīdinājums par drošību", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.", "Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>", @@ -102,7 +98,6 @@ OC.L10N.register( "Database tablespace" : "Datubāzes tabulas telpa", "Database host" : "Datubāzes serveris", "Finish setup" : "Pabeigt iestatīšanu", - "%s is available. Get more information on how to update." : "%s ir pieejams. Uzziniet vairāk kā atjaunināt.", "Log out" : "Izrakstīties", "Search" : "Meklēt", "remember" : "atcerēties", diff --git a/core/l10n/lv.json b/core/l10n/lv.json index 30cb3cff55e..acbb677e863 100644 --- a/core/l10n/lv.json +++ b/core/l10n/lv.json @@ -33,7 +33,6 @@ "Choose" : "Izvēlieties", "Ok" : "Labi", "read-only" : "tikai-skatīt", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "New Files" : "Jaunās datnes", "Cancel" : "Atcelt", "(all selected)" : "(visus iezīmētos)", @@ -74,20 +73,17 @@ "The object type is not specified." : "Nav norādīts objekta tips.", "Delete" : "Dzēst", "Add" : "Pievienot", - "_download %n file_::_download %n files_" : ["","",""], "The update was successful. Redirecting you to ownCloud now." : "Atjaunināšana beidzās sekmīgi. Tagad pārsūta jūs uz ownCloud.", "%s password reset" : "%s paroles maiņa", "Use the following link to reset your password: {link}" : "Izmantojiet šo saiti, lai mainītu paroli: {link}", "New password" : "Jauna parole", "Reset password" : "Mainīt paroli", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Personīgi", "Users" : "Lietotāji", "Apps" : "Lietotnes", "Admin" : "Administratori", "Help" : "Palīdzība", "Access forbidden" : "Pieeja ir liegta", - "Security Warning" : "Brīdinājums par drošību", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Visticamāk, jūsu datu direktorija un datnes ir pieejamas no interneta, jo .htaccess datne nedarbojas.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Vairāk informācijai kā konfigurēt serveri, lūdzu skatiet <a href=\"%s\" target=\"_blank\">dokumentāciju</a>.", "Create an <strong>admin account</strong>" : "Izveidot <strong>administratora kontu</strong>", @@ -100,7 +96,6 @@ "Database tablespace" : "Datubāzes tabulas telpa", "Database host" : "Datubāzes serveris", "Finish setup" : "Pabeigt iestatīšanu", - "%s is available. Get more information on how to update." : "%s ir pieejams. Uzziniet vairāk kā atjaunināt.", "Log out" : "Izrakstīties", "Search" : "Meklēt", "remember" : "atcerēties", diff --git a/core/l10n/mk.js b/core/l10n/mk.js index 9a1030687c2..a023e7a676a 100644 --- a/core/l10n/mk.js +++ b/core/l10n/mk.js @@ -1,12 +1,24 @@ OC.L10N.register( "core", { + "Couldn't send mail to following users: %s " : "Не можев да пратам порака на следниве корисници: %s", "Turned on maintenance mode" : "Вклучен е модот за одржување", "Turned off maintenance mode" : "Ислкучен е модот за одржување", "Updated database" : "Базата е надградена", + "Checked database schema update" : "Проверена е шемата за ажурурање на базата на податоци", + "Checked database schema update for apps" : "Проверена е шемата за ажурурање на базата на податоци за апликации", + "Updated \"%s\" to %s" : "Ажурирано е \"%s\" во %s", + "Repair warning: " : "Предупредувања при поправка:", + "Repair error: " : "Грешка при поправка:", + "Following incompatible apps have been disabled: %s" : "Следниве некомпатибилни апликации се оневозможени: %s", + "Invalid file provided" : "Дадена е невалидна датотека", "No image or file provided" : "Не е доставена фотографија или датотека", "Unknown filetype" : "Непознат тип на датотека", "Invalid image" : "Невалидна фотографија", + "No temporary profile picture available, try again" : "Не е достапна привремена профилна слика, пробајте повторно", + "No crop data provided" : "Не се доставени податоци за сечење", + "No valid crop data provided" : "Нема валидни податоци за сечење", + "Crop is not square" : "Сечењето не е правоаголно", "Sunday" : "Недела", "Monday" : "Понеделник", "Tuesday" : "Вторник", @@ -28,12 +40,23 @@ OC.L10N.register( "December" : "Декември", "Settings" : "Подесувања", "Saving..." : "Снимам...", + "Couldn't send reset email. Please contact your administrator." : "Не можам да истпратам порака за ресетирање. Ве молам контактирајте го вашиот администратор.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Врската за ресетирање на вашата лозинка е испратена на вашата е-адреса. Ако не ја добиете во разумно време, проверете ги вашите папки за спам/ѓубре.<br>Ако не е таму прашајте го вашиот локален администратор.", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Вашите датотеки се шифрирани. Ако не сте го овозможиле клучот за враќање, нема да можете да ги повратите вашите податоци откога вашата лозинка ќе биде ресетирана.<br>Ако не сте сигурни што да правите, ве молам контактирајте го вашиот локален администратор пред да продолжите.<br/>Дали навистина сакате да продолжите?", + "I know what I'm doing" : "Знам што правам", + "Password can not be changed. Please contact your administrator." : "Лозинката не може да се промени. Ве молам контактирајте го вашиот администратор.", "No" : "Не", "Yes" : "Да", "Choose" : "Избери", + "Error loading file picker template: {error}" : "Грешка при вчитување на образецот за одбирач на датотеки: {error}", "Ok" : "Во ред", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "Error loading message template: {error}" : "Грешка при вчитување на образецот за порака: {error}", + "read-only" : "само за читање", "One file conflict" : "Конфликт со една датотека", + "New Files" : "Нови датотеки", + "Already existing files" : "Постоечки датотеки", + "Which files do you want to keep?" : "Кои датотеки сакате да ги задржите?", + "If you select both versions, the copied file will have a number added to its name." : "Ако ги одберете и двете верзии, копираната датотека ќе има број додаден на нејзиното име.", "Cancel" : "Откажи", "Continue" : "Продолжи", "(all selected)" : "(сите одбрани)", @@ -44,7 +67,14 @@ OC.L10N.register( "So-so password" : "Така така лозинка", "Good password" : "Добра лозинка", "Strong password" : "Јака лозинка", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овој опслужувач нема работна Интернет врска. Ова значи дека некои опции како што е монтирање на надворешни складишта, известувања за ажурирање или инсталации на апликации од 3-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата <a href=\"{docLink}\">документација</a>.", + "Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.", "Shared" : "Споделен", + "Shared with {recipients}" : "Споделено со {recipients}", "Share" : "Сподели", "Error" : "Грешка", "Error while sharing" : "Грешка при споделување", @@ -52,6 +82,8 @@ OC.L10N.register( "Error while changing permissions" : "Грешка при промена на привилегии", "Shared with you and the group {group} by {owner}" : "Споделено со Вас и групата {group} од {owner}", "Shared with you by {owner}" : "Споделено со Вас од {owner}", + "Share with users or groups …" : "Сподели со корисници или групи ...", + "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", "Share link" : "Сподели ја врската", "Password protect" : "Заштити со лозинка", "Password" : "Лозинка", @@ -65,6 +97,7 @@ OC.L10N.register( "Shared in {item} with {user}" : "Споделено во {item} со {user}", "Unshare" : "Не споделувај", "notify by email" : "извести преку електронска пошта", + "can share" : "може да споделува", "can edit" : "може да се измени", "access control" : "контрола на пристап", "create" : "креирај", @@ -81,13 +114,11 @@ OC.L10N.register( "Add" : "Додади", "Edit tags" : "Уреди ги таговите", "No tags selected for deletion." : "Не се селектирани тагови за бришење.", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.", "%s password reset" : "%s ресетирање на лозинката", "Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}", "New password" : "Нова лозинка", "Reset password" : "Ресетирај лозинка", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Лично", "Users" : "Корисници", "Apps" : "Аппликации", @@ -102,7 +133,6 @@ OC.L10N.register( "Access forbidden" : "Забранет пристап", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здраво,\n\nСамо да ве известам дека %s shared %s with you.\nView it: %s\n\n", "Cheers!" : "Поздрав!", - "Security Warning" : "Безбедносно предупредување", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.", "Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>", "Username" : "Корисничко име", diff --git a/core/l10n/mk.json b/core/l10n/mk.json index 3b56bd99cd8..419083daf48 100644 --- a/core/l10n/mk.json +++ b/core/l10n/mk.json @@ -1,10 +1,22 @@ { "translations": { + "Couldn't send mail to following users: %s " : "Не можев да пратам порака на следниве корисници: %s", "Turned on maintenance mode" : "Вклучен е модот за одржување", "Turned off maintenance mode" : "Ислкучен е модот за одржување", "Updated database" : "Базата е надградена", + "Checked database schema update" : "Проверена е шемата за ажурурање на базата на податоци", + "Checked database schema update for apps" : "Проверена е шемата за ажурурање на базата на податоци за апликации", + "Updated \"%s\" to %s" : "Ажурирано е \"%s\" во %s", + "Repair warning: " : "Предупредувања при поправка:", + "Repair error: " : "Грешка при поправка:", + "Following incompatible apps have been disabled: %s" : "Следниве некомпатибилни апликации се оневозможени: %s", + "Invalid file provided" : "Дадена е невалидна датотека", "No image or file provided" : "Не е доставена фотографија или датотека", "Unknown filetype" : "Непознат тип на датотека", "Invalid image" : "Невалидна фотографија", + "No temporary profile picture available, try again" : "Не е достапна привремена профилна слика, пробајте повторно", + "No crop data provided" : "Не се доставени податоци за сечење", + "No valid crop data provided" : "Нема валидни податоци за сечење", + "Crop is not square" : "Сечењето не е правоаголно", "Sunday" : "Недела", "Monday" : "Понеделник", "Tuesday" : "Вторник", @@ -26,12 +38,23 @@ "December" : "Декември", "Settings" : "Подесувања", "Saving..." : "Снимам...", + "Couldn't send reset email. Please contact your administrator." : "Не можам да истпратам порака за ресетирање. Ве молам контактирајте го вашиот администратор.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Врската за ресетирање на вашата лозинка е испратена на вашата е-адреса. Ако не ја добиете во разумно време, проверете ги вашите папки за спам/ѓубре.<br>Ако не е таму прашајте го вашиот локален администратор.", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Вашите датотеки се шифрирани. Ако не сте го овозможиле клучот за враќање, нема да можете да ги повратите вашите податоци откога вашата лозинка ќе биде ресетирана.<br>Ако не сте сигурни што да правите, ве молам контактирајте го вашиот локален администратор пред да продолжите.<br/>Дали навистина сакате да продолжите?", + "I know what I'm doing" : "Знам што правам", + "Password can not be changed. Please contact your administrator." : "Лозинката не може да се промени. Ве молам контактирајте го вашиот администратор.", "No" : "Не", "Yes" : "Да", "Choose" : "Избери", + "Error loading file picker template: {error}" : "Грешка при вчитување на образецот за одбирач на датотеки: {error}", "Ok" : "Во ред", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], + "Error loading message template: {error}" : "Грешка при вчитување на образецот за порака: {error}", + "read-only" : "само за читање", "One file conflict" : "Конфликт со една датотека", + "New Files" : "Нови датотеки", + "Already existing files" : "Постоечки датотеки", + "Which files do you want to keep?" : "Кои датотеки сакате да ги задржите?", + "If you select both versions, the copied file will have a number added to its name." : "Ако ги одберете и двете верзии, копираната датотека ќе има број додаден на нејзиното име.", "Cancel" : "Откажи", "Continue" : "Продолжи", "(all selected)" : "(сите одбрани)", @@ -42,7 +65,14 @@ "So-so password" : "Така така лозинка", "Good password" : "Добра лозинка", "Strong password" : "Јака лозинка", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Вашиот веб опслужувач сеуште не е точно подесен да овозможува синхронизација на датотеки бидејќи интерфејсот за WebDAV изгледа дека е расипан. ", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овој опслужувач нема работна Интернет врска. Ова значи дека некои опции како што е монтирање на надворешни складишта, известувања за ажурирање или инсталации на апликации од 3-ти лица нема да работат. Пристапот на датотеки од далечина и праќање на пораки за известувања може исто така да не работат. Ви советуваме да овозможите Интернет врска за овој опслужувач ако сакате да ги имате сите опции. ", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Вашата папка за податоци и вашите датотеки се најверојатно достапни од интернет. Датотеката .htaccess не работи. Строго ви препорачуваме да го подесите вашиот веб опслужувач на начин на кој вашата папка за податоци не е веќе достапна од интернет или да ја преместите папката за податоци надвор од коренот на веб опслужувачот.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не еконфигуриран кеш за меморијата. За да ги подобрите перформансите ве молам конфигурирајте memcache ако е достапно. Дополнителни информации можат да се најдат во нашата <a href=\"{docLink}\">документација</a>.", + "Error occurred while checking server setup" : "Се случи грешка при проверката на подесувањата на опслужувачот", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заглавието \"{header}\" не е конфигурирано да биде еднакво на \"{expected}\". Ова е потенцијално сигурносен ризик и препорачуваме да прилагодат подесувањата.", "Shared" : "Споделен", + "Shared with {recipients}" : "Споделено со {recipients}", "Share" : "Сподели", "Error" : "Грешка", "Error while sharing" : "Грешка при споделување", @@ -50,6 +80,8 @@ "Error while changing permissions" : "Грешка при промена на привилегии", "Shared with you and the group {group} by {owner}" : "Споделено со Вас и групата {group} од {owner}", "Shared with you by {owner}" : "Споделено со Вас од {owner}", + "Share with users or groups …" : "Сподели со корисници или групи ...", + "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", "Share link" : "Сподели ја врската", "Password protect" : "Заштити со лозинка", "Password" : "Лозинка", @@ -63,6 +95,7 @@ "Shared in {item} with {user}" : "Споделено во {item} со {user}", "Unshare" : "Не споделувај", "notify by email" : "извести преку електронска пошта", + "can share" : "може да споделува", "can edit" : "може да се измени", "access control" : "контрола на пристап", "create" : "креирај", @@ -79,13 +112,11 @@ "Add" : "Додади", "Edit tags" : "Уреди ги таговите", "No tags selected for deletion." : "Не се селектирани тагови за бришење.", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Надградбата беше успешна. Веднаш ве префрлам на вашиот ownCloud.", "%s password reset" : "%s ресетирање на лозинката", "Use the following link to reset your password: {link}" : "Користете ја следната врска да ја ресетирате Вашата лозинка: {link}", "New password" : "Нова лозинка", "Reset password" : "Ресетирај лозинка", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Лично", "Users" : "Корисници", "Apps" : "Аппликации", @@ -100,7 +131,6 @@ "Access forbidden" : "Забранет пристап", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Здраво,\n\nСамо да ве известам дека %s shared %s with you.\nView it: %s\n\n", "Cheers!" : "Поздрав!", - "Security Warning" : "Безбедносно предупредување", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Вашиот директориум со податоци и датотеки се веројатно достапни преку интенернт поради што .htaccess датотеката не функционира.", "Create an <strong>admin account</strong>" : "Направете <strong>администраторска сметка</strong>", "Username" : "Корисничко име", diff --git a/core/l10n/ml_IN.js b/core/l10n/ml_IN.js index 1830c8d7f5c..986ea54b512 100644 --- a/core/l10n/ml_IN.js +++ b/core/l10n/ml_IN.js @@ -1,9 +1,6 @@ OC.L10N.register( "core", { - "Ok" : "ശരി ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Ok" : "ശരി " }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ml_IN.json b/core/l10n/ml_IN.json index 2bfe4dc8e76..fea5389f3ad 100644 --- a/core/l10n/ml_IN.json +++ b/core/l10n/ml_IN.json @@ -1,7 +1,4 @@ { "translations": { - "Ok" : "ശരി ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Ok" : "ശരി " },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/mn.js b/core/l10n/mn.js index 6286dc4487c..bc1ffe9f8bd 100644 --- a/core/l10n/mn.js +++ b/core/l10n/mn.js @@ -9,11 +9,8 @@ OC.L10N.register( "Friday" : "Баасан", "Saturday" : "Бямба", "Settings" : "Тохиргоо", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Share" : "Түгээх", "Password" : "Нууц үг", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Username" : "Хэрэглэгчийн нэр" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/mn.json b/core/l10n/mn.json index a5e3fbd6e51..02a523dc003 100644 --- a/core/l10n/mn.json +++ b/core/l10n/mn.json @@ -7,11 +7,8 @@ "Friday" : "Баасан", "Saturday" : "Бямба", "Settings" : "Тохиргоо", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Share" : "Түгээх", "Password" : "Нууц үг", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Username" : "Хэрэглэгчийн нэр" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/ms_MY.js b/core/l10n/ms_MY.js index 747c493e729..a6c70c32110 100644 --- a/core/l10n/ms_MY.js +++ b/core/l10n/ms_MY.js @@ -25,29 +25,26 @@ OC.L10N.register( "No" : "Tidak", "Yes" : "Ya", "Ok" : "Ok", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "Batal", "Share" : "Kongsi", "Error" : "Ralat", "Password" : "Kata laluan", + "Send" : "Hantar", "group" : "kumpulan", "can share" : "boleh berkongsi", "can edit" : "boleh mengubah", "Warning" : "Amaran", "Delete" : "Padam", "Add" : "Tambah", - "_download %n file_::_download %n files_" : [""], "Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}", "New password" : "Kata laluan baru", "Reset password" : "Penetapan semula kata laluan", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "Peribadi", "Users" : "Pengguna", "Apps" : "Aplikasi", "Admin" : "Admin", "Help" : "Bantuan", "Access forbidden" : "Larangan akses", - "Security Warning" : "Amaran keselamatan", "Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>", "Username" : "Nama pengguna", "Data folder" : "Fail data", diff --git a/core/l10n/ms_MY.json b/core/l10n/ms_MY.json index 9f08364d5a8..2e41332f778 100644 --- a/core/l10n/ms_MY.json +++ b/core/l10n/ms_MY.json @@ -23,29 +23,26 @@ "No" : "Tidak", "Yes" : "Ya", "Ok" : "Ok", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "Batal", "Share" : "Kongsi", "Error" : "Ralat", "Password" : "Kata laluan", + "Send" : "Hantar", "group" : "kumpulan", "can share" : "boleh berkongsi", "can edit" : "boleh mengubah", "Warning" : "Amaran", "Delete" : "Padam", "Add" : "Tambah", - "_download %n file_::_download %n files_" : [""], "Use the following link to reset your password: {link}" : "Guna pautan berikut untuk menetapkan semula kata laluan anda: {link}", "New password" : "Kata laluan baru", "Reset password" : "Penetapan semula kata laluan", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "Peribadi", "Users" : "Pengguna", "Apps" : "Aplikasi", "Admin" : "Admin", "Help" : "Bantuan", "Access forbidden" : "Larangan akses", - "Security Warning" : "Amaran keselamatan", "Create an <strong>admin account</strong>" : "buat <strong>akaun admin</strong>", "Username" : "Nama pengguna", "Data folder" : "Fail data", diff --git a/core/l10n/my_MM.js b/core/l10n/my_MM.js index f65594c4e20..a800e908dcd 100644 --- a/core/l10n/my_MM.js +++ b/core/l10n/my_MM.js @@ -17,7 +17,6 @@ OC.L10N.register( "Yes" : "ဟုတ်", "Choose" : "ရွေးချယ်", "Ok" : "အိုကေ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "ပယ်ဖျက်မည်", "Password" : "စကားဝှက်", "Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်", @@ -28,14 +27,11 @@ OC.L10N.register( "delete" : "ဖျက်မည်", "Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်", "Add" : "ပေါင်းထည့်", - "_download %n file_::_download %n files_" : [""], "New password" : "စကားဝှက်အသစ်", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Users" : "သုံးစွဲသူ", "Apps" : "Apps", "Admin" : "အက်ဒမင်", "Help" : "အကူအညီ", - "Security Warning" : "လုံခြုံရေးသတိပေးချက်", "Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်", "Username" : "သုံးစွဲသူအမည်", "Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်", diff --git a/core/l10n/my_MM.json b/core/l10n/my_MM.json index a64e4346441..329fd194319 100644 --- a/core/l10n/my_MM.json +++ b/core/l10n/my_MM.json @@ -15,7 +15,6 @@ "Yes" : "ဟုတ်", "Choose" : "ရွေးချယ်", "Ok" : "အိုကေ", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "ပယ်ဖျက်မည်", "Password" : "စကားဝှက်", "Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်", @@ -26,14 +25,11 @@ "delete" : "ဖျက်မည်", "Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်", "Add" : "ပေါင်းထည့်", - "_download %n file_::_download %n files_" : [""], "New password" : "စကားဝှက်အသစ်", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Users" : "သုံးစွဲသူ", "Apps" : "Apps", "Admin" : "အက်ဒမင်", "Help" : "အကူအညီ", - "Security Warning" : "လုံခြုံရေးသတိပေးချက်", "Create an <strong>admin account</strong>" : "<strong>အက်ဒမင်အကောင့်</strong>တစ်ခုဖန်တီးမည်", "Username" : "သုံးစွဲသူအမည်", "Data folder" : "အချက်အလက်ဖိုလ်ဒါလ်", diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index 68ae6325007..c01e230ac74 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -4,15 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s", "Turned on maintenance mode" : "Slo på vedlikeholdsmodus", "Turned off maintenance mode" : "Slo av vedlikeholdsmodus", + "Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv", "Updated database" : "Oppdaterte databasen", "Checked database schema update" : "Sjekket oppdatering av databaseskjema", "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for apper", "Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s", + "Repair warning: " : "Advarsel fra reparering: ", + "Repair error: " : "Feil ved reparering: ", + "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apper har blitt deaktivert: %s", + "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s", + "Invalid file provided" : "Ugyldig fil oppgitt", "No image or file provided" : "Bilde eller fil ikke angitt", "Unknown filetype" : "Ukjent filtype", "Invalid image" : "Ugyldig bilde", "No temporary profile picture available, try again" : "Foreløpig profilbilde ikke tilgjengelig. Prøv igjen", "No crop data provided" : "Ingen beskjæringsinformasjon angitt", + "No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt", + "Crop is not square" : "Beskjæringen er ikke kvadratisk", "Sunday" : "Søndag", "Monday" : "Mandag", "Tuesday" : "Tirsdag", @@ -62,7 +70,15 @@ OC.L10N.register( "So-so password" : "So-so-passord", "Good password" : "Bra passord", "Strong password" : "Sterkt passord", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", "Share" : "Del", @@ -72,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Feil ved endring av tillatelser", "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}", "Shared with you by {owner}" : "Delt med deg av {owner}", - "Share with user or group …" : "Del med bruker eller gruppe …", + "Share with users or groups …" : "Del med brukere eller grupper ...", + "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud", "Share link" : "Del lenke", "The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages", "Link" : "Lenke", @@ -85,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Sett utløpsdato", "Expiration" : "Utløpsdato", "Expiration date" : "Utløpsdato", + "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen", "Adding user..." : "Legger til bruker...", "group" : "gruppe", "remote" : "ekstern", @@ -117,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"], + "{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.", "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}. Dette kan ta litt tid.", "Please reload the page." : "Vennligst last siden på nytt.", "The update was unsuccessful. " : "Oppdateringen var mislykket.", + "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.", "Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.", @@ -130,7 +151,7 @@ OC.L10N.register( "New Password" : "Nytt passord", "Reset password" : "Tilbakestill passord", "Searching other places" : "Søker andre steder", - "No search result in other places" : "Intet søkeresultat fra andre steder", + "No search results in other places" : "Ingen søkeresultater på andre steder", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} søkeresultat fra andre steder","{count} søkeresultater fra andre steder"], "Personal" : "Personlig", "Users" : "Brukere", @@ -158,12 +179,13 @@ OC.L10N.register( "Technical details" : "Tekniske detaljer", "Remote Address: %s" : "Ekstern adresse: %s", "Request ID: %s" : "Forespørsels-ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Melding: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", "Trace" : "Trace", - "Security Warning" : "Sikkerhetsadvarsel", + "Security warning" : "Sikkerhetsadvarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.", "Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>", @@ -172,22 +194,28 @@ OC.L10N.register( "Data folder" : "Datamappe", "Configure the database" : "Konfigurer databasen", "Only %s is available." : "Kun %s er tilgjengelig.", + "Install and activate additional PHP modules to choose other database types." : "Installer og aktiver flere PHP-moduler for å velge andre databasetyper.", + "For more details check out the documentation." : "Sjekk dokumentasjonen for flere detaljer.", "Database user" : "Databasebruker", "Database password" : "Databasepassord", "Database name" : "Databasenavn", "Database tablespace" : "Database tabellområde", "Database host" : "Databasevert", - "Performance Warning" : "Advarsel om ytelse", + "Performance warning" : "Ytelsesadvarsel", "SQLite will be used as database." : "SQLite vil bli brukt som database.", "For larger installations we recommend to choose a different database backend." : "For større installasjoner anbefaler vi å velge en annen database.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering", "Finish setup" : "Fullfør oppsetting", "Finishing …" : "Ferdigstiller ...", - "%s is available. Get more information on how to update." : "%s er tilgjengelig. Få mer informasjon om hvordan du kan oppdatere.", + "Need help?" : "Trenger du hjelp?", + "See the documentation" : "Se dokumentasjonen", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.", "Log out" : "Logg ut", "Search" : "Søk", "Server side authentication failed!" : "Autentisering feilet på serveren!", "Please contact your administrator." : "Vennligst kontakt administratoren din.", + "An internal error occured." : "Det oppstod en intern feil.", + "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", "Forgot your password? Reset it!" : "Glemt passordet ditt? Tilbakestill det!", "remember" : "husk", "Log in" : "Logg inn", @@ -207,6 +235,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.", "Start update" : "Start oppdatering", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:", + "This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instansen er for øyeblikket i vedlikeholdsmodus, noe som kan vare en stund.", "This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen." }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 8d4bb6dba4a..16828a6427c 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -2,15 +2,23 @@ "Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s", "Turned on maintenance mode" : "Slo på vedlikeholdsmodus", "Turned off maintenance mode" : "Slo av vedlikeholdsmodus", + "Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv", "Updated database" : "Oppdaterte databasen", "Checked database schema update" : "Sjekket oppdatering av databaseskjema", "Checked database schema update for apps" : "Sjekket databaseskjema-oppdatering for apper", "Updated \"%s\" to %s" : "Oppdaterte \"%s\" til %s", + "Repair warning: " : "Advarsel fra reparering: ", + "Repair error: " : "Feil ved reparering: ", + "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apper har blitt deaktivert: %s", + "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s", + "Invalid file provided" : "Ugyldig fil oppgitt", "No image or file provided" : "Bilde eller fil ikke angitt", "Unknown filetype" : "Ukjent filtype", "Invalid image" : "Ugyldig bilde", "No temporary profile picture available, try again" : "Foreløpig profilbilde ikke tilgjengelig. Prøv igjen", "No crop data provided" : "Ingen beskjæringsinformasjon angitt", + "No valid crop data provided" : "Ingen gyldige beskjæringsdata oppgitt", + "Crop is not square" : "Beskjæringen er ikke kvadratisk", "Sunday" : "Søndag", "Monday" : "Mandag", "Tuesday" : "Tirsdag", @@ -60,7 +68,15 @@ "So-so password" : "So-so-passord", "Good password" : "Bra passord", "Strong password" : "Sterkt passord", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web-serveren din er ikke satt opp til å tillate synkronisering av filer ennå, fordi WebDAV-grensesnittet ikke ser ut til å virke.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Denne serveren har ingen fungerende internett-forbindelse. Dette betyr at noen funksjoner, som tilknytning av eksterne lagre, varslinger om oppdateringer eller installering av tredjeparts apper ikke vil virke. Fjerntilgang til filer og utsending av varsler på e-post vil kanskje ikke virke heller. Vi anbefaler å aktivere en internett-forbindelse for denne serveren hvis du vil ha full funksjonalitet.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Du aksesserer denne nettsiden via HTTP. Vi anbefaler på det sterkeste at du konfigurerer serveren til å kreve HTTPS i stedet, som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", "Shared" : "Delt", "Shared with {recipients}" : "Delt med {recipients}", "Share" : "Del", @@ -70,7 +86,9 @@ "Error while changing permissions" : "Feil ved endring av tillatelser", "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppen {group} av {owner}", "Shared with you by {owner}" : "Delt med deg av {owner}", - "Share with user or group …" : "Del med bruker eller gruppe …", + "Share with users or groups …" : "Del med brukere eller grupper ...", + "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Del med personer på andre ownCloud-installasjoner med syntaksen brukernavn@example.com/owncloud", "Share link" : "Del lenke", "The public link will expire no later than {days} days after it is created" : "Den offentlige lenken vil utløpe senest {days} dager etter at den lages", "Link" : "Lenke", @@ -83,6 +101,7 @@ "Set expiration date" : "Sett utløpsdato", "Expiration" : "Utløpsdato", "Expiration date" : "Utløpsdato", + "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen", "Adding user..." : "Legger til bruker...", "group" : "gruppe", "remote" : "ekstern", @@ -115,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Hallo {name}, været er {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["last ned %n fil","last ned %n filer"], + "{version} is available. Get more information on how to update." : "{version} er tilgjengelig. Få mer informasjon om å oppdatere.", "Updating {productName} to version {version}, this may take a while." : "Oppdaterer {productName} til versjon {version}. Dette kan ta litt tid.", "Please reload the page." : "Vennligst last siden på nytt.", "The update was unsuccessful. " : "Oppdateringen var mislykket.", + "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.", "Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.", @@ -128,7 +149,7 @@ "New Password" : "Nytt passord", "Reset password" : "Tilbakestill passord", "Searching other places" : "Søker andre steder", - "No search result in other places" : "Intet søkeresultat fra andre steder", + "No search results in other places" : "Ingen søkeresultater på andre steder", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} søkeresultat fra andre steder","{count} søkeresultater fra andre steder"], "Personal" : "Personlig", "Users" : "Brukere", @@ -156,12 +177,13 @@ "Technical details" : "Tekniske detaljer", "Remote Address: %s" : "Ekstern adresse: %s", "Request ID: %s" : "Forespørsels-ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Kode: %s", "Message: %s" : "Melding: %s", "File: %s" : "Fil: %s", "Line: %s" : "Linje: %s", "Trace" : "Trace", - "Security Warning" : "Sikkerhetsadvarsel", + "Security warning" : "Sikkerhetsadvarsel", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappen og filene dine er sannsynligvis tilgjengelig fra Internett fordi .htaccess-filen ikke fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "For informasjon om hvordan du setter opp serveren din riktig, se <a href=\"%s\" target=\"_blank\">dokumentasjonen</a>.", "Create an <strong>admin account</strong>" : "Opprett en <strong>administrator-konto</strong>", @@ -170,22 +192,28 @@ "Data folder" : "Datamappe", "Configure the database" : "Konfigurer databasen", "Only %s is available." : "Kun %s er tilgjengelig.", + "Install and activate additional PHP modules to choose other database types." : "Installer og aktiver flere PHP-moduler for å velge andre databasetyper.", + "For more details check out the documentation." : "Sjekk dokumentasjonen for flere detaljer.", "Database user" : "Databasebruker", "Database password" : "Databasepassord", "Database name" : "Databasenavn", "Database tablespace" : "Database tabellområde", "Database host" : "Databasevert", - "Performance Warning" : "Advarsel om ytelse", + "Performance warning" : "Ytelsesadvarsel", "SQLite will be used as database." : "SQLite vil bli brukt som database.", "For larger installations we recommend to choose a different database backend." : "For større installasjoner anbefaler vi å velge en annen database.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "SQLite er spesielt frarådet om man bruker desktopklienten til filsynkronisering", "Finish setup" : "Fullfør oppsetting", "Finishing …" : "Ferdigstiller ...", - "%s is available. Get more information on how to update." : "%s er tilgjengelig. Få mer informasjon om hvordan du kan oppdatere.", + "Need help?" : "Trenger du hjelp?", + "See the documentation" : "Se dokumentasjonen", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Denne applikasjonen krever JavaScript for å fungere korrekt. Vennligst {linkstart}aktiver JavaScript{linkend} og last siden på nytt.", "Log out" : "Logg ut", "Search" : "Søk", "Server side authentication failed!" : "Autentisering feilet på serveren!", "Please contact your administrator." : "Vennligst kontakt administratoren din.", + "An internal error occured." : "Det oppstod en intern feil.", + "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", "Forgot your password? Reset it!" : "Glemt passordet ditt? Tilbakestill det!", "remember" : "husk", "Log in" : "Logg inn", @@ -205,6 +233,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.", "Start update" : "Start oppdatering", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "For å unngå tidsavbrudd ved store installasjoner, kan du i stedet kjøre følgende kommando fra installasjonsmappen:", + "This %s instance is currently in maintenance mode, which may take a while." : "Denne %s-instansen er for øyeblikket i vedlikeholdsmodus, noe som kan vare en stund.", "This page will refresh itself when the %s instance is available again." : "Denne siden vil bli lastet på nytt når %s-instansen er tilgjengelig igjen." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/nl.js b/core/l10n/nl.js index a481531f666..5634cf00698 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -4,6 +4,7 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Kon geen e-mail sturen aan de volgende gebruikers: %s", "Turned on maintenance mode" : "Onderhoudsmodus ingeschakeld", "Turned off maintenance mode" : "Onderhoudsmodus uitgeschakeld", + "Maintenance mode is kept active" : "Onderhoudsmodus blijft actief", "Updated database" : "Database bijgewerkt", "Checked database schema update" : "Database schema-update gecontroleerd", "Checked database schema update for apps" : "Database schema-update voor apps gecontroleerd", @@ -11,7 +12,7 @@ OC.L10N.register( "Repair warning: " : "Reparatiewaarschuwing:", "Repair error: " : "Reparatiefout:", "Following incompatible apps have been disabled: %s" : "De volgende incompatibele apps zijn uitgeschakeld: %s", - "Following 3rd party apps have been disabled: %s" : "De volgende 3e partij apps zijn uitgeschakeld: %s", + "Following apps have been disabled: %s" : "De volgende apps zijn gedeactiveerd: %s", "Invalid file provided" : "Ongeldig bestand opgegeven", "No image or file provided" : "Geen afbeelding of bestand opgegeven", "Unknown filetype" : "Onbekend bestandsformaat", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a href=\"{docLink}\">documentatie</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a href=\"{docLink}\">documentatie</a>.", "Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet geconfigureerd als \"{expected}\". Dit is een mogelijk beveiligigsrisico en we adviseren dan ook om deze instelling aan te passen.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"2,678,400\" seconden. Dit is een mogelijk beveiligingsrisico en we adviseren deze instelling aan te passen.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met deze site verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "U bent met deze site verbonden over HTTP. We adviseren met klem uw server zo te configureren dat HTTPS wordt vereist, zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.", "Shared" : "Gedeeld", "Shared with {recipients}" : "Gedeeld met {recipients}", "Share" : "Delen", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Fout tijdens het veranderen van permissies", "Shared with you and the group {group} by {owner}" : "Gedeeld met u en de groep {group} door {owner}", "Shared with you by {owner}" : "Gedeeld met u door {owner}", - "Share with user or group …" : "Delen met gebruiker of groep ...", + "Share with users or groups …" : "Delen met gebruikers of groepen ...", + "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Delen met mensen op andere ownClouds via de syntax gebruikersnaam@voorbeeld.org/owncloud", "Share link" : "Deel link", "The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken", "Link" : "Link", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Stel vervaldatum in", "Expiration" : "Vervaltermijn", "Expiration date" : "Vervaldatum", + "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw", "Adding user..." : "Toevoegen gebruiker...", "group" : "groep", "remote" : "extern", @@ -130,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hallo {name}, het is hier {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], + "{version} is available. Get more information on how to update." : "{version} is beschikbaar. Meer informatie over het bijwerken.", "Updating {productName} to version {version}, this may take a while." : "Bijwerken {productName} naar versie {version}, dit kan even duren.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. " : "De update is niet geslaagd.", + "The update was successful. There were warnings." : "De update is geslaagd. Er zijn wel waarschuwingen.", "The update was successful. Redirecting you to ownCloud now." : "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.", "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is.", @@ -143,7 +151,7 @@ OC.L10N.register( "New Password" : "Nieuw wachtwoord", "Reset password" : "Reset wachtwoord", "Searching other places" : "Zoeken op andere plaatsen", - "No search result in other places" : "Geen zoekresultaten op andere plaatsen", + "No search results in other places" : "Geen zoekresultaten op andere plaatsen", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} zoekresultaat op andere plaatsen","{count} zoekresultaten op andere plaatsen"], "Personal" : "Persoonlijk", "Users" : "Gebruikers", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Technische details", "Remote Address: %s" : "Extern adres: %s", "Request ID: %s" : "Aanvraag ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Code: %s", "Message: %s" : "Boodschap: %s", "File: %s" : "Bestand: %s", "Line: %s" : "Regel: %s", "Trace" : "Trace", - "Security Warning" : "Beveiligingswaarschuwing", + "Security warning" : "Beveiligingswaarschuwing", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.", "Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Gegevensmap", "Configure the database" : "Configureer de database", "Only %s is available." : "Alleen %s is beschikbaar.", + "Install and activate additional PHP modules to choose other database types." : "Installeer en activeer aanvullende PHP modules om andere soorten databases te kiezen.", + "For more details check out the documentation." : "Voor meer informatie wordt u verwezen naar de documentatie.", "Database user" : "Gebruiker database", "Database password" : "Wachtwoord database", "Database name" : "Naam database", "Database tablespace" : "Database tablespace", "Database host" : "Databaseserver", - "Performance Warning" : "Prestatiewaarschuwing", + "Performance warning" : "Prestatiewaarschuwing", "SQLite will be used as database." : "SQLite wordt gebruikt als database.", "For larger installations we recommend to choose a different database backend." : "Voor grotere installaties adviseren we een andere database engine te kiezen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "Finish setup" : "Installatie afronden", "Finishing …" : "Afronden ...", + "Need help?" : "Hulp nodig?", + "See the documentation" : "Zie de documentatie", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.", - "%s is available. Get more information on how to update." : "%s is beschikbaar. Verkrijg meer informatie over het bijwerken.", "Log out" : "Afmelden", "Search" : "Zoeken", "Server side authentication failed!" : "Authenticatie bij de server mislukte!", "Please contact your administrator." : "Neem contact op met uw systeembeheerder.", + "An internal error occured." : "Er heeft zich een interne fout voorgedaan.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", "Forgot your password? Reset it!" : "Wachtwoord vergeten? Herstel het!", "remember" : "onthoud gegevens", "Log in" : "Meld u aan", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 37bc2723cbb..d106e938bd8 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -2,6 +2,7 @@ "Couldn't send mail to following users: %s " : "Kon geen e-mail sturen aan de volgende gebruikers: %s", "Turned on maintenance mode" : "Onderhoudsmodus ingeschakeld", "Turned off maintenance mode" : "Onderhoudsmodus uitgeschakeld", + "Maintenance mode is kept active" : "Onderhoudsmodus blijft actief", "Updated database" : "Database bijgewerkt", "Checked database schema update" : "Database schema-update gecontroleerd", "Checked database schema update for apps" : "Database schema-update voor apps gecontroleerd", @@ -9,7 +10,7 @@ "Repair warning: " : "Reparatiewaarschuwing:", "Repair error: " : "Reparatiefout:", "Following incompatible apps have been disabled: %s" : "De volgende incompatibele apps zijn uitgeschakeld: %s", - "Following 3rd party apps have been disabled: %s" : "De volgende 3e partij apps zijn uitgeschakeld: %s", + "Following apps have been disabled: %s" : "De volgende apps zijn gedeactiveerd: %s", "Invalid file provided" : "Ongeldig bestand opgegeven", "No image or file provided" : "Geen afbeelding of bestand opgegeven", "Unknown filetype" : "Onbekend bestandsformaat", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Uw webserver is nog niet goed ingesteld voor bestandssynchronisatie omdat de WebDAV interface verstoord lijkt.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Deze server heeft geen actieve internetverbinding. Dat betekent dat sommige functies, zoals aankoppelen van externe opslag, notificaties over updates of installatie van apps van 3e partijen niet werken. Ook het benaderen van bestanden vanaf een remote locatie en het versturen van notificatie emails kan mislukken. We adviseren om de internetverbinding voor deze server in te schakelen als u alle functies wilt gebruiken.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Uw data folder en uw bestanden zijn waarschijnlijk vanaf het internet bereikbaar. Het .htaccess-bestand werkt niet. We raden ten zeerste aan aan om uw webserver zodanig te configureren, dat de datadirectory niet bereikbaar is vanaf het internet of om uw datadirectory te verplaatsen naar een locatie buiten de document root van de webserver.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Er is geen geheugencache geconfigureerd. Om de prestaties te verhogen kunt u de memcache configureren als die beschikbaar is. Meer informatie vind u in onze <a href=\"{docLink}\">documentatie</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom is niet leesbaar door PHP, hetgeen wordt afgeraden wegens beveiligingsredenen. Meer informatie in onze <a href=\"{docLink}\">documentatie</a>.", "Error occurred while checking server setup" : "Een fout trad op bij checken serverconfiguratie", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet geconfigureerd als \"{expected}\". Dit is een mogelijk beveiligigsrisico en we adviseren dan ook om deze instelling aan te passen.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"2,678,400\" seconden. Dit is een mogelijk beveiligingsrisico en we adviseren deze instelling aan te passen.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "U bent met deze site verbonden over HTTP. We adviseren met klem uw server zo te configureren dat alleen HTTPS kan worden gebruikt.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "De \"{header}\" HTTP header is niet overeenkomstig met \"{expected}\" geconfigureerd. Dit is een potentieel security of privacy risico en we adviseren om deze instelling te wijzigen.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "De \"Strict-Transport-Security\" HTTP header is niet geconfigureerd als minimaal \"{seconds}\" seconden. Voor verbeterde beveiliging adviseren we HSTS in te schakelen zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "U bent met deze site verbonden over HTTP. We adviseren met klem uw server zo te configureren dat HTTPS wordt vereist, zoals beschreven in onze <a href=\"{docUrl}\">security tips</a>.", "Shared" : "Gedeeld", "Shared with {recipients}" : "Gedeeld met {recipients}", "Share" : "Delen", @@ -83,7 +86,9 @@ "Error while changing permissions" : "Fout tijdens het veranderen van permissies", "Shared with you and the group {group} by {owner}" : "Gedeeld met u en de groep {group} door {owner}", "Shared with you by {owner}" : "Gedeeld met u door {owner}", - "Share with user or group …" : "Delen met gebruiker of groep ...", + "Share with users or groups …" : "Delen met gebruikers of groepen ...", + "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Delen met mensen op andere ownClouds via de syntax gebruikersnaam@voorbeeld.org/owncloud", "Share link" : "Deel link", "The public link will expire no later than {days} days after it is created" : "De openbare link vervalt niet eerder dan {days} dagen na het aanmaken", "Link" : "Link", @@ -96,6 +101,7 @@ "Set expiration date" : "Stel vervaldatum in", "Expiration" : "Vervaltermijn", "Expiration date" : "Vervaldatum", + "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw", "Adding user..." : "Toevoegen gebruiker...", "group" : "groep", "remote" : "extern", @@ -128,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Hallo {name}, het is hier {weather}", "Hello {name}" : "Hallo {name}", "_download %n file_::_download %n files_" : ["download %n bestand","download %n bestanden"], + "{version} is available. Get more information on how to update." : "{version} is beschikbaar. Meer informatie over het bijwerken.", "Updating {productName} to version {version}, this may take a while." : "Bijwerken {productName} naar versie {version}, dit kan even duren.", "Please reload the page." : "Herlaad deze pagina.", "The update was unsuccessful. " : "De update is niet geslaagd.", + "The update was successful. There were warnings." : "De update is geslaagd. Er zijn wel waarschuwingen.", "The update was successful. Redirecting you to ownCloud now." : "De update is geslaagd. U wordt teruggeleid naar uw eigen ownCloud.", "Couldn't reset password because the token is invalid" : "Kon het wachtwoord niet herstellen, omdat het token ongeldig is", "Couldn't send reset email. Please make sure your username is correct." : "Kon e-mail niet versturen. Verifieer of uw gebruikersnaam correct is.", @@ -141,7 +149,7 @@ "New Password" : "Nieuw wachtwoord", "Reset password" : "Reset wachtwoord", "Searching other places" : "Zoeken op andere plaatsen", - "No search result in other places" : "Geen zoekresultaten op andere plaatsen", + "No search results in other places" : "Geen zoekresultaten op andere plaatsen", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} zoekresultaat op andere plaatsen","{count} zoekresultaten op andere plaatsen"], "Personal" : "Persoonlijk", "Users" : "Gebruikers", @@ -169,12 +177,13 @@ "Technical details" : "Technische details", "Remote Address: %s" : "Extern adres: %s", "Request ID: %s" : "Aanvraag ID: %s", + "Type: %s" : "Type: %s", "Code: %s" : "Code: %s", "Message: %s" : "Boodschap: %s", "File: %s" : "Bestand: %s", "Line: %s" : "Regel: %s", "Trace" : "Trace", - "Security Warning" : "Beveiligingswaarschuwing", + "Security warning" : "Beveiligingswaarschuwing", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Uw gegevensdirectory en bestanden zijn vermoedelijk bereikbaar vanaf het internet omdat het .htaccess-bestand niet functioneert.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Bekijk de <a href=\"%s\" target=\"_blank\">documentatie</a> voor Informatie over het correct configureren van uw server.", "Create an <strong>admin account</strong>" : "Maak een <strong>beheerdersaccount</strong> aan", @@ -183,23 +192,28 @@ "Data folder" : "Gegevensmap", "Configure the database" : "Configureer de database", "Only %s is available." : "Alleen %s is beschikbaar.", + "Install and activate additional PHP modules to choose other database types." : "Installeer en activeer aanvullende PHP modules om andere soorten databases te kiezen.", + "For more details check out the documentation." : "Voor meer informatie wordt u verwezen naar de documentatie.", "Database user" : "Gebruiker database", "Database password" : "Wachtwoord database", "Database name" : "Naam database", "Database tablespace" : "Database tablespace", "Database host" : "Databaseserver", - "Performance Warning" : "Prestatiewaarschuwing", + "Performance warning" : "Prestatiewaarschuwing", "SQLite will be used as database." : "SQLite wordt gebruikt als database.", "For larger installations we recommend to choose a different database backend." : "Voor grotere installaties adviseren we een andere database engine te kiezen.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Vooral wanneer de desktop client wordt gebruik voor bestandssynchronisatie wordt gebruik van sqlite afgeraden.", "Finish setup" : "Installatie afronden", "Finishing …" : "Afronden ...", + "Need help?" : "Hulp nodig?", + "See the documentation" : "Zie de documentatie", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Deze applicatie heeft JavaScript nodig. {linkstart}Activeer JavaScript{linkend} en ververs deze pagina.", - "%s is available. Get more information on how to update." : "%s is beschikbaar. Verkrijg meer informatie over het bijwerken.", "Log out" : "Afmelden", "Search" : "Zoeken", "Server side authentication failed!" : "Authenticatie bij de server mislukte!", "Please contact your administrator." : "Neem contact op met uw systeembeheerder.", + "An internal error occured." : "Er heeft zich een interne fout voorgedaan.", + "Please try again or contact your administrator." : "Probeer het opnieuw of neem contact op met uw beheerder.", "Forgot your password? Reset it!" : "Wachtwoord vergeten? Herstel het!", "remember" : "onthoud gegevens", "Log in" : "Meld u aan", diff --git a/core/l10n/nn_NO.js b/core/l10n/nn_NO.js index 887f0a6310e..21ec7302c78 100644 --- a/core/l10n/nn_NO.js +++ b/core/l10n/nn_NO.js @@ -83,20 +83,17 @@ OC.L10N.register( "The object type is not specified." : "Objekttypen er ikkje spesifisert.", "Delete" : "Slett", "Add" : "Legg til", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.", "%s password reset" : "%s passordnullstilling", "Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}", "New password" : "Nytt passord", "Reset password" : "Nullstill passord", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personleg", "Users" : "Brukarar", "Apps" : "Program", "Admin" : "Admin", "Help" : "Hjelp", "Access forbidden" : "Tilgang forbudt", - "Security Warning" : "Tryggleiksåtvaring", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.", "Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>", @@ -109,7 +106,6 @@ OC.L10N.register( "Database tablespace" : "Tabellnamnrom for database", "Database host" : "Databasetenar", "Finish setup" : "Fullfør oppsettet", - "%s is available. Get more information on how to update." : "%s er tilgjengeleg. Få meir informasjon om korleis du oppdaterer.", "Log out" : "Logg ut", "Search" : "Søk", "remember" : "hugs", diff --git a/core/l10n/nn_NO.json b/core/l10n/nn_NO.json index cabc85d91b1..d2b7abbe394 100644 --- a/core/l10n/nn_NO.json +++ b/core/l10n/nn_NO.json @@ -81,20 +81,17 @@ "The object type is not specified." : "Objekttypen er ikkje spesifisert.", "Delete" : "Slett", "Add" : "Legg til", - "_download %n file_::_download %n files_" : ["",""], "The update was successful. Redirecting you to ownCloud now." : "Oppdateringa er fullført. Sender deg vidare til ownCloud no.", "%s password reset" : "%s passordnullstilling", "Use the following link to reset your password: {link}" : "Klikk følgjande lenkje til å nullstilla passordet ditt: {link}", "New password" : "Nytt passord", "Reset password" : "Nullstill passord", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personleg", "Users" : "Brukarar", "Apps" : "Program", "Admin" : "Admin", "Help" : "Hjelp", "Access forbidden" : "Tilgang forbudt", - "Security Warning" : "Tryggleiksåtvaring", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Datamappa og filene dine er sannsynlegvis tilgjengelege frå Internett sidan .htaccess-fila ikkje fungerer.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Ver venleg og les <a href=\"%s\" target=\"_blank\">dokumentasjonen</a> for meir informasjon om korleis du konfigurerer tenaren din.", "Create an <strong>admin account</strong>" : "Lag ein <strong>admin-konto</strong>", @@ -107,7 +104,6 @@ "Database tablespace" : "Tabellnamnrom for database", "Database host" : "Databasetenar", "Finish setup" : "Fullfør oppsettet", - "%s is available. Get more information on how to update." : "%s er tilgjengeleg. Få meir informasjon om korleis du oppdaterer.", "Log out" : "Logg ut", "Search" : "Søk", "remember" : "hugs", diff --git a/core/l10n/oc.js b/core/l10n/oc.js index ce4608393dd..0c7d99c8f40 100644 --- a/core/l10n/oc.js +++ b/core/l10n/oc.js @@ -1,10 +1,28 @@ OC.L10N.register( "core", { + "Couldn't send mail to following users: %s " : "Impossible de mandar un corrièl als utilizaires seguents : %s", + "Turned on maintenance mode" : "Mòde de mantenença activat", + "Turned off maintenance mode" : "Mòde de mantenença desactivat", + "Updated database" : "Banca de donadas mesa a jorn", + "Checked database schema update" : "Mesa a jorn de l'esquèma de la banca de donadas verificada", + "Checked database schema update for apps" : "Mesa a jorn de l'esquèma de la banca de donadas per las aplicacions verificada", + "Updated \"%s\" to %s" : "Mesa a jorn de « %s » cap a %s", + "Repair warning: " : "Avertiment de reparacion :", + "Repair error: " : "Error de reparacion :", + "Following incompatible apps have been disabled: %s" : "Las aplicacions incompatiblas seguentas son estadas desactivadas : %s", + "Invalid file provided" : "Fichièr invalid", + "No image or file provided" : "Cap de fichièr pas provesit", + "Unknown filetype" : "Tipe de fichièr desconegut", + "Invalid image" : "Imatge pas valable", + "No temporary profile picture available, try again" : "Cap d'imatge temporari pas disponible pel profil. Ensajatz tornamai.", + "No crop data provided" : "Cap de donada de requadratge pas provesida", + "No valid crop data provided" : "Donadas de requadratge invalidas", + "Crop is not square" : "Lo requadratge es pas carrat", "Sunday" : "Dimenge", "Monday" : "Diluns", - "Tuesday" : "Dimarç", - "Wednesday" : "Dimecres", + "Tuesday" : "Dimars", + "Wednesday" : "Dimècres", "Thursday" : "Dijòus", "Friday" : "Divendres", "Saturday" : "Dissabte", @@ -16,64 +34,202 @@ OC.L10N.register( "June" : "junh", "July" : "julhet", "August" : "agost", - "September" : "septembre", + "September" : "setembre", "October" : "octobre", - "November" : "Novembre", - "December" : "Decembre", - "Settings" : "Configuracion", - "Saving..." : "Enregistra...", + "November" : "novembre", + "December" : "decembre", + "Settings" : "Paramètres", + "Saving..." : "Enregistrament…", + "Couldn't send reset email. Please contact your administrator." : "Impossible de mandar lo corrièl de reïnicializacion. Contactatz vòstre administrator.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lo ligam que permet de reïnicializar vòstre senhal ven d'èsser mandat a vòstra adreça de corrièl.<br>Se o recebètz pas dins un relambi rasonable, contactatz vòstre administrator.<br>Doblidetz pas de verificar dins vòstre dorsièr corrièr indesirable / spam!", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vòstres fichièrs son chifrats. Se avètz pas activat la clau de recuperacion, i aurà pas cap de mejan de recuperar vòstras donadas un còp lo senhal reïnicializat.<br />Se sètz pas segur(a) de çò que fasètz, contactatz vòstre administrator abans de contunhar. <br />Sètz segur que volètz contunhar ?", + "I know what I'm doing" : "Sabi çò que fau", + "Password can not be changed. Please contact your administrator." : "Lo senhal pòt pas èsser modificat. Contactatz vòstre administrator.", "No" : "Non", "Yes" : "Òc", - "Choose" : "Causís", - "Ok" : "D'accòrdi", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Cancel" : "Annula", - "Share" : "Parteja", + "Choose" : "Causir", + "Error loading file picker template: {error}" : "Error al moment del cargament del modèl del selector de fichièrs : {error}", + "Ok" : "D'acòrdi", + "Error loading message template: {error}" : "Error de cargament del modèl de messatge : {error}", + "read-only" : "Lectura sola", + "_{count} file conflict_::_{count} file conflicts_" : ["{count} fichièr en conflicte","{count} fichièrs en conflicte"], + "One file conflict" : "Un conflicte de fichièr", + "New Files" : "Fichièrs novèls", + "Already existing files" : "Fichièrs ja existents", + "Which files do you want to keep?" : "Quines fichièrs volètz gardar ?", + "If you select both versions, the copied file will have a number added to its name." : "Se seleccionatz las doas versions, un nombre serà apondut al nom del fichièr copiat.", + "Cancel" : "Anullar", + "Continue" : "Contunhar", + "(all selected)" : "(totes seleccionats)", + "({count} selected)" : "({count} seleccionat(s))", + "Error loading file exists template" : "Error de cargament del modèl de fichièr existent", + "Very weak password" : "Senhal fòrt feble", + "Weak password" : "Senhal feble", + "So-so password" : "Senhal tot bèl juste acceptable", + "Good password" : "Senhal de seguretat sufisenta", + "Strong password" : "Senhal fòrt", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la <a href=\"{docLink}\">documentacion</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra <a href=\"{docLink}\">documentacion</a>.", + "Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.", + "Shared" : "Partejat", + "Shared with {recipients}" : "Partejat amb {recipients}", + "Share" : "Partejar", "Error" : "Error", - "Error while sharing" : "Error al partejar", - "Error while unsharing" : "Error al non partejar", - "Error while changing permissions" : "Error al cambiar permissions", - "Password protect" : "Parat per senhal", + "Error while sharing" : "Error al moment de la mesa en partiment", + "Error while unsharing" : "Error al moment de l'anullacion del partiment", + "Error while changing permissions" : "Error al moment del cambiament de las permissions", + "Shared with you and the group {group} by {owner}" : "Partejat amb vos e lo grop {group} per {owner}", + "Shared with you by {owner}" : "Partejat amb vos per {owner}", + "Share with users or groups …" : "Partejar amb d'utilizaires o gropes...", + "Share with users, groups or remote users …" : "Partejar amb d'utilizaires, gropes, o utilizaires distants", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partejatz amb de personas sus d'autres ownClouds en utilizant la sintaxi utilizaire@exemple.com/owncloud", + "Share link" : "Partejar per ligam public", + "The public link will expire no later than {days} days after it is created" : "Aqueste ligam public expirarà al mai tard {days} jorns aprèp sa creacion.", + "Link" : "Ligam", + "Password protect" : "Protegir per un senhal", "Password" : "Senhal", - "Set expiration date" : "Met la data d'expiracion", + "Choose a password for the public link" : "Causissètz un senhal pel ligam public", + "Allow editing" : "Permetre la modificacion", + "Email link to person" : "Mandar lo ligam per corrièl", + "Send" : "Mandar", + "Set expiration date" : "Especificar una data d'expiracion", + "Expiration" : "Expiracion", "Expiration date" : "Data d'expiracion", + "An error occured. Please try again" : "Una error s'es produsida. Mercé d'ensajar tornamai", + "Adding user..." : "Apondon de l'utilizaire...", "group" : "grop", - "Resharing is not allowed" : "Tornar partejar es pas permis", - "Unshare" : "Pas partejador", + "remote" : "distant", + "Resharing is not allowed" : "Lo repartiment es pas autorizat", + "Shared in {item} with {user}" : "Partejat dins {item} amb {user}", + "Unshare" : "Partejar pas mai", + "notify by email" : "notificar per corrièl", + "can share" : "pòt partejar", "can edit" : "pòt modificar", - "access control" : "Contraròtle d'acces", - "create" : "crea", - "delete" : "escafa", - "Password protected" : "Parat per senhal", - "Error unsetting expiration date" : "Error al metre de la data d'expiracion", - "Error setting expiration date" : "Error setting expiration date", - "Delete" : "Escafa", - "Add" : "Ajusta", - "_download %n file_::_download %n files_" : ["",""], - "Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}", + "access control" : "contraròtle d'accès", + "create" : "crear", + "change" : "modificacion", + "delete" : "suprimir", + "Password protected" : "Protegit per senhal", + "Error unsetting expiration date" : "Error al moment de la supression de la data d'expiracion", + "Error setting expiration date" : "Error al moment de l'especificacion de la data d'expiracion", + "Sending ..." : "Mandadís…", + "Email sent" : "Corrièl mandat", + "Warning" : "Atencion", + "The object type is not specified." : "Lo tipe d'objècte es pas especificat.", + "Enter new" : "Picar un novèl", + "Delete" : "Suprimir", + "Add" : "Apondre", + "Edit tags" : "Modificar las etiquetas", + "Error loading dialog template: {error}" : "Error al moment del cargament del modèl de dialòg : {error}", + "No tags selected for deletion." : "Cap d'etiqueta pas seleccionada per la supression.", + "unknown text" : "tèxte desconegut", + "Hello world!" : "Hello world!", + "sunny" : "ensolelhat", + "Hello {name}, the weather is {weather}" : "Bonjorn {name}, lo temps es {weather}", + "Hello {name}" : "Adiu {name}", + "_download %n file_::_download %n files_" : ["Telecargar %n fichièr","Telecargar %n fichièrs"], + "{version} is available. Get more information on how to update." : "La version {version} es disponibla. Obtenètz mai d'informacions a prepaus d'aquesta mesa a jorn.", + "Updating {productName} to version {version}, this may take a while." : "La mesa a jorn de {productName} cap a la version {version} es en cors. Aquò pòt prene un certan temps.", + "Please reload the page." : "Recargatz la pagina.", + "The update was unsuccessful. " : "La mesa a jorn a fracassat.", + "The update was successful. Redirecting you to ownCloud now." : "La mesa a jorn a capitat. Ara sètz redirigit cap a ownCloud.", + "Couldn't reset password because the token is invalid" : "Impossible de reïnicializar lo senhal perque lo geton es pas valable.", + "Couldn't send reset email. Please make sure your username is correct." : "Impossible de mandar lo corrièl de reïnicializacion. Verificatz que vòstre nom d'utilizaire es corrècte.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible de mandar lo corrièl de reïnicializacion perque i a pas cap d'adreça de corrièl per aqueste utilizaire. Contactatz vòstre administrator.", + "%s password reset" : "Reïnicializacion de vòstre senhal %s", + "Use the following link to reset your password: {link}" : "Utilizatz lo ligam seguent per reïnicializar vòstre senhal : {link}", "New password" : "Senhal novèl", - "Reset password" : "Senhal tornat botar", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "New Password" : "Senhal novèl", + "Reset password" : "Reïnicializar lo senhal", + "Searching other places" : "Recèrca en cors dins d'autres emplaçaments", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultat dins d'autres emplaçaments","{count} resultats dins d'autres emplaçaments"], "Personal" : "Personal", - "Users" : "Usancièrs", - "Apps" : "Apps", - "Admin" : "Admin", + "Users" : "Utilizaires", + "Apps" : "Aplicacions", + "Admin" : "Administracion", "Help" : "Ajuda", - "Access forbidden" : "Acces enebit", - "Security Warning" : "Avertiment de securitat", - "Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>", - "Username" : "Non d'usancièr", - "Data folder" : "Dorsièr de donadas", - "Configure the database" : "Configura la basa de donadas", - "Database user" : "Usancièr de la basa de donadas", - "Database password" : "Senhal de la basa de donadas", - "Database name" : "Nom de la basa de donadas", - "Database tablespace" : "Espandi de taula de basa de donadas", - "Database host" : "Òste de basa de donadas", - "Finish setup" : "Configuracion acabada", - "Log out" : "Sortida", - "Search" : "Cèrca", - "remember" : "bremba-te", - "Log in" : "Dintrada" + "Error loading tags" : "Error al moment del cargament de las etiquetas", + "Tag already exists" : "L'etiqueta existís ja.", + "Error deleting tag(s)" : "Error de supression d'etiqueta(s)", + "Error tagging" : "Error al moment de l'etiquetatge", + "Error untagging" : "Error al moment del desetiquetatge", + "Error favoriting" : "Error al moment de la mesa en favorit", + "Error unfavoriting" : "Error al moment de la supression dels favorits", + "Access forbidden" : "Accès interdich", + "File not found" : "Fichièr pas trobat", + "The specified document has not been found on the server." : "Impossible de trobar lo document especificat sul servidor.", + "You can click here to return to %s." : "Podètz clicar aicí per tornar a %s.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjorn,\n\nVos informam que %s a partejat \"%s\" amb vos.\nI podètz accedir a l'adreça seguenta : %s\n", + "The share will expire on %s." : "Lo partiment expirarà lo %s.", + "Cheers!" : "A lèu !", + "Internal Server Error" : "Error intèrna del servidor", + "The server encountered an internal error and was unable to complete your request." : "Lo servidor a rencontrat una error intèrna e es incapable d'executar vòstra requèsta.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Contactatz l'administrator del servidor se aquesta error apareis mantun còp. Jonhètz los detalhs tecnics a vòstre rapòrt.", + "More details can be found in the server log." : "Lo fichièr jornal del servidor pòt provesir mai d'entresenhas.", + "Technical details" : "Enstresenhas tecnicas", + "Remote Address: %s" : "Adreça distanta : %s", + "Request ID: %s" : "ID de la demanda : %s", + "Type: %s" : "Tipe : %s", + "Code: %s" : "Còde : %s", + "Message: %s" : "Messatge : %s", + "File: %s" : "Fichièr : %s", + "Line: %s" : "Linha : %s", + "Trace" : "Traça", + "Security warning" : "Avertiment de seguretat", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vòstre repertòri de donadas es segurament accessible dempuèi l'internet perque lo fichièr .htaccess fonciona pas.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per las informacions de configuracion de vòstre servidor, legissètz la <a href=\"%s\" target=\"_blank\">documentacion</a>.", + "Create an <strong>admin account</strong>" : "Crear un <strong>compte administrator</strong>", + "Username" : "Nom d'utilizaire", + "Storage & database" : "Emmagazinatge & banca de donadas", + "Data folder" : "Repertòri de las donadas", + "Configure the database" : "Configurar la banca de donadas", + "Only %s is available." : "%s solament es disponible.", + "Install and activate additional PHP modules to choose other database types." : "Installatz e activatz los moduls PHP addicionals adeqüats per causir d'autres tipes de banca de donadas.", + "For more details check out the documentation." : "Consultatz la documentacion per mai de detalhs.", + "Database user" : "Utilizaire de la banca de donadas", + "Database password" : "Senhal de la banca de donadas", + "Database name" : "Nom de la banca de donadas", + "Database tablespace" : "Tablespace de la banca de donadas", + "Database host" : "Òste de la banca de donadas", + "Performance warning" : "Avertiment de performància", + "SQLite will be used as database." : "SQLite serà utilizat coma gestionari de banca de donadas.", + "For larger installations we recommend to choose a different database backend." : "Per d'installacions mai voluminosas, vos conselham d'utilizar un autre gestionari de banca de donadas.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particular se utilizatz lo client de burèu per sincronizar vòstras donadas : l'utilizacion de SQLite es alara desconselhada.", + "Finish setup" : "Acabar l'installacion", + "Finishing …" : "Finalizacion …", + "Need help?" : "Besonh d'ajuda ?", + "See the documentation" : "Legir la documentacion", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicacion requerís JavaScript per foncionar corrèctament. {linkstart}Activatz JavaScript{linkend} e recargatz la pagina.", + "Log out" : "Se desconnectar", + "Search" : "Recercar", + "Server side authentication failed!" : "L'autentificacion sul servidor a fracassat !", + "Please contact your administrator." : "Contactatz vòstre administrator.", + "An internal error occured." : "Una error intèrna s'es produsida.", + "Please try again or contact your administrator." : "Reensajatz o contactatz vòstre administrator.", + "Forgot your password? Reset it!" : "Senhal doblidat ? Reïnicializatz-lo !", + "remember" : "se remembrar de ieu", + "Log in" : "Connexion", + "Alternative Logins" : "Identificants alternatius", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjorn,<br><br>Vos informam que %s a partejat <strong>%s</strong> amb vos.<br><a href=\"%s\">Clicatz aicí per i accedir !</a><br><br>", + "This ownCloud instance is currently in single user mode." : "Aquesta instància de ownCloud es actualament en mòde utilizaire unic.", + "This means only administrators can use the instance." : "Aquò significa que sols los administrators pòdon utilizar l'instància.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Contactatz vòstre administrator sistèma se aqueste messatge persistís o apareis de faiçon imprevista.", + "Thank you for your patience." : "Mercé de vòstra paciéncia.", + "You are accessing the server from an untrusted domain." : "Accedissètz al servidor a partir d'un domeni pas aprovat.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contactatz vòstre administrator. Se sètz administrator d'aquesta instància, configuratz lo paramètre « trusted_domain » dins lo fichièr config/config.php. Un exemple de configuracion es provesit dins lo fichièr config/config.sample.php.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En foncion de vòstra configuracion, en tant qu'administrator podètz tanben utilizar lo boton çaijós per aprovar aqueste domeni.", + "Add \"%s\" as trusted domain" : "Apondre \"%s\" a la lista dels domenis aprovats", + "%s will be updated to version %s." : "%s serà mes a jorn cap a la version %s.", + "The following apps will be disabled:" : "Las aplicacions seguentas seràn desactivadas :", + "The theme %s has been disabled." : "Lo tèma %s es estat desactivat.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Asseguratz-vos qu'una còpia de salvament de la banca de donadas, del dorsièr de configuracion (config) e del dorsièr de donadas (data) es estat realizada abans de començar.", + "Start update" : "Aviar la mesa a jorn", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per fin d'evitar los timeouts amb las installacions de volum consequent, podètz executar la comanda seguenta dempuèi lo repertòri d'installacion :", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància de %s es en cors de mantenença, aquò pòt prene de temps.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pagina se refrescarà d'ela-meteissa quand l'instància %s serà disponibla tornamai." }, "nplurals=2; plural=(n > 1);"); diff --git a/core/l10n/oc.json b/core/l10n/oc.json index d02a464b5d5..2f8433d0db9 100644 --- a/core/l10n/oc.json +++ b/core/l10n/oc.json @@ -1,8 +1,26 @@ { "translations": { + "Couldn't send mail to following users: %s " : "Impossible de mandar un corrièl als utilizaires seguents : %s", + "Turned on maintenance mode" : "Mòde de mantenença activat", + "Turned off maintenance mode" : "Mòde de mantenença desactivat", + "Updated database" : "Banca de donadas mesa a jorn", + "Checked database schema update" : "Mesa a jorn de l'esquèma de la banca de donadas verificada", + "Checked database schema update for apps" : "Mesa a jorn de l'esquèma de la banca de donadas per las aplicacions verificada", + "Updated \"%s\" to %s" : "Mesa a jorn de « %s » cap a %s", + "Repair warning: " : "Avertiment de reparacion :", + "Repair error: " : "Error de reparacion :", + "Following incompatible apps have been disabled: %s" : "Las aplicacions incompatiblas seguentas son estadas desactivadas : %s", + "Invalid file provided" : "Fichièr invalid", + "No image or file provided" : "Cap de fichièr pas provesit", + "Unknown filetype" : "Tipe de fichièr desconegut", + "Invalid image" : "Imatge pas valable", + "No temporary profile picture available, try again" : "Cap d'imatge temporari pas disponible pel profil. Ensajatz tornamai.", + "No crop data provided" : "Cap de donada de requadratge pas provesida", + "No valid crop data provided" : "Donadas de requadratge invalidas", + "Crop is not square" : "Lo requadratge es pas carrat", "Sunday" : "Dimenge", "Monday" : "Diluns", - "Tuesday" : "Dimarç", - "Wednesday" : "Dimecres", + "Tuesday" : "Dimars", + "Wednesday" : "Dimècres", "Thursday" : "Dijòus", "Friday" : "Divendres", "Saturday" : "Dissabte", @@ -14,64 +32,202 @@ "June" : "junh", "July" : "julhet", "August" : "agost", - "September" : "septembre", + "September" : "setembre", "October" : "octobre", - "November" : "Novembre", - "December" : "Decembre", - "Settings" : "Configuracion", - "Saving..." : "Enregistra...", + "November" : "novembre", + "December" : "decembre", + "Settings" : "Paramètres", + "Saving..." : "Enregistrament…", + "Couldn't send reset email. Please contact your administrator." : "Impossible de mandar lo corrièl de reïnicializacion. Contactatz vòstre administrator.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Lo ligam que permet de reïnicializar vòstre senhal ven d'èsser mandat a vòstra adreça de corrièl.<br>Se o recebètz pas dins un relambi rasonable, contactatz vòstre administrator.<br>Doblidetz pas de verificar dins vòstre dorsièr corrièr indesirable / spam!", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Vòstres fichièrs son chifrats. Se avètz pas activat la clau de recuperacion, i aurà pas cap de mejan de recuperar vòstras donadas un còp lo senhal reïnicializat.<br />Se sètz pas segur(a) de çò que fasètz, contactatz vòstre administrator abans de contunhar. <br />Sètz segur que volètz contunhar ?", + "I know what I'm doing" : "Sabi çò que fau", + "Password can not be changed. Please contact your administrator." : "Lo senhal pòt pas èsser modificat. Contactatz vòstre administrator.", "No" : "Non", "Yes" : "Òc", - "Choose" : "Causís", - "Ok" : "D'accòrdi", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Cancel" : "Annula", - "Share" : "Parteja", + "Choose" : "Causir", + "Error loading file picker template: {error}" : "Error al moment del cargament del modèl del selector de fichièrs : {error}", + "Ok" : "D'acòrdi", + "Error loading message template: {error}" : "Error de cargament del modèl de messatge : {error}", + "read-only" : "Lectura sola", + "_{count} file conflict_::_{count} file conflicts_" : ["{count} fichièr en conflicte","{count} fichièrs en conflicte"], + "One file conflict" : "Un conflicte de fichièr", + "New Files" : "Fichièrs novèls", + "Already existing files" : "Fichièrs ja existents", + "Which files do you want to keep?" : "Quines fichièrs volètz gardar ?", + "If you select both versions, the copied file will have a number added to its name." : "Se seleccionatz las doas versions, un nombre serà apondut al nom del fichièr copiat.", + "Cancel" : "Anullar", + "Continue" : "Contunhar", + "(all selected)" : "(totes seleccionats)", + "({count} selected)" : "({count} seleccionat(s))", + "Error loading file exists template" : "Error de cargament del modèl de fichièr existent", + "Very weak password" : "Senhal fòrt feble", + "Weak password" : "Senhal feble", + "So-so password" : "Senhal tot bèl juste acceptable", + "Good password" : "Senhal de seguretat sufisenta", + "Strong password" : "Senhal fòrt", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Vòstre servidor web es pas corrèctament configurat per la sincronizacion de fichièrs : sembla que l'interfàcia WebDAV fonciona pas.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aqueste servidor se pòt pas connectar a internet. Aquò significa que certanas foncionalitats, talas coma lo montatge de supòrts d'emmagazinatge distants, las notificacions de mesas a jorn o l'installacion d'aplicacions tèrças foncionaràn pas. L'accès als fichièrs a distància, e tanben las notificacions per mail pòdon tanben èsser indisponiblas. Es recomandat d'activar la connexion internet per aqueste servidor se volètz dispausar de l'ensemble de las foncionalitats ofèrtas.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Vòstre dorsièr de donadas e vòstres fichièrs son probablament accessibles dempuèi internet. Lo fichièr .htaccess fonciona pas. Vos recomandam bravament de configurar vòstre servidor web de manièra qu'aqueste dorsièr de donadas siá pas mai accessible, o de lo desplaçar en defòra de la raiç del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Cap d'escondedor de la memòria es pas configurat. Se possible, configuratz un \"memcache\" per aumentar las performàncias. Per mai d'information consultatz la <a href=\"{docLink}\">documentacion</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom es pas legible per PHP, aquò es bravament desconselhat per de rasons de seguretat. Mai d'informacions pòdon èsser trobadas dins nòstra <a href=\"{docLink}\">documentacion</a>.", + "Error occurred while checking server setup" : "Una error s'es produsida al moment de la verificacion de la configuracion del servidor", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "L'entèsta HTTP \"{header}\" es pas configurada per èsser egala a \"{expected}\" en creant potencialament un risc religat a la seguretat e a la vida privada. Es doncas recomandat d'ajustar aqueste paramètre.", + "Shared" : "Partejat", + "Shared with {recipients}" : "Partejat amb {recipients}", + "Share" : "Partejar", "Error" : "Error", - "Error while sharing" : "Error al partejar", - "Error while unsharing" : "Error al non partejar", - "Error while changing permissions" : "Error al cambiar permissions", - "Password protect" : "Parat per senhal", + "Error while sharing" : "Error al moment de la mesa en partiment", + "Error while unsharing" : "Error al moment de l'anullacion del partiment", + "Error while changing permissions" : "Error al moment del cambiament de las permissions", + "Shared with you and the group {group} by {owner}" : "Partejat amb vos e lo grop {group} per {owner}", + "Shared with you by {owner}" : "Partejat amb vos per {owner}", + "Share with users or groups …" : "Partejar amb d'utilizaires o gropes...", + "Share with users, groups or remote users …" : "Partejar amb d'utilizaires, gropes, o utilizaires distants", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Partejatz amb de personas sus d'autres ownClouds en utilizant la sintaxi utilizaire@exemple.com/owncloud", + "Share link" : "Partejar per ligam public", + "The public link will expire no later than {days} days after it is created" : "Aqueste ligam public expirarà al mai tard {days} jorns aprèp sa creacion.", + "Link" : "Ligam", + "Password protect" : "Protegir per un senhal", "Password" : "Senhal", - "Set expiration date" : "Met la data d'expiracion", + "Choose a password for the public link" : "Causissètz un senhal pel ligam public", + "Allow editing" : "Permetre la modificacion", + "Email link to person" : "Mandar lo ligam per corrièl", + "Send" : "Mandar", + "Set expiration date" : "Especificar una data d'expiracion", + "Expiration" : "Expiracion", "Expiration date" : "Data d'expiracion", + "An error occured. Please try again" : "Una error s'es produsida. Mercé d'ensajar tornamai", + "Adding user..." : "Apondon de l'utilizaire...", "group" : "grop", - "Resharing is not allowed" : "Tornar partejar es pas permis", - "Unshare" : "Pas partejador", + "remote" : "distant", + "Resharing is not allowed" : "Lo repartiment es pas autorizat", + "Shared in {item} with {user}" : "Partejat dins {item} amb {user}", + "Unshare" : "Partejar pas mai", + "notify by email" : "notificar per corrièl", + "can share" : "pòt partejar", "can edit" : "pòt modificar", - "access control" : "Contraròtle d'acces", - "create" : "crea", - "delete" : "escafa", - "Password protected" : "Parat per senhal", - "Error unsetting expiration date" : "Error al metre de la data d'expiracion", - "Error setting expiration date" : "Error setting expiration date", - "Delete" : "Escafa", - "Add" : "Ajusta", - "_download %n file_::_download %n files_" : ["",""], - "Use the following link to reset your password: {link}" : "Utiliza lo ligam seguent per tornar botar lo senhal : {link}", + "access control" : "contraròtle d'accès", + "create" : "crear", + "change" : "modificacion", + "delete" : "suprimir", + "Password protected" : "Protegit per senhal", + "Error unsetting expiration date" : "Error al moment de la supression de la data d'expiracion", + "Error setting expiration date" : "Error al moment de l'especificacion de la data d'expiracion", + "Sending ..." : "Mandadís…", + "Email sent" : "Corrièl mandat", + "Warning" : "Atencion", + "The object type is not specified." : "Lo tipe d'objècte es pas especificat.", + "Enter new" : "Picar un novèl", + "Delete" : "Suprimir", + "Add" : "Apondre", + "Edit tags" : "Modificar las etiquetas", + "Error loading dialog template: {error}" : "Error al moment del cargament del modèl de dialòg : {error}", + "No tags selected for deletion." : "Cap d'etiqueta pas seleccionada per la supression.", + "unknown text" : "tèxte desconegut", + "Hello world!" : "Hello world!", + "sunny" : "ensolelhat", + "Hello {name}, the weather is {weather}" : "Bonjorn {name}, lo temps es {weather}", + "Hello {name}" : "Adiu {name}", + "_download %n file_::_download %n files_" : ["Telecargar %n fichièr","Telecargar %n fichièrs"], + "{version} is available. Get more information on how to update." : "La version {version} es disponibla. Obtenètz mai d'informacions a prepaus d'aquesta mesa a jorn.", + "Updating {productName} to version {version}, this may take a while." : "La mesa a jorn de {productName} cap a la version {version} es en cors. Aquò pòt prene un certan temps.", + "Please reload the page." : "Recargatz la pagina.", + "The update was unsuccessful. " : "La mesa a jorn a fracassat.", + "The update was successful. Redirecting you to ownCloud now." : "La mesa a jorn a capitat. Ara sètz redirigit cap a ownCloud.", + "Couldn't reset password because the token is invalid" : "Impossible de reïnicializar lo senhal perque lo geton es pas valable.", + "Couldn't send reset email. Please make sure your username is correct." : "Impossible de mandar lo corrièl de reïnicializacion. Verificatz que vòstre nom d'utilizaire es corrècte.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible de mandar lo corrièl de reïnicializacion perque i a pas cap d'adreça de corrièl per aqueste utilizaire. Contactatz vòstre administrator.", + "%s password reset" : "Reïnicializacion de vòstre senhal %s", + "Use the following link to reset your password: {link}" : "Utilizatz lo ligam seguent per reïnicializar vòstre senhal : {link}", "New password" : "Senhal novèl", - "Reset password" : "Senhal tornat botar", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "New Password" : "Senhal novèl", + "Reset password" : "Reïnicializar lo senhal", + "Searching other places" : "Recèrca en cors dins d'autres emplaçaments", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultat dins d'autres emplaçaments","{count} resultats dins d'autres emplaçaments"], "Personal" : "Personal", - "Users" : "Usancièrs", - "Apps" : "Apps", - "Admin" : "Admin", + "Users" : "Utilizaires", + "Apps" : "Aplicacions", + "Admin" : "Administracion", "Help" : "Ajuda", - "Access forbidden" : "Acces enebit", - "Security Warning" : "Avertiment de securitat", - "Create an <strong>admin account</strong>" : "Crea un <strong>compte admin</strong>", - "Username" : "Non d'usancièr", - "Data folder" : "Dorsièr de donadas", - "Configure the database" : "Configura la basa de donadas", - "Database user" : "Usancièr de la basa de donadas", - "Database password" : "Senhal de la basa de donadas", - "Database name" : "Nom de la basa de donadas", - "Database tablespace" : "Espandi de taula de basa de donadas", - "Database host" : "Òste de basa de donadas", - "Finish setup" : "Configuracion acabada", - "Log out" : "Sortida", - "Search" : "Cèrca", - "remember" : "bremba-te", - "Log in" : "Dintrada" + "Error loading tags" : "Error al moment del cargament de las etiquetas", + "Tag already exists" : "L'etiqueta existís ja.", + "Error deleting tag(s)" : "Error de supression d'etiqueta(s)", + "Error tagging" : "Error al moment de l'etiquetatge", + "Error untagging" : "Error al moment del desetiquetatge", + "Error favoriting" : "Error al moment de la mesa en favorit", + "Error unfavoriting" : "Error al moment de la supression dels favorits", + "Access forbidden" : "Accès interdich", + "File not found" : "Fichièr pas trobat", + "The specified document has not been found on the server." : "Impossible de trobar lo document especificat sul servidor.", + "You can click here to return to %s." : "Podètz clicar aicí per tornar a %s.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Bonjorn,\n\nVos informam que %s a partejat \"%s\" amb vos.\nI podètz accedir a l'adreça seguenta : %s\n", + "The share will expire on %s." : "Lo partiment expirarà lo %s.", + "Cheers!" : "A lèu !", + "Internal Server Error" : "Error intèrna del servidor", + "The server encountered an internal error and was unable to complete your request." : "Lo servidor a rencontrat una error intèrna e es incapable d'executar vòstra requèsta.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Contactatz l'administrator del servidor se aquesta error apareis mantun còp. Jonhètz los detalhs tecnics a vòstre rapòrt.", + "More details can be found in the server log." : "Lo fichièr jornal del servidor pòt provesir mai d'entresenhas.", + "Technical details" : "Enstresenhas tecnicas", + "Remote Address: %s" : "Adreça distanta : %s", + "Request ID: %s" : "ID de la demanda : %s", + "Type: %s" : "Tipe : %s", + "Code: %s" : "Còde : %s", + "Message: %s" : "Messatge : %s", + "File: %s" : "Fichièr : %s", + "Line: %s" : "Linha : %s", + "Trace" : "Traça", + "Security warning" : "Avertiment de seguretat", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vòstre repertòri de donadas es segurament accessible dempuèi l'internet perque lo fichièr .htaccess fonciona pas.", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per las informacions de configuracion de vòstre servidor, legissètz la <a href=\"%s\" target=\"_blank\">documentacion</a>.", + "Create an <strong>admin account</strong>" : "Crear un <strong>compte administrator</strong>", + "Username" : "Nom d'utilizaire", + "Storage & database" : "Emmagazinatge & banca de donadas", + "Data folder" : "Repertòri de las donadas", + "Configure the database" : "Configurar la banca de donadas", + "Only %s is available." : "%s solament es disponible.", + "Install and activate additional PHP modules to choose other database types." : "Installatz e activatz los moduls PHP addicionals adeqüats per causir d'autres tipes de banca de donadas.", + "For more details check out the documentation." : "Consultatz la documentacion per mai de detalhs.", + "Database user" : "Utilizaire de la banca de donadas", + "Database password" : "Senhal de la banca de donadas", + "Database name" : "Nom de la banca de donadas", + "Database tablespace" : "Tablespace de la banca de donadas", + "Database host" : "Òste de la banca de donadas", + "Performance warning" : "Avertiment de performància", + "SQLite will be used as database." : "SQLite serà utilizat coma gestionari de banca de donadas.", + "For larger installations we recommend to choose a different database backend." : "Per d'installacions mai voluminosas, vos conselham d'utilizar un autre gestionari de banca de donadas.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "En particular se utilizatz lo client de burèu per sincronizar vòstras donadas : l'utilizacion de SQLite es alara desconselhada.", + "Finish setup" : "Acabar l'installacion", + "Finishing …" : "Finalizacion …", + "Need help?" : "Besonh d'ajuda ?", + "See the documentation" : "Legir la documentacion", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Aquesta aplicacion requerís JavaScript per foncionar corrèctament. {linkstart}Activatz JavaScript{linkend} e recargatz la pagina.", + "Log out" : "Se desconnectar", + "Search" : "Recercar", + "Server side authentication failed!" : "L'autentificacion sul servidor a fracassat !", + "Please contact your administrator." : "Contactatz vòstre administrator.", + "An internal error occured." : "Una error intèrna s'es produsida.", + "Please try again or contact your administrator." : "Reensajatz o contactatz vòstre administrator.", + "Forgot your password? Reset it!" : "Senhal doblidat ? Reïnicializatz-lo !", + "remember" : "se remembrar de ieu", + "Log in" : "Connexion", + "Alternative Logins" : "Identificants alternatius", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Bonjorn,<br><br>Vos informam que %s a partejat <strong>%s</strong> amb vos.<br><a href=\"%s\">Clicatz aicí per i accedir !</a><br><br>", + "This ownCloud instance is currently in single user mode." : "Aquesta instància de ownCloud es actualament en mòde utilizaire unic.", + "This means only administrators can use the instance." : "Aquò significa que sols los administrators pòdon utilizar l'instància.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Contactatz vòstre administrator sistèma se aqueste messatge persistís o apareis de faiçon imprevista.", + "Thank you for your patience." : "Mercé de vòstra paciéncia.", + "You are accessing the server from an untrusted domain." : "Accedissètz al servidor a partir d'un domeni pas aprovat.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contactatz vòstre administrator. Se sètz administrator d'aquesta instància, configuratz lo paramètre « trusted_domain » dins lo fichièr config/config.php. Un exemple de configuracion es provesit dins lo fichièr config/config.sample.php.", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En foncion de vòstra configuracion, en tant qu'administrator podètz tanben utilizar lo boton çaijós per aprovar aqueste domeni.", + "Add \"%s\" as trusted domain" : "Apondre \"%s\" a la lista dels domenis aprovats", + "%s will be updated to version %s." : "%s serà mes a jorn cap a la version %s.", + "The following apps will be disabled:" : "Las aplicacions seguentas seràn desactivadas :", + "The theme %s has been disabled." : "Lo tèma %s es estat desactivat.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Asseguratz-vos qu'una còpia de salvament de la banca de donadas, del dorsièr de configuracion (config) e del dorsièr de donadas (data) es estat realizada abans de començar.", + "Start update" : "Aviar la mesa a jorn", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Per fin d'evitar los timeouts amb las installacions de volum consequent, podètz executar la comanda seguenta dempuèi lo repertòri d'installacion :", + "This %s instance is currently in maintenance mode, which may take a while." : "Aquesta instància de %s es en cors de mantenença, aquò pòt prene de temps.", + "This page will refresh itself when the %s instance is available again." : "Aquesta pagina se refrescarà d'ela-meteissa quand l'instància %s serà disponibla tornamai." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/core/l10n/pa.js b/core/l10n/pa.js index b1984b3b6d0..49a40a64edd 100644 --- a/core/l10n/pa.js +++ b/core/l10n/pa.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "ਹਾਂ", "Choose" : "ਚੁਣੋ", "Ok" : "ਠੀਕ ਹੈ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "ਰੱਦ ਕਰੋ", "Share" : "ਸਾਂਝਾ ਕਰੋ", "Error" : "ਗਲ", @@ -34,9 +33,6 @@ OC.L10N.register( "Send" : "ਭੇਜੋ", "Warning" : "ਚੇਤਾਵਨੀ", "Delete" : "ਹਟਾਓ", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], - "Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ", "Username" : "ਯੂਜ਼ਰ-ਨਾਂ", "Search" : "ਖੋਜ" }, diff --git a/core/l10n/pa.json b/core/l10n/pa.json index a0f3b3a8239..ef4e2e23271 100644 --- a/core/l10n/pa.json +++ b/core/l10n/pa.json @@ -24,7 +24,6 @@ "Yes" : "ਹਾਂ", "Choose" : "ਚੁਣੋ", "Ok" : "ਠੀਕ ਹੈ", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "ਰੱਦ ਕਰੋ", "Share" : "ਸਾਂਝਾ ਕਰੋ", "Error" : "ਗਲ", @@ -32,9 +31,6 @@ "Send" : "ਭੇਜੋ", "Warning" : "ਚੇਤਾਵਨੀ", "Delete" : "ਹਟਾਓ", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], - "Security Warning" : "ਸੁਰੱਖਿਆ ਚੇਤਾਵਨੀ", "Username" : "ਯੂਜ਼ਰ-ਨਾਂ", "Search" : "ਖੋਜ" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 527291427a9..7bc447bffce 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -8,6 +8,10 @@ OC.L10N.register( "Checked database schema update" : "Sprawdzono aktualizację schematu bazy danych", "Checked database schema update for apps" : "Sprawdzono aktualizację schematu bazy danych dla aplikacji", "Updated \"%s\" to %s" : "Zaktualizowano \"%s\" do %s", + "Repair warning: " : "Ostrzeżenie naprawiania:", + "Repair error: " : "Błąd naprawiania:", + "Following incompatible apps have been disabled: %s" : "Poniższe niezgodne aplikacje zostały wyłączone: %s", + "Invalid file provided" : "Podano błędny plik", "No image or file provided" : "Brak obrazu lub pliku dostarczonego", "Unknown filetype" : "Nieznany typ pliku", "Invalid image" : "Nieprawidłowe zdjęcie", @@ -72,7 +76,7 @@ OC.L10N.register( "Error while changing permissions" : "Błąd przy zmianie uprawnień", "Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}", "Shared with you by {owner}" : "Udostępnione tobie przez {owner}", - "Share with user or group …" : "Współdziel z użytkownikiem lub grupą ...", + "Share with users or groups …" : "Współdziel z użytkownikami lub grupami", "Share link" : "Udostępnij link", "The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia", "Link" : "Odnośnik", @@ -130,8 +134,6 @@ OC.L10N.register( "New Password" : "Nowe hasło", "Reset password" : "Zresetuj hasło", "Searching other places" : "Przeszukaj inne miejsca", - "No search result in other places" : "Brak wyników wyszukiwania w innych miejscach", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Osobiste", "Users" : "Użytkownicy", "Apps" : "Aplikacje", @@ -158,12 +160,12 @@ OC.L10N.register( "Technical details" : "Szczegóły techniczne", "Remote Address: %s" : "Adres zdalny: %s", "Request ID: %s" : "ID żądania: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kod: %s", "Message: %s" : "Komunikat: %s", "File: %s" : "Plik: %s", "Line: %s" : "Linia: %s", "Trace" : "Ślad", - "Security Warning" : "Ostrzeżenie o zabezpieczeniach", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.", "Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>", @@ -179,11 +181,12 @@ OC.L10N.register( "Database host" : "Komputer bazy danych", "Finish setup" : "Zakończ konfigurowanie", "Finishing …" : "Kończę ...", - "%s is available. Get more information on how to update." : "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.", + "Need help?" : "Potrzebujesz pomocy?", "Log out" : "Wyloguj", "Search" : "Wyszukaj", "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", "Please contact your administrator." : "Skontaktuj się z administratorem", + "Please try again or contact your administrator." : "Spróbuj ponownie lub skontaktuj się z administratorem.", "Forgot your password? Reset it!" : "Nie pamiętasz hasła? Zresetuj je!", "remember" : "pamiętaj", "Log in" : "Zaloguj", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 5fee2eade25..66f3c36921c 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -6,6 +6,10 @@ "Checked database schema update" : "Sprawdzono aktualizację schematu bazy danych", "Checked database schema update for apps" : "Sprawdzono aktualizację schematu bazy danych dla aplikacji", "Updated \"%s\" to %s" : "Zaktualizowano \"%s\" do %s", + "Repair warning: " : "Ostrzeżenie naprawiania:", + "Repair error: " : "Błąd naprawiania:", + "Following incompatible apps have been disabled: %s" : "Poniższe niezgodne aplikacje zostały wyłączone: %s", + "Invalid file provided" : "Podano błędny plik", "No image or file provided" : "Brak obrazu lub pliku dostarczonego", "Unknown filetype" : "Nieznany typ pliku", "Invalid image" : "Nieprawidłowe zdjęcie", @@ -70,7 +74,7 @@ "Error while changing permissions" : "Błąd przy zmianie uprawnień", "Shared with you and the group {group} by {owner}" : "Udostępnione tobie i grupie {group} przez {owner}", "Shared with you by {owner}" : "Udostępnione tobie przez {owner}", - "Share with user or group …" : "Współdziel z użytkownikiem lub grupą ...", + "Share with users or groups …" : "Współdziel z użytkownikami lub grupami", "Share link" : "Udostępnij link", "The public link will expire no later than {days} days after it is created" : "Link publiczny wygaśnie nie później niż po {days} dniach od utworzenia", "Link" : "Odnośnik", @@ -128,8 +132,6 @@ "New Password" : "Nowe hasło", "Reset password" : "Zresetuj hasło", "Searching other places" : "Przeszukaj inne miejsca", - "No search result in other places" : "Brak wyników wyszukiwania w innych miejscach", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Osobiste", "Users" : "Użytkownicy", "Apps" : "Aplikacje", @@ -156,12 +158,12 @@ "Technical details" : "Szczegóły techniczne", "Remote Address: %s" : "Adres zdalny: %s", "Request ID: %s" : "ID żądania: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kod: %s", "Message: %s" : "Komunikat: %s", "File: %s" : "Plik: %s", "Line: %s" : "Linia: %s", "Trace" : "Ślad", - "Security Warning" : "Ostrzeżenie o zabezpieczeniach", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Twój katalog danych i pliki są prawdopodobnie dostępne z poziomu internetu, ponieważ plik .htaccess nie działa.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Aby uzyskać informacje jak poprawnie skonfigurować swój serwer, zapoznaj się z <a href=\"%s\" target=\"_blank\">dokumentacją</a>.", "Create an <strong>admin account</strong>" : "Utwórz <strong>konta administratora</strong>", @@ -177,11 +179,12 @@ "Database host" : "Komputer bazy danych", "Finish setup" : "Zakończ konfigurowanie", "Finishing …" : "Kończę ...", - "%s is available. Get more information on how to update." : "%s jest dostępna. Dowiedz się więcej na temat aktualizacji.", + "Need help?" : "Potrzebujesz pomocy?", "Log out" : "Wyloguj", "Search" : "Wyszukaj", "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", "Please contact your administrator." : "Skontaktuj się z administratorem", + "Please try again or contact your administrator." : "Spróbuj ponownie lub skontaktuj się z administratorem.", "Forgot your password? Reset it!" : "Nie pamiętasz hasła? Zresetuj je!", "remember" : "pamiętaj", "Log in" : "Zaloguj", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 67e4f5a1759..08cda274ab7 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Não foi possível enviar e-mail para os seguintes usuários: %s", "Turned on maintenance mode" : "Ativar modo de manutenção", "Turned off maintenance mode" : "Desligar o modo de manutenção", + "Maintenance mode is kept active" : "O modo de manutenção está sendo mantido como ativo", "Updated database" : "Atualizar o banco de dados", "Checked database schema update" : "Verificado atualização do esquema de banco de dados", "Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos", "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s", + "Repair warning: " : "Aviso de reparação:", + "Repair error: " : "Reparação de erro:", "Following incompatible apps have been disabled: %s" : "Seguir aplicativos incompatíveis foi desativado: %s", - "Following 3rd party apps have been disabled: %s" : "Seguir aplicativos de terceiros 3 foi desativado: %s", + "Following apps have been disabled: %s" : "Os seguintes aplicativos foram desabilitados: %s", + "Invalid file provided" : "Arquivo fornecido inválido", "No image or file provided" : "Nenhuma imagem ou arquivo fornecido", "Unknown filetype" : "Tipo de arquivo desconhecido", "Invalid image" : "Imagem inválida", "No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente", "No crop data provided" : "Nenhum dado para coleta foi fornecido", + "No valid crop data provided" : "Nenhum dado recortado válido", + "Crop is not square" : "Recorte não é quadrado", "Sunday" : "Domingo", "Monday" : "Segunda-feira", "Tuesday" : "Terça-feira", @@ -67,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isto significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\"> documentação </a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual para o \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "O \"Strict-Transport-Security\" cabeçalho HTTP não está configurado para pelo menos \"2.678.400\" segundos. Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando este site via HTTP. Sugerimos que você, em vez disso, configure o servidor para exigir o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.", "Shared" : "Compartilhados", "Shared with {recipients}" : "Compartilhado com {recipients}", "Share" : "Compartilhar", @@ -80,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "Erro ao mudar permissões", "Shared with you and the group {group} by {owner}" : "Compartilhado com você e com o grupo {group} por {owner}", "Shared with you by {owner}" : "Compartilhado com você por {owner}", - "Share with user or group …" : "Compartilhar com usuário ou grupo ...", + "Share with users or groups …" : "Compartilhar com usuários ou grupos ...", + "Share with users, groups or remote users …" : "Compartilhar com usuários, grupos ou usuários remoto ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhar com usuários em outros ownClouds usando a sintaxe username@example.com/owncloud", "Share link" : "Compartilhar link", "The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de ser criado", "Link" : "Link", @@ -93,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Definir data de expiração", "Expiration" : "Expiração", "Expiration date" : "Data de expiração", + "An error occured. Please try again" : "Ocorreu um erro. Por favor tente novamente", "Adding user..." : "Adicionando usuário...", "group" : "grupo", "remote" : "remoto", @@ -125,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}", "Hello {name}" : "Olá {name}", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], + "{version} is available. Get more information on how to update." : "{version} está disponível. Obtenha mais informações sobre como atualizar.", "Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.", "Please reload the page." : "Por favor recarregue a página", "The update was unsuccessful. " : "A atualização não foi bem sucedida.", + "The update was successful. There were warnings." : "A atualização foi bem sucedida. Havia advertências.", "The update was successful. Redirecting you to ownCloud now." : "A atualização teve êxito. Você será redirecionado ao ownCloud agora.", "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.", @@ -138,8 +151,8 @@ OC.L10N.register( "New Password" : "Nova Senha", "Reset password" : "Redefinir senha", "Searching other places" : "Pesquisando em outros lugares", - "No search result in other places" : "Nenhum resultado da pesquisa em outros lugares", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "No search results in other places" : "Nenhum resultado de pesquisa em outros lugares", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultados da pesquisa em outros lugares","{count} resultados da pesquisa em outros lugares"], "Personal" : "Pessoal", "Users" : "Usuários", "Apps" : "Aplicações", @@ -166,12 +179,13 @@ OC.L10N.register( "Technical details" : "Detalhes técnicos", "Remote Address: %s" : "Endereço Remoto: %s", "Request ID: %s" : "ID do Pedido: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensagem: %s", "File: %s" : "Arquivo: %s", "Line: %s" : "Linha: %s", "Trace" : "Rastreamento", - "Security Warning" : "Aviso de Segurança", + "Security warning" : "Alerta de Segurança", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>", @@ -180,23 +194,28 @@ OC.L10N.register( "Data folder" : "Pasta de dados", "Configure the database" : "Configurar o banco de dados", "Only %s is available." : "Somente %s está disponível.", + "Install and activate additional PHP modules to choose other database types." : "Instalar e ativar os módulos adicionais do PHP para escolher outros tipos de banco de dados.", + "For more details check out the documentation." : "Para mais informações consulte a documentação.", "Database user" : "Usuário do banco de dados", "Database password" : "Senha do banco de dados", "Database name" : "Nome do banco de dados", "Database tablespace" : "Espaço de tabela do banco de dados", "Database host" : "Host do banco de dados", - "Performance Warning" : "Alerta de Desempenho", + "Performance warning" : "Performance de alerta", "SQLite will be used as database." : "SQLite será usado como banco de dados", "For larger installations we recommend to choose a different database backend." : "Para instalações maiores é recomendável escolher um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "Finish setup" : "Concluir configuração", "Finishing …" : "Finalizando ...", + "Need help?" : "Precisa de ajuda?", + "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", - "%s is available. Get more information on how to update." : "%s está disponível. Obtenha mais informações sobre como atualizar.", "Log out" : "Sair", "Search" : "Perquisar", "Server side authentication failed!" : "Autenticação do servidor falhou!", "Please contact your administrator." : "Por favor, contate o administrador.", + "An internal error occured." : "Ocorreu um erro interno.", + "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", "Forgot your password? Reset it!" : "Esqueceu sua senha? Redefini-la!", "remember" : "lembrar", "Log in" : "Fazer login", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index f30f238665a..ddce0d164c1 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "Não foi possível enviar e-mail para os seguintes usuários: %s", "Turned on maintenance mode" : "Ativar modo de manutenção", "Turned off maintenance mode" : "Desligar o modo de manutenção", + "Maintenance mode is kept active" : "O modo de manutenção está sendo mantido como ativo", "Updated database" : "Atualizar o banco de dados", "Checked database schema update" : "Verificado atualização do esquema de banco de dados", "Checked database schema update for apps" : "Verificar atualização do esquema de banco de dados para aplicativos", "Updated \"%s\" to %s" : "Atualizado \"%s\" para %s", + "Repair warning: " : "Aviso de reparação:", + "Repair error: " : "Reparação de erro:", "Following incompatible apps have been disabled: %s" : "Seguir aplicativos incompatíveis foi desativado: %s", - "Following 3rd party apps have been disabled: %s" : "Seguir aplicativos de terceiros 3 foi desativado: %s", + "Following apps have been disabled: %s" : "Os seguintes aplicativos foram desabilitados: %s", + "Invalid file provided" : "Arquivo fornecido inválido", "No image or file provided" : "Nenhuma imagem ou arquivo fornecido", "Unknown filetype" : "Tipo de arquivo desconhecido", "Invalid image" : "Imagem inválida", "No temporary profile picture available, try again" : "Nenhuma imagem temporária disponível no perfil, tente novamente", "No crop data provided" : "Nenhum dado para coleta foi fornecido", + "No valid crop data provided" : "Nenhum dado recortado válido", + "Crop is not square" : "Recorte não é quadrado", "Sunday" : "Domingo", "Monday" : "Segunda-feira", "Tuesday" : "Terça-feira", @@ -65,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Seu servidor web ainda não está configurado corretamente para permitir a sincronização de arquivos, pois a interface WebDAV parece ser desconfigurada.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor não tem nenhuma conexão com a Internet. Isto significa que algumas das características como a montagem de armazenamento externo, notificações sobre atualizações ou instalação de aplicativos de terceiros não vai funcionar. Acessar arquivos remotamente e envio de e-mails de notificação pode não funcionar, também. Sugerimos permitir conexão com a Internet para este servidor, se você quer ter todas as funcionalidades.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "O seu diretório de dados e os arquivos estão, provavelmente, acessíveis a partir da Internet. O arquivo .htaccess não está funcionando. Nós sugerimos que você configure o servidor web de uma forma que o diretório de dados não seja acessível ou mova o diretório de dados para fora do diretório raiz de documentos do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhum cache de memória foi configurado. Para melhorar o seu desempenho, por favor configurar um cache de memória, se disponível. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\"> documentação </a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom não pode ser lido por PHP o que é altamente desencorajado por razões de segurança. Mais informações podem ser encontradas em nossa <a href=\"{docLink}\">documentation</a>.", "Error occurred while checking server setup" : "Erro ao verificar a configuração do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual para o \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "O \"Strict-Transport-Security\" cabeçalho HTTP não está configurado para pelo menos \"2.678.400\" segundos. Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Você está acessando este site via HTTP. Sugerimos que você, em vez disso, configure o servidor para exigir o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O \"{header}\" cabeçalho HTTP não está configurado igual ao \"{expected}\". Este é um risco potencial para a segurança e recomendamos ajustar essa configuração.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "O cabeçalho \"Transporte-de-Segurança-Restrita\"HTTP não está configurada para menos de \"{seconds}\" segundos. Para uma maior segurança recomendamos a ativação HSTS conforme descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Você está acessando este site via HTTP. Nós fortemente sugerimos que você ao invéz, configure o servidor para exigir o uso de HTTPS como descrito em nossas <a href=\"{docUrl}\">dicas de segurança</a>.", "Shared" : "Compartilhados", "Shared with {recipients}" : "Compartilhado com {recipients}", "Share" : "Compartilhar", @@ -78,7 +86,9 @@ "Error while changing permissions" : "Erro ao mudar permissões", "Shared with you and the group {group} by {owner}" : "Compartilhado com você e com o grupo {group} por {owner}", "Shared with you by {owner}" : "Compartilhado com você por {owner}", - "Share with user or group …" : "Compartilhar com usuário ou grupo ...", + "Share with users or groups …" : "Compartilhar com usuários ou grupos ...", + "Share with users, groups or remote users …" : "Compartilhar com usuários, grupos ou usuários remoto ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhar com usuários em outros ownClouds usando a sintaxe username@example.com/owncloud", "Share link" : "Compartilhar link", "The public link will expire no later than {days} days after it is created" : "O link público irá expirar não antes de {days} depois de ser criado", "Link" : "Link", @@ -91,6 +101,7 @@ "Set expiration date" : "Definir data de expiração", "Expiration" : "Expiração", "Expiration date" : "Data de expiração", + "An error occured. Please try again" : "Ocorreu um erro. Por favor tente novamente", "Adding user..." : "Adicionando usuário...", "group" : "grupo", "remote" : "remoto", @@ -123,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Olá {name}, o clima está {weather}", "Hello {name}" : "Olá {name}", "_download %n file_::_download %n files_" : ["baixar %n arquivo","baixar %n arquivos"], + "{version} is available. Get more information on how to update." : "{version} está disponível. Obtenha mais informações sobre como atualizar.", "Updating {productName} to version {version}, this may take a while." : "Atualizando {productName} para a versão {version}, isso pode demorar um pouco.", "Please reload the page." : "Por favor recarregue a página", "The update was unsuccessful. " : "A atualização não foi bem sucedida.", + "The update was successful. There were warnings." : "A atualização foi bem sucedida. Havia advertências.", "The update was successful. Redirecting you to ownCloud now." : "A atualização teve êxito. Você será redirecionado ao ownCloud agora.", "Couldn't reset password because the token is invalid" : "Não foi possível redefinir a senha porque o token é inválido", "Couldn't send reset email. Please make sure your username is correct." : "Não foi possível enviar e-mail de redefinição. Verifique se o seu nome de usuário está correto.", @@ -136,8 +149,8 @@ "New Password" : "Nova Senha", "Reset password" : "Redefinir senha", "Searching other places" : "Pesquisando em outros lugares", - "No search result in other places" : "Nenhum resultado da pesquisa em outros lugares", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], + "No search results in other places" : "Nenhum resultado de pesquisa em outros lugares", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultados da pesquisa em outros lugares","{count} resultados da pesquisa em outros lugares"], "Personal" : "Pessoal", "Users" : "Usuários", "Apps" : "Aplicações", @@ -164,12 +177,13 @@ "Technical details" : "Detalhes técnicos", "Remote Address: %s" : "Endereço Remoto: %s", "Request ID: %s" : "ID do Pedido: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensagem: %s", "File: %s" : "Arquivo: %s", "Line: %s" : "Linha: %s", "Trace" : "Rastreamento", - "Security Warning" : "Aviso de Segurança", + "Security warning" : "Alerta de Segurança", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Seu diretório de dados e arquivos são provavelmente acessíveis pela internet, porque o .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações sobre como configurar corretamente o seu servidor, consulte a <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" : "Criar uma <strong>conta de administrador</strong>", @@ -178,23 +192,28 @@ "Data folder" : "Pasta de dados", "Configure the database" : "Configurar o banco de dados", "Only %s is available." : "Somente %s está disponível.", + "Install and activate additional PHP modules to choose other database types." : "Instalar e ativar os módulos adicionais do PHP para escolher outros tipos de banco de dados.", + "For more details check out the documentation." : "Para mais informações consulte a documentação.", "Database user" : "Usuário do banco de dados", "Database password" : "Senha do banco de dados", "Database name" : "Nome do banco de dados", "Database tablespace" : "Espaço de tabela do banco de dados", "Database host" : "Host do banco de dados", - "Performance Warning" : "Alerta de Desempenho", + "Performance warning" : "Performance de alerta", "SQLite will be used as database." : "SQLite será usado como banco de dados", "For larger installations we recommend to choose a different database backend." : "Para instalações maiores é recomendável escolher um backend de banco de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Especialmente quando se utiliza o cliente de desktop para sincronização de arquivos o uso de SQLite é desencorajado.", "Finish setup" : "Concluir configuração", "Finishing …" : "Finalizando ...", + "Need help?" : "Precisa de ajuda?", + "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para sua correta operação. Por favor {linkstart}habilite JavaScript{linkend} e recerregue a página.", - "%s is available. Get more information on how to update." : "%s está disponível. Obtenha mais informações sobre como atualizar.", "Log out" : "Sair", "Search" : "Perquisar", "Server side authentication failed!" : "Autenticação do servidor falhou!", "Please contact your administrator." : "Por favor, contate o administrador.", + "An internal error occured." : "Ocorreu um erro interno.", + "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", "Forgot your password? Reset it!" : "Esqueceu sua senha? Redefini-la!", "remember" : "lembrar", "Log in" : "Fazer login", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index 62991abce5b..d7d70d4b5d0 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -11,7 +11,6 @@ OC.L10N.register( "Repair warning: " : "Aviso de reparação:", "Repair error: " : "Repare o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes aplicações incompatíveis foram desativadas: %s", - "Following 3rd party apps have been disabled: %s" : "As seguintes aplicações de 3.ºs foram desativadas: %s", "Invalid file provided" : "Ficheiro selecionado inválido", "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem", "Unknown filetype" : "Tipo de ficheiro desconhecido", @@ -72,10 +71,9 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na <a href=\"{docLink}\">documentação</a>.", "Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança e recomendamos que o corrija.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para um mínimo de \"2,678,400\" segundos. Isto é um potencial risco de segurança e recomendamos que o corrija.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a este site via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.", "Shared" : "Partilhado", "Shared with {recipients}" : "Partilhado com {recipients}", "Share" : "Compartilhar", @@ -85,7 +83,8 @@ OC.L10N.register( "Error while changing permissions" : "Erro ao mudar permissões", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", "Shared with you by {owner}" : "Partilhado consigo por {owner}", - "Share with user or group …" : "Partilhar com utilizador ou grupo...", + "Share with users or groups …" : "Partilhar com utilizadores ou grupos...", + "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", "Share link" : "Compartilhar hiperligação", "The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação", "Link" : "Hiperligação", @@ -98,6 +97,7 @@ OC.L10N.register( "Set expiration date" : "Definir a data de expiração", "Expiration" : "Data de expiração", "Expiration date" : "Data de expiração", + "An error occured. Please try again" : "Ocorreu um erro. Por favor, tente de novo", "Adding user..." : "A adicionar o utilizador ...", "group" : "grupo", "remote" : "remoto", @@ -143,7 +143,6 @@ OC.L10N.register( "New Password" : "Nova palavra-passe", "Reset password" : "Repor palavra-passe", "Searching other places" : "A pesquisar noutros lugares", - "No search result in other places" : "Nenhum resultado de pesquisa noutros lugares", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado de pesquisa noutros lugares","{count} resultados de pesquisa noutros lugares"], "Personal" : "Pessoal", "Users" : "Utilizadores", @@ -171,12 +170,13 @@ OC.L10N.register( "Technical details" : "Detalhes técnicos", "Remote Address: %s" : "Endereço remoto: %s", "Request ID: %s" : "Id. do Pedido: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensagem: %s", "File: %s" : "Ficheiro: %s", "Line: %s" : "Linha: %s", "Trace" : "Rasto", - "Security Warning" : "Aviso de Segurança", + "Security warning" : "Aviso de Segurança", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>", @@ -185,23 +185,27 @@ OC.L10N.register( "Data folder" : "Pasta de dados", "Configure the database" : "Configure a base de dados", "Only %s is available." : "Só está disponível %s.", + "For more details check out the documentation." : "Para mais detalhes consulte a documentação.", "Database user" : "Utilizador da base de dados", "Database password" : "Palavra-passe da base de dados", "Database name" : "Nome da base de dados", "Database tablespace" : "Tablespace da base de dados", "Database host" : "Anfitrião da base de dados", - "Performance Warning" : "Aviso de Desempenho", + "Performance warning" : "Aviso de Desempenho", "SQLite will be used as database." : "SQLite será usado como base de dados.", "For larger installations we recommend to choose a different database backend." : "Para instalações maiores, nós recomendamos que escolha uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "Finish setup" : "Terminar consiguração", "Finishing …" : "A terminar...", + "Need help?" : "Precisa de ajuda?", + "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para funcionar correctamente. Por favor, {linkstart}active o JavaScript{linkend} e recarregue a página.", - "%s is available. Get more information on how to update." : "%s está disponível. Tenha mais informações como actualizar.", "Log out" : "Terminar sessão", "Search" : "Procurar", "Server side authentication failed!" : "Autenticação do lado do servidor falhou!", "Please contact your administrator." : "Por favor contacte o administrador.", + "An internal error occured." : "Ocorreu um erro interno.", + "Please try again or contact your administrator." : "Por favor tente de novo ou contacte o administrador.", "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!", "remember" : "lembrar", "Log in" : "Entrar", diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index d4f869f01e1..947eea1a942 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -9,7 +9,6 @@ "Repair warning: " : "Aviso de reparação:", "Repair error: " : "Repare o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes aplicações incompatíveis foram desativadas: %s", - "Following 3rd party apps have been disabled: %s" : "As seguintes aplicações de 3.ºs foram desativadas: %s", "Invalid file provided" : "Ficheiro selecionado inválido", "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem", "Unknown filetype" : "Tipo de ficheiro desconhecido", @@ -70,10 +69,9 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "O seu servidor web não está configurado correctamente para autorizar sincronização de ficheiros, pois o interface WebDAV parece estar com problemas.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Este servidor ownCloud não tem uma ligação de Internet a funcionar. Isto significa que algumas funcionalidades como o acesso a locais externos, notificações sobre actualizações, ou a instalação de aplicações de terceiros não irá funcionar. Aceder aos ficheiros remotamente e enviar notificações de email poderão não funcionar também. Sugerimos que active uma ligação à Internet se pretende obter todas as funcionalidades do ownCloud.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "A sua pasta com os dados e os seus ficheiros estão provavelmente acessíveis a partir das internet. O seu ficheiro .htaccess não está a funcionar corretamente. Sugerimos veementemente que configure o seu servidor web de maneira a que a pasta com os dados deixe de ficar acessível, ou mova a pasta com os dados para fora da raiz de documentos do servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Nenhuma memória de cache foi configurada. Se possível configure-a de forma a optimizar o desempenho. Mais informações podem ser encontradas na <a href=\"{docLink}\">documentação</a>.", "Error occurred while checking server setup" : "Ocorreu um erro durante a verificação da configuração do servidor", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança e recomendamos que o corrija.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"Strict-Transport-Security\" não está configurado para um mínimo de \"2,678,400\" segundos. Isto é um potencial risco de segurança e recomendamos que o corrija.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Está a aceder a este site via HTTP. Recomendamos vivamente que configure o servidor para forçar o uso de HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "O cabeçalho HTTP \"{header}\" não está configurado para igualar \"{expected}\". Isto é um potencial risco de segurança ou privacidade e recomendamos que o corrija.", "Shared" : "Partilhado", "Shared with {recipients}" : "Partilhado com {recipients}", "Share" : "Compartilhar", @@ -83,7 +81,8 @@ "Error while changing permissions" : "Erro ao mudar permissões", "Shared with you and the group {group} by {owner}" : "Partilhado consigo e com o grupo {group} por {owner}", "Shared with you by {owner}" : "Partilhado consigo por {owner}", - "Share with user or group …" : "Partilhar com utilizador ou grupo...", + "Share with users or groups …" : "Partilhar com utilizadores ou grupos...", + "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", "Share link" : "Compartilhar hiperligação", "The public link will expire no later than {days} days after it is created" : "O link público expira, o mais tardar {days} dias após sua criação", "Link" : "Hiperligação", @@ -96,6 +95,7 @@ "Set expiration date" : "Definir a data de expiração", "Expiration" : "Data de expiração", "Expiration date" : "Data de expiração", + "An error occured. Please try again" : "Ocorreu um erro. Por favor, tente de novo", "Adding user..." : "A adicionar o utilizador ...", "group" : "grupo", "remote" : "remoto", @@ -141,7 +141,6 @@ "New Password" : "Nova palavra-passe", "Reset password" : "Repor palavra-passe", "Searching other places" : "A pesquisar noutros lugares", - "No search result in other places" : "Nenhum resultado de pesquisa noutros lugares", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} resultado de pesquisa noutros lugares","{count} resultados de pesquisa noutros lugares"], "Personal" : "Pessoal", "Users" : "Utilizadores", @@ -169,12 +168,13 @@ "Technical details" : "Detalhes técnicos", "Remote Address: %s" : "Endereço remoto: %s", "Request ID: %s" : "Id. do Pedido: %s", + "Type: %s" : "Tipo: %s", "Code: %s" : "Código: %s", "Message: %s" : "Mensagem: %s", "File: %s" : "Ficheiro: %s", "Line: %s" : "Linha: %s", "Trace" : "Rasto", - "Security Warning" : "Aviso de Segurança", + "Security warning" : "Aviso de Segurança", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "A pasta de dados do ownCloud e os respectivos ficheiros, estarão provavelmente acessíveis a partir da internet, pois o ficheiros .htaccess não funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Para obter informações de como configurar correctamente o servidor, veja em: <a href=\"%s\" target=\"_blank\">documentação</a>.", "Create an <strong>admin account</strong>" : "Criar uma <strong>conta administrativa</strong>", @@ -183,23 +183,27 @@ "Data folder" : "Pasta de dados", "Configure the database" : "Configure a base de dados", "Only %s is available." : "Só está disponível %s.", + "For more details check out the documentation." : "Para mais detalhes consulte a documentação.", "Database user" : "Utilizador da base de dados", "Database password" : "Palavra-passe da base de dados", "Database name" : "Nome da base de dados", "Database tablespace" : "Tablespace da base de dados", "Database host" : "Anfitrião da base de dados", - "Performance Warning" : "Aviso de Desempenho", + "Performance warning" : "Aviso de Desempenho", "SQLite will be used as database." : "SQLite será usado como base de dados.", "For larger installations we recommend to choose a different database backend." : "Para instalações maiores, nós recomendamos que escolha uma interface de base de dados diferente.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "O uso de SQLite é desencorajado especialmente se estiver a pensar em dar uso ao cliente desktop para sincronizar os seus ficheiros no seu computador.", "Finish setup" : "Terminar consiguração", "Finishing …" : "A terminar...", + "Need help?" : "Precisa de ajuda?", + "See the documentation" : "Veja a documentação", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Esta aplicação requer JavaScript para funcionar correctamente. Por favor, {linkstart}active o JavaScript{linkend} e recarregue a página.", - "%s is available. Get more information on how to update." : "%s está disponível. Tenha mais informações como actualizar.", "Log out" : "Terminar sessão", "Search" : "Procurar", "Server side authentication failed!" : "Autenticação do lado do servidor falhou!", "Please contact your administrator." : "Por favor contacte o administrador.", + "An internal error occured." : "Ocorreu um erro interno.", + "Please try again or contact your administrator." : "Por favor tente de novo ou contacte o administrador.", "Forgot your password? Reset it!" : "Esqueceu-se da sua palavra-passe? Recupere-a!", "remember" : "lembrar", "Log in" : "Entrar", diff --git a/core/l10n/ro.js b/core/l10n/ro.js index 693ff9f61df..f088f92f3b5 100644 --- a/core/l10n/ro.js +++ b/core/l10n/ro.js @@ -6,6 +6,9 @@ OC.L10N.register( "Turned off maintenance mode" : "Modul mentenanță a fost dezactivat", "Updated database" : "Bază de date actualizată", "Updated \"%s\" to %s" : "\"%s\" a fost actualizat până la %s", + "Repair warning: " : "Alerte reparare:", + "Repair error: " : "Eroare de reparare:", + "Following incompatible apps have been disabled: %s" : "Următoarele aplicații incompatibile au fost dezactivate: %s", "No image or file provided" : "Nu a fost furnizat vreo imagine sau fișier", "Unknown filetype" : "Tip fișier necunoscut", "Invalid image" : "Imagine invalidă", @@ -62,7 +65,6 @@ OC.L10N.register( "Error while changing permissions" : "Eroare la modificarea permisiunilor", "Shared with you and the group {group} by {owner}" : "Distribuie cu tine si grupul {group} de {owner}", "Shared with you by {owner}" : "Distribuie cu tine de {owner}", - "Share with user or group …" : "Partajeaza cu utilizator sau cu grup", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "Legătura publică va expira nu mai târziu de {days} zile de la ziua creării", "Link" : "Legătură", @@ -95,7 +97,6 @@ OC.L10N.register( "Enter new" : "Introducere nou", "Delete" : "Șterge", "Add" : "Adaugă", - "_download %n file_::_download %n files_" : ["","",""], "Updating {productName} to version {version}, this may take a while." : "Se actualizează {productName} la versiunea {version}, poate dura câteva momente.", "Please reload the page." : "Te rugăm să reîncarci pagina.", "The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.", @@ -104,7 +105,6 @@ OC.L10N.register( "New password" : "Noua parolă", "New Password" : "Noua parolă", "Reset password" : "Resetează parola", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Personal", "Users" : "Utilizatori", "Apps" : "Aplicații", @@ -114,7 +114,6 @@ OC.L10N.register( "Tag already exists" : "Eticheta deja există", "Access forbidden" : "Acces restricționat", "The share will expire on %s." : "Partajarea va expira în data de %s.", - "Security Warning" : "Avertisment de securitate", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.", "Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>", @@ -128,7 +127,6 @@ OC.L10N.register( "Database tablespace" : "Tabela de spațiu a bazei de date", "Database host" : "Bază date", "Finish setup" : "Finalizează instalarea", - "%s is available. Get more information on how to update." : "%s este disponibil. Vezi mai multe informații despre procesul de actualizare.", "Log out" : "Ieșire", "Search" : "Căutare", "Forgot your password? Reset it!" : "Ți-ai uitat parola? Resetează!", diff --git a/core/l10n/ro.json b/core/l10n/ro.json index fc7ca5cdc1f..702da64e6a1 100644 --- a/core/l10n/ro.json +++ b/core/l10n/ro.json @@ -4,6 +4,9 @@ "Turned off maintenance mode" : "Modul mentenanță a fost dezactivat", "Updated database" : "Bază de date actualizată", "Updated \"%s\" to %s" : "\"%s\" a fost actualizat până la %s", + "Repair warning: " : "Alerte reparare:", + "Repair error: " : "Eroare de reparare:", + "Following incompatible apps have been disabled: %s" : "Următoarele aplicații incompatibile au fost dezactivate: %s", "No image or file provided" : "Nu a fost furnizat vreo imagine sau fișier", "Unknown filetype" : "Tip fișier necunoscut", "Invalid image" : "Imagine invalidă", @@ -60,7 +63,6 @@ "Error while changing permissions" : "Eroare la modificarea permisiunilor", "Shared with you and the group {group} by {owner}" : "Distribuie cu tine si grupul {group} de {owner}", "Shared with you by {owner}" : "Distribuie cu tine de {owner}", - "Share with user or group …" : "Partajeaza cu utilizator sau cu grup", "Share link" : "Share link", "The public link will expire no later than {days} days after it is created" : "Legătura publică va expira nu mai târziu de {days} zile de la ziua creării", "Link" : "Legătură", @@ -93,7 +95,6 @@ "Enter new" : "Introducere nou", "Delete" : "Șterge", "Add" : "Adaugă", - "_download %n file_::_download %n files_" : ["","",""], "Updating {productName} to version {version}, this may take a while." : "Se actualizează {productName} la versiunea {version}, poate dura câteva momente.", "Please reload the page." : "Te rugăm să reîncarci pagina.", "The update was successful. Redirecting you to ownCloud now." : "Actualizare reușită. Ești redirecționat către ownCloud.", @@ -102,7 +103,6 @@ "New password" : "Noua parolă", "New Password" : "Noua parolă", "Reset password" : "Resetează parola", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Personal", "Users" : "Utilizatori", "Apps" : "Aplicații", @@ -112,7 +112,6 @@ "Tag already exists" : "Eticheta deja există", "Access forbidden" : "Acces restricționat", "The share will expire on %s." : "Partajarea va expira în data de %s.", - "Security Warning" : "Avertisment de securitate", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Directorul tău de date și fișiere sunt probabil accesibile de pe Internet, deoarece fișierul .htaccess nu funcționează.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pentru informații despre cum să configurezi serverul, vezi <a href=\"%s\" target=\"_blank\">documentația</a>.", "Create an <strong>admin account</strong>" : "Crează un <strong>cont de administrator</strong>", @@ -126,7 +125,6 @@ "Database tablespace" : "Tabela de spațiu a bazei de date", "Database host" : "Bază date", "Finish setup" : "Finalizează instalarea", - "%s is available. Get more information on how to update." : "%s este disponibil. Vezi mai multe informații despre procesul de actualizare.", "Log out" : "Ieșire", "Search" : "Căutare", "Forgot your password? Reset it!" : "Ți-ai uitat parola? Resetează!", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 131d25bf8e3..507c37b1372 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -4,14 +4,15 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Невозможно отправить письмо следующим пользователям: %s", "Turned on maintenance mode" : "Режим отладки включён", "Turned off maintenance mode" : "Режим отладки отключён", + "Maintenance mode is kept active" : "Режим обслуживания оставлен включенным", "Updated database" : "База данных обновлена", "Checked database schema update" : "Проверено обновление схемы БД", "Checked database schema update for apps" : "Проверено обновление схемы БД приложений", "Updated \"%s\" to %s" : "Обновлено \"%s\" до %s", "Repair warning: " : "Предупреждение восстановления:", "Repair error: " : "Ошибка восстановления:", - "Following incompatible apps have been disabled: %s" : "Слежка за несовместимыми приложениями отключена: %s", - "Following 3rd party apps have been disabled: %s" : "Слежка за приложениями 3-их лиц отключена: %s", + "Following incompatible apps have been disabled: %s" : "Следующие несовместимые приложения были отключены: %s", + "Following apps have been disabled: %s" : "Были отключены следующие приложения: %s", "Invalid file provided" : "Указан неправильный файл", "No image or file provided" : "Не указано изображение или файл", "Unknown filetype" : "Неизвестный тип файла", @@ -53,7 +54,7 @@ OC.L10N.register( "Ok" : "Ок", "Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}", "read-only" : "только для чтения", - "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах"], + "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов в файлах"], "One file conflict" : "Один конфликт в файлах", "New Files" : "Новые файлы", "Already existing files" : "Существующие файлы", @@ -62,7 +63,7 @@ OC.L10N.register( "Cancel" : "Отмена", "Continue" : "Продолжить", "(all selected)" : "(все выбранные)", - "({count} selected)" : "({count} выбранных)", + "({count} selected)" : "(выбрано: {count})", "Error loading file exists template" : "Ошибка при загрузке шаблона существующего файла", "Very weak password" : "Очень слабый пароль", "Weak password" : "Слабый пароль", @@ -72,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей <a href=\"{docLink}\">документации</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации</a>.", "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не совпадает с \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен по крайней мере на \"2,678,400\" секунд. Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.", "Shared" : "Общий доступ", "Shared with {recipients}" : "Вы поделились с {recipients}", "Share" : "Поделиться", @@ -85,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "При изменении прав доступа произошла ошибка", "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", "Shared with you by {owner}" : "С вами поделился {owner} ", - "Share with user or group …" : "Поделиться с пользователем или группой...", + "Share with users or groups …" : "Поделиться с пользователями или группами ...", + "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", "Share link" : "Поделиться ссылкой", "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания", "Link" : "Ссылка", @@ -98,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Установить срок действия", "Expiration" : "Срок действия", "Expiration date" : "Дата окончания", + "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", "Adding user..." : "Добавляем пользователя...", "group" : "группа", "remote" : "удаленный", @@ -129,10 +135,12 @@ OC.L10N.register( "sunny" : "солнечно", "Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}", "Hello {name}" : "Здравствуйте {name}", - "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов"], + "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], + "{version} is available. Get more information on how to update." : "Доступна версия {version}. Получить дополнительную информацию о порядке обновления.", "Updating {productName} to version {version}, this may take a while." : "Идет обновление {productName} до версии {version}, пожалуйста, подождите.", "Please reload the page." : "Обновите страницу.", "The update was unsuccessful. " : "Обновление не удалось.", + "The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.", "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.", "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль из-за неверного токена", "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.", @@ -143,8 +151,8 @@ OC.L10N.register( "New Password" : "Новый пароль", "Reset password" : "Сбросить пароль", "Searching other places" : "Идет поиск в других местах", - "No search result in other places" : "В других местах ничего не найдено", - "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат поиска в других местах","{count} результата поиска в других местах","{count} результатов поиска в других местах"], + "No search results in other places" : "В других местах ничего не найдено", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат поиска в других местах","{count} результата поиска в других местах","{count} результатов поиска в других местах","{count} результатов поиска в других местах"], "Personal" : "Личное", "Users" : "Пользователи", "Apps" : "Приложения", @@ -171,12 +179,13 @@ OC.L10N.register( "Technical details" : "Технические детали", "Remote Address: %s" : "Удаленный адрес: %s", "Request ID: %s" : "ID Запроса: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Сообщение: %s", "File: %s" : "Файл: %s", "Line: %s" : "Линия: %s", "Trace" : "След", - "Security Warning" : "Предупреждение безопасности", + "Security warning" : "Предупреждение безопасности", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Правила файла .htaccess не выполняются, возможно, каталог данных и файлы свободно доступны из интернета.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Что-бы правильно настроить сервер, руководствуйтесь <a hrev=\"%s\"target=\"blank\">документацией</a>.", "Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>", @@ -185,23 +194,28 @@ OC.L10N.register( "Data folder" : "Каталог с данными", "Configure the database" : "Настройка базы данных", "Only %s is available." : "Доступен только %s.", + "Install and activate additional PHP modules to choose other database types." : "Установите и активируйте дополнительные модули PHP для возможности выбора других типов баз данных.", + "For more details check out the documentation." : "За дополнительными сведениями обратитесь к документации.", "Database user" : "Пользователь базы данных", "Database password" : "Пароль базы данных", "Database name" : "Название базы данных", "Database tablespace" : "Табличое пространство базы данных", "Database host" : "Хост базы данных", - "Performance Warning" : "Предупреждение о производительности", + "Performance warning" : "Предупреждение о производительности", "SQLite will be used as database." : "В качестве базы данных будет использована SQLite.", "For larger installations we recommend to choose a different database backend." : "Для крупных проектов мы советуем выбрать другую базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использование клиента для ПК.", "Finish setup" : "Завершить установку", "Finishing …" : "Завершение...", + "Need help?" : "Нужна помощь?", + "See the documentation" : "Посмотреть документацию", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Это приложение требует включённый JavaScript для корректной работы. Пожалуйста, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включите JavaScript</a> и перезагрузите интерфейс.", - "%s is available. Get more information on how to update." : "Доступна версия %s. Получить дополнительную информацию о порядке обновления.", "Log out" : "Выйти", "Search" : "Найти", "Server side authentication failed!" : "Неудачная аутентификация с сервером!", "Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.", + "An internal error occured." : "Произошла внутренняя ошибка", + "Please try again or contact your administrator." : "Пожалуйста попробуйте ещё раз или свяжитесь с вашим администратором", "Forgot your password? Reset it!" : "Забыли пароль? Сбросьте его!", "remember" : "запомнить", "Log in" : "Войти", @@ -224,4 +238,4 @@ OC.L10N.register( "This %s instance is currently in maintenance mode, which may take a while." : "Это %s находится в режиме технического обслуживания, которое может занять некоторое время.", "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s снова станет доступен." }, -"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); +"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/core/l10n/ru.json b/core/l10n/ru.json index 0ac1d2bb874..31558b7c9bd 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -2,14 +2,15 @@ "Couldn't send mail to following users: %s " : "Невозможно отправить письмо следующим пользователям: %s", "Turned on maintenance mode" : "Режим отладки включён", "Turned off maintenance mode" : "Режим отладки отключён", + "Maintenance mode is kept active" : "Режим обслуживания оставлен включенным", "Updated database" : "База данных обновлена", "Checked database schema update" : "Проверено обновление схемы БД", "Checked database schema update for apps" : "Проверено обновление схемы БД приложений", "Updated \"%s\" to %s" : "Обновлено \"%s\" до %s", "Repair warning: " : "Предупреждение восстановления:", "Repair error: " : "Ошибка восстановления:", - "Following incompatible apps have been disabled: %s" : "Слежка за несовместимыми приложениями отключена: %s", - "Following 3rd party apps have been disabled: %s" : "Слежка за приложениями 3-их лиц отключена: %s", + "Following incompatible apps have been disabled: %s" : "Следующие несовместимые приложения были отключены: %s", + "Following apps have been disabled: %s" : "Были отключены следующие приложения: %s", "Invalid file provided" : "Указан неправильный файл", "No image or file provided" : "Не указано изображение или файл", "Unknown filetype" : "Неизвестный тип файла", @@ -51,7 +52,7 @@ "Ok" : "Ок", "Error loading message template: {error}" : "Ошибка загрузки шаблона сообщений: {error}", "read-only" : "только для чтения", - "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах"], + "_{count} file conflict_::_{count} file conflicts_" : ["{count} конфликт в файлах","{count} конфликта в файлах","{count} конфликтов в файлах","{count} конфликтов в файлах"], "One file conflict" : "Один конфликт в файлах", "New Files" : "Новые файлы", "Already existing files" : "Существующие файлы", @@ -60,7 +61,7 @@ "Cancel" : "Отмена", "Continue" : "Продолжить", "(all selected)" : "(все выбранные)", - "({count} selected)" : "({count} выбранных)", + "({count} selected)" : "(выбрано: {count})", "Error loading file exists template" : "Ошибка при загрузке шаблона существующего файла", "Very weak password" : "Очень слабый пароль", "Weak password" : "Слабый пароль", @@ -70,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер еще не настроен должным образом, чтобы позволить синхронизацию файлов, потому что интерфейс WebDAV, кажется, испорчен.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Этот сервер не имеет подключения к Интернету. Это означает, что некоторые из функций, таких как внешнее хранилище, уведомления об обновлениях и установки сторонних приложений не будут работать. Доступ к файлам удаленно и отправки уведомлений по почте могут не работать. Мы предлагаем включить подключение к Интернету для этого сервера, если вы хотите, чтобы все функции работали.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог данных и ваши файлы возможно доступны из интернете. .htaccess файл не работает. Мы настоятельно рекомендуем вам настроить ваш веб сервер таким образом, что-бы каталог данных не был больше доступен или переместите каталог данных за пределы корня веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Не настроена система кеширования. Для увеличения производительности сервера, по возможности, настройте memcache. Более подробную информацию, вы можете посмотреть в нашей <a href=\"{docLink}\">документации</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не может быть прочитан PHP, что крайне нежелательно по причинам безопасности. Дополнительную информацию можно найти в a href=\"{docLink}\">документации</a>.", "Error occurred while checking server setup" : "Произошла ошибка при проверке настроек сервера", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не совпадает с \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен по крайней мере на \"2,678,400\" секунд. Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "Заголовок HTTP \"{header}\" не настроен на ожидаемый \"{expected}\". Это потенциальная проблема безопасности и мы рекомендуем изменить эти настройки.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "Заголовок HTTP \"Strict-Transport-Security\" должен быть настроен хотя бы на \"{seconds}\" секунд. Для улучшения безопасности мы рекомендуем включить HSTS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Вы зашли на этот сайт через HTTP. Мы настоятельно рекомендуем настроить ваш сервер на использование HTTPS согласно нашим <a href=\"{docUrl}\">подсказкам по безопасности</a>.", "Shared" : "Общий доступ", "Shared with {recipients}" : "Вы поделились с {recipients}", "Share" : "Поделиться", @@ -83,7 +86,9 @@ "Error while changing permissions" : "При изменении прав доступа произошла ошибка", "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", "Shared with you by {owner}" : "С вами поделился {owner} ", - "Share with user or group …" : "Поделиться с пользователем или группой...", + "Share with users or groups …" : "Поделиться с пользователями или группами ...", + "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", "Share link" : "Поделиться ссылкой", "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания", "Link" : "Ссылка", @@ -96,6 +101,7 @@ "Set expiration date" : "Установить срок действия", "Expiration" : "Срок действия", "Expiration date" : "Дата окончания", + "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", "Adding user..." : "Добавляем пользователя...", "group" : "группа", "remote" : "удаленный", @@ -127,10 +133,12 @@ "sunny" : "солнечно", "Hello {name}, the weather is {weather}" : "Здравствуйте {name}, погода {weather}", "Hello {name}" : "Здравствуйте {name}", - "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов"], + "_download %n file_::_download %n files_" : ["скачать %n файл","скачать %n файла","скачать %n файлов","скачать %n файлов"], + "{version} is available. Get more information on how to update." : "Доступна версия {version}. Получить дополнительную информацию о порядке обновления.", "Updating {productName} to version {version}, this may take a while." : "Идет обновление {productName} до версии {version}, пожалуйста, подождите.", "Please reload the page." : "Обновите страницу.", "The update was unsuccessful. " : "Обновление не удалось.", + "The update was successful. There were warnings." : "Обновление прошло успешно. Были предупреждения.", "The update was successful. Redirecting you to ownCloud now." : "Обновление прошло успешно. Перенаправляем в ownCloud.", "Couldn't reset password because the token is invalid" : "Невозможно сбросить пароль из-за неверного токена", "Couldn't send reset email. Please make sure your username is correct." : "Не удалось отправить письмо для сброса пароля. Убедитесь, что имя пользователя указано верно.", @@ -141,8 +149,8 @@ "New Password" : "Новый пароль", "Reset password" : "Сбросить пароль", "Searching other places" : "Идет поиск в других местах", - "No search result in other places" : "В других местах ничего не найдено", - "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат поиска в других местах","{count} результата поиска в других местах","{count} результатов поиска в других местах"], + "No search results in other places" : "В других местах ничего не найдено", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат поиска в других местах","{count} результата поиска в других местах","{count} результатов поиска в других местах","{count} результатов поиска в других местах"], "Personal" : "Личное", "Users" : "Пользователи", "Apps" : "Приложения", @@ -169,12 +177,13 @@ "Technical details" : "Технические детали", "Remote Address: %s" : "Удаленный адрес: %s", "Request ID: %s" : "ID Запроса: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Сообщение: %s", "File: %s" : "Файл: %s", "Line: %s" : "Линия: %s", "Trace" : "След", - "Security Warning" : "Предупреждение безопасности", + "Security warning" : "Предупреждение безопасности", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Правила файла .htaccess не выполняются, возможно, каталог данных и файлы свободно доступны из интернета.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Что-бы правильно настроить сервер, руководствуйтесь <a hrev=\"%s\"target=\"blank\">документацией</a>.", "Create an <strong>admin account</strong>" : "Создать <strong>учётную запись администратора</strong>", @@ -183,23 +192,28 @@ "Data folder" : "Каталог с данными", "Configure the database" : "Настройка базы данных", "Only %s is available." : "Доступен только %s.", + "Install and activate additional PHP modules to choose other database types." : "Установите и активируйте дополнительные модули PHP для возможности выбора других типов баз данных.", + "For more details check out the documentation." : "За дополнительными сведениями обратитесь к документации.", "Database user" : "Пользователь базы данных", "Database password" : "Пароль базы данных", "Database name" : "Название базы данных", "Database tablespace" : "Табличое пространство базы данных", "Database host" : "Хост базы данных", - "Performance Warning" : "Предупреждение о производительности", + "Performance warning" : "Предупреждение о производительности", "SQLite will be used as database." : "В качестве базы данных будет использована SQLite.", "For larger installations we recommend to choose a different database backend." : "Для крупных проектов мы советуем выбрать другую базу данных.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Особенно вызывает сомнение использование SQLite при синхронизации файлов с использование клиента для ПК.", "Finish setup" : "Завершить установку", "Finishing …" : "Завершение...", + "Need help?" : "Нужна помощь?", + "See the documentation" : "Посмотреть документацию", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Это приложение требует включённый JavaScript для корректной работы. Пожалуйста, <a href=\"http://enable-javascript.com/\" target=\"_blank\">включите JavaScript</a> и перезагрузите интерфейс.", - "%s is available. Get more information on how to update." : "Доступна версия %s. Получить дополнительную информацию о порядке обновления.", "Log out" : "Выйти", "Search" : "Найти", "Server side authentication failed!" : "Неудачная аутентификация с сервером!", "Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.", + "An internal error occured." : "Произошла внутренняя ошибка", + "Please try again or contact your administrator." : "Пожалуйста попробуйте ещё раз или свяжитесь с вашим администратором", "Forgot your password? Reset it!" : "Забыли пароль? Сбросьте его!", "remember" : "запомнить", "Log in" : "Войти", @@ -221,5 +235,5 @@ "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Чтобы избежать задержек в крупных установках, вы можете выполнить следующую команду в каталоге установки:", "This %s instance is currently in maintenance mode, which may take a while." : "Это %s находится в режиме технического обслуживания, которое может занять некоторое время.", "This page will refresh itself when the %s instance is available again." : "Эта страница обновится, когда экземпляр %s снова станет доступен." -},"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);" +},"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/core/l10n/si_LK.js b/core/l10n/si_LK.js index 59062b27912..11e5ef38e58 100644 --- a/core/l10n/si_LK.js +++ b/core/l10n/si_LK.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "ඔව්", "Choose" : "තෝරන්න", "Ok" : "හරි", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "එපා", "Share" : "බෙදා හදා ගන්න", "Error" : "දෝෂයක්", @@ -46,17 +45,14 @@ OC.L10N.register( "Warning" : "අවවාදය", "Delete" : "මකා දමන්න", "Add" : "එකතු කරන්න", - "_download %n file_::_download %n files_" : ["",""], "New password" : "නව මුරපදය", "Reset password" : "මුරපදය ප්රත්යාරම්භ කරන්න", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "පෞද්ගලික", "Users" : "පරිශීලකයන්", "Apps" : "යෙදුම්", "Admin" : "පරිපාලක", "Help" : "උදව්", "Access forbidden" : "ඇතුල් වීම තහනම්", - "Security Warning" : "ආරක්ෂක නිවේදනයක්", "Username" : "පරිශීලක නම", "Data folder" : "දත්ත ෆෝල්ඩරය", "Configure the database" : "දත්ත සමුදාය හැඩගැසීම", diff --git a/core/l10n/si_LK.json b/core/l10n/si_LK.json index 957d888a3e2..5190ce77e81 100644 --- a/core/l10n/si_LK.json +++ b/core/l10n/si_LK.json @@ -24,7 +24,6 @@ "Yes" : "ඔව්", "Choose" : "තෝරන්න", "Ok" : "හරි", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "එපා", "Share" : "බෙදා හදා ගන්න", "Error" : "දෝෂයක්", @@ -44,17 +43,14 @@ "Warning" : "අවවාදය", "Delete" : "මකා දමන්න", "Add" : "එකතු කරන්න", - "_download %n file_::_download %n files_" : ["",""], "New password" : "නව මුරපදය", "Reset password" : "මුරපදය ප්රත්යාරම්භ කරන්න", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "පෞද්ගලික", "Users" : "පරිශීලකයන්", "Apps" : "යෙදුම්", "Admin" : "පරිපාලක", "Help" : "උදව්", "Access forbidden" : "ඇතුල් වීම තහනම්", - "Security Warning" : "ආරක්ෂක නිවේදනයක්", "Username" : "පරිශීලක නම", "Data folder" : "දත්ත ෆෝල්ඩරය", "Configure the database" : "දත්ත සමුදාය හැඩගැසීම", diff --git a/core/l10n/sk.js b/core/l10n/sk.js index 6a57266201e..6d446d19099 100644 --- a/core/l10n/sk.js +++ b/core/l10n/sk.js @@ -21,7 +21,6 @@ OC.L10N.register( "November" : "November", "December" : "December", "Settings" : "Nastavenia", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "Cancel" : "Zrušiť", "Share" : "Zdieľať", "group" : "skupina", diff --git a/core/l10n/sk.json b/core/l10n/sk.json index 3eb33e886af..05064303dac 100644 --- a/core/l10n/sk.json +++ b/core/l10n/sk.json @@ -19,7 +19,6 @@ "November" : "November", "December" : "December", "Settings" : "Nastavenia", - "_{count} file conflict_::_{count} file conflicts_" : ["","",""], "Cancel" : "Zrušiť", "Share" : "Zdieľať", "group" : "skupina", diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index 39e625d1203..2c92ce92896 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -3,18 +3,23 @@ OC.L10N.register( { "Couldn't send mail to following users: %s " : "Nebolo možné odoslať email týmto používateľom: %s ", "Turned on maintenance mode" : "Mód údržby je zapnutý", - "Turned off maintenance mode" : "Mód údržby e vypnutý", + "Turned off maintenance mode" : "Mód údržby je vypnutý", + "Maintenance mode is kept active" : "Režim údržby je stále aktívny", "Updated database" : "Databáza je aktualizovaná", "Checked database schema update" : "Skontrolovať aktualizáciu schémy databázy", "Checked database schema update for apps" : "Aktualizácia schémy databázy aplikácií bola overená", "Updated \"%s\" to %s" : "Aktualizované \"%s\" na %s", + "Repair warning: " : "Oznámenie opravy:", + "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Nasledovné nekompatibilné aplikácie boli zakázané: %s", - "Following 3rd party apps have been disabled: %s" : "Nasledovné aplikácie tretích strán boli zakázané: %s", + "Invalid file provided" : "Zadaný neplatný súbor", "No image or file provided" : "Obrázok alebo súbor nebol zadaný", "Unknown filetype" : "Neznámy typ súboru", "Invalid image" : "Chybný obrázok", "No temporary profile picture available, try again" : "Dočasný profilový obrázok nie je k dispozícii, skúste to znovu", "No crop data provided" : "Dáta pre orezanie neboli zadané", + "No valid crop data provided" : "Neplatné dáta pre orezanie neboli zadané", + "Crop is not square" : "Orezanie nie je štvorcové", "Sunday" : "Nedeľa", "Monday" : "Pondelok", "Tuesday" : "Utorok", @@ -77,7 +82,8 @@ OC.L10N.register( "Error while changing permissions" : "Chyba počas zmeny oprávnení", "Shared with you and the group {group} by {owner}" : "Zdieľané s vami a so skupinou {group} používateľom {owner}", "Shared with you by {owner}" : "Zdieľané s vami používateľom {owner}", - "Share with user or group …" : "Zdieľať s používateľom alebo skupinou ...", + "Share with users or groups …" : "Zdieľať s používateľmi alebo skupinami ...", + "Share with users, groups or remote users …" : "Zdieľať s používateľmi, skupinami alebo vzdialenými používateľmi ...", "Share link" : "Zdieľať linku", "The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení", "Link" : "Odkaz", @@ -90,6 +96,7 @@ OC.L10N.register( "Set expiration date" : "Nastaviť dátum expirácie", "Expiration" : "Koniec platnosti", "Expiration date" : "Dátum expirácie", + "An error occured. Please try again" : "Nastala chyba. Skúste to znovu", "Adding user..." : "Pridávam používateľa...", "group" : "skupina", "remote" : "vzdialený", @@ -122,6 +129,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}", "Hello {name}" : "Vitaj {name}", "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"], + "{version} is available. Get more information on how to update." : "{version} je dostupná. Získajte viac informácií o postupe aktualizácie.", "Updating {productName} to version {version}, this may take a while." : "Aktualizujem {productName} na verziu {version}, chvíľu to môže trvať.", "Please reload the page." : "Obnovte prosím stránku.", "The update was unsuccessful. " : "Aktualizácia bola neúspešná.", @@ -135,7 +143,7 @@ OC.L10N.register( "New Password" : "Nové heslo", "Reset password" : "Obnovenie hesla", "Searching other places" : "Prehľadanie ostatných umiestnení", - "No search result in other places" : "Žiadne výsledky z prehľadávania v ostatných umiestneniach", + "No search results in other places" : "Žiadne výsledky z prehľadávania v ostatných umiestneniach", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} výsledok v ostatných umiestneniach","{count} výsledky v ostatných umiestneniach","{count} výsledkov v ostatných umiestneniach"], "Personal" : "Osobné", "Users" : "Používatelia", @@ -163,12 +171,13 @@ OC.L10N.register( "Technical details" : "Technické podrobnosti", "Remote Address: %s" : "Vzdialená adresa: %s", "Request ID: %s" : "ID požiadavky: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kód: %s", "Message: %s" : "Správa: %s", "File: %s" : "Súbor: %s", "Line: %s" : "Riadok: %s", "Trace" : "Trasa", - "Security Warning" : "Bezpečnostné varovanie", + "Security warning" : "Bezpečnostné varovanie", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.", "Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>", @@ -177,23 +186,28 @@ OC.L10N.register( "Data folder" : "Priečinok dát", "Configure the database" : "Nastaviť databázu", "Only %s is available." : "Len %s je dostupný.", + "Install and activate additional PHP modules to choose other database types." : "Pri výbere iného typu databázy bude potrebné nainštalovať a aktivovať ďalšie PHP moduly.", + "For more details check out the documentation." : "Viac informácií nájdete v dokumentácii.", "Database user" : "Používateľ databázy", "Database password" : "Heslo databázy", "Database name" : "Meno databázy", "Database tablespace" : "Tabuľkový priestor databázy", "Database host" : "Server databázy", - "Performance Warning" : "Varovanie o výkone", + "Performance warning" : "Varovanie o výkone", "SQLite will be used as database." : "Bude použitá SQLite databáza.", "For larger installations we recommend to choose a different database backend." : "Pre veľké inštalácie odporúčame vybrať si iné databázové riešenie.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní klientských aplikácií na synchronizáciu s desktopom neodporúčame používať SQLite.", "Finish setup" : "Dokončiť inštaláciu", "Finishing …" : "Dokončujem...", + "Need help?" : "Potrebujete pomoc?", + "See the documentation" : "Pozri dokumentáciu", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku", - "%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.", "Log out" : "Odhlásiť", "Search" : "Hľadať", "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!", "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", + "An internal error occured." : "Vyskytla sa vnútorná chyba.", + "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.", "Forgot your password? Reset it!" : "Zabudli ste heslo? Obnovte si ho!", "remember" : "zapamätať", "Log in" : "Prihlásiť sa", @@ -213,6 +227,7 @@ OC.L10N.register( "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pred vykonaním ďalšieho kroku sa presvedčte, že databáza, konfiguračný a dátový priečinok sú zazálohované.", "Start update" : "Spustiť aktualizáciu", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby nedošlo k vypršaniu časového limitu vo väčších inštaláciách, môžete namiesto toho použiť nasledujúci príkaz z inštalačného priečinka:", + "This %s instance is currently in maintenance mode, which may take a while." : "Táto %s inštancia je v súčasnej dobe v režime údržby. Počkajte prosím.", "This page will refresh itself when the %s instance is available again." : "Táto stránka sa obnoví sama hneď ako bude %s inštancia znovu dostupná." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index 47a2d06f84c..ac4cb4d0f86 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -1,18 +1,23 @@ { "translations": { "Couldn't send mail to following users: %s " : "Nebolo možné odoslať email týmto používateľom: %s ", "Turned on maintenance mode" : "Mód údržby je zapnutý", - "Turned off maintenance mode" : "Mód údržby e vypnutý", + "Turned off maintenance mode" : "Mód údržby je vypnutý", + "Maintenance mode is kept active" : "Režim údržby je stále aktívny", "Updated database" : "Databáza je aktualizovaná", "Checked database schema update" : "Skontrolovať aktualizáciu schémy databázy", "Checked database schema update for apps" : "Aktualizácia schémy databázy aplikácií bola overená", "Updated \"%s\" to %s" : "Aktualizované \"%s\" na %s", + "Repair warning: " : "Oznámenie opravy:", + "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Nasledovné nekompatibilné aplikácie boli zakázané: %s", - "Following 3rd party apps have been disabled: %s" : "Nasledovné aplikácie tretích strán boli zakázané: %s", + "Invalid file provided" : "Zadaný neplatný súbor", "No image or file provided" : "Obrázok alebo súbor nebol zadaný", "Unknown filetype" : "Neznámy typ súboru", "Invalid image" : "Chybný obrázok", "No temporary profile picture available, try again" : "Dočasný profilový obrázok nie je k dispozícii, skúste to znovu", "No crop data provided" : "Dáta pre orezanie neboli zadané", + "No valid crop data provided" : "Neplatné dáta pre orezanie neboli zadané", + "Crop is not square" : "Orezanie nie je štvorcové", "Sunday" : "Nedeľa", "Monday" : "Pondelok", "Tuesday" : "Utorok", @@ -75,7 +80,8 @@ "Error while changing permissions" : "Chyba počas zmeny oprávnení", "Shared with you and the group {group} by {owner}" : "Zdieľané s vami a so skupinou {group} používateľom {owner}", "Shared with you by {owner}" : "Zdieľané s vami používateľom {owner}", - "Share with user or group …" : "Zdieľať s používateľom alebo skupinou ...", + "Share with users or groups …" : "Zdieľať s používateľmi alebo skupinami ...", + "Share with users, groups or remote users …" : "Zdieľať s používateľmi, skupinami alebo vzdialenými používateľmi ...", "Share link" : "Zdieľať linku", "The public link will expire no later than {days} days after it is created" : "Verejný odkaz nevyprší skôr než za {days} dní po vytvorení", "Link" : "Odkaz", @@ -88,6 +94,7 @@ "Set expiration date" : "Nastaviť dátum expirácie", "Expiration" : "Koniec platnosti", "Expiration date" : "Dátum expirácie", + "An error occured. Please try again" : "Nastala chyba. Skúste to znovu", "Adding user..." : "Pridávam používateľa...", "group" : "skupina", "remote" : "vzdialený", @@ -120,6 +127,7 @@ "Hello {name}, the weather is {weather}" : "Dobrý deň {name}, počasie je {weather}", "Hello {name}" : "Vitaj {name}", "_download %n file_::_download %n files_" : ["stiahnuť %n súbor","stiahnuť %n súbory","stiahnuť %n súborov"], + "{version} is available. Get more information on how to update." : "{version} je dostupná. Získajte viac informácií o postupe aktualizácie.", "Updating {productName} to version {version}, this may take a while." : "Aktualizujem {productName} na verziu {version}, chvíľu to môže trvať.", "Please reload the page." : "Obnovte prosím stránku.", "The update was unsuccessful. " : "Aktualizácia bola neúspešná.", @@ -133,7 +141,7 @@ "New Password" : "Nové heslo", "Reset password" : "Obnovenie hesla", "Searching other places" : "Prehľadanie ostatných umiestnení", - "No search result in other places" : "Žiadne výsledky z prehľadávania v ostatných umiestneniach", + "No search results in other places" : "Žiadne výsledky z prehľadávania v ostatných umiestneniach", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} výsledok v ostatných umiestneniach","{count} výsledky v ostatných umiestneniach","{count} výsledkov v ostatných umiestneniach"], "Personal" : "Osobné", "Users" : "Používatelia", @@ -161,12 +169,13 @@ "Technical details" : "Technické podrobnosti", "Remote Address: %s" : "Vzdialená adresa: %s", "Request ID: %s" : "ID požiadavky: %s", + "Type: %s" : "Typ: %s", "Code: %s" : "Kód: %s", "Message: %s" : "Správa: %s", "File: %s" : "Súbor: %s", "Line: %s" : "Riadok: %s", "Trace" : "Trasa", - "Security Warning" : "Bezpečnostné varovanie", + "Security warning" : "Bezpečnostné varovanie", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Váš priečinok s dátami a súbormi je dostupný z internetu, lebo súbor .htaccess nefunguje.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Pre informácie, ako správne nastaviť váš server, sa pozrite do <a href=\"%s\" target=\"_blank\">dokumentácie</a>.", "Create an <strong>admin account</strong>" : "Vytvoriť <strong>administrátorský účet</strong>", @@ -175,23 +184,28 @@ "Data folder" : "Priečinok dát", "Configure the database" : "Nastaviť databázu", "Only %s is available." : "Len %s je dostupný.", + "Install and activate additional PHP modules to choose other database types." : "Pri výbere iného typu databázy bude potrebné nainštalovať a aktivovať ďalšie PHP moduly.", + "For more details check out the documentation." : "Viac informácií nájdete v dokumentácii.", "Database user" : "Používateľ databázy", "Database password" : "Heslo databázy", "Database name" : "Meno databázy", "Database tablespace" : "Tabuľkový priestor databázy", "Database host" : "Server databázy", - "Performance Warning" : "Varovanie o výkone", + "Performance warning" : "Varovanie o výkone", "SQLite will be used as database." : "Bude použitá SQLite databáza.", "For larger installations we recommend to choose a different database backend." : "Pre veľké inštalácie odporúčame vybrať si iné databázové riešenie.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Najmä pri používaní klientských aplikácií na synchronizáciu s desktopom neodporúčame používať SQLite.", "Finish setup" : "Dokončiť inštaláciu", "Finishing …" : "Dokončujem...", + "Need help?" : "Potrebujete pomoc?", + "See the documentation" : "Pozri dokumentáciu", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Táto aplikácia vyžaduje JavaScript, aby správne fungovala. Prosím, {linkstart}zapnite si JavaScript{linkend} a obnovte stránku", - "%s is available. Get more information on how to update." : "%s je dostupná. Získajte viac informácií o postupe aktualizácie.", "Log out" : "Odhlásiť", "Search" : "Hľadať", "Server side authentication failed!" : "Autentifikácia na serveri zlyhala!", "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", + "An internal error occured." : "Vyskytla sa vnútorná chyba.", + "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.", "Forgot your password? Reset it!" : "Zabudli ste heslo? Obnovte si ho!", "remember" : "zapamätať", "Log in" : "Prihlásiť sa", @@ -211,6 +225,7 @@ "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Pred vykonaním ďalšieho kroku sa presvedčte, že databáza, konfiguračný a dátový priečinok sú zazálohované.", "Start update" : "Spustiť aktualizáciu", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Aby nedošlo k vypršaniu časového limitu vo väčších inštaláciách, môžete namiesto toho použiť nasledujúci príkaz z inštalačného priečinka:", + "This %s instance is currently in maintenance mode, which may take a while." : "Táto %s inštancia je v súčasnej dobe v režime údržby. Počkajte prosím.", "This page will refresh itself when the %s instance is available again." : "Táto stránka sa obnoví sama hneď ako bude %s inštancia znovu dostupná." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/core/l10n/sl.js b/core/l10n/sl.js index 99bf9874c4f..91aba3049d4 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -8,6 +8,7 @@ OC.L10N.register( "Checked database schema update" : "Izbrana posodobitev sheme podatkovne zbirke", "Checked database schema update for apps" : "Izbrana posodobitev sheme podatkovne zbirke za programe", "Updated \"%s\" to %s" : "Datoteka \"%s\" je posodobljena na %s", + "Following incompatible apps have been disabled: %s" : "Navedeni neskladni programi so onemogočeni: %s", "No image or file provided" : "Ni podane datoteke ali slike", "Unknown filetype" : "Neznana vrsta datoteke", "Invalid image" : "Neveljavna slika", @@ -72,7 +73,6 @@ OC.L10N.register( "Error while changing permissions" : "Napaka med spreminjanjem dovoljenj", "Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.", "Shared with you by {owner}" : "V souporabi z vami. Lastnik je {owner}.", - "Share with user or group …" : "Souporaba z uporabnikom ali skupino ...", "Share link" : "Povezava za prejem", "The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.", "Link" : "Povezava", @@ -130,8 +130,6 @@ OC.L10N.register( "New Password" : "Novo geslo", "Reset password" : "Ponastavi geslo", "Searching other places" : "Iskanje drugih mest", - "No search result in other places" : "Ni zadetkov iskanja drugih mest", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Personal" : "Osebno", "Users" : "Uporabniki", "Apps" : "Programi", @@ -163,7 +161,6 @@ OC.L10N.register( "File: %s" : "Datoteka: %s", "Line: %s" : "Vrstica: %s", "Trace" : "Sledenje povezav", - "Security Warning" : "Varnostno opozorilo", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.", "Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>", @@ -180,7 +177,6 @@ OC.L10N.register( "SQLite will be used as database." : "Kot podatkovna zbirka bo uporabljena zbirka SQLite", "Finish setup" : "Končaj nastavitev", "Finishing …" : "Poteka zaključevanje opravila ...", - "%s is available. Get more information on how to update." : "%s je na voljo. Pridobite več podrobnosti za posodobitev.", "Log out" : "Odjava", "Search" : "Poišči", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", diff --git a/core/l10n/sl.json b/core/l10n/sl.json index fc48d3e1880..c799f258454 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -6,6 +6,7 @@ "Checked database schema update" : "Izbrana posodobitev sheme podatkovne zbirke", "Checked database schema update for apps" : "Izbrana posodobitev sheme podatkovne zbirke za programe", "Updated \"%s\" to %s" : "Datoteka \"%s\" je posodobljena na %s", + "Following incompatible apps have been disabled: %s" : "Navedeni neskladni programi so onemogočeni: %s", "No image or file provided" : "Ni podane datoteke ali slike", "Unknown filetype" : "Neznana vrsta datoteke", "Invalid image" : "Neveljavna slika", @@ -70,7 +71,6 @@ "Error while changing permissions" : "Napaka med spreminjanjem dovoljenj", "Shared with you and the group {group} by {owner}" : "V souporabi z vami in skupino {group}. Lastnik je {owner}.", "Shared with you by {owner}" : "V souporabi z vami. Lastnik je {owner}.", - "Share with user or group …" : "Souporaba z uporabnikom ali skupino ...", "Share link" : "Povezava za prejem", "The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.", "Link" : "Povezava", @@ -128,8 +128,6 @@ "New Password" : "Novo geslo", "Reset password" : "Ponastavi geslo", "Searching other places" : "Iskanje drugih mest", - "No search result in other places" : "Ni zadetkov iskanja drugih mest", - "_{count} search result in other places_::_{count} search results in other places_" : ["","","",""], "Personal" : "Osebno", "Users" : "Uporabniki", "Apps" : "Programi", @@ -161,7 +159,6 @@ "File: %s" : "Datoteka: %s", "Line: %s" : "Vrstica: %s", "Trace" : "Sledenje povezav", - "Security Warning" : "Varnostno opozorilo", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Podatkovna mapa in datoteke so najverjetneje javno dostopni preko interneta, saj datoteka .htaccess ni ustrezno nastavljena.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za več informacij o pravilnem nastavljanju strežnika, kliknite na povezavo do <a href=\"%s\" target=\"_blank\">dokumentacije</a>.", "Create an <strong>admin account</strong>" : "Ustvari <strong>skrbniški račun</strong>", @@ -178,7 +175,6 @@ "SQLite will be used as database." : "Kot podatkovna zbirka bo uporabljena zbirka SQLite", "Finish setup" : "Končaj nastavitev", "Finishing …" : "Poteka zaključevanje opravila ...", - "%s is available. Get more information on how to update." : "%s je na voljo. Pridobite več podrobnosti za posodobitev.", "Log out" : "Odjava", "Search" : "Poišči", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index eb0eca0dd5c..cd6cc572cba 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -71,7 +71,6 @@ OC.L10N.register( "Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve", "Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}", "Shared with you by {owner}" : "Ndarë me ju nga {owner}", - "Share with user or group …" : "Ndajeni me përdorues ose grup ...", "Share link" : "Ndaje lidhjen", "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit", "Password protect" : "Mbro me kod", @@ -122,7 +121,6 @@ OC.L10N.register( "New password" : "Kodi i ri", "New Password" : "Fjalëkalim i ri", "Reset password" : "Rivendos kodin", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personale", "Users" : "Përdoruesit", "Apps" : "App", @@ -154,7 +152,6 @@ OC.L10N.register( "File: %s" : "Skedari: %s", "Line: %s" : "Rreshti: %s", "Trace" : "Gjurmim", - "Security Warning" : "Paralajmërim sigurie", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.", "Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>", @@ -170,7 +167,6 @@ OC.L10N.register( "Database host" : "Pozicioni (host) i database-it", "Finish setup" : "Mbaro setup-in", "Finishing …" : "Duke përfunduar ...", - "%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.", "Log out" : "Dalje", "Search" : "Kërko", "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!", diff --git a/core/l10n/sq.json b/core/l10n/sq.json index 057562bb844..a7554c582fe 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -69,7 +69,6 @@ "Error while changing permissions" : "Veprim i gabuar gjatë ndryshimit të lejeve", "Shared with you and the group {group} by {owner}" : "Ndarë me ju dhe me grupin {group} nga {owner}", "Shared with you by {owner}" : "Ndarë me ju nga {owner}", - "Share with user or group …" : "Ndajeni me përdorues ose grup ...", "Share link" : "Ndaje lidhjen", "The public link will expire no later than {days} days after it is created" : "Lidhja publike do të skadojë jo më vonë se {days} ditë pas krijimit", "Password protect" : "Mbro me kod", @@ -120,7 +119,6 @@ "New password" : "Kodi i ri", "New Password" : "Fjalëkalim i ri", "Reset password" : "Rivendos kodin", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "Personale", "Users" : "Përdoruesit", "Apps" : "App", @@ -152,7 +150,6 @@ "File: %s" : "Skedari: %s", "Line: %s" : "Rreshti: %s", "Trace" : "Gjurmim", - "Security Warning" : "Paralajmërim sigurie", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Dosja dhe skedarët e të dhënave tuaja mbase janë të arritshme nga interneti sepse skedari .htaccess nuk po punon.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Për më shumë informacion mbi konfigurimin e duhur të serverit tuaj, ju lutem shikoni <a href=\"%s\" target=\"_blank\">dokumentacionin</a>.", "Create an <strong>admin account</strong>" : "Krijo një <strong>llogari administruesi</strong>", @@ -168,7 +165,6 @@ "Database host" : "Pozicioni (host) i database-it", "Finish setup" : "Mbaro setup-in", "Finishing …" : "Duke përfunduar ...", - "%s is available. Get more information on how to update." : "%s është i disponueshëm. Merrni më shumë informacione mbi azhurnimin.", "Log out" : "Dalje", "Search" : "Kërko", "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!", diff --git a/core/l10n/sr.js b/core/l10n/sr.js index 22553badbbf..4a645b1f1dd 100644 --- a/core/l10n/sr.js +++ b/core/l10n/sr.js @@ -4,41 +4,46 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Не могу да пошаљем е-пошту следећим корисницима: %s ", "Turned on maintenance mode" : "Режим одржавања укључен", "Turned off maintenance mode" : "Режим одржавања искључен", + "Maintenance mode is kept active" : "Режим одржавања се држи активним", "Updated database" : "База података ажурирана", "Checked database schema update" : "Ажурирање шеме базе података, проверено", "Checked database schema update for apps" : "Ажурирање шеме базе података за апликације, проверено", "Updated \"%s\" to %s" : "„%s“ ажириран на %s", + "Repair warning: " : "Упозорење о поправци :", + "Repair error: " : "Грешка поправке:", "Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s", - "Following 3rd party apps have been disabled: %s" : "Следеће апликације треће стране су искључене: %s", + "Invalid file provided" : "Понуђени фајл је неисправан", "No image or file provided" : "Није дата ни слика ни фајл", "Unknown filetype" : "Непознат тип фајла", "Invalid image" : "Неисправна слика", "No temporary profile picture available, try again" : "Нема привремене слике профила. Покушајте поново", "No crop data provided" : "Нема података о опсецању", - "Sunday" : "Недеља", - "Monday" : "Понедељак", - "Tuesday" : "Уторак", - "Wednesday" : "Среда", - "Thursday" : "Четвртак", - "Friday" : "Петак", - "Saturday" : "Субота", - "January" : "Јануар", - "February" : "Фебруар", - "March" : "Март", - "April" : "Април", - "May" : "Мај", - "June" : "Јун", - "July" : "Јул", - "August" : "Август", - "September" : "Септембар", - "October" : "Октобар", - "November" : "Новембар", - "December" : "Децембар", + "No valid crop data provided" : "Нема података о опсецању", + "Crop is not square" : "Опсецање није квадрат", + "Sunday" : "недеља", + "Monday" : "понедељак", + "Tuesday" : "уторак", + "Wednesday" : "среда", + "Thursday" : "четвртак", + "Friday" : "петак", + "Saturday" : "субота", + "January" : "јануар", + "February" : "фебруар", + "March" : "март", + "April" : "април", + "May" : "мај", + "June" : "јун", + "July" : "јул", + "August" : "август", + "September" : "септембар", + "October" : "октобар", + "November" : "новембар", + "December" : "децембар", "Settings" : "Поставке", "Saving..." : "Уписујем...", - "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за обнављање лозинке. Контактирајте администратора.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Веза за обнављање лозинке је послата на вашу е-адресу. Ако је не примите ускоро, проверите фасцикле за нежељену пошту.<br>Ако није ни тамо, контактирајте вашег администратора.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након обнављања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", + "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за ресетовање лозинке. Контактирајте администратора.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Веза за ресетовање лозинке је послата на вашу е-адресу. Ако је не примите ускоро, проверите фасцикле за нежељену пошту.<br>Ако није ни тамо, контактирајте вашег администратора.", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", "I know what I'm doing" : "Знам шта радим", "Password can not be changed. Please contact your administrator." : "Лозинка се не може променити. Контактирајте администратора.", "No" : "Не", @@ -67,10 +72,10 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у <a href=\"{docLink}\">документацији</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој <a href=\"{docLink}\">дукументацији</a>.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "ХТТП заглавље \"{header}\" није подешено као \"{expected}\". Ово је потенцијални безбедносни ризик и препоручујемо да подесите ову поставку.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "ХТТП захлавље „Strict-Transport-Security“ није постављено на најмање \"2,678,400\" секунди. Ово је потенцијални безбедносни ризик и препоручујемо да подесите ову поставку.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Приступате сајту преко небезбедне (ХТТП) везе. Препоручујемо да подесите ваш сервер да захтева коришћење безбедне (ХТТПС) везе.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", "Shared" : "Дељено", "Shared with {recipients}" : "Дељено са {recipients}", "Share" : "Дели", @@ -80,7 +85,9 @@ OC.L10N.register( "Error while changing permissions" : "Грешка при измени дозвола", "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", "Shared with you by {owner}" : "{owner} дели са вама", - "Share with user or group …" : "Дели са корисником или групом...", + "Share with users or groups …" : "Дели са корисницима или групама...", + "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", "Share link" : "Веза дељења", "The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања", "Link" : "Веза", @@ -93,6 +100,7 @@ OC.L10N.register( "Set expiration date" : "Постави датум истека", "Expiration" : "Истиче", "Expiration date" : "Датум истека", + "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", "Adding user..." : "Додајем корисника...", "group" : "група", "remote" : "удаљени", @@ -125,19 +133,21 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Здраво {name}, време је {weather}", "Hello {name}" : "Здраво {name}", "_download %n file_::_download %n files_" : ["преузми %n фајл","преузми %n фајла","преузми %n фајлова"], + "{version} is available. Get more information on how to update." : "Верзија {version} је доступна. Сазнајте како да ажурирате.", "Updating {productName} to version {version}, this may take a while." : "Надограђујем {productName} на издање {version}. Ово би могло да потраје.", "Please reload the page." : "Поново учитајте страницу.", "The update was unsuccessful. " : "Ажурирање није успело.", - "The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на ОунКлауд.", - "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за обнављање лозинке. Проверите да ли је корисничко име исправно.", - "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за обнављање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.", - "%s password reset" : "%s лозинка обновљена", - "Use the following link to reset your password: {link}" : "Употребите следећу везу да обновите своју лозинку: {link}", + "The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на оунКлауд.", + "Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку јер je токен неважећи", + "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за ресетовање лозинке. Проверите да ли је корисничко име исправно.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за ресетовање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.", + "%s password reset" : "%s лозинка ресетована", + "Use the following link to reset your password: {link}" : "Употребите следећу везу да ресетујете своју лозинку: {link}", "New password" : "Нова лозинка", "New Password" : "Нова лозинка", - "Reset password" : "Обнови лозинку", + "Reset password" : "Ресетуј лозинку", "Searching other places" : "Претражујем остала места", - "No search result in other places" : "Нема резултата претраге на осталим местима", + "No search results in other places" : "Нема резултата претраге на другим местима", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} резултат претраге на осталим местима","{count} резултата претраге на осталим местима","{count} резултата претраге на осталим местима"], "Personal" : "Лично", "Users" : "Корисници", @@ -165,12 +175,13 @@ OC.L10N.register( "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", "Request ID: %s" : "ИД захтева: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Кôд: %s", "Message: %s" : "Порука: %s", "File: %s" : "Фајл: %s", "Line: %s" : "Линија: %s", "Trace" : "Траг", - "Security Warning" : "Сигурносно упозорење", + "Security warning" : "Безбедносно упозорење", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш директоријум са подацима и фајлови су вероватно доступни са интернета јер .htaccess не ради.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Информације о томе како исправно подесити серверможете наћи у<a href=\"%s\" target=\"_blank\">документацији</a>.", "Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>", @@ -179,28 +190,34 @@ OC.L10N.register( "Data folder" : "Фацикла података", "Configure the database" : "Подешавање базе", "Only %s is available." : "Само %s је доступна.", + "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне ПХП модуле за избор других врста база података.", + "For more details check out the documentation." : "За више детаља погледајте документацију.", "Database user" : "Корисник базе", "Database password" : "Лозинка базе", "Database name" : "Назив базе", "Database tablespace" : "Радни простор базе података", "Database host" : "Домаћин базе", - "Performance Warning" : "Упозорење о перформансама", + "Performance warning" : "Упозорење о перформансама", "SQLite will be used as database." : "СКуЛајт ће бити коришћен за базу података.", "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу позадину базе података.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.", "Finish setup" : "Заврши подешавање", "Finishing …" : "Завршавам…", + "Need help?" : "Треба вам помоћ?", + "See the documentation" : "Погледајте документацију", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.", "Log out" : "Одјава", "Search" : "Претражи", "Server side authentication failed!" : "Аутентификација на серверу није успела!", "Please contact your administrator." : "Контактирајте вашег администратора.", + "An internal error occured." : "Дошло је до интерне грешке.", + "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", "Forgot your password? Reset it!" : "Заборавили сте вашу лозинку? Обновите је!", "remember" : "упамти", "Log in" : "Пријава", "Alternative Logins" : "Алтернативне пријаве", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да %s дели <strong>%s</strong> са вама.<br><a href=\"%s\">Погледајте!</a><br><br>", - "This ownCloud instance is currently in single user mode." : "Овај ОунКлауд тренутно ради у режиму једног корисника.", + "This ownCloud instance is currently in single user mode." : "Овај оунКлауд тренутно ради у режиму једног корисника.", "This means only administrators can use the instance." : "То значи да га могу користити само администратори.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте администратора ако се порука понавља или се неочекивано појавила.", "Thank you for your patience." : "Хвала вам на стрпљењу.", diff --git a/core/l10n/sr.json b/core/l10n/sr.json index 0ad388791c6..a788d7633f3 100644 --- a/core/l10n/sr.json +++ b/core/l10n/sr.json @@ -2,41 +2,46 @@ "Couldn't send mail to following users: %s " : "Не могу да пошаљем е-пошту следећим корисницима: %s ", "Turned on maintenance mode" : "Режим одржавања укључен", "Turned off maintenance mode" : "Режим одржавања искључен", + "Maintenance mode is kept active" : "Режим одржавања се држи активним", "Updated database" : "База података ажурирана", "Checked database schema update" : "Ажурирање шеме базе података, проверено", "Checked database schema update for apps" : "Ажурирање шеме базе података за апликације, проверено", "Updated \"%s\" to %s" : "„%s“ ажириран на %s", + "Repair warning: " : "Упозорење о поправци :", + "Repair error: " : "Грешка поправке:", "Following incompatible apps have been disabled: %s" : "Следеће неусаглашене апликације су искључене: %s", - "Following 3rd party apps have been disabled: %s" : "Следеће апликације треће стране су искључене: %s", + "Invalid file provided" : "Понуђени фајл је неисправан", "No image or file provided" : "Није дата ни слика ни фајл", "Unknown filetype" : "Непознат тип фајла", "Invalid image" : "Неисправна слика", "No temporary profile picture available, try again" : "Нема привремене слике профила. Покушајте поново", "No crop data provided" : "Нема података о опсецању", - "Sunday" : "Недеља", - "Monday" : "Понедељак", - "Tuesday" : "Уторак", - "Wednesday" : "Среда", - "Thursday" : "Четвртак", - "Friday" : "Петак", - "Saturday" : "Субота", - "January" : "Јануар", - "February" : "Фебруар", - "March" : "Март", - "April" : "Април", - "May" : "Мај", - "June" : "Јун", - "July" : "Јул", - "August" : "Август", - "September" : "Септембар", - "October" : "Октобар", - "November" : "Новембар", - "December" : "Децембар", + "No valid crop data provided" : "Нема података о опсецању", + "Crop is not square" : "Опсецање није квадрат", + "Sunday" : "недеља", + "Monday" : "понедељак", + "Tuesday" : "уторак", + "Wednesday" : "среда", + "Thursday" : "четвртак", + "Friday" : "петак", + "Saturday" : "субота", + "January" : "јануар", + "February" : "фебруар", + "March" : "март", + "April" : "април", + "May" : "мај", + "June" : "јун", + "July" : "јул", + "August" : "август", + "September" : "септембар", + "October" : "октобар", + "November" : "новембар", + "December" : "децембар", "Settings" : "Поставке", "Saving..." : "Уписујем...", - "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за обнављање лозинке. Контактирајте администратора.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Веза за обнављање лозинке је послата на вашу е-адресу. Ако је не примите ускоро, проверите фасцикле за нежељену пошту.<br>Ако није ни тамо, контактирајте вашег администратора.", - "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након обнављања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", + "Couldn't send reset email. Please contact your administrator." : "Не могу да пошаљем е-пошту за ресетовање лозинке. Контактирајте администратора.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Веза за ресетовање лозинке је послата на вашу е-адресу. Ако је не примите ускоро, проверите фасцикле за нежељену пошту.<br>Ако није ни тамо, контактирајте вашег администратора.", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Фајлови су вам шифровани. Ако нисте укључили кључ за опоравак, нећете моћи да повратите податке након ресетовања лозинке.<br />Ако нисте сигурни шта да радите, контактирајте администратора пре него што наставите.<br />Да ли желите да наставите?", "I know what I'm doing" : "Знам шта радим", "Password can not be changed. Please contact your administrator." : "Лозинка се не може променити. Контактирајте администратора.", "No" : "Не", @@ -65,10 +70,10 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш сервер није правилно подешен да омогући синхронизацију фајлова. Изгледа да је ВебДАВ сучеље покварено.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Овај сервер нема везу са интернетом. То значи да неке могућности, попут монтирања спољашњег складишта, обавештења о ажурирању или инсталација апликација треће стране, неће радити. Даљински приступ и слање е-поште, такође неће радити. Предлажемо да омогућите интернет везу за овај сервер ако желите да имате све могућности.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш директоријум са подацима и ваши фајлови су вероватно доступни са интернета. Фајл .htaccess не ради. Предлажемо да подесите ваш веб сервер на начин да директоријум са подацима не буде доступан или га изместите изван кореног директоријума веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Није подешен меморијски кеш. Да бисте побољшали перформансе подесите „memcache“ ако је доступан. Више информација можете наћи у <a href=\"{docLink}\">документацији</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ПХП не може да чита што није добро из безбедносних разлога. Информације о томе можете наћи у нашој <a href=\"{docLink}\">дукументацији</a>.", "Error occurred while checking server setup" : "Дошло је до грешке при провери поставки сервера", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "ХТТП заглавље \"{header}\" није подешено као \"{expected}\". Ово је потенцијални безбедносни ризик и препоручујемо да подесите ову поставку.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "ХТТП захлавље „Strict-Transport-Security“ није постављено на најмање \"2,678,400\" секунди. Ово је потенцијални безбедносни ризик и препоручујемо да подесите ову поставку.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Приступате сајту преко небезбедне (ХТТП) везе. Препоручујемо да подесите ваш сервер да захтева коришћење безбедне (ХТТПС) везе.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "ХТТП заглавље „{header}“ није подешено као „{expected}“. Ово потенцијално угрожава безбедност и приватност и препоручујемо да подесите ову поставку.", "Shared" : "Дељено", "Shared with {recipients}" : "Дељено са {recipients}", "Share" : "Дели", @@ -78,7 +83,9 @@ "Error while changing permissions" : "Грешка при измени дозвола", "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", "Shared with you by {owner}" : "{owner} дели са вама", - "Share with user or group …" : "Дели са корисником или групом...", + "Share with users or groups …" : "Дели са корисницима или групама...", + "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", "Share link" : "Веза дељења", "The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања", "Link" : "Веза", @@ -91,6 +98,7 @@ "Set expiration date" : "Постави датум истека", "Expiration" : "Истиче", "Expiration date" : "Датум истека", + "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", "Adding user..." : "Додајем корисника...", "group" : "група", "remote" : "удаљени", @@ -123,19 +131,21 @@ "Hello {name}, the weather is {weather}" : "Здраво {name}, време је {weather}", "Hello {name}" : "Здраво {name}", "_download %n file_::_download %n files_" : ["преузми %n фајл","преузми %n фајла","преузми %n фајлова"], + "{version} is available. Get more information on how to update." : "Верзија {version} је доступна. Сазнајте како да ажурирате.", "Updating {productName} to version {version}, this may take a while." : "Надограђујем {productName} на издање {version}. Ово би могло да потраје.", "Please reload the page." : "Поново учитајте страницу.", "The update was unsuccessful. " : "Ажурирање није успело.", - "The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на ОунКлауд.", - "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за обнављање лозинке. Проверите да ли је корисничко име исправно.", - "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за обнављање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.", - "%s password reset" : "%s лозинка обновљена", - "Use the following link to reset your password: {link}" : "Употребите следећу везу да обновите своју лозинку: {link}", + "The update was successful. Redirecting you to ownCloud now." : "Ажурирање је успело. Преусмеравам вас на оунКлауд.", + "Couldn't reset password because the token is invalid" : "Није могуће ресетовати лозинку јер je токен неважећи", + "Couldn't send reset email. Please make sure your username is correct." : "Не могу да пошаљем поруку за ресетовање лозинке. Проверите да ли је корисничко име исправно.", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не могу да пошаљем поруку за ресетовање лозинке јер за ово корисничко име нема е-адресе. Контактирајте администратора.", + "%s password reset" : "%s лозинка ресетована", + "Use the following link to reset your password: {link}" : "Употребите следећу везу да ресетујете своју лозинку: {link}", "New password" : "Нова лозинка", "New Password" : "Нова лозинка", - "Reset password" : "Обнови лозинку", + "Reset password" : "Ресетуј лозинку", "Searching other places" : "Претражујем остала места", - "No search result in other places" : "Нема резултата претраге на осталим местима", + "No search results in other places" : "Нема резултата претраге на другим местима", "_{count} search result in other places_::_{count} search results in other places_" : ["{count} резултат претраге на осталим местима","{count} резултата претраге на осталим местима","{count} резултата претраге на осталим местима"], "Personal" : "Лично", "Users" : "Корисници", @@ -163,12 +173,13 @@ "Technical details" : "Технички детаљи", "Remote Address: %s" : "Удаљена адреса: %s", "Request ID: %s" : "ИД захтева: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Кôд: %s", "Message: %s" : "Порука: %s", "File: %s" : "Фајл: %s", "Line: %s" : "Линија: %s", "Trace" : "Траг", - "Security Warning" : "Сигурносно упозорење", + "Security warning" : "Безбедносно упозорење", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш директоријум са подацима и фајлови су вероватно доступни са интернета јер .htaccess не ради.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Информације о томе како исправно подесити серверможете наћи у<a href=\"%s\" target=\"_blank\">документацији</a>.", "Create an <strong>admin account</strong>" : "Направи <strong>административни налог</strong>", @@ -177,28 +188,34 @@ "Data folder" : "Фацикла података", "Configure the database" : "Подешавање базе", "Only %s is available." : "Само %s је доступна.", + "Install and activate additional PHP modules to choose other database types." : "Инсталирајте и активирајте додатне ПХП модуле за избор других врста база података.", + "For more details check out the documentation." : "За више детаља погледајте документацију.", "Database user" : "Корисник базе", "Database password" : "Лозинка базе", "Database name" : "Назив базе", "Database tablespace" : "Радни простор базе података", "Database host" : "Домаћин базе", - "Performance Warning" : "Упозорење о перформансама", + "Performance warning" : "Упозорење о перформансама", "SQLite will be used as database." : "СКуЛајт ће бити коришћен за базу података.", "For larger installations we recommend to choose a different database backend." : "За веће инсталације препоручујемо да изаберете другу позадину базе података.", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Нарочито ако се користи клијент програм у графичком окружењу, коришћење СКуЛајта није препоручљиво.", "Finish setup" : "Заврши подешавање", "Finishing …" : "Завршавам…", + "Need help?" : "Треба вам помоћ?", + "See the documentation" : "Погледајте документацију", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ова апликација захтева Јава скрипт за исправан рад. {linkstart}Омогућите Јава скрипт{linkend} и поново учитајте страницу.", "Log out" : "Одјава", "Search" : "Претражи", "Server side authentication failed!" : "Аутентификација на серверу није успела!", "Please contact your administrator." : "Контактирајте вашег администратора.", + "An internal error occured." : "Дошло је до интерне грешке.", + "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", "Forgot your password? Reset it!" : "Заборавили сте вашу лозинку? Обновите је!", "remember" : "упамти", "Log in" : "Пријава", "Alternative Logins" : "Алтернативне пријаве", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Поздрав,<br><br>само вас обавештавам да %s дели <strong>%s</strong> са вама.<br><a href=\"%s\">Погледајте!</a><br><br>", - "This ownCloud instance is currently in single user mode." : "Овај ОунКлауд тренутно ради у режиму једног корисника.", + "This ownCloud instance is currently in single user mode." : "Овај оунКлауд тренутно ради у режиму једног корисника.", "This means only administrators can use the instance." : "То значи да га могу користити само администратори.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте администратора ако се порука понавља или се неочекивано појавила.", "Thank you for your patience." : "Хвала вам на стрпљењу.", diff --git a/core/l10n/sr@latin.js b/core/l10n/sr@latin.js index da2a5ec43dc..706f7bd3950 100644 --- a/core/l10n/sr@latin.js +++ b/core/l10n/sr@latin.js @@ -72,7 +72,6 @@ OC.L10N.register( "Error while changing permissions" : "Greška u promeni dozvola", "Shared with you and the group {group} by {owner}" : "{owner} podelio sa Vama i grupom {group} ", "Shared with you by {owner}" : "Sa vama podelio {owner}", - "Share with user or group …" : "Podeli sa korisnikom ili grupom", "Share link" : "Podeli prečicu", "The public link will expire no later than {days} days after it is created" : "Javna prečica će isteći ne kasnije od {days} dana pošto je kreirana", "Link" : "Prečica", @@ -128,7 +127,6 @@ OC.L10N.register( "New password" : "Nova lozinka", "New Password" : "Nova lozinka", "Reset password" : "Resetuj lozinku", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Lično", "Users" : "Korisnici", "Apps" : "Programi", @@ -160,7 +158,6 @@ OC.L10N.register( "File: %s" : "Fajl: %s", "Line: %s" : "Linija: %s", "Trace" : "Zapisnik: ", - "Security Warning" : "Bezbednosno upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da pravilno podesite server, molimo Vas da pogledate <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>", @@ -176,7 +173,6 @@ OC.L10N.register( "Database host" : "Domaćin baze", "Finish setup" : "Završi podešavanje", "Finishing …" : "Završavam ...", - "%s is available. Get more information on how to update." : "%s je dostupan. Pronađite više informacija kako da izvršite osvežavanje.", "Log out" : "Odjava", "Search" : "Traži", "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!", diff --git a/core/l10n/sr@latin.json b/core/l10n/sr@latin.json index b6e04ee15a8..ce5dba2d915 100644 --- a/core/l10n/sr@latin.json +++ b/core/l10n/sr@latin.json @@ -70,7 +70,6 @@ "Error while changing permissions" : "Greška u promeni dozvola", "Shared with you and the group {group} by {owner}" : "{owner} podelio sa Vama i grupom {group} ", "Shared with you by {owner}" : "Sa vama podelio {owner}", - "Share with user or group …" : "Podeli sa korisnikom ili grupom", "Share link" : "Podeli prečicu", "The public link will expire no later than {days} days after it is created" : "Javna prečica će isteći ne kasnije od {days} dana pošto je kreirana", "Link" : "Prečica", @@ -126,7 +125,6 @@ "New password" : "Nova lozinka", "New Password" : "Nova lozinka", "Reset password" : "Resetuj lozinku", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], "Personal" : "Lično", "Users" : "Korisnici", "Apps" : "Programi", @@ -158,7 +156,6 @@ "File: %s" : "Fajl: %s", "Line: %s" : "Linija: %s", "Trace" : "Zapisnik: ", - "Security Warning" : "Bezbednosno upozorenje", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Vaši podaci i direktorijumi su verovatno dostupni sa interneta jer .htaccess fajl ne funkcioniše.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Za informacije kako da pravilno podesite server, molimo Vas da pogledate <a href=\"%s\" target=\"_blank\">dokumentaciju</a>.", "Create an <strong>admin account</strong>" : "Napravi <strong>administrativni nalog</strong>", @@ -174,7 +171,6 @@ "Database host" : "Domaćin baze", "Finish setup" : "Završi podešavanje", "Finishing …" : "Završavam ...", - "%s is available. Get more information on how to update." : "%s je dostupan. Pronađite više informacija kako da izvršite osvežavanje.", "Log out" : "Odjava", "Search" : "Traži", "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index 15dcf11d026..2873fc26586 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -72,7 +72,6 @@ OC.L10N.register( "Error while changing permissions" : "Fel vid ändring av rättigheter", "Shared with you and the group {group} by {owner}" : "Delad med dig och gruppen {group} av {owner}", "Shared with you by {owner}" : "Delad med dig av {owner}", - "Share with user or group …" : "Dela med användare eller grupp...", "Share link" : "Dela länk", "The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades", "Link" : "Länk", @@ -117,6 +116,7 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}", "Hello {name}" : "Hej {name}", "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"], + "{version} is available. Get more information on how to update." : "{version} är tillgänglig. Få mer information om hur du uppdaterar.", "Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.", "Please reload the page." : "Vänligen ladda om sidan.", "The update was unsuccessful. " : "Uppdateringen misslyckades.", @@ -161,7 +161,6 @@ OC.L10N.register( "File: %s" : "Fil: %s", "Line: %s" : "Rad: %s", "Trace" : "Spåra", - "Security Warning" : "Säkerhetsvarning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>", @@ -177,7 +176,8 @@ OC.L10N.register( "Database host" : "Databasserver", "Finish setup" : "Avsluta installation", "Finishing …" : "Avslutar ...", - "%s is available. Get more information on how to update." : "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.", + "Need help?" : "Behöver du hjälp?", + "See the documentation" : "Kolla dokumentationen", "Log out" : "Logga ut", "Search" : "Sök", "Server side authentication failed!" : "Servern misslyckades med autentisering!", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index b6cfe2bde78..11cb5abc953 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -70,7 +70,6 @@ "Error while changing permissions" : "Fel vid ändring av rättigheter", "Shared with you and the group {group} by {owner}" : "Delad med dig och gruppen {group} av {owner}", "Shared with you by {owner}" : "Delad med dig av {owner}", - "Share with user or group …" : "Dela med användare eller grupp...", "Share link" : "Dela länk", "The public link will expire no later than {days} days after it is created" : "Den publika länken kommer sluta gälla inte senare än {days} dagar efter att den skapades", "Link" : "Länk", @@ -115,6 +114,7 @@ "Hello {name}, the weather is {weather}" : "Hej {name}, vädret är {weather}", "Hello {name}" : "Hej {name}", "_download %n file_::_download %n files_" : ["Ladda ner %n fil","Ladda ner %n filer"], + "{version} is available. Get more information on how to update." : "{version} är tillgänglig. Få mer information om hur du uppdaterar.", "Updating {productName} to version {version}, this may take a while." : "Uppdaterar {productName} till version {version}, detta kan ta en stund.", "Please reload the page." : "Vänligen ladda om sidan.", "The update was unsuccessful. " : "Uppdateringen misslyckades.", @@ -159,7 +159,6 @@ "File: %s" : "Fil: %s", "Line: %s" : "Rad: %s", "Trace" : "Spåra", - "Security Warning" : "Säkerhetsvarning", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Din datakatalog och filer är förmodligen tillgängliga från Internet, eftersom .htaccess-filen inte fungerar.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "För information hur du korrekt konfigurerar din servern, se ownCloud <a href=\"%s\" target=\"_blank\">dokumentationen</a>.", "Create an <strong>admin account</strong>" : "Skapa ett <strong>administratörskonto</strong>", @@ -175,7 +174,8 @@ "Database host" : "Databasserver", "Finish setup" : "Avsluta installation", "Finishing …" : "Avslutar ...", - "%s is available. Get more information on how to update." : "%s är tillgänglig. Få mer information om hur du går tillväga för att uppdatera.", + "Need help?" : "Behöver du hjälp?", + "See the documentation" : "Kolla dokumentationen", "Log out" : "Logga ut", "Search" : "Sök", "Server side authentication failed!" : "Servern misslyckades med autentisering!", diff --git a/core/l10n/ta_IN.js b/core/l10n/ta_IN.js index b2a01caeb30..6ad6011faeb 100644 --- a/core/l10n/ta_IN.js +++ b/core/l10n/ta_IN.js @@ -2,9 +2,6 @@ OC.L10N.register( "core", { "Settings" : "அமைப்புகள்", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Send" : "அனுப்பவும்", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Send" : "அனுப்பவும்" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ta_IN.json b/core/l10n/ta_IN.json index b0b605ef270..f426d6a8e2b 100644 --- a/core/l10n/ta_IN.json +++ b/core/l10n/ta_IN.json @@ -1,8 +1,5 @@ { "translations": { "Settings" : "அமைப்புகள்", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], - "Send" : "அனுப்பவும்", - "_download %n file_::_download %n files_" : ["",""], - "_{count} search result in other places_::_{count} search results in other places_" : ["",""] + "Send" : "அனுப்பவும்" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/ta_LK.js b/core/l10n/ta_LK.js index b2c6b0f5cdd..dcafecd50a5 100644 --- a/core/l10n/ta_LK.js +++ b/core/l10n/ta_LK.js @@ -26,7 +26,6 @@ OC.L10N.register( "Yes" : "ஆம்", "Choose" : "தெரிவுசெய்க ", "Ok" : "சரி", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "இரத்து செய்க", "Share" : "பகிர்வு", "Error" : "வழு", @@ -54,18 +53,15 @@ OC.L10N.register( "The object type is not specified." : "பொருள் வகை குறிப்பிடப்படவில்லை.", "Delete" : "நீக்குக", "Add" : "சேர்க்க", - "_download %n file_::_download %n files_" : ["",""], "Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}", "New password" : "புதிய கடவுச்சொல்", "Reset password" : "மீளமைத்த கடவுச்சொல்", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "தனிப்பட்ட", "Users" : "பயனாளர்", "Apps" : "செயலிகள்", "Admin" : "நிர்வாகம்", "Help" : "உதவி", "Access forbidden" : "அணுக தடை", - "Security Warning" : "பாதுகாப்பு எச்சரிக்கை", "Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக", "Username" : "பயனாளர் பெயர்", "Data folder" : "தரவு கோப்புறை", diff --git a/core/l10n/ta_LK.json b/core/l10n/ta_LK.json index 87b22f4d13b..86bef79211b 100644 --- a/core/l10n/ta_LK.json +++ b/core/l10n/ta_LK.json @@ -24,7 +24,6 @@ "Yes" : "ஆம்", "Choose" : "தெரிவுசெய்க ", "Ok" : "சரி", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "இரத்து செய்க", "Share" : "பகிர்வு", "Error" : "வழு", @@ -52,18 +51,15 @@ "The object type is not specified." : "பொருள் வகை குறிப்பிடப்படவில்லை.", "Delete" : "நீக்குக", "Add" : "சேர்க்க", - "_download %n file_::_download %n files_" : ["",""], "Use the following link to reset your password: {link}" : "உங்கள் கடவுச்சொல்லை மீளமைக்க பின்வரும் இணைப்பை பயன்படுத்தவும் : {இணைப்பு}", "New password" : "புதிய கடவுச்சொல்", "Reset password" : "மீளமைத்த கடவுச்சொல்", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "தனிப்பட்ட", "Users" : "பயனாளர்", "Apps" : "செயலிகள்", "Admin" : "நிர்வாகம்", "Help" : "உதவி", "Access forbidden" : "அணுக தடை", - "Security Warning" : "பாதுகாப்பு எச்சரிக்கை", "Create an <strong>admin account</strong>" : "<strong> நிர்வாக கணக்கொன்றை </strong> உருவாக்குக", "Username" : "பயனாளர் பெயர்", "Data folder" : "தரவு கோப்புறை", diff --git a/core/l10n/te.js b/core/l10n/te.js index 57176b9ac0e..423fb764b72 100644 --- a/core/l10n/te.js +++ b/core/l10n/te.js @@ -24,7 +24,6 @@ OC.L10N.register( "No" : "కాదు", "Yes" : "అవును", "Ok" : "సరే", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "రద్దుచేయి", "Continue" : "కొనసాగించు", "Error" : "పొరపాటు", @@ -35,9 +34,7 @@ OC.L10N.register( "Warning" : "హెచ్చరిక", "Delete" : "తొలగించు", "Add" : "చేర్చు", - "_download %n file_::_download %n files_" : ["",""], "New password" : "కొత్త సంకేతపదం", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "వ్యక్తిగతం", "Users" : "వాడుకరులు", "Help" : "సహాయం", diff --git a/core/l10n/te.json b/core/l10n/te.json index 3d62c8b103f..cd7b0d9a93f 100644 --- a/core/l10n/te.json +++ b/core/l10n/te.json @@ -22,7 +22,6 @@ "No" : "కాదు", "Yes" : "అవును", "Ok" : "సరే", - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Cancel" : "రద్దుచేయి", "Continue" : "కొనసాగించు", "Error" : "పొరపాటు", @@ -33,9 +32,7 @@ "Warning" : "హెచ్చరిక", "Delete" : "తొలగించు", "Add" : "చేర్చు", - "_download %n file_::_download %n files_" : ["",""], "New password" : "కొత్త సంకేతపదం", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "వ్యక్తిగతం", "Users" : "వాడుకరులు", "Help" : "సహాయం", diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index f6cdbe72ace..d40f2890fbc 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -1,6 +1,26 @@ OC.L10N.register( "core", { + "Couldn't send mail to following users: %s " : "ไม่สามารถส่งอีเมลไปยังผู้ใช้: %s", + "Turned on maintenance mode" : "เปิดโหมดการบำรุงรักษา", + "Turned off maintenance mode" : "ปิดโหมดการบำรุงรักษา", + "Maintenance mode is kept active" : "โหมดการบำรุงรักษาจะถูกเก็บไว้ใช้งาน", + "Updated database" : "ปรับปรุงฐานข้อมูล", + "Checked database schema update" : "Schema อัพเดตของฐานข้อมูลถูกตรวจสอบ", + "Checked database schema update for apps" : "Schema อัพเดตของฐานข้อมูลสำหรับแอพฯ", + "Updated \"%s\" to %s" : "อัพเดท \"%s\" ไปยัง %s", + "Repair warning: " : "เตือนการซ่อมแซม:", + "Repair error: " : "เกิดข้อผิดพลาดในการซ่อมแซม:", + "Following incompatible apps have been disabled: %s" : "แอพพลิเคชันต่อไปนี้เข้ากันไม่ได้มันจะถูกปิดการใช้งาน: %s", + "Following apps have been disabled: %s" : "แอพฯดังต่อไปนี้ถูกปิดการใช้งาน: %s", + "Invalid file provided" : "ระบุไฟล์ไม่ถูกต้อง", + "No image or file provided" : "ไม่มีรูปภาพหรือไฟล์ที่ระบุ", + "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์", + "Invalid image" : "รูปภาพไม่ถูกต้อง", + "No temporary profile picture available, try again" : "ไม่มีรูปภาพโปรไฟล์ชั่วคราว กรุณาลองใหม่อีกครั้ง", + "No crop data provided" : "ไม่มีการครอบตัดข้อมูลที่ระบุ", + "No valid crop data provided" : "ไม่ได้ระบุข้อมูลการครอบตัดที่ถูกต้อง", + "Crop is not square" : "การครอบตัดไม่เป็นสี่เหลี่ยม", "Sunday" : "วันอาทิตย์", "Monday" : "วันจันทร์", "Tuesday" : "วันอังคาร", @@ -22,71 +42,200 @@ OC.L10N.register( "December" : "ธันวาคม", "Settings" : "ตั้งค่า", "Saving..." : "กำลังบันทึกข้อมูล...", + "Couldn't send reset email. Please contact your administrator." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาติดต่อผู้ดูแลระบบ", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "ลิงค์ที่ใช้สำหรับตั้งค่ารหัสผ่านใหม่ ของคุณ ได้ถูกส่งไปยังอีเมลของคุณ หากคุณยังไม่ได้รับอีกเมล ลองไปดูที่โฟลเดอร์ สแปม/ถังขยะ ในอีเมลของคุณ <br>ทั้งนี้หากหาอีเมลไม่พบกรุณาติดต่อผู้ดูแลระบบ", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?", + "I know what I'm doing" : "ฉันรู้ว่าฉันกำลังทำอะไรอยู่", + "Password can not be changed. Please contact your administrator." : "หากคุณไม่สามารถเปลี่ยนแปลงรหัสผ่าน กรุณาติดต่อผู้ดูแลระบบ", "No" : "ไม่ตกลง", "Yes" : "ตกลง", "Choose" : "เลือก", + "Error loading file picker template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดไฟล์แม่แบบ: {error}", "Ok" : "ตกลง", - "_{count} file conflict_::_{count} file conflicts_" : [""], + "Error loading message template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดแม่แบบ: {error} ", + "read-only" : "อ่านอย่างเดียว", + "_{count} file conflict_::_{count} file conflicts_" : ["ไฟล์มีปัญหา {count} ไฟล์"], + "One file conflict" : "มีหนึ่งไฟล์ที่มีปัญหา", "New Files" : "ไฟล์ใหม่", + "Already existing files" : "มีไฟล์อยู่แล้ว", + "Which files do you want to keep?" : "คุณต้องการเก็บไฟล์?", + "If you select both versions, the copied file will have a number added to its name." : "หากคุณเลือกทั้งสองรุ่น การคัดลอกไฟล์จะเพิ่มจำนวนไปยังชื่อของมัน", "Cancel" : "ยกเลิก", + "Continue" : "ดำเนินการต่อ", + "(all selected)" : "(เลือกทั้งหมด)", + "({count} selected)" : "(เลือกจำนวน {count})", + "Error loading file exists template" : "เกิดข้อผิดพลาดขณะโหลดไฟล์แม่แบบที่มีอยู่", + "Very weak password" : "รหัสผ่านระดับต่ำมาก", + "Weak password" : "รหัสผ่านระดับต่ำ", + "So-so password" : "รหัสผ่านระดับปกติ", + "Good password" : "รหัสผ่านระดับดี", + "Strong password" : "รหัสผ่านระดับดีมาก", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ผสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>", + "Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "คุณกำลังเข้าถึงเว็บไซต์นี้ผ่านทาง HTTP เราขอแนะนำให้คุณกำหนดค่าเซิร์ฟเวอร์ของคุณที่จะต้องใช้ HTTPS แทนตามที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา", "Shared" : "แชร์แล้ว", + "Shared with {recipients}" : "แชร์กับ {recipients}", "Share" : "แชร์", "Error" : "ข้อผิดพลาด", - "Error while sharing" : "เกิดข้อผิดพลาดในระหว่างการแชร์ข้อมูล", - "Error while unsharing" : "เกิดข้อผิดพลาดในการยกเลิกการแชร์ข้อมูล", - "Error while changing permissions" : "เกิดข้อผิดพลาดในการเปลี่ยนสิทธิ์การเข้าใช้งาน", + "Error while sharing" : "เกิดข้อผิดพลาดขณะกำลังแชร์ข้อมูล", + "Error while unsharing" : "เกิดข้อผิดพลาดขณะกำลังยกเลิกการแชร์ข้อมูล", + "Error while changing permissions" : "เกิดข้อผิดพลาดขณะกำลังเปลี่ยนสิทธิ์การเข้าใช้งาน", "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}", - "Password protect" : "ใส่รหัสผ่านไว้", + "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", + "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", + "Share link" : "แชร์ลิงค์", + "The public link will expire no later than {days} days after it is created" : "ลิงค์สาธารณะจะหมดอายุภายใน {days} วัน หลังจากที่มันถูกสร้างขึ้น", + "Link" : "ลิงค์", + "Password protect" : "รหัสผ่านป้องกัน", "Password" : "รหัสผ่าน", + "Choose a password for the public link" : "เลือกรหัสผ่านสำหรับลิงค์สาธารณะ", + "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", "Set expiration date" : "กำหนดวันที่หมดอายุ", + "Expiration" : "การหมดอายุ", "Expiration date" : "วันที่หมดอายุ", + "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", + "Adding user..." : "กำลังเพิ่มผู้ใช้ ...", "group" : "กลุ่มผู้ใช้งาน", - "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลซ้ำได้", + "remote" : "ระยะไกล", + "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", "Unshare" : "ยกเลิกการแชร์", + "notify by email" : "แจ้งเตือนทางอีเมล", "can share" : "สามารถแชร์ได้", "can edit" : "สามารถแก้ไข", - "access control" : "ระดับควบคุมการเข้าใช้งาน", + "access control" : "ควบคุมการเข้าถึง", "create" : "สร้าง", + "change" : "เปลี่ยนแปลง", "delete" : "ลบ", "Password protected" : "ใส่รหัสผ่านไว้", - "Error unsetting expiration date" : "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ", + "Error unsetting expiration date" : "เกิดข้อผิดพลาดขณะยกเลิกการตั้งค่าวันที่หมดอายุ", "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", "Sending ..." : "กำลังส่ง...", "Email sent" : "ส่งอีเมล์แล้ว", "Warning" : "คำเตือน", "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ", + "Enter new" : "ใส่ข้อมูลใหม่", "Delete" : "ลบ", "Add" : "เพิ่ม", - "_download %n file_::_download %n files_" : [""], - "The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้", + "Edit tags" : "แก้ไขแท็ก", + "Error loading dialog template: {error}" : "เกิดข้อผิดพลาดขณะโหลดไดอะล็อกแม่แบบ: {error}", + "No tags selected for deletion." : "ไม่ได้เลือกแท็กที่ต้องการลบ", + "unknown text" : "ข้อความที่ไม่รู้จัก", + "Hello world!" : "สวัสดีทุกคน!", + "sunny" : "แดดมาก", + "Hello {name}, the weather is {weather}" : "สวัสดี {name} สภาพอากาศวันนี้มี {weather}", + "Hello {name}" : "สวัสดี {name}", + "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"], + "{version} is available. Get more information on how to update." : "{version} สามารถใช้ได้ รับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการอัพเดท", + "Updating {productName} to version {version}, this may take a while." : "กำลังอัพเดท {productName} ไปยังรุ่น {version} อาจใช้เวลาสักครู่", + "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", + "The update was unsuccessful. " : "อัพเดทไม่สำเร็จ", + "The update was successful. There were warnings." : "การอัพเดทสำเร็จ แต่มีคำเตือนอยู่", + "The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อย กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้", + "Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง", + "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่เพราะไม่มีที่อยู่อีเมลนี้ กรุณาติดต่อผู้ดูแลระบบ", + "%s password reset" : "%s ตั้งรหัสผ่านใหม่", "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}", "New password" : "รหัสผ่านใหม่", - "Reset password" : "เปลี่ยนรหัสผ่าน", - "_{count} search result in other places_::_{count} search results in other places_" : [""], + "New Password" : "รหัสผ่านใหม่", + "Reset password" : "เปลี่ยนรหัสผ่านใหม่", + "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ", + "No search results in other places" : "ไม่มีผลการค้นหาในสถานที่อื่นๆ", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} ผลการค้นหาในสถานที่อื่นๆ"], "Personal" : "ส่วนตัว", "Users" : "ผู้ใช้งาน", "Apps" : "แอปฯ", "Admin" : "ผู้ดูแล", "Help" : "ช่วยเหลือ", + "Error loading tags" : "เกิดข้อผิดพลาดขณะโหลดแท็ก", + "Tag already exists" : "มีแท็กอยู่แล้ว", + "Error deleting tag(s)" : "เกิดข้อผิดพลาดขณะลบแท็ก", + "Error tagging" : "เกิดข้อผิดพลาดขณะติดแท็ก", + "Error untagging" : "เกิดข้อผิดพลาดขณะยกเลิกการติดแท็ก", + "Error favoriting" : "เกิดข้อผิดพลาดขณะเลือกที่ชื่นชอบ", + "Error unfavoriting" : "เกิดข้อผิดพลาดขณะยกเลิกการเลือกที่ชื่นชอบ", "Access forbidden" : "การเข้าถึงถูกหวงห้าม", - "Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย", + "File not found" : "ไม่พบไฟล์", + "The specified document has not been found on the server." : "ไม่พบเอกสารที่ระบุบนเซิร์ฟเวอร์", + "You can click here to return to %s." : "คุณสามารถคลิกที่นี่เพื่อกลับไปยัง %s", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "นี่คุณ,\nอยากให้คุณทราบว่า %s ได้แชร์ %s กับคุณ\nคลิกดูที่นี่: %s\n", + "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", + "Cheers!" : "ไชโย!", + "Internal Server Error" : "เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์", + "The server encountered an internal error and was unable to complete your request." : "พบข้อผิดพลาดภายในเซิร์ฟเวอร์และไม่สามารถดำเนินการตามคำขอของคุณ", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "กรุณาติดต่อผู้ดูแลเซิร์ฟเวอร์ถ้าพบข้อผิดพลาดนี้หลายครั้ง กรุณาระบุรายละเอียดทางเทคนิคที่ด้านล่างในรายงานของคุณ", + "More details can be found in the server log." : "รายละเอียดเพิ่มเติมสามารถดูได้ที่บันทึกของระบบเซิร์ฟเวอร์", + "Technical details" : "รายละเอียดทางเทคนิค", + "Remote Address: %s" : "ที่อยู่รีโมทระยะไกล: %s", + "Request ID: %s" : "คำขอ ID: %s", + "Type: %s" : "ชนิด: %s", + "Code: %s" : "โค้ด: %s", + "Message: %s" : "ข้อความ: %s", + "File: %s" : "ไฟล์: %s", + "Line: %s" : "ไลน์: %s", + "Trace" : "ร่องรอย", + "Security warning" : "คำเตือนการรักษาความปลอดภัย", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณ อาจไม่สามารถเข้าถึงได้จากอินเทอร์เน็ตเพราะ htaccess ไฟล์ไม่ทำงาน", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "สำหรับข้อมูลวิธีการกำหนดค่าเซิร์ฟเวอร์ของคุณดูได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>", "Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>", "Username" : "ชื่อผู้ใช้งาน", + "Storage & database" : "พื้นที่จัดเก็บข้อมูลและฐานข้อมูล", "Data folder" : "โฟลเดอร์เก็บข้อมูล", - "Configure the database" : "กำหนดค่าฐานข้อมูล", + "Configure the database" : "ตั้งค่าฐานข้อมูล", + "Only %s is available." : "เฉพาะ %s สามารถใช้ได้", + "Install and activate additional PHP modules to choose other database types." : "ติดตั้งและเปิดใช้งานโมดูล PHP เพิ่มเติมเพื่อเลือกชนิดฐานข้อมูลอื่นๆ", + "For more details check out the documentation." : "สำหรับรายละเอียดเพิ่มเติมสามารถตรวจสอบได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>", "Database user" : "ชื่อผู้ใช้งานฐานข้อมูล", "Database password" : "รหัสผ่านฐานข้อมูล", "Database name" : "ชื่อฐานข้อมูล", "Database tablespace" : "พื้นที่ตารางในฐานข้อมูล", "Database host" : "Database host", + "Performance warning" : "การเตือนประสิทธิภาพการทำงาน", + "SQLite will be used as database." : "SQLite จะถูกใช้เป็นฐานข้อมูล", + "For larger installations we recommend to choose a different database backend." : "สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำให้เลือกแบ็กเอนด์ฐานข้อมูลที่แตกต่างกัน", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการผสานข้อมูลโดย SQLite", "Finish setup" : "ติดตั้งเรียบร้อยแล้ว", + "Finishing …" : "เสร็จสิ้น ...", + "Need help?" : "ต้องการความช่วยเหลือ?", + "See the documentation" : "ดูที่เอกสาร", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ", "Log out" : "ออกจากระบบ", "Search" : "ค้นหา", + "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!", + "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", + "An internal error occured." : "เกิดข้อผิดพลาดภายใน", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Forgot your password? Reset it!" : "ลืมรหัสผ่าน?", "remember" : "จำรหัสผ่าน", - "Log in" : "เข้าสู่ระบบ" + "Log in" : "เข้าสู่ระบบ", + "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "นี่คุณ,<br><br>อยากให้คุณทราบว่า %s ได้แชร์ <strong>%s</strong> กับคุณ <br><a href=\"%s\">คลิกดูที่นี่</a><br><br>", + "This ownCloud instance is currently in single user mode." : "ขณะนี้ ownCloud อยู่ในโหมดผู้ใช้คนเดียว", + "This means only administrators can use the instance." : "ซึ่งหมายความว่าผู้ดูแลระบบสามารถใช้อินสแตนซ์", + "Contact your system administrator if this message persists or appeared unexpectedly." : "ติดต่อผู้ดูแลระบบของคุณหากข้อความนี้ยังคงมีอยู่หรือปรากฏโดยไม่คาดคิด", + "Thank you for your patience." : "ขอบคุณสำหรับความอดทนของคุณ เราจะนำความคิดเห็นของท่านมาปรับปรุงระบบให้ดียิ่งขึ้น", + "You are accessing the server from an untrusted domain." : "คุณกำลังเข้าถึงเซิร์ฟเวอร์จากโดเมนที่ไม่น่าเชื่อถือ", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "กรุณาติดต่อผู้ดูแลระบบ หากคุณเป็นผู้ดูแลระบบโปรดกำหนดค่า \"trusted_domain\" โดยตั้งค่าใน config/config.php ยกตัวอย่างระบุการตั้งค่าใน config/config.sample.php", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "ทั้งนี้ขึ้นอยู่กับการกำหนดค่าของคุณ ผู้ดูแลระบบอาจสามารถใช้ปุ่มด้านล่างเพื่อกำหนดให้โดเมนนี้มีความน่าเชื่อถือ", + "Add \"%s\" as trusted domain" : "ได้เพิ่ม \"%s\" เป็นโดเมนที่เชื่อถือ", + "%s will be updated to version %s." : "%s จะถูกอัพเดทให้เป็นรุ่น %s", + "The following apps will be disabled:" : "แอพพลิเคชันต่อไปนี้จะปิดการใช้งาน:", + "The theme %s has been disabled." : "ธีม %s จะถูกปิดการใช้งาน:", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "โปรดตรวจสอบฐานข้อมูล การตั้งค่าโฟลเดอร์และโฟลเดอร์ข้อมูลจะถูกสำรองไว้ก่อนดำเนินการ", + "Start update" : "เริ่มต้นอัพเดท", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "เพื่อหลีกเลี่ยงการหมดเวลากับการติดตั้งขนาดใหญ่ คุณสามารถเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีการติดตั้งของคุณ:", + "This %s instance is currently in maintenance mode, which may take a while." : "%s กำลังอยู่ในโหมดการบำรุงรักษาซึ่งอาจใช้เวลาสักครู่", + "This page will refresh itself when the %s instance is available again." : "หน้านี้จะรีเฟรชตัวเองเมื่อ %s สามารถใช้ได้อีกครั้ง" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index 4043813e4e0..f5a93c5a335 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -1,4 +1,24 @@ { "translations": { + "Couldn't send mail to following users: %s " : "ไม่สามารถส่งอีเมลไปยังผู้ใช้: %s", + "Turned on maintenance mode" : "เปิดโหมดการบำรุงรักษา", + "Turned off maintenance mode" : "ปิดโหมดการบำรุงรักษา", + "Maintenance mode is kept active" : "โหมดการบำรุงรักษาจะถูกเก็บไว้ใช้งาน", + "Updated database" : "ปรับปรุงฐานข้อมูล", + "Checked database schema update" : "Schema อัพเดตของฐานข้อมูลถูกตรวจสอบ", + "Checked database schema update for apps" : "Schema อัพเดตของฐานข้อมูลสำหรับแอพฯ", + "Updated \"%s\" to %s" : "อัพเดท \"%s\" ไปยัง %s", + "Repair warning: " : "เตือนการซ่อมแซม:", + "Repair error: " : "เกิดข้อผิดพลาดในการซ่อมแซม:", + "Following incompatible apps have been disabled: %s" : "แอพพลิเคชันต่อไปนี้เข้ากันไม่ได้มันจะถูกปิดการใช้งาน: %s", + "Following apps have been disabled: %s" : "แอพฯดังต่อไปนี้ถูกปิดการใช้งาน: %s", + "Invalid file provided" : "ระบุไฟล์ไม่ถูกต้อง", + "No image or file provided" : "ไม่มีรูปภาพหรือไฟล์ที่ระบุ", + "Unknown filetype" : "ไม่รู้จักชนิดของไฟล์", + "Invalid image" : "รูปภาพไม่ถูกต้อง", + "No temporary profile picture available, try again" : "ไม่มีรูปภาพโปรไฟล์ชั่วคราว กรุณาลองใหม่อีกครั้ง", + "No crop data provided" : "ไม่มีการครอบตัดข้อมูลที่ระบุ", + "No valid crop data provided" : "ไม่ได้ระบุข้อมูลการครอบตัดที่ถูกต้อง", + "Crop is not square" : "การครอบตัดไม่เป็นสี่เหลี่ยม", "Sunday" : "วันอาทิตย์", "Monday" : "วันจันทร์", "Tuesday" : "วันอังคาร", @@ -20,71 +40,200 @@ "December" : "ธันวาคม", "Settings" : "ตั้งค่า", "Saving..." : "กำลังบันทึกข้อมูล...", + "Couldn't send reset email. Please contact your administrator." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาติดต่อผู้ดูแลระบบ", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "ลิงค์ที่ใช้สำหรับตั้งค่ารหัสผ่านใหม่ ของคุณ ได้ถูกส่งไปยังอีเมลของคุณ หากคุณยังไม่ได้รับอีกเมล ลองไปดูที่โฟลเดอร์ สแปม/ถังขยะ ในอีเมลของคุณ <br>ทั้งนี้หากหาอีเมลไม่พบกรุณาติดต่อผู้ดูแลระบบ", + "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "ไฟล์ของคุณจะถูกเข้ารหัส หากคุณยังไม่ได้เปิดใช้งานรหัสการกู้คืน คุณจะได้รับข้อมูลของคุณกลับมาหลังจากที่รหัสผ่านของคุณถูกรีเซ็ต<br /> หากคุณไม่แน่ใจว่าควรทำอย่างไรโปรดติดต่อผู้ดูแลระบบของคุณก่อนที่คุณจะดำเนินการต่อไป <br /> คุณต้องการดำเนินการต่อ?", + "I know what I'm doing" : "ฉันรู้ว่าฉันกำลังทำอะไรอยู่", + "Password can not be changed. Please contact your administrator." : "หากคุณไม่สามารถเปลี่ยนแปลงรหัสผ่าน กรุณาติดต่อผู้ดูแลระบบ", "No" : "ไม่ตกลง", "Yes" : "ตกลง", "Choose" : "เลือก", + "Error loading file picker template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดไฟล์แม่แบบ: {error}", "Ok" : "ตกลง", - "_{count} file conflict_::_{count} file conflicts_" : [""], + "Error loading message template: {error}" : "เกิดข้อผิดพลาดขณะกำลังโหลดแม่แบบ: {error} ", + "read-only" : "อ่านอย่างเดียว", + "_{count} file conflict_::_{count} file conflicts_" : ["ไฟล์มีปัญหา {count} ไฟล์"], + "One file conflict" : "มีหนึ่งไฟล์ที่มีปัญหา", "New Files" : "ไฟล์ใหม่", + "Already existing files" : "มีไฟล์อยู่แล้ว", + "Which files do you want to keep?" : "คุณต้องการเก็บไฟล์?", + "If you select both versions, the copied file will have a number added to its name." : "หากคุณเลือกทั้งสองรุ่น การคัดลอกไฟล์จะเพิ่มจำนวนไปยังชื่อของมัน", "Cancel" : "ยกเลิก", + "Continue" : "ดำเนินการต่อ", + "(all selected)" : "(เลือกทั้งหมด)", + "({count} selected)" : "(เลือกจำนวน {count})", + "Error loading file exists template" : "เกิดข้อผิดพลาดขณะโหลดไฟล์แม่แบบที่มีอยู่", + "Very weak password" : "รหัสผ่านระดับต่ำมาก", + "Weak password" : "รหัสผ่านระดับต่ำ", + "So-so password" : "รหัสผ่านระดับปกติ", + "Good password" : "รหัสผ่านระดับดี", + "Strong password" : "รหัสผ่านระดับดีมาก", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "เว็บเซิร์ฟเวอร์ของคุณยังไม่ถูกติดตั้งอย่างถูกต้องเพื่ออนุญาตให้ผสานข้อมูลให้ตรงกัน เนื่องจากอินเตอร์เฟซ WebDAV อาจเสียหาย", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "เซิร์ฟเวอร์นี้ไม่มีการเชื่อมต่ออินเทอร์เน็ตซึ่งหมายความว่าบางส่วนของคุณสมบัติ เช่น การจัดเก็บข้อมูลภายนอก การแจ้งเตือนเกี่ยวกับการปรับปรุงหรือการติดตั้งแอพพลิเคชันของบุคคลที่สามจะไม่ทำงาน การเข้าถึงไฟล์จากระยะไกลและการส่งอีเมล์แจ้งเตือนอาจจะไม่ทำงาน เราขอแนะนำให้เปิดใช้งานการเชื่อมต่ออินเทอร์เน็ตสำหรับเซิร์ฟเวอร์นี้ถ้าคุณต้องการใช้งานคุณสมบัติทั้งหมด", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณอาจจะสามารถเข้าถึงได้จากอินเทอร์เน็ต ขณะที่ htaccess ไฟล์ไม่ทำงาน เราขอแนะนำให้คุณกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณในทางที่ข้อมูลไดเรกทอรีไม่สามารถเข้าถึงได้หรือคุณย้ายข้อมูลไดเรกทอรีไปยังนอกเว็บเซิร์ฟเวอร์หรือเอกสาร", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "ไม่ได้ตั้งค่าหน่วยความจำแคช เพื่อเพิ่มประสิทธิภาพกรุณาตั้งค่า Memcache ของคุณ สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom ไม่สามารถอ่านโดย PHP ซึ่งมีผลด้านความปลอดภัยเป็นอย่างมาก สามารถดูข้อมูลเพิ่มเติมได้ที่ <a href=\"{docLink}\">เอกสาร</a>", + "Error occurred while checking server setup" : "เกิดข้อผิดพลาดขณะที่ทำการตรวจสอบการติดตั้งเซิร์ฟเวอร์", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" ไม่ได้กำหนดค่าส่วนหัว Http ให้เท่ากับ \"{expected}\" นี่คือระบบการรักษาความปลอดภัยที่มีศักยภาพหรือลดความเสี่ยงที่จะเกิดขึ้นเราขอแนะนำให้ปรับการตั้งค่านี้", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" ส่วนหัว HTTP ไม่ได้กำหนดค่าให้น้อยกว่า \"{seconds}\" วินาที เพื่อความปลอดภัยที่เพิ่มขึ้นเราขอแนะนำให้เปิดใช้งาน HSTS ที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "คุณกำลังเข้าถึงเว็บไซต์นี้ผ่านทาง HTTP เราขอแนะนำให้คุณกำหนดค่าเซิร์ฟเวอร์ของคุณที่จะต้องใช้ HTTPS แทนตามที่อธิบายไว้ใน <a href=\"{docUrl}\">เคล็ดลับการรักษาความปลอดภัย</a> ของเรา", "Shared" : "แชร์แล้ว", + "Shared with {recipients}" : "แชร์กับ {recipients}", "Share" : "แชร์", "Error" : "ข้อผิดพลาด", - "Error while sharing" : "เกิดข้อผิดพลาดในระหว่างการแชร์ข้อมูล", - "Error while unsharing" : "เกิดข้อผิดพลาดในการยกเลิกการแชร์ข้อมูล", - "Error while changing permissions" : "เกิดข้อผิดพลาดในการเปลี่ยนสิทธิ์การเข้าใช้งาน", + "Error while sharing" : "เกิดข้อผิดพลาดขณะกำลังแชร์ข้อมูล", + "Error while unsharing" : "เกิดข้อผิดพลาดขณะกำลังยกเลิกการแชร์ข้อมูล", + "Error while changing permissions" : "เกิดข้อผิดพลาดขณะกำลังเปลี่ยนสิทธิ์การเข้าใช้งาน", "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}", - "Password protect" : "ใส่รหัสผ่านไว้", + "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", + "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", + "Share link" : "แชร์ลิงค์", + "The public link will expire no later than {days} days after it is created" : "ลิงค์สาธารณะจะหมดอายุภายใน {days} วัน หลังจากที่มันถูกสร้างขึ้น", + "Link" : "ลิงค์", + "Password protect" : "รหัสผ่านป้องกัน", "Password" : "รหัสผ่าน", + "Choose a password for the public link" : "เลือกรหัสผ่านสำหรับลิงค์สาธารณะ", + "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", "Set expiration date" : "กำหนดวันที่หมดอายุ", + "Expiration" : "การหมดอายุ", "Expiration date" : "วันที่หมดอายุ", + "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", + "Adding user..." : "กำลังเพิ่มผู้ใช้ ...", "group" : "กลุ่มผู้ใช้งาน", - "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลซ้ำได้", + "remote" : "ระยะไกล", + "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", "Unshare" : "ยกเลิกการแชร์", + "notify by email" : "แจ้งเตือนทางอีเมล", "can share" : "สามารถแชร์ได้", "can edit" : "สามารถแก้ไข", - "access control" : "ระดับควบคุมการเข้าใช้งาน", + "access control" : "ควบคุมการเข้าถึง", "create" : "สร้าง", + "change" : "เปลี่ยนแปลง", "delete" : "ลบ", "Password protected" : "ใส่รหัสผ่านไว้", - "Error unsetting expiration date" : "เกิดข้อผิดพลาดในการยกเลิกการตั้งค่าวันที่หมดอายุ", + "Error unsetting expiration date" : "เกิดข้อผิดพลาดขณะยกเลิกการตั้งค่าวันที่หมดอายุ", "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", "Sending ..." : "กำลังส่ง...", "Email sent" : "ส่งอีเมล์แล้ว", "Warning" : "คำเตือน", "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ", + "Enter new" : "ใส่ข้อมูลใหม่", "Delete" : "ลบ", "Add" : "เพิ่ม", - "_download %n file_::_download %n files_" : [""], - "The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อยแล้ว กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้", + "Edit tags" : "แก้ไขแท็ก", + "Error loading dialog template: {error}" : "เกิดข้อผิดพลาดขณะโหลดไดอะล็อกแม่แบบ: {error}", + "No tags selected for deletion." : "ไม่ได้เลือกแท็กที่ต้องการลบ", + "unknown text" : "ข้อความที่ไม่รู้จัก", + "Hello world!" : "สวัสดีทุกคน!", + "sunny" : "แดดมาก", + "Hello {name}, the weather is {weather}" : "สวัสดี {name} สภาพอากาศวันนี้มี {weather}", + "Hello {name}" : "สวัสดี {name}", + "_download %n file_::_download %n files_" : ["ดาวน์โหลด %n ไฟล์"], + "{version} is available. Get more information on how to update." : "{version} สามารถใช้ได้ รับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการอัพเดท", + "Updating {productName} to version {version}, this may take a while." : "กำลังอัพเดท {productName} ไปยังรุ่น {version} อาจใช้เวลาสักครู่", + "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", + "The update was unsuccessful. " : "อัพเดทไม่สำเร็จ", + "The update was successful. There were warnings." : "การอัพเดทสำเร็จ แต่มีคำเตือนอยู่", + "The update was successful. Redirecting you to ownCloud now." : "การอัพเดทเสร็จเรียบร้อย กำลังเปลี่ยนเส้นทางไปที่ ownCloud อยู่ในขณะนี้", + "Couldn't reset password because the token is invalid" : "ไม่สามารถตั้งรหัสผ่านใหม่เพราะโทเค็นไม่ถูกต้อง", + "Couldn't send reset email. Please make sure your username is correct." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่ กรุณาตรวจสอบชื่อผู้ใช้ของคุณให้ถูกต้อง", + "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "ไม่สามารถส่งการตั้งค่าอีเมลใหม่เพราะไม่มีที่อยู่อีเมลนี้ กรุณาติดต่อผู้ดูแลระบบ", + "%s password reset" : "%s ตั้งรหัสผ่านใหม่", "Use the following link to reset your password: {link}" : "ใช้ลิงค์ต่อไปนี้เพื่อเปลี่ยนรหัสผ่านของคุณใหม่: {link}", "New password" : "รหัสผ่านใหม่", - "Reset password" : "เปลี่ยนรหัสผ่าน", - "_{count} search result in other places_::_{count} search results in other places_" : [""], + "New Password" : "รหัสผ่านใหม่", + "Reset password" : "เปลี่ยนรหัสผ่านใหม่", + "Searching other places" : "กำลังค้นหาสถานที่อื่นๆ", + "No search results in other places" : "ไม่มีผลการค้นหาในสถานที่อื่นๆ", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} ผลการค้นหาในสถานที่อื่นๆ"], "Personal" : "ส่วนตัว", "Users" : "ผู้ใช้งาน", "Apps" : "แอปฯ", "Admin" : "ผู้ดูแล", "Help" : "ช่วยเหลือ", + "Error loading tags" : "เกิดข้อผิดพลาดขณะโหลดแท็ก", + "Tag already exists" : "มีแท็กอยู่แล้ว", + "Error deleting tag(s)" : "เกิดข้อผิดพลาดขณะลบแท็ก", + "Error tagging" : "เกิดข้อผิดพลาดขณะติดแท็ก", + "Error untagging" : "เกิดข้อผิดพลาดขณะยกเลิกการติดแท็ก", + "Error favoriting" : "เกิดข้อผิดพลาดขณะเลือกที่ชื่นชอบ", + "Error unfavoriting" : "เกิดข้อผิดพลาดขณะยกเลิกการเลือกที่ชื่นชอบ", "Access forbidden" : "การเข้าถึงถูกหวงห้าม", - "Security Warning" : "คำเตือนเกี่ยวกับความปลอดภัย", + "File not found" : "ไม่พบไฟล์", + "The specified document has not been found on the server." : "ไม่พบเอกสารที่ระบุบนเซิร์ฟเวอร์", + "You can click here to return to %s." : "คุณสามารถคลิกที่นี่เพื่อกลับไปยัง %s", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "นี่คุณ,\nอยากให้คุณทราบว่า %s ได้แชร์ %s กับคุณ\nคลิกดูที่นี่: %s\n", + "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", + "Cheers!" : "ไชโย!", + "Internal Server Error" : "เกิดข้อผิดพลาดภายในเซิร์ฟเวอร์", + "The server encountered an internal error and was unable to complete your request." : "พบข้อผิดพลาดภายในเซิร์ฟเวอร์และไม่สามารถดำเนินการตามคำขอของคุณ", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "กรุณาติดต่อผู้ดูแลเซิร์ฟเวอร์ถ้าพบข้อผิดพลาดนี้หลายครั้ง กรุณาระบุรายละเอียดทางเทคนิคที่ด้านล่างในรายงานของคุณ", + "More details can be found in the server log." : "รายละเอียดเพิ่มเติมสามารถดูได้ที่บันทึกของระบบเซิร์ฟเวอร์", + "Technical details" : "รายละเอียดทางเทคนิค", + "Remote Address: %s" : "ที่อยู่รีโมทระยะไกล: %s", + "Request ID: %s" : "คำขอ ID: %s", + "Type: %s" : "ชนิด: %s", + "Code: %s" : "โค้ด: %s", + "Message: %s" : "ข้อความ: %s", + "File: %s" : "ไฟล์: %s", + "Line: %s" : "ไลน์: %s", + "Trace" : "ร่องรอย", + "Security warning" : "คำเตือนการรักษาความปลอดภัย", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "ข้อมูลไดเรกทอรีและไฟล์ของคุณ อาจไม่สามารถเข้าถึงได้จากอินเทอร์เน็ตเพราะ htaccess ไฟล์ไม่ทำงาน", + "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "สำหรับข้อมูลวิธีการกำหนดค่าเซิร์ฟเวอร์ของคุณดูได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>", "Create an <strong>admin account</strong>" : "สร้าง <strong>บัญชีผู้ดูแลระบบ</strong>", "Username" : "ชื่อผู้ใช้งาน", + "Storage & database" : "พื้นที่จัดเก็บข้อมูลและฐานข้อมูล", "Data folder" : "โฟลเดอร์เก็บข้อมูล", - "Configure the database" : "กำหนดค่าฐานข้อมูล", + "Configure the database" : "ตั้งค่าฐานข้อมูล", + "Only %s is available." : "เฉพาะ %s สามารถใช้ได้", + "Install and activate additional PHP modules to choose other database types." : "ติดตั้งและเปิดใช้งานโมดูล PHP เพิ่มเติมเพื่อเลือกชนิดฐานข้อมูลอื่นๆ", + "For more details check out the documentation." : "สำหรับรายละเอียดเพิ่มเติมสามารถตรวจสอบได้ที่ <a href=\"%s\" target=\"_blank\">เอกสาร</a>", "Database user" : "ชื่อผู้ใช้งานฐานข้อมูล", "Database password" : "รหัสผ่านฐานข้อมูล", "Database name" : "ชื่อฐานข้อมูล", "Database tablespace" : "พื้นที่ตารางในฐานข้อมูล", "Database host" : "Database host", + "Performance warning" : "การเตือนประสิทธิภาพการทำงาน", + "SQLite will be used as database." : "SQLite จะถูกใช้เป็นฐานข้อมูล", + "For larger installations we recommend to choose a different database backend." : "สำหรับการติดตั้งขนาดใหญ่เราขอแนะนำให้เลือกแบ็กเอนด์ฐานข้อมูลที่แตกต่างกัน", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "โดยเฉพาะอย่างยิ่งเมื่อใช้ไคลเอนต์เดสก์ทอปสำหรับการผสานข้อมูลโดย SQLite", "Finish setup" : "ติดตั้งเรียบร้อยแล้ว", + "Finishing …" : "เสร็จสิ้น ...", + "Need help?" : "ต้องการความช่วยเหลือ?", + "See the documentation" : "ดูที่เอกสาร", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "โปรแกรมนี้ต้องการ JavaScript สำหรับการดำเนินงานที่ถูกต้อง กรุณา {linkstart}เปิดใช้งาน JavaScript{linkend} และโหลดหน้าเว็บ", "Log out" : "ออกจากระบบ", "Search" : "ค้นหา", + "Server side authentication failed!" : "การรับรองความถูกต้องจากเซิร์ฟเวอร์ล้มเหลว!", + "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", + "An internal error occured." : "เกิดข้อผิดพลาดภายใน", + "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Forgot your password? Reset it!" : "ลืมรหัสผ่าน?", "remember" : "จำรหัสผ่าน", - "Log in" : "เข้าสู่ระบบ" + "Log in" : "เข้าสู่ระบบ", + "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "นี่คุณ,<br><br>อยากให้คุณทราบว่า %s ได้แชร์ <strong>%s</strong> กับคุณ <br><a href=\"%s\">คลิกดูที่นี่</a><br><br>", + "This ownCloud instance is currently in single user mode." : "ขณะนี้ ownCloud อยู่ในโหมดผู้ใช้คนเดียว", + "This means only administrators can use the instance." : "ซึ่งหมายความว่าผู้ดูแลระบบสามารถใช้อินสแตนซ์", + "Contact your system administrator if this message persists or appeared unexpectedly." : "ติดต่อผู้ดูแลระบบของคุณหากข้อความนี้ยังคงมีอยู่หรือปรากฏโดยไม่คาดคิด", + "Thank you for your patience." : "ขอบคุณสำหรับความอดทนของคุณ เราจะนำความคิดเห็นของท่านมาปรับปรุงระบบให้ดียิ่งขึ้น", + "You are accessing the server from an untrusted domain." : "คุณกำลังเข้าถึงเซิร์ฟเวอร์จากโดเมนที่ไม่น่าเชื่อถือ", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "กรุณาติดต่อผู้ดูแลระบบ หากคุณเป็นผู้ดูแลระบบโปรดกำหนดค่า \"trusted_domain\" โดยตั้งค่าใน config/config.php ยกตัวอย่างระบุการตั้งค่าใน config/config.sample.php", + "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "ทั้งนี้ขึ้นอยู่กับการกำหนดค่าของคุณ ผู้ดูแลระบบอาจสามารถใช้ปุ่มด้านล่างเพื่อกำหนดให้โดเมนนี้มีความน่าเชื่อถือ", + "Add \"%s\" as trusted domain" : "ได้เพิ่ม \"%s\" เป็นโดเมนที่เชื่อถือ", + "%s will be updated to version %s." : "%s จะถูกอัพเดทให้เป็นรุ่น %s", + "The following apps will be disabled:" : "แอพพลิเคชันต่อไปนี้จะปิดการใช้งาน:", + "The theme %s has been disabled." : "ธีม %s จะถูกปิดการใช้งาน:", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "โปรดตรวจสอบฐานข้อมูล การตั้งค่าโฟลเดอร์และโฟลเดอร์ข้อมูลจะถูกสำรองไว้ก่อนดำเนินการ", + "Start update" : "เริ่มต้นอัพเดท", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "เพื่อหลีกเลี่ยงการหมดเวลากับการติดตั้งขนาดใหญ่ คุณสามารถเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีการติดตั้งของคุณ:", + "This %s instance is currently in maintenance mode, which may take a while." : "%s กำลังอยู่ในโหมดการบำรุงรักษาซึ่งอาจใช้เวลาสักครู่", + "This page will refresh itself when the %s instance is available again." : "หน้านี้จะรีเฟรชตัวเองเมื่อ %s สามารถใช้ได้อีกครั้ง" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/tr.js b/core/l10n/tr.js index cfd44d6efe4..f61553d893d 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -4,17 +4,23 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "Şu kullanıcılara posta gönderilemedi: %s", "Turned on maintenance mode" : "Bakım kipi etkinleştirildi", "Turned off maintenance mode" : "Bakım kipi kapatıldı", + "Maintenance mode is kept active" : "Bakım kipi etkin tutuldu", "Updated database" : "Veritabanı güncellendi", "Checked database schema update" : "Veritabanı şema güncellemesi denetlendi", "Checked database schema update for apps" : "Uygulamalar için veritabanı şema güncellemesi denetlendi", "Updated \"%s\" to %s" : "\"%s\", %s sürümüne güncellendi", + "Repair warning: " : "Onarım uyarısı:", + "Repair error: " : "Onarım hatası:", "Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s", - "Following 3rd party apps have been disabled: %s" : "Aşağıdaki üçüncü parti uygulamalar devre dışı bırakıldı: %s", + "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", + "Invalid file provided" : "Geçersiz dosya sağlandı", "No image or file provided" : "Resim veya dosya belirtilmedi", "Unknown filetype" : "Bilinmeyen dosya türü", "Invalid image" : "Geçersiz resim", "No temporary profile picture available, try again" : "Kullanılabilir geçici profil resmi yok, tekrar deneyin", "No crop data provided" : "Kesme verisi sağlanmamış", + "No valid crop data provided" : "Geçerli kırpma verisi sağlanmadı", + "Crop is not square" : "Kırpma kare değil", "Sunday" : "Pazar", "Monday" : "Pazartesi", "Tuesday" : "Salı", @@ -67,10 +73,12 @@ OC.L10N.register( "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir risk ve bu ayarı düzeltmenizi öneririz.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "\"Strict-Transport-Security\" HTTP başlığı \"2,678,400\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir risk ve bu ayarı düzeltmenizi öneririz.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> gösterildiği şekilde HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", "Shared" : "Paylaşılan", "Shared with {recipients}" : "{recipients} ile paylaşılmış", "Share" : "Paylaş", @@ -80,7 +88,9 @@ OC.L10N.register( "Error while changing permissions" : "İzinleri değiştirirken hata", "Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış", "Shared with you by {owner}" : "{owner} tarafından sizinle paylaşıldı", - "Share with user or group …" : "Kullanıcı veya grup ile paylaş...", + "Share with users or groups …" : "Kullanıcı ve gruplarla paylaş...", + "Share with users, groups or remote users …" : "Kullanıcılar, gruplar veya uzak kullanıcılarla paylaş ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "kullanıcı@example.com/owncloud şeklinde diğer ownCloud kullanan diğer kullanıcılarla paylaş", "Share link" : "Paylaşma bağlantısı", "The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan en geç {days} gün sonra sona erecek", "Link" : "Bağlantı", @@ -93,6 +103,7 @@ OC.L10N.register( "Set expiration date" : "Son kullanma tarihini ayarla", "Expiration" : "Bitiş", "Expiration date" : "Son kullanım tarihi", + "An error occured. Please try again" : "Bir hata oluştu. Lütfen yeniden deneyin", "Adding user..." : "Kullanıcı ekleniyor...", "group" : "grup", "remote" : "uzak", @@ -125,9 +136,11 @@ OC.L10N.register( "Hello {name}, the weather is {weather}" : "Merhaba {name}, hava durumu {weather}", "Hello {name}" : "Merhaba {name}", "_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"], + "{version} is available. Get more information on how to update." : "Sürüm {version} hazır. Nasıl güncelleyeceğinizle ilgili daha fazla bilgi alın.", "Updating {productName} to version {version}, this may take a while." : "{productName}, {version} sürümüne güncelleniyor, bu biraz zaman alabilir.", "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", "The update was unsuccessful. " : "Güncelleştirme başarısız.", + "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.", "Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı", "Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.", @@ -138,7 +151,7 @@ OC.L10N.register( "New Password" : "Yeni Parola", "Reset password" : "Parolayı sıfırla", "Searching other places" : "Diğer konumlarda aranıyor", - "No search result in other places" : "Diğer konumlarda arama sonucu yok", + "No search results in other places" : "Diğer konumlarda arama sonucu yok", "_{count} search result in other places_::_{count} search results in other places_" : ["Diğer konumlarda {count} arama sonucu","Diğer konumlarda {count} arama sonucu"], "Personal" : "Kişisel", "Users" : "Kullanıcılar", @@ -166,12 +179,13 @@ OC.L10N.register( "Technical details" : "Teknik ayrıntılar", "Remote Address: %s" : "Uzak Adres: %s", "Request ID: %s" : "İstek Kimliği: %s", + "Type: %s" : "Tür: %s", "Code: %s" : "Kod: %s", "Message: %s" : "Mesaj: %s", "File: %s" : "Dosya: %s", "Line: %s" : "Satır: %s", "Trace" : "İz", - "Security Warning" : "Güvenlik Uyarısı", + "Security warning" : "Güvenlik uyarısı", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.", "Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun", @@ -180,23 +194,28 @@ OC.L10N.register( "Data folder" : "Veri klasörü", "Configure the database" : "Veritabanını yapılandır", "Only %s is available." : "Sadece %s kullanılabilir.", + "Install and activate additional PHP modules to choose other database types." : "Diğer veritabanı türlerini seçebilmek için ek PHP modüllerini kurun ve etkinleştirin.", + "For more details check out the documentation." : "Daha fazla bilgi için belgelendirmeye bakın.", "Database user" : "Veritabanı kullanıcı adı", "Database password" : "Veritabanı parolası", "Database name" : "Veritabanı adı", "Database tablespace" : "Veritabanı tablo alanı", "Database host" : "Veritabanı sunucusu", - "Performance Warning" : "Performans Uyarısı", + "Performance warning" : "Performans uyarısı", "SQLite will be used as database." : "Veritabanı olarak SQLite kullanılacak.", "For larger installations we recommend to choose a different database backend." : "Daha büyük kurulumlar için farklı bir veritabanı arka ucu seçmenizi öneriyoruz", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "Finish setup" : "Kurulumu tamamla", "Finishing …" : "Tamamlanıyor ...", + "Need help?" : "Yardım mı lazım?", + "See the documentation" : "Belgelendirmeye bak", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.", - "%s is available. Get more information on how to update." : "%s kullanılabilir. Nasıl güncelleyeceğiniz hakkında daha fazla bilgi alın.", "Log out" : "Çıkış yap", "Search" : "Ara", "Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!", "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", + "An internal error occured." : "Dahili bir hata oluştu.", + "Please try again or contact your administrator." : "Lütfen yeniden deneyin veya yöneticinizle iletişim kurun.", "Forgot your password? Reset it!" : "Parolanızı mı unuttunuz? Sıfırlayın!", "remember" : "hatırla", "Log in" : "Giriş yap", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index ad0d6c2dc18..01a813a77af 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -2,17 +2,23 @@ "Couldn't send mail to following users: %s " : "Şu kullanıcılara posta gönderilemedi: %s", "Turned on maintenance mode" : "Bakım kipi etkinleştirildi", "Turned off maintenance mode" : "Bakım kipi kapatıldı", + "Maintenance mode is kept active" : "Bakım kipi etkin tutuldu", "Updated database" : "Veritabanı güncellendi", "Checked database schema update" : "Veritabanı şema güncellemesi denetlendi", "Checked database schema update for apps" : "Uygulamalar için veritabanı şema güncellemesi denetlendi", "Updated \"%s\" to %s" : "\"%s\", %s sürümüne güncellendi", + "Repair warning: " : "Onarım uyarısı:", + "Repair error: " : "Onarım hatası:", "Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s", - "Following 3rd party apps have been disabled: %s" : "Aşağıdaki üçüncü parti uygulamalar devre dışı bırakıldı: %s", + "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", + "Invalid file provided" : "Geçersiz dosya sağlandı", "No image or file provided" : "Resim veya dosya belirtilmedi", "Unknown filetype" : "Bilinmeyen dosya türü", "Invalid image" : "Geçersiz resim", "No temporary profile picture available, try again" : "Kullanılabilir geçici profil resmi yok, tekrar deneyin", "No crop data provided" : "Kesme verisi sağlanmamış", + "No valid crop data provided" : "Geçerli kırpma verisi sağlanmadı", + "Crop is not square" : "Kırpma kare değil", "Sunday" : "Pazar", "Monday" : "Pazartesi", "Tuesday" : "Salı", @@ -65,10 +71,12 @@ "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Web sunucunuz dosya transferi için düzgün bir şekilde yapılandırılmamış. WevDAV arabirimini sorunlu gözüküyor.", "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Bu sunucunun çalışan bir İnternet bağlantısı yok. Bu, harici depolama alanı bağlama, güncelleştirme bildirimleri veya üçüncü parti uygulama kurma gibi bazı özellikler çalışmayacak demektir. Uzak dosyalara erişim ve e-posta ile bildirim gönderme de çalışmayacaktır. Eğer bu özelliklerin tamamını kullanmak istiyorsanız, sunucu için İnternet bağlantısını etkinleştirmenizi öneriyoruz.", "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", - "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir risk ve bu ayarı düzeltmenizi öneririz.", - "The \"Strict-Transport-Security\" HTTP header is not configured to least \"2,678,400\" seconds. This is a potential security risk and we recommend adjusting this setting." : "\"Strict-Transport-Security\" HTTP başlığı \"2,678,400\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir risk ve bu ayarı düzeltmenizi öneririz.", - "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Bu siteye HTTP aracılığıyla erişiyorsunuz. Sunucunuzu <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> gösterildiği şekilde HTTPS kullanımını zorlamak üzere yapılandırmanızı şiddetle öneririz.", "Shared" : "Paylaşılan", "Shared with {recipients}" : "{recipients} ile paylaşılmış", "Share" : "Paylaş", @@ -78,7 +86,9 @@ "Error while changing permissions" : "İzinleri değiştirirken hata", "Shared with you and the group {group} by {owner}" : "{owner} tarafından sizinle ve {group} ile paylaştırılmış", "Shared with you by {owner}" : "{owner} tarafından sizinle paylaşıldı", - "Share with user or group …" : "Kullanıcı veya grup ile paylaş...", + "Share with users or groups …" : "Kullanıcı ve gruplarla paylaş...", + "Share with users, groups or remote users …" : "Kullanıcılar, gruplar veya uzak kullanıcılarla paylaş ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "kullanıcı@example.com/owncloud şeklinde diğer ownCloud kullanan diğer kullanıcılarla paylaş", "Share link" : "Paylaşma bağlantısı", "The public link will expire no later than {days} days after it is created" : "Herkese açık bağlantı, oluşturulduktan en geç {days} gün sonra sona erecek", "Link" : "Bağlantı", @@ -91,6 +101,7 @@ "Set expiration date" : "Son kullanma tarihini ayarla", "Expiration" : "Bitiş", "Expiration date" : "Son kullanım tarihi", + "An error occured. Please try again" : "Bir hata oluştu. Lütfen yeniden deneyin", "Adding user..." : "Kullanıcı ekleniyor...", "group" : "grup", "remote" : "uzak", @@ -123,9 +134,11 @@ "Hello {name}, the weather is {weather}" : "Merhaba {name}, hava durumu {weather}", "Hello {name}" : "Merhaba {name}", "_download %n file_::_download %n files_" : ["%n dosya indir","%n dosya indir"], + "{version} is available. Get more information on how to update." : "Sürüm {version} hazır. Nasıl güncelleyeceğinizle ilgili daha fazla bilgi alın.", "Updating {productName} to version {version}, this may take a while." : "{productName}, {version} sürümüne güncelleniyor, bu biraz zaman alabilir.", "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", "The update was unsuccessful. " : "Güncelleştirme başarısız.", + "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.", "Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı", "Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.", @@ -136,7 +149,7 @@ "New Password" : "Yeni Parola", "Reset password" : "Parolayı sıfırla", "Searching other places" : "Diğer konumlarda aranıyor", - "No search result in other places" : "Diğer konumlarda arama sonucu yok", + "No search results in other places" : "Diğer konumlarda arama sonucu yok", "_{count} search result in other places_::_{count} search results in other places_" : ["Diğer konumlarda {count} arama sonucu","Diğer konumlarda {count} arama sonucu"], "Personal" : "Kişisel", "Users" : "Kullanıcılar", @@ -164,12 +177,13 @@ "Technical details" : "Teknik ayrıntılar", "Remote Address: %s" : "Uzak Adres: %s", "Request ID: %s" : "İstek Kimliği: %s", + "Type: %s" : "Tür: %s", "Code: %s" : "Kod: %s", "Message: %s" : "Mesaj: %s", "File: %s" : "Dosya: %s", "Line: %s" : "Satır: %s", "Trace" : "İz", - "Security Warning" : "Güvenlik Uyarısı", + "Security warning" : "Güvenlik uyarısı", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Veri klasörünüz ve dosyalarınız .htaccess dosyası çalışmadığı için İnternet'ten erişime açık.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Sunucunuzu nasıl ayarlayacağınıza dair bilgi için, lütfen <a href=\"%s\" target=\"_blank\">belgelendirme sayfasını</a> ziyaret edin.", "Create an <strong>admin account</strong>" : "Bir <strong>yönetici hesabı</strong> oluşturun", @@ -178,23 +192,28 @@ "Data folder" : "Veri klasörü", "Configure the database" : "Veritabanını yapılandır", "Only %s is available." : "Sadece %s kullanılabilir.", + "Install and activate additional PHP modules to choose other database types." : "Diğer veritabanı türlerini seçebilmek için ek PHP modüllerini kurun ve etkinleştirin.", + "For more details check out the documentation." : "Daha fazla bilgi için belgelendirmeye bakın.", "Database user" : "Veritabanı kullanıcı adı", "Database password" : "Veritabanı parolası", "Database name" : "Veritabanı adı", "Database tablespace" : "Veritabanı tablo alanı", "Database host" : "Veritabanı sunucusu", - "Performance Warning" : "Performans Uyarısı", + "Performance warning" : "Performans uyarısı", "SQLite will be used as database." : "Veritabanı olarak SQLite kullanılacak.", "For larger installations we recommend to choose a different database backend." : "Daha büyük kurulumlar için farklı bir veritabanı arka ucu seçmenizi öneriyoruz", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Özellikle dosya eşitleme için masaüstü istemcisi kullanılırken SQLite kullanımı önerilmez.", "Finish setup" : "Kurulumu tamamla", "Finishing …" : "Tamamlanıyor ...", + "Need help?" : "Yardım mı lazım?", + "See the documentation" : "Belgelendirmeye bak", "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Bu uygulama düzgün çalışabilmesi için JavaScript gerektirir. Lütfen {linkstart}JavaScript'i etkinleştirin{linkend} ve sayfayı yeniden yükleyin.", - "%s is available. Get more information on how to update." : "%s kullanılabilir. Nasıl güncelleyeceğiniz hakkında daha fazla bilgi alın.", "Log out" : "Çıkış yap", "Search" : "Ara", "Server side authentication failed!" : "Sunucu taraflı yetkilendirme başarısız!", "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", + "An internal error occured." : "Dahili bir hata oluştu.", + "Please try again or contact your administrator." : "Lütfen yeniden deneyin veya yöneticinizle iletişim kurun.", "Forgot your password? Reset it!" : "Parolanızı mı unuttunuz? Sıfırlayın!", "remember" : "hatırla", "Log in" : "Giriş yap", diff --git a/core/l10n/ug.js b/core/l10n/ug.js index 46c9f1fad18..cced7f31770 100644 --- a/core/l10n/ug.js +++ b/core/l10n/ug.js @@ -25,7 +25,6 @@ OC.L10N.register( "No" : "ياق", "Yes" : "ھەئە", "Ok" : "جەزملە", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "ۋاز كەچ", "Share" : "ھەمبەھىر", "Error" : "خاتالىق", @@ -37,14 +36,11 @@ OC.L10N.register( "Warning" : "ئاگاھلاندۇرۇش", "Delete" : "ئۆچۈر", "Add" : "قوش", - "_download %n file_::_download %n files_" : [""], "New password" : "يېڭى ئىم", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "شەخسىي", "Users" : "ئىشلەتكۈچىلەر", "Apps" : "ئەپلەر", "Help" : "ياردەم", - "Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش", "Username" : "ئىشلەتكۈچى ئاتى", "Finish setup" : "تەڭشەك تامام", "Log out" : "تىزىمدىن چىق", diff --git a/core/l10n/ug.json b/core/l10n/ug.json index 7cb51e2aa07..686a70c2dec 100644 --- a/core/l10n/ug.json +++ b/core/l10n/ug.json @@ -23,7 +23,6 @@ "No" : "ياق", "Yes" : "ھەئە", "Ok" : "جەزملە", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "ۋاز كەچ", "Share" : "ھەمبەھىر", "Error" : "خاتالىق", @@ -35,14 +34,11 @@ "Warning" : "ئاگاھلاندۇرۇش", "Delete" : "ئۆچۈر", "Add" : "قوش", - "_download %n file_::_download %n files_" : [""], "New password" : "يېڭى ئىم", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "شەخسىي", "Users" : "ئىشلەتكۈچىلەر", "Apps" : "ئەپلەر", "Help" : "ياردەم", - "Security Warning" : "بىخەتەرلىك ئاگاھلاندۇرۇش", "Username" : "ئىشلەتكۈچى ئاتى", "Finish setup" : "تەڭشەك تامام", "Log out" : "تىزىمدىن چىق", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index ec584c8085b..2792ace687c 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -1,18 +1,24 @@ OC.L10N.register( "core", { - "Couldn't send mail to following users: %s " : "Неможливо надіслати пошту наступним користувачам: %s ", - "Turned on maintenance mode" : "Увімкнено захищений режим", - "Turned off maintenance mode" : "Вимкнено захищений режим", + "Couldn't send mail to following users: %s " : "Неможливо надіслати листа наступним користувачам: %s ", + "Turned on maintenance mode" : "Увімкнено режим технічного обслуговування", + "Turned off maintenance mode" : "Вимкнено режим технічного обслуговування", "Updated database" : "Базу даних оновлено", "Checked database schema update" : "Перевірено оновлення схеми бази даних", "Checked database schema update for apps" : "Перевірено оновлення схеми бази даних для додатків", "Updated \"%s\" to %s" : "Оновлено \"%s\" до %s", - "No image or file provided" : "Немає наданого зображення або файлу", + "Repair warning: " : "Попередження відновлення:", + "Repair error: " : "Помилка відновлення:", + "Following incompatible apps have been disabled: %s" : "Наступні несумісні додатки були вимкнені: %s", + "Invalid file provided" : "Надано невірний файл", + "No image or file provided" : "Зображення або файлу не надано", "Unknown filetype" : "Невідомий тип файлу", "Invalid image" : "Невірне зображення", - "No temporary profile picture available, try again" : "Немає доступного тимчасового профілю для малюнків, спробуйте ще раз", - "No crop data provided" : "Немає інформації щодо обрізки даних", + "No temporary profile picture available, try again" : "Тимчасове зображення профілю недоступне, спробуйте ще раз", + "No crop data provided" : "Не вказана інформація про кадрування", + "No valid crop data provided" : "Не вказані коректні дані про кадрування", + "Crop is not square" : "Кадр не є квадратом", "Sunday" : "Неділя", "Monday" : "Понеділок", "Tuesday" : "Вівторок", @@ -33,9 +39,9 @@ OC.L10N.register( "November" : "Листопад", "December" : "Грудень", "Settings" : "Налаштування", - "Saving..." : "Зберігаю...", + "Saving..." : "Збереження...", "Couldn't send reset email. Please contact your administrator." : "Не можу надіслати email для скидання. Будь ласка, зверніться до вашого адміністратора.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?", "I know what I'm doing" : "Я знаю що роблю", "Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора", @@ -43,7 +49,7 @@ OC.L10N.register( "Yes" : "Так", "Choose" : "Обрати", "Error loading file picker template: {error}" : "Помилка при завантаженні шаблону вибору: {error}", - "Ok" : "Ok", + "Ok" : "Гаразд", "Error loading message template: {error}" : "Помилка при завантаженні шаблону повідомлення: {error}", "read-only" : "Тільки для читання", "_{count} file conflict_::_{count} file conflicts_" : ["{count} файловий конфлікт","{count} файлових конфліктів","{count} файлових конфліктів"], @@ -51,18 +57,24 @@ OC.L10N.register( "New Files" : "Нових Файлів", "Already existing files" : "Файли що вже існують", "Which files do you want to keep?" : "Які файли ви хочете залишити?", - "If you select both versions, the copied file will have a number added to its name." : "Якщо ви оберете обидві версії, скопійований файл буде мати номер, доданий у його ім'я.", - "Cancel" : "Відмінити", + "If you select both versions, the copied file will have a number added to its name." : "При виборі обох версій, до назви копійованого файлу буде додана цифра", + "Cancel" : "Скасувати", "Continue" : "Продовжити", - "(all selected)" : "(все вибрано)", - "({count} selected)" : "({count} вибрано)", - "Error loading file exists template" : "Помилка при завантаженні файлу існуючого шаблону", + "(all selected)" : "(все обрано)", + "({count} selected)" : "({count} обраних)", + "Error loading file exists template" : "Помилка при завантаженні шаблону існуючого файлу", "Very weak password" : "Дуже слабкий пароль", "Weak password" : "Слабкий пароль", "So-so password" : "Такий собі пароль", "Good password" : "Добрий пароль", "Strong password" : "Надійний пароль", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.", "Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.", "Shared" : "Опубліковано", "Shared with {recipients}" : "Опубліковано для {recipients}", "Share" : "Поділитися", @@ -72,19 +84,22 @@ OC.L10N.register( "Error while changing permissions" : "Помилка при зміні повноважень", "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", "Shared with you by {owner}" : "{owner} опублікував для Вас", - "Share with user or group …" : "Поділитися з користувачем або групою ...", - "Share link" : "Опублікувати посилання", + "Share with users or groups …" : "Поширити серед користувачів або груп ...", + "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", + "Share link" : "Поділитись посиланням", "The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення", "Link" : "Посилання", "Password protect" : "Захистити паролем", "Password" : "Пароль", - "Choose a password for the public link" : "Оберіть пароль для опублікованого посилання", + "Choose a password for the public link" : "Вкажіть пароль для публічного посилання", "Allow editing" : "Дозволити редагування", - "Email link to person" : "Ел. пошта належить Пану", + "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", "Set expiration date" : "Встановити термін дії", "Expiration" : "Закінчення", "Expiration date" : "Термін дії", + "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", "Adding user..." : "Додавання користувача...", "group" : "група", "remote" : "Віддалений", @@ -92,31 +107,32 @@ OC.L10N.register( "Shared in {item} with {user}" : "Опубліковано {item} для {user}", "Unshare" : "Закрити доступ", "notify by email" : "повідомити по Email", - "can share" : "можна поділитися", + "can share" : "може ділитися з іншими", "can edit" : "може редагувати", "access control" : "контроль доступу", "create" : "створити", - "change" : "Змінити", + "change" : "змінити", "delete" : "видалити", "Password protected" : "Захищено паролем", - "Error unsetting expiration date" : "Помилка при відміні терміна дії", - "Error setting expiration date" : "Помилка при встановленні терміна дії", + "Error unsetting expiration date" : "Помилка при відміні терміну дії", + "Error setting expiration date" : "Помилка при встановленні терміну дії", "Sending ..." : "Надсилання...", - "Email sent" : "Ел. пошта надіслана", + "Email sent" : "Лист надіслано", "Warning" : "Попередження", "The object type is not specified." : "Не визначено тип об'єкту.", "Enter new" : "Введіть новий", "Delete" : "Видалити", "Add" : "Додати", - "Edit tags" : "Редагувати теги", + "Edit tags" : "Редагувати мітки", "Error loading dialog template: {error}" : "Помилка при завантаженні шаблону діалогу: {error}", - "No tags selected for deletion." : "Жодних тегів не обрано для видалення.", + "No tags selected for deletion." : "Жодних міток не обрано для видалення.", "unknown text" : "невідомий текст", "Hello world!" : "Привіт світ!", "sunny" : "сонячно", - "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода", + "Hello {name}, the weather is {weather}" : "Привіт {name}, погода {weather} ", "Hello {name}" : "Привіт {name}", - "_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"], + "_download %n file_::_download %n files_" : ["завантаження %n файлу","завантаження %n файлів","завантаження %n файлів"], + "{version} is available. Get more information on how to update." : "{version} доступна. Отримати більш детальну інформацію про те, як оновити.", "Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.", "Please reload the page." : "Будь ласка, перезавантажте сторінку.", "The update was unsuccessful. " : "Оновлення завершилось невдачею.", @@ -124,83 +140,96 @@ OC.L10N.register( "Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним", "Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.", - "%s password reset" : "%s пароль скинуто", + "%s password reset" : "%s скидання паролю", "Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}", "New password" : "Новий пароль", "New Password" : "Новий пароль", "Reset password" : "Скинути пароль", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], + "Searching other places" : "Йде пошук в інших місцях", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат пошуку в інших місцях","{count} результатів пошуку в інших місцях","{count} результати пошуку в інших місцях"], "Personal" : "Особисте", "Users" : "Користувачі", "Apps" : "Додатки", "Admin" : "Адмін", "Help" : "Допомога", - "Error loading tags" : "Помилка завантаження тегів.", - "Tag already exists" : "Тег вже існує", - "Error deleting tag(s)" : "Помилка видалення тегу(ів)", - "Error tagging" : "Помилка встановлення тегів", - "Error untagging" : "Помилка зняття тегів", - "Error favoriting" : "Помилка позначення улюблених", - "Error unfavoriting" : "Помилка зняття позначки улюблених", + "Error loading tags" : "Помилка завантаження міток", + "Tag already exists" : "Мітка вже існує", + "Error deleting tag(s)" : "Помилка видалення мітки(ок)", + "Error tagging" : "Помилка встановлення міток", + "Error untagging" : "Помилка зняття мітки", + "Error favoriting" : "Помилка додавання в улюблені", + "Error unfavoriting" : "Помилка видалення з улюбленого", "Access forbidden" : "Доступ заборонено", "File not found" : "Файл не знайдено", "The specified document has not been found on the server." : "Не вдалось знайти вказаний документ на сервері.", "You can click here to return to %s." : "Ви можете натиснути тут для повернення до %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Агов,\n\nпросто щоб ви знали, що %s поділився %s з вами.\nПодивіться: %s\n\n", - "The share will expire on %s." : "Доступ до спільних даних вичерпається %s.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Агов,\n\nпросто повідомляємо вам, що %s поділився %s з вами.\nПерегляньте: %s\n\n", + "The share will expire on %s." : "Спільний доступ закінчиться %s.", "Cheers!" : "Будьмо!", "Internal Server Error" : "Внутрішня помилка серверу", "The server encountered an internal error and was unable to complete your request." : "На сервері сталася внутрішня помилка, тому він не зміг виконати ваш запит.", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці нижче в звіті.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці у вашому звіті.", "More details can be found in the server log." : "Більше деталей може бути в журналі серверу.", "Technical details" : "Технічні деталі", "Remote Address: %s" : "Віддалена Адреса: %s", - "Request ID: %s" : "Запит ID: %s", + "Request ID: %s" : "ID запиту: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Повідомлення: %s", "File: %s" : "Файл: %s", "Line: %s" : "Рядок: %s", "Trace" : "Трасування", - "Security Warning" : "Попередження про небезпеку", - "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.", + "Security warning" : "Попередження безпеки", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш каталог даних і ваші файли можливо доступні з інтернету, тому що .htaccess файл не працює.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.", "Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>", "Username" : "Ім'я користувача", "Storage & database" : "Сховище і база даних", "Data folder" : "Каталог даних", "Configure the database" : "Налаштування бази даних", - "Only %s is available." : "Тільки %s доступно.", + "Only %s is available." : "Доступно тільки %s.", + "Install and activate additional PHP modules to choose other database types." : "Встановіть та активуйте додаткові модулі PHP для того, щоб обрати тип БД.", + "For more details check out the documentation." : "За подробицями зверніться до документації.", "Database user" : "Користувач бази даних", "Database password" : "Пароль для бази даних", "Database name" : "Назва бази даних", "Database tablespace" : "Таблиця бази даних", "Database host" : "Хост бази даних", - "Finish setup" : "Завершити налаштування", + "Performance warning" : "Попередження продуктивності", + "SQLite will be used as database." : "В якості бази даних буде використана SQLite.", + "For larger installations we recommend to choose a different database backend." : "Для великих установок ми радимо вибрати іншу базу даних.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Використання SQLite особливо не рекомендується при синхронізації файлів з використанням клієнта для ПК.", + "Finish setup" : "Завершити встановлення", "Finishing …" : "Завершується ...", - "%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.", + "Need help?" : "Потрібна допомога?", + "See the documentation" : "Дивіться документацію", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.", "Log out" : "Вихід", "Search" : "Пошук", - "Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !", + "Server side authentication failed!" : "Невдала аутентифікація з сервером!", "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", + "An internal error occured." : "Виникла внутрішня помилка.", + "Please try again or contact your administrator." : "Будь ласка, спробуйте ще раз або зверніться до адміністратора.", "Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!", "remember" : "запам'ятати", - "Log in" : "Вхід", - "Alternative Logins" : "Альтернативні Логіни", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто щоб ви знали, що %s поділився »%s« з вами.<br><a href=\"%s\">Подивіться!</a><br><br>", - "This ownCloud instance is currently in single user mode." : "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача", - "This means only administrators can use the instance." : "Це означає, що лише адміністратори можуть використовувати цей екземпляр.", - "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.", + "Log in" : "Увійти", + "Alternative Logins" : "Альтернативні імена користувача", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто повідомляємо вам, що %s поділився »%s« з вами.<br><a href=\"%s\">Перегляньте!</a><br><br>", + "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в даний час працює в однокористувацькому режимі.", + "This means only administrators can use the instance." : "Це означає, що тільки адміністратори можуть використовувати сервер.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до вашого системного адміністратора якщо це повідомлення не зникає або з'являється несподівано.", "Thank you for your patience." : "Дякуємо за ваше терпіння.", - "You are accessing the server from an untrusted domain." : "Ви зайшли на сервер з ненадійного домену.", - "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходится в файлі config/config.sample.php.", + "You are accessing the server from an untrusted domain." : "Ви намагаєтеся отримати доступ до сервера з непідтвердженого домену.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходиться в файлі config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Залежно від конфігурації Ви як адміністратор можете додати цей домен у список довірених, використовуйте кнопку нижче.", - "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений", + "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений домен", "%s will be updated to version %s." : "%s буде оновлено до версії %s.", - "The following apps will be disabled:" : "Наступні додатки будуть відключені:", + "The following apps will be disabled:" : "Наступні додатки будуть вимкнені:", "The theme %s has been disabled." : "Тему %s було вимкнено.", - "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перш ніж продовжити, будь ласка, переконайтеся, що база даних, папка конфігурації і папка даних були дубльовані.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продовженням переконайтеся, що ви зробили резервну копію бази даних, каталогу конфігурації та каталогу з даними.", "Start update" : "Почати оновлення", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути великих таймаутів з більш тяжкими встановленнями, ви можете виконати наступну команду відносно директорії встановлення:", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути затримок у великих встановленнях, ви можете виконати наступну команду в каталозі встановлення:", + "This %s instance is currently in maintenance mode, which may take a while." : "Цей %s знаходиться в режимі технічного обслуговування, яке може зайняти деякий час.", "This page will refresh itself when the %s instance is available again." : "Ця сторінка автоматично перезавантажиться коли екземпляр %s стане знову доступний." }, "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/core/l10n/uk.json b/core/l10n/uk.json index 256b95c0292..9604468f0e6 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -1,16 +1,22 @@ { "translations": { - "Couldn't send mail to following users: %s " : "Неможливо надіслати пошту наступним користувачам: %s ", - "Turned on maintenance mode" : "Увімкнено захищений режим", - "Turned off maintenance mode" : "Вимкнено захищений режим", + "Couldn't send mail to following users: %s " : "Неможливо надіслати листа наступним користувачам: %s ", + "Turned on maintenance mode" : "Увімкнено режим технічного обслуговування", + "Turned off maintenance mode" : "Вимкнено режим технічного обслуговування", "Updated database" : "Базу даних оновлено", "Checked database schema update" : "Перевірено оновлення схеми бази даних", "Checked database schema update for apps" : "Перевірено оновлення схеми бази даних для додатків", "Updated \"%s\" to %s" : "Оновлено \"%s\" до %s", - "No image or file provided" : "Немає наданого зображення або файлу", + "Repair warning: " : "Попередження відновлення:", + "Repair error: " : "Помилка відновлення:", + "Following incompatible apps have been disabled: %s" : "Наступні несумісні додатки були вимкнені: %s", + "Invalid file provided" : "Надано невірний файл", + "No image or file provided" : "Зображення або файлу не надано", "Unknown filetype" : "Невідомий тип файлу", "Invalid image" : "Невірне зображення", - "No temporary profile picture available, try again" : "Немає доступного тимчасового профілю для малюнків, спробуйте ще раз", - "No crop data provided" : "Немає інформації щодо обрізки даних", + "No temporary profile picture available, try again" : "Тимчасове зображення профілю недоступне, спробуйте ще раз", + "No crop data provided" : "Не вказана інформація про кадрування", + "No valid crop data provided" : "Не вказані коректні дані про кадрування", + "Crop is not square" : "Кадр не є квадратом", "Sunday" : "Неділя", "Monday" : "Понеділок", "Tuesday" : "Вівторок", @@ -31,9 +37,9 @@ "November" : "Листопад", "December" : "Грудень", "Settings" : "Налаштування", - "Saving..." : "Зберігаю...", + "Saving..." : "Збереження...", "Couldn't send reset email. Please contact your administrator." : "Не можу надіслати email для скидання. Будь ласка, зверніться до вашого адміністратора.", - "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого пароль було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.", + "The link to reset your password has been sent to your email. If you do not receive it within a reasonable amount of time, check your spam/junk folders.<br>If it is not there ask your local administrator." : "Посилання для скидання вашого паролю було надіслано на ваш email. Якщо ви не отримали його найближчим часом, перевірте теку зі спамом.<br>Якщо і там немає, спитайте вашого місцевого адміністратора.", "Your files are encrypted. If you haven't enabled the recovery key, there will be no way to get your data back after your password is reset.<br />If you are not sure what to do, please contact your administrator before you continue. <br />Do you really want to continue?" : "Ваші файли зашифровані. Якщо ви не зробили ключ відновлення, після скидання паролю відновити ваші дані буде неможливо.<br /> Якщо ви не знаєте, що робити, будь ласка, зверніться до адміністратора перед продовженням.<br /> Ви дійсно хочете продовжити?", "I know what I'm doing" : "Я знаю що роблю", "Password can not be changed. Please contact your administrator." : "Пароль не може бути змінено. Будь ласка, зверніться до вашого адміністратора", @@ -41,7 +47,7 @@ "Yes" : "Так", "Choose" : "Обрати", "Error loading file picker template: {error}" : "Помилка при завантаженні шаблону вибору: {error}", - "Ok" : "Ok", + "Ok" : "Гаразд", "Error loading message template: {error}" : "Помилка при завантаженні шаблону повідомлення: {error}", "read-only" : "Тільки для читання", "_{count} file conflict_::_{count} file conflicts_" : ["{count} файловий конфлікт","{count} файлових конфліктів","{count} файлових конфліктів"], @@ -49,18 +55,24 @@ "New Files" : "Нових Файлів", "Already existing files" : "Файли що вже існують", "Which files do you want to keep?" : "Які файли ви хочете залишити?", - "If you select both versions, the copied file will have a number added to its name." : "Якщо ви оберете обидві версії, скопійований файл буде мати номер, доданий у його ім'я.", - "Cancel" : "Відмінити", + "If you select both versions, the copied file will have a number added to its name." : "При виборі обох версій, до назви копійованого файлу буде додана цифра", + "Cancel" : "Скасувати", "Continue" : "Продовжити", - "(all selected)" : "(все вибрано)", - "({count} selected)" : "({count} вибрано)", - "Error loading file exists template" : "Помилка при завантаженні файлу існуючого шаблону", + "(all selected)" : "(все обрано)", + "({count} selected)" : "({count} обраних)", + "Error loading file exists template" : "Помилка при завантаженні шаблону існуючого файлу", "Very weak password" : "Дуже слабкий пароль", "Weak password" : "Слабкий пароль", "So-so password" : "Такий собі пароль", "Good password" : "Добрий пароль", "Strong password" : "Надійний пароль", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "Ваш веб-сервер ще не налаштований належним чином, щоб дозволити синхронізацію файлів, тому що інтерфейс WebDAV, здається, зіпсований.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Цей сервер не має підключення до Інтернету. Це означає, що деякі з функцій, таких як зовнішнє сховище, повідомлення про оновлення та встановлення сторонніх додатків не будуть працювати. Доступ до файлів віддалено і надсилання повідомлень поштою можуть не працювати. Ми пропонуємо включити підключення до Інтернету для цього сервера, якщо ви хочете, щоб всі функції працювали.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Ваш каталог даних і ваші файли можливо доступні з інтернету. .htaccess файл не працює. Ми наполегливо рекомендуємо вам налаштувати ваш веб сервер таким чином, щоб каталог даних більше не був доступний або перемістіть каталог даних за межі кореня веб сервера.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Кеш пам'яті не налаштований. Задля покращення продуктивності, будь ласка, налаштуйте memcache, якщо є можливість. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom не доступний для читання PHP, що вкрай небажано з міркувань безпеки. Додаткову інформацію шукайте у нашій <a href=\"{docLink}\">документації</a>.", "Error occurred while checking server setup" : "При перевірці налаштувань серверу сталася помилка", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP заголовок \"{header}\" не налаштований як \"{expected}\". Це потенційний ризик для безпеки чи приватності і ми радимо виправити це налаштування.", "Shared" : "Опубліковано", "Shared with {recipients}" : "Опубліковано для {recipients}", "Share" : "Поділитися", @@ -70,19 +82,22 @@ "Error while changing permissions" : "Помилка при зміні повноважень", "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", "Shared with you by {owner}" : "{owner} опублікував для Вас", - "Share with user or group …" : "Поділитися з користувачем або групою ...", - "Share link" : "Опублікувати посилання", + "Share with users or groups …" : "Поширити серед користувачів або груп ...", + "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", + "Share link" : "Поділитись посиланням", "The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення", "Link" : "Посилання", "Password protect" : "Захистити паролем", "Password" : "Пароль", - "Choose a password for the public link" : "Оберіть пароль для опублікованого посилання", + "Choose a password for the public link" : "Вкажіть пароль для публічного посилання", "Allow editing" : "Дозволити редагування", - "Email link to person" : "Ел. пошта належить Пану", + "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", "Set expiration date" : "Встановити термін дії", "Expiration" : "Закінчення", "Expiration date" : "Термін дії", + "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", "Adding user..." : "Додавання користувача...", "group" : "група", "remote" : "Віддалений", @@ -90,31 +105,32 @@ "Shared in {item} with {user}" : "Опубліковано {item} для {user}", "Unshare" : "Закрити доступ", "notify by email" : "повідомити по Email", - "can share" : "можна поділитися", + "can share" : "може ділитися з іншими", "can edit" : "може редагувати", "access control" : "контроль доступу", "create" : "створити", - "change" : "Змінити", + "change" : "змінити", "delete" : "видалити", "Password protected" : "Захищено паролем", - "Error unsetting expiration date" : "Помилка при відміні терміна дії", - "Error setting expiration date" : "Помилка при встановленні терміна дії", + "Error unsetting expiration date" : "Помилка при відміні терміну дії", + "Error setting expiration date" : "Помилка при встановленні терміну дії", "Sending ..." : "Надсилання...", - "Email sent" : "Ел. пошта надіслана", + "Email sent" : "Лист надіслано", "Warning" : "Попередження", "The object type is not specified." : "Не визначено тип об'єкту.", "Enter new" : "Введіть новий", "Delete" : "Видалити", "Add" : "Додати", - "Edit tags" : "Редагувати теги", + "Edit tags" : "Редагувати мітки", "Error loading dialog template: {error}" : "Помилка при завантаженні шаблону діалогу: {error}", - "No tags selected for deletion." : "Жодних тегів не обрано для видалення.", + "No tags selected for deletion." : "Жодних міток не обрано для видалення.", "unknown text" : "невідомий текст", "Hello world!" : "Привіт світ!", "sunny" : "сонячно", - "Hello {name}, the weather is {weather}" : "Привіт {name}, {weather} погода", + "Hello {name}, the weather is {weather}" : "Привіт {name}, погода {weather} ", "Hello {name}" : "Привіт {name}", - "_download %n file_::_download %n files_" : ["завантяження %n файлу","завантаження %n файлів","завантаження %n файлів"], + "_download %n file_::_download %n files_" : ["завантаження %n файлу","завантаження %n файлів","завантаження %n файлів"], + "{version} is available. Get more information on how to update." : "{version} доступна. Отримати більш детальну інформацію про те, як оновити.", "Updating {productName} to version {version}, this may take a while." : "Оновлення {productName} до версії {version}, це може займати деякий час.", "Please reload the page." : "Будь ласка, перезавантажте сторінку.", "The update was unsuccessful. " : "Оновлення завершилось невдачею.", @@ -122,83 +138,96 @@ "Couldn't reset password because the token is invalid" : "Неможливо скинути пароль, бо маркер є недійсним", "Couldn't send reset email. Please make sure your username is correct." : "Не вдалося відправити скидання паролю. Будь ласка, переконайтеся, що ваше ім'я користувача є правильним.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Не вдалося відправити скидання паролю, тому що немає адреси електронної пошти для цього користувача. Будь ласка, зверніться до адміністратора.", - "%s password reset" : "%s пароль скинуто", + "%s password reset" : "%s скидання паролю", "Use the following link to reset your password: {link}" : "Використовуйте наступне посилання для скидання пароля: {link}", "New password" : "Новий пароль", "New Password" : "Новий пароль", "Reset password" : "Скинути пароль", - "_{count} search result in other places_::_{count} search results in other places_" : ["","",""], + "Searching other places" : "Йде пошук в інших місцях", + "_{count} search result in other places_::_{count} search results in other places_" : ["{count} результат пошуку в інших місцях","{count} результатів пошуку в інших місцях","{count} результати пошуку в інших місцях"], "Personal" : "Особисте", "Users" : "Користувачі", "Apps" : "Додатки", "Admin" : "Адмін", "Help" : "Допомога", - "Error loading tags" : "Помилка завантаження тегів.", - "Tag already exists" : "Тег вже існує", - "Error deleting tag(s)" : "Помилка видалення тегу(ів)", - "Error tagging" : "Помилка встановлення тегів", - "Error untagging" : "Помилка зняття тегів", - "Error favoriting" : "Помилка позначення улюблених", - "Error unfavoriting" : "Помилка зняття позначки улюблених", + "Error loading tags" : "Помилка завантаження міток", + "Tag already exists" : "Мітка вже існує", + "Error deleting tag(s)" : "Помилка видалення мітки(ок)", + "Error tagging" : "Помилка встановлення міток", + "Error untagging" : "Помилка зняття мітки", + "Error favoriting" : "Помилка додавання в улюблені", + "Error unfavoriting" : "Помилка видалення з улюбленого", "Access forbidden" : "Доступ заборонено", "File not found" : "Файл не знайдено", "The specified document has not been found on the server." : "Не вдалось знайти вказаний документ на сервері.", "You can click here to return to %s." : "Ви можете натиснути тут для повернення до %s.", - "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Агов,\n\nпросто щоб ви знали, що %s поділився %s з вами.\nПодивіться: %s\n\n", - "The share will expire on %s." : "Доступ до спільних даних вичерпається %s.", + "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Агов,\n\nпросто повідомляємо вам, що %s поділився %s з вами.\nПерегляньте: %s\n\n", + "The share will expire on %s." : "Спільний доступ закінчиться %s.", "Cheers!" : "Будьмо!", "Internal Server Error" : "Внутрішня помилка серверу", "The server encountered an internal error and was unable to complete your request." : "На сервері сталася внутрішня помилка, тому він не зміг виконати ваш запит.", - "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці нижче в звіті.", + "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Будь ласка, зверніться до адміністратора сервера, якщо ця помилка з'являється кілька разів, будь ласка, вкажіть технічні подробиці у вашому звіті.", "More details can be found in the server log." : "Більше деталей може бути в журналі серверу.", "Technical details" : "Технічні деталі", "Remote Address: %s" : "Віддалена Адреса: %s", - "Request ID: %s" : "Запит ID: %s", + "Request ID: %s" : "ID запиту: %s", + "Type: %s" : "Тип: %s", "Code: %s" : "Код: %s", "Message: %s" : "Повідомлення: %s", "File: %s" : "Файл: %s", "Line: %s" : "Рядок: %s", "Trace" : "Трасування", - "Security Warning" : "Попередження про небезпеку", - "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваші дані каталогів і файлів, ймовірно, доступні з інтернету, тому що .htaccess файл не працює.", + "Security warning" : "Попередження безпеки", + "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Ваш каталог даних і ваші файли можливо доступні з інтернету, тому що .htaccess файл не працює.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Для отримання інформації, як правильно налаштувати сервер, див. <a href=\"%s\" target=\"_blank\">документацію</a>.", "Create an <strong>admin account</strong>" : "Створити <strong>обліковий запис адміністратора</strong>", "Username" : "Ім'я користувача", "Storage & database" : "Сховище і база даних", "Data folder" : "Каталог даних", "Configure the database" : "Налаштування бази даних", - "Only %s is available." : "Тільки %s доступно.", + "Only %s is available." : "Доступно тільки %s.", + "Install and activate additional PHP modules to choose other database types." : "Встановіть та активуйте додаткові модулі PHP для того, щоб обрати тип БД.", + "For more details check out the documentation." : "За подробицями зверніться до документації.", "Database user" : "Користувач бази даних", "Database password" : "Пароль для бази даних", "Database name" : "Назва бази даних", "Database tablespace" : "Таблиця бази даних", "Database host" : "Хост бази даних", - "Finish setup" : "Завершити налаштування", + "Performance warning" : "Попередження продуктивності", + "SQLite will be used as database." : "В якості бази даних буде використана SQLite.", + "For larger installations we recommend to choose a different database backend." : "Для великих установок ми радимо вибрати іншу базу даних.", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "Використання SQLite особливо не рекомендується при синхронізації файлів з використанням клієнта для ПК.", + "Finish setup" : "Завершити встановлення", "Finishing …" : "Завершується ...", - "%s is available. Get more information on how to update." : "%s доступний. Отримай більше інформації про те, як оновити.", + "Need help?" : "Потрібна допомога?", + "See the documentation" : "Дивіться документацію", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "Ця програма вимагає увімкнений JavaScript для коректної роботи. Будь ласка, {linkstart} Увімкніть JavaScript {linkend} та перезавантажте сторінку.", "Log out" : "Вихід", "Search" : "Пошук", - "Server side authentication failed!" : "Помилка аутентифікації на боці Сервера !", + "Server side authentication failed!" : "Невдала аутентифікація з сервером!", "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", + "An internal error occured." : "Виникла внутрішня помилка.", + "Please try again or contact your administrator." : "Будь ласка, спробуйте ще раз або зверніться до адміністратора.", "Forgot your password? Reset it!" : "Забули ваш пароль? Скиньте його!", "remember" : "запам'ятати", - "Log in" : "Вхід", - "Alternative Logins" : "Альтернативні Логіни", - "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто щоб ви знали, що %s поділився »%s« з вами.<br><a href=\"%s\">Подивіться!</a><br><br>", - "This ownCloud instance is currently in single user mode." : "Цей екземпляр OwnCloud зараз працює в монопольному режимі одного користувача", - "This means only administrators can use the instance." : "Це означає, що лише адміністратори можуть використовувати цей екземпляр.", - "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до системного адміністратора, якщо це повідомлення зберігається або з'являєтья несподівано.", + "Log in" : "Увійти", + "Alternative Logins" : "Альтернативні імена користувача", + "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто повідомляємо вам, що %s поділився »%s« з вами.<br><a href=\"%s\">Перегляньте!</a><br><br>", + "This ownCloud instance is currently in single user mode." : "Сервер ownCloud в даний час працює в однокористувацькому режимі.", + "This means only administrators can use the instance." : "Це означає, що тільки адміністратори можуть використовувати сервер.", + "Contact your system administrator if this message persists or appeared unexpectedly." : "Зверніться до вашого системного адміністратора якщо це повідомлення не зникає або з'являється несподівано.", "Thank you for your patience." : "Дякуємо за ваше терпіння.", - "You are accessing the server from an untrusted domain." : "Ви зайшли на сервер з ненадійного домену.", - "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходится в файлі config/config.sample.php.", + "You are accessing the server from an untrusted domain." : "Ви намагаєтеся отримати доступ до сервера з непідтвердженого домену.", + "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Будь ласка, зверніться до адміністратора. Якщо ви є адміністратором цього серверу, ви можете налаштувати опцію \"trusted_domain\" в конфігураційному файлі config/config.php. Приклад конфігурації знаходиться в файлі config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Залежно від конфігурації Ви як адміністратор можете додати цей домен у список довірених, використовуйте кнопку нижче.", - "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений", + "Add \"%s\" as trusted domain" : "Додати \"%s\" як довірений домен", "%s will be updated to version %s." : "%s буде оновлено до версії %s.", - "The following apps will be disabled:" : "Наступні додатки будуть відключені:", + "The following apps will be disabled:" : "Наступні додатки будуть вимкнені:", "The theme %s has been disabled." : "Тему %s було вимкнено.", - "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перш ніж продовжити, будь ласка, переконайтеся, що база даних, папка конфігурації і папка даних були дубльовані.", + "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Перед продовженням переконайтеся, що ви зробили резервну копію бази даних, каталогу конфігурації та каталогу з даними.", "Start update" : "Почати оновлення", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути великих таймаутів з більш тяжкими встановленнями, ви можете виконати наступну команду відносно директорії встановлення:", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Щоб уникнути затримок у великих встановленнях, ви можете виконати наступну команду в каталозі встановлення:", + "This %s instance is currently in maintenance mode, which may take a while." : "Цей %s знаходиться в режимі технічного обслуговування, яке може зайняти деякий час.", "This page will refresh itself when the %s instance is available again." : "Ця сторінка автоматично перезавантажиться коли екземпляр %s стане знову доступний." },"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/core/l10n/ur.js b/core/l10n/ur.js index 6f4050f5fd6..442326e9ad7 100644 --- a/core/l10n/ur.js +++ b/core/l10n/ur.js @@ -1,7 +1,6 @@ OC.L10N.register( "core", { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Error" : "خرابی" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ur.json b/core/l10n/ur.json index a99dca571f3..1c1fc3d16c1 100644 --- a/core/l10n/ur.json +++ b/core/l10n/ur.json @@ -1,5 +1,4 @@ { "translations": { - "_{count} file conflict_::_{count} file conflicts_" : ["",""], "Error" : "خرابی" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/ur_PK.js b/core/l10n/ur_PK.js index 5d0ccc2f5e5..b0304997ac3 100644 --- a/core/l10n/ur_PK.js +++ b/core/l10n/ur_PK.js @@ -55,7 +55,6 @@ OC.L10N.register( "Error while changing permissions" : "اختیارات کو تبدیل کرنے کے دوران خرابی ", "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", - "Share with user or group …" : "صارف یا مجموعہ کے ساتھ اشتراک کریں ...", "Share link" : "اشتراک لنک", "Password protect" : "محفوظ پاسورڈ", "Password" : "پاسورڈ", @@ -84,13 +83,11 @@ OC.L10N.register( "Delete" : "حذف کریں", "Add" : "شامل کریں", "Edit tags" : "ترمیم ٹیگز", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.", "The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے", "Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}", "New password" : "نیا پاسورڈ", "Reset password" : "ری سیٹ پاسورڈ", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "شخصی", "Users" : "صارفین", "Apps" : "ایپز", @@ -98,7 +95,6 @@ OC.L10N.register( "Help" : "مدد", "Access forbidden" : "رسائ منقطع ہے", "Cheers!" : "واہ!", - "Security Warning" : "حفاظتی انتباہ", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے", "Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں", "Username" : "یوزر نیم", @@ -112,7 +108,6 @@ OC.L10N.register( "Database host" : "ڈیٹابیس ہوسٹ", "Finish setup" : "سیٹ اپ ختم کریں", "Finishing …" : "تکمیل ...", - "%s is available. Get more information on how to update." : "%s دستیاب ہے. اپ ڈیٹ کرنے کے بارے میں مزید معلومات حاصل کریں.", "Log out" : "لاگ آؤٹ", "Search" : "تلاش", "remember" : "یاد رکھیں", diff --git a/core/l10n/ur_PK.json b/core/l10n/ur_PK.json index 77bfde9243c..fe8fece8083 100644 --- a/core/l10n/ur_PK.json +++ b/core/l10n/ur_PK.json @@ -53,7 +53,6 @@ "Error while changing permissions" : "اختیارات کو تبدیل کرنے کے دوران خرابی ", "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", - "Share with user or group …" : "صارف یا مجموعہ کے ساتھ اشتراک کریں ...", "Share link" : "اشتراک لنک", "Password protect" : "محفوظ پاسورڈ", "Password" : "پاسورڈ", @@ -82,13 +81,11 @@ "Delete" : "حذف کریں", "Add" : "شامل کریں", "Edit tags" : "ترمیم ٹیگز", - "_download %n file_::_download %n files_" : ["",""], "Please reload the page." : "براہ مہربانی صفحہ دوبارہ لوڈ کریں.", "The update was successful. Redirecting you to ownCloud now." : "اپ ڈیٹ کامیاب تھی۔ اپ کو اون کلوڈ سے منسلک کیا جا رہا ہے", "Use the following link to reset your password: {link}" : "اپنا پاسورڈ ری سیٹ کرنے کے لیے اس لنک پر کلک کریں۔ {link}", "New password" : "نیا پاسورڈ", "Reset password" : "ری سیٹ پاسورڈ", - "_{count} search result in other places_::_{count} search results in other places_" : ["",""], "Personal" : "شخصی", "Users" : "صارفین", "Apps" : "ایپز", @@ -96,7 +93,6 @@ "Help" : "مدد", "Access forbidden" : "رسائ منقطع ہے", "Cheers!" : "واہ!", - "Security Warning" : "حفاظتی انتباہ", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "آپ کی ڈیٹا ڈائریکٹری اور فائلیں امکان ہےانٹرنیٹ سے قابل رسائی ہیں کیونکہ htaccess. فائل کام نہیں کرتا ہے", "Create an <strong>admin account</strong>" : "ایک<strong> ایڈمن اکاؤنٹ</strong> بنائیں", "Username" : "یوزر نیم", @@ -110,7 +106,6 @@ "Database host" : "ڈیٹابیس ہوسٹ", "Finish setup" : "سیٹ اپ ختم کریں", "Finishing …" : "تکمیل ...", - "%s is available. Get more information on how to update." : "%s دستیاب ہے. اپ ڈیٹ کرنے کے بارے میں مزید معلومات حاصل کریں.", "Log out" : "لاگ آؤٹ", "Search" : "تلاش", "remember" : "یاد رکھیں", diff --git a/core/l10n/vi.js b/core/l10n/vi.js index e8717475725..5caf47cfd16 100644 --- a/core/l10n/vi.js +++ b/core/l10n/vi.js @@ -55,7 +55,6 @@ OC.L10N.register( "Error while changing permissions" : "Lỗi trong quá trình phân quyền", "Shared with you and the group {group} by {owner}" : "Đã được chia sẽ với bạn và nhóm {group} bởi {owner}", "Shared with you by {owner}" : "Đã được chia sẽ bởi {owner}", - "Share with user or group …" : "Chia sẻ với người dùng hoặc nhóm", "Share link" : "Chia sẻ liên kết", "Password protect" : "Mật khẩu bảo vệ", "Password" : "Mật khẩu", @@ -86,14 +85,12 @@ OC.L10N.register( "Edit tags" : "Sửa thẻ", "Error loading dialog template: {error}" : "Lỗi khi tải mẫu hội thoại: {error}", "No tags selected for deletion." : "Không có thẻ nào được chọn để xóa", - "_download %n file_::_download %n files_" : [""], "Please reload the page." : "Vui lòng tải lại trang.", "The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.", "%s password reset" : "%s thiết lập lại mật khẩu", "Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}", "New password" : "Mật khẩu mới", "Reset password" : "Khôi phục mật khẩu", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "Cá nhân", "Users" : "Người dùng", "Apps" : "Ứng dụng", @@ -108,7 +105,6 @@ OC.L10N.register( "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Xin chào,\n\nbáo cho bạn biết rằng %s đã chia sẽ %s với bạn.\nXem nó: %s\n\n", "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.", "Cheers!" : "Chúc mừng!", - "Security Warning" : "Cảnh bảo bảo mật", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.", "Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>", @@ -122,7 +118,6 @@ OC.L10N.register( "Database host" : "Database host", "Finish setup" : "Cài đặt hoàn tất", "Finishing …" : "Đang hoàn thành ...", - "%s is available. Get more information on how to update." : "%s còn trống. Xem thêm thông tin cách cập nhật.", "Log out" : "Đăng xuất", "Search" : "Tìm kiếm", "Server side authentication failed!" : "Xác thực phía máy chủ không thành công!", diff --git a/core/l10n/vi.json b/core/l10n/vi.json index 8671fa857d1..10603d28a93 100644 --- a/core/l10n/vi.json +++ b/core/l10n/vi.json @@ -53,7 +53,6 @@ "Error while changing permissions" : "Lỗi trong quá trình phân quyền", "Shared with you and the group {group} by {owner}" : "Đã được chia sẽ với bạn và nhóm {group} bởi {owner}", "Shared with you by {owner}" : "Đã được chia sẽ bởi {owner}", - "Share with user or group …" : "Chia sẻ với người dùng hoặc nhóm", "Share link" : "Chia sẻ liên kết", "Password protect" : "Mật khẩu bảo vệ", "Password" : "Mật khẩu", @@ -84,14 +83,12 @@ "Edit tags" : "Sửa thẻ", "Error loading dialog template: {error}" : "Lỗi khi tải mẫu hội thoại: {error}", "No tags selected for deletion." : "Không có thẻ nào được chọn để xóa", - "_download %n file_::_download %n files_" : [""], "Please reload the page." : "Vui lòng tải lại trang.", "The update was successful. Redirecting you to ownCloud now." : "Cập nhật thành công .Hệ thống sẽ đưa bạn tới ownCloud.", "%s password reset" : "%s thiết lập lại mật khẩu", "Use the following link to reset your password: {link}" : "Dùng đường dẫn sau để khôi phục lại mật khẩu : {link}", "New password" : "Mật khẩu mới", "Reset password" : "Khôi phục mật khẩu", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "Cá nhân", "Users" : "Người dùng", "Apps" : "Ứng dụng", @@ -106,7 +103,6 @@ "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Xin chào,\n\nbáo cho bạn biết rằng %s đã chia sẽ %s với bạn.\nXem nó: %s\n\n", "The share will expire on %s." : "Chia sẻ này sẽ hết hiệu lực vào %s.", "Cheers!" : "Chúc mừng!", - "Security Warning" : "Cảnh bảo bảo mật", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Thư mục và file dữ liệu của bạn có thể được truy cập từ internet bởi vì file .htaccess không hoạt động", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Để biết thêm thông tin và cách cấu hình đúng vui lòng xem thêm <a href=\"%s\" target=\"_blank\">tài l</a>.", "Create an <strong>admin account</strong>" : "Tạo một <strong>tài khoản quản trị</strong>", @@ -120,7 +116,6 @@ "Database host" : "Database host", "Finish setup" : "Cài đặt hoàn tất", "Finishing …" : "Đang hoàn thành ...", - "%s is available. Get more information on how to update." : "%s còn trống. Xem thêm thông tin cách cập nhật.", "Log out" : "Đăng xuất", "Search" : "Tìm kiếm", "Server side authentication failed!" : "Xác thực phía máy chủ không thành công!", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index 3893da6c4ec..38efcae369d 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -4,15 +4,22 @@ OC.L10N.register( "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ", "Turned on maintenance mode" : "启用维护模式", "Turned off maintenance mode" : "关闭维护模式", + "Maintenance mode is kept active" : "维护模式已被启用", "Updated database" : "数据库已更新", "Checked database schema update" : "已经检查数据库架构更新", "Checked database schema update for apps" : "已经检查应用的数据库架构更新", "Updated \"%s\" to %s" : "更新 \"%s\" 为 %s", + "Repair warning: " : "修复警告:", + "Repair error: " : "修复错误:", + "Following incompatible apps have been disabled: %s" : "下列不兼容应用已经被禁用:%s", + "Invalid file provided" : "提供了无效文件", "No image or file provided" : "没有提供图片或文件", "Unknown filetype" : "未知的文件类型", "Invalid image" : "无效的图像", "No temporary profile picture available, try again" : "没有临时概览页图片可用,请重试", "No crop data provided" : "没有提供相应数据", + "No valid crop data provided" : "没有提供有效的裁剪数据", + "Crop is not square" : "裁剪的不是正方形", "Sunday" : "星期日", "Monday" : "星期一", "Tuesday" : "星期二", @@ -62,7 +69,15 @@ OC.L10N.register( "So-so password" : "一般强度的密码", "Good password" : "较强的密码", "Strong password" : "强密码", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "该服务器没有工作在互联网连接,这意味着像挂载外部存储,第三方应用的更新或者安装的通知将不会工作。远程文件访问和邮件通知的发送也可能不会工作。如果你想拥有所有功能,我们建议你为服务器打开互联网连接。", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。", "Error occurred while checking server setup" : "当检查服务器启动时出错", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在通过 HTTP 访问该站点,我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>配置服务器强制使用 HTTPS。", "Shared" : "已共享", "Shared with {recipients}" : "由{recipients}分享", "Share" : "分享", @@ -72,7 +87,9 @@ OC.L10N.register( "Error while changing permissions" : "修改权限时出错", "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", "Shared with you by {owner}" : "{owner} 与您共享", - "Share with user or group …" : "分享给其他用户或组 ...", + "Share with users or groups …" : "分享给其他用户或组 ...", + "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", "Share link" : "分享链接", "The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效", "Link" : "链接", @@ -85,6 +102,7 @@ OC.L10N.register( "Set expiration date" : "设置过期日期", "Expiration" : "过期", "Expiration date" : "过期日期", + "An error occured. Please try again" : "发生了一个错误请重新尝试", "Adding user..." : "添加用户中...", "group" : "群组", "remote" : "远程", @@ -96,6 +114,7 @@ OC.L10N.register( "can edit" : "可以修改", "access control" : "访问控制", "create" : "创建", + "change" : "更改", "delete" : "删除", "Password protected" : "密码已受保护", "Error unsetting expiration date" : "取消设置过期日期时出错", @@ -114,7 +133,9 @@ OC.L10N.register( "Hello world!" : "Hello world!", "sunny" : "晴", "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}", + "Hello {name}" : "你好 {name}", "_download %n file_::_download %n files_" : ["下载 %n 个文件"], + "{version} is available. Get more information on how to update." : "{version} 现在可用。获取更多升级相关信息。", "Updating {productName} to version {version}, this may take a while." : "更新 {productName} 到版本 {version},这可能需要一些时间。", "Please reload the page." : "请重新加载页面。", "The update was unsuccessful. " : "升级未成功", @@ -127,7 +148,9 @@ OC.L10N.register( "New password" : "新密码", "New Password" : "新密码", "Reset password" : "重置密码", - "_{count} search result in other places_::_{count} search results in other places_" : [""], + "Searching other places" : "搜索其他地方", + "No search results in other places" : "在其他地方没有搜索结果", + "_{count} search result in other places_::_{count} search results in other places_" : ["在其他地方有 {count} 个搜索结果"], "Personal" : "个人", "Users" : "用户", "Apps" : "应用", @@ -154,12 +177,13 @@ OC.L10N.register( "Technical details" : "技术细节", "Remote Address: %s" : "远程地址: %s", "Request ID: %s" : "请求 ID: %s", + "Type: %s" : "类型:%s", "Code: %s" : "代码: %s", "Message: %s" : "消息: %s", "File: %s" : "文件: %s", "Line: %s" : "行: %s", "Trace" : "追踪", - "Security Warning" : "安全警告", + "Security warning" : "安全警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。", "Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>", @@ -168,18 +192,28 @@ OC.L10N.register( "Data folder" : "数据目录", "Configure the database" : "配置数据库", "Only %s is available." : "仅 %s 可用。", + "Install and activate additional PHP modules to choose other database types." : "安装或激活额外的 PHP 模块以选择其他数据库类型。", + "For more details check out the documentation." : "请查阅文档获得详细信息。", "Database user" : "数据库用户", "Database password" : "数据库密码", "Database name" : "数据库名", "Database tablespace" : "数据库表空间", "Database host" : "数据库主机", + "Performance warning" : "性能警告", + "SQLite will be used as database." : "SQLite 将被作为数据库使用。", + "For larger installations we recommend to choose a different database backend." : "对于更大的安装,我们建议选择一个不同的数据库后端。", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "Finish setup" : "安装完成", "Finishing …" : "正在结束 ...", - "%s is available. Get more information on how to update." : "%s 可用。获取更多关于如何升级的信息。", + "Need help?" : "需要帮助?", + "See the documentation" : "查看文档", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作,该应用要求 JavaScript 。请 {linkstart} 打开 JavaScript {linkend} ,然后重新载入页面。", "Log out" : "注销", "Search" : "搜索", "Server side authentication failed!" : "服务端验证失败!", "Please contact your administrator." : "请联系你的管理员。", + "An internal error occured." : "发生了内部错误。", + "Please try again or contact your administrator." : "请重试或联系管理员。", "Forgot your password? Reset it!" : "忘记密码?立即重置!", "remember" : "记住", "Log in" : "登录", @@ -198,7 +232,8 @@ OC.L10N.register( "The theme %s has been disabled." : "%s 主题已被禁用。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。", "Start update" : "开始更新", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "为避免更大的安装演示,你能在你的安装目录下面运行这些命令:", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "为进行避免较大的安装时超时,你可以在你的安装目录下运行下面的命令:", + "This %s instance is currently in maintenance mode, which may take a while." : "该 %s 实例当前处于维护模式,这将进行一些时间。", "This page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时这个页面将刷新。" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index 43512c96d48..93b5f8b4aef 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -2,15 +2,22 @@ "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ", "Turned on maintenance mode" : "启用维护模式", "Turned off maintenance mode" : "关闭维护模式", + "Maintenance mode is kept active" : "维护模式已被启用", "Updated database" : "数据库已更新", "Checked database schema update" : "已经检查数据库架构更新", "Checked database schema update for apps" : "已经检查应用的数据库架构更新", "Updated \"%s\" to %s" : "更新 \"%s\" 为 %s", + "Repair warning: " : "修复警告:", + "Repair error: " : "修复错误:", + "Following incompatible apps have been disabled: %s" : "下列不兼容应用已经被禁用:%s", + "Invalid file provided" : "提供了无效文件", "No image or file provided" : "没有提供图片或文件", "Unknown filetype" : "未知的文件类型", "Invalid image" : "无效的图像", "No temporary profile picture available, try again" : "没有临时概览页图片可用,请重试", "No crop data provided" : "没有提供相应数据", + "No valid crop data provided" : "没有提供有效的裁剪数据", + "Crop is not square" : "裁剪的不是正方形", "Sunday" : "星期日", "Monday" : "星期一", "Tuesday" : "星期二", @@ -60,7 +67,15 @@ "So-so password" : "一般强度的密码", "Good password" : "较强的密码", "Strong password" : "强密码", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "由于 WebDAV 接口似乎被破坏,因此你的网页服务器没有正确地设置来允许文件同步。", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "该服务器没有工作在互联网连接,这意味着像挂载外部存储,第三方应用的更新或者安装的通知将不会工作。远程文件访问和邮件通知的发送也可能不会工作。如果你想拥有所有功能,我们建议你为服务器打开互联网连接。", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。", "Error occurred while checking server setup" : "当检查服务器启动时出错", + "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", + "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "您正在通过 HTTP 访问该站点,我们强烈建议您按照<a href=\"{docUrl}\">安全提示</a>配置服务器强制使用 HTTPS。", "Shared" : "已共享", "Shared with {recipients}" : "由{recipients}分享", "Share" : "分享", @@ -70,7 +85,9 @@ "Error while changing permissions" : "修改权限时出错", "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", "Shared with you by {owner}" : "{owner} 与您共享", - "Share with user or group …" : "分享给其他用户或组 ...", + "Share with users or groups …" : "分享给其他用户或组 ...", + "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", "Share link" : "分享链接", "The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效", "Link" : "链接", @@ -83,6 +100,7 @@ "Set expiration date" : "设置过期日期", "Expiration" : "过期", "Expiration date" : "过期日期", + "An error occured. Please try again" : "发生了一个错误请重新尝试", "Adding user..." : "添加用户中...", "group" : "群组", "remote" : "远程", @@ -94,6 +112,7 @@ "can edit" : "可以修改", "access control" : "访问控制", "create" : "创建", + "change" : "更改", "delete" : "删除", "Password protected" : "密码已受保护", "Error unsetting expiration date" : "取消设置过期日期时出错", @@ -112,7 +131,9 @@ "Hello world!" : "Hello world!", "sunny" : "晴", "Hello {name}, the weather is {weather}" : "您好 {name},今天天气是{weather}", + "Hello {name}" : "你好 {name}", "_download %n file_::_download %n files_" : ["下载 %n 个文件"], + "{version} is available. Get more information on how to update." : "{version} 现在可用。获取更多升级相关信息。", "Updating {productName} to version {version}, this may take a while." : "更新 {productName} 到版本 {version},这可能需要一些时间。", "Please reload the page." : "请重新加载页面。", "The update was unsuccessful. " : "升级未成功", @@ -125,7 +146,9 @@ "New password" : "新密码", "New Password" : "新密码", "Reset password" : "重置密码", - "_{count} search result in other places_::_{count} search results in other places_" : [""], + "Searching other places" : "搜索其他地方", + "No search results in other places" : "在其他地方没有搜索结果", + "_{count} search result in other places_::_{count} search results in other places_" : ["在其他地方有 {count} 个搜索结果"], "Personal" : "个人", "Users" : "用户", "Apps" : "应用", @@ -152,12 +175,13 @@ "Technical details" : "技术细节", "Remote Address: %s" : "远程地址: %s", "Request ID: %s" : "请求 ID: %s", + "Type: %s" : "类型:%s", "Code: %s" : "代码: %s", "Message: %s" : "消息: %s", "File: %s" : "文件: %s", "Line: %s" : "行: %s", "Trace" : "追踪", - "Security Warning" : "安全警告", + "Security warning" : "安全警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的数据目录和文件可能可以直接被互联网访问,因为 .htaccess 并未正常工作。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "关于如何配置服务器,请参见 <a href=\"%s\" target=\"_blank\">此文档</a>。", "Create an <strong>admin account</strong>" : "创建<strong>管理员账号</strong>", @@ -166,18 +190,28 @@ "Data folder" : "数据目录", "Configure the database" : "配置数据库", "Only %s is available." : "仅 %s 可用。", + "Install and activate additional PHP modules to choose other database types." : "安装或激活额外的 PHP 模块以选择其他数据库类型。", + "For more details check out the documentation." : "请查阅文档获得详细信息。", "Database user" : "数据库用户", "Database password" : "数据库密码", "Database name" : "数据库名", "Database tablespace" : "数据库表空间", "Database host" : "数据库主机", + "Performance warning" : "性能警告", + "SQLite will be used as database." : "SQLite 将被作为数据库使用。", + "For larger installations we recommend to choose a different database backend." : "对于更大的安装,我们建议选择一个不同的数据库后端。", + "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", "Finish setup" : "安装完成", "Finishing …" : "正在结束 ...", - "%s is available. Get more information on how to update." : "%s 可用。获取更多关于如何升级的信息。", + "Need help?" : "需要帮助?", + "See the documentation" : "查看文档", + "This application requires JavaScript for correct operation. Please {linkstart}enable JavaScript{linkend} and reload the page." : "对于正确的操作,该应用要求 JavaScript 。请 {linkstart} 打开 JavaScript {linkend} ,然后重新载入页面。", "Log out" : "注销", "Search" : "搜索", "Server side authentication failed!" : "服务端验证失败!", "Please contact your administrator." : "请联系你的管理员。", + "An internal error occured." : "发生了内部错误。", + "Please try again or contact your administrator." : "请重试或联系管理员。", "Forgot your password? Reset it!" : "忘记密码?立即重置!", "remember" : "记住", "Log in" : "登录", @@ -196,7 +230,8 @@ "The theme %s has been disabled." : "%s 主题已被禁用。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。", "Start update" : "开始更新", - "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "为避免更大的安装演示,你能在你的安装目录下面运行这些命令:", + "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "为进行避免较大的安装时超时,你可以在你的安装目录下运行下面的命令:", + "This %s instance is currently in maintenance mode, which may take a while." : "该 %s 实例当前处于维护模式,这将进行一些时间。", "This page will refresh itself when the %s instance is available again." : "当实例 %s 再次可用时这个页面将刷新。" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js index fca79d40520..ab567c72ec2 100644 --- a/core/l10n/zh_HK.js +++ b/core/l10n/zh_HK.js @@ -25,7 +25,6 @@ OC.L10N.register( "No" : "否", "Yes" : "是", "Ok" : "確認", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "取消", "Continue" : "繼續", "Shared" : "已分享", @@ -51,13 +50,11 @@ OC.L10N.register( "Warning" : "警告", "Delete" : "刪除", "Add" : "加入", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "更新成功, 正", "Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}", "New password" : "新密碼", "New Password" : "新密碼", "Reset password" : "重設密碼", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "個人", "Users" : "用戶", "Apps" : "軟件", diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json index 8418ac9a705..09a4bd74f47 100644 --- a/core/l10n/zh_HK.json +++ b/core/l10n/zh_HK.json @@ -23,7 +23,6 @@ "No" : "否", "Yes" : "是", "Ok" : "確認", - "_{count} file conflict_::_{count} file conflicts_" : [""], "Cancel" : "取消", "Continue" : "繼續", "Shared" : "已分享", @@ -49,13 +48,11 @@ "Warning" : "警告", "Delete" : "刪除", "Add" : "加入", - "_download %n file_::_download %n files_" : [""], "The update was successful. Redirecting you to ownCloud now." : "更新成功, 正", "Use the following link to reset your password: {link}" : "請用以下連結重設你的密碼: {link}", "New password" : "新密碼", "New Password" : "新密碼", "Reset password" : "重設密碼", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "個人", "Users" : "用戶", "Apps" : "軟件", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 8e1bbd0b1f6..42c1aebcfde 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -72,7 +72,6 @@ OC.L10N.register( "Error while changing permissions" : "修改權限時發生錯誤", "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", "Shared with you by {owner}" : "{owner} 已經和您分享", - "Share with user or group …" : "與用戶或群組分享", "Share link" : "分享連結", "The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效", "Password protect" : "密碼保護", @@ -107,7 +106,6 @@ OC.L10N.register( "Edit tags" : "編輯標籤", "Error loading dialog template: {error}" : "載入對話樣板出錯:{error}", "No tags selected for deletion." : "沒有選擇要刪除的標籤", - "_download %n file_::_download %n files_" : [""], "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候", "Please reload the page." : "請重新整理頁面", "The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。", @@ -119,7 +117,6 @@ OC.L10N.register( "New password" : "新密碼", "New Password" : "新密碼", "Reset password" : "重設密碼", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "個人", "Users" : "使用者", "Apps" : "應用程式", @@ -151,7 +148,6 @@ OC.L10N.register( "File: %s" : "檔案:%s", "Line: %s" : "行數:%s", "Trace" : "追蹤", - "Security Warning" : "安全性警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。", "Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>", @@ -167,7 +163,6 @@ OC.L10N.register( "Database host" : "資料庫主機", "Finish setup" : "完成設定", "Finishing …" : "即將完成…", - "%s is available. Get more information on how to update." : "%s 已經釋出,瞭解更多資訊以進行更新。", "Log out" : "登出", "Search" : "搜尋", "Server side authentication failed!" : "伺服器端認證失敗!", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index f0aa279dd94..c2af58eafa6 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -70,7 +70,6 @@ "Error while changing permissions" : "修改權限時發生錯誤", "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", "Shared with you by {owner}" : "{owner} 已經和您分享", - "Share with user or group …" : "與用戶或群組分享", "Share link" : "分享連結", "The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效", "Password protect" : "密碼保護", @@ -105,7 +104,6 @@ "Edit tags" : "編輯標籤", "Error loading dialog template: {error}" : "載入對話樣板出錯:{error}", "No tags selected for deletion." : "沒有選擇要刪除的標籤", - "_download %n file_::_download %n files_" : [""], "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候", "Please reload the page." : "請重新整理頁面", "The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。", @@ -117,7 +115,6 @@ "New password" : "新密碼", "New Password" : "新密碼", "Reset password" : "重設密碼", - "_{count} search result in other places_::_{count} search results in other places_" : [""], "Personal" : "個人", "Users" : "使用者", "Apps" : "應用程式", @@ -149,7 +146,6 @@ "File: %s" : "檔案:%s", "Line: %s" : "行數:%s", "Trace" : "追蹤", - "Security Warning" : "安全性警告", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "您的資料目錄看起來可以被 Internet 公開存取,因為 .htaccess 設定並未生效。", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "請參考<a href=\"%s\" target=\"_blank\">說明文件</a>以瞭解如何正確設定您的伺服器。", "Create an <strong>admin account</strong>" : "建立一個<strong>管理者帳號</strong>", @@ -165,7 +161,6 @@ "Database host" : "資料庫主機", "Finish setup" : "完成設定", "Finishing …" : "即將完成…", - "%s is available. Get more information on how to update." : "%s 已經釋出,瞭解更多資訊以進行更新。", "Log out" : "登出", "Search" : "搜尋", "Server side authentication failed!" : "伺服器端認證失敗!", diff --git a/core/lostpassword/controller/lostcontroller.php b/core/lostpassword/controller/lostcontroller.php index c039c578b59..4c5e58c7b60 100644 --- a/core/lostpassword/controller/lostcontroller.php +++ b/core/lostpassword/controller/lostcontroller.php @@ -1,9 +1,27 @@ <?php /** - * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @author Björn Schießle <schiessle@owncloud.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\LostPassword\Controller; @@ -15,6 +33,7 @@ use \OCP\IRequest; use \OCP\IL10N; use \OCP\IConfig; use OCP\IUserManager; +use OCP\Mail\IMailer; use OCP\Security\ISecureRandom; use \OC_Defaults; use OCP\Security\StringUtils; @@ -32,6 +51,7 @@ class LostController extends Controller { protected $urlGenerator; /** @var IUserManager */ protected $userManager; + // FIXME: Inject a non-static factory of OC_Defaults for better unit-testing /** @var OC_Defaults */ protected $defaults; /** @var IL10N */ @@ -44,6 +64,8 @@ class LostController extends Controller { protected $config; /** @var ISecureRandom */ protected $secureRandom; + /** @var IMailer */ + protected $mailer; /** * @param string $appName @@ -56,6 +78,7 @@ class LostController extends Controller { * @param ISecureRandom $secureRandom * @param string $from * @param string $isDataEncrypted + * @param IMailer $mailer */ public function __construct($appName, IRequest $request, @@ -66,7 +89,8 @@ class LostController extends Controller { IConfig $config, ISecureRandom $secureRandom, $from, - $isDataEncrypted) { + $isDataEncrypted, + IMailer $mailer) { parent::__construct($appName, $request); $this->urlGenerator = $urlGenerator; $this->userManager = $userManager; @@ -76,6 +100,7 @@ class LostController extends Controller { $this->from = $from; $this->isDataEncrypted = $isDataEncrypted; $this->config = $config; + $this->mailer = $mailer; } /** @@ -200,15 +225,12 @@ class LostController extends Controller { $msg = $tmpl->fetchPage(); try { - // FIXME: should be added to the container and injected in here - \OC_Mail::send( - $email, - $user, - $this->l10n->t('%s password reset', array($this->defaults->getName())), - $msg, - $this->from, - $this->defaults->getName() - ); + $message = $this->mailer->createMessage(); + $message->setTo([$email => $user]); + $message->setSubject($this->l10n->t('%s password reset', [$this->defaults->getName()])); + $message->setPlainBody($msg); + $message->setFrom([$this->from => $this->defaults->getName()]); + $this->mailer->send($message); } catch (\Exception $e) { throw new \Exception($this->l10n->t( 'Couldn\'t send reset email. Please contact your administrator.' diff --git a/core/lostpassword/templates/email.php b/core/lostpassword/templates/email.php index 3dbae4bfc69..db968246600 100644 --- a/core/lostpassword/templates/email.php +++ b/core/lostpassword/templates/email.php @@ -1,2 +1,22 @@ <?php +/** + * @author Christopher Schäpers <kondou@ts.unde.re> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ echo str_replace('{link}', $_['link'], $l->t('Use the following link to reset your password: {link}')); diff --git a/core/lostpassword/templates/resetpassword.php b/core/lostpassword/templates/resetpassword.php index 498c692f12e..9152ae3d75f 100644 --- a/core/lostpassword/templates/resetpassword.php +++ b/core/lostpassword/templates/resetpassword.php @@ -1,6 +1,27 @@ <?php -/** @var array $_ */ -/** @var $l OC_L10N */ +/** + * @author Jan-Christoph Borchardt <hey@jancborchardt.net> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Michael Gapczynski <GapczynskiM@gmail.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ style('lostpassword', 'resetpassword'); script('core', 'lostpassword'); ?> diff --git a/core/register_command.php b/core/register_command.php index ba0567787d2..6cd81b4c3b7 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -1,36 +1,75 @@ <?php /** - * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bart Visscher <bartv@thisnet.nl> + * @author Christian Kampka <christian@kampka.net> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin McCorkell <rmccorkell@karoshi.org.uk> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Vincent Petry <pvince81@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ /** @var $application Symfony\Component\Console\Application */ $application->add(new OC\Core\Command\Status); +$application->add(new OC\Core\Command\Check(\OC::$server->getConfig())); +$application->add(new OC\Core\Command\App\CheckCode()); +$application->add(new OC\Core\Command\L10n\CreateJs()); if (\OC::$server->getConfig()->getSystemValue('installed', false)) { - $repair = new \OC\Repair(\OC\Repair::getRepairSteps()); - - $application->add(new OC\Core\Command\Db\GenerateChangeScript()); - $application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory())); - $application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig())); - $application->add(new OC\Core\Command\Maintenance\SingleUser()); - $application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig())); - $application->add(new OC\Core\Command\App\CheckCode()); $application->add(new OC\Core\Command\App\Disable()); $application->add(new OC\Core\Command\App\Enable()); $application->add(new OC\Core\Command\App\ListApps()); - $application->add(new OC\Core\Command\Maintenance\Repair($repair, \OC::$server->getConfig())); - $application->add(new OC\Core\Command\User\Report()); - $application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager())); - $application->add(new OC\Core\Command\User\LastSeen()); - $application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager())); - $application->add(new OC\Core\Command\User\Add(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); - $application->add(new OC\Core\Command\L10n\CreateJs()); + $application->add(new OC\Core\Command\Background\Cron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\WebCron(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Background\Ajax(\OC::$server->getConfig())); + + $application->add(new OC\Core\Command\Config\App\DeleteConfig(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Config\App\GetConfig(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Config\App\SetConfig(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Config\Import(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Config\ListConfigs(\OC::$server->getSystemConfig(), \OC::$server->getAppConfig())); + $application->add(new OC\Core\Command\Config\System\DeleteConfig(\OC::$server->getSystemConfig())); + $application->add(new OC\Core\Command\Config\System\GetConfig(\OC::$server->getSystemConfig())); + $application->add(new OC\Core\Command\Config\System\SetConfig(\OC::$server->getSystemConfig())); + + $application->add(new OC\Core\Command\Db\GenerateChangeScript()); + $application->add(new OC\Core\Command\Db\ConvertType(\OC::$server->getConfig(), new \OC\DB\ConnectionFactory())); + + $application->add(new OC\Core\Command\Encryption\Disable(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Encryption\Enable(\OC::$server->getConfig(), \OC::$server->getEncryptionManager())); + $application->add(new OC\Core\Command\Encryption\ListModules(\OC::$server->getEncryptionManager())); + $application->add(new OC\Core\Command\Encryption\SetDefaultModule(\OC::$server->getEncryptionManager())); + $application->add(new OC\Core\Command\Encryption\Status(\OC::$server->getEncryptionManager())); + + $application->add(new OC\Core\Command\Maintenance\MimeTypesJS()); + $application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig())); + $application->add(new OC\Core\Command\Maintenance\Repair(new \OC\Repair(\OC\Repair::getRepairSteps()), \OC::$server->getConfig())); + $application->add(new OC\Core\Command\Maintenance\SingleUser(\OC::$server->getConfig())); + + $application->add(new OC\Core\Command\Upgrade(\OC::$server->getConfig())); + + $application->add(new OC\Core\Command\User\Add(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); + $application->add(new OC\Core\Command\User\Delete(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\LastSeen(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\Report(\OC::$server->getUserManager())); + $application->add(new OC\Core\Command\User\ResetPassword(\OC::$server->getUserManager())); } else { $application->add(new OC\Core\Command\Maintenance\Install(\OC::$server->getConfig())); } diff --git a/core/routes.php b/core/routes.php index afa2768e607..57fa606f5fb 100644 --- a/core/routes.php +++ b/core/routes.php @@ -1,9 +1,31 @@ <?php /** - * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bart Visscher <bartv@thisnet.nl> + * @author Bernhard Posselt <dev@bernhard-posselt.com> + * @author Christopher Schäpers <kondou@ts.unde.re> + * @author Georg Ehrke <georg@owncloud.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Roeland Jago Douma <roeland@famdouma.nl> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Thomas Tanghus <thomas@tanghus.net> + * @author Victor Dubiniuk <dubiniuk@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ use OC\Core\Application; @@ -86,19 +108,19 @@ $this->create('core_ajax_update', '/core/ajax/update.php') // Sharing routes $this->create('files_sharing.sharecontroller.showShare', '/s/{token}')->action(function($urlParams) { - $app = new \OCA\Files_Sharing\Application($urlParams); + $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams); $app->dispatch('ShareController', 'showShare'); }); $this->create('files_sharing.sharecontroller.authenticate', '/s/{token}/authenticate')->post()->action(function($urlParams) { - $app = new \OCA\Files_Sharing\Application($urlParams); + $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams); $app->dispatch('ShareController', 'authenticate'); }); $this->create('files_sharing.sharecontroller.showAuthenticate', '/s/{token}/authenticate')->get()->action(function($urlParams) { - $app = new \OCA\Files_Sharing\Application($urlParams); + $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams); $app->dispatch('ShareController', 'showAuthenticate'); }); $this->create('files_sharing.sharecontroller.downloadShare', '/s/{token}/download')->get()->action(function($urlParams) { - $app = new \OCA\Files_Sharing\Application($urlParams); + $app = new \OCA\Files_Sharing\AppInfo\Application($urlParams); $app->dispatch('ShareController', 'downloadShare'); }); diff --git a/core/search/ajax/search.php b/core/search/ajax/search.php index 2bafe65302b..1b025088f08 100644 --- a/core/search/ajax/search.php +++ b/core/search/ajax/search.php @@ -1,25 +1,28 @@ <?php - /** -* ownCloud -* -* @author Robin Appelman -* @copyright 2010 Robin Appelman icewind1991@gmail.com -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -* -*/ + * @author Bart Visscher <bartv@thisnet.nl> + * @author Jörn Friedrich Dreyer <jfd@butonic.de> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ // Check if we are a user \OCP\JSON::checkLoggedIn(); diff --git a/core/search/css/results.css b/core/search/css/results.css index 04f7b6dcb99..fd07561d133 100644 --- a/core/search/css/results.css +++ b/core/search/css/results.css @@ -3,12 +3,18 @@ See the COPYING-README file. */ #searchresults { - background-color:#fff; - overflow-x:hidden; - text-overflow:ellipsis; + background-color: #fff; + overflow-x: hidden; + text-overflow: ellipsis; padding-top: 65px; box-sizing: border-box; - z-index:75; + z-index: 75; + /* account for margin-bottom in files list */ + margin-top: -250px; +} +#searchresults.filter-empty { + /* remove whitespace on bottom when no search results, to fix layout */ + margin-top: 0 !important; } #searchresults.hidden { @@ -18,23 +24,23 @@ box-sizing: content-box; } -#searchresults #status { +#searchresults .status { background-color: rgba(255, 255, 255, .85); height: 12px; padding: 28px 0 28px 56px; font-size: 18px; } -.has-favorites:not(.hidden) ~ #searchresults #status { +.has-favorites:not(.hidden) ~ #searchresults .status { padding-left: 102px; } -#searchresults #status.fixed { +#searchresults .status.fixed { position: fixed; bottom: 0; width: 100%; z-index: 10; } -#searchresults #status .spinner { +#searchresults .status .spinner { height: 16px; width: 16px; vertical-align: middle; diff --git a/core/search/js/search.js b/core/search/js/search.js index c7feeacf42e..bc67eb0e154 100644 --- a/core/search/js/search.js +++ b/core/search/js/search.js @@ -94,6 +94,9 @@ /** * Do a search query and display the results * @param {string} query the search query + * @param inApps + * @param page + * @param size */ this.search = function(query, inApps, page, size) { if (query) { @@ -125,6 +128,7 @@ //show spinner $searchResults.removeClass('hidden'); + $status.addClass('status'); $status.html(t('core', 'Searching other places')+'<img class="spinner" alt="search in progress" src="'+OC.webroot+'/core/img/loading.gif" />'); // do the actual search query @@ -159,7 +163,8 @@ var summaryAndStatusHeight = 118; function isStatusOffScreen() { - return $searchResults.position() && ($searchResults.position().top + summaryAndStatusHeight > window.innerHeight); + return $searchResults.position() && + ($searchResults.position().top + summaryAndStatusHeight > window.innerHeight); } function placeStatus() { @@ -209,8 +214,12 @@ var count = $searchResults.find('tr.result').length; $status.data('count', count); if (count === 0) { - $status.text(t('core', 'No search result in other places')); + $status.addClass('emptycontent').removeClass('status'); + $status.html(''); + $status.append('<div class="icon-search"></div>'); + $status.append('<h2>' + t('core', 'No search results in other places') + '</h2>'); } else { + $status.removeClass('emptycontent').addClass('status'); $status.text(n('core', '{count} search result in other places', '{count} search results in other places', count, {count:count})); } } @@ -247,10 +256,11 @@ * Event handler for when scrolling the list container. * This appends/renders the next page of entries when reaching the bottom. */ - function onScroll(e) { + function onScroll() { if ($searchResults && lastQuery !== false && lastResults.length > 0) { var resultsBottom = $searchResults.offset().top + $searchResults.height(); - var containerBottom = $searchResults.offsetParent().offset().top + $searchResults.offsetParent().height(); + var containerBottom = $searchResults.offsetParent().offset().top + + $searchResults.offsetParent().height(); if ( resultsBottom < containerBottom * 1.2 ) { self.search(lastQuery, lastInApps, lastPage + 1); } @@ -284,7 +294,7 @@ event.preventDefault(); }); - $searchBox.on('search', function (event) { + $searchBox.on('search', function () { if($searchBox.val() === '') { if(self.hasFilter(getCurrentApp())) { self.getFilter(getCurrentApp())(''); @@ -354,6 +364,14 @@ placeStatus(); OC.Plugins.attach('OCA.Search', this); + + // hide search file if search is not enabled + if(self.hasFilter(getCurrentApp())) { + return; + } + if ($searchResults.length === 0) { + $searchBox.hide(); + } } }; OCA.Search = Search; @@ -361,19 +379,18 @@ $(document).ready(function() { var $searchResults = $('#searchresults'); - if ($searchResults.length) { + if ($searchResults.length > 0) { $searchResults.addClass('hidden'); $('#app-content') .find('.viewcontainer').css('min-height', 'initial'); + $searchResults.load(OC.webroot + '/core/search/templates/part.results.html', function () { + OC.Search = new OCA.Search($('#searchbox'), $('#searchresults')); + }); } else { - $searchResults = $('<div id="searchresults" class="hidden"/>'); - $('#app-content') - .append($searchResults) - .find('.viewcontainer').css('min-height', 'initial'); + _.defer(function() { + OC.Search = new OCA.Search($('#searchbox'), $('#searchresults')); + }); } - $searchResults.load(OC.webroot + '/core/search/templates/part.results.html', function () { - OC.Search = new OCA.Search($('#searchbox'), $('#searchresults')); - }); }); /** @@ -383,4 +400,4 @@ OC.search.customResults = {}; /** * @deprecated use get/setRenderer() instead */ -OC.search.resultTypes = {};
\ No newline at end of file +OC.search.resultTypes = {}; diff --git a/core/setup/controller.php b/core/setup/controller.php index fa3637dd8fd..f616ae5a5b3 100644 --- a/core/setup/controller.php +++ b/core/setup/controller.php @@ -1,10 +1,29 @@ <?php /** - * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl> - * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Bart Visscher <bartv@thisnet.nl> + * @author cmeh <cmeh@users.noreply.github.com> + * @author ideaship <ideaship@users.noreply.github.com> + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Robin Appelman <icewind@owncloud.com> + * @author Robin McCorkell <rmccorkell@karoshi.org.uk> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Setup; @@ -86,7 +105,7 @@ class Controller { public function loadAutoConfig($post) { if( file_exists($this->autoConfigFile)) { - \OC_Log::write('core', 'Autoconfig file found, setting up ownCloud…', \OC_Log::INFO); + \OCP\Util::writeLog('core', 'Autoconfig file found, setting up ownCloud…', \OCP\Util::INFO); $AUTOCONFIG = array(); include $this->autoConfigFile; $post = array_merge ($post, $AUTOCONFIG); diff --git a/core/shipped.json b/core/shipped.json new file mode 100644 index 00000000000..7993b61569c --- /dev/null +++ b/core/shipped.json @@ -0,0 +1,35 @@ +{ + "core-version": "8.1.0.0", + "shippedApps": [ + "activity", + "admin_audit", + "enterprise_key", + "external", + "files", + "files_antivirus", + "encryption", + "files_external", + "files_ldap_home", + "files_locking", + "files_pdfviewer", + "files_sharing", + "files_sharing_log", + "files_texteditor", + "files_trashbin", + "files_versions", + "files_videoviewer", + "firewall", + "firstrunwizard", + "gallery", + "objectstore", + "provisioning_api", + "sharepoint", + "templateeditor", + "updater", + "user_external", + "user_ldap", + "user_shibboleth", + "user_webdavauth", + "windows_network_drive" + ] +} diff --git a/core/strings.php b/core/strings.php index ebae63bf928..e89228844d8 100644 --- a/core/strings.php +++ b/core/strings.php @@ -1,5 +1,24 @@ <?php - +/** + * @author Jan-Christoph Borchardt <hey@jancborchardt.net> + * @author Robin Appelman <icewind@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ //some strings that are used in /lib but wont be translatable unless they are in /core too $l = \OC::$server->getL10N('core'); $l->t("Personal"); diff --git a/core/tags/controller.php b/core/tags/controller.php index c790d43345d..e06a343f2b3 100644 --- a/core/tags/controller.php +++ b/core/tags/controller.php @@ -1,9 +1,23 @@ <?php /** - * Copyright (c) 2013 Thomas Tanghus (thomas@tanghus.net) - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Tanghus <thomas@tanghus.net> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\Tags; diff --git a/core/templates/403.php b/core/templates/403.php index 6e910fd2e82..a19009c3546 100644 --- a/core/templates/403.php +++ b/core/templates/403.php @@ -9,7 +9,7 @@ if(!isset($_)) {//also provide standalone error page ?> <ul> <li class='error'> - <?php p($l->t( 'Access forbidden' )); ?><br/> + <?php p($l->t( 'Access forbidden' )); ?><br> <p class='hint'><?php if(isset($_['file'])) p($_['file'])?></p> </li> </ul> diff --git a/core/templates/404.php b/core/templates/404.php index 90912844ef9..c8d16e3e8f7 100644 --- a/core/templates/404.php +++ b/core/templates/404.php @@ -14,7 +14,7 @@ if(!isset($_)) {//also provide standalone error page <?php else: ?> <ul> <li class="error"> - <?php p($l->t('File not found')); ?><br/> + <?php p($l->t('File not found')); ?><br> <p class="hint"><?php p($l->t('The specified document has not been found on the server.')); ?></p> <p class="hint"><a href="<?php p(OC_Helper::linkTo('', 'index.php')) ?>"><?php p($l->t('You can click here to return to %s.', array($theme->getName()))); ?></a></p> </li> diff --git a/core/templates/error.php b/core/templates/error.php index 030fbf07fcb..6e044b72414 100644 --- a/core/templates/error.php +++ b/core/templates/error.php @@ -1,7 +1,7 @@ <ul class="error-wide"> <?php foreach($_["errors"] as $error):?> <li class='error'> - <?php p($error['error']) ?><br/> + <?php p($error['error']) ?><br> <?php if(isset($error['hint']) && $error['hint']): ?> <p class='hint'><?php print_unescaped($error['hint']) ?></p> <?php endif;?> diff --git a/core/templates/exception.php b/core/templates/exception.php index e5b57e2645e..899ea29456c 100644 --- a/core/templates/exception.php +++ b/core/templates/exception.php @@ -9,13 +9,14 @@ style('core', ['styles', 'header']); <p><?php p($l->t('The server encountered an internal error and was unable to complete your request.')) ?></p> <p><?php p($l->t('Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.')) ?></p> <p><?php p($l->t('More details can be found in the server log.')) ?></p> - <br /> + <br> <h2><strong><?php p($l->t('Technical details')) ?></strong></h2> <ul> <li><?php p($l->t('Remote Address: %s', $_['remoteAddr'])) ?></li> <li><?php p($l->t('Request ID: %s', $_['requestID'])) ?></li> <?php if($_['debugMode']): ?> + <li><?php p($l->t('Type: %s', $_['errorClass'])) ?></li> <li><?php p($l->t('Code: %s', $_['errorCode'])) ?></li> <li><?php p($l->t('Message: %s', $_['errorMsg'])) ?></li> <li><?php p($l->t('File: %s', $_['file'])) ?></li> diff --git a/core/templates/installation.php b/core/templates/installation.php index f8311fed009..b686a1ca68c 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -10,7 +10,7 @@ script('core', [ <input type='hidden' id='hasOracle' value='<?php p($_['hasOracle']) ?>'> <input type='hidden' id='hasMSSQL' value='<?php p($_['hasMSSQL']) ?>'> <form action="index.php" method="post"> -<input type="hidden" name="install" value="true" /> +<input type="hidden" name="install" value="true"> <?php if(count($_['errors']) > 0): ?> <fieldset class="warning"> <legend><strong><?php p($l->t('Error'));?></strong></legend> @@ -28,7 +28,7 @@ script('core', [ <?php endif; ?> <?php if(!$_['htaccessWorking']): ?> <fieldset class="warning"> - <legend><strong><?php p($l->t('Security Warning'));?></strong></legend> + <legend><strong><?php p($l->t('Security warning'));?></strong></legend> <p><?php p($l->t('Your data directory and files are probably accessible from the internet because the .htaccess file does not work.'));?><br> <?php print_unescaped($l->t( 'For information how to properly configure your server, please see the <a href="%s" target="_blank">documentation</a>.', @@ -42,18 +42,18 @@ script('core', [ <input type="text" name="adminlogin" id="adminlogin" placeholder="<?php p($l->t( 'Username' )); ?>" value="<?php p($_['adminlogin']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" autofocus required /> + autocomplete="off" autocapitalize="off" autocorrect="off" autofocus required> <label for="adminlogin" class="infield"><?php p($l->t( 'Username' )); ?></label> - <img class="svg" src="<?php p(image_path('', 'actions/user.svg')); ?>" alt="" /> + <img class="svg" src="<?php p(image_path('', 'actions/user.svg')); ?>" alt=""> </p> <p class="groupbottom"> <input type="password" name="adminpass" data-typetoggle="#show" id="adminpass" placeholder="<?php p($l->t( 'Password' )); ?>" value="<?php p($_['adminpass']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" required /> + autocomplete="off" autocapitalize="off" autocorrect="off" required> <label for="adminpass" class="infield"><?php p($l->t( 'Password' )); ?></label> - <img class="svg" id="adminpass-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt="" /> - <input type="checkbox" id="show" name="show" /> + <img class="svg" id="adminpass-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""> + <input type="checkbox" id="show" name="show"> <label for="show"></label> <div class="strengthify-wrapper"></div> </p> @@ -72,7 +72,7 @@ script('core', [ <input type="text" name="directory" id="directory" placeholder="<?php p(OC::$SERVERROOT.'/data'); ?>" value="<?php p($_['directory']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" /> + autocomplete="off" autocapitalize="off" autocorrect="off"> </div> </fieldset> <?php endif; ?> @@ -85,8 +85,13 @@ script('core', [ <div id="selectDbType"> <?php foreach($_['databases'] as $type => $label): ?> <?php if(count($_['databases']) === 1): ?> - <p class="info"><?php p($l->t( 'Only %s is available.', array($label) )); ?>.</p> - <input type="hidden" id="dbtype" name="dbtype" value="<?php p($type) ?>" /> + <p class="info"> + <?php p($l->t( 'Only %s is available.', array($label) )); ?> + <?php p($l->t( 'Install and activate additional PHP modules to choose other database types.' )); ?><br> + <a href="<?php print_unescaped(link_to_docs('admin-source_install')); ?>" target="_blank"> + <?php p($l->t( 'For more details check out the documentation.' )); ?> ↗</a> + </p> + <input type="hidden" id="dbtype" name="dbtype" value="<?php p($type) ?>"> <?php else: ?> <input type="radio" name="dbtype" value="<?php p($type) ?>" id="<?php p($type) ?>" <?php print_unescaped($_['dbtype'] === $type ? 'checked="checked" ' : '') ?>/> @@ -104,15 +109,15 @@ script('core', [ <input type="text" name="dbuser" id="dbuser" placeholder="<?php p($l->t( 'Database user' )); ?>" value="<?php p($_['dbuser']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" /> + autocomplete="off" autocapitalize="off" autocorrect="off"> </p> <p class="groupmiddle"> <input type="password" name="dbpass" id="dbpass" data-typetoggle="#dbpassword" placeholder="<?php p($l->t( 'Database password' )); ?>" value="<?php p($_['dbpass']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" /> + autocomplete="off" autocapitalize="off" autocorrect="off"> <label for="dbpass" class="infield"><?php p($l->t( 'Database password' )); ?></label> - <input type="checkbox" id="dbpassword" name="dbpassword" /> + <input type="checkbox" id="dbpassword" name="dbpassword"> <label for="dbpassword"></label> </p> <p class="groupmiddle"> @@ -121,7 +126,7 @@ script('core', [ placeholder="<?php p($l->t( 'Database name' )); ?>" value="<?php p($_['dbname']); ?>" autocomplete="off" autocapitalize="off" autocorrect="off" - pattern="[0-9a-zA-Z$_-]+" /> + pattern="[0-9a-zA-Z$_-]+"> </p> <?php if($_['hasOracle']): ?> <div id="use_oracle_db"> @@ -130,7 +135,7 @@ script('core', [ <input type="text" name="dbtablespace" id="dbtablespace" placeholder="<?php p($l->t( 'Database tablespace' )); ?>" value="<?php p($_['dbtablespace']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" /> + autocomplete="off" autocapitalize="off" autocorrect="off"> </p> </div> <?php endif; ?> @@ -139,7 +144,7 @@ script('core', [ <input type="text" name="dbhost" id="dbhost" placeholder="<?php p($l->t( 'Database host' )); ?>" value="<?php p($_['dbhost']); ?>" - autocomplete="off" autocapitalize="off" autocorrect="off" /> + autocomplete="off" autocapitalize="off" autocorrect="off"> </p> </div> </fieldset> @@ -150,12 +155,18 @@ script('core', [ <?php if(!$_['dbIsSet'] OR count($_['errors']) > 0): ?> <fieldset id="sqliteInformation" class="warning"> - <legend><?php p($l->t('Performance Warning'));?></legend> + <legend><?php p($l->t('Performance warning'));?></legend> <p><?php p($l->t('SQLite will be used as database.'));?></p> <p><?php p($l->t('For larger installations we recommend to choose a different database backend.'));?></p> <p><?php p($l->t('Especially when using the desktop client for file syncing the use of SQLite is discouraged.')); ?></p> </fieldset> <?php endif ?> - <div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>" /></div> + <div class="buttons"><input type="submit" class="primary" value="<?php p($l->t( 'Finish setup' )); ?>" data-finishing="<?php p($l->t( 'Finishing …' )); ?>"></div> + + <p class="info"> + <span class="icon-info-white svg"></span> + <?php p($l->t('Need help?'));?> + <a target="_blank" href="<?php p(link_to_docs('admin-install')); ?>"><?php p($l->t('See the documentation'));?> ↗</a> + </p> </form> diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index 7069c0c2634..a5336b1585a 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -1,25 +1,21 @@ <!DOCTYPE html> -<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]--> -<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> +<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> <!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> - +<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> <head data-requesttoken="<?php p($_['requesttoken']); ?>"> + <meta charset="utf-8"> <title> <?php p($theme->getTitle()); ?> </title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> - <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" /> - <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" /> + <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>"> + <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>"> <?php foreach ($_['cssfiles'] as $cssfile): ?> - <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" /> + <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen"> <?php endforeach; ?> <?php foreach ($_['jsfiles'] as $jsfile): ?> - <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script> + <script src="<?php print_unescaped($jsfile); ?>"></script> <?php endforeach; ?> <?php print_unescaped($_['headers']); ?> </head> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 8deda443d98..0557e89ce71 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -1,35 +1,31 @@ <!DOCTYPE html> -<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]--> -<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> +<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> <!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> - +<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> <head data-requesttoken="<?php p($_['requesttoken']); ?>"> + <meta charset="utf-8"> <title> <?php p($theme->getTitle()); ?> </title> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> - <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>" /> - <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>" /> + <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>"> + <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path('', 'favicon-touch.png')); ?>"> <?php foreach($_['cssfiles'] as $cssfile): ?> - <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" /> + <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen"> <?php endforeach; ?> <?php foreach($_['jsfiles'] as $jsfile): ?> - <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script> + <script src="<?php print_unescaped($jsfile); ?>"></script> <?php endforeach; ?> <?php print_unescaped($_['headers']); ?> </head> <body id="<?php p($_['bodyid']);?>"> <?php include('layout.noscript.warning.php'); ?> - <div class="wrapper"><!-- for sticky footer --> - <div class="v-align"><!-- vertically centred box --> + <div class="wrapper"> + <div class="v-align"> <?php if ($_['bodyid'] === 'body-login' ): ?> - <header> + <header role="banner"> <div id="header"> <div class="logo svg"> <h1 class="hidden-visually"> @@ -44,8 +40,7 @@ <div class="push"></div><!-- for sticky footer --> </div> </div> - - <footer> + <footer role="contentinfo"> <p class="info"> <?php print_unescaped($theme->getLongFooter()); ?> </p> diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 7ae4b2e3df7..61f164719d0 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -1,33 +1,33 @@ <!DOCTYPE html> -<!--[if lt IE 7]><html class="ng-csp ie ie6 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>"><![endif]--> -<!--[if IE 7]><html class="ng-csp ie ie7 lte9 lte8 lte7" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> +<!--[if lte IE 8]><html class="ng-csp ie ie8 lte9 lte8" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> <!--[if IE 9]><html class="ng-csp ie ie9 lte9" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if gt IE 9]><html class="ng-csp ie" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><![endif]--> -<!--[if !IE]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> - - <head data-user="<?php p($_['user_uid']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>"> +<!--[if (gt IE 9)|!(IE)]><!--><html class="ng-csp" data-placeholder-focus="false" lang="<?php p($_['language']); ?>" ><!--<![endif]--> + <head data-user="<?php p($_['user_uid']); ?>" data-requesttoken="<?php p($_['requesttoken']); ?>" + <?php if ($_['updateAvailable']): ?> + data-update-version="<?php print($_['updateVersion']); ?>" data-update-link="<?php print_unescaped($_['updateLink']); ?>" + <?php endif; ?> + > + <meta charset="utf-8"> <title> <?php p(!empty($_['application'])?$_['application'].' - ':''); p($theme->getTitle()); ?> </title> - <meta charset="utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="apple-mobile-web-app-title" content="<?php p((!empty($_['application']) && $_['appid']!='files')? $_['application']:'ownCloud'); ?>"> <meta name="mobile-web-app-capable" content="yes"> - <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path($_['appid'], 'favicon.png')); ?>" /> - <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>" /> + <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path($_['appid'], 'favicon.png')); ?>"> + <link rel="apple-touch-icon-precomposed" href="<?php print_unescaped(image_path($_['appid'], 'favicon-touch.png')); ?>"> <?php foreach($_['cssfiles'] as $cssfile): ?> - <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" type="text/css" media="screen" /> + <link rel="stylesheet" href="<?php print_unescaped($cssfile); ?>" media="screen"> <?php endforeach; ?> <?php foreach($_['jsfiles'] as $jsfile): ?> - <script type="text/javascript" src="<?php print_unescaped($jsfile); ?>"></script> + <script src="<?php print_unescaped($jsfile); ?>"></script> <?php endforeach; ?> <?php print_unescaped($_['headers']); ?> </head> @@ -35,13 +35,10 @@ <?php include('layout.noscript.warning.php'); ?> <div id="notification-container"> <div id="notification"></div> - <?php if ($_['updateAvailable']): ?> - <div id="update-notification" style="display: inline;"><a href="<?php print_unescaped($_['updateLink']); ?>"><?php p($l->t('%s is available. Get more information on how to update.', array($_['updateVersion']))); ?></a></div> - <?php endif; ?> </div> - <header><div id="header"> + <header role="banner"><div id="header"> <a href="<?php print_unescaped(link_to('', 'index.php')); ?>" - title="" id="owncloud" tabindex="-1"> + id="owncloud" tabindex="1"> <div class="logo-icon svg"> <h1 class="hidden-visually"> <?php p($theme->getName()); ?> @@ -49,7 +46,7 @@ </div> </a> - <a href="#" class="menutoggle" tabindex="2"> + <a href="#" class="header-appname-container menutoggle" tabindex="2"> <h1 class="header-appname"> <?php if(OC_Util::getEditionString() === '') { @@ -64,23 +61,23 @@ <div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div> <div id="settings" class="svg"> - <div id="expand" tabindex="4" role="link"> + <div id="expand" tabindex="6" role="link"> <?php if ($_['enableAvatars']): ?> - <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown"'); } else { print_unescaped('" style="display: none"'); } ?>> + <div class="avatardiv<?php if ($_['userAvatarSet']) { print_unescaped(' avatardiv-shown'); } else { print_unescaped('" style="display: none'); } ?>"> <?php if ($_['userAvatarSet']): ?> <img src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32]));?>?requesttoken=<?php p(urlencode($_['requesttoken'])); ?>" - alt="" /> + alt=""> <?php endif; ?> </div> <?php endif; ?> <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span> - <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" /> + <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>"> </div> <div id="expanddiv"> <ul> <?php foreach($_['settingsnavigation'] as $entry):?> <li> - <a href="<?php print_unescaped($entry['href']); ?>" title="" + <a href="<?php print_unescaped($entry['href']); ?>" <?php if( $entry["active"] ): ?> class="active"<?php endif; ?>> <img class="svg" alt="" src="<?php print_unescaped($entry['icon']); ?>"> <?php p($entry['name']) ?> @@ -89,7 +86,7 @@ <?php endforeach; ?> <li> <a id="logout" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>> - <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg')); ?>" /> + <img class="svg" alt="" src="<?php print_unescaped(image_path('', 'actions/logout.svg')); ?>"> <?php p($l->t('Log out'));?> </a> </li> @@ -97,24 +94,24 @@ </div> </div> - <form class="searchbox" action="#" method="post"> + <form class="searchbox" action="#" method="post" role="search"> <label for="searchbox" class="hidden-visually"> <?php p($l->t('Search'));?> </label> <input id="searchbox" class="svg" type="search" name="query" value="<?php if(isset($_POST['query'])) {p($_POST['query']);};?>" - autocomplete="off" tabindex="3" /> + autocomplete="off" tabindex="5"> </form> </div></header> - <nav><div id="navigation"> + <nav role="navigation"><div id="navigation"> <div id="apps" class="svg"> <ul> <?php foreach($_['navigation'] as $entry): ?> <li data-id="<?php p($entry['id']); ?>"> - <a href="<?php print_unescaped($entry['href']); ?>" title="" + <a href="<?php print_unescaped($entry['href']); ?>" tabindex="3" <?php if( $entry['active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon svg" alt="" src="<?php print_unescaped($entry['icon']); ?>"/> + <img class="app-icon svg" alt="" src="<?php print_unescaped($entry['icon']); ?>"> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($entry['name']); ?> @@ -122,13 +119,14 @@ </a> </li> <?php endforeach; ?> - - <!-- show "More apps" link to app administration directly in app navigation, as last entry --> - <?php if(OC_User::isAdminUser(OC_User::getUser())): ?> + <?php + /* show "More apps" link to app administration directly in app navigation, as last entry */ + if(OC_User::isAdminUser(OC_User::getUser())): + ?> <li id="apps-management"> - <a href="<?php print_unescaped(OC_Helper::linkToRoute('settings_apps')); ?>" title="" + <a href="<?php print_unescaped(\OC::$server->getURLGenerator()->linkToRoute('settings.AppSettings.viewApps')); ?>" tabindex="4" <?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>> - <img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"/> + <img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"> <div class="icon-loading-dark" style="display:none;"></div> <span> <?php p($l->t('Apps')); ?> @@ -142,7 +140,7 @@ </div></nav> <div id="content-wrapper"> - <div id="content" class="app-<?php p($_['appid']) ?>"> + <div id="content" class="app-<?php p($_['appid']) ?>" role="main"> <?php print_unescaped($_['content']); ?> </div> </div> diff --git a/core/templates/login.php b/core/templates/login.php index f10a8102180..1586c1117dd 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -11,7 +11,7 @@ script('core', [ <form method="post" name="login"> <fieldset> <?php if (!empty($_['redirect_url'])) { - print_unescaped('<input type="hidden" name="redirect_url" value="' . OC_Util::sanitizeHTML($_['redirect_url']) . '" />'); + print_unescaped('<input type="hidden" name="redirect_url" value="' . OC_Util::sanitizeHTML($_['redirect_url']) . '">'); } ?> <?php if (isset($_['apacheauthfailed']) && ($_['apacheauthfailed'])): ?> <div class="warning"> @@ -24,19 +24,25 @@ script('core', [ <?php p($message); ?><br> </div> <?php endforeach; ?> - <p id="message" class="hidden"> + <?php if (isset($_['internalexception']) && ($_['internalexception'])): ?> + <div class="warning"> + <?php p($l->t('An internal error occured.')); ?><br> + <small><?php p($l->t('Please try again or contact your administrator.')); ?></small> + </div> + <?php endif; ?> + <div id="message" class="hidden"> <img class="float-spinner" alt="" - src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>" /> + src="<?php p(\OCP\Util::imagePath('core', 'loading-dark.gif'));?>"> <span id="messageText"></span> <!-- the following div ensures that the spinner is always inside the #message div --> <div style="clear: both;"></div> - </p> + </div> <p class="grouptop"> <input type="text" name="user" id="user" placeholder="<?php p($l->t('Username')); ?>" value="<?php p($_['username']); ?>" <?php p($_['user_autofocus'] ? 'autofocus' : ''); ?> - autocomplete="on" autocapitalize="off" autocorrect="off" required /> + autocomplete="on" autocapitalize="off" autocorrect="off" required> <label for="user" class="infield"><?php p($l->t('Username')); ?></label> <img class="svg" src="<?php print_unescaped(image_path('', 'actions/user.svg')); ?>" alt=""/> </p> @@ -45,7 +51,7 @@ script('core', [ <input type="password" name="password" id="password" value="" placeholder="<?php p($l->t('Password')); ?>" <?php p($_['user_autofocus'] ? '' : 'autofocus'); ?> - autocomplete="on" autocapitalize="off" autocorrect="off" required /> + autocomplete="on" autocapitalize="off" autocorrect="off" required> <label for="password" class="infield"><?php p($l->t('Password')); ?></label> <img class="svg" id="password-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""/> </p> @@ -56,12 +62,12 @@ script('core', [ </a> <?php endif; ?> <?php if ($_['rememberLoginAllowed'] === true) : ?> - <input type="checkbox" name="remember_login" value="1" id="remember_login" /> + <input type="checkbox" name="remember_login" value="1" id="remember_login"> <label for="remember_login"><?php p($l->t('remember')); ?></label> <?php endif; ?> <input type="hidden" name="timezone-offset" id="timezone-offset"/> <input type="hidden" name="timezone" id="timezone"/> - <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>" /> + <input type="hidden" name="requesttoken" value="<?php p($_['requesttoken']) ?>"> <input type="submit" id="submit" class="login primary" value="<?php p($l->t('Log in')); ?>" disabled="disabled"/> </fieldset> </form> diff --git a/core/templates/message.html b/core/templates/message.html index cd642231a9e..a98fd31a7fe 100644 --- a/core/templates/message.html +++ b/core/templates/message.html @@ -1,3 +1,3 @@ -<div id="{dialog_name}" title="{title} "><!-- the ' ' after {title} fixes ie8, see http://stackoverflow.com/a/5313137/828717 --> +<div id="{dialog_name}" title="{title} "><?php /* the ' ' after {title} fixes ie8, see http://stackoverflow.com/a/5313137/828717 */ ?> <p><span class="ui-icon ui-icon-{type}"></span>{message}</p> </div> diff --git a/core/templates/singleuser.user.php b/core/templates/singleuser.user.php index a5f56f6e2c4..bf076eb8d61 100644 --- a/core/templates/singleuser.user.php +++ b/core/templates/singleuser.user.php @@ -1,10 +1,10 @@ <ul> <li class='update'> - <?php p($l->t('This ownCloud instance is currently in single user mode.')) ?><br /><br /> - <?php p($l->t('This means only administrators can use the instance.')) ?><br /><br /> + <?php p($l->t('This ownCloud instance is currently in single user mode.')) ?><br><br> + <?php p($l->t('This means only administrators can use the instance.')) ?><br><br> <?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?> - <br /><br /> - <?php p($l->t('Thank you for your patience.')); ?><br /><br /> + <br><br> + <?php p($l->t('Thank you for your patience.')); ?><br><br> <a class="button" <?php print_unescaped(OC_User::getLogoutAttribute()); ?>><?php p($l->t('Log out')); ?></a> </li> </ul> diff --git a/core/templates/tags.html b/core/templates/tags.html index ae3d072b381..a7125027a26 100644 --- a/core/templates/tags.html +++ b/core/templates/tags.html @@ -2,13 +2,13 @@ <div class="content"> <div class="scrollarea"> <ul class="taglist"> - <li><input type="checkbox" name="ids[]" id="tag_{id}" value="{name}" /> + <li><input type="checkbox" name="ids[]" id="tag_{id}" value="{name}"> <label for="tag_{id}">{name}</label> </li> </ul> </div> <div class="bottombuttons"> - <input type="text" class="addinput" name="tag" placeholder="{addText}" /> + <input type="text" class="addinput" name="tag" placeholder="{addText}"> </div> </div> </div> diff --git a/core/templates/untrustedDomain.php b/core/templates/untrustedDomain.php index b661834318d..3197916cebb 100644 --- a/core/templates/untrustedDomain.php +++ b/core/templates/untrustedDomain.php @@ -2,13 +2,13 @@ <ul class="error-wide"> <li class='error'> - <?php p($l->t('You are accessing the server from an untrusted domain.')); ?><br/> + <?php p($l->t('You are accessing the server from an untrusted domain.')); ?><br> <p class='hint'> <?php p($l->t('Please contact your administrator. If you are an administrator of this instance, configure the "trusted_domain" setting in config/config.php. An example configuration is provided in config/config.sample.php.')); ?> - <br/> + <br> <?php p($l->t('Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain.')); ?> - <br/><br/> + <br><br> <p style="text-align:center;"> <a href="<?php print_unescaped(OC_Helper::makeURLAbsolute(\OCP\Util::linkToRoute('settings_admin'))); ?>?trustDomain=<?php p($_['domain']); ?>" class="button"> <?php p($l->t('Add "%s" as trusted domain', array($_['domain']))); ?> diff --git a/core/templates/update.user.php b/core/templates/update.user.php index be332f24f35..bc6936188ea 100644 --- a/core/templates/update.user.php +++ b/core/templates/update.user.php @@ -1,8 +1,8 @@ <ul> <li class='update'> - <?php p($l->t('This %s instance is currently in maintenance mode, which may take a while.', array($theme->getName()))) ?><br/><br/> - <?php p($l->t('This page will refresh itself when the %s instance is available again.', array($theme->getName()))) ?><br/><br/> - <?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?><br/><br/> - <?php p($l->t('Thank you for your patience.')); ?><br/><br/> + <?php p($l->t('This %s instance is currently in maintenance mode, which may take a while.', array($theme->getName()))) ?><br><br> + <?php p($l->t('This page will refresh itself when the %s instance is available again.', array($theme->getName()))) ?><br><br> + <?php p($l->t('Contact your system administrator if this message persists or appeared unexpectedly.')) ?><br><br> + <?php p($l->t('Thank you for your patience.')); ?><br><br> </li> </ul> diff --git a/core/user/usercontroller.php b/core/user/usercontroller.php index 2570e3b5b05..5664ca55603 100644 --- a/core/user/usercontroller.php +++ b/core/user/usercontroller.php @@ -1,10 +1,23 @@ <?php /** - * Copyright (c) 2014 Jörn Dreyer <jfd@owncloud.com> - * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * @author Lukas Reschke <lukas@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * */ namespace OC\Core\User; diff --git a/core/vendor/.gitignore b/core/vendor/.gitignore index 0d2ad861dee..14b80df5065 100644 --- a/core/vendor/.gitignore +++ b/core/vendor/.gitignore @@ -35,7 +35,7 @@ moment/scripts # jquery jquery/** !jquery/.bower.json -!jquery/jquery* +!jquery/jquery.* !jquery/MIT-LICENSE.txt # jquery-ui diff --git a/core/vendor/jquery-migrate/.bower.json b/core/vendor/jquery-migrate/.bower.json new file mode 100644 index 00000000000..35e7bf5f43f --- /dev/null +++ b/core/vendor/jquery-migrate/.bower.json @@ -0,0 +1,15 @@ +{ + "name": "jquery-migrate", + "version": "1.2.1", + "homepage": "https://github.com/appleboy/jquery-migrate", + "_release": "1.2.1", + "_resolution": { + "type": "version", + "tag": "1.2.1", + "commit": "65f37b60ae3d305efbe1e85909e14c60d524d12a" + }, + "_source": "git://github.com/appleboy/jquery-migrate.git", + "_target": "~1.2.1", + "_originalSource": "jquery-migrate", + "_direct": true +}
\ No newline at end of file diff --git a/core/vendor/jquery-migrate/component.json b/core/vendor/jquery-migrate/component.json new file mode 100644 index 00000000000..11efdc01650 --- /dev/null +++ b/core/vendor/jquery-migrate/component.json @@ -0,0 +1,4 @@ +{ + "name" : "jquery-migrate", + "version" : "1.2.1" +} diff --git a/core/vendor/jquery/jquery-migrate.js b/core/vendor/jquery-migrate/jquery-migrate.js index 942cb8b4d80..dbe8cbd4d8c 100644 --- a/core/vendor/jquery/jquery-migrate.js +++ b/core/vendor/jquery-migrate/jquery-migrate.js @@ -1,511 +1,521 @@ -/*! - * jQuery Migrate - v1.1.1 - 2013-02-16 - * https://github.com/jquery/jquery-migrate - * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT - */ -(function( jQuery, window, undefined ) { -// See http://bugs.jquery.com/ticket/13335 -// "use strict"; - - -var warnedAbout = {}; - -// List of warnings already given; public read only -jQuery.migrateWarnings = []; - -// Set to true to prevent console output; migrateWarnings still maintained -// jQuery.migrateMute = false; - -// Show a message on the console so devs know we're active -if ( !jQuery.migrateMute && window.console && console.log ) { - console.log("JQMIGRATE: Logging is active"); -} - -// Set to false to disable traces that appear with warnings -if ( jQuery.migrateTrace === undefined ) { - jQuery.migrateTrace = true; -} - -// Forget any warnings we've already given; public -jQuery.migrateReset = function() { - warnedAbout = {}; - jQuery.migrateWarnings.length = 0; -}; - -function migrateWarn( msg) { - if ( !warnedAbout[ msg ] ) { - warnedAbout[ msg ] = true; - jQuery.migrateWarnings.push( msg ); - if ( window.console && console.warn && !jQuery.migrateMute ) { - console.warn( "JQMIGRATE: " + msg ); - if ( jQuery.migrateTrace && console.trace ) { - console.trace(); - } - } - } -} - -function migrateWarnProp( obj, prop, value, msg ) { - if ( Object.defineProperty ) { - // On ES5 browsers (non-oldIE), warn if the code tries to get prop; - // allow property to be overwritten in case some other plugin wants it - try { - Object.defineProperty( obj, prop, { - configurable: true, - enumerable: true, - get: function() { - migrateWarn( msg ); - return value; - }, - set: function( newValue ) { - migrateWarn( msg ); - value = newValue; - } - }); - return; - } catch( err ) { - // IE8 is a dope about Object.defineProperty, can't warn there - } - } - - // Non-ES5 (or broken) browser; just set the property - jQuery._definePropertyBroken = true; - obj[ prop ] = value; -} - -if ( document.compatMode === "BackCompat" ) { - // jQuery has never supported or tested Quirks Mode - migrateWarn( "jQuery is not compatible with Quirks Mode" ); -} - - -var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn, - oldAttr = jQuery.attr, - valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get || - function() { return null; }, - valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set || - function() { return undefined; }, - rnoType = /^(?:input|button)$/i, - rnoAttrNodeType = /^[238]$/, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - ruseDefault = /^(?:checked|selected)$/i; - -// jQuery.attrFn -migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" ); - -jQuery.attr = function( elem, name, value, pass ) { - var lowerName = name.toLowerCase(), - nType = elem && elem.nodeType; - - if ( pass ) { - // Since pass is used internally, we only warn for new jQuery - // versions where there isn't a pass arg in the formal params - if ( oldAttr.length < 4 ) { - migrateWarn("jQuery.fn.attr( props, pass ) is deprecated"); - } - if ( elem && !rnoAttrNodeType.test( nType ) && - (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) { - return jQuery( elem )[ name ]( value ); - } - } - - // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking - // for disconnected elements we don't warn on $( "<button>", { type: "button" } ). - if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) { - migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8"); - } - - // Restore boolHook for boolean property/attribute synchronization - if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) { - jQuery.attrHooks[ lowerName ] = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - // Fall back to attribute presence where some booleans are not supported - var attrNode, - property = jQuery.prop( elem, name ); - return property === true || typeof property !== "boolean" && - ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? - - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } - }; - - // Warn only for attributes that can remain distinct from their properties post-1.9 - if ( ruseDefault.test( lowerName ) ) { - migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" ); - } - } - - return oldAttr.call( jQuery, elem, name, value ); -}; - -// attrHooks: value -jQuery.attrHooks.value = { - get: function( elem, name ) { - var nodeName = ( elem.nodeName || "" ).toLowerCase(); - if ( nodeName === "button" ) { - return valueAttrGet.apply( this, arguments ); - } - if ( nodeName !== "input" && nodeName !== "option" ) { - migrateWarn("jQuery.fn.attr('value') no longer gets properties"); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value ) { - var nodeName = ( elem.nodeName || "" ).toLowerCase(); - if ( nodeName === "button" ) { - return valueAttrSet.apply( this, arguments ); - } - if ( nodeName !== "input" && nodeName !== "option" ) { - migrateWarn("jQuery.fn.attr('value', val) no longer sets properties"); - } - // Does not return so that setAttribute is also used - elem.value = value; - } -}; - - -var matched, browser, - oldInit = jQuery.fn.init, - oldParseJSON = jQuery.parseJSON, - // Note this does NOT include the #9521 XSS fix from 1.7! - rquickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*|#([\w\-]*))$/; - -// $(html) "looks like html" rule change -jQuery.fn.init = function( selector, context, rootjQuery ) { - var match; - - if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) && - (match = rquickExpr.exec( selector )) && match[1] ) { - // This is an HTML string according to the "old" rules; is it still? - if ( selector.charAt( 0 ) !== "<" ) { - migrateWarn("$(html) HTML strings must start with '<' character"); - } - // Now process using loose rules; let pre-1.8 play too - if ( context && context.context ) { - // jQuery object as context; parseHTML expects a DOM object - context = context.context; - } - if ( jQuery.parseHTML ) { - return oldInit.call( this, jQuery.parseHTML( jQuery.trim(selector), context, true ), - context, rootjQuery ); - } - } - return oldInit.apply( this, arguments ); -}; -jQuery.fn.init.prototype = jQuery.fn; - -// Let $.parseJSON(falsy_value) return null -jQuery.parseJSON = function( json ) { - if ( !json && json !== null ) { - migrateWarn("jQuery.parseJSON requires a valid JSON string"); - return null; - } - return oldParseJSON.apply( this, arguments ); -}; - -jQuery.uaMatch = function( ua ) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; -}; - -// Don't clobber any existing jQuery.browser in case it's different -if ( !jQuery.browser ) { - matched = jQuery.uaMatch( navigator.userAgent ); - browser = {}; - - if ( matched.browser ) { - browser[ matched.browser ] = true; - browser.version = matched.version; - } - - // Chrome is Webkit, but Webkit is also Safari. - if ( browser.chrome ) { - browser.webkit = true; - } else if ( browser.webkit ) { - browser.safari = true; - } - - jQuery.browser = browser; -} - -// Warn if the code tries to get jQuery.browser -migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" ); - -jQuery.sub = function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - migrateWarn( "jQuery.sub() is deprecated" ); - return jQuerySub; -}; - - -// Ensure that $.ajax gets the new parseJSON defined in core.js -jQuery.ajaxSetup({ - converters: { - "text json": jQuery.parseJSON - } -}); - - -var oldFnData = jQuery.fn.data; - -jQuery.fn.data = function( name ) { - var ret, evt, - elem = this[0]; - - // Handles 1.7 which has this behavior and 1.8 which doesn't - if ( elem && name === "events" && arguments.length === 1 ) { - ret = jQuery.data( elem, name ); - evt = jQuery._data( elem, name ); - if ( ( ret === undefined || ret === evt ) && evt !== undefined ) { - migrateWarn("Use of jQuery.fn.data('events') is deprecated"); - return evt; - } - } - return oldFnData.apply( this, arguments ); -}; - - -var rscriptType = /\/(java|ecma)script/i, - oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack; - -jQuery.fn.andSelf = function() { - migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"); - return oldSelf.apply( this, arguments ); -}; - -// Since jQuery.clean is used internally on older versions, we only shim if it's missing -if ( !jQuery.clean ) { - jQuery.clean = function( elems, context, fragment, scripts ) { - // Set context per 1.8 logic - context = context || document; - context = !context.nodeType && context[0] || context; - context = context.ownerDocument || context; - - migrateWarn("jQuery.clean() is deprecated"); - - var i, elem, handleScript, jsTags, - ret = []; - - jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes ); - - // Complex logic lifted directly from jQuery 1.8 - if ( fragment ) { - // Special handling of each script element - handleScript = function( elem ) { - // Check if we consider it executable - if ( !elem.type || rscriptType.test( elem.type ) ) { - // Detach the script and store it in the scripts array (if provided) or the fragment - // Return truthy to indicate that it has been handled - return scripts ? - scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) : - fragment.appendChild( elem ); - } - }; - - for ( i = 0; (elem = ret[i]) != null; i++ ) { - // Check if we're done after handling an executable script - if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) { - // Append to fragment and handle embedded scripts - fragment.appendChild( elem ); - if ( typeof elem.getElementsByTagName !== "undefined" ) { - // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration - jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript ); - - // Splice the scripts into ret after their former ancestor and advance our index beyond them - ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) ); - i += jsTags.length; - } - } - } - } - - return ret; - }; -} - -var eventAdd = jQuery.event.add, - eventRemove = jQuery.event.remove, - eventTrigger = jQuery.event.trigger, - oldToggle = jQuery.fn.toggle, - oldLive = jQuery.fn.live, - oldDie = jQuery.fn.die, - ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess", - rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ), - rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, - hoverHack = function( events ) { - if ( typeof( events ) !== "string" || jQuery.event.special.hover ) { - return events; - } - if ( rhoverHack.test( events ) ) { - migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"); - } - return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); - }; - -// Event props removed in 1.9, put them back if needed; no practical way to warn them -if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) { - jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" ); -} - -// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7 -if ( jQuery.event.dispatch ) { - migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" ); -} - -// Support for 'hover' pseudo-event and ajax event warnings -jQuery.event.add = function( elem, types, handler, data, selector ){ - if ( elem !== document && rajaxEvent.test( types ) ) { - migrateWarn( "AJAX events should be attached to document: " + types ); - } - eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector ); -}; -jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){ - eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes ); -}; - -jQuery.fn.error = function() { - var args = Array.prototype.slice.call( arguments, 0); - migrateWarn("jQuery.fn.error() is deprecated"); - args.splice( 0, 0, "error" ); - if ( arguments.length ) { - return this.bind.apply( this, args ); - } - // error event should not bubble to window, although it does pre-1.7 - this.triggerHandler.apply( this, args ); - return this; -}; - -jQuery.fn.toggle = function( fn, fn2 ) { - - // Don't mess with animation or css toggles - if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) { - return oldToggle.apply( this, arguments ); - } - migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated"); - - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); -}; - -jQuery.fn.live = function( types, data, fn ) { - migrateWarn("jQuery.fn.live() is deprecated"); - if ( oldLive ) { - return oldLive.apply( this, arguments ); - } - jQuery( this.context ).on( types, this.selector, data, fn ); - return this; -}; - -jQuery.fn.die = function( types, fn ) { - migrateWarn("jQuery.fn.die() is deprecated"); - if ( oldDie ) { - return oldDie.apply( this, arguments ); - } - jQuery( this.context ).off( types, this.selector || "**", fn ); - return this; -}; - -// Turn global events into document-triggered events -jQuery.event.trigger = function( event, data, elem, onlyHandlers ){ - if ( !elem && !rajaxEvent.test( event ) ) { - migrateWarn( "Global events are undocumented and deprecated" ); - } - return eventTrigger.call( this, event, data, elem || document, onlyHandlers ); -}; -jQuery.each( ajaxEvents.split("|"), - function( _, name ) { - jQuery.event.special[ name ] = { - setup: function() { - var elem = this; - - // The document needs no shimming; must be !== for oldIE - if ( elem !== document ) { - jQuery.event.add( document, name + "." + jQuery.guid, function() { - jQuery.event.trigger( name, null, elem, true ); - }); - jQuery._data( this, name, jQuery.guid++ ); - } - return false; - }, - teardown: function() { - if ( this !== document ) { - jQuery.event.remove( document, name + "." + jQuery._data( this, name ) ); - } - return false; - } - }; - } -); - - -})( jQuery, window ); +/*!
+ * jQuery Migrate - v1.2.1 - 2013-05-08
+ * https://github.com/jquery/jquery-migrate
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
+ */
+(function( jQuery, window, undefined ) {
+// See http://bugs.jquery.com/ticket/13335
+// "use strict";
+
+
+var warnedAbout = {};
+
+// List of warnings already given; public read only
+jQuery.migrateWarnings = [];
+
+// Set to true to prevent console output; migrateWarnings still maintained
+// jQuery.migrateMute = false;
+
+// Show a message on the console so devs know we're active
+if ( !jQuery.migrateMute && window.console && window.console.log ) {
+ window.console.log("JQMIGRATE: Logging is active");
+}
+
+// Set to false to disable traces that appear with warnings
+if ( jQuery.migrateTrace === undefined ) {
+ jQuery.migrateTrace = true;
+}
+
+// Forget any warnings we've already given; public
+jQuery.migrateReset = function() {
+ warnedAbout = {};
+ jQuery.migrateWarnings.length = 0;
+};
+
+function migrateWarn( msg) {
+ var console = window.console;
+ if ( !warnedAbout[ msg ] ) {
+ warnedAbout[ msg ] = true;
+ jQuery.migrateWarnings.push( msg );
+ if ( console && console.warn && !jQuery.migrateMute ) {
+ console.warn( "JQMIGRATE: " + msg );
+ if ( jQuery.migrateTrace && console.trace ) {
+ console.trace();
+ }
+ }
+ }
+}
+
+function migrateWarnProp( obj, prop, value, msg ) {
+ if ( Object.defineProperty ) {
+ // On ES5 browsers (non-oldIE), warn if the code tries to get prop;
+ // allow property to be overwritten in case some other plugin wants it
+ try {
+ Object.defineProperty( obj, prop, {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ migrateWarn( msg );
+ return value;
+ },
+ set: function( newValue ) {
+ migrateWarn( msg );
+ value = newValue;
+ }
+ });
+ return;
+ } catch( err ) {
+ // IE8 is a dope about Object.defineProperty, can't warn there
+ }
+ }
+
+ // Non-ES5 (or broken) browser; just set the property
+ jQuery._definePropertyBroken = true;
+ obj[ prop ] = value;
+}
+
+if ( document.compatMode === "BackCompat" ) {
+ // jQuery has never supported or tested Quirks Mode
+ migrateWarn( "jQuery is not compatible with Quirks Mode" );
+}
+
+
+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
+ oldAttr = jQuery.attr,
+ valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
+ function() { return null; },
+ valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
+ function() { return undefined; },
+ rnoType = /^(?:input|button)$/i,
+ rnoAttrNodeType = /^[238]$/,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ ruseDefault = /^(?:checked|selected)$/i;
+
+// jQuery.attrFn
+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
+
+jQuery.attr = function( elem, name, value, pass ) {
+ var lowerName = name.toLowerCase(),
+ nType = elem && elem.nodeType;
+
+ if ( pass ) {
+ // Since pass is used internally, we only warn for new jQuery
+ // versions where there isn't a pass arg in the formal params
+ if ( oldAttr.length < 4 ) {
+ migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+ }
+ if ( elem && !rnoAttrNodeType.test( nType ) &&
+ (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
+ return jQuery( elem )[ name ]( value );
+ }
+ }
+
+ // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
+ // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
+ if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
+ migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
+ }
+
+ // Restore boolHook for boolean property/attribute synchronization
+ if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
+ jQuery.attrHooks[ lowerName ] = {
+ get: function( elem, name ) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop( elem, name );
+ return property === true || typeof property !== "boolean" &&
+ ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function( elem, value, name ) {
+ var propName;
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[ name ] || name;
+ if ( propName in elem ) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[ propName ] = true;
+ }
+
+ elem.setAttribute( name, name.toLowerCase() );
+ }
+ return name;
+ }
+ };
+
+ // Warn only for attributes that can remain distinct from their properties post-1.9
+ if ( ruseDefault.test( lowerName ) ) {
+ migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" );
+ }
+ }
+
+ return oldAttr.call( jQuery, elem, name, value );
+};
+
+// attrHooks: value
+jQuery.attrHooks.value = {
+ get: function( elem, name ) {
+ var nodeName = ( elem.nodeName || "" ).toLowerCase();
+ if ( nodeName === "button" ) {
+ return valueAttrGet.apply( this, arguments );
+ }
+ if ( nodeName !== "input" && nodeName !== "option" ) {
+ migrateWarn("jQuery.fn.attr('value') no longer gets properties");
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function( elem, value ) {
+ var nodeName = ( elem.nodeName || "" ).toLowerCase();
+ if ( nodeName === "button" ) {
+ return valueAttrSet.apply( this, arguments );
+ }
+ if ( nodeName !== "input" && nodeName !== "option" ) {
+ migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+};
+
+
+var matched, browser,
+ oldInit = jQuery.fn.init,
+ oldParseJSON = jQuery.parseJSON,
+ // Note: XSS check is done below after string is trimmed
+ rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
+
+// $(html) "looks like html" rule change
+jQuery.fn.init = function( selector, context, rootjQuery ) {
+ var match;
+
+ if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) &&
+ (match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
+ // This is an HTML string according to the "old" rules; is it still?
+ if ( selector.charAt( 0 ) !== "<" ) {
+ migrateWarn("$(html) HTML strings must start with '<' character");
+ }
+ if ( match[ 3 ] ) {
+ migrateWarn("$(html) HTML text after last tag is ignored");
+ }
+ // Consistently reject any HTML-like string starting with a hash (#9521)
+ // Note that this may break jQuery 1.6.x code that otherwise would work.
+ if ( match[ 0 ].charAt( 0 ) === "#" ) {
+ migrateWarn("HTML string cannot start with a '#' character");
+ jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
+ }
+ // Now process using loose rules; let pre-1.8 play too
+ if ( context && context.context ) {
+ // jQuery object as context; parseHTML expects a DOM object
+ context = context.context;
+ }
+ if ( jQuery.parseHTML ) {
+ return oldInit.call( this, jQuery.parseHTML( match[ 2 ], context, true ),
+ context, rootjQuery );
+ }
+ }
+ return oldInit.apply( this, arguments );
+};
+jQuery.fn.init.prototype = jQuery.fn;
+
+// Let $.parseJSON(falsy_value) return null
+jQuery.parseJSON = function( json ) {
+ if ( !json && json !== null ) {
+ migrateWarn("jQuery.parseJSON requires a valid JSON string");
+ return null;
+ }
+ return oldParseJSON.apply( this, arguments );
+};
+
+jQuery.uaMatch = function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+ /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+ /(msie) ([\w.]+)/.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+ [];
+
+ return {
+ browser: match[ 1 ] || "",
+ version: match[ 2 ] || "0"
+ };
+};
+
+// Don't clobber any existing jQuery.browser in case it's different
+if ( !jQuery.browser ) {
+ matched = jQuery.uaMatch( navigator.userAgent );
+ browser = {};
+
+ if ( matched.browser ) {
+ browser[ matched.browser ] = true;
+ browser.version = matched.version;
+ }
+
+ // Chrome is Webkit, but Webkit is also Safari.
+ if ( browser.chrome ) {
+ browser.webkit = true;
+ } else if ( browser.webkit ) {
+ browser.safari = true;
+ }
+
+ jQuery.browser = browser;
+}
+
+// Warn if the code tries to get jQuery.browser
+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
+
+jQuery.sub = function() {
+ function jQuerySub( selector, context ) {
+ return new jQuerySub.fn.init( selector, context );
+ }
+ jQuery.extend( true, jQuerySub, this );
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init( selector, context ) {
+ if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+ context = jQuerySub( context );
+ }
+
+ return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ migrateWarn( "jQuery.sub() is deprecated" );
+ return jQuerySub;
+};
+
+
+// Ensure that $.ajax gets the new parseJSON defined in core.js
+jQuery.ajaxSetup({
+ converters: {
+ "text json": jQuery.parseJSON
+ }
+});
+
+
+var oldFnData = jQuery.fn.data;
+
+jQuery.fn.data = function( name ) {
+ var ret, evt,
+ elem = this[0];
+
+ // Handles 1.7 which has this behavior and 1.8 which doesn't
+ if ( elem && name === "events" && arguments.length === 1 ) {
+ ret = jQuery.data( elem, name );
+ evt = jQuery._data( elem, name );
+ if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
+ migrateWarn("Use of jQuery.fn.data('events') is deprecated");
+ return evt;
+ }
+ }
+ return oldFnData.apply( this, arguments );
+};
+
+
+var rscriptType = /\/(java|ecma)script/i,
+ oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
+
+jQuery.fn.andSelf = function() {
+ migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
+ return oldSelf.apply( this, arguments );
+};
+
+// Since jQuery.clean is used internally on older versions, we only shim if it's missing
+if ( !jQuery.clean ) {
+ jQuery.clean = function( elems, context, fragment, scripts ) {
+ // Set context per 1.8 logic
+ context = context || document;
+ context = !context.nodeType && context[0] || context;
+ context = context.ownerDocument || context;
+
+ migrateWarn("jQuery.clean() is deprecated");
+
+ var i, elem, handleScript, jsTags,
+ ret = [];
+
+ jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
+
+ // Complex logic lifted directly from jQuery 1.8
+ if ( fragment ) {
+ // Special handling of each script element
+ handleScript = function( elem ) {
+ // Check if we consider it executable
+ if ( !elem.type || rscriptType.test( elem.type ) ) {
+ // Detach the script and store it in the scripts array (if provided) or the fragment
+ // Return truthy to indicate that it has been handled
+ return scripts ?
+ scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+ fragment.appendChild( elem );
+ }
+ };
+
+ for ( i = 0; (elem = ret[i]) != null; i++ ) {
+ // Check if we're done after handling an executable script
+ if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+ // Append to fragment and handle embedded scripts
+ fragment.appendChild( elem );
+ if ( typeof elem.getElementsByTagName !== "undefined" ) {
+ // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+ jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+ // Splice the scripts into ret after their former ancestor and advance our index beyond them
+ ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+ i += jsTags.length;
+ }
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var eventAdd = jQuery.event.add,
+ eventRemove = jQuery.event.remove,
+ eventTrigger = jQuery.event.trigger,
+ oldToggle = jQuery.fn.toggle,
+ oldLive = jQuery.fn.live,
+ oldDie = jQuery.fn.die,
+ ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
+ rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
+ rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+ hoverHack = function( events ) {
+ if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
+ return events;
+ }
+ if ( rhoverHack.test( events ) ) {
+ migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
+ }
+ return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+ };
+
+// Event props removed in 1.9, put them back if needed; no practical way to warn them
+if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
+ jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
+}
+
+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
+if ( jQuery.event.dispatch ) {
+ migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+}
+
+// Support for 'hover' pseudo-event and ajax event warnings
+jQuery.event.add = function( elem, types, handler, data, selector ){
+ if ( elem !== document && rajaxEvent.test( types ) ) {
+ migrateWarn( "AJAX events should be attached to document: " + types );
+ }
+ eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
+};
+jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
+ eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
+};
+
+jQuery.fn.error = function() {
+ var args = Array.prototype.slice.call( arguments, 0);
+ migrateWarn("jQuery.fn.error() is deprecated");
+ args.splice( 0, 0, "error" );
+ if ( arguments.length ) {
+ return this.bind.apply( this, args );
+ }
+ // error event should not bubble to window, although it does pre-1.7
+ this.triggerHandler.apply( this, args );
+ return this;
+};
+
+jQuery.fn.toggle = function( fn, fn2 ) {
+
+ // Don't mess with animation or css toggles
+ if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
+ return oldToggle.apply( this, arguments );
+ }
+ migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
+
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while ( i < args.length ) {
+ args[ i++ ].guid = guid;
+ }
+
+ return this.click( toggler );
+};
+
+jQuery.fn.live = function( types, data, fn ) {
+ migrateWarn("jQuery.fn.live() is deprecated");
+ if ( oldLive ) {
+ return oldLive.apply( this, arguments );
+ }
+ jQuery( this.context ).on( types, this.selector, data, fn );
+ return this;
+};
+
+jQuery.fn.die = function( types, fn ) {
+ migrateWarn("jQuery.fn.die() is deprecated");
+ if ( oldDie ) {
+ return oldDie.apply( this, arguments );
+ }
+ jQuery( this.context ).off( types, this.selector || "**", fn );
+ return this;
+};
+
+// Turn global events into document-triggered events
+jQuery.event.trigger = function( event, data, elem, onlyHandlers ){
+ if ( !elem && !rajaxEvent.test( event ) ) {
+ migrateWarn( "Global events are undocumented and deprecated" );
+ }
+ return eventTrigger.call( this, event, data, elem || document, onlyHandlers );
+};
+jQuery.each( ajaxEvents.split("|"),
+ function( _, name ) {
+ jQuery.event.special[ name ] = {
+ setup: function() {
+ var elem = this;
+
+ // The document needs no shimming; must be !== for oldIE
+ if ( elem !== document ) {
+ jQuery.event.add( document, name + "." + jQuery.guid, function() {
+ jQuery.event.trigger( name, null, elem, true );
+ });
+ jQuery._data( this, name, jQuery.guid++ );
+ }
+ return false;
+ },
+ teardown: function() {
+ if ( this !== document ) {
+ jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
+ }
+ return false;
+ }
+ };
+ }
+);
+
+
+})( jQuery, window );
diff --git a/core/vendor/jquery-migrate/jquery-migrate.min.js b/core/vendor/jquery-migrate/jquery-migrate.min.js new file mode 100644 index 00000000000..8b7ec47a2d6 --- /dev/null +++ b/core/vendor/jquery-migrate/jquery-migrate.min.js @@ -0,0 +1,2 @@ +/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
+jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window);
\ No newline at end of file diff --git a/core/vendor/jquery/jquery-migrate.min.js b/core/vendor/jquery/jquery-migrate.min.js deleted file mode 100644 index eb3ecb1b3dd..00000000000 --- a/core/vendor/jquery/jquery-migrate.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! jQuery Migrate v1.1.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */ -jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){o[n]||(o[n]=!0,e.migrateWarnings.push(n),t.console&&console.warn&&!e.migrateMute&&(console.warn("JQMIGRATE: "+n),e.migrateTrace&&console.trace&&console.trace()))}function a(t,a,o,i){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(i),o},set:function(e){r(i),o=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=o}var o={};e.migrateWarnings=[],!e.migrateMute&&t.console&&console.log&&console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){o={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var i=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",i||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,o,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(i?a in i:e.isFunction(e.fn[a])))?e(t)[a](o):("type"===a&&o!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,o=e.prop(t,r);return o===!0||"boolean"!=typeof o&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,o))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^(?:[^<]*(<[\w\W]+>)[^>]*|#([\w\-]*))$/;e.fn.init=function(t,n,a){var o;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(o=y.exec(t))&&o[1]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(e.trim(t),n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,o,i=this[0];return!i||"events"!==t||1!==arguments.length||(a=e.data(i,t),o=e._data(i,t),a!==n&&a!==o||o===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),o)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,o,i){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),o)for(c=function(e){return!e.type||j.test(e.type)?i?i.push(e.parentNode?e.parentNode.removeChild(e):e):o.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(o.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,C=e.fn.live,S=e.fn.die,T="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",M=RegExp("\\b(?:"+T+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,o){e!==document&&M.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,o)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,o=t.guid||e.guid++,i=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%i;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=o;a.length>i;)a[i++].guid=o;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),C?C.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),S?S.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||M.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(T.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window); -//@ sourceMappingURL=dist/jquery-migrate.min.map
\ No newline at end of file |