diff options
438 files changed, 8661 insertions, 5051 deletions
diff --git a/apps/encryption/appinfo/application.php b/apps/encryption/appinfo/application.php index 75107b2723c..515a408fa2c 100644 --- a/apps/encryption/appinfo/application.php +++ b/apps/encryption/appinfo/application.php @@ -30,6 +30,7 @@ use OCA\Encryption\Controller\RecoveryController; use OCA\Encryption\Controller\SettingsController; use OCA\Encryption\Controller\StatusController; use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\Crypto\DecryptAll; use OCA\Encryption\Crypto\EncryptAll; use OCA\Encryption\Crypto\Encryption; use OCA\Encryption\HookManager; @@ -113,7 +114,9 @@ class Application extends \OCP\AppFramework\App { $container->query('Crypt'), $container->query('KeyManager'), $container->query('Util'), + $container->query('Session'), $container->query('EncryptAll'), + $container->query('DecryptAll'), $container->getServer()->getLogger(), $container->getServer()->getL10N($container->getAppName()) ); @@ -242,6 +245,18 @@ class Application extends \OCP\AppFramework\App { } ); + $container->registerService('DecryptAll', + function (IAppContainer $c) { + return new DecryptAll( + $c->query('Util'), + $c->query('KeyManager'), + $c->query('Crypt'), + $c->query('Session'), + new QuestionHelper() + ); + } + ); + } public function registerSettings() { diff --git a/apps/encryption/lib/crypto/decryptall.php b/apps/encryption/lib/crypto/decryptall.php new file mode 100644 index 00000000000..599cd82aa4d --- /dev/null +++ b/apps/encryption/lib/crypto/decryptall.php @@ -0,0 +1,143 @@ +<?php +/** + * @author Björn Schießle <schiessle@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 OCA\Encryption\Crypto; + + +use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; +use OCA\Encryption\Util; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; +use Symfony\Component\Console\Question\Question; + +class DecryptAll { + + /** @var Util */ + protected $util; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** @var Crypt */ + protected $crypt; + + /** @var KeyManager */ + protected $keyManager; + + /** @var Session */ + protected $session; + + /** + * @param Util $util + * @param KeyManager $keyManager + * @param Crypt $crypt + * @param Session $session + * @param QuestionHelper $questionHelper + */ + public function __construct( + Util $util, + KeyManager $keyManager, + Crypt $crypt, + Session $session, + QuestionHelper $questionHelper + ) { + $this->util = $util; + $this->keyManager = $keyManager; + $this->crypt = $crypt; + $this->session = $session; + $this->questionHelper = $questionHelper; + } + + /** + * prepare encryption module to decrypt all files + * + * @param InputInterface $input + * @param OutputInterface $output + * @param $user + * @return bool + */ + public function prepare(InputInterface $input, OutputInterface $output, $user) { + + $question = new Question('Please enter the recovery key password: '); + $recoveryKeyId = $this->keyManager->getRecoveryKeyId(); + + if (!empty($user)) { + $questionUseLoginPassword = new ConfirmationQuestion( + 'Do you want to use the users login password to decrypt all files? (y/n) ', + false + ); + $useLoginPassword = $this->questionHelper->ask($input, $output, $questionUseLoginPassword); + if ($useLoginPassword) { + $question = new Question('Please enter the users login password: '); + } else if ($this->util->isRecoveryEnabledForUser($user) === false) { + $output->writeln('No recovery key available for user ' . $user); + return false; + } else { + $user = $recoveryKeyId; + } + } else { + $user = $recoveryKeyId; + } + + $question->setHidden(true); + $question->setHiddenFallback(false); + $password = $this->questionHelper->ask($input, $output, $question); + $privateKey = $this->getPrivateKey($user, $password); + if ($privateKey !== false) { + $this->updateSession($user, $privateKey); + return true; + } else { + $output->writeln('Could not decrypt private key, maybe you entered the wrong password?'); + } + + + return false; + } + + /** + * get the private key which will be used to decrypt all files + * + * @param string $user + * @param string $password + * @return bool|string + * @throws \OCA\Encryption\Exceptions\PrivateKeyMissingException + */ + protected function getPrivateKey($user, $password) { + $recoveryKeyId = $this->keyManager->getRecoveryKeyId(); + if ($user === $recoveryKeyId) { + $recoveryKey = $this->keyManager->getSystemPrivateKey($recoveryKeyId); + $privateKey = $this->crypt->decryptPrivateKey($recoveryKey, $password); + } else { + $userKey = $this->keyManager->getPrivateKey($user); + $privateKey = $this->crypt->decryptPrivateKey($userKey, $password, $user); + } + + return $privateKey; + } + + protected function updateSession($user, $privateKey) { + $this->session->prepareDecryptAll($user, $privateKey); + } +} diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php index c62afac83c1..fde4a2c4a9c 100644 --- a/apps/encryption/lib/crypto/encryption.php +++ b/apps/encryption/lib/crypto/encryption.php @@ -30,6 +30,7 @@ namespace OCA\Encryption\Crypto; use OC\Encryption\Exceptions\DecryptionFailedException; use OCA\Encryption\Exceptions\PublicKeyMissingException; +use OCA\Encryption\Session; use OCA\Encryption\Util; use OCP\Encryption\IEncryptionModule; use OCA\Encryption\KeyManager; @@ -75,6 +76,9 @@ class Encryption implements IEncryptionModule { /** @var Util */ private $util; + /** @var Session */ + private $session; + /** @var ILogger */ private $logger; @@ -87,25 +91,34 @@ class Encryption implements IEncryptionModule { /** @var bool */ private $useMasterPassword; + /** @var DecryptAll */ + private $decryptAll; + /** * * @param Crypt $crypt * @param KeyManager $keyManager * @param Util $util + * @param Session $session * @param EncryptAll $encryptAll + * @param DecryptAll $decryptAll * @param ILogger $logger * @param IL10N $il10n */ public function __construct(Crypt $crypt, KeyManager $keyManager, Util $util, + Session $session, EncryptAll $encryptAll, + DecryptAll $decryptAll, ILogger $logger, IL10N $il10n) { $this->crypt = $crypt; $this->keyManager = $keyManager; $this->util = $util; + $this->session = $session; $this->encryptAll = $encryptAll; + $this->decryptAll = $decryptAll; $this->logger = $logger; $this->l = $il10n; $this->useMasterPassword = $util->isMasterKeyEnabled(); @@ -150,7 +163,15 @@ class Encryption implements IEncryptionModule { $this->isWriteOperation = false; $this->writeCache = ''; - $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user); + if ($this->session->decryptAllModeActivated()) { + $encryptedFileKey = $this->keyManager->getEncryptedFileKey($this->path); + $shareKey = $this->keyManager->getShareKey($this->path, $this->session->getDecryptAllUid()); + $this->fileKey = $this->crypt->multiKeyDecrypt($encryptedFileKey, + $shareKey, + $this->session->getDecryptAllKey()); + } else { + $this->fileKey = $this->keyManager->getFileKey($this->path, $this->user); + } if ( $mode === 'w' @@ -427,6 +448,19 @@ class Encryption implements IEncryptionModule { } /** + * prepare module to perform decrypt all operation + * + * @param InputInterface $input + * @param OutputInterface $output + * @param string $user + * @return bool + */ + public function prepareDecryptAll(InputInterface $input, OutputInterface $output, $user = '') { + return $this->decryptAll->prepare($input, $output, $user); + } + + + /** * @param string $path * @return string */ diff --git a/apps/encryption/lib/session.php b/apps/encryption/lib/session.php index c3759c3fc56..1d0c3711487 100644 --- a/apps/encryption/lib/session.php +++ b/apps/encryption/lib/session.php @@ -25,6 +25,7 @@ namespace OCA\Encryption; +use OCA\Encryption\Exceptions\PrivateKeyMissingException; use \OCP\ISession; class Session { @@ -106,6 +107,61 @@ class Session { $this->session->set('privateKey', $key); } + /** + * store data needed for the decrypt all operation in the session + * + * @param string $user + * @param string $key + */ + public function prepareDecryptAll($user, $key) { + $this->session->set('decryptAll', true); + $this->session->set('decryptAllKey', $key); + $this->session->set('decryptAllUid', $user); + } + + /** + * check if we are in decrypt all mode + * + * @return bool + */ + public function decryptAllModeActivated() { + $decryptAll = $this->session->get('decryptAll'); + return ($decryptAll === true); + } + + /** + * get uid used for decrypt all operation + * + * @return string + * @throws \Exception + */ + public function getDecryptAllUid() { + $uid = $this->session->get('decryptAllUid'); + if (is_null($uid) && $this->decryptAllModeActivated()) { + throw new \Exception('No uid found while in decrypt all mode'); + } elseif (is_null($uid)) { + throw new \Exception('Please activate decrypt all mode first'); + } + + return $uid; + } + + /** + * get private key for decrypt all operation + * + * @return string + * @throws PrivateKeyMissingException + */ + public function getDecryptAllKey() { + $privateKey = $this->session->get('decryptAllKey'); + if (is_null($privateKey) && $this->decryptAllModeActivated()) { + throw new PrivateKeyMissingException('No private key found while in decrypt all mode'); + } elseif (is_null($privateKey)) { + throw new PrivateKeyMissingException('Please activate decrypt all mode first'); + } + + return $privateKey; + } /** * remove keys from session @@ -114,7 +170,9 @@ class Session { $this->session->remove('publicSharePrivateKey'); $this->session->remove('privateKey'); $this->session->remove('encryptionInitialized'); - + $this->session->remove('decryptAll'); + $this->session->remove('decryptAllKey'); + $this->session->remove('decryptAllUid'); } } diff --git a/apps/encryption/tests/lib/SessionTest.php b/apps/encryption/tests/lib/SessionTest.php index e036c439939..0fa48666d70 100644 --- a/apps/encryption/tests/lib/SessionTest.php +++ b/apps/encryption/tests/lib/SessionTest.php @@ -56,6 +56,7 @@ class SessionTest extends TestCase { * @depends testSetAndGetPrivateKey */ public function testIsPrivateKeySet() { + $this->instance->setPrivateKey('dummyPrivateKey'); $this->assertTrue($this->instance->isPrivateKeySet()); unset(self::$tempStorage['privateKey']); @@ -65,6 +66,51 @@ class SessionTest extends TestCase { self::$tempStorage['privateKey'] = 'dummyPrivateKey'; } + public function testDecryptAllModeActivated() { + $this->instance->prepareDecryptAll('user1', 'usersKey'); + $this->assertTrue($this->instance->decryptAllModeActivated()); + $this->assertSame('user1', $this->instance->getDecryptAllUid()); + $this->assertSame('usersKey', $this->instance->getDecryptAllKey()); + } + + public function testDecryptAllModeDeactivated() { + $this->assertFalse($this->instance->decryptAllModeActivated()); + } + + /** + * @expectedException \Exception + * @expectExceptionMessage 'Please activate decrypt all mode first' + */ + public function testGetDecryptAllUidException() { + $this->instance->getDecryptAllUid(); + } + + /** + * @expectedException \Exception + * @expectExceptionMessage 'No uid found while in decrypt all mode' + */ + public function testGetDecryptAllUidException2() { + $this->instance->prepareDecryptAll(null, 'key'); + $this->instance->getDecryptAllUid(); + } + + /** + * @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException + * @expectExceptionMessage 'Please activate decrypt all mode first' + */ + public function testGetDecryptAllKeyException() { + $this->instance->getDecryptAllKey(); + } + + /** + * @expectedException \OCA\Encryption\Exceptions\PrivateKeyMissingException + * @expectExceptionMessage 'No key found while in decrypt all mode' + */ + public function testGetDecryptAllKeyException2() { + $this->instance->prepareDecryptAll('user', null); + $this->instance->getDecryptAllKey(); + } + /** * */ @@ -112,6 +158,10 @@ class SessionTest extends TestCase { * */ public function testClearWillRemoveValues() { + $this->instance->setPrivateKey('privateKey'); + $this->instance->setStatus('initStatus'); + $this->instance->prepareDecryptAll('user', 'key'); + $this->assertNotEmpty(self::$tempStorage); $this->instance->clear(); $this->assertEmpty(self::$tempStorage); } @@ -138,4 +188,9 @@ class SessionTest extends TestCase { $this->instance = new Session($this->sessionMock); } + + protected function tearDown() { + self::$tempStorage = []; + parent::tearDown(); + } } diff --git a/apps/encryption/tests/lib/crypto/decryptalltest.php b/apps/encryption/tests/lib/crypto/decryptalltest.php new file mode 100644 index 00000000000..d6a52fe97c0 --- /dev/null +++ b/apps/encryption/tests/lib/crypto/decryptalltest.php @@ -0,0 +1,125 @@ +<?php +/** + * @author Björn Schießle <schiessle@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 OCA\Encryption\Tests\lib\Crypto; + + +use OCA\Encryption\Crypto\Crypt; +use OCA\Encryption\Crypto\DecryptAll; +use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; +use OCA\Encryption\Util; +use Symfony\Component\Console\Helper\QuestionHelper; +use Test\TestCase; + +class DecryptAllTest extends TestCase { + + /** @var DecryptAll */ + protected $instance; + + /** @var Util | \PHPUnit_Framework_MockObject_MockObject */ + protected $util; + + /** @var KeyManager | \PHPUnit_Framework_MockObject_MockObject */ + protected $keyManager; + + /** @var Crypt | \PHPUnit_Framework_MockObject_MockObject */ + protected $crypt; + + /** @var Session | \PHPUnit_Framework_MockObject_MockObject */ + protected $session; + + /** @var QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */ + protected $questionHelper; + + public function setUp() { + parent::setUp(); + + $this->util = $this->getMockBuilder('OCA\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->keyManager = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->disableOriginalConstructor()->getMock(); + $this->crypt = $this->getMockBuilder('OCA\Encryption\Crypto\Crypt') + ->disableOriginalConstructor()->getMock(); + $this->session = $this->getMockBuilder('OCA\Encryption\Session') + ->disableOriginalConstructor()->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor()->getMock(); + + $this->instance = new DecryptAll( + $this->util, + $this->keyManager, + $this->crypt, + $this->session, + $this->questionHelper + ); + } + + public function testUpdateSession() { + $this->session->expects($this->once())->method('prepareDecryptAll') + ->with('user1', 'key1'); + + $this->invokePrivate($this->instance, 'updateSession', ['user1', 'key1']); + } + + /** + * @dataProvider dataTestGetPrivateKey + * + * @param string $user + * @param string $recoveryKeyId + */ + public function testGetPrivateKey($user, $recoveryKeyId) { + $password = 'passwd'; + $recoveryKey = 'recoveryKey'; + $userKey = 'userKey'; + $unencryptedKey = 'unencryptedKey'; + + $this->keyManager->expects($this->any())->method('getRecoveryKeyId') + ->willReturn($recoveryKeyId); + + if ($user === $recoveryKeyId) { + $this->keyManager->expects($this->once())->method('getSystemPrivateKey') + ->with($recoveryKeyId)->willReturn($recoveryKey); + $this->keyManager->expects($this->never())->method('getPrivateKey'); + $this->crypt->expects($this->once())->method('decryptPrivateKey') + ->with($recoveryKey, $password)->willReturn($unencryptedKey); + } else { + $this->keyManager->expects($this->never())->method('getSystemPrivateKey'); + $this->keyManager->expects($this->once())->method('getPrivateKey') + ->with($user)->willReturn($userKey); + $this->crypt->expects($this->once())->method('decryptPrivateKey') + ->with($userKey, $password, $user)->willReturn($unencryptedKey); + } + + $this->assertSame($unencryptedKey, + $this->invokePrivate($this->instance, 'getPrivateKey', [$user, $password]) + ); + } + + public function dataTestGetPrivateKey() { + return [ + ['user1', 'recoveryKey'], + ['recoveryKeyId', 'recoveryKeyId'] + ]; + } + +} diff --git a/apps/encryption/tests/lib/crypto/encryptionTest.php b/apps/encryption/tests/lib/crypto/encryptionTest.php index f58aa5d3ccb..9e0cb2f09d1 100644 --- a/apps/encryption/tests/lib/crypto/encryptionTest.php +++ b/apps/encryption/tests/lib/crypto/encryptionTest.php @@ -40,6 +40,12 @@ class EncryptionTest extends TestCase { private $encryptAllMock; /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $decryptAllMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + private $sessionMock; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ private $cryptMock; /** @var \PHPUnit_Framework_MockObject_MockObject */ @@ -63,9 +69,15 @@ class EncryptionTest extends TestCase { $this->keyManagerMock = $this->getMockBuilder('OCA\Encryption\KeyManager') ->disableOriginalConstructor() ->getMock(); + $this->sessionMock = $this->getMockBuilder('OCA\Encryption\Session') + ->disableOriginalConstructor() + ->getMock(); $this->encryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\EncryptAll') ->disableOriginalConstructor() ->getMock(); + $this->decryptAllMock = $this->getMockBuilder('OCA\Encryption\Crypto\DecryptAll') + ->disableOriginalConstructor() + ->getMock(); $this->loggerMock = $this->getMockBuilder('OCP\ILogger') ->disableOriginalConstructor() ->getMock(); @@ -81,7 +93,9 @@ class EncryptionTest extends TestCase { $this->cryptMock, $this->keyManagerMock, $this->utilMock, + $this->sessionMock, $this->encryptAllMock, + $this->decryptAllMock, $this->loggerMock, $this->l10nMock ); @@ -170,6 +184,16 @@ class EncryptionTest extends TestCase { */ public function testBegin($mode, $header, $legacyCipher, $defaultCipher, $fileKey, $expected) { + $this->sessionMock->expects($this->once()) + ->method('decryptAllModeActivated') + ->willReturn(false); + + $this->sessionMock->expects($this->never())->method('getDecryptAllUid'); + $this->sessionMock->expects($this->never())->method('getDecryptAllKey'); + $this->keyManagerMock->expects($this->never())->method('getEncryptedFileKey'); + $this->keyManagerMock->expects($this->never())->method('getShareKey'); + $this->cryptMock->expects($this->never())->method('multiKeyDecrypt'); + $this->cryptMock->expects($this->any()) ->method('getCipher') ->willReturn($defaultCipher); @@ -209,6 +233,49 @@ class EncryptionTest extends TestCase { ); } + + /** + * test begin() if decryptAll mode was activated + */ + public function testBeginDecryptAll() { + + $path = '/user/files/foo.txt'; + $recoveryKeyId = 'recoveryKeyId'; + $recoveryShareKey = 'recoveryShareKey'; + $decryptAllKey = 'decryptAllKey'; + $fileKey = 'fileKey'; + + $this->sessionMock->expects($this->once()) + ->method('decryptAllModeActivated') + ->willReturn(true); + $this->sessionMock->expects($this->once()) + ->method('getDecryptAllUid') + ->willReturn($recoveryKeyId); + $this->sessionMock->expects($this->once()) + ->method('getDecryptAllKey') + ->willReturn($decryptAllKey); + + $this->keyManagerMock->expects($this->once()) + ->method('getEncryptedFileKey') + ->willReturn('encryptedFileKey'); + $this->keyManagerMock->expects($this->once()) + ->method('getShareKey') + ->with($path, $recoveryKeyId) + ->willReturn($recoveryShareKey); + $this->cryptMock->expects($this->once()) + ->method('multiKeyDecrypt') + ->with('encryptedFileKey', $recoveryShareKey, $decryptAllKey) + ->willReturn($fileKey); + + $this->keyManagerMock->expects($this->never())->method('getFileKey'); + + $this->instance->begin($path, 'user', 'r', [], []); + + $this->assertSame($fileKey, + $this->invokePrivate($this->instance, 'fileKey') + ); + } + /** * @dataProvider dataTestUpdate * @@ -273,4 +340,15 @@ class EncryptionTest extends TestCase { public function testDecrypt() { $this->instance->decrypt('abc'); } + + public function testPrepareDecryptAll() { + $input = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $output = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $this->decryptAllMock->expects($this->once())->method('prepare') + ->with($input, $output, 'user'); + + $this->instance->prepareDecryptAll($input, $output, 'user'); + } + } diff --git a/apps/files/appinfo/remote.php b/apps/files/appinfo/remote.php index 36479ae13d0..4d0d8b3e2ec 100644 --- a/apps/files/appinfo/remote.php +++ b/apps/files/appinfo/remote.php @@ -39,7 +39,8 @@ $serverFactory = new \OC\Connector\Sabre\ServerFactory( \OC::$server->getDatabaseConnection(), \OC::$server->getUserSession(), \OC::$server->getMountManager(), - \OC::$server->getTagManager() + \OC::$server->getTagManager(), + \OC::$server->getEventDispatcher() ); // Backends diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css index 8eded7acda1..ea9d48b470c 100644 --- a/apps/files/css/detailsView.css +++ b/apps/files/css/detailsView.css @@ -25,18 +25,26 @@ margin-top: -15px; } +#app-sidebar .thumbnailContainer.image.portrait { + margin: 0; /* if we dont fit the image anyway we give it back the margin */ +} + #app-sidebar .image .thumbnail { width:100%; display:block; height: 250px; background-repeat: no-repeat; - background-position: 50% top; + background-position: center; background-size: 100%; float: none; margin: 0; } #app-sidebar .image.portrait .thumbnail { + background-position: 50% top; +} + +#app-sidebar .image.portrait .thumbnail { background-size: contain; } @@ -64,10 +72,13 @@ #app-sidebar .fileName h3 { max-width: 300px; float:left; + padding: 5px 0; + margin: -5px 0; } #app-sidebar .file-details { margin-top: 3px; + margin-bottom: 15px; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; opacity: .5; float:left; diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 05033dc2fed..df23f415129 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -110,10 +110,6 @@ cursor: pointer; } -#app-navigation .nav-files a { - display: inline-block; -} - #app-navigation .nav-files a.new.hidden { display: none; } @@ -420,25 +416,20 @@ table td.filename .uploadtext { } /* File checkboxes */ -#fileList tr td.filename>.selectCheckBox { - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); +#fileList tr td.filename>.selectCheckBox + label:before { opacity: 0; - float: left; - top: 0; - margin: 32px 0 4px 32px; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ + position: absolute; + bottom: 4px; + right: 0; + z-index: 10; } + /* Show checkbox when hovering, checked, or selected */ -#fileList tr:hover td.filename>.selectCheckBox, -#fileList tr:focus td.filename>.selectCheckBox, -#fileList tr td.filename>.selectCheckBox:checked, -#fileList tr.selected td.filename>.selectCheckBox { +#fileList tr:hover td.filename>.selectCheckBox + label:before, +#fileList tr:focus td.filename>.selectCheckBox + label:before, +#fileList tr td.filename>.selectCheckBox:checked + label:before, +#fileList tr.selected td.filename>.selectCheckBox + label:before { opacity: 1; -} -.lte9 #fileList tr:hover td.filename>.selectCheckBox, -.lte9 #fileList tr:focus td.filename>.selectCheckBox, -.lte9 #fileList tr td.filename>.selectCheckBox[checked=checked], -.lte9 #fileList tr.selected td.filename>.selectCheckBox { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter: alpha(opacity=100); } @@ -446,6 +437,7 @@ table td.filename .uploadtext { /* Use label to have bigger clickable size for checkbox */ #fileList tr td.filename>.selectCheckBox + label, .select-all + label { + background-position: 30px 30px; height: 50px; position: absolute; width: 50px; @@ -460,7 +452,7 @@ table td.filename .uploadtext { .select-all + label { top: 0; } -.select-all { +.select-all + label:before { position: absolute; top: 18px; left: 18px; @@ -737,6 +729,7 @@ table.dragshadow td.size { width: 140px; margin-left: -56px; margin-top: 25px; + z-index: 1001; } .newFileMenu .menuitem { diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js index 22b1ca9ff0c..de1b143a160 100644 --- a/apps/files/js/fileinfomodel.js +++ b/apps/files/js/fileinfomodel.js @@ -57,7 +57,13 @@ * @return {boolean} true if this is an image, false otherwise */ isImage: function() { - return this.has('mimetype') ? this.get('mimetype').substr(0, 6) === 'image/' : false; + if (!this.has('mimetype')) { + return false; + } + return this.get('mimetype').substr(0, 6) === 'image/' + || this.get('mimetype') === 'application/postscript' + || this.get('mimetype') === 'application/illustrator' + || this.get('mimetype') === 'application/x-photoshop'; }, /** diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 3e12573c046..2af5be73d96 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -10,7 +10,7 @@ (function() { - var TEMPLATE_ADDBUTTON = '<a href="#" class="button new" title="{{addText}}"><img src="{{iconUrl}}"></img></a>'; + var TEMPLATE_ADDBUTTON = '<a href="#" class="button new"><img src="{{iconUrl}}" alt="{{addText}}"></img></a>'; /** * @class OCA.Files.FileList @@ -301,6 +301,7 @@ this.fileActions.registerAction({ name: 'Details', mime: 'all', + icon: OC.imagePath('core', 'actions/details'), permissions: OC.PERMISSION_READ, actionHandler: function(fileName, context) { self._updateDetailsView(fileName); @@ -346,7 +347,7 @@ // and contain existing models that can be used. // This method would in the future simply retrieve the matching model from the collection. var model = new OCA.Files.FileInfoModel(this.elementToFile($tr)); - if (!model.has('path')) { + if (!model.get('path')) { model.set('path', this.getCurrentDirectory(), {silent: true}); } @@ -368,6 +369,21 @@ }, /** + * Displays the details view for the given file and + * selects the given tab + * + * @param {string} fileName file name for which to show details + * @param {string} [tabId] optional tab id to select + */ + showDetailsView: function(fileName, tabId) { + this._updateDetailsView(fileName); + if (tabId) { + this._detailsView.selectTab(tabId); + } + OC.Apps.showAppSidebar(); + }, + + /** * Update the details view to display the given file * * @param {string} fileName file name from the current list diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index efdbb5e2ad1..830f074f3f1 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -124,52 +124,10 @@ // TODO: we really need OC.Previews var $iconDiv = this.$el.find('.thumbnail'); - $iconDiv.addClass('icon-loading icon-32'); - $container = this.$el.find('.thumbnailContainer'); + var $container = this.$el.find('.thumbnailContainer'); if (!this.model.isDirectory()) { - this._fileList.lazyLoadPreview({ - path: this.model.getFullPath(), - mime: this.model.get('mimetype'), - etag: this.model.get('etag'), - y: this.model.isImage() ? 250: 75, - x: this.model.isImage() ? 99999 /* only limit on y */ : 75, - a: this.model.isImage() ? 1 : null, - callback: function(previewUrl, img) { - $iconDiv.previewImg = previewUrl; - if (img) { - $iconDiv.removeClass('icon-loading icon-32'); - if(img.height > img.width) { - $container.addClass('portrait'); - } - } - if (this.model.isImage() && img) { - $iconDiv.parent().addClass('image'); - var targetHeight = img.height / window.devicePixelRatio; - if (targetHeight <= 75) { - $container.removeClass('image'); // small enough to fit in normaly - targetHeight = 75; - } - } else { - targetHeight = 75; - } - - // only set background when we have an actual preview - // when we dont have a preview we show the mime icon in the error handler - if (img) { - $iconDiv.css({ - 'background-image': 'url("' + previewUrl + '")', - 'height': targetHeight - }); - } - }.bind(this), - error: function() { - $iconDiv.removeClass('icon-loading icon-32'); - this.$el.find('.thumbnailContainer').removeClass('image'); //fall back to regular view - $iconDiv.css({ - 'background-image': 'url("' + $iconDiv.previewImg + '")' - }); - }.bind(this) - }); + $iconDiv.addClass('icon-loading icon-32'); + this.loadPreview(this.model.getFullPath(), this.model.get('mimetype'), this.model.get('etag'), $iconDiv, $container, this.model.isImage()); } else { // TODO: special icons / shared / external $iconDiv.css('background-image', 'url("' + OC.MimeType.getIconUrl('dir') + '")'); @@ -179,6 +137,66 @@ this.$el.empty(); } this.delegateEvents(); + }, + + loadPreview: function(path, mime, etag, $iconDiv, $container, isImage) { + var maxImageHeight = ($container.parent().width() + 50) / (16/9); // 30px for negative margin + var smallPreviewSize = 75; + + var isLandscape = function(img) { + return img.width > (img.height * 1.2); + }; + + var getTargetHeight = function(img) { + if(isImage) { + var targetHeight = img.height / window.devicePixelRatio; + if (targetHeight <= smallPreviewSize) { + targetHeight = smallPreviewSize; + } + return targetHeight; + }else{ + return smallPreviewSize; + } + }; + + this._fileList.lazyLoadPreview({ + path: path, + mime: mime, + etag: etag, + y: isImage ? maxImageHeight : smallPreviewSize, + x: isImage ? 99999 /* only limit on y */ : smallPreviewSize, + a: isImage ? 1 : null, + callback: function (previewUrl, img) { + $iconDiv.previewImg = previewUrl; + + // as long as we only have the mimetype icon, we only save it in case there is no preview + if (!img) { + return; + } + $iconDiv.removeClass('icon-loading icon-32'); + var targetHeight = getTargetHeight(img); + if (this.model.isImage() && targetHeight > smallPreviewSize) { + if (!isLandscape(img)) { + $container.addClass('portrait'); + } + $container.addClass('image'); + } + + // only set background when we have an actual preview + // when we dont have a preview we show the mime icon in the error handler + $iconDiv.css({ + 'background-image': 'url("' + previewUrl + '")', + 'height': targetHeight + }); + }.bind(this), + error: function () { + $iconDiv.removeClass('icon-loading icon-32'); + this.$el.find('.thumbnailContainer').removeClass('image'); //fall back to regular view + $iconDiv.css({ + 'background-image': 'url("' + $iconDiv.previewImg + '")' + }); + }.bind(this) + }); } }); diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index 7235176c166..cc7aac18351 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -99,7 +99,7 @@ OC.L10N.register( "File handling" : "Filhåndtering", "Maximum upload size" : "Maksimal upload-størrelse", "max. possible: " : "max. mulige: ", - "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Med PHP-FPM kan denne værdi, kan der gå op til 5 minutter før virkningen indtræffer, efter at der gemmes.", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Med denne PHP-FPM værdi, kan der gå op til 5 minutter før virkningen indtræffer, efter at der gemmes.", "Save" : "Gem", "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres herfra på grund af utilstrækkelige rettigheder.", "Settings" : "Indstillinger", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index adead6621a2..b77937420f4 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -97,7 +97,7 @@ "File handling" : "Filhåndtering", "Maximum upload size" : "Maksimal upload-størrelse", "max. possible: " : "max. mulige: ", - "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Med PHP-FPM kan denne værdi, kan der gå op til 5 minutter før virkningen indtræffer, efter at der gemmes.", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Med denne PHP-FPM værdi, kan der gå op til 5 minutter før virkningen indtræffer, efter at der gemmes.", "Save" : "Gem", "Can not be edited from here due to insufficient permissions." : "Kan ikke redigeres herfra på grund af utilstrækkelige rettigheder.", "Settings" : "Indstillinger", diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index 32f7dee7d43..92ce9bd6d10 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -41,6 +41,8 @@ OC.L10N.register( "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", + "This operation is forbidden" : "Esta operação é proibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Esta diretoria está indisponível, por favor, verifique os registos ou contacte o administrador", "Error moving file." : "Erro a mover o ficheiro.", "Error moving file" : "Erro ao mover o ficheiro", "Error" : "Erro", @@ -61,13 +63,19 @@ OC.L10N.register( "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "O armazenamento de {owner} está cheiro. Os ficheiros já não podem ser atualizados ou sincronizados!", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O armazenamento de {owner} está quase cheio ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], + "Path" : "Caminho", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "{newname} already exists" : "{newname} já existe", "Upload" : "Enviar", "Text file" : "Ficheiro de Texto", + "New text file.txt" : "Novo texto ficheiro.txt", "Folder" : "Pasta", "New folder" : "Nova Pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", @@ -91,6 +99,7 @@ OC.L10N.register( "File handling" : "Manuseamento do ficheiro", "Maximum upload size" : "Tamanho máximo de envio", "max. possible: " : "Máx. possível: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Com PHP-FPM este valor poderá demorar até 5 minutos para ser aplicado depois de guardar.", "Save" : "Guardar", "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Definições", diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index 5c6a8aececa..99718047020 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -39,6 +39,8 @@ "Select" : "Selecionar", "Pending" : "Pendente", "Unable to determine date" : "Impossível determinar a data", + "This operation is forbidden" : "Esta operação é proibida", + "This directory is unavailable, please check the logs or contact the administrator" : "Esta diretoria está indisponível, por favor, verifique os registos ou contacte o administrador", "Error moving file." : "Erro a mover o ficheiro.", "Error moving file" : "Erro ao mover o ficheiro", "Error" : "Erro", @@ -59,13 +61,19 @@ "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", + "Storage of {owner} is full, files can not be updated or synced anymore!" : "O armazenamento de {owner} está cheiro. Os ficheiros já não podem ser atualizados ou sincronizados!", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", + "Storage of {owner} is almost full ({usedSpacePercent}%)" : "O armazenamento de {owner} está quase cheio ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "O seu armazenamento está quase cheiro ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], + "Path" : "Caminho", + "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "{newname} already exists" : "{newname} já existe", "Upload" : "Enviar", "Text file" : "Ficheiro de Texto", + "New text file.txt" : "Novo texto ficheiro.txt", "Folder" : "Pasta", "New folder" : "Nova Pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", @@ -89,6 +97,7 @@ "File handling" : "Manuseamento do ficheiro", "Maximum upload size" : "Tamanho máximo de envio", "max. possible: " : "Máx. possível: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "Com PHP-FPM este valor poderá demorar até 5 minutos para ser aplicado depois de guardar.", "Save" : "Guardar", "Can not be edited from here due to insufficient permissions." : "Não pode ser editado a partir daqui devido a permissões insuficientes.", "Settings" : "Definições", diff --git a/apps/files_external/l10n/da.js b/apps/files_external/l10n/da.js index b1f058efbb3..435884aa11d 100644 --- a/apps/files_external/l10n/da.js +++ b/apps/files_external/l10n/da.js @@ -12,6 +12,8 @@ OC.L10N.register( "Invalid mount point" : "Fokert monteringspunkt", "Objectstore forbidden" : "Objectstore er forbudt", "Invalid storage backend \"%s\"" : "Forkert lager til backend \"%s\"en", + "Not permitted to use backend \"%s\"" : "Ikke tilladt at bruge backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Ikke tilladt at bruge autorisation mekanismen \"%s\"", "Unsatisfied backend parameters" : "Utilfredsstillede backend-parametre", "Unsatisfied authentication mechanism parameters" : "Utilfredsstillede parametre for godkendelsesmekanisme", "Personal" : "Personligt", @@ -41,11 +43,16 @@ OC.L10N.register( "OAuth2" : "OAuth2", "Client ID" : "Klient-ID", "Client secret" : "Klient hemmelighed", + "OpenStack" : "OpenStack", "Username" : "Brugernavn", "Password" : "Kodeord", + "Tenant name" : "Lejernavn", + "Identity endpoint URL" : "Identificer afslutnings URL", + "Rackspace" : "Hyldeplads", "API key" : "API nøgle", "Username and password" : "Brugernavn og kodeord", "Session credentials" : "Brugeroplysninger for session", + "RSA public key" : "RSA offentlig nøgle", "Public key" : "Offentlig nøgle", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -68,10 +75,15 @@ OC.L10N.register( "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Root", + "SFTP with secret key login [DEPRECATED]" : "SFTP med det hemmelige nøgle login [DEPRECATED]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Del", + "Domain" : "Domæne", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS der bruger OC login [DEPRECATED]", "Username as share" : "Brugernavn som deling", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Tjenestenavn", + "Request timeout (seconds)" : "Anmodning timeout (sekunder)", "<b>Note:</b> " : "<b>Note:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", diff --git a/apps/files_external/l10n/da.json b/apps/files_external/l10n/da.json index 811de509421..631fb196624 100644 --- a/apps/files_external/l10n/da.json +++ b/apps/files_external/l10n/da.json @@ -10,6 +10,8 @@ "Invalid mount point" : "Fokert monteringspunkt", "Objectstore forbidden" : "Objectstore er forbudt", "Invalid storage backend \"%s\"" : "Forkert lager til backend \"%s\"en", + "Not permitted to use backend \"%s\"" : "Ikke tilladt at bruge backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Ikke tilladt at bruge autorisation mekanismen \"%s\"", "Unsatisfied backend parameters" : "Utilfredsstillede backend-parametre", "Unsatisfied authentication mechanism parameters" : "Utilfredsstillede parametre for godkendelsesmekanisme", "Personal" : "Personligt", @@ -39,11 +41,16 @@ "OAuth2" : "OAuth2", "Client ID" : "Klient-ID", "Client secret" : "Klient hemmelighed", + "OpenStack" : "OpenStack", "Username" : "Brugernavn", "Password" : "Kodeord", + "Tenant name" : "Lejernavn", + "Identity endpoint URL" : "Identificer afslutnings URL", + "Rackspace" : "Hyldeplads", "API key" : "API nøgle", "Username and password" : "Brugernavn og kodeord", "Session credentials" : "Brugeroplysninger for session", + "RSA public key" : "RSA offentlig nøgle", "Public key" : "Offentlig nøgle", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -66,10 +73,15 @@ "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Root", + "SFTP with secret key login [DEPRECATED]" : "SFTP med det hemmelige nøgle login [DEPRECATED]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Del", + "Domain" : "Domæne", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS der bruger OC login [DEPRECATED]", "Username as share" : "Brugernavn som deling", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Tjenestenavn", + "Request timeout (seconds)" : "Anmodning timeout (sekunder)", "<b>Note:</b> " : "<b>Note:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> cURL-understøttelsen i PHP er enten ikke aktiveret eller installeret. Monteringen af %s er ikke mulig. Anmod din systemadministrator om at installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Bemærk:</b> FTP understøttelsen i PHP er enten ikke aktiveret eller installeret. Montering af %s er ikke muligt. Anmod din systemadministrator om at installere det.", diff --git a/apps/files_external/l10n/fi_FI.js b/apps/files_external/l10n/fi_FI.js index 2243f5f5526..92e93d9ed3a 100644 --- a/apps/files_external/l10n/fi_FI.js +++ b/apps/files_external/l10n/fi_FI.js @@ -23,6 +23,7 @@ OC.L10N.register( "All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.", "(group)" : "(ryhmä)", "Saved" : "Tallennettu", + "Builtin" : "Sisäänrakennettu", "None" : "Ei mitään", "OAuth1" : "OAuth1", "App key" : "Sovellusavain", @@ -33,6 +34,7 @@ OC.L10N.register( "OpenStack" : "OpenStack", "Username" : "Käyttäjätunnus", "Password" : "Salasana", + "Rackspace" : "Rackspace", "API key" : "API-avain", "Username and password" : "Käyttäjätunnus ja salasana", "RSA public key" : "Julkinen RSA-avain", diff --git a/apps/files_external/l10n/fi_FI.json b/apps/files_external/l10n/fi_FI.json index b629fad87c6..6459b33a126 100644 --- a/apps/files_external/l10n/fi_FI.json +++ b/apps/files_external/l10n/fi_FI.json @@ -21,6 +21,7 @@ "All users. Type to select user or group." : "Kaikki käyttäjät. Kirjoita valitaksesi käyttäjän tai ryhmän.", "(group)" : "(ryhmä)", "Saved" : "Tallennettu", + "Builtin" : "Sisäänrakennettu", "None" : "Ei mitään", "OAuth1" : "OAuth1", "App key" : "Sovellusavain", @@ -31,6 +32,7 @@ "OpenStack" : "OpenStack", "Username" : "Käyttäjätunnus", "Password" : "Salasana", + "Rackspace" : "Rackspace", "API key" : "API-avain", "Username and password" : "Käyttäjätunnus ja salasana", "RSA public key" : "Julkinen RSA-avain", diff --git a/apps/files_external/l10n/it.js b/apps/files_external/l10n/it.js index 9c49d95fc31..368ff49195e 100644 --- a/apps/files_external/l10n/it.js +++ b/apps/files_external/l10n/it.js @@ -12,6 +12,8 @@ OC.L10N.register( "Invalid mount point" : "Punto di mount non valido", "Objectstore forbidden" : "Objectstore vietato", "Invalid storage backend \"%s\"" : "Motore di archiviazione \"%s\" non valido", + "Not permitted to use backend \"%s\"" : "Utilizzo del motore \"%s\" non permesso", + "Not permitted to use authentication mechanism \"%s\"" : "Utilizzo del meccanismo di autenticazione \"%s\" non permesso", "Unsatisfied backend parameters" : "Parametri del motore non soddisfatti", "Unsatisfied authentication mechanism parameters" : "Parametri del meccanismo di autenticazione non soddisfatti", "Personal" : "Personale", @@ -72,11 +74,15 @@ OC.L10N.register( "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Radice", + "SFTP with secret key login [DEPRECATED]" : "SFTP con accesso a chiave segreta [DEPRECATO]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Condividi", + "Domain" : "Dominio", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS utilizzando le credenziali di OC [DEPRECATO]", "Username as share" : "Nome utente come condivisione", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", + "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", "<b>Note:</b> " : "<b>Nota:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/it.json b/apps/files_external/l10n/it.json index 3f6020708d2..4da556760f6 100644 --- a/apps/files_external/l10n/it.json +++ b/apps/files_external/l10n/it.json @@ -10,6 +10,8 @@ "Invalid mount point" : "Punto di mount non valido", "Objectstore forbidden" : "Objectstore vietato", "Invalid storage backend \"%s\"" : "Motore di archiviazione \"%s\" non valido", + "Not permitted to use backend \"%s\"" : "Utilizzo del motore \"%s\" non permesso", + "Not permitted to use authentication mechanism \"%s\"" : "Utilizzo del meccanismo di autenticazione \"%s\" non permesso", "Unsatisfied backend parameters" : "Parametri del motore non soddisfatti", "Unsatisfied authentication mechanism parameters" : "Parametri del meccanismo di autenticazione non soddisfatti", "Personal" : "Personale", @@ -70,11 +72,15 @@ "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Radice", + "SFTP with secret key login [DEPRECATED]" : "SFTP con accesso a chiave segreta [DEPRECATO]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Condividi", + "Domain" : "Dominio", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS utilizzando le credenziali di OC [DEPRECATO]", "Username as share" : "Nome utente come condivisione", "OpenStack Object Storage" : "OpenStack Object Storage", "Service name" : "Nome servizio", + "Request timeout (seconds)" : "Tempo massimo della richiesta (secondi)", "<b>Note:</b> " : "<b>Nota:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a cURL di PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> il supporto a FTP in PHP non è abilitato o installato. Impossibile montare %s. Chiedi al tuo amministratore di sistema di installarlo.", diff --git a/apps/files_external/l10n/nb_NO.js b/apps/files_external/l10n/nb_NO.js index 1401bbe7012..0089d42288d 100644 --- a/apps/files_external/l10n/nb_NO.js +++ b/apps/files_external/l10n/nb_NO.js @@ -12,6 +12,8 @@ OC.L10N.register( "Invalid mount point" : "Ugyldig oppkoblingspunkt", "Objectstore forbidden" : "Objektlager forbudt", "Invalid storage backend \"%s\"" : "Ugyldig lagringsserver \"%s\"", + "Not permitted to use backend \"%s\"" : "Ikke tillatt å bruke server \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Ikke tillatt å bruke autentiseringsmekanisme \"%s\"", "Unsatisfied backend parameters" : "Noen server-parameter mangler", "Unsatisfied authentication mechanism parameters" : "Noen parametre for autentiseringsmekanisme mangler", "Personal" : "Personlig", @@ -41,11 +43,16 @@ OC.L10N.register( "OAuth2" : "OAuth2", "Client ID" : "Client ID", "Client secret" : "Client secret", + "OpenStack" : "OpenStack", "Username" : "Brukernavn", "Password" : "Passord", + "Tenant name" : "Prosjektnavn", + "Identity endpoint URL" : "URL for identitets-endepunkt", + "Rackspace" : "Rackspace", "API key" : "API-nøkkel", "Username and password" : "Brukernavn og passord", "Session credentials" : "Påloggingsdetaljer for økt", + "RSA public key" : "RSA offentlig nøkkel", "Public key" : "Offentlig nøkkel", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -68,10 +75,14 @@ OC.L10N.register( "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Rot", + "SFTP with secret key login [DEPRECATED]" : "SFTP med hemmelig nøkkel for pålogging [FORELDET]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Delt ressurs", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS med OC-pålogging [FORELDET]", "Username as share" : "Brukernavn som share", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Tjenestenavn", + "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", "<b>Note:</b> " : "<b>Merk:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.", diff --git a/apps/files_external/l10n/nb_NO.json b/apps/files_external/l10n/nb_NO.json index cf6c2d38f9d..8ee2713f329 100644 --- a/apps/files_external/l10n/nb_NO.json +++ b/apps/files_external/l10n/nb_NO.json @@ -10,6 +10,8 @@ "Invalid mount point" : "Ugyldig oppkoblingspunkt", "Objectstore forbidden" : "Objektlager forbudt", "Invalid storage backend \"%s\"" : "Ugyldig lagringsserver \"%s\"", + "Not permitted to use backend \"%s\"" : "Ikke tillatt å bruke server \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Ikke tillatt å bruke autentiseringsmekanisme \"%s\"", "Unsatisfied backend parameters" : "Noen server-parameter mangler", "Unsatisfied authentication mechanism parameters" : "Noen parametre for autentiseringsmekanisme mangler", "Personal" : "Personlig", @@ -39,11 +41,16 @@ "OAuth2" : "OAuth2", "Client ID" : "Client ID", "Client secret" : "Client secret", + "OpenStack" : "OpenStack", "Username" : "Brukernavn", "Password" : "Passord", + "Tenant name" : "Prosjektnavn", + "Identity endpoint URL" : "URL for identitets-endepunkt", + "Rackspace" : "Rackspace", "API key" : "API-nøkkel", "Username and password" : "Brukernavn og passord", "Session credentials" : "Påloggingsdetaljer for økt", + "RSA public key" : "RSA offentlig nøkkel", "Public key" : "Offentlig nøkkel", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -66,10 +73,14 @@ "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Rot", + "SFTP with secret key login [DEPRECATED]" : "SFTP med hemmelig nøkkel for pålogging [FORELDET]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Delt ressurs", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS med OC-pålogging [FORELDET]", "Username as share" : "Brukernavn som share", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Tjenestenavn", + "Request timeout (seconds)" : "Tidsavbrudd for forespørsel (sekunder)", "<b>Note:</b> " : "<b>Merk:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> Støtte for cURL i PHP er ikke aktivert eller installert. Oppkobling av %s er ikke mulig. Be systemadministratoren om å installere det.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Merk:</b> FTP-støtte i PHP er ikke slått på eller installert. Kan ikke koble opp %s. Ta kontakt med systemadministratoren for å få dette installert.", diff --git a/apps/files_external/l10n/nl.js b/apps/files_external/l10n/nl.js index 1f0c219c51e..a40b2afa7e8 100644 --- a/apps/files_external/l10n/nl.js +++ b/apps/files_external/l10n/nl.js @@ -12,6 +12,8 @@ OC.L10N.register( "Invalid mount point" : "Ongeldig aankoppelpunt", "Objectstore forbidden" : "Objectopslag verboden", "Invalid storage backend \"%s\"" : "Ongeldig opslagsysteem \"%s\"", + "Not permitted to use backend \"%s\"" : "Niet toegestaan om \"%s\" te gebruiken", + "Not permitted to use authentication mechanism \"%s\"" : "Niet toegestaan om authenticatiemechanisme \"%s\" te gebruiken", "Unsatisfied backend parameters" : "Onvoldoende backend parameters", "Unsatisfied authentication mechanism parameters" : "Onvoldoende authenticatiemechanisme parameters", "Personal" : "Persoonlijk", @@ -41,11 +43,16 @@ OC.L10N.register( "OAuth2" : "OAuth2", "Client ID" : "Client ID", "Client secret" : "Client secret", + "OpenStack" : "OpenStack", "Username" : "Gebruikersnaam", "Password" : "Wachtwoord", + "Tenant name" : "Naam tenant", + "Identity endpoint URL" : "Identiteiten endpoint URL", + "Rackspace" : "Rackspace", "API key" : "API sleutel", "Username and password" : "Gebruikersnaam en wachtwoord", "Session credentials" : "Sessie inloggegevens", + "RSA public key" : "RSA publieke sleutel", "Public key" : "Publieke sleutel", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -68,10 +75,15 @@ OC.L10N.register( "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Root", + "SFTP with secret key login [DEPRECATED]" : "SFTP inlog met geheime sleutel [VEROUDERD]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Domain" : "Domein", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS login met OC [VEROUDERD]", "Username as share" : "Gebruikersnaam als share", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Servicenaam", + "Request timeout (seconds)" : "Aanvraag time-out (seconds)", "<b>Note:</b> " : "<b>Let op:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder dit te installeren.", diff --git a/apps/files_external/l10n/nl.json b/apps/files_external/l10n/nl.json index 948845cfa82..52507dc4744 100644 --- a/apps/files_external/l10n/nl.json +++ b/apps/files_external/l10n/nl.json @@ -10,6 +10,8 @@ "Invalid mount point" : "Ongeldig aankoppelpunt", "Objectstore forbidden" : "Objectopslag verboden", "Invalid storage backend \"%s\"" : "Ongeldig opslagsysteem \"%s\"", + "Not permitted to use backend \"%s\"" : "Niet toegestaan om \"%s\" te gebruiken", + "Not permitted to use authentication mechanism \"%s\"" : "Niet toegestaan om authenticatiemechanisme \"%s\" te gebruiken", "Unsatisfied backend parameters" : "Onvoldoende backend parameters", "Unsatisfied authentication mechanism parameters" : "Onvoldoende authenticatiemechanisme parameters", "Personal" : "Persoonlijk", @@ -39,11 +41,16 @@ "OAuth2" : "OAuth2", "Client ID" : "Client ID", "Client secret" : "Client secret", + "OpenStack" : "OpenStack", "Username" : "Gebruikersnaam", "Password" : "Wachtwoord", + "Tenant name" : "Naam tenant", + "Identity endpoint URL" : "Identiteiten endpoint URL", + "Rackspace" : "Rackspace", "API key" : "API sleutel", "Username and password" : "Gebruikersnaam en wachtwoord", "Session credentials" : "Sessie inloggegevens", + "RSA public key" : "RSA publieke sleutel", "Public key" : "Publieke sleutel", "Amazon S3" : "Amazon S3", "Bucket" : "Bucket", @@ -66,10 +73,15 @@ "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Root", + "SFTP with secret key login [DEPRECATED]" : "SFTP inlog met geheime sleutel [VEROUDERD]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Share", + "Domain" : "Domein", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS login met OC [VEROUDERD]", "Username as share" : "Gebruikersnaam als share", "OpenStack Object Storage" : "OpenStack Object Storage", + "Service name" : "Servicenaam", + "Request timeout (seconds)" : "Aanvraag time-out (seconds)", "<b>Note:</b> " : "<b>Let op:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> Curl ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw systeembeheerder dit te installeren.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Let op:</b> FTP ondersteuning in PHP is niet geactiveerd of geïnstalleerd. Mounten van %s is niet mogelijk. Vraag uw beheerder dit te installeren.", diff --git a/apps/files_external/l10n/pt_BR.js b/apps/files_external/l10n/pt_BR.js index fefe1e899f5..9b9d1c49a49 100644 --- a/apps/files_external/l10n/pt_BR.js +++ b/apps/files_external/l10n/pt_BR.js @@ -12,6 +12,8 @@ OC.L10N.register( "Invalid mount point" : "Ponto de montagem inválido", "Objectstore forbidden" : "Proibido armazenamento de objetos", "Invalid storage backend \"%s\"" : "Armazenamento backend inválido \"%s\"", + "Not permitted to use backend \"%s\"" : "Não é permitido o uso de backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Não é permitido usar o mecanismo de autenticação \"%s\"", "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos", "Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos", "Personal" : "Pessoal", @@ -41,11 +43,16 @@ OC.L10N.register( "OAuth2" : "OAuth2", "Client ID" : "ID do Cliente", "Client secret" : "Segredo do cliente", + "OpenStack" : "OpenStack", "Username" : "Nome de Usuário", "Password" : "Senha", + "Tenant name" : "Nome do inquilino", + "Identity endpoint URL" : "Identidade pontofinal URL", + "Rackspace" : "Espaço em rack", "API key" : "Chave API", "Username and password" : "Nome de Usuário e senha", "Session credentials" : "Credenciais de Sessão", + "RSA public key" : "Chave pública RSA", "Public key" : "Chave pública", "Amazon S3" : "Amazon S3", "Bucket" : "Cesta", @@ -68,10 +75,14 @@ OC.L10N.register( "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Raiz", + "SFTP with secret key login [DEPRECATED]" : "SFTP com chave secreta de login [DEPRECATED]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartilhar", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS usando OC de login [DEPRECATED]", "Username as share" : "Nome de usuário como compartilhado", "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", + "Service name" : "Nome do serviço", + "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)", "<b>Note:</b> " : "<b>Nota:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", diff --git a/apps/files_external/l10n/pt_BR.json b/apps/files_external/l10n/pt_BR.json index f133b469f76..a863e6abffb 100644 --- a/apps/files_external/l10n/pt_BR.json +++ b/apps/files_external/l10n/pt_BR.json @@ -10,6 +10,8 @@ "Invalid mount point" : "Ponto de montagem inválido", "Objectstore forbidden" : "Proibido armazenamento de objetos", "Invalid storage backend \"%s\"" : "Armazenamento backend inválido \"%s\"", + "Not permitted to use backend \"%s\"" : "Não é permitido o uso de backend \"%s\"", + "Not permitted to use authentication mechanism \"%s\"" : "Não é permitido usar o mecanismo de autenticação \"%s\"", "Unsatisfied backend parameters" : "Parâmetros de back-end não-atendidos", "Unsatisfied authentication mechanism parameters" : "Parâmetros de mecanismos de autenticação não satisfeitos", "Personal" : "Pessoal", @@ -39,11 +41,16 @@ "OAuth2" : "OAuth2", "Client ID" : "ID do Cliente", "Client secret" : "Segredo do cliente", + "OpenStack" : "OpenStack", "Username" : "Nome de Usuário", "Password" : "Senha", + "Tenant name" : "Nome do inquilino", + "Identity endpoint URL" : "Identidade pontofinal URL", + "Rackspace" : "Espaço em rack", "API key" : "Chave API", "Username and password" : "Nome de Usuário e senha", "Session credentials" : "Credenciais de Sessão", + "RSA public key" : "Chave pública RSA", "Public key" : "Chave pública", "Amazon S3" : "Amazon S3", "Bucket" : "Cesta", @@ -66,10 +73,14 @@ "ownCloud" : "ownCloud", "SFTP" : "SFTP", "Root" : "Raiz", + "SFTP with secret key login [DEPRECATED]" : "SFTP com chave secreta de login [DEPRECATED]", "SMB / CIFS" : "SMB / CIFS", "Share" : "Compartilhar", + "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS usando OC de login [DEPRECATED]", "Username as share" : "Nome de usuário como compartilhado", "OpenStack Object Storage" : "Armazenamento de Objetos OpenStack", + "Service name" : "Nome do serviço", + "Request timeout (seconds)" : "Tempo esgotado requerido (segundos)", "<b>Note:</b> " : "<b>Nota:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte cURL do PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Nota:</b> O suporte FTP no PHP não está habilitado ou instalado. Montagem de %s não é possível. Por favor, solicite ao seu administrador do sistema para instalá-lo.", diff --git a/apps/files_external/l10n/th_TH.js b/apps/files_external/l10n/th_TH.js index 34c1f74ecf8..89308e5889c 100644 --- a/apps/files_external/l10n/th_TH.js +++ b/apps/files_external/l10n/th_TH.js @@ -78,6 +78,7 @@ OC.L10N.register( "SFTP with secret key login [DEPRECATED]" : "SFTP กับรหัสลับเข้าสู่ระบบ [ยกเลิก]", "SMB / CIFS" : "SMB / CIFS", "Share" : "แชร์", + "Domain" : "โดเมน", "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS กำลังใช้ OC เข้าสู่ระบบ [ยกเลิก]", "Username as share" : "ชื่อผู้ใช้ที่แชร์", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/l10n/th_TH.json b/apps/files_external/l10n/th_TH.json index cb18b221c4a..5b167001e4e 100644 --- a/apps/files_external/l10n/th_TH.json +++ b/apps/files_external/l10n/th_TH.json @@ -76,6 +76,7 @@ "SFTP with secret key login [DEPRECATED]" : "SFTP กับรหัสลับเข้าสู่ระบบ [ยกเลิก]", "SMB / CIFS" : "SMB / CIFS", "Share" : "แชร์", + "Domain" : "โดเมน", "SMB / CIFS using OC login [DEPRECATED]" : "SMB / CIFS กำลังใช้ OC เข้าสู่ระบบ [ยกเลิก]", "Username as share" : "ชื่อผู้ใช้ที่แชร์", "OpenStack Object Storage" : "OpenStack Object Storage", diff --git a/apps/files_external/lib/amazons3.php b/apps/files_external/lib/amazons3.php index 7c6ac4cbdd5..34e8974a6d5 100644 --- a/apps/files_external/lib/amazons3.php +++ b/apps/files_external/lib/amazons3.php @@ -592,7 +592,10 @@ class AmazonS3 extends \OC\Files\Storage\Common { 'key' => $this->params['key'], 'secret' => $this->params['secret'], 'base_url' => $base_url, - 'region' => $this->params['region'] + 'region' => $this->params['region'], + S3Client::COMMAND_PARAMS => [ + 'PathStyle' => $this->params['use_path_style'], + ], )); if (!$this->connection->isValidBucketName($this->bucket)) { diff --git a/apps/files_external/lib/backend/smb.php b/apps/files_external/lib/backend/smb.php index 350eca1de34..7865b44d689 100644 --- a/apps/files_external/lib/backend/smb.php +++ b/apps/files_external/lib/backend/smb.php @@ -26,6 +26,7 @@ use \OCA\Files_External\Lib\Backend\Backend; use \OCA\Files_External\Lib\DefinitionParameter; use \OCA\Files_External\Lib\Auth\AuthMechanism; use \OCA\Files_External\Service\BackendService; +use \OCA\Files_External\Lib\StorageConfig; use \OCA\Files_External\Lib\LegacyDependencyCheckPolyfill; use \OCA\Files_External\Lib\Auth\Password\Password; @@ -45,10 +46,22 @@ class SMB extends Backend { (new DefinitionParameter('share', $l->t('Share'))), (new DefinitionParameter('root', $l->t('Remote subfolder'))) ->setFlag(DefinitionParameter::FLAG_OPTIONAL), + (new DefinitionParameter('domain', $l->t('Domain'))) + ->setFlag(DefinitionParameter::FLAG_OPTIONAL), ]) ->addAuthScheme(AuthMechanism::SCHEME_PASSWORD) ->setLegacyAuthMechanism($legacyAuth) ; } + /** + * @param StorageConfig $storage + */ + public function manipulateStorageConfig(StorageConfig &$storage) { + $user = $storage->getBackendOption('user'); + if ($domain = $storage->getBackendOption('domain')) { + $storage->setBackendOption('user', $domain.'\\'.$user); + } + } + } diff --git a/apps/files_external/lib/config/configadapter.php b/apps/files_external/lib/config/configadapter.php index a255a7b3d25..cb8c2f24caa 100644 --- a/apps/files_external/lib/config/configadapter.php +++ b/apps/files_external/lib/config/configadapter.php @@ -114,7 +114,7 @@ class ConfigAdapter implements IMountProvider { $this->userStoragesService->setUser($user); $this->userGlobalStoragesService->setUser($user); - foreach ($this->userGlobalStoragesService->getAllStorages() as $storage) { + foreach ($this->userGlobalStoragesService->getUniqueStorages() as $storage) { try { $this->prepareStorageConfig($storage, $user); $impl = $this->constructStorage($storage); diff --git a/apps/files_external/service/userglobalstoragesservice.php b/apps/files_external/service/userglobalstoragesservice.php index c59652d057f..b60473f131e 100644 --- a/apps/files_external/service/userglobalstoragesservice.php +++ b/apps/files_external/service/userglobalstoragesservice.php @@ -26,6 +26,7 @@ use \OCA\Files_External\Service\BackendService; use \OCP\IUserSession; use \OCP\IGroupManager; use \OCA\Files_External\Service\UserTrait; +use \OCA\Files_External\Lib\StorageConfig; /** * Service class to read global storages applicable to the user @@ -109,4 +110,60 @@ class UserGlobalStoragesService extends GlobalStoragesService { throw new \DomainException('UserGlobalStoragesService writing disallowed'); } + /** + * Get unique storages, in case two are defined with the same mountpoint + * Higher priority storages take precedence + * + * @return StorageConfig[] + */ + public function getUniqueStorages() { + $storages = $this->getAllStorages(); + + $storagesByMountpoint = []; + foreach ($storages as $storage) { + $storagesByMountpoint[$storage->getMountPoint()][] = $storage; + } + + $result = []; + foreach ($storagesByMountpoint as $storageList) { + $storage = array_reduce($storageList, function($carry, $item) { + if (isset($carry)) { + $carryPriorityType = $this->getPriorityType($carry); + $itemPriorityType = $this->getPriorityType($item); + if ($carryPriorityType > $itemPriorityType) { + return $carry; + } elseif ($carryPriorityType === $itemPriorityType) { + if ($carry->getPriority() > $item->getPriority()) { + return $carry; + } + } + } + return $item; + }); + $result[$storage->getID()] = $storage; + } + + return $result; + } + + /** + * Get a priority 'type', where a bigger number means higher priority + * user applicable > group applicable > 'all' + * + * @param StorageConfig $storage + * @return int + */ + protected function getPriorityType(StorageConfig $storage) { + $applicableUsers = $storage->getApplicableUsers(); + $applicableGroups = $storage->getApplicableGroups(); + + if ($applicableUsers && $applicableUsers[0] !== 'all') { + return 2; + } + if ($applicableGroups) { + return 1; + } + return 0; + } + } diff --git a/apps/files_external/tests/backends/amazons3.php b/apps/files_external/tests/backends/amazons3.php index 1923ddc30b1..7e88f3d0b74 100644 --- a/apps/files_external/tests/backends/amazons3.php +++ b/apps/files_external/tests/backends/amazons3.php @@ -32,11 +32,11 @@ class AmazonS3 extends Storage { protected function setUp() { parent::setUp(); - $this->config = include('files_external/tests/config.php'); - if ( ! is_array($this->config) or ! isset($this->config['amazons3']) or ! $this->config['amazons3']['run']) { + $this->config = include('files_external/tests/config.amazons3.php'); + if ( ! is_array($this->config) or ! $this->config['run']) { $this->markTestSkipped('AmazonS3 backend not configured'); } - $this->instance = new \OC\Files\Storage\AmazonS3($this->config['amazons3']); + $this->instance = new \OC\Files\Storage\AmazonS3($this->config); } protected function tearDown() { diff --git a/apps/files_external/tests/env/start-amazons3-ceph.sh b/apps/files_external/tests/env/start-amazons3-ceph.sh new file mode 100755 index 00000000000..5f274f10ca2 --- /dev/null +++ b/apps/files_external/tests/env/start-amazons3-ceph.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# +# ownCloud +# +# This script start a docker container to test the files_external tests +# against. It will also change the files_external config to use the docker +# container as testing environment. This is reverted in the stop step.W +# +# Set environment variable DEBUG to print config file +# +# @author Morris Jobke +# @author Robin McCorkell +# @copyright 2015 ownCloud + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker setup" + exit 0; +fi + +echo "Docker executable found - setup docker" + +docker_image=xenopathic/ceph-keystone + +echo "Fetch recent ${docker_image} docker image" +docker pull ${docker_image} + +# retrieve current folder to place the config in the parent folder +thisFolder=`echo $0 | replace "env/start-amazons3-ceph.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +user=test +accesskey=aaabbbccc +secretkey=cccbbbaaa +bucket=testbucket +port=80 + +container=`docker run -d \ + -e RGW_CIVETWEB_PORT=$port \ + ${docker_image}` + +host=`docker inspect $container | grep IPAddress | cut -d '"' -f 4` + + +echo "${docker_image} container: $container" + +# put container IDs into a file to drop them after the test run (keep in mind that multiple tests run in parallel on the same host) +echo $container >> $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.amazons3 + +# TODO find a way to determine the successful initialization inside the docker container +echo "Waiting 20 seconds for ceph initialization ... " +sleep 20 + +echo "Create ceph user" +docker exec $container radosgw-admin user create \ + --uid="$user" --display-name="$user" \ + --access-key="$accesskey" --secret="$secretkey" \ + >/dev/null + +cat > $thisFolder/config.amazons3.php <<DELIM +<?php + +return array( + 'run'=>true, + 'bucket'=>'$bucket', + 'hostname'=>'$host', + 'port'=>'$port', + 'key'=>'$accesskey', + 'secret'=>'$secretkey', + 'use_ssl'=>false, + 'use_path_style'=>true, +); + +DELIM + +if [ -n "$DEBUG" ]; then + cat $thisFolder/config.amazons3.php + cat $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.amazons3 +fi diff --git a/apps/files_external/tests/env/stop-amazons3-ceph.sh b/apps/files_external/tests/env/stop-amazons3-ceph.sh new file mode 100755 index 00000000000..01b39b4c680 --- /dev/null +++ b/apps/files_external/tests/env/stop-amazons3-ceph.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# +# ownCloud +# +# This script stops the docker container the files_external tests were run +# against. It will also revert the config changes done in start step. +# +# @author Morris Jobke +# @author Robin McCorkell +# @copyright 2015 ownCloud + +if ! command -v docker >/dev/null 2>&1; then + echo "No docker executable found - skipped docker stop" + exit 0; +fi + +echo "Docker executable found - stop and remove docker containers" + +# retrieve current folder to remove the config from the parent folder +thisFolder=`echo $0 | replace "env/stop-amazons3-ceph.sh" ""` + +if [ -z "$thisFolder" ]; then + thisFolder="." +fi; + +# stopping and removing docker containers +for container in `cat $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.amazons3`; do + echo "Stopping and removing docker container $container" + # kills running container and removes it + docker rm -f $container +done; + +# cleanup +rm $thisFolder/config.amazons3.php +rm $thisFolder/dockerContainerCeph.$EXECUTOR_NUMBER.amazons3 + diff --git a/apps/files_external/tests/service/userglobalstoragesservicetest.php b/apps/files_external/tests/service/userglobalstoragesservicetest.php index b9e2c08c932..867872f3683 100644 --- a/apps/files_external/tests/service/userglobalstoragesservicetest.php +++ b/apps/files_external/tests/service/userglobalstoragesservicetest.php @@ -35,6 +35,7 @@ class UserGlobalStoragesServiceTest extends GlobalStoragesServiceTest { const USER_ID = 'test_user'; const GROUP_ID = 'test_group'; + const GROUP_ID2 = 'test_group2'; public function setUp() { parent::setUp(); @@ -51,8 +52,12 @@ class UserGlobalStoragesServiceTest extends GlobalStoragesServiceTest { $this->groupManager = $this->getMock('\OCP\IGroupManager'); $this->groupManager->method('isInGroup') ->will($this->returnCallback(function($userId, $groupId) { - if ($userId === self::USER_ID && $groupId === self::GROUP_ID) { - return true; + if ($userId === self::USER_ID) { + switch ($groupId) { + case self::GROUP_ID: + case self::GROUP_ID2: + return true; + } } return false; })); @@ -167,6 +172,77 @@ class UserGlobalStoragesServiceTest extends GlobalStoragesServiceTest { $this->service->removeStorage(1); } + public function getUniqueStoragesProvider() { + return [ + // 'all' vs group + [100, [], [], 100, [], [self::GROUP_ID], 2], + [100, [], [self::GROUP_ID], 100, [], [], 1], + + // 'all' vs user + [100, [], [], 100, [self::USER_ID], [], 2], + [100, [self::USER_ID], [], 100, [], [], 1], + + // group vs user + [100, [], [self::GROUP_ID], 100, [self::USER_ID], [], 2], + [100, [self::USER_ID], [], 100, [], [self::GROUP_ID], 1], + + // group+user vs group + [100, [], [self::GROUP_ID2], 100, [self::USER_ID], [self::GROUP_ID], 2], + [100, [self::USER_ID], [self::GROUP_ID], 100, [], [self::GROUP_ID2], 1], + + // user vs 'all' (higher priority) + [200, [], [], 100, [self::USER_ID], [], 2], + [100, [self::USER_ID], [], 200, [], [], 1], + + // group vs group (higher priority) + [100, [], [self::GROUP_ID2], 200, [], [self::GROUP_ID], 2], + [200, [], [self::GROUP_ID], 100, [], [self::GROUP_ID2], 1], + ]; + } + + /** + * @dataProvider getUniqueStoragesProvider + */ + public function testGetUniqueStorages( + $priority1, $applicableUsers1, $applicableGroups1, + $priority2, $applicableUsers2, $applicableGroups2, + $expectedPrecedence + ) { + $backend = $this->backendService->getBackend('identifier:\OCA\Files_External\Lib\Backend\SMB'); + $authMechanism = $this->backendService->getAuthMechanism('identifier:\Auth\Mechanism'); + + $storage1 = new StorageConfig(); + $storage1->setMountPoint('mountpoint'); + $storage1->setBackend($backend); + $storage1->setAuthMechanism($authMechanism); + $storage1->setBackendOptions(['password' => 'testPassword']); + $storage1->setPriority($priority1); + $storage1->setApplicableUsers($applicableUsers1); + $storage1->setApplicableGroups($applicableGroups1); + + $storage1 = $this->globalStoragesService->addStorage($storage1); + + $storage2 = new StorageConfig(); + $storage2->setMountPoint('mountpoint'); + $storage2->setBackend($backend); + $storage2->setAuthMechanism($authMechanism); + $storage2->setBackendOptions(['password' => 'testPassword']); + $storage2->setPriority($priority2); + $storage2->setApplicableUsers($applicableUsers2); + $storage2->setApplicableGroups($applicableGroups2); + + $storage2 = $this->globalStoragesService->addStorage($storage2); + + $storages = $this->service->getUniqueStorages(); + $this->assertCount(1, $storages); + + if ($expectedPrecedence === 1) { + $this->assertArrayHasKey($storage1->getID(), $storages); + } elseif ($expectedPrecedence === 2) { + $this->assertArrayHasKey($storage2->getID(), $storages); + } + } + public function testHooksAddStorage($a = null, $b = null, $c = null) { // we don't test this here $this->assertTrue(true); diff --git a/apps/files_sharing/api/server2server.php b/apps/files_sharing/api/server2server.php index 6ecaea20535..7d8860ad6ff 100644 --- a/apps/files_sharing/api/server2server.php +++ b/apps/files_sharing/api/server2server.php @@ -83,6 +83,8 @@ class Server2Server { Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($user, trim($name, '/')), '', array(), '', '', $shareWith, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_LOW); + /** + * FIXME $urlGenerator = \OC::$server->getURLGenerator(); $notificationManager = \OC::$server->getNotificationManager(); @@ -93,17 +95,18 @@ class Server2Server { ->setObject('remote_share', $remoteId) ->setSubject('remote_share', [$user, trim($name, '/')]); - $acceptAction = $notification->createAction(); - $acceptAction->setLabel('accept') - ->setLink($urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/remote_shares/' . $remoteId), 'POST'); $declineAction = $notification->createAction(); $declineAction->setLabel('decline') ->setLink($urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/remote_shares/' . $remoteId), 'DELETE'); + $notification->addAction($declineAction); - $notification->addAction($acceptAction) - ->addAction($declineAction); + $acceptAction = $notification->createAction(); + $acceptAction->setLabel('accept') + ->setLink($urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/remote_shares/' . $remoteId), 'POST'); + $notification->addAction($acceptAction); $notificationManager->notify($notification); + */ return new \OC_OCS_Result(); } catch (\Exception $e) { diff --git a/apps/files_sharing/api/sharees.php b/apps/files_sharing/api/sharees.php index 924a9dd1cd7..9e324078dad 100644 --- a/apps/files_sharing/api/sharees.php +++ b/apps/files_sharing/api/sharees.php @@ -20,6 +20,7 @@ */ namespace OCA\Files_Sharing\API; +use OCP\AppFramework\Http; use OCP\Contacts\IManager; use OCP\IGroup; use OCP\IGroupManager; @@ -291,8 +292,15 @@ class Sharees { public function search() { $search = isset($_GET['search']) ? (string) $_GET['search'] : ''; $itemType = isset($_GET['itemType']) ? (string) $_GET['itemType'] : null; - $page = !empty($_GET['page']) ? max(1, (int) $_GET['page']) : 1; - $perPage = !empty($_GET['perPage']) ? max(1, (int) $_GET['perPage']) : 200; + $page = isset($_GET['page']) ? (int) $_GET['page'] : 1; + $perPage = isset($_GET['perPage']) ? (int) $_GET['perPage'] : 200; + + if ($perPage <= 0) { + return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Invalid perPage argument'); + } + if ($page <= 0) { + return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Invalid page'); + } $shareTypes = [ Share::SHARE_TYPE_USER, @@ -348,7 +356,7 @@ class Sharees { protected function searchSharees($search, $itemType, array $shareTypes, $page, $perPage) { // Verify arguments if ($itemType === null) { - return new \OC_OCS_Result(null, 400, 'missing itemType'); + return new \OC_OCS_Result(null, Http::STATUS_BAD_REQUEST, 'Missing itemType'); } // Get users diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 20f1b046d35..15c0b864b08 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -54,9 +54,18 @@ $application->setupPropagation(); \OCP\Share::registerBackend('file', 'OC_Share_Backend_File'); \OCP\Share::registerBackend('folder', 'OC_Share_Backend_Folder', 'file'); -\OCP\Util::addScript('files_sharing', 'share'); -\OCP\Util::addScript('files_sharing', 'external'); -\OCP\Util::addStyle('files_sharing', 'sharetabview'); +$eventDispatcher = \OC::$server->getEventDispatcher(); +$eventDispatcher->addListener( + 'OCA\Files::loadAdditionalScripts', + function() { + \OCP\Util::addScript('files_sharing', 'share'); + \OCP\Util::addScript('files_sharing', 'sharetabview'); + \OCP\Util::addScript('files_sharing', 'external'); + \OCP\Util::addStyle('files_sharing', 'sharetabview'); + } +); + +// \OCP\Util::addStyle('files_sharing', 'sharetabview'); \OC::$server->getActivityManager()->registerExtension(function() { return new \OCA\Files_Sharing\Activity( @@ -104,9 +113,12 @@ if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') { } } +/** + * FIXME $manager = \OC::$server->getNotificationManager(); $manager->registerNotifier(function() { return new \OCA\Files_Sharing\Notifier( \OC::$server->getL10NFactory() ); }); + */ diff --git a/apps/files_sharing/css/sharetabview.css b/apps/files_sharing/css/sharetabview.css index 42c9bee7173..fe7a1947502 100644 --- a/apps/files_sharing/css/sharetabview.css +++ b/apps/files_sharing/css/sharetabview.css @@ -1,3 +1,77 @@ .app-files .shareTabView { min-height: 100px; } + +.shareTabView .oneline { white-space: nowrap; } + +.shareTabView .shareWithLoading { + padding-left: 10px; + position: relative; + right: 30px; + top: 2px; +} + +.shareTabView .shareWithRemoteInfo { + padding: 11px 20px; +} + +.shareTabView label { + white-space: nowrap; +} + +.shareTabView input[type="checkbox"] { + margin: 0 3px 0 8px; + vertical-align: middle; +} + +.shareTabView input[type="text"], +.shareTabView input[type="password"] { + width: 94%; + margin-left: 0; +} +.shareTabView #shareWith { + width: 80%; +} + +.shareTabView form { + font-size: 100%; + margin-left: 0; + margin-right: 0; +} + +#shareWithList { + list-style-type: none; + padding: 0 0 16px; +} + +#shareWithList li { + padding-top: 5px; + padding-bottom: 5px; + font-weight: bold; + white-space: normal; +} + +#shareWithList .unshare img, #shareWithList .showCruds img { + vertical-align:text-bottom; /* properly align icons */ +} + +#shareWithList label input[type=checkbox]{ + margin-left: 0; + position: relative; +} +#shareWithList .username{ + padding-right: 8px; + white-space: nowrap; + text-overflow: ellipsis; + max-width: 254px; + display: inline-block; + overflow: hidden; + vertical-align: middle; +} +#shareWithList li label{ + margin-right: 8px; +} + +.shareTabView .icon-loading-small { + margin-left: -30px; +} diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index c124d390d04..5290dfbb7d1 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -79,7 +79,9 @@ $files = fileList.$fileList.find('tr'); } _.each($files, function(file) { - OCA.Sharing.Util.updateFileActionIcon($(file)); + var $tr = $(file); + var shareStatus = OC.Share.statuses[$tr.data('id')]; + OCA.Sharing.Util._updateFileActionIcon($tr, !!shareStatus, shareStatus && shareStatus.link); }); } @@ -104,71 +106,59 @@ permissions: OC.PERMISSION_SHARE, icon: OC.imagePath('core', 'actions/share'), type: OCA.Files.FileActions.TYPE_INLINE, - actionHandler: function(filename, context) { - var $tr = context.$file; - var itemType = 'file'; - if ($tr.data('type') === 'dir') { - itemType = 'folder'; - } - var possiblePermissions = $tr.data('share-permissions'); - if (_.isUndefined(possiblePermissions)) { - possiblePermissions = $tr.data('permissions'); - } - - var appendTo = $tr.find('td.filename'); - // Check if drop down is already visible for a different file - if (OC.Share.droppedDown) { - if ($tr.attr('data-id') !== $('#dropdown').attr('data-item-source')) { - OC.Share.hideDropDown(function () { - $tr.addClass('mouseOver'); - OC.Share.showDropDown(itemType, $tr.data('id'), appendTo, true, possiblePermissions, filename); - }); - } else { - OC.Share.hideDropDown(); - } - } else { - $tr.addClass('mouseOver'); - OC.Share.showDropDown(itemType, $tr.data('id'), appendTo, true, possiblePermissions, filename); - } - $('#dropdown').on('sharesChanged', function(ev) { - // files app current cannot show recipients on load, so we don't update the - // icon when changed for consistency - if (context.fileList.$el.closest('#app-content-files').length) { - return; - } - var recipients = _.pluck(ev.shares[OC.Share.SHARE_TYPE_USER], 'share_with_displayname'); - var groupRecipients = _.pluck(ev.shares[OC.Share.SHARE_TYPE_GROUP], 'share_with_displayname'); - recipients = recipients.concat(groupRecipients); - // note: we only update the data attribute because updateIcon() - // is called automatically after this event - if (recipients.length) { - $tr.attr('data-share-recipients', OCA.Sharing.Util.formatRecipients(recipients)); - } - else { - $tr.removeAttr('data-share-recipients'); - } - }); + actionHandler: function(fileName) { + fileList.showDetailsView(fileName, 'shareTabView'); } }); - OC.addScript('files_sharing', 'sharetabview').done(function() { - fileList.registerTabView(new OCA.Sharing.ShareTabView('shareTabView')); + var shareTab = new OCA.Sharing.ShareTabView('shareTabView'); + // detect changes and change the matching list entry + shareTab.on('sharesChanged', function(shareModel) { + var fileInfoModel = shareModel.fileInfoModel; + var $tr = fileList.findFileEl(fileInfoModel.get('name')); + OCA.Sharing.Util._updateFileListDataAttributes(fileList, $tr, shareModel); + if (!OCA.Sharing.Util._updateFileActionIcon($tr, shareModel.hasUserShares(), shareModel.hasLinkShare())) { + // remove icon, if applicable + OC.Share.markFileAsShared($tr, false, false); + } }); + fileList.registerTabView(shareTab); + }, + + /** + * Update file list data attributes + */ + _updateFileListDataAttributes: function(fileList, $tr, shareModel) { + // files app current cannot show recipients on load, so we don't update the + // icon when changed for consistency + if (fileList.id === 'files') { + return; + } + var recipients = _.pluck(shareModel.get('shares'), 'share_with_displayname'); + // note: we only update the data attribute because updateIcon() + if (recipients.length) { + $tr.attr('data-share-recipients', OCA.Sharing.Util.formatRecipients(recipients)); + } + else { + $tr.removeAttr('data-share-recipients'); + } }, /** * Update the file action share icon for the given file * * @param $tr file element of the file to update + * @param {bool} hasUserShares true if a user share exists + * @param {bool} hasLinkShare true if a link share exists + * + * @return {bool} true if the icon was set, false otherwise */ - updateFileActionIcon: function($tr) { + _updateFileActionIcon: function($tr, hasUserShares, hasLinkShare) { // if the statuses are loaded already, use them for the icon // (needed when scrolling to the next page) - var shareStatus = OC.Share.statuses[$tr.data('id')]; - if (shareStatus || $tr.attr('data-share-recipients') || $tr.attr('data-share-owner')) { + if (hasUserShares || hasLinkShare || $tr.attr('data-share-recipients') || $tr.attr('data-share-owner')) { var permissions = $tr.data('permissions'); - var hasLink = !!(shareStatus && shareStatus.link); - OC.Share.markFileAsShared($tr, true, hasLink); + OC.Share.markFileAsShared($tr, true, hasLinkShare); if ((permissions & OC.PERMISSION_SHARE) === 0 && $tr.attr('data-share-owner')) { // if no share action exists because the admin disabled sharing for this user // we create a share notification action to inform the user about files @@ -187,7 +177,9 @@ return $result; }); } + return true; } + return false; }, /** diff --git a/apps/files_sharing/js/sharetabview.js b/apps/files_sharing/js/sharetabview.js index ee572b747ea..e24320604fb 100644 --- a/apps/files_sharing/js/sharetabview.js +++ b/apps/files_sharing/js/sharetabview.js @@ -10,7 +10,9 @@ (function() { var TEMPLATE = - '<div><ul>{{#if owner}}<li>Owner: {{owner}}</li>{{/if}}</ul></div>'; + '<div>' + + '<div class="dialogContainer"></div>' + + '</div>'; /** * @memberof OCA.Sharing @@ -20,7 +22,12 @@ id: 'shareTabView', className: 'tab shareTabView', - _template: null, + template: function(params) { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template(params); + }, getLabel: function() { return t('files_sharing', 'Sharing'); @@ -30,23 +37,40 @@ * Renders this details view */ render: function() { - this.$el.empty(); - - if (!this._template) { - this._template = Handlebars.compile(TEMPLATE); + var self = this; + if (this._dialog) { + // remove/destroy older instance + this._dialog.model.off(); + this._dialog.remove(); + this._dialog = null; } if (this.model) { - console.log(this.model); - var owner = this.model.get('shareOwner'); - if (owner === OC.currentUser) { - owner = null; - } - this.$el.append(this._template({ - owner: owner - })); + this.$el.html(this.template()); + // TODO: the model should read these directly off the passed fileInfoModel + var attributes = { + itemType: this.model.isDirectory() ? 'folder' : 'file', + itemSource: this.model.get('id'), + possiblePermissions: this.model.get('sharePermissions') + }; + var configModel = new OC.Share.ShareConfigModel(); + var shareModel = new OC.Share.ShareItemModel(attributes, { + configModel: configModel, + fileInfoModel: this.model + }); + this._dialog = new OC.Share.ShareDialogView({ + configModel: configModel, + model: shareModel + }); + this.$el.find('.dialogContainer').append(this._dialog.$el); + this._dialog.render(); + this._dialog.model.fetch(); + this._dialog.model.on('change', function() { + self.trigger('sharesChanged', shareModel); + }); } else { + this.$el.empty(); // TODO: render placeholder text? } } diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index bb8480e2a35..f6b43cf4fa3 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -41,7 +41,6 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", "Shares" : "Sdílení", - "You received %s as a remote share from %s" : "Obdrželi jste %s nově nasdílená vzdáleně od %s ", "Accept" : "Přijmout", "Decline" : "Zamítnout", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index 677e982b6b0..f5822c627ae 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -39,7 +39,6 @@ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", "Shares" : "Sdílení", - "You received %s as a remote share from %s" : "Obdrželi jste %s nově nasdílená vzdáleně od %s ", "Accept" : "Přijmout", "Decline" : "Zamítnout", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index 87595f6cc56..7b54b361d8d 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -41,7 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", "You shared %1$s via link" : "Du delte %1$s via link", "Shares" : "Delt", - "You received %s as a remote share from %s" : "Du modtog %s som et ekstern deling fra %s", + "You received %2$s as a remote share from %1$s" : "Du modtog %2$s som en ekstern deling fra %1$s", "Accept" : "Acceptér", "Decline" : "Afvis", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med mig gennem min #ownCloud Federated Cloud ID, se %s", diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index c9ac959da2e..f430935e8bc 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -39,7 +39,7 @@ "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", "You shared %1$s via link" : "Du delte %1$s via link", "Shares" : "Delt", - "You received %s as a remote share from %s" : "Du modtog %s som et ekstern deling fra %s", + "You received %2$s as a remote share from %1$s" : "Du modtog %2$s som en ekstern deling fra %1$s", "Accept" : "Acceptér", "Decline" : "Afvis", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med mig gennem min #ownCloud Federated Cloud ID, se %s", diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index ef688424777..18ba9bd0d31 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -41,7 +41,6 @@ OC.L10N.register( "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", "Shares" : "Κοινόχρηστοι φάκελοι", - "You received %s as a remote share from %s" : "Λάβατε το %s ως απομακρυσμένο διαμοιρασμό από %s", "Accept" : "Αποδοχή", "Decline" : "Απόρριψη", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου, δείτε %s", diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 829ff61ceaa..f8e42195d0d 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -39,7 +39,6 @@ "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", "Shares" : "Κοινόχρηστοι φάκελοι", - "You received %s as a remote share from %s" : "Λάβατε το %s ως απομακρυσμένο διαμοιρασμό από %s", "Accept" : "Αποδοχή", "Decline" : "Απόρριψη", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου, δείτε %s", diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js index 396c4785537..060efce51dd 100644 --- a/apps/files_sharing/l10n/fi_FI.js +++ b/apps/files_sharing/l10n/fi_FI.js @@ -41,7 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", "Shares" : "Jaot", - "You received %s as a remote share from %s" : "Sait etäjaon %s käyttäjältä %s", + "You received %2$s as a remote share from %1$s" : "Sait kohteen %2$s etäjakona käyttäjältä %1$s", "Accept" : "Hyväksy", "Decline" : "Kieltäydy", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta, katso %s", diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json index 56d64c0e841..091f7aec81f 100644 --- a/apps/files_sharing/l10n/fi_FI.json +++ b/apps/files_sharing/l10n/fi_FI.json @@ -39,7 +39,7 @@ "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", "Shares" : "Jaot", - "You received %s as a remote share from %s" : "Sait etäjaon %s käyttäjältä %s", + "You received %2$s as a remote share from %1$s" : "Sait kohteen %2$s etäjakona käyttäjältä %1$s", "Accept" : "Hyväksy", "Decline" : "Kieltäydy", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta, katso %s", diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index a59409e008a..3942d18de03 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -42,6 +42,7 @@ OC.L10N.register( "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", "Shares" : "Partages", "Accept" : "Accepter", + "Decline" : "Refuser", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s", "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud", "This share is password-protected" : "Ce partage est protégé par un mot de passe", diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index 0bb6f2b1b9e..75b645ef259 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -40,6 +40,7 @@ "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", "Shares" : "Partages", "Accept" : "Accepter", + "Decline" : "Refuser", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s", "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud", "This share is password-protected" : "Ce partage est protégé par un mot de passe", diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js index c78bdce652d..3895a028be8 100644 --- a/apps/files_sharing/l10n/hu_HU.js +++ b/apps/files_sharing/l10n/hu_HU.js @@ -42,6 +42,7 @@ OC.L10N.register( "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", "Shares" : "Megosztások", "Accept" : "Elfogadás", + "Decline" : "Elutasítás", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s", "Share with me through my #ownCloud Federated Cloud ID" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével ", "This share is password-protected" : "Ez egy jelszóval védett megosztás", diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json index 22cc1422eb7..e9037d232b0 100644 --- a/apps/files_sharing/l10n/hu_HU.json +++ b/apps/files_sharing/l10n/hu_HU.json @@ -40,6 +40,7 @@ "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", "Shares" : "Megosztások", "Accept" : "Elfogadás", + "Decline" : "Elutasítás", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s", "Share with me through my #ownCloud Federated Cloud ID" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével ", "This share is password-protected" : "Ez egy jelszóval védett megosztás", diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index f0d9fc2aecb..d39d9e763f1 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -41,7 +41,6 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", "Shares" : "Dibagikan", - "You received %s as a remote share from %s" : "Anda menerima %s sebagai berbagi remote dari %s", "Accept" : "Terima", "Decline" : "Tolak", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index b14f4c43789..35b22b53346 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -39,7 +39,6 @@ "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", "Shares" : "Dibagikan", - "You received %s as a remote share from %s" : "Anda menerima %s sebagai berbagi remote dari %s", "Accept" : "Terima", "Decline" : "Tolak", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 9ddf9b5f385..0167ef4625d 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -41,7 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", "Shares" : "Condivisioni", - "You received %s as a remote share from %s" : "Hai ricevuto %s come condivisione remota da %s", + "You received %2$s as a remote share from %1$s" : "Hai ricevuto %2$s come condivisione remota da %1$s", "Accept" : "Accetta", "Decline" : "Rifiuta", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s", diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index 2ff7f2d13b5..ae26579572a 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -39,7 +39,7 @@ "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", "Shares" : "Condivisioni", - "You received %s as a remote share from %s" : "Hai ricevuto %s come condivisione remota da %s", + "You received %2$s as a remote share from %1$s" : "Hai ricevuto %2$s come condivisione remota da %1$s", "Accept" : "Accetta", "Decline" : "Rifiuta", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s", diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index d750f827797..e4b86b528f3 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -41,7 +41,6 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", "Shares" : "공유", - "You received %s as a remote share from %s" : "%1$s의 원격 공유로 %2$s을(를) 받았습니다", "Accept" : "수락", "Decline" : "거절", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index e9a169be4f7..383e5038f3c 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -39,7 +39,6 @@ "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", "Shares" : "공유", - "You received %s as a remote share from %s" : "%1$s의 원격 공유로 %2$s을(를) 받았습니다", "Accept" : "수락", "Decline" : "거절", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", diff --git a/apps/files_sharing/l10n/nb_NO.js b/apps/files_sharing/l10n/nb_NO.js index a83ce84d26d..b8b6c634959 100644 --- a/apps/files_sharing/l10n/nb_NO.js +++ b/apps/files_sharing/l10n/nb_NO.js @@ -41,7 +41,6 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", "You shared %1$s via link" : "Du delte %1$s via lenke", "Shares" : "Delinger", - "You received %s as a remote share from %s" : "Du mottok %s som en ekstern deling fra %s", "Accept" : "Aksepter", "Decline" : "Avslå", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s", diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json index 6eedd895f4f..9382119e5c4 100644 --- a/apps/files_sharing/l10n/nb_NO.json +++ b/apps/files_sharing/l10n/nb_NO.json @@ -39,7 +39,6 @@ "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", "You shared %1$s via link" : "Du delte %1$s via lenke", "Shares" : "Delinger", - "You received %s as a remote share from %s" : "Du mottok %s som en ekstern deling fra %s", "Accept" : "Aksepter", "Decline" : "Avslå", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s", diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index 7468819fda7..2ccddb5d9a7 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -41,7 +41,9 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "You shared %1$s via link" : "U deelde %1$s via link", "Shares" : "Gedeeld", + "You received %2$s as a remote share from %1$s" : "U ontving %2$s als een externe share van %1$s", "Accept" : "Accepteren", + "Decline" : "Afwijzen", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud federated Cloud ID, zie %s", "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud federated Cloud ID", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 57df2d5c155..53cd8954898 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -39,7 +39,9 @@ "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "You shared %1$s via link" : "U deelde %1$s via link", "Shares" : "Gedeeld", + "You received %2$s as a remote share from %1$s" : "U ontving %2$s als een externe share van %1$s", "Accept" : "Accepteren", + "Decline" : "Afwijzen", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud federated Cloud ID, zie %s", "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud federated Cloud ID", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index 35c9f970000..bb455487186 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -41,7 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", "You shared %1$s via link" : "Você compartilhou %1$s via link", "Shares" : "Compartilhamentos", - "You received %s as a remote share from %s" : "Você recebeu %s como um compartilhamento remoto de %s", + "You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s", "Accept" : "Aceitar", "Decline" : "Rejeitar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index ebb2a5a4cce..7db2b1f0494 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -39,7 +39,7 @@ "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", "You shared %1$s via link" : "Você compartilhou %1$s via link", "Shares" : "Compartilhamentos", - "You received %s as a remote share from %s" : "Você recebeu %s como um compartilhamento remoto de %s", + "You received %2$s as a remote share from %1$s" : "Você recebeu %2$s como um compartilhamento remoto de %1$s", "Accept" : "Aceitar", "Decline" : "Rejeitar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js index 677b4f24e21..4d596987963 100644 --- a/apps/files_sharing/l10n/sk_SK.js +++ b/apps/files_sharing/l10n/sk_SK.js @@ -42,6 +42,7 @@ OC.L10N.register( "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", "Shares" : "Zdieľanie", "Accept" : "Schváliť", + "Decline" : "Odmietnuť", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s", "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID", "This share is password-protected" : "Toto zdieľanie je chránené heslom", @@ -64,8 +65,10 @@ OC.L10N.register( "Open documentation" : "Otvoriť dokumentáciu", "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery", "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov", + "Federated Cloud" : "Združený Cloud", "Your Federated Cloud ID:" : "Vaše združené Cloud ID", "Share it:" : "Zdieľať:", + "Add to your website" : "Pridať na svoju webstránku", "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud", "HTML Code:" : "HTML kód:" }, diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json index f4f6cc3798b..e8468d1500e 100644 --- a/apps/files_sharing/l10n/sk_SK.json +++ b/apps/files_sharing/l10n/sk_SK.json @@ -40,6 +40,7 @@ "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", "Shares" : "Zdieľanie", "Accept" : "Schváliť", + "Decline" : "Odmietnuť", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s", "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID", "This share is password-protected" : "Toto zdieľanie je chránené heslom", @@ -62,8 +63,10 @@ "Open documentation" : "Otvoriť dokumentáciu", "Allow users on this server to send shares to other servers" : "Povoliť používateľom z tohoto servera posielať zdieľania na iné servery", "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov", + "Federated Cloud" : "Združený Cloud", "Your Federated Cloud ID:" : "Vaše združené Cloud ID", "Share it:" : "Zdieľať:", + "Add to your website" : "Pridať na svoju webstránku", "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud", "HTML Code:" : "HTML kód:" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js index 9db7c600102..07aa56dfe18 100644 --- a/apps/files_sharing/l10n/th_TH.js +++ b/apps/files_sharing/l10n/th_TH.js @@ -41,7 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s ถูกแชร์ %1$s กับคุณ", "You shared %1$s via link" : "คุณแชร์ %1$s ผ่านลิงค์", "Shares" : "แชร์", - "You received %s as a remote share from %s" : "คุณได้รับ %s โดยรีโมทแชร์จาก %s", + "You received %2$s as a remote share from %1$s" : "คุณได้รับรีโมทแชร์ %2$s จาก %1$s", "Accept" : "ยอมรับ", "Decline" : "ลดลง", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ สามารถดูได้ที่ %s", diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json index f630c062643..3edd0d18ab1 100644 --- a/apps/files_sharing/l10n/th_TH.json +++ b/apps/files_sharing/l10n/th_TH.json @@ -39,7 +39,7 @@ "%2$s shared %1$s with you" : "%2$s ถูกแชร์ %1$s กับคุณ", "You shared %1$s via link" : "คุณแชร์ %1$s ผ่านลิงค์", "Shares" : "แชร์", - "You received %s as a remote share from %s" : "คุณได้รับ %s โดยรีโมทแชร์จาก %s", + "You received %2$s as a remote share from %1$s" : "คุณได้รับรีโมทแชร์ %2$s จาก %1$s", "Accept" : "ยอมรับ", "Decline" : "ลดลง", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ สามารถดูได้ที่ %s", diff --git a/apps/files_sharing/lib/capabilities.php b/apps/files_sharing/lib/capabilities.php index ea71c47a05c..b24eb8d61f0 100644 --- a/apps/files_sharing/lib/capabilities.php +++ b/apps/files_sharing/lib/capabilities.php @@ -67,6 +67,13 @@ class Capabilities implements ICapability { $res['resharing'] = $this->config->getAppValue('core', 'shareapi_allow_resharing', 'yes') === 'yes'; + + //Federated sharing + $res['federation'] = [ + 'outgoing' => $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes', + 'incoming' => $this->config->getAppValue('files_sharing', 'incoming_server2server_share_enabled', 'yes') === 'yes' + ]; + return [ 'files_sharing' => $res, ]; diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php index 17142e95099..8552b2fbd34 100644 --- a/apps/files_sharing/lib/external/manager.php +++ b/apps/files_sharing/lib/external/manager.php @@ -214,7 +214,7 @@ class Manager { $acceptShare->execute(array(1, $mountPoint, $hash, $id, $this->uid)); $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'accept'); - $this->scrapNotification($share['remote_id']); + //FIXME $this->scrapNotification($share['remote_id']); return true; } @@ -237,7 +237,7 @@ class Manager { $removeShare->execute(array($id, $this->uid)); $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'decline'); - $this->scrapNotification($share['remote_id']); + //FIXME $this->scrapNotification($share['remote_id']); return true; } diff --git a/apps/files_sharing/lib/notifier.php b/apps/files_sharing/lib/notifier.php index cc2deb3f439..02765fcfd1c 100644 --- a/apps/files_sharing/lib/notifier.php +++ b/apps/files_sharing/lib/notifier.php @@ -55,7 +55,7 @@ class Notifier implements INotifier { case 'remote_share': $params = $notification->getSubjectParameters(); $notification->setParsedSubject( - (string) $l->t('You received %s as a remote share from %s', $params) + (string) $l->t('You received %2$s as a remote share from %1$s', $params) ); // Deal with the actions for a known subject diff --git a/apps/files_sharing/publicwebdav.php b/apps/files_sharing/publicwebdav.php index eec158dd4b6..773a15c888e 100644 --- a/apps/files_sharing/publicwebdav.php +++ b/apps/files_sharing/publicwebdav.php @@ -39,7 +39,8 @@ $serverFactory = new \OC\Connector\Sabre\ServerFactory( \OC::$server->getDatabaseConnection(), \OC::$server->getUserSession(), \OC::$server->getMountManager(), - \OC::$server->getTagManager() + \OC::$server->getTagManager(), + \OC::$server->getEventDispatcher() ); $requestUri = \OC::$server->getRequest()->getRequestUri(); diff --git a/apps/files_sharing/tests/api/shareestest.php b/apps/files_sharing/tests/api/shareestest.php index 1e28cb8ed5a..5c5d5b0d309 100644 --- a/apps/files_sharing/tests/api/shareestest.php +++ b/apps/files_sharing/tests/api/shareestest.php @@ -21,10 +21,9 @@ namespace OCA\Files_Sharing\Tests\API; -use Doctrine\DBAL\Connection; -use OC\Share\Constants; use OCA\Files_Sharing\API\Sharees; use OCA\Files_sharing\Tests\TestCase; +use OCP\AppFramework\Http; use OCP\Share; class ShareesTest extends TestCase { @@ -653,15 +652,6 @@ class ShareesTest extends TestCase { // Test pagination [[ - 'page' => 0, - ], '', true, '', null, $allTypes, 1, 200, false], - [[ - 'page' => '0', - ], '', true, '', null, $allTypes, 1, 200, false], - [[ - 'page' => -1, - ], '', true, '', null, $allTypes, 1, 200, false], - [[ 'page' => 1, ], '', true, '', null, $allTypes, 1, 200, false], [[ @@ -670,15 +660,6 @@ class ShareesTest extends TestCase { // Test perPage [[ - 'perPage' => 0, - ], '', true, '', null, $allTypes, 1, 200, false], - [[ - 'perPage' => '0', - ], '', true, '', null, $allTypes, 1, 200, false], - [[ - 'perPage' => -1, - ], '', true, '', null, $allTypes, 1, 1, false], - [[ 'perPage' => 1, ], '', true, '', null, $allTypes, 1, 1, false], [[ @@ -758,6 +739,75 @@ class ShareesTest extends TestCase { $_GET = $oldGet; } + public function dataSearchInvalid() { + return [ + // Test invalid pagination + [[ + 'page' => 0, + ], 'Invalid page'], + [[ + 'page' => '0', + ], 'Invalid page'], + [[ + 'page' => -1, + ], 'Invalid page'], + + // Test invalid perPage + [[ + 'perPage' => 0, + ], 'Invalid perPage argument'], + [[ + 'perPage' => '0', + ], 'Invalid perPage argument'], + [[ + 'perPage' => -1, + ], 'Invalid perPage argument'], + ]; + } + + /** + * @dataProvider dataSearchInvalid + * + * @param array $getData + * @param string $message + */ + public function testSearchInvalid($getData, $message) { + $oldGet = $_GET; + $_GET = $getData; + + $config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $config->expects($this->never()) + ->method('getAppValue'); + + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + ->setConstructorArgs([ + $this->groupManager, + $this->userManager, + $this->contactsManager, + $config, + $this->session, + $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock() + ]) + ->setMethods(array('searchSharees', 'isRemoteSharingAllowed')) + ->getMock(); + $sharees->expects($this->never()) + ->method('searchSharees'); + $sharees->expects($this->never()) + ->method('isRemoteSharingAllowed'); + + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ + $ocs = $sharees->search(); + $this->assertInstanceOf('\OC_OCS_Result', $ocs); + + $this->assertOCSError($ocs, $message); + + $_GET = $oldGet; + } + public function dataIsRemoteSharingAllowed() { return [ ['file', true], @@ -940,13 +990,7 @@ class ShareesTest extends TestCase { $ocs = $this->invokePrivate($this->sharees, 'searchSharees', ['', null, [], [], 0, 0, false]); $this->assertInstanceOf('\OC_OCS_Result', $ocs); - $this->assertSame(400, $ocs->getStatusCode(), 'Expected status code 400'); - $this->assertSame([], $ocs->getData(), 'Expected that no data is send'); - - $meta = $ocs->getMeta(); - $this->assertNotEmpty($meta); - $this->assertArrayHasKey('message', $meta); - $this->assertSame('missing itemType', $meta['message']); + $this->assertOCSError($ocs, 'Missing itemType'); } public function dataGetPaginationLink() { @@ -992,4 +1036,18 @@ class ShareesTest extends TestCase { $this->assertEquals($expected, $this->invokePrivate($this->sharees, 'isV2')); } + + /** + * @param \OC_OCS_Result $ocs + * @param string $message + */ + protected function assertOCSError(\OC_OCS_Result $ocs, $message) { + $this->assertSame(Http::STATUS_BAD_REQUEST, $ocs->getStatusCode(), 'Expected status code 400'); + $this->assertSame([], $ocs->getData(), 'Expected that no data is send'); + + $meta = $ocs->getMeta(); + $this->assertNotEmpty($meta); + $this->assertArrayHasKey('message', $meta); + $this->assertSame($message, $meta['message']); + } } diff --git a/apps/files_sharing/tests/capabilities.php b/apps/files_sharing/tests/capabilities.php index 5b9789ce324..f1a9626db9b 100644 --- a/apps/files_sharing/tests/capabilities.php +++ b/apps/files_sharing/tests/capabilities.php @@ -202,5 +202,40 @@ class FilesSharingCapabilitiesTest extends \Test\TestCase { $this->assertFalse($result['public']['upload']); } + public function testFederatedSharingIncomming() { + $map = [ + ['files_sharing', 'incoming_server2server_share_enabled', 'yes', 'yes'], + ]; + $result = $this->getResults($map); + $this->assertArrayHasKey('federation', $result); + $this->assertTrue($result['federation']['incoming']); + } + + public function testFederatedSharingNoIncomming() { + $map = [ + ['files_sharing', 'incoming_server2server_share_enabled', 'yes', 'no'], + ]; + $result = $this->getResults($map); + $this->assertArrayHasKey('federation', $result); + $this->assertFalse($result['federation']['incoming']); + } + + public function testFederatedSharingOutgoing() { + $map = [ + ['files_sharing', 'outgoing_server2server_share_enabled', 'yes', 'yes'], + ]; + $result = $this->getResults($map); + $this->assertArrayHasKey('federation', $result); + $this->assertTrue($result['federation']['outgoing']); + } + + public function testFederatedSharingNoOutgoing() { + $map = [ + ['files_sharing', 'outgoing_server2server_share_enabled', 'yes', 'no'], + ]; + $result = $this->getResults($map); + $this->assertArrayHasKey('federation', $result); + $this->assertFalse($result['federation']['outgoing']); + } } diff --git a/apps/files_sharing/tests/js/shareSpec.js b/apps/files_sharing/tests/js/shareSpec.js index b6368b901ee..96a96f1b814 100644 --- a/apps/files_sharing/tests/js/shareSpec.js +++ b/apps/files_sharing/tests/js/shareSpec.js @@ -97,7 +97,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); $action = $tr.find('.action-share'); - expect($action.hasClass('permanent')).toEqual(true); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder.svg'); expect($action.find('img').length).toEqual(1); @@ -116,7 +115,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); $action = $tr.find('.action-share'); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('Shared'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); @@ -137,7 +135,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); $action = $tr.find('.action-share'); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('Shared'); expect(OC.basename($action.find('img').attr('src'))).toEqual('public.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-public.svg'); @@ -158,7 +155,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); $action = $tr.find('.action-share'); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('User One'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); @@ -178,7 +174,6 @@ describe('OCA.Sharing.Util tests', function() { }]); $tr = fileList.$el.find('tbody tr:first'); $action = $tr.find('.action-share'); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Two'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); @@ -200,7 +195,6 @@ describe('OCA.Sharing.Util tests', function() { $tr = fileList.$el.find('tbody tr:first'); expect($tr.find('.action-share').length).toEqual(0); $action = $tr.find('.action-share-notification'); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('User One'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); expect(OC.basename(getImageUrl($tr.find('.filename .thumbnail')))).toEqual('folder-shared.svg'); @@ -225,7 +219,7 @@ describe('OCA.Sharing.Util tests', function() { }); }); describe('Share action', function() { - var showDropDownStub; + var shareTab; function makeDummyShareItem(displayName) { return { @@ -234,12 +228,35 @@ describe('OCA.Sharing.Util tests', function() { } beforeEach(function() { - showDropDownStub = sinon.stub(OC.Share, 'showDropDown', function() { - $('#testArea').append($('<div id="dropdown"></div>')); - }); + // make it look like not the "All files" list + fileList.id = 'test'; + shareTab = fileList._detailsView._tabViews[0]; }); afterEach(function() { - showDropDownStub.restore(); + shareTab = null; + }); + it('clicking share action opens sidebar and share tab', function() { + var showDetailsViewStub = sinon.stub(fileList, 'showDetailsView'); + + fileList.setFiles([{ + id: 1, + type: 'file', + name: 'One.txt', + path: '/subdir', + mimetype: 'text/plain', + size: 12, + permissions: OC.PERMISSION_ALL, + etag: 'abc' + }]); + + var $tr = fileList.$el.find('tr:first'); + $tr.find('.action-share').click(); + + expect(showDetailsViewStub.calledOnce).toEqual(true); + expect(showDetailsViewStub.getCall(0).args[0]).toEqual('One.txt'); + expect(showDetailsViewStub.getCall(0).args[1]).toEqual('shareTabView'); + + showDetailsViewStub.restore(); }); it('adds share icon after sharing a non-shared file', function() { var $action, $tr; @@ -257,24 +274,20 @@ describe('OCA.Sharing.Util tests', function() { $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); - expect($action.hasClass('permanent')).toEqual(true); - $tr.find('.action-share').click(); - expect(showDropDownStub.calledOnce).toEqual(true); - - // simulate what the dropdown does - var shares = {}; - OC.Share.itemShares[OC.Share.SHARE_TYPE_USER] = ['user1', 'user2']; - OC.Share.itemShares[OC.Share.SHARE_TYPE_GROUP] = ['group1', 'group2']; - shares[OC.Share.SHARE_TYPE_USER] = _.map(['User One', 'User Two'], makeDummyShareItem); - shares[OC.Share.SHARE_TYPE_GROUP] = _.map(['Group One', 'Group Two'], makeDummyShareItem); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: shares})); + // simulate updating shares + shareTab._dialog.model.set({ + shares: [ + {share_with_displayname: 'User One'}, + {share_with_displayname: 'User Two'}, + {share_with_displayname: 'Group One'}, + {share_with_displayname: 'Group Two'} + ] + }); expect($tr.attr('data-share-recipients')).toEqual('Group One, Group Two, User One, User Two'); - OC.Share.updateIcon('file', 1); - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('Shared with Group One, Group Two, User One, User Two'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); }); @@ -294,23 +307,19 @@ describe('OCA.Sharing.Util tests', function() { $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); - expect($action.hasClass('permanent')).toEqual(true); - $tr.find('.action-share').click(); - expect(showDropDownStub.calledOnce).toEqual(true); - - // simulate what the dropdown does - var shares = {}; - OC.Share.itemShares[OC.Share.SHARE_TYPE_USER] = ['user1', 'user2', 'user3']; - shares[OC.Share.SHARE_TYPE_USER] = _.map(['User One', 'User Two', 'User Three'], makeDummyShareItem); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: shares})); + // simulate updating shares + shareTab._dialog.model.set({ + shares: [ + {share_with_displayname: 'User One'}, + {share_with_displayname: 'User Two'}, + {share_with_displayname: 'User Three'} + ] + }); expect($tr.attr('data-share-recipients')).toEqual('User One, User Three, User Two'); - OC.Share.updateIcon('file', 1); - - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('Shared with User One, User Three, User Two'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); }); @@ -331,20 +340,14 @@ describe('OCA.Sharing.Util tests', function() { $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); - expect($action.hasClass('permanent')).toEqual(true); - $tr.find('.action-share').click(); - expect(showDropDownStub.calledOnce).toEqual(true); - - // simulate what the dropdown does - OC.Share.itemShares = {}; - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: {}})); + // simulate updating shares + shareTab._dialog.model.set({ + shares: [] + }); expect($tr.attr('data-share-recipients')).not.toBeDefined(); - - OC.Share.updateIcon('file', 1); - expect($action.hasClass('permanent')).toEqual(true); }); it('keep share text after updating reshare', function() { var $action, $tr; @@ -363,23 +366,15 @@ describe('OCA.Sharing.Util tests', function() { $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); - expect($action.hasClass('permanent')).toEqual(true); - $tr.find('.action-share').click(); - expect(showDropDownStub.calledOnce).toEqual(true); - - // simulate what the dropdown does - var shares = {}; - OC.Share.itemShares[OC.Share.SHARE_TYPE_USER] = ['user2']; - shares[OC.Share.SHARE_TYPE_USER] = _.map(['User Two'], makeDummyShareItem); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: shares})); + // simulate updating shares + shareTab._dialog.model.set({ + shares: [{share_with_displayname: 'User Two'}] + }); expect($tr.attr('data-share-recipients')).toEqual('User Two'); - OC.Share.updateIcon('file', 1); - - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('User One'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); }); @@ -401,21 +396,15 @@ describe('OCA.Sharing.Util tests', function() { $action = fileList.$el.find('tbody tr:first .action-share'); $tr = fileList.$el.find('tr:first'); - expect($action.hasClass('permanent')).toEqual(true); - $tr.find('.action-share').click(); - expect(showDropDownStub.calledOnce).toEqual(true); - - // simulate what the dropdown does - OC.Share.itemShares = {}; - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: {}})); + // simulate updating shares + shareTab._dialog.model.set({ + shares: [] + }); expect($tr.attr('data-share-recipients')).not.toBeDefined(); - OC.Share.updateIcon('file', 1); - - expect($action.hasClass('permanent')).toEqual(true); expect($action.find('>span').text().trim()).toEqual('User One'); expect(OC.basename($action.find('img').attr('src'))).toEqual('share.svg'); }); diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 967f2e73a34..eadc7c69a23 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -19,6 +19,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -OCP\Util::addStyle('files_versions', 'versions'); + +\OCP\Util::addStyle('files_versions', 'versions'); \OCA\Files_Versions\Hooks::connectHooks(); diff --git a/apps/files_versions/appinfo/application.php b/apps/files_versions/appinfo/application.php index bab36b48510..b61b03dab13 100644 --- a/apps/files_versions/appinfo/application.php +++ b/apps/files_versions/appinfo/application.php @@ -22,6 +22,7 @@ namespace OCA\Files_Versions\AppInfo; use OCP\AppFramework\App; +use OCA\Files_Versions\Expiration; class Application extends App { public function __construct(array $urlParams = array()) { @@ -33,5 +34,15 @@ class Application extends App { * Register capabilities */ $container->registerCapability('OCA\Files_Versions\Capabilities'); + + /* + * Register expiration + */ + $container->registerService('Expiration', function($c) { + return new Expiration( + $c->query('ServerContainer')->getConfig(), + $c->query('OCP\AppFramework\Utility\ITimeFactory') + ); + }); } } diff --git a/apps/files_versions/appinfo/install.php b/apps/files_versions/appinfo/install.php new file mode 100644 index 00000000000..d72ba2f56e5 --- /dev/null +++ b/apps/files_versions/appinfo/install.php @@ -0,0 +1,23 @@ +<?php +/** + * @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/> + * + */ + +// Cron job for deleting expired trash items +\OC::$server->getJobList()->add('OCA\Files_Versions\BackgroundJob\ExpireVersions'); diff --git a/apps/files_versions/appinfo/update.php b/apps/files_versions/appinfo/update.php index 524f9bd153f..687e5d3b5d4 100644 --- a/apps/files_versions/appinfo/update.php +++ b/apps/files_versions/appinfo/update.php @@ -24,3 +24,6 @@ $installedVersion=OCP\Config::getAppValue('files_versions', 'installed_version') if (version_compare($installedVersion, '1.0.4', '<')) { \OC_DB::dropTable("files_versions"); } + +// Cron job for deleting expired trash items +\OC::$server->getJobList()->add('OCA\Files_Versions\BackgroundJob\ExpireVersions'); diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/css/versions.css index ec0f0cc9896..b159de82ea3 100644 --- a/apps/files_versions/css/versions.css +++ b/apps/files_versions/css/versions.css @@ -13,9 +13,7 @@ } .versionsTabView li > * { - padding: 7px; - float: left; - vertical-align: top; + vertical-align: middle; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; filter: alpha(opacity=50); opacity: .5; @@ -23,7 +21,7 @@ .versionsTabView li > a, .versionsTabView li > span { - padding: 17px 7px; + padding: 15px 10px 11px; } .versionsTabView li > *:hover, @@ -43,16 +41,13 @@ opacity: 1; } -.versionsTabView .versionDate { +.versionsTabView .versiondate { min-width: 100px; - vertical-align: text-bottom; + vertical-align: super; } .versionsTabView .revertVersion { cursor: pointer; float: right; - max-width: 130px; - text-overflow: ellipsis; - overflow: hidden; + margin-right: -10px; } - diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/js/versionstabview.js index 1f84428e616..f6a6f037988 100644 --- a/apps/files_versions/js/versionstabview.js +++ b/apps/files_versions/js/versionstabview.js @@ -15,7 +15,7 @@ '<a href="{{downloadUrl}}" class="downloadVersion"><img src="{{downloadIconUrl}}" />' + '<span class="versiondate has-tooltip" title="{{formattedTimestamp}}">{{relativeTimestamp}}</span>' + '</a>' + - '<a href="#" class="revertVersion"><img src="{{revertIconUrl}}" />{{revertLabel}}</a>' + + '<a href="#" class="revertVersion" title="{{revertLabel}}"><img src="{{revertIconUrl}}" /></a>' + '</li>'; var TEMPLATE = @@ -195,4 +195,3 @@ OCA.Versions.VersionsTabView = VersionsTabView; })(); - diff --git a/apps/files_versions/l10n/ar.js b/apps/files_versions/l10n/ar.js index 81390bc50a9..40afe40221c 100644 --- a/apps/files_versions/l10n/ar.js +++ b/apps/files_versions/l10n/ar.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "غير قادر على الاستعادة : %s", "Versions" : "الإصدارات", "Failed to revert {file} to revision {timestamp}." : "فشل في استعادة {ملف} لنتقيح {الطابع الزمني}", - "More versions..." : "المزيد من الإصدارات", + "Restore" : "استعادة ", "No other versions available" : "لا توجد إصدارات أخرى متاحة", - "Restore" : "استعادة " + "More versions..." : "المزيد من الإصدارات" }, "nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/apps/files_versions/l10n/ar.json b/apps/files_versions/l10n/ar.json index 683df8a7c0e..03c743f039b 100644 --- a/apps/files_versions/l10n/ar.json +++ b/apps/files_versions/l10n/ar.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "غير قادر على الاستعادة : %s", "Versions" : "الإصدارات", "Failed to revert {file} to revision {timestamp}." : "فشل في استعادة {ملف} لنتقيح {الطابع الزمني}", - "More versions..." : "المزيد من الإصدارات", + "Restore" : "استعادة ", "No other versions available" : "لا توجد إصدارات أخرى متاحة", - "Restore" : "استعادة " + "More versions..." : "المزيد من الإصدارات" },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ast.js b/apps/files_versions/l10n/ast.js index 39f7ea7d58f..39c5fd98d42 100644 --- a/apps/files_versions/l10n/ast.js +++ b/apps/files_versions/l10n/ast.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nun pudo revertise: %s", "Versions" : "Versiones", "Failed to revert {file} to revision {timestamp}." : "Fallu al revertir {file} a la revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Restaurar", "No other versions available" : "Nun hai otres versiones disponibles", - "Restore" : "Restaurar" + "More versions..." : "Más versiones..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/ast.json b/apps/files_versions/l10n/ast.json index 720f02e6f63..6a545ffb94b 100644 --- a/apps/files_versions/l10n/ast.json +++ b/apps/files_versions/l10n/ast.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nun pudo revertise: %s", "Versions" : "Versiones", "Failed to revert {file} to revision {timestamp}." : "Fallu al revertir {file} a la revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Restaurar", "No other versions available" : "Nun hai otres versiones disponibles", - "Restore" : "Restaurar" + "More versions..." : "Más versiones..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/az.js b/apps/files_versions/l10n/az.js index ee6e86ef111..171cb31ab1a 100644 --- a/apps/files_versions/l10n/az.js +++ b/apps/files_versions/l10n/az.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Geri qaytarmaq olmur: %s", "Versions" : "Versiyaları", "Failed to revert {file} to revision {timestamp}." : "{timestamp} yenidən baxılması üçün {file} geri qaytarmaq mümkün olmadı.", - "More versions..." : "Əlavə versiyalar", + "Restore" : "Geri qaytar", "No other versions available" : "Başqa versiyalar mövcud deyil", - "Restore" : "Geri qaytar" + "More versions..." : "Əlavə versiyalar" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/az.json b/apps/files_versions/l10n/az.json index 9b38c19fdba..3f4e0275dd5 100644 --- a/apps/files_versions/l10n/az.json +++ b/apps/files_versions/l10n/az.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Geri qaytarmaq olmur: %s", "Versions" : "Versiyaları", "Failed to revert {file} to revision {timestamp}." : "{timestamp} yenidən baxılması üçün {file} geri qaytarmaq mümkün olmadı.", - "More versions..." : "Əlavə versiyalar", + "Restore" : "Geri qaytar", "No other versions available" : "Başqa versiyalar mövcud deyil", - "Restore" : "Geri qaytar" + "More versions..." : "Əlavə versiyalar" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/bg_BG.js b/apps/files_versions/l10n/bg_BG.js index 6ea5387eec2..cea297b6974 100644 --- a/apps/files_versions/l10n/bg_BG.js +++ b/apps/files_versions/l10n/bg_BG.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Грешка при връщане: %s", "Versions" : "Версии", "Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.", - "More versions..." : "Още версии...", + "Restore" : "Възтановяви", "No other versions available" : "Няма други налични версии", - "Restore" : "Възтановяви" + "More versions..." : "Още версии..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/bg_BG.json b/apps/files_versions/l10n/bg_BG.json index 3d8060a22f1..826c7136d1a 100644 --- a/apps/files_versions/l10n/bg_BG.json +++ b/apps/files_versions/l10n/bg_BG.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Грешка при връщане: %s", "Versions" : "Версии", "Failed to revert {file} to revision {timestamp}." : "Грешка при връщане на {file} към версия {timestamp}.", - "More versions..." : "Още версии...", + "Restore" : "Възтановяви", "No other versions available" : "Няма други налични версии", - "Restore" : "Възтановяви" + "More versions..." : "Още версии..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/bn_BD.js b/apps/files_versions/l10n/bn_BD.js index 4e3f8be76bb..e92e84268c1 100644 --- a/apps/files_versions/l10n/bn_BD.js +++ b/apps/files_versions/l10n/bn_BD.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "ফিরে যাওয়া গেলনা: %s", "Versions" : "সংষ্করন", "Failed to revert {file} to revision {timestamp}." : " {file} সংশোধিত {timestamp} এ ফিরে যেতে ব্যার্থ হলো।", - "More versions..." : "আরো সংষ্করণ....", + "Restore" : "ফিরিয়ে দাও", "No other versions available" : "আর কোন সংষ্করণ প্রাপ্তব্য নয়", - "Restore" : "ফিরিয়ে দাও" + "More versions..." : "আরো সংষ্করণ...." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/bn_BD.json b/apps/files_versions/l10n/bn_BD.json index 4ab5756e011..ec8aa74e18b 100644 --- a/apps/files_versions/l10n/bn_BD.json +++ b/apps/files_versions/l10n/bn_BD.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "ফিরে যাওয়া গেলনা: %s", "Versions" : "সংষ্করন", "Failed to revert {file} to revision {timestamp}." : " {file} সংশোধিত {timestamp} এ ফিরে যেতে ব্যার্থ হলো।", - "More versions..." : "আরো সংষ্করণ....", + "Restore" : "ফিরিয়ে দাও", "No other versions available" : "আর কোন সংষ্করণ প্রাপ্তব্য নয়", - "Restore" : "ফিরিয়ে দাও" + "More versions..." : "আরো সংষ্করণ...." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/bn_IN.js b/apps/files_versions/l10n/bn_IN.js index f2985aa4afb..34fce5d5662 100644 --- a/apps/files_versions/l10n/bn_IN.js +++ b/apps/files_versions/l10n/bn_IN.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "প্রত্যাবর্তন করা যায়নি: %s", "Versions" : "সংস্করণ", "Failed to revert {file} to revision {timestamp}." : "{ফাইল} প্রত্যাবর্তন থেকে পুনর্বিবেচনা {টাইমস্ট্যাম্প} করতে ব্যর্থ।", - "More versions..." : "আরো সংস্করণ...", + "Restore" : "পুনরুদ্ধার", "No other versions available" : "আর কোন সংস্করণ পাওয়া যাচ্ছে না", - "Restore" : "পুনরুদ্ধার" + "More versions..." : "আরো সংস্করণ..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/bn_IN.json b/apps/files_versions/l10n/bn_IN.json index e973e1f074e..34deb365a1e 100644 --- a/apps/files_versions/l10n/bn_IN.json +++ b/apps/files_versions/l10n/bn_IN.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "প্রত্যাবর্তন করা যায়নি: %s", "Versions" : "সংস্করণ", "Failed to revert {file} to revision {timestamp}." : "{ফাইল} প্রত্যাবর্তন থেকে পুনর্বিবেচনা {টাইমস্ট্যাম্প} করতে ব্যর্থ।", - "More versions..." : "আরো সংস্করণ...", + "Restore" : "পুনরুদ্ধার", "No other versions available" : "আর কোন সংস্করণ পাওয়া যাচ্ছে না", - "Restore" : "পুনরুদ্ধার" + "More versions..." : "আরো সংস্করণ..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/bs.js b/apps/files_versions/l10n/bs.js index 21e9851b64c..fc207e1517c 100644 --- a/apps/files_versions/l10n/bs.js +++ b/apps/files_versions/l10n/bs.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nije moguće vratiti: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.", - "More versions..." : "Više verzija...", + "Restore" : "Obnovi", "No other versions available" : "Druge verzije su nedostupne", - "Restore" : "Obnovi" + "More versions..." : "Više verzija..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/bs.json b/apps/files_versions/l10n/bs.json index 1bc885614ed..50d72404f2f 100644 --- a/apps/files_versions/l10n/bs.json +++ b/apps/files_versions/l10n/bs.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nije moguće vratiti: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.", - "More versions..." : "Više verzija...", + "Restore" : "Obnovi", "No other versions available" : "Druge verzije su nedostupne", - "Restore" : "Obnovi" + "More versions..." : "Više verzija..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ca.js b/apps/files_versions/l10n/ca.js index da6bd06b98e..660db0d6f29 100644 --- a/apps/files_versions/l10n/ca.js +++ b/apps/files_versions/l10n/ca.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "No s'ha pogut revertir: %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Ha fallat en retornar {file} a la revisió {timestamp}", - "More versions..." : "Més versions...", + "Restore" : "Recupera", "No other versions available" : "No hi ha altres versions disponibles", - "Restore" : "Recupera" + "More versions..." : "Més versions..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/ca.json b/apps/files_versions/l10n/ca.json index 3638e7b6462..7cd2ddbcf51 100644 --- a/apps/files_versions/l10n/ca.json +++ b/apps/files_versions/l10n/ca.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "No s'ha pogut revertir: %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Ha fallat en retornar {file} a la revisió {timestamp}", - "More versions..." : "Més versions...", + "Restore" : "Recupera", "No other versions available" : "No hi ha altres versions disponibles", - "Restore" : "Recupera" + "More versions..." : "Més versions..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/cs_CZ.js b/apps/files_versions/l10n/cs_CZ.js index 0ba87af547f..bd7488fc543 100644 --- a/apps/files_versions/l10n/cs_CZ.js +++ b/apps/files_versions/l10n/cs_CZ.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nelze vrátit: %s", "Versions" : "Verze", "Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.", - "More versions..." : "Více verzí...", + "Restore" : "Obnovit", "No other versions available" : "Žádné další verze nejsou dostupné", - "Restore" : "Obnovit" + "More versions..." : "Více verzí..." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files_versions/l10n/cs_CZ.json b/apps/files_versions/l10n/cs_CZ.json index dc47f0b4cc8..6af93e2bd5e 100644 --- a/apps/files_versions/l10n/cs_CZ.json +++ b/apps/files_versions/l10n/cs_CZ.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nelze vrátit: %s", "Versions" : "Verze", "Failed to revert {file} to revision {timestamp}." : "Selhalo vrácení souboru {file} na verzi {timestamp}.", - "More versions..." : "Více verzí...", + "Restore" : "Obnovit", "No other versions available" : "Žádné další verze nejsou dostupné", - "Restore" : "Obnovit" + "More versions..." : "Více verzí..." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/da.js b/apps/files_versions/l10n/da.js index 22f7f66b45d..9d6748f5bdc 100644 --- a/apps/files_versions/l10n/da.js +++ b/apps/files_versions/l10n/da.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Kunne ikke genskabe: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunne ikke tilbagerulle {file} til den tidligere udgave: {timestamp}.", - "More versions..." : "Flere versioner...", + "Restore" : "Gendan", "No other versions available" : "Ingen andre versioner tilgængelig", - "Restore" : "Gendan" + "More versions..." : "Flere versioner..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/da.json b/apps/files_versions/l10n/da.json index 4dfa5dbeafa..5630e3aba82 100644 --- a/apps/files_versions/l10n/da.json +++ b/apps/files_versions/l10n/da.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Kunne ikke genskabe: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunne ikke tilbagerulle {file} til den tidligere udgave: {timestamp}.", - "More versions..." : "Flere versioner...", + "Restore" : "Gendan", "No other versions available" : "Ingen andre versioner tilgængelig", - "Restore" : "Gendan" + "More versions..." : "Flere versioner..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/de.js b/apps/files_versions/l10n/de.js index 012167a7329..285e42517b3 100644 --- a/apps/files_versions/l10n/de.js +++ b/apps/files_versions/l10n/de.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen…", + "Restore" : "Wiederherstellen", "No other versions available" : "Keine anderen Versionen verfügbar", - "Restore" : "Wiederherstellen" + "More versions..." : "Weitere Versionen…" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/de.json b/apps/files_versions/l10n/de.json index 74d7f066df8..a1f3c12649f 100644 --- a/apps/files_versions/l10n/de.json +++ b/apps/files_versions/l10n/de.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen…", + "Restore" : "Wiederherstellen", "No other versions available" : "Keine anderen Versionen verfügbar", - "Restore" : "Wiederherstellen" + "More versions..." : "Weitere Versionen…" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/de_DE.js b/apps/files_versions/l10n/de_DE.js index 012167a7329..285e42517b3 100644 --- a/apps/files_versions/l10n/de_DE.js +++ b/apps/files_versions/l10n/de_DE.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen…", + "Restore" : "Wiederherstellen", "No other versions available" : "Keine anderen Versionen verfügbar", - "Restore" : "Wiederherstellen" + "More versions..." : "Weitere Versionen…" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/de_DE.json b/apps/files_versions/l10n/de_DE.json index 74d7f066df8..a1f3c12649f 100644 --- a/apps/files_versions/l10n/de_DE.json +++ b/apps/files_versions/l10n/de_DE.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Konnte %s nicht zurücksetzen", "Versions" : "Versionen", "Failed to revert {file} to revision {timestamp}." : "Konnte {file} der Revision {timestamp} nicht rückgängig machen.", - "More versions..." : "Weitere Versionen…", + "Restore" : "Wiederherstellen", "No other versions available" : "Keine anderen Versionen verfügbar", - "Restore" : "Wiederherstellen" + "More versions..." : "Weitere Versionen…" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/el.js b/apps/files_versions/l10n/el.js index a54655bcba0..ecfc322628e 100644 --- a/apps/files_versions/l10n/el.js +++ b/apps/files_versions/l10n/el.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Αδυναμία επαναφοράς: %s", "Versions" : "Εκδόσεις", "Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.", - "More versions..." : "Περισσότερες εκδόσεις...", + "Restore" : "Επαναφορά", "No other versions available" : "Δεν υπάρχουν άλλες εκδόσεις διαθέσιμες", - "Restore" : "Επαναφορά" + "More versions..." : "Περισσότερες εκδόσεις..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/el.json b/apps/files_versions/l10n/el.json index 836fdce5535..88b2fc1b3f0 100644 --- a/apps/files_versions/l10n/el.json +++ b/apps/files_versions/l10n/el.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Αδυναμία επαναφοράς: %s", "Versions" : "Εκδόσεις", "Failed to revert {file} to revision {timestamp}." : "Αποτυχία επαναφοράς του {file} στην αναθεώρηση {timestamp}.", - "More versions..." : "Περισσότερες εκδόσεις...", + "Restore" : "Επαναφορά", "No other versions available" : "Δεν υπάρχουν άλλες εκδόσεις διαθέσιμες", - "Restore" : "Επαναφορά" + "More versions..." : "Περισσότερες εκδόσεις..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/en_GB.js b/apps/files_versions/l10n/en_GB.js index a8ca3729752..837b745b5fb 100644 --- a/apps/files_versions/l10n/en_GB.js +++ b/apps/files_versions/l10n/en_GB.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Could not revert: %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Failed to revert {file} to revision {timestamp}.", - "More versions..." : "More versions...", + "Restore" : "Restore", "No other versions available" : "No other versions available", - "Restore" : "Restore" + "More versions..." : "More versions..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/en_GB.json b/apps/files_versions/l10n/en_GB.json index 8ae47df9fcb..84e55063f67 100644 --- a/apps/files_versions/l10n/en_GB.json +++ b/apps/files_versions/l10n/en_GB.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Could not revert: %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Failed to revert {file} to revision {timestamp}.", - "More versions..." : "More versions...", + "Restore" : "Restore", "No other versions available" : "No other versions available", - "Restore" : "Restore" + "More versions..." : "More versions..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/eo.js b/apps/files_versions/l10n/eo.js index 1695a84dbad..665f69bbbda 100644 --- a/apps/files_versions/l10n/eo.js +++ b/apps/files_versions/l10n/eo.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Ne eblas malfari: %s", "Versions" : "Versioj", "Failed to revert {file} to revision {timestamp}." : "Malsukcesis returnigo de {file} al la revizio {timestamp}.", - "More versions..." : "Pli da versioj...", + "Restore" : "Restaŭri", "No other versions available" : "Ne disponeblas aliaj versioj", - "Restore" : "Restaŭri" + "More versions..." : "Pli da versioj..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/eo.json b/apps/files_versions/l10n/eo.json index 099bbf19365..db72c173bfc 100644 --- a/apps/files_versions/l10n/eo.json +++ b/apps/files_versions/l10n/eo.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Ne eblas malfari: %s", "Versions" : "Versioj", "Failed to revert {file} to revision {timestamp}." : "Malsukcesis returnigo de {file} al la revizio {timestamp}.", - "More versions..." : "Pli da versioj...", + "Restore" : "Restaŭri", "No other versions available" : "Ne disponeblas aliaj versioj", - "Restore" : "Restaŭri" + "More versions..." : "Pli da versioj..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/es.js b/apps/files_versions/l10n/es.js index f3d980489b0..54662b493da 100644 --- a/apps/files_versions/l10n/es.js +++ b/apps/files_versions/l10n/es.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "No se puede revertir: %s", "Versions" : "Revisiones", "Failed to revert {file} to revision {timestamp}." : "No se ha podido revertir {archivo} a revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay otras versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/es.json b/apps/files_versions/l10n/es.json index 7c395cbbb2e..692f890a880 100644 --- a/apps/files_versions/l10n/es.json +++ b/apps/files_versions/l10n/es.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "No se puede revertir: %s", "Versions" : "Revisiones", "Failed to revert {file} to revision {timestamp}." : "No se ha podido revertir {archivo} a revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay otras versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/es_AR.js b/apps/files_versions/l10n/es_AR.js index b471c76e1cc..49febb3dc6c 100644 --- a/apps/files_versions/l10n/es_AR.js +++ b/apps/files_versions/l10n/es_AR.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "No se pudo revertir: %s ", "Versions" : "Versiones", "Failed to revert {file} to revision {timestamp}." : "Falló al revertir {file} a la revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay más versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/es_AR.json b/apps/files_versions/l10n/es_AR.json index 806ecb2aa30..2177de87cb5 100644 --- a/apps/files_versions/l10n/es_AR.json +++ b/apps/files_versions/l10n/es_AR.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "No se pudo revertir: %s ", "Versions" : "Versiones", "Failed to revert {file} to revision {timestamp}." : "Falló al revertir {file} a la revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay más versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/es_MX.js b/apps/files_versions/l10n/es_MX.js index f3d980489b0..54662b493da 100644 --- a/apps/files_versions/l10n/es_MX.js +++ b/apps/files_versions/l10n/es_MX.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "No se puede revertir: %s", "Versions" : "Revisiones", "Failed to revert {file} to revision {timestamp}." : "No se ha podido revertir {archivo} a revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay otras versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/es_MX.json b/apps/files_versions/l10n/es_MX.json index 7c395cbbb2e..692f890a880 100644 --- a/apps/files_versions/l10n/es_MX.json +++ b/apps/files_versions/l10n/es_MX.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "No se puede revertir: %s", "Versions" : "Revisiones", "Failed to revert {file} to revision {timestamp}." : "No se ha podido revertir {archivo} a revisión {timestamp}.", - "More versions..." : "Más versiones...", + "Restore" : "Recuperar", "No other versions available" : "No hay otras versiones disponibles", - "Restore" : "Recuperar" + "More versions..." : "Más versiones..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/et_EE.js b/apps/files_versions/l10n/et_EE.js index 14a0dc1a095..fe0616deeec 100644 --- a/apps/files_versions/l10n/et_EE.js +++ b/apps/files_versions/l10n/et_EE.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Ei suuda taastada faili: %s", "Versions" : "Versioonid", "Failed to revert {file} to revision {timestamp}." : "Ebaõnnestus faili {file} taastamine revisjonile {timestamp}", - "More versions..." : "Rohkem versioone...", + "Restore" : "Taasta", "No other versions available" : "Muid versioone pole saadaval", - "Restore" : "Taasta" + "More versions..." : "Rohkem versioone..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/et_EE.json b/apps/files_versions/l10n/et_EE.json index a1762b7e15f..25f0b73c579 100644 --- a/apps/files_versions/l10n/et_EE.json +++ b/apps/files_versions/l10n/et_EE.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Ei suuda taastada faili: %s", "Versions" : "Versioonid", "Failed to revert {file} to revision {timestamp}." : "Ebaõnnestus faili {file} taastamine revisjonile {timestamp}", - "More versions..." : "Rohkem versioone...", + "Restore" : "Taasta", "No other versions available" : "Muid versioone pole saadaval", - "Restore" : "Taasta" + "More versions..." : "Rohkem versioone..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/eu.js b/apps/files_versions/l10n/eu.js index 0c92f18594c..35d1861de2c 100644 --- a/apps/files_versions/l10n/eu.js +++ b/apps/files_versions/l10n/eu.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Ezin izan da leheneratu: %s", "Versions" : "Bertsioak", "Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.", - "More versions..." : "Bertsio gehiago...", + "Restore" : "Berrezarri", "No other versions available" : "Ez dago bertsio gehiago eskuragarri", - "Restore" : "Berrezarri" + "More versions..." : "Bertsio gehiago..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/eu.json b/apps/files_versions/l10n/eu.json index acb9e78e7f7..3bd3c0dc7b7 100644 --- a/apps/files_versions/l10n/eu.json +++ b/apps/files_versions/l10n/eu.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Ezin izan da leheneratu: %s", "Versions" : "Bertsioak", "Failed to revert {file} to revision {timestamp}." : "Errore bat izan da {fitxategia} {timestamp} bertsiora leheneratzean.", - "More versions..." : "Bertsio gehiago...", + "Restore" : "Berrezarri", "No other versions available" : "Ez dago bertsio gehiago eskuragarri", - "Restore" : "Berrezarri" + "More versions..." : "Bertsio gehiago..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/fa.js b/apps/files_versions/l10n/fa.js index fda05b61e5d..33ef48a870a 100644 --- a/apps/files_versions/l10n/fa.js +++ b/apps/files_versions/l10n/fa.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "بازگردانی امکان ناپذیر است: %s", "Versions" : "نسخه ها", "Failed to revert {file} to revision {timestamp}." : "برگرداندن {file} به نسخه {timestamp} با شکست روبرو شد", - "More versions..." : "نسخه های بیشتر", + "Restore" : "بازیابی", "No other versions available" : "نسخه ی دیگری در دسترس نیست", - "Restore" : "بازیابی" + "More versions..." : "نسخه های بیشتر" }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/fa.json b/apps/files_versions/l10n/fa.json index 56e04f8f5c7..3dbbde955a3 100644 --- a/apps/files_versions/l10n/fa.json +++ b/apps/files_versions/l10n/fa.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "بازگردانی امکان ناپذیر است: %s", "Versions" : "نسخه ها", "Failed to revert {file} to revision {timestamp}." : "برگرداندن {file} به نسخه {timestamp} با شکست روبرو شد", - "More versions..." : "نسخه های بیشتر", + "Restore" : "بازیابی", "No other versions available" : "نسخه ی دیگری در دسترس نیست", - "Restore" : "بازیابی" + "More versions..." : "نسخه های بیشتر" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/fi_FI.js b/apps/files_versions/l10n/fi_FI.js index 32e3e28f0cc..e8e3f210500 100644 --- a/apps/files_versions/l10n/fi_FI.js +++ b/apps/files_versions/l10n/fi_FI.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Palautus epäonnistui: %s", "Versions" : "Versiot", "Failed to revert {file} to revision {timestamp}." : "Tiedoston {file} palautus versioon {timestamp} epäonnistui.", - "More versions..." : "Lisää versioita...", + "Restore" : "Palauta", "No other versions available" : "Ei muita versioita saatavilla", - "Restore" : "Palauta" + "More versions..." : "Lisää versioita..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/fi_FI.json b/apps/files_versions/l10n/fi_FI.json index 57d552b196b..910a7606374 100644 --- a/apps/files_versions/l10n/fi_FI.json +++ b/apps/files_versions/l10n/fi_FI.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Palautus epäonnistui: %s", "Versions" : "Versiot", "Failed to revert {file} to revision {timestamp}." : "Tiedoston {file} palautus versioon {timestamp} epäonnistui.", - "More versions..." : "Lisää versioita...", + "Restore" : "Palauta", "No other versions available" : "Ei muita versioita saatavilla", - "Restore" : "Palauta" + "More versions..." : "Lisää versioita..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/fr.js b/apps/files_versions/l10n/fr.js index be23bf846df..65a02256d79 100644 --- a/apps/files_versions/l10n/fr.js +++ b/apps/files_versions/l10n/fr.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Impossible de restaurer %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Échec du retour du fichier {file} à la révision {timestamp}.", - "More versions..." : "Plus de versions...", + "Restore" : "Restaurer", "No other versions available" : "Aucune autre version n'est disponible", - "Restore" : "Restaurer" + "More versions..." : "Plus de versions..." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_versions/l10n/fr.json b/apps/files_versions/l10n/fr.json index 22d39d84f5f..2c2664d01a0 100644 --- a/apps/files_versions/l10n/fr.json +++ b/apps/files_versions/l10n/fr.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Impossible de restaurer %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Échec du retour du fichier {file} à la révision {timestamp}.", - "More versions..." : "Plus de versions...", + "Restore" : "Restaurer", "No other versions available" : "Aucune autre version n'est disponible", - "Restore" : "Restaurer" + "More versions..." : "Plus de versions..." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/gl.js b/apps/files_versions/l10n/gl.js index e947351bd9d..673d3a91f14 100644 --- a/apps/files_versions/l10n/gl.js +++ b/apps/files_versions/l10n/gl.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Non foi posíbel reverter: %s", "Versions" : "Versións", "Failed to revert {file} to revision {timestamp}." : "Non foi posíbel reverter {file} á revisión {timestamp}.", - "More versions..." : "Máis versións...", + "Restore" : "Restabelecer", "No other versions available" : "Non hai outras versións dispoñíbeis", - "Restore" : "Restabelecer" + "More versions..." : "Máis versións..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/gl.json b/apps/files_versions/l10n/gl.json index 240c78d5fed..aaa6e528756 100644 --- a/apps/files_versions/l10n/gl.json +++ b/apps/files_versions/l10n/gl.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Non foi posíbel reverter: %s", "Versions" : "Versións", "Failed to revert {file} to revision {timestamp}." : "Non foi posíbel reverter {file} á revisión {timestamp}.", - "More versions..." : "Máis versións...", + "Restore" : "Restabelecer", "No other versions available" : "Non hai outras versións dispoñíbeis", - "Restore" : "Restabelecer" + "More versions..." : "Máis versións..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/hr.js b/apps/files_versions/l10n/hr.js index 15851fc3b12..5e3bd4d90d9 100644 --- a/apps/files_versions/l10n/hr.js +++ b/apps/files_versions/l10n/hr.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nije moguće vratiti: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.", - "More versions..." : "Više verzija...", + "Restore" : "Obnovite", "No other versions available" : "Nikakve druge verzije nisu dostupne", - "Restore" : "Obnovite" + "More versions..." : "Više verzija..." }, "nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/apps/files_versions/l10n/hr.json b/apps/files_versions/l10n/hr.json index 8197420150f..ada27dc792a 100644 --- a/apps/files_versions/l10n/hr.json +++ b/apps/files_versions/l10n/hr.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nije moguće vratiti: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Nije uspelo vraćanje {file} na reviziju {timestamp}.", - "More versions..." : "Više verzija...", + "Restore" : "Obnovite", "No other versions available" : "Nikakve druge verzije nisu dostupne", - "Restore" : "Obnovite" + "More versions..." : "Više verzija..." },"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/hu_HU.js b/apps/files_versions/l10n/hu_HU.js index 342e65d5faf..9eb8619375e 100644 --- a/apps/files_versions/l10n/hu_HU.js +++ b/apps/files_versions/l10n/hu_HU.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nem sikerült átállni a változatra: %s", "Versions" : "Az állományok korábbi változatai", "Failed to revert {file} to revision {timestamp}." : "Nem sikerült a(z) {file} állományt erre visszaállítani: {timestamp}.", - "More versions..." : "További változatok...", + "Restore" : "Visszaállítás", "No other versions available" : "Az állománynak nincs több változata", - "Restore" : "Visszaállítás" + "More versions..." : "További változatok..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/hu_HU.json b/apps/files_versions/l10n/hu_HU.json index 2b2be0f444e..3fb9deecf42 100644 --- a/apps/files_versions/l10n/hu_HU.json +++ b/apps/files_versions/l10n/hu_HU.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nem sikerült átállni a változatra: %s", "Versions" : "Az állományok korábbi változatai", "Failed to revert {file} to revision {timestamp}." : "Nem sikerült a(z) {file} állományt erre visszaállítani: {timestamp}.", - "More versions..." : "További változatok...", + "Restore" : "Visszaállítás", "No other versions available" : "Az állománynak nincs több változata", - "Restore" : "Visszaállítás" + "More versions..." : "További változatok..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/id.js b/apps/files_versions/l10n/id.js index 0e1111cf890..5d3579c3e62 100644 --- a/apps/files_versions/l10n/id.js +++ b/apps/files_versions/l10n/id.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Tidak dapat mengembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", - "More versions..." : "Versi lebih...", + "Restore" : "Pulihkan", "No other versions available" : "Tidak ada versi lain yang tersedia", - "Restore" : "Pulihkan" + "More versions..." : "Versi lebih..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/id.json b/apps/files_versions/l10n/id.json index e0b7e17bcc5..7ab5a1638f2 100644 --- a/apps/files_versions/l10n/id.json +++ b/apps/files_versions/l10n/id.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Tidak dapat mengembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal mengembalikan {file} ke revisi {timestamp}.", - "More versions..." : "Versi lebih...", + "Restore" : "Pulihkan", "No other versions available" : "Tidak ada versi lain yang tersedia", - "Restore" : "Pulihkan" + "More versions..." : "Versi lebih..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/is.js b/apps/files_versions/l10n/is.js index 69ce27ca3e2..ddd94c96c65 100644 --- a/apps/files_versions/l10n/is.js +++ b/apps/files_versions/l10n/is.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Gat ekki endurheimt: %s", "Versions" : "Útgáfur", "Failed to revert {file} to revision {timestamp}." : "Mistókst að endurheimta {file} útgáfu {timestamp}.", - "More versions..." : "Fleiri útgáfur ...", + "Restore" : "Endurheimta", "No other versions available" : "Engar aðrar útgáfur í boði", - "Restore" : "Endurheimta" + "More versions..." : "Fleiri útgáfur ..." }, "nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/apps/files_versions/l10n/is.json b/apps/files_versions/l10n/is.json index 3059c07e1f8..bf83a2db4fe 100644 --- a/apps/files_versions/l10n/is.json +++ b/apps/files_versions/l10n/is.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Gat ekki endurheimt: %s", "Versions" : "Útgáfur", "Failed to revert {file} to revision {timestamp}." : "Mistókst að endurheimta {file} útgáfu {timestamp}.", - "More versions..." : "Fleiri útgáfur ...", + "Restore" : "Endurheimta", "No other versions available" : "Engar aðrar útgáfur í boði", - "Restore" : "Endurheimta" + "More versions..." : "Fleiri útgáfur ..." },"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/it.js b/apps/files_versions/l10n/it.js index 45256577289..cb6248c3f42 100644 --- a/apps/files_versions/l10n/it.js +++ b/apps/files_versions/l10n/it.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Impossibile ripristinare: %s", "Versions" : "Versioni", "Failed to revert {file} to revision {timestamp}." : "Ripristino di {file} alla revisione {timestamp} non riuscito.", - "More versions..." : "Altre versioni...", + "Restore" : "Ripristina", "No other versions available" : "Non sono disponibili altre versioni", - "Restore" : "Ripristina" + "More versions..." : "Altre versioni..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/it.json b/apps/files_versions/l10n/it.json index af5d7bbcaba..f1479e7c114 100644 --- a/apps/files_versions/l10n/it.json +++ b/apps/files_versions/l10n/it.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Impossibile ripristinare: %s", "Versions" : "Versioni", "Failed to revert {file} to revision {timestamp}." : "Ripristino di {file} alla revisione {timestamp} non riuscito.", - "More versions..." : "Altre versioni...", + "Restore" : "Ripristina", "No other versions available" : "Non sono disponibili altre versioni", - "Restore" : "Ripristina" + "More versions..." : "Altre versioni..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ja.js b/apps/files_versions/l10n/ja.js index 1e4f26edc39..01fe310df71 100644 --- a/apps/files_versions/l10n/ja.js +++ b/apps/files_versions/l10n/ja.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "元に戻せませんでした: %s", "Versions" : "バージョン", "Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。", - "More versions..." : "他のバージョン...", + "Restore" : "復元", "No other versions available" : "利用可能なバージョンはありません", - "Restore" : "復元" + "More versions..." : "他のバージョン..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/ja.json b/apps/files_versions/l10n/ja.json index 7ee6b4d2c0e..aa634ca6bea 100644 --- a/apps/files_versions/l10n/ja.json +++ b/apps/files_versions/l10n/ja.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "元に戻せませんでした: %s", "Versions" : "バージョン", "Failed to revert {file} to revision {timestamp}." : "{file} を {timestamp} のリビジョンに戻すことができません。", - "More versions..." : "他のバージョン...", + "Restore" : "復元", "No other versions available" : "利用可能なバージョンはありません", - "Restore" : "復元" + "More versions..." : "他のバージョン..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/km.js b/apps/files_versions/l10n/km.js index b1edbcbb3cc..6b4f21e25ad 100644 --- a/apps/files_versions/l10n/km.js +++ b/apps/files_versions/l10n/km.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "មិនអាចត្រឡប់៖ %s", "Versions" : "កំណែ", "Failed to revert {file} to revision {timestamp}." : "មិនអាចត្រឡប់ {file} ទៅកំណែសម្រួល {timestamp} បានទេ។", - "More versions..." : "កំណែច្រើនទៀត...", + "Restore" : "ស្ដារមកវិញ", "No other versions available" : "មិនមានកំណែផ្សេងទៀតទេ", - "Restore" : "ស្ដារមកវិញ" + "More versions..." : "កំណែច្រើនទៀត..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/km.json b/apps/files_versions/l10n/km.json index 830170a2234..020b9e81ce5 100644 --- a/apps/files_versions/l10n/km.json +++ b/apps/files_versions/l10n/km.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "មិនអាចត្រឡប់៖ %s", "Versions" : "កំណែ", "Failed to revert {file} to revision {timestamp}." : "មិនអាចត្រឡប់ {file} ទៅកំណែសម្រួល {timestamp} បានទេ។", - "More versions..." : "កំណែច្រើនទៀត...", + "Restore" : "ស្ដារមកវិញ", "No other versions available" : "មិនមានកំណែផ្សេងទៀតទេ", - "Restore" : "ស្ដារមកវិញ" + "More versions..." : "កំណែច្រើនទៀត..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/kn.js b/apps/files_versions/l10n/kn.js index b394094989a..c7c255f5480 100644 --- a/apps/files_versions/l10n/kn.js +++ b/apps/files_versions/l10n/kn.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "ಹಿಂತಿರುಗಲಾಗಲಿಲ್ಲ: %s", "Versions" : "ಆವೃತ್ತಿಗಳು", "Failed to revert {file} to revision {timestamp}." : "{timestamp} ದ ಪರಿಷ್ಕರಣೆ ಇಂದ {file} ಕಡತವನ್ನು ಹಿಂದಿರುಗಿಸಲು ವಿಫಲವಾಗಿದೆ.", - "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ...", + "Restore" : "ಮರುಸ್ಥಾಪಿಸು", "No other versions available" : "ಇನ್ನಿತರೆ ಯಾವುದೇ ಆವೃತ್ತಿಗಳು ಲಭ್ಯವಿಲ್ಲ", - "Restore" : "ಮರುಸ್ಥಾಪಿಸು" + "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/kn.json b/apps/files_versions/l10n/kn.json index 17b61dd6bac..37f1d57c6bd 100644 --- a/apps/files_versions/l10n/kn.json +++ b/apps/files_versions/l10n/kn.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "ಹಿಂತಿರುಗಲಾಗಲಿಲ್ಲ: %s", "Versions" : "ಆವೃತ್ತಿಗಳು", "Failed to revert {file} to revision {timestamp}." : "{timestamp} ದ ಪರಿಷ್ಕರಣೆ ಇಂದ {file} ಕಡತವನ್ನು ಹಿಂದಿರುಗಿಸಲು ವಿಫಲವಾಗಿದೆ.", - "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ...", + "Restore" : "ಮರುಸ್ಥಾಪಿಸು", "No other versions available" : "ಇನ್ನಿತರೆ ಯಾವುದೇ ಆವೃತ್ತಿಗಳು ಲಭ್ಯವಿಲ್ಲ", - "Restore" : "ಮರುಸ್ಥಾಪಿಸು" + "More versions..." : "ಇನ್ನಷ್ಟು ಆವೃತ್ತಿಗಳು ..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ko.js b/apps/files_versions/l10n/ko.js index 9e125ec6bbf..dca7683d2da 100644 --- a/apps/files_versions/l10n/ko.js +++ b/apps/files_versions/l10n/ko.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "되돌릴 수 없습니다: %s", "Versions" : "버전", "Failed to revert {file} to revision {timestamp}." : "{file}을(를) 리비전 {timestamp}으(로) 되돌리는 데 실패하였습니다.", - "More versions..." : "더 많은 버전...", + "Restore" : "복원", "No other versions available" : "다른 버전을 사용할 수 없습니다", - "Restore" : "복원" + "More versions..." : "더 많은 버전..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/ko.json b/apps/files_versions/l10n/ko.json index 80ebb43912a..1665579ded1 100644 --- a/apps/files_versions/l10n/ko.json +++ b/apps/files_versions/l10n/ko.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "되돌릴 수 없습니다: %s", "Versions" : "버전", "Failed to revert {file} to revision {timestamp}." : "{file}을(를) 리비전 {timestamp}으(로) 되돌리는 데 실패하였습니다.", - "More versions..." : "더 많은 버전...", + "Restore" : "복원", "No other versions available" : "다른 버전을 사용할 수 없습니다", - "Restore" : "복원" + "More versions..." : "더 많은 버전..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/lb.js b/apps/files_versions/l10n/lb.js index 1678cad569d..e2ef61b370f 100644 --- a/apps/files_versions/l10n/lb.js +++ b/apps/files_versions/l10n/lb.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Konnt net zrécksetzen: %s", "Versions" : "Versiounen", "Failed to revert {file} to revision {timestamp}." : "Konnt {file} net op d'Versioun {timestamp} zrécksetzen.", - "More versions..." : "Méi Versiounen...", + "Restore" : "Zrécksetzen", "No other versions available" : "Keng aner Versiounen disponibel", - "Restore" : "Zrécksetzen" + "More versions..." : "Méi Versiounen..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/lb.json b/apps/files_versions/l10n/lb.json index e5fbb6c220c..8265a6bb552 100644 --- a/apps/files_versions/l10n/lb.json +++ b/apps/files_versions/l10n/lb.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Konnt net zrécksetzen: %s", "Versions" : "Versiounen", "Failed to revert {file} to revision {timestamp}." : "Konnt {file} net op d'Versioun {timestamp} zrécksetzen.", - "More versions..." : "Méi Versiounen...", + "Restore" : "Zrécksetzen", "No other versions available" : "Keng aner Versiounen disponibel", - "Restore" : "Zrécksetzen" + "More versions..." : "Méi Versiounen..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/lt_LT.js b/apps/files_versions/l10n/lt_LT.js index 987b914412a..25494614a96 100644 --- a/apps/files_versions/l10n/lt_LT.js +++ b/apps/files_versions/l10n/lt_LT.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nepavyko atstatyti: %s", "Versions" : "Versijos", "Failed to revert {file} to revision {timestamp}." : "Nepavyko atstatyti {file} į būseną {timestamp}.", - "More versions..." : "Daugiau versijų...", + "Restore" : "Atstatyti", "No other versions available" : "Nėra daugiau versijų", - "Restore" : "Atstatyti" + "More versions..." : "Daugiau versijų..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/lt_LT.json b/apps/files_versions/l10n/lt_LT.json index 5e30612dd33..3b3a6feb0f5 100644 --- a/apps/files_versions/l10n/lt_LT.json +++ b/apps/files_versions/l10n/lt_LT.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nepavyko atstatyti: %s", "Versions" : "Versijos", "Failed to revert {file} to revision {timestamp}." : "Nepavyko atstatyti {file} į būseną {timestamp}.", - "More versions..." : "Daugiau versijų...", + "Restore" : "Atstatyti", "No other versions available" : "Nėra daugiau versijų", - "Restore" : "Atstatyti" + "More versions..." : "Daugiau versijų..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/lv.js b/apps/files_versions/l10n/lv.js index 5ac3fa1ad87..9db45fe7b4a 100644 --- a/apps/files_versions/l10n/lv.js +++ b/apps/files_versions/l10n/lv.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", - "More versions..." : "Vairāk versiju...", + "Restore" : "Atjaunot", "No other versions available" : "Citas versijas nav pieejamas", - "Restore" : "Atjaunot" + "More versions..." : "Vairāk versiju..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/apps/files_versions/l10n/lv.json b/apps/files_versions/l10n/lv.json index f0912544887..f2d4c2fc316 100644 --- a/apps/files_versions/l10n/lv.json +++ b/apps/files_versions/l10n/lv.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nevarēja atgriezt — %s", "Versions" : "Versijas", "Failed to revert {file} to revision {timestamp}." : "Neizdevās atjaunot {file} no rediģējuma {timestamp} ", - "More versions..." : "Vairāk versiju...", + "Restore" : "Atjaunot", "No other versions available" : "Citas versijas nav pieejamas", - "Restore" : "Atjaunot" + "More versions..." : "Vairāk versiju..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/mk.js b/apps/files_versions/l10n/mk.js index fa295501320..32bd8ea5140 100644 --- a/apps/files_versions/l10n/mk.js +++ b/apps/files_versions/l10n/mk.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Не можев да го вратам: %s", "Versions" : "Верзии", "Failed to revert {file} to revision {timestamp}." : "Не успеав да го вратам {file} на ревизијата {timestamp}.", - "More versions..." : "Повеќе верзии...", + "Restore" : "Врати", "No other versions available" : "Не постојат други верзии", - "Restore" : "Врати" + "More versions..." : "Повеќе верзии..." }, "nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/apps/files_versions/l10n/mk.json b/apps/files_versions/l10n/mk.json index cdef37ecde3..2c7b148e89a 100644 --- a/apps/files_versions/l10n/mk.json +++ b/apps/files_versions/l10n/mk.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Не можев да го вратам: %s", "Versions" : "Верзии", "Failed to revert {file} to revision {timestamp}." : "Не успеав да го вратам {file} на ревизијата {timestamp}.", - "More versions..." : "Повеќе верзии...", + "Restore" : "Врати", "No other versions available" : "Не постојат други верзии", - "Restore" : "Врати" + "More versions..." : "Повеќе верзии..." },"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ms_MY.js b/apps/files_versions/l10n/ms_MY.js index f645a255caf..3edb05dd0ab 100644 --- a/apps/files_versions/l10n/ms_MY.js +++ b/apps/files_versions/l10n/ms_MY.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Tidak dapat kembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal kembalikan {file} ke semakan {timestamp}.", - "More versions..." : "Lagi versi...", + "Restore" : "Pulihkan", "No other versions available" : "Tiada lagi versi lain", - "Restore" : "Pulihkan" + "More versions..." : "Lagi versi..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/ms_MY.json b/apps/files_versions/l10n/ms_MY.json index 6ed0cd34131..3cd889353a9 100644 --- a/apps/files_versions/l10n/ms_MY.json +++ b/apps/files_versions/l10n/ms_MY.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Tidak dapat kembalikan: %s", "Versions" : "Versi", "Failed to revert {file} to revision {timestamp}." : "Gagal kembalikan {file} ke semakan {timestamp}.", - "More versions..." : "Lagi versi...", + "Restore" : "Pulihkan", "No other versions available" : "Tiada lagi versi lain", - "Restore" : "Pulihkan" + "More versions..." : "Lagi versi..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/nb_NO.js b/apps/files_versions/l10n/nb_NO.js index e3279e61bf8..8fd1fbc8409 100644 --- a/apps/files_versions/l10n/nb_NO.js +++ b/apps/files_versions/l10n/nb_NO.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Klarte ikke å tilbakeføre: %s", "Versions" : "Versjoner", "Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.", - "More versions..." : "Flere versjoner", + "Restore" : "Gjenopprett", "No other versions available" : "Det finnes ingen andre versjoner", - "Restore" : "Gjenopprett" + "More versions..." : "Flere versjoner" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/nb_NO.json b/apps/files_versions/l10n/nb_NO.json index 18c520014d1..c68a10c8728 100644 --- a/apps/files_versions/l10n/nb_NO.json +++ b/apps/files_versions/l10n/nb_NO.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Klarte ikke å tilbakeføre: %s", "Versions" : "Versjoner", "Failed to revert {file} to revision {timestamp}." : "Klarte ikke å tilbakeføre {file} til revisjon {timestamp}.", - "More versions..." : "Flere versjoner", + "Restore" : "Gjenopprett", "No other versions available" : "Det finnes ingen andre versjoner", - "Restore" : "Gjenopprett" + "More versions..." : "Flere versjoner" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/nl.js b/apps/files_versions/l10n/nl.js index 53de2706f35..14f7f06852a 100644 --- a/apps/files_versions/l10n/nl.js +++ b/apps/files_versions/l10n/nl.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Kon niet terugdraaien: %s", "Versions" : "Versies", "Failed to revert {file} to revision {timestamp}." : "Kon {file} niet terugdraaien naar revisie {timestamp}.", - "More versions..." : "Meer versies...", + "Restore" : "Herstellen", "No other versions available" : "Geen andere versies beschikbaar", - "Restore" : "Herstellen" + "More versions..." : "Meer versies..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/nl.json b/apps/files_versions/l10n/nl.json index b564b5e54b3..400b9d46730 100644 --- a/apps/files_versions/l10n/nl.json +++ b/apps/files_versions/l10n/nl.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Kon niet terugdraaien: %s", "Versions" : "Versies", "Failed to revert {file} to revision {timestamp}." : "Kon {file} niet terugdraaien naar revisie {timestamp}.", - "More versions..." : "Meer versies...", + "Restore" : "Herstellen", "No other versions available" : "Geen andere versies beschikbaar", - "Restore" : "Herstellen" + "More versions..." : "Meer versies..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/nn_NO.js b/apps/files_versions/l10n/nn_NO.js index feedf5a9449..f83901dfb6b 100644 --- a/apps/files_versions/l10n/nn_NO.js +++ b/apps/files_versions/l10n/nn_NO.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Klarte ikkje å tilbakestilla: %s", "Versions" : "Utgåver", "Failed to revert {file} to revision {timestamp}." : "Klarte ikkje å tilbakestilla {file} til utgåva {timestamp}.", - "More versions..." : "Fleire utgåver …", + "Restore" : "Gjenopprett", "No other versions available" : "Ingen andre utgåver tilgjengeleg", - "Restore" : "Gjenopprett" + "More versions..." : "Fleire utgåver …" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/nn_NO.json b/apps/files_versions/l10n/nn_NO.json index 96d410cfa04..7fb0b12986e 100644 --- a/apps/files_versions/l10n/nn_NO.json +++ b/apps/files_versions/l10n/nn_NO.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Klarte ikkje å tilbakestilla: %s", "Versions" : "Utgåver", "Failed to revert {file} to revision {timestamp}." : "Klarte ikkje å tilbakestilla {file} til utgåva {timestamp}.", - "More versions..." : "Fleire utgåver …", + "Restore" : "Gjenopprett", "No other versions available" : "Ingen andre utgåver tilgjengeleg", - "Restore" : "Gjenopprett" + "More versions..." : "Fleire utgåver …" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/oc.js b/apps/files_versions/l10n/oc.js index dbb8fa894cb..7dbb7a243fd 100644 --- a/apps/files_versions/l10n/oc.js +++ b/apps/files_versions/l10n/oc.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Impossible de restablir %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Fracàs del retorn del fichièr {file} a la revision {timestamp}.", - "More versions..." : "Mai de versions...", + "Restore" : "Restablir", "No other versions available" : "Cap d'autra version es pas disponibla", - "Restore" : "Restablir" + "More versions..." : "Mai de versions..." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_versions/l10n/oc.json b/apps/files_versions/l10n/oc.json index cf3ddd95d33..a85d32b650a 100644 --- a/apps/files_versions/l10n/oc.json +++ b/apps/files_versions/l10n/oc.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Impossible de restablir %s", "Versions" : "Versions", "Failed to revert {file} to revision {timestamp}." : "Fracàs del retorn del fichièr {file} a la revision {timestamp}.", - "More versions..." : "Mai de versions...", + "Restore" : "Restablir", "No other versions available" : "Cap d'autra version es pas disponibla", - "Restore" : "Restablir" + "More versions..." : "Mai de versions..." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/pl.js b/apps/files_versions/l10n/pl.js index dce5f500ef6..f93cfc4845e 100644 --- a/apps/files_versions/l10n/pl.js +++ b/apps/files_versions/l10n/pl.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nie można było przywrócić: %s", "Versions" : "Wersje", "Failed to revert {file} to revision {timestamp}." : "Nie udało się przywrócić {file} do wersji z {timestamp}.", - "More versions..." : "Więcej wersji...", + "Restore" : "Przywróć", "No other versions available" : "Nie są dostępne żadne inne wersje", - "Restore" : "Przywróć" + "More versions..." : "Więcej wersji..." }, "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/pl.json b/apps/files_versions/l10n/pl.json index 68860dd115a..974ba809b0a 100644 --- a/apps/files_versions/l10n/pl.json +++ b/apps/files_versions/l10n/pl.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nie można było przywrócić: %s", "Versions" : "Wersje", "Failed to revert {file} to revision {timestamp}." : "Nie udało się przywrócić {file} do wersji z {timestamp}.", - "More versions..." : "Więcej wersji...", + "Restore" : "Przywróć", "No other versions available" : "Nie są dostępne żadne inne wersje", - "Restore" : "Przywróć" + "More versions..." : "Więcej wersji..." },"pluralForm" :"nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/pt_BR.js b/apps/files_versions/l10n/pt_BR.js index 229d935be22..9c3bce45e9b 100644 --- a/apps/files_versions/l10n/pt_BR.js +++ b/apps/files_versions/l10n/pt_BR.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Impossível reverter: %s", "Versions" : "Versões", "Failed to revert {file} to revision {timestamp}." : "Falha ao reverter {file} para a revisão {timestamp}.", - "More versions..." : "Mais versões...", + "Restore" : "Restaurar", "No other versions available" : "Nenhuma outra versão disponível", - "Restore" : "Restaurar" + "More versions..." : "Mais versões..." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_versions/l10n/pt_BR.json b/apps/files_versions/l10n/pt_BR.json index 11225a32b9f..b54c27c6b46 100644 --- a/apps/files_versions/l10n/pt_BR.json +++ b/apps/files_versions/l10n/pt_BR.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Impossível reverter: %s", "Versions" : "Versões", "Failed to revert {file} to revision {timestamp}." : "Falha ao reverter {file} para a revisão {timestamp}.", - "More versions..." : "Mais versões...", + "Restore" : "Restaurar", "No other versions available" : "Nenhuma outra versão disponível", - "Restore" : "Restaurar" + "More versions..." : "Mais versões..." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/pt_PT.js b/apps/files_versions/l10n/pt_PT.js index 29ae6e3eef9..cb058c8b02e 100644 --- a/apps/files_versions/l10n/pt_PT.js +++ b/apps/files_versions/l10n/pt_PT.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Não foi possível reverter: %s", "Versions" : "Versões", "Failed to revert {file} to revision {timestamp}." : "Falhou a recuperação do ficheiro {file} para a revisão {timestamp}.", - "More versions..." : "Mais versões...", + "Restore" : "Restaurar", "No other versions available" : "Não existem versões mais antigas", - "Restore" : "Restaurar" + "More versions..." : "Mais versões..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/pt_PT.json b/apps/files_versions/l10n/pt_PT.json index 4ce27f4c748..7dc6828a72f 100644 --- a/apps/files_versions/l10n/pt_PT.json +++ b/apps/files_versions/l10n/pt_PT.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Não foi possível reverter: %s", "Versions" : "Versões", "Failed to revert {file} to revision {timestamp}." : "Falhou a recuperação do ficheiro {file} para a revisão {timestamp}.", - "More versions..." : "Mais versões...", + "Restore" : "Restaurar", "No other versions available" : "Não existem versões mais antigas", - "Restore" : "Restaurar" + "More versions..." : "Mais versões..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ro.js b/apps/files_versions/l10n/ro.js index 1c8d6382d9f..815c04e6519 100644 --- a/apps/files_versions/l10n/ro.js +++ b/apps/files_versions/l10n/ro.js @@ -3,8 +3,8 @@ OC.L10N.register( { "Could not revert: %s" : "Nu a putut reveni: %s", "Versions" : "Versiuni", - "More versions..." : "Mai multe versiuni...", + "Restore" : "Restabilire", "No other versions available" : "Nu există alte versiuni disponibile", - "Restore" : "Restabilire" + "More versions..." : "Mai multe versiuni..." }, "nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/apps/files_versions/l10n/ro.json b/apps/files_versions/l10n/ro.json index 3b2d0c795ab..78a4ecc4e7c 100644 --- a/apps/files_versions/l10n/ro.json +++ b/apps/files_versions/l10n/ro.json @@ -1,8 +1,8 @@ { "translations": { "Could not revert: %s" : "Nu a putut reveni: %s", "Versions" : "Versiuni", - "More versions..." : "Mai multe versiuni...", + "Restore" : "Restabilire", "No other versions available" : "Nu există alte versiuni disponibile", - "Restore" : "Restabilire" + "More versions..." : "Mai multe versiuni..." },"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/ru.js b/apps/files_versions/l10n/ru.js index 25248b9de5f..7809e4f1190 100644 --- a/apps/files_versions/l10n/ru.js +++ b/apps/files_versions/l10n/ru.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Невозможно откатить: %s", "Versions" : "Версии", "Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.", - "More versions..." : "Ещё версии...", + "Restore" : "Откатить", "No other versions available" : "Других версий не доступно", - "Restore" : "Откатить" + "More versions..." : "Ещё версии..." }, "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/apps/files_versions/l10n/ru.json b/apps/files_versions/l10n/ru.json index 738bb332d23..595d2504319 100644 --- a/apps/files_versions/l10n/ru.json +++ b/apps/files_versions/l10n/ru.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Невозможно откатить: %s", "Versions" : "Версии", "Failed to revert {file} to revision {timestamp}." : "Не удалось откатить {file} к ревизии {timestamp}.", - "More versions..." : "Ещё версии...", + "Restore" : "Откатить", "No other versions available" : "Других версий не доступно", - "Restore" : "Откатить" + "More versions..." : "Ещё версии..." },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sk_SK.js b/apps/files_versions/l10n/sk_SK.js index 1433f42f2b5..c4857784928 100644 --- a/apps/files_versions/l10n/sk_SK.js +++ b/apps/files_versions/l10n/sk_SK.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nemožno obnoviť: %s", "Versions" : "Verzie", "Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.", - "More versions..." : "Viac verzií...", + "Restore" : "Obnoviť", "No other versions available" : "Žiadne ďalšie verzie nie sú dostupné", - "Restore" : "Obnoviť" + "More versions..." : "Viac verzií..." }, "nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;"); diff --git a/apps/files_versions/l10n/sk_SK.json b/apps/files_versions/l10n/sk_SK.json index da8a7b02ca9..5ac48397699 100644 --- a/apps/files_versions/l10n/sk_SK.json +++ b/apps/files_versions/l10n/sk_SK.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nemožno obnoviť: %s", "Versions" : "Verzie", "Failed to revert {file} to revision {timestamp}." : "Zlyhalo obnovenie súboru {file} na verziu {timestamp}.", - "More versions..." : "Viac verzií...", + "Restore" : "Obnoviť", "No other versions available" : "Žiadne ďalšie verzie nie sú dostupné", - "Restore" : "Obnoviť" + "More versions..." : "Viac verzií..." },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sl.js b/apps/files_versions/l10n/sl.js index abbf4a803d8..e04e39a3c62 100644 --- a/apps/files_versions/l10n/sl.js +++ b/apps/files_versions/l10n/sl.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Ni mogoče povrniti: %s", "Versions" : "Različice", "Failed to revert {file} to revision {timestamp}." : "Povrnitev datoteke {file} na objavo {timestamp} je spodletelo.", - "More versions..." : "Več različic", + "Restore" : "Obnovi", "No other versions available" : "Ni drugih različic", - "Restore" : "Obnovi" + "More versions..." : "Več različic" }, "nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/apps/files_versions/l10n/sl.json b/apps/files_versions/l10n/sl.json index 581c9aab594..a66e94e425d 100644 --- a/apps/files_versions/l10n/sl.json +++ b/apps/files_versions/l10n/sl.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Ni mogoče povrniti: %s", "Versions" : "Različice", "Failed to revert {file} to revision {timestamp}." : "Povrnitev datoteke {file} na objavo {timestamp} je spodletelo.", - "More versions..." : "Več različic", + "Restore" : "Obnovi", "No other versions available" : "Ni drugih različic", - "Restore" : "Obnovi" + "More versions..." : "Več različic" },"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sq.js b/apps/files_versions/l10n/sq.js index 5330b36aad5..4c9f9487f28 100644 --- a/apps/files_versions/l10n/sq.js +++ b/apps/files_versions/l10n/sq.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Nuk mund të ktheje: %s", "Versions" : "Versioni", "Failed to revert {file} to revision {timestamp}." : "Dështoi në ktheje {skedar} të rishikimit {kohëstampe}.", - "More versions..." : "Versione m'shumë...", + "Restore" : "Rivendos", "No other versions available" : "Nuk ka versione të tjera në dispozicion", - "Restore" : "Rivendos" + "More versions..." : "Versione m'shumë..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/sq.json b/apps/files_versions/l10n/sq.json index 994772c8e3e..4e1c813d9bf 100644 --- a/apps/files_versions/l10n/sq.json +++ b/apps/files_versions/l10n/sq.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Nuk mund të ktheje: %s", "Versions" : "Versioni", "Failed to revert {file} to revision {timestamp}." : "Dështoi në ktheje {skedar} të rishikimit {kohëstampe}.", - "More versions..." : "Versione m'shumë...", + "Restore" : "Rivendos", "No other versions available" : "Nuk ka versione të tjera në dispozicion", - "Restore" : "Rivendos" + "More versions..." : "Versione m'shumë..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sr.js b/apps/files_versions/l10n/sr.js index 09b047a563a..9b8c97592cc 100644 --- a/apps/files_versions/l10n/sr.js +++ b/apps/files_versions/l10n/sr.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Не могу да вратим: %s", "Versions" : "Верзије", "Failed to revert {file} to revision {timestamp}." : "Не могу да вратим {file} на ревизију {timestamp}.", - "More versions..." : "Још верзија...", + "Restore" : "Врати", "No other versions available" : "Нема других верзија", - "Restore" : "Врати" + "More versions..." : "Још верзија..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/sr.json b/apps/files_versions/l10n/sr.json index 8dfb6c37748..73484b6f3d5 100644 --- a/apps/files_versions/l10n/sr.json +++ b/apps/files_versions/l10n/sr.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Не могу да вратим: %s", "Versions" : "Верзије", "Failed to revert {file} to revision {timestamp}." : "Не могу да вратим {file} на ревизију {timestamp}.", - "More versions..." : "Још верзија...", + "Restore" : "Врати", "No other versions available" : "Нема других верзија", - "Restore" : "Врати" + "More versions..." : "Још верзија..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sr@latin.js b/apps/files_versions/l10n/sr@latin.js index 7b6f750d1a6..627d70eb51b 100644 --- a/apps/files_versions/l10n/sr@latin.js +++ b/apps/files_versions/l10n/sr@latin.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Ne mogu da vratim: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Ne mogu da vratim {file} na reviziju {timestamp}.", - "More versions..." : "Još verzija...", + "Restore" : "Vrati", "No other versions available" : "Nema drugih verzija", - "Restore" : "Vrati" + "More versions..." : "Još verzija..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/sr@latin.json b/apps/files_versions/l10n/sr@latin.json index b7a0eb3b398..63fe55cf50e 100644 --- a/apps/files_versions/l10n/sr@latin.json +++ b/apps/files_versions/l10n/sr@latin.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Ne mogu da vratim: %s", "Versions" : "Verzije", "Failed to revert {file} to revision {timestamp}." : "Ne mogu da vratim {file} na reviziju {timestamp}.", - "More versions..." : "Još verzija...", + "Restore" : "Vrati", "No other versions available" : "Nema drugih verzija", - "Restore" : "Vrati" + "More versions..." : "Još verzija..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/sv.js b/apps/files_versions/l10n/sv.js index 6ff23cc5635..1b5d05f51ec 100644 --- a/apps/files_versions/l10n/sv.js +++ b/apps/files_versions/l10n/sv.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Kunde inte återställa: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till revision {timestamp}.", - "More versions..." : "Fler versioner...", + "Restore" : "Återskapa", "No other versions available" : "Inga andra versioner tillgängliga", - "Restore" : "Återskapa" + "More versions..." : "Fler versioner..." }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files_versions/l10n/sv.json b/apps/files_versions/l10n/sv.json index ccf056f6f0f..30589a25bb5 100644 --- a/apps/files_versions/l10n/sv.json +++ b/apps/files_versions/l10n/sv.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Kunde inte återställa: %s", "Versions" : "Versioner", "Failed to revert {file} to revision {timestamp}." : "Kunde inte återställa {file} till revision {timestamp}.", - "More versions..." : "Fler versioner...", + "Restore" : "Återskapa", "No other versions available" : "Inga andra versioner tillgängliga", - "Restore" : "Återskapa" + "More versions..." : "Fler versioner..." },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/th_TH.js b/apps/files_versions/l10n/th_TH.js index 81559c9cea3..97d0539ca55 100644 --- a/apps/files_versions/l10n/th_TH.js +++ b/apps/files_versions/l10n/th_TH.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "ไม่สามารถย้อนกลับ: %s", "Versions" : "รุ่น", "Failed to revert {file} to revision {timestamp}." : "{file} ล้มเหลวที่จะย้อนกลับ มีการแก้ไขเมื่อ {timestamp}", - "More versions..." : "รุ่นอื่นๆ ...", + "Restore" : "คืนค่า", "No other versions available" : "ไม่มีรุ่นอื่นๆ", - "Restore" : "คืนค่า" + "More versions..." : "รุ่นอื่นๆ ..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/th_TH.json b/apps/files_versions/l10n/th_TH.json index bd07d72a582..a67fa3e17e0 100644 --- a/apps/files_versions/l10n/th_TH.json +++ b/apps/files_versions/l10n/th_TH.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "ไม่สามารถย้อนกลับ: %s", "Versions" : "รุ่น", "Failed to revert {file} to revision {timestamp}." : "{file} ล้มเหลวที่จะย้อนกลับ มีการแก้ไขเมื่อ {timestamp}", - "More versions..." : "รุ่นอื่นๆ ...", + "Restore" : "คืนค่า", "No other versions available" : "ไม่มีรุ่นอื่นๆ", - "Restore" : "คืนค่า" + "More versions..." : "รุ่นอื่นๆ ..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/tr.js b/apps/files_versions/l10n/tr.js index ad248adc1dd..00d5cbe15d4 100644 --- a/apps/files_versions/l10n/tr.js +++ b/apps/files_versions/l10n/tr.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Geri alınamayan: %s", "Versions" : "Sürümler", "Failed to revert {file} to revision {timestamp}." : "{file} dosyası {timestamp} gözden geçirmesine geri alınamadı.", - "More versions..." : "Daha fazla sürüm...", + "Restore" : "Geri yükle", "No other versions available" : "Başka sürüm mevcut değil", - "Restore" : "Geri yükle" + "More versions..." : "Daha fazla sürüm..." }, "nplurals=2; plural=(n > 1);"); diff --git a/apps/files_versions/l10n/tr.json b/apps/files_versions/l10n/tr.json index 49731d545c6..73aab761203 100644 --- a/apps/files_versions/l10n/tr.json +++ b/apps/files_versions/l10n/tr.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Geri alınamayan: %s", "Versions" : "Sürümler", "Failed to revert {file} to revision {timestamp}." : "{file} dosyası {timestamp} gözden geçirmesine geri alınamadı.", - "More versions..." : "Daha fazla sürüm...", + "Restore" : "Geri yükle", "No other versions available" : "Başka sürüm mevcut değil", - "Restore" : "Geri yükle" + "More versions..." : "Daha fazla sürüm..." },"pluralForm" :"nplurals=2; plural=(n > 1);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/uk.js b/apps/files_versions/l10n/uk.js index 02947793545..75335f25e55 100644 --- a/apps/files_versions/l10n/uk.js +++ b/apps/files_versions/l10n/uk.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Не вдалося відновити: %s", "Versions" : "Версії", "Failed to revert {file} to revision {timestamp}." : "Не вдалося повернути {file} до ревізії {timestamp}.", - "More versions..." : "Більше версій ...", + "Restore" : "Відновити", "No other versions available" : "Інші версії недоступні", - "Restore" : "Відновити" + "More versions..." : "Більше версій ..." }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_versions/l10n/uk.json b/apps/files_versions/l10n/uk.json index 6571b1fe2b5..54a0d7a816f 100644 --- a/apps/files_versions/l10n/uk.json +++ b/apps/files_versions/l10n/uk.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Не вдалося відновити: %s", "Versions" : "Версії", "Failed to revert {file} to revision {timestamp}." : "Не вдалося повернути {file} до ревізії {timestamp}.", - "More versions..." : "Більше версій ...", + "Restore" : "Відновити", "No other versions available" : "Інші версії недоступні", - "Restore" : "Відновити" + "More versions..." : "Більше версій ..." },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/vi.js b/apps/files_versions/l10n/vi.js index 08f6c9bb25e..2d06f12d8c1 100644 --- a/apps/files_versions/l10n/vi.js +++ b/apps/files_versions/l10n/vi.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "Không thể khôi phục: %s", "Versions" : "Phiên bản", "Failed to revert {file} to revision {timestamp}." : "Thất bại khi trở lại {file} khi sử đổi {timestamp}.", - "More versions..." : "Nhiều phiên bản ...", + "Restore" : "Khôi phục", "No other versions available" : "Không có các phiên bản khác có sẵn", - "Restore" : "Khôi phục" + "More versions..." : "Nhiều phiên bản ..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/vi.json b/apps/files_versions/l10n/vi.json index 21b8a964fe0..e126e6e2d53 100644 --- a/apps/files_versions/l10n/vi.json +++ b/apps/files_versions/l10n/vi.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "Không thể khôi phục: %s", "Versions" : "Phiên bản", "Failed to revert {file} to revision {timestamp}." : "Thất bại khi trở lại {file} khi sử đổi {timestamp}.", - "More versions..." : "Nhiều phiên bản ...", + "Restore" : "Khôi phục", "No other versions available" : "Không có các phiên bản khác có sẵn", - "Restore" : "Khôi phục" + "More versions..." : "Nhiều phiên bản ..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/zh_CN.js b/apps/files_versions/l10n/zh_CN.js index 8c1ca7ad3ee..b94ec419d23 100644 --- a/apps/files_versions/l10n/zh_CN.js +++ b/apps/files_versions/l10n/zh_CN.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "无法恢复: %s", "Versions" : "版本", "Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。", - "More versions..." : "更多版本...", + "Restore" : "恢复", "No other versions available" : "无其他版本可用", - "Restore" : "恢复" + "More versions..." : "更多版本..." }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/zh_CN.json b/apps/files_versions/l10n/zh_CN.json index 4ffb09503b0..80f8624f9dd 100644 --- a/apps/files_versions/l10n/zh_CN.json +++ b/apps/files_versions/l10n/zh_CN.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "无法恢复: %s", "Versions" : "版本", "Failed to revert {file} to revision {timestamp}." : "无法恢复 {file} 到 {timestamp} 的版本。", - "More versions..." : "更多版本...", + "Restore" : "恢复", "No other versions available" : "无其他版本可用", - "Restore" : "恢复" + "More versions..." : "更多版本..." },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/l10n/zh_TW.js b/apps/files_versions/l10n/zh_TW.js index 8094658394e..72f086ff446 100644 --- a/apps/files_versions/l10n/zh_TW.js +++ b/apps/files_versions/l10n/zh_TW.js @@ -4,8 +4,8 @@ OC.L10N.register( "Could not revert: %s" : "無法還原:%s", "Versions" : "版本", "Failed to revert {file} to revision {timestamp}." : "無法還原檔案 {file} 至版本 {timestamp}", - "More versions..." : "更多版本…", + "Restore" : "復原", "No other versions available" : "沒有其他版本了", - "Restore" : "復原" + "More versions..." : "更多版本…" }, "nplurals=1; plural=0;"); diff --git a/apps/files_versions/l10n/zh_TW.json b/apps/files_versions/l10n/zh_TW.json index 0766f66976f..37506095c20 100644 --- a/apps/files_versions/l10n/zh_TW.json +++ b/apps/files_versions/l10n/zh_TW.json @@ -2,8 +2,8 @@ "Could not revert: %s" : "無法還原:%s", "Versions" : "版本", "Failed to revert {file} to revision {timestamp}." : "無法還原檔案 {file} 至版本 {timestamp}", - "More versions..." : "更多版本…", + "Restore" : "復原", "No other versions available" : "沒有其他版本了", - "Restore" : "復原" + "More versions..." : "更多版本…" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/apps/files_versions/lib/backgroundjob/expireversions.php b/apps/files_versions/lib/backgroundjob/expireversions.php new file mode 100644 index 00000000000..afdd5eed57a --- /dev/null +++ b/apps/files_versions/lib/backgroundjob/expireversions.php @@ -0,0 +1,98 @@ +<?php +/** + * @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 OCA\Files_Versions\BackgroundJob; + +use OCP\IUserManager; +use OCA\Files_Versions\AppInfo\Application; +use OCA\Files_Versions\Storage; +use OCA\Files_Versions\Expiration; + +class ExpireVersions extends \OC\BackgroundJob\TimedJob { + + const ITEMS_PER_SESSION = 1000; + + /** + * @var Expiration + */ + private $expiration; + + /** + * @var IUserManager + */ + private $userManager; + + public function __construct(IUserManager $userManager = null, Expiration $expiration = null) { + // Run once per 30 minutes + $this->setInterval(60 * 30); + + if (is_null($expiration) || is_null($userManager)) { + $this->fixDIForJobs(); + } else { + $this->expiration = $expiration; + $this->userManager = $userManager; + } + } + + protected function fixDIForJobs() { + $application = new Application(); + $this->expiration = $application->getContainer()->query('Expiration'); + $this->userManager = \OC::$server->getUserManager(); + } + + protected function run($argument) { + $maxAge = $this->expiration->getMaxAgeAsTimestamp(); + if (!$maxAge) { + return; + } + + $users = $this->userManager->search(''); + $isFSready = false; + foreach ($users as $user) { + $uid = $user->getUID(); + if (!$isFSready) { + if (!$this->setupFS($uid)) { + continue; + } + $isFSready = true; + } + Storage::expireOlderThanMaxForUser($uid); + } + + \OC_Util::tearDownFS(); + } + + /** + * Act on behalf on trash item owner + * @param string $user + * @return boolean + */ + private function setupFS($user){ + if (!$this->userManager->userExists($user)) { + return false; + } + + \OC_Util::tearDownFS(); + \OC_Util::setupFS($user); + + return true; + } +} diff --git a/apps/files_versions/lib/expiration.php b/apps/files_versions/lib/expiration.php new file mode 100644 index 00000000000..fba705251e9 --- /dev/null +++ b/apps/files_versions/lib/expiration.php @@ -0,0 +1,198 @@ +<?php +/** + * @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 OCA\Files_Versions; + +use \OCP\IConfig; +use \OCP\AppFramework\Utility\ITimeFactory; + +class Expiration { + + // how long do we keep files a version if no other value is defined in the config file (unit: days) + const NO_OBLIGATION = -1; + + /** @var ITimeFactory */ + private $timeFactory; + + /** @var string */ + private $retentionObligation; + + /** @var int */ + private $minAge; + + /** @var int */ + private $maxAge; + + /** @var bool */ + private $canPurgeToSaveSpace; + + public function __construct(IConfig $config,ITimeFactory $timeFactory){ + $this->timeFactory = $timeFactory; + $this->retentionObligation = $config->getSystemValue('versions_retention_obligation', 'auto'); + + if ($this->retentionObligation !== 'disabled') { + $this->parseRetentionObligation(); + } + } + + /** + * Is versions expiration enabled + * @return bool + */ + public function isEnabled(){ + return $this->retentionObligation !== 'disabled'; + } + + /** + * Is default expiration active + */ + public function shouldAutoExpire(){ + return $this->minAge === self::NO_OBLIGATION + || $this->maxAge === self::NO_OBLIGATION; + } + + /** + * Check if given timestamp in expiration range + * @param int $timestamp + * @param bool $quotaExceeded + * @return bool + */ + public function isExpired($timestamp, $quotaExceeded = false){ + // No expiration if disabled + if (!$this->isEnabled()) { + return false; + } + + // Purge to save space (if allowed) + if ($quotaExceeded && $this->canPurgeToSaveSpace) { + return true; + } + + $time = $this->timeFactory->getTime(); + // Never expire dates in future e.g. misconfiguration or negative time + // adjustment + if ($time<$timestamp) { + return false; + } + + // Purge as too old + if ($this->maxAge !== self::NO_OBLIGATION) { + $maxTimestamp = $time - ($this->maxAge * 86400); + $isOlderThanMax = $timestamp < $maxTimestamp; + } else { + $isOlderThanMax = false; + } + + if ($this->minAge !== self::NO_OBLIGATION) { + // older than Min obligation and we are running out of quota? + $minTimestamp = $time - ($this->minAge * 86400); + $isMinReached = ($timestamp < $minTimestamp) && $quotaExceeded; + } else { + $isMinReached = false; + } + + return $isOlderThanMax || $isMinReached; + } + + /** + * Get maximal retention obligation as a timestamp + * @return int + */ + public function getMaxAgeAsTimestamp(){ + $maxAge = false; + if ($this->isEnabled() && $this->maxAge !== self::NO_OBLIGATION) { + $time = $this->timeFactory->getTime(); + $maxAge = $time - ($this->maxAge * 86400); + } + return $maxAge; + } + + /** + * Read versions_retention_obligation, validate it + * and set private members accordingly + */ + private function parseRetentionObligation(){ + $splitValues = explode(',', $this->retentionObligation); + if (!isset($splitValues[0])) { + $minValue = 'auto'; + } else { + $minValue = trim($splitValues[0]); + } + + if (!isset($splitValues[1])) { + $maxValue = self::NO_OBLIGATION; + } else { + $maxValue = trim($splitValues[1]); + } + + $isValid = true; + // Validate + if (!ctype_digit($minValue) && $minValue !== 'auto') { + $isValid = false; + \OC::$server->getLogger()->warning( + $minValue . ' is not a valid value for minimal versions retention obligation. Check versions_retention_obligation in your config.php. Falling back to auto.', + ['app'=>'files_versions'] + ); + } + + if (!ctype_digit($maxValue) && $maxValue !== 'auto') { + $isValid = false; + \OC::$server->getLogger()->warning( + $maxValue . ' is not a valid value for maximal versions retention obligation. Check versions_retention_obligation in your config.php. Falling back to auto.', + ['app'=>'files_versions'] + ); + } + + if (!$isValid){ + $minValue = 'auto'; + $maxValue = 'auto'; + } + + + if ($minValue === 'auto' && $maxValue === 'auto') { + // Default: Delete anytime if space needed + $this->minAge = self::NO_OBLIGATION; + $this->maxAge = self::NO_OBLIGATION; + $this->canPurgeToSaveSpace = true; + } elseif ($minValue !== 'auto' && $maxValue === 'auto') { + // Keep for X days but delete anytime if space needed + $this->minAge = intval($minValue); + $this->maxAge = self::NO_OBLIGATION; + $this->canPurgeToSaveSpace = true; + } elseif ($minValue === 'auto' && $maxValue !== 'auto') { + // Delete anytime if space needed, Delete all older than max automatically + $this->minAge = self::NO_OBLIGATION; + $this->maxAge = intval($maxValue); + $this->canPurgeToSaveSpace = true; + } elseif ($minValue !== 'auto' && $maxValue !== 'auto') { + // Delete all older than max OR older than min if space needed + + // Max < Min as per https://github.com/owncloud/core/issues/16301 + if ($maxValue < $minValue) { + $maxValue = $minValue; + } + + $this->minAge = intval($minValue); + $this->maxAge = intval($maxValue); + $this->canPurgeToSaveSpace = false; + } + } +} diff --git a/apps/files_versions/lib/storage.php b/apps/files_versions/lib/storage.php index e0034f6165f..6aa58c55e9b 100644 --- a/apps/files_versions/lib/storage.php +++ b/apps/files_versions/lib/storage.php @@ -40,6 +40,7 @@ namespace OCA\Files_Versions; +use OCA\Files_Versions\AppInfo\Application; use OCA\Files_Versions\Command\Expire; class Storage { @@ -67,6 +68,9 @@ class Storage { //until the end one version per week 6 => array('intervalEndsAfter' => -1, 'step' => 604800), ); + + /** @var \OCA\Files_Versions\AppInfo\Application */ + private static $application; public static function getUidAndFilename($filename) { $uid = \OC\Files\Filesystem::getOwner($filename); @@ -400,6 +404,38 @@ class Storage { } /** + * Expire versions that older than max version retention time + * @param string $uid + */ + public static function expireOlderThanMaxForUser($uid){ + $expiration = self::getExpiration(); + $threshold = $expiration->getMaxAgeAsTimestamp(); + $versions = self::getAllVersions($uid); + if (!$threshold || !array_key_exists('all', $versions)) { + return; + } + + $toDelete = []; + foreach (array_reverse($versions['all']) as $key => $version) { + if (intval($version['version'])<$threshold) { + $toDelete[$key] = $version; + } else { + //Versions are sorted by time - nothing mo to iterate. + break; + } + } + + $view = new \OC\Files\View('/' . $uid . '/files_versions'); + if (!empty($toDelete)) { + foreach ($toDelete as $version) { + \OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $version['path'].'.v'.$version['version'])); + self::deleteVersion($view, $version['path'] . '.v' . $version['version']); + \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version'])); + } + } + } + + /** * translate a timestamp into a string like "5 days ago" * @param int $timestamp * @return string for example "5 days ago" @@ -479,10 +515,36 @@ class Storage { * get list of files we want to expire * @param array $versions list of versions * @param integer $time + * @param bool $quotaExceeded is versions storage limit reached * @return array containing the list of to deleted versions and the size of them */ - protected static function getExpireList($time, $versions) { + protected static function getExpireList($time, $versions, $quotaExceeded = false) { + $expiration = self::getExpiration(); + + if ($expiration->shouldAutoExpire()) { + list($toDelete, $size) = self::getAutoExpireList($time, $versions); + } else { + $size = 0; + $toDelete = []; // versions we want to delete + } + + foreach ($versions as $key => $version) { + if ($expiration->isExpired($version['version'], $quotaExceeded) && !isset($toDelete[$key])) { + $size += $version['size']; + $toDelete[$key] = $version['path'] . '.v' . $version['version']; + } + } + + return [$toDelete, $size]; + } + /** + * get list of files we want to expire + * @param array $versions list of versions + * @param integer $time + * @return array containing the list of to deleted versions and the size of them + */ + protected static function getAutoExpireList($time, $versions) { $size = 0; $toDelete = array(); // versions we want to delete @@ -529,7 +591,6 @@ class Storage { } return array($toDelete, $size); - } /** @@ -541,8 +602,12 @@ class Storage { * @param int $neededSpace requested versions size */ private static function scheduleExpire($uid, $fileName, $versionsSize = null, $neededSpace = 0) { - $command = new Expire($uid, $fileName, $versionsSize, $neededSpace); - \OC::$server->getCommandBus()->push($command); + // let the admin disable auto expire + $expiration = self::getExpiration(); + if ($expiration->isEnabled()) { + $command = new Expire($uid, $fileName, $versionsSize, $neededSpace); + \OC::$server->getCommandBus()->push($command); + } } /** @@ -555,7 +620,9 @@ class Storage { */ public static function expire($filename, $versionsSize = null, $offset = 0) { $config = \OC::$server->getConfig(); - if($config->getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { + $expiration = self::getExpiration(); + + if($config->getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' && $expiration->isEnabled()) { list($uid, $filename) = self::getUidAndFilename($filename); if (empty($filename)) { // file maybe renamed or deleted @@ -599,7 +666,7 @@ class Storage { $allVersions = Storage::getVersions($uid, $filename); $time = time(); - list($toDelete, $sizeOfDeletedVersions) = self::getExpireList($time, $allVersions); + list($toDelete, $sizeOfDeletedVersions) = self::getExpireList($time, $allVersions, $availableSpace <= 0); $availableSpace = $availableSpace + $sizeOfDeletedVersions; $versionsSize = $versionsSize - $sizeOfDeletedVersions; @@ -610,7 +677,7 @@ class Storage { $allVersions = $result['all']; foreach ($result['by_file'] as $versions) { - list($toDeleteNew, $size) = self::getExpireList($time, $versions); + list($toDeleteNew, $size) = self::getExpireList($time, $versions, $availableSpace <= 0); $toDelete = array_merge($toDelete, $toDeleteNew); $sizeOfDeletedVersions += $size; } @@ -672,4 +739,15 @@ class Storage { } } + /** + * Static workaround + * @return Expiration + */ + protected static function getExpiration(){ + if (is_null(self::$application)) { + self::$application = new Application(); + } + return self::$application->getContainer()->query('Expiration'); + } + } diff --git a/apps/files_versions/tests/expirationtest.php b/apps/files_versions/tests/expirationtest.php new file mode 100644 index 00000000000..54024b85b78 --- /dev/null +++ b/apps/files_versions/tests/expirationtest.php @@ -0,0 +1,204 @@ +<?php +/** + * @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 OCA\Files_Versions\Tests; + +use \OCA\Files_Versions\Expiration; + +class Expiration_Test extends \Test\TestCase { + const SECONDS_PER_DAY = 86400; //60*60*24 + + public function expirationData(){ + $today = 100*self::SECONDS_PER_DAY; + $back10Days = (100-10)*self::SECONDS_PER_DAY; + $back20Days = (100-20)*self::SECONDS_PER_DAY; + $back30Days = (100-30)*self::SECONDS_PER_DAY; + $back35Days = (100-35)*self::SECONDS_PER_DAY; + + // it should never happen, but who knows :/ + $ahead100Days = (100+100)*self::SECONDS_PER_DAY; + + return [ + // Expiration is disabled - always should return false + [ 'disabled', $today, $back10Days, false, false], + [ 'disabled', $today, $back10Days, true, false], + [ 'disabled', $today, $ahead100Days, true, false], + + // Default: expire in 30 days or earlier when quota requirements are met + [ 'auto', $today, $back10Days, false, false], + [ 'auto', $today, $back35Days, false, false], + [ 'auto', $today, $back10Days, true, true], + [ 'auto', $today, $back35Days, true, true], + [ 'auto', $today, $ahead100Days, true, true], + + // The same with 'auto' + [ 'auto, auto', $today, $back10Days, false, false], + [ 'auto, auto', $today, $back35Days, false, false], + [ 'auto, auto', $today, $back10Days, true, true], + [ 'auto, auto', $today, $back35Days, true, true], + + // Keep for 15 days but expire anytime if space needed + [ '15, auto', $today, $back10Days, false, false], + [ '15, auto', $today, $back20Days, false, false], + [ '15, auto', $today, $back10Days, true, true], + [ '15, auto', $today, $back20Days, true, true], + [ '15, auto', $today, $ahead100Days, true, true], + + // Expire anytime if space needed, Expire all older than max + [ 'auto, 15', $today, $back10Days, false, false], + [ 'auto, 15', $today, $back20Days, false, true], + [ 'auto, 15', $today, $back10Days, true, true], + [ 'auto, 15', $today, $back20Days, true, true], + [ 'auto, 15', $today, $ahead100Days, true, true], + + // Expire all older than max OR older than min if space needed + [ '15, 25', $today, $back10Days, false, false], + [ '15, 25', $today, $back20Days, false, false], + [ '15, 25', $today, $back30Days, false, true], + [ '15, 25', $today, $back10Days, false, false], + [ '15, 25', $today, $back20Days, true, true], + [ '15, 25', $today, $back30Days, true, true], + [ '15, 25', $today, $ahead100Days, true, false], + + // Expire all older than max OR older than min if space needed + // Max<Min case + [ '25, 15', $today, $back10Days, false, false], + [ '25, 15', $today, $back20Days, false, false], + [ '25, 15', $today, $back30Days, false, true], + [ '25, 15', $today, $back10Days, false, false], + [ '25, 15', $today, $back20Days, true, false], + [ '25, 15', $today, $back30Days, true, true], + [ '25, 15', $today, $ahead100Days, true, false], + ]; + } + + /** + * @dataProvider expirationData + * + * @param string $retentionObligation + * @param int $timeNow + * @param int $timestamp + * @param bool $quotaExceeded + * @param string $expectedResult + */ + public function testExpiration($retentionObligation, $timeNow, $timestamp, $quotaExceeded, $expectedResult){ + $mockedConfig = $this->getMockedConfig($retentionObligation); + $mockedTimeFactory = $this->getMockedTimeFactory($timeNow); + + $expiration = new Expiration($mockedConfig, $mockedTimeFactory); + $actualResult = $expiration->isExpired($timestamp, $quotaExceeded); + + $this->assertEquals($expectedResult, $actualResult); + } + + + public function configData(){ + return [ + [ 'disabled', null, null, null], + [ 'auto', Expiration::NO_OBLIGATION, Expiration::NO_OBLIGATION, true ], + [ 'auto,auto', Expiration::NO_OBLIGATION, Expiration::NO_OBLIGATION, true ], + [ 'auto, auto', Expiration::NO_OBLIGATION, Expiration::NO_OBLIGATION, true ], + [ 'auto, 3', Expiration::NO_OBLIGATION, 3, true ], + [ '5, auto', 5, Expiration::NO_OBLIGATION, true ], + [ '3, 5', 3, 5, false ], + [ '10, 3', 10, 10, false ], + [ 'g,a,r,b,a,g,e', Expiration::NO_OBLIGATION, Expiration::NO_OBLIGATION, true ], + [ '-3,8', Expiration::NO_OBLIGATION, Expiration::NO_OBLIGATION, true ] + ]; + } + + + /** + * @dataProvider configData + * + * @param string $configValue + * @param int $expectedMinAge + * @param int $expectedMaxAge + * @param bool $expectedCanPurgeToSaveSpace + */ + public function testParseRetentionObligation($configValue, $expectedMinAge, $expectedMaxAge, $expectedCanPurgeToSaveSpace){ + $mockedConfig = $this->getMockedConfig($configValue); + $mockedTimeFactory = $this->getMockedTimeFactory( + time() + ); + + $expiration = new Expiration($mockedConfig, $mockedTimeFactory); + $this->assertAttributeEquals($expectedMinAge, 'minAge', $expiration); + $this->assertAttributeEquals($expectedMaxAge, 'maxAge', $expiration); + $this->assertAttributeEquals($expectedCanPurgeToSaveSpace, 'canPurgeToSaveSpace', $expiration); + } + + /** + * + * @param int $time + * @return \OCP\AppFramework\Utility\ITimeFactory + */ + private function getMockedTimeFactory($time){ + $mockedTimeFactory = $this->getMockBuilder('\OCP\AppFramework\Utility\ITimeFactory') + ->disableOriginalConstructor() + ->setMethods(['getTime']) + ->getMock() + ; + $mockedTimeFactory->expects($this->any())->method('getTime')->will( + $this->returnValue($time) + ); + + return $mockedTimeFactory; + } + + /** + * + * @param string $returnValue + * @return \OCP\IConfig + */ + private function getMockedConfig($returnValue){ + $mockedConfig = $this->getMockBuilder('\OCP\IConfig') + ->disableOriginalConstructor() + ->setMethods( + [ + 'setSystemValues', + 'setSystemValue', + 'getSystemValue', + 'deleteSystemValue', + 'getAppKeys', + 'setAppValue', + 'getAppValue', + 'deleteAppValue', + 'deleteAppValues', + 'setUserValue', + 'getUserValue', + 'getUserValueForUsers', + 'getUserKeys', + 'deleteUserValue', + 'deleteAllUserValues', + 'deleteAppFromAllUsers', + 'getUsersForUserValue' + ] + ) + ->getMock() + ; + $mockedConfig->expects($this->any())->method('getSystemValue')->will( + $this->returnValue($returnValue) + ); + + return $mockedConfig; + } +} diff --git a/apps/user_ldap/l10n/da.js b/apps/user_ldap/l10n/da.js index 2f664ee6c21..7b9222d3abd 100644 --- a/apps/user_ldap/l10n/da.js +++ b/apps/user_ldap/l10n/da.js @@ -29,8 +29,8 @@ OC.L10N.register( "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Der opstod en fejl. Tjek venligst Base DN, såvel som forbindelsesindstillingerne og brugeroplysningerne.", "Do you really want to delete the current Server Configuration?" : "Ønsker du virkelig at slette den nuværende Server Konfiguration?", "Confirm Deletion" : "Bekræft sletning", - "Mappings cleared successfully!" : "Kortlægningerne blev ryddet af vejen!", - "Error while clearing the mappings." : "Fejl under rydning af kortlægninger.", + "Mappings cleared successfully!" : "Tilknytningerne blev ryddet af vejen!", + "Error while clearing the mappings." : "Fejl under rydning af tilknytninger.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonyme bindinger tillades ikke. Angiv venligst et User DN og adgangskode.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP-driftsfejl. Anonyme bindinger tillades muligvis ikke.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagringen mislykkedes. Sørg venligst for at databasen er i drift. Genindlæs for der fortsættes.", @@ -39,7 +39,7 @@ OC.L10N.register( "Select attributes" : "Vælg attributter", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruger blev ikke fundet. Tjek venligst dine login-attributter og brugernavnet. Gældende filter (til kopiér-og-indsæt for validering via kommandolinje): <br/>", "User found and settings verified." : "Bruger blev fundetog indstillingerne bekræftet.", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Det er blot den første, der vil kunne logge ind. Overvej et mere begrænset filter.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter.", "An unspecified error occurred. Please check the settings and the log." : "Der opstod en uspecificeret fejl. Tjek venligst indstillingerne og loggen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søgefilteret er ugyldigt - sandsynligvis på grund af problemer med syntaksen, såsom et ulige antal åbne og lukkede parenteser. Gennemse venligst. ", "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Der opstod en forbindelsesfejl til LDAP/AD - tjek venligst vært, port og brugeroplysninger.", @@ -75,11 +75,11 @@ OC.L10N.register( "Other Attributes:" : "Andre attributter:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer dét filter der anvendes, når der er forsøg på at logge ind. %%uuid erstattter brugernavnet i login-handlingen. Eksempel: \"uid=%%uuid\"", "Test Loginname" : "Test loginnavn", - "Verify settings" : "Verificér indstillinger", + "Verify settings" : "Kontrollér indstillinger", "1. Server" : "1. server", "%s. Server:" : "%s. server:", "Add a new and blank configuration" : "Tilføj en ny og tom konfiguration", - "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetildeling", + "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetilknytning", "Delete the current configuration" : "Slet den aktuelle konfiguration", "Host" : "Vært", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://", @@ -98,7 +98,7 @@ OC.L10N.register( "Limit %s access to users meeting these criteria:" : "Begræns %s-adgangen til brugere som imødekommer disse kriterier:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De fleste gængse objektklasser for brugere er organizationalPerson, person, user og inetOrgPerson. Hvis du ikker er sikker på hvilken objektklasse, der skal vælges, så tal med administratoren af dit katalog.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret angiver hvilke LDAP-brugere, der skal have adgang til %s-instansen.", - "Verify settings and count users" : "Verificér indstillinger og optalte brugere", + "Verify settings and count users" : "Kontrollér indstillinger og optalte brugere", "Saving" : "Gemmer", "Back" : "Tilbage", "Continue" : "Videre", diff --git a/apps/user_ldap/l10n/da.json b/apps/user_ldap/l10n/da.json index 5de47b4abcb..5c0c3ad1d0c 100644 --- a/apps/user_ldap/l10n/da.json +++ b/apps/user_ldap/l10n/da.json @@ -27,8 +27,8 @@ "An error occurred. Please check the Base DN, as well as connection settings and credentials." : "Der opstod en fejl. Tjek venligst Base DN, såvel som forbindelsesindstillingerne og brugeroplysningerne.", "Do you really want to delete the current Server Configuration?" : "Ønsker du virkelig at slette den nuværende Server Konfiguration?", "Confirm Deletion" : "Bekræft sletning", - "Mappings cleared successfully!" : "Kortlægningerne blev ryddet af vejen!", - "Error while clearing the mappings." : "Fejl under rydning af kortlægninger.", + "Mappings cleared successfully!" : "Tilknytningerne blev ryddet af vejen!", + "Error while clearing the mappings." : "Fejl under rydning af tilknytninger.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonyme bindinger tillades ikke. Angiv venligst et User DN og adgangskode.", "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP-driftsfejl. Anonyme bindinger tillades muligvis ikke.", "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Lagringen mislykkedes. Sørg venligst for at databasen er i drift. Genindlæs for der fortsættes.", @@ -37,7 +37,7 @@ "Select attributes" : "Vælg attributter", "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Bruger blev ikke fundet. Tjek venligst dine login-attributter og brugernavnet. Gældende filter (til kopiér-og-indsæt for validering via kommandolinje): <br/>", "User found and settings verified." : "Bruger blev fundetog indstillingerne bekræftet.", - "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Det er blot den første, der vil kunne logge ind. Overvej et mere begrænset filter.", + "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Indstillingerne blev verificieret, men én bruger blev fundet. Kun den første, vil kunne logge ind. Overvej et mere begrænset filter.", "An unspecified error occurred. Please check the settings and the log." : "Der opstod en uspecificeret fejl. Tjek venligst indstillingerne og loggen.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Søgefilteret er ugyldigt - sandsynligvis på grund af problemer med syntaksen, såsom et ulige antal åbne og lukkede parenteser. Gennemse venligst. ", "A connection error to LDAP / AD occurred, please check host, port and credentials." : "Der opstod en forbindelsesfejl til LDAP/AD - tjek venligst vært, port og brugeroplysninger.", @@ -73,11 +73,11 @@ "Other Attributes:" : "Andre attributter:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Definerer dét filter der anvendes, når der er forsøg på at logge ind. %%uuid erstattter brugernavnet i login-handlingen. Eksempel: \"uid=%%uuid\"", "Test Loginname" : "Test loginnavn", - "Verify settings" : "Verificér indstillinger", + "Verify settings" : "Kontrollér indstillinger", "1. Server" : "1. server", "%s. Server:" : "%s. server:", "Add a new and blank configuration" : "Tilføj en ny og tom konfiguration", - "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetildeling", + "Copy current configuration into new directory binding" : "Kopiér nuværende konfiguration ind i en ny mappetilknytning", "Delete the current configuration" : "Slet den aktuelle konfiguration", "Host" : "Vært", "You can omit the protocol, except you require SSL. Then start with ldaps://" : "Du kan udelade protokollen, medmindre du skal bruge SSL. Start i så fald med ldaps://", @@ -96,7 +96,7 @@ "Limit %s access to users meeting these criteria:" : "Begræns %s-adgangen til brugere som imødekommer disse kriterier:", "The most common object classes for users are organizationalPerson, person, user, and inetOrgPerson. If you are not sure which object class to select, please consult your directory admin." : "De fleste gængse objektklasser for brugere er organizationalPerson, person, user og inetOrgPerson. Hvis du ikker er sikker på hvilken objektklasse, der skal vælges, så tal med administratoren af dit katalog.", "The filter specifies which LDAP users shall have access to the %s instance." : "Filteret angiver hvilke LDAP-brugere, der skal have adgang til %s-instansen.", - "Verify settings and count users" : "Verificér indstillinger og optalte brugere", + "Verify settings and count users" : "Kontrollér indstillinger og optalte brugere", "Saving" : "Gemmer", "Back" : "Tilbage", "Continue" : "Videre", diff --git a/autotest.sh b/autotest.sh index 6a09fbfabac..8d0e20cf2a8 100755 --- a/autotest.sh +++ b/autotest.sh @@ -204,7 +204,7 @@ function execute_tests { echo "Waiting for Oracle initialization ... " # grep exits on the first match and then the script continues - times out after 2 minutes - timeout 120 docker logs -f "$DOCKER_CONTAINER_ID" 2>&1 | grep -q "Grant succeeded." + timeout 240 docker logs -f "$DOCKER_CONTAINER_ID" 2>&1 | grep -q "Grant succeeded." DATABASEUSER=autotest DATABASENAME='XE' diff --git a/config/config.sample.php b/config/config.sample.php index a841831f018..d561ad27e84 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -435,6 +435,33 @@ $CONFIG = array( /** + * If the versions app is enabled (default), this setting defines the policy + * for when versions will be permanently deleted. + * The app allows for two settings, a minimum time for version retention, + * and a maximum time for version retention. + * Minimum time is the number of days a version will be kept, after which it + * may be deleted. Maximum time is the number of days at which it is guaranteed + * to be deleted. + * Both minimum and maximum times can be set together to explicitly define + * version deletion. For migration purposes, this setting is installed + * initially set to "auto", which is equivalent to the default setting in + * ownCloud 8.1 and before. + * + * Available values: + * ``auto`` default setting. Automatically expire versions according to + * expire rules. Please refer to Files_versions online documentation + * for more info. + * ``D, auto`` keep versions at least for D days, apply expire rules to all + * versions that older than D days + * * ``auto, D`` delete all versions that are older than D days automatically, + * delete other versions according to expire rules + * * ``D1, D2`` keep versions for at least D1 days and delete when exceeds D2 days + * ``disabled`` versions auto clean disabled, versions will be kept forever + */ +'versions_retention_obligation' => 'auto', + + +/** * ownCloud Verifications * * ownCloud performs several verification checks. There are two options, @@ -505,7 +532,7 @@ $CONFIG = array( /** * Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 = - * Warning, 3 = Error. The default value is Warning. + * Warning, 3 = Error, and 4 = Fatal. The default value is Warning. */ 'loglevel' => 2, diff --git a/core/avatar/avatarcontroller.php b/core/avatar/avatarcontroller.php index 0c270bee53e..945e022600a 100644 --- a/core/avatar/avatarcontroller.php +++ b/core/avatar/avatarcontroller.php @@ -90,18 +90,14 @@ class AvatarController extends Controller { } /** + * @NoAdminRequired * @NoCSRFRequired - * @PublicPage * * @param string $userId * @param int $size * @return DataResponse|DataDisplayResponse */ public function getAvatar($userId, $size) { - if (!$this->userManager->userExists($userId)) { - return new DataResponse([], Http::STATUS_NOT_FOUND); - } - if ($size > 2048) { $size = 2048; } elseif ($size <= 0) { diff --git a/core/command/encryption/decryptall.php b/core/command/encryption/decryptall.php new file mode 100644 index 00000000000..696570b7ae6 --- /dev/null +++ b/core/command/encryption/decryptall.php @@ -0,0 +1,148 @@ +<?php +/** + * @author Björn Schießle <schiessle@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\App\IAppManager; +use OCP\Encryption\IManager; +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class DecryptAll extends Command { + + /** @var IManager */ + protected $encryptionManager; + + /** @var IAppManager */ + protected $appManager; + + /** @var IConfig */ + protected $config; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** @var bool */ + protected $wasTrashbinEnabled; + + /** @var bool */ + protected $wasSingleUserModeEnabled; + + /** @var \OC\Encryption\DecryptAll */ + protected $decryptAll; + + /** + * @param IManager $encryptionManager + * @param IAppManager $appManager + * @param IConfig $config + * @param \OC\Encryption\DecryptAll $decryptAll + * @param QuestionHelper $questionHelper + */ + public function __construct( + IManager $encryptionManager, + IAppManager $appManager, + IConfig $config, + \OC\Encryption\DecryptAll $decryptAll, + QuestionHelper $questionHelper + ) { + parent::__construct(); + + $this->appManager = $appManager; + $this->encryptionManager = $encryptionManager; + $this->config = $config; + $this->decryptAll = $decryptAll; + $this->questionHelper = $questionHelper; + + $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); + $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); + $this->config->setSystemValue('singleuser', true); + $this->appManager->disableApp('files_trashbin'); + } + + public function __destruct() { + $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); + if ($this->wasTrashbinEnabled) { + $this->appManager->enableApp('files_trashbin'); + } + } + + protected function configure() { + parent::configure(); + + $this->setName('encryption:decrypt-all'); + $this->setDescription( + 'This will disable server-side encryption and decrypt all files for ' + . 'all users if it is supported by your encryption module. ' + . 'Please make sure that no user access his files during this process!' + ); + $this->addArgument( + 'user', + InputArgument::OPTIONAL, + 'user for which you want to decrypt all files (optional)' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + try { + if ($this->encryptionManager->isEnabled() === true) { + $output->write('Disable server side encryption... '); + $this->config->setAppValue('core', 'encryption_enabled', 'no'); + $output->writeln('done.'); + } else { + $output->writeln('Server side encryption not enabled. Nothing to do.'); + return; + + } + + $output->writeln("\n"); + $output->writeln('You are about to start to decrypt all files stored in your ownCloud.'); + $output->writeln('It will depend on the encryption module and your setup if this is possible.'); + $output->writeln('Depending on the number and size of your files this can take some time'); + $output->writeln('Please make sure that no user access his files during this process!'); + $output->writeln(''); + $question = new ConfirmationQuestion('Do you really want to continue? (y/n) ', false); + if ($this->questionHelper->ask($input, $output, $question)) { + $user = $input->getArgument('user'); + $result = $this->decryptAll->decryptAll($input, $output, $user); + if ($result === false) { + $this->output->writeln(' aborted.'); + $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + } + } else { + $output->write('Enable server side encryption... '); + $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + $output->writeln('done.'); + $output->writeln('aborted'); + } + } catch (\Exception $e) { + // enable server side encryption again if something went wrong + $this->config->setAppValue('core', 'encryption_enabled', 'yes'); + throw $e; + } + } + +} diff --git a/core/command/encryption/encryptall.php b/core/command/encryption/encryptall.php index 7f33e18ecbb..950ce5166d8 100644 --- a/core/command/encryption/encryptall.php +++ b/core/command/encryption/encryptall.php @@ -68,13 +68,13 @@ class EncryptAll extends Command { $this->config = $config; $this->questionHelper = $questionHelper; $this->wasTrashbinEnabled = $this->appManager->isEnabledForUser('files_trashbin'); - $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleUser', false); - $this->config->setSystemValue('singleUser', true); + $this->wasSingleUserModeEnabled = $this->config->getSystemValue('singleuser', false); + $this->config->setSystemValue('singleuser', true); $this->appManager->disableApp('files_trashbin'); } public function __destruct() { - $this->config->setSystemValue('singleUser', $this->wasSingleUserModeEnabled); + $this->config->setSystemValue('singleuser', $this->wasSingleUserModeEnabled); if ($this->wasTrashbinEnabled) { $this->appManager->enableApp('files_trashbin'); } diff --git a/core/css/apps.css b/core/css/apps.css index 0371f2bbde7..6dd7e63bb69 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -72,7 +72,7 @@ white-space: nowrap; text-overflow: ellipsis; color: #000; - opacity: .5; + opacity: .57; } #app-navigation .active, #app-navigation .active a, @@ -417,6 +417,7 @@ position: relative; height: 100%; overflow-y: auto; + -webkit-overflow-scrolling: touch; } #app-content-wrapper { diff --git a/core/css/icons.css b/core/css/icons.css index a3819ba9d44..2461ee46c9f 100644 --- a/core/css/icons.css +++ b/core/css/icons.css @@ -70,6 +70,10 @@ background-image: url('../img/actions/delete-hover.svg'); } +.icon-details { + background-image: url('../img/actions/details.svg'); +} + .icon-download { background-image: url('../img/actions/download.svg'); } diff --git a/core/css/share.css b/core/css/share.css index 0d687cb76da..15f8061b068 100644 --- a/core/css/share.css +++ b/core/css/share.css @@ -23,29 +23,25 @@ } } -#dropdown.shareDropDown .unshare.icon-loading-small { +.shareTabView .unshare.icon-loading-small { margin-top: 1px; } -#dropdown.shareDropDown .shareWithLoading, -#dropdown.shareDropDown .linkShare .icon-loading-small { +.shareTabView .shareWithLoading, +.shareTabView .linkShare .icon-loading-small { display: inline-block !important; padding-left: 10px; } -#dropdown.shareDropDown .shareWithLoading { +.shareTabView .shareWithLoading { position: relative; right: 70px; top: 2px; } -#dropdown.shareDropDown .icon-loading-small.hidden { +.shareTabView .icon-loading-small.hidden { display: none !important; } -#dropdown .shareWithRemoteInfo { - padding: 11px 20px; -} - -#dropdown .avatar { +.shareTabView .avatar { margin-right: 8px; display: inline-block; overflow: hidden; @@ -87,12 +83,12 @@ #shareWithList li label{ margin-right: 8px; } -#dropdown label { +.shareTabView label { font-weight:400; white-space: nowrap; } -#dropdown input[type="checkbox"] { +.shareTabView input[type="checkbox"] { margin:0 3px 0 8px; vertical-align: middle; } @@ -106,8 +102,9 @@ a.unshare { display:inline; float:right; opacity:.5; - padding:5px 0 0 5px !important; - margin-top:-5px; + padding: 10px; + margin-top: -5px; + margin-right: -10px; } #link { @@ -115,19 +112,22 @@ a.unshare { padding-top:8px; } -#dropdown input[type="text"],#dropdown input[type="password"] { - width: 86%; +.shareTabView input[type="submit"] { margin-left: 7px; } -#dropdown form { +.shareTabView form { font-size: 100%; margin-left: 0; margin-right: 0; } -#linkText,#linkPass,#expiration { - display:none; +.shareTabView .error { + color: #e9322d; + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; } #link #showPassword img { diff --git a/core/css/styles.css b/core/css/styles.css index 9219068dc38..2ec5129a1c5 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -158,8 +158,42 @@ textarea:hover, textarea:focus, textarea:active { -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; } +input[type="checkbox"] { + margin:0; + padding:0; + height:auto; + width:auto; + display: none; +} + +input[type="checkbox"] + label:before { + content: ""; + display: inline-block; + + height: 20px; + width: 20px; + vertical-align: middle; + + background: url('../img/actions/checkbox.svg') left center no-repeat; + opacity: 0.7; +} + +input[type="checkbox"].white + label:before { + background-image: url('../img/actions/checkbox-white.svg'); +} + +input[type="checkbox"]:checked + label:before { + background-image: url('../img/actions/checkbox-checked.svg'); +} + +input[type="checkbox"].white:checked + label:before { + background-image: url('../img/actions/checkbox-checked-white.svg'); +} + +input[type="checkbox"]:hover+label:before, input[type="checkbox"]:focus+label:before { + color:#111 !important; +} + input[type="time"] { width: initial; height: 31px; @@ -614,7 +648,6 @@ label.infield { margin: 0; padding: 14px; padding-left: 28px; - margin-left: -28px; vertical-align: middle; } #body-login form .errors { background:#fed7d7; border:1px solid #f00; list-style-indent:inside; margin:0 0 2em; padding:1em; } @@ -673,6 +706,9 @@ label.infield { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; opacity: .3; } +#show + label:before, #dbpassword + label:before, #personal-show + label:before { + display: none; +} #pass2, input[name="personal-password-clone"] { padding: .6em 2.5em .4em .4em; width: 8em; @@ -814,6 +850,7 @@ label.infield { opacity: .7; } #body-login .remember-login-container { + margin-top: 10px; text-align: center; } diff --git a/core/img/actions/checkbox-checked-white.png b/core/img/actions/checkbox-checked-white.png Binary files differnew file mode 100644 index 00000000000..ed8e3d3d557 --- /dev/null +++ b/core/img/actions/checkbox-checked-white.png diff --git a/core/img/actions/checkbox-checked-white.svg b/core/img/actions/checkbox-checked-white.svg new file mode 100644 index 00000000000..17bfdfbe4a6 --- /dev/null +++ b/core/img/actions/checkbox-checked-white.svg @@ -0,0 +1,4 @@ +<?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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm8.924 2.0664l1.433 1.4316-6.3648 6.365-4.2422-4.2439 1.4141-1.414 2.8281 2.8301 4.9318-4.9688z" fill="#fff"/> +</svg> diff --git a/core/img/actions/checkbox-checked.png b/core/img/actions/checkbox-checked.png Binary files differnew file mode 100644 index 00000000000..a8a07193ab7 --- /dev/null +++ b/core/img/actions/checkbox-checked.png diff --git a/core/img/actions/checkbox-checked.svg b/core/img/actions/checkbox-checked.svg new file mode 100644 index 00000000000..c5aa3cd73bb --- /dev/null +++ b/core/img/actions/checkbox-checked.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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m2.5 2.5h11v11h-11z" fill="#fff"/> + <path fill="#55739a" d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm8.924 2.0664l1.433 1.4316-6.3648 6.365-4.2422-4.2439 1.4141-1.414 2.8281 2.8301 4.9318-4.9688z"/> +</svg> diff --git a/core/img/actions/checkbox-mixed-white.png b/core/img/actions/checkbox-mixed-white.png Binary files differnew file mode 100644 index 00000000000..0b81f998fc5 --- /dev/null +++ b/core/img/actions/checkbox-mixed-white.png diff --git a/core/img/actions/checkbox-mixed-white.svg b/core/img/actions/checkbox-mixed-white.svg new file mode 100644 index 00000000000..faae0820c8b --- /dev/null +++ b/core/img/actions/checkbox-mixed-white.svg @@ -0,0 +1,4 @@ +<?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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm1 5h8v2h-8v-2z" fill="#fff"/> +</svg> diff --git a/core/img/actions/checkbox-mixed.png b/core/img/actions/checkbox-mixed.png Binary files differnew file mode 100644 index 00000000000..cc27ec651ea --- /dev/null +++ b/core/img/actions/checkbox-mixed.png diff --git a/core/img/actions/checkbox-mixed.svg b/core/img/actions/checkbox-mixed.svg new file mode 100644 index 00000000000..7f3642912da --- /dev/null +++ b/core/img/actions/checkbox-mixed.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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m2.5 2.5h11v11h-11z" fill="#fff"/> + <path fill="#969696" d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm1 5h8v2h-8v-2z"/> +</svg> diff --git a/core/img/actions/checkbox-white.png b/core/img/actions/checkbox-white.png Binary files differnew file mode 100644 index 00000000000..f0f903c77c6 --- /dev/null +++ b/core/img/actions/checkbox-white.png diff --git a/core/img/actions/checkbox-white.svg b/core/img/actions/checkbox-white.svg new file mode 100644 index 00000000000..4325f9fb1e0 --- /dev/null +++ b/core/img/actions/checkbox-white.svg @@ -0,0 +1,4 @@ +<?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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm0 1h10v10h-10v-10z" fill="#fff"/> +</svg> diff --git a/core/img/actions/checkbox.png b/core/img/actions/checkbox.png Binary files differnew file mode 100644 index 00000000000..770b7ef8203 --- /dev/null +++ b/core/img/actions/checkbox.png diff --git a/core/img/actions/checkbox.svg b/core/img/actions/checkbox.svg new file mode 100644 index 00000000000..fe8f727b899 --- /dev/null +++ b/core/img/actions/checkbox.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="16px" width="16px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path d="m2.5 2.5h11v11h-11z" fill="#fff"/> + <path fill="#969696" d="m3 2c-0.554 0-1 0.446-1 1v10c0 0.554 0.446 1 1 1h10c0.554 0 1-0.446 1-1v-10c0-0.554-0.446-1-1-1h-10zm0 1h10v10h-10v-10z"/> +</svg> diff --git a/core/img/actions/details.png b/core/img/actions/details.png Binary files differnew file mode 100644 index 00000000000..9145025be26 --- /dev/null +++ b/core/img/actions/details.png diff --git a/core/img/actions/details.svg b/core/img/actions/details.svg new file mode 100644 index 00000000000..296d8825cbc --- /dev/null +++ b/core/img/actions/details.svg @@ -0,0 +1,4 @@ +<?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/"> + <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"/> +</svg> diff --git a/core/js/core.json b/core/js/core.json index a67491c4a35..a80636e8463 100644 --- a/core/js/core.json +++ b/core/js/core.json @@ -24,6 +24,13 @@ "l10n.js", "apps.js", "share.js", + "shareconfigmodel.js", + "shareitemmodel.js", + "sharedialogview.js", + "sharedialogexpirationview.js", + "sharedialoglinkshareview.js", + "sharedialogresharerinfoview.js", + "sharedialogshareelistview.js", "octemplate.js", "eventsource.js", "config.js", diff --git a/core/js/js.js b/core/js/js.js index 8d3756ae2ec..de773dc1221 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1215,6 +1215,20 @@ function object(o) { * Initializes core */ function initCore() { + /** + * Disable automatic evaluation of responses for $.ajax() functions (and its + * higher-level alternatives like $.get() and $.post()). + * + * If a response to a $.ajax() request returns a content type of "application/javascript" + * JQuery would previously execute the response body. This is a pretty unexpected + * behaviour and can result in a bypass of our Content-Security-Policy as well as + * multiple unexpected XSS vectors. + */ + $.ajaxSetup({ + contents: { + script: false + } + }); /** * Set users locale to moment.js as soon as possible diff --git a/core/js/oc-requesttoken.js b/core/js/oc-requesttoken.js index 2f7548ecb77..d5dcecdb5ab 100644 --- a/core/js/oc-requesttoken.js +++ b/core/js/oc-requesttoken.js @@ -1,4 +1,6 @@ -$(document).on('ajaxSend',function(elm, xhr) { - xhr.setRequestHeader('requesttoken', oc_requesttoken); - xhr.setRequestHeader('OCS-APIREQUEST', 'true'); +$(document).on('ajaxSend',function(elm, xhr, settings) { + if(settings.crossDomain === false) { + xhr.setRequestHeader('requesttoken', oc_requesttoken); + xhr.setRequestHeader('OCS-APIREQUEST', 'true'); + } }); diff --git a/core/js/share.js b/core/js/share.js index cd4a614e9d1..a2e6e6af0fc 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -3,7 +3,7 @@ /** * @namespace */ -OC.Share={ +OC.Share = _.extend(OC.Share || {}, { SHARE_TYPE_USER:0, SHARE_TYPE_GROUP:1, SHARE_TYPE_LINK:3, @@ -289,21 +289,34 @@ OC.Share={ } img.attr('src', image); }, - loadItem:function(itemType, itemSource) { + /** + * + * @param itemType + * @param itemSource + * @param callback - optional. If a callback is given this method works + * asynchronous and the callback will be provided with data when the request + * is done. + * @returns {OC.Share.Types.ShareInfo} + */ + loadItem:function(itemType, itemSource, callback) { var data = ''; var checkReshare = true; + var async = !_.isUndefined(callback); if (typeof OC.Share.statuses[itemSource] === 'undefined') { // NOTE: Check does not always work and misses some shares, fix later var checkShares = true; } else { var checkShares = true; } - $.ajax({type: 'GET', url: OC.filePath('core', 'ajax', 'share.php'), data: { fetch: 'getItem', itemType: itemType, itemSource: itemSource, checkReshare: checkReshare, checkShares: checkShares }, async: false, success: function(result) { + $.ajax({type: 'GET', url: OC.filePath('core', 'ajax', 'share.php'), data: { fetch: 'getItem', itemType: itemType, itemSource: itemSource, checkReshare: checkReshare, checkShares: checkShares }, async: async, success: function(result) { if (result && result.status === 'success') { data = result.data; } else { data = false; } + if(async) { + callback(data); + } }}); return data; @@ -371,269 +384,27 @@ OC.Share={ }); }, showDropDown:function(itemType, itemSource, appendTo, link, possiblePermissions, filename) { - 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 && data.reshare.uid_owner !== OC.currentUser) { - html += '<span class="reshare">'; - if (oc_config.enable_avatars === true) { - html += '<div class="avatar"></div> '; - } - - if (data.reshare.share_type == OC.Share.SHARE_TYPE_GROUP) { - html += t('core', 'Shared with you and the group {group} by {owner}', {group: data.reshare.share_with, owner: data.reshare.displayname_owner}); - } else { - html += t('core', 'Shared with you by {owner}', {owner: data.reshare.displayname_owner}); - } - html += '</span><br />'; - // reduce possible permissions to what the original share allowed - possiblePermissions = possiblePermissions & data.reshare.permissions; - } - - if (possiblePermissions & OC.PERMISSION_SHARE) { - // Determine the Allow Public Upload status. - // Used later on to determine if the - // respective checkbox should be checked or - // not. - - var publicUploadEnabled = $('#filestable').data('allow-public-upload'); - if (typeof publicUploadEnabled == 'undefined') { - publicUploadEnabled = 'no'; - } - var allowPublicUploadStatus = false; - - $.each(data.shares, function(key, value) { - if (value.share_type === OC.Share.SHARE_TYPE_LINK) { - allowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false; - return true; - } - }); - - var sharePlaceholder = t('core', 'Share with users or groups …'); - if(oc_appconfig.core.remoteShareAllowed) { - sharePlaceholder = t('core', 'Share with users, groups or remote users …'); + var configModel = new OC.Share.ShareConfigModel(); + var attributes = {itemType: itemType, itemSource: itemSource, possiblePermissions: possiblePermissions}; + var itemModel = new OC.Share.ShareItemModel(attributes, {configModel: configModel}); + var dialogView = new OC.Share.ShareDialogView({ + id: 'dropdown', + model: itemModel, + configModel: configModel, + className: 'drop shareDropDown', + attributes: { + 'data-item-source-name': filename, + 'data-item-type': itemType, + 'data-item-soruce': itemSource } - - html += '<label for="shareWith" class="hidden-visually">'+t('core', 'Share')+'</label>'; - 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>'; - var linksAllowed = $('#allowShareWithLink').val() === 'yes'; - if (link && linksAllowed) { - html += '<div id="link" class="linkShare">'; - html += '<span class="icon-loading-small hidden"></span>'; - html += '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" /><label for="linkCheckbox">'+t('core', 'Share link')+'</label>'; - html += '<br />'; - - var defaultExpireMessage = ''; - if ((itemType === 'folder' || itemType === 'file') && oc_appconfig.core.defaultExpireDateEnforced) { - defaultExpireMessage = t('core', 'The public link will expire no later than {days} days after it is created', {'days': oc_appconfig.core.defaultExpireDate}) + '<br/>'; - } - - html += '<label for="linkText" class="hidden-visually">'+t('core', 'Link')+'</label>'; - html += '<input id="linkText" type="text" readonly="readonly" />'; - html += '<input type="checkbox" name="showPassword" id="showPassword" value="1" style="display:none;" /><label for="showPassword" style="display:none;">'+t('core', 'Password protect')+'</label>'; - html += '<div id="linkPass">'; - html += '<label for="linkPassText" class="hidden-visually">'+t('core', 'Password')+'</label>'; - html += '<input id="linkPassText" type="password" placeholder="'+t('core', 'Choose a password for the public link')+'" />'; - html += '<span class="icon-loading-small hidden"></span>'; - html += '</div>'; - - if (itemType === 'folder' && (possiblePermissions & OC.PERMISSION_CREATE) && publicUploadEnabled === 'yes') { - html += '<div id="allowPublicUploadWrapper" style="display:none;">'; - html += '<span class="icon-loading-small hidden"></span>'; - html += '<input type="checkbox" value="1" name="allowPublicUpload" id="sharingDialogAllowPublicUpload"' + ((allowPublicUploadStatus) ? 'checked="checked"' : '') + ' />'; - html += '<label for="sharingDialogAllowPublicUpload">' + t('core', 'Allow editing') + '</label>'; - html += '</div>'; - } - html += '</div>'; - var mailPublicNotificationEnabled = $('input:hidden[name=mailPublicNotificationEnabled]').val(); - if (mailPublicNotificationEnabled === 'yes') { - html += '<form id="emailPrivateLink">'; - html += '<input id="email" style="display:none; width:62%;" value="" placeholder="'+t('core', 'Email link to person')+'" type="text" />'; - html += '<input id="emailButton" style="display:none;" type="submit" value="'+t('core', 'Send')+'" />'; - html += '</form>'; - } - } - - html += '<div id="expiration">'; - html += '<input type="checkbox" name="expirationCheckbox" id="expirationCheckbox" value="1" /><label for="expirationCheckbox">'+t('core', 'Set expiration date')+'</label>'; - html += '<label for="expirationDate" class="hidden-visually">'+t('core', 'Expiration')+'</label>'; - html += '<input id="expirationDate" type="text" placeholder="'+t('core', 'Expiration date')+'" style="display:none; width:90%;" />'; - html += '<em id="defaultExpireMessage">'+defaultExpireMessage+'</em>'; - html += '</div>'; - 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); - } - - // Reset item shares - OC.Share.itemShares = []; - OC.Share.currentShares = {}; - if (data.shares) { - $.each(data.shares, function(index, share) { - if (share.share_type == OC.Share.SHARE_TYPE_LINK) { - if (itemSource === share.file_source || itemSource === share.item_source) { - OC.Share.showLink(share.token, share.share_with, itemSource); - } - } else { - if (share.collection) { - OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.mail_send, share.collection); - } else { - if (share.share_type === OC.Share.SHARE_TYPE_REMOTE) { - OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE, share.mail_send, false); - } else { - OC.Share.addShareWith(share.share_type, share.share_with, share.share_with_displayname, share.permissions, possiblePermissions, share.mail_send, false); - } - } - } - if (share.expiration != null) { - OC.Share.showExpirationDate(share.expiration, share.stime); - } - }); - } - $('#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(), 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 ); - response(result.data); - } 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) { - event.preventDefault(); - }, - select: function(event, selected) { - event.stopPropagation(); - var $dropDown = $('#dropdown'); - var itemType = $dropDown.data('item-type'); - var itemSource = $dropDown.data('item-source'); - var itemSourceName = $dropDown.data('item-source-name'); - var expirationDate = ''; - if ( $('#expirationCheckbox').is(':checked') === true ) { - expirationDate = $( "#expirationDate" ).val(); - } - var shareType = selected.item.value.shareType; - var shareWith = selected.item.value.shareWith; - $(this).val(shareWith); - // Default permissions are Edit (CRUD) and Share - // Check if these permissions are possible - var permissions = OC.PERMISSION_READ; - if (shareType === OC.Share.SHARE_TYPE_REMOTE) { - permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_READ; - } else { - if (possiblePermissions & OC.PERMISSION_UPDATE) { - permissions = permissions | OC.PERMISSION_UPDATE; - } - if (possiblePermissions & OC.PERMISSION_CREATE) { - permissions = permissions | OC.PERMISSION_CREATE; - } - if (possiblePermissions & OC.PERMISSION_DELETE) { - permissions = permissions | OC.PERMISSION_DELETE; - } - if (oc_appconfig.core.resharingAllowed && (possiblePermissions & OC.PERMISSION_SHARE)) { - permissions = permissions | OC.PERMISSION_SHARE; - } - } - - var $input = $(this); - var $loading = $dropDown.find('.shareWithLoading'); - $loading.removeClass('hidden'); - $input.val(t('core', 'Adding user...')); - $input.prop('disabled', true); - - OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, itemSourceName, expirationDate, function() { - $input.prop('disabled', false); - $loading.addClass('hidden'); - var posPermissions = possiblePermissions; - if (shareType === OC.Share.SHARE_TYPE_REMOTE) { - posPermissions = permissions; - } - OC.Share.addShareWith(shareType, shareWith, selected.item.label, permissions, posPermissions); - $('#shareWith').val(''); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); - OC.Share.updateIcon(itemType, itemSource); - }); - return false; - } - }) - // customize internal _renderItem function to display groups and users differently - .data("ui-autocomplete")._renderItem = function( ul, item ) { - var insert = $( "<a>" ); - var text = item.label; - if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) { - text = text + ' ('+t('core', 'group')+')'; - } else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) { - text = text + ' ('+t('core', 'remote')+')'; - } - insert.text( text ); - if(item.value.shareType === OC.Share.SHARE_TYPE_GROUP) { - insert = insert.wrapInner('<strong></strong>'); - } - return $( "<li>" ) - .addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP)?'group':'user') - .append( insert ) - .appendTo( ul ); - }; - if (link && linksAllowed && $('#email').length != 0) { - $('#email').autocomplete({ - minLength: 1, - source: function (search, response) { - $.get(OC.filePath('core', 'ajax', 'share.php'), { fetch: 'getShareWithEmail', search: search.term }, function(result) { - if (result.status == 'success' && result.data.length > 0) { - response(result.data); - } - }); - }, - select: function( event, item ) { - $('#email').val(item.item.email); - return false; - } - }) - .data("ui-autocomplete")._renderItem = function( ul, item ) { - return $('<li>') - .append('<a>' + escapeHTML(item.displayname) + "<br>" + escapeHTML(item.email) + '</a>' ) - .appendTo( ul ); - }; - } - - } else { - html += '<input id="shareWith" type="text" placeholder="'+t('core', 'Resharing is not allowed')+'" style="width:90%;" disabled="disabled"/>'; - html += '</div>'; - dropDownEl = $(html); - dropDownEl.appendTo(appendTo); - } - dropDownEl.attr('data-item-source-name', filename); - $('#dropdown').slideDown(OC.menuSpeed, function() { + }); + dialogView.setShowLink(link); + var $dialog = dialogView.render().$el; + $dialog.appendTo(appendTo); + $dialog.slideDown(OC.menuSpeed, function() { OC.Share.droppedDown = true; }); - if ($('html').hasClass('lte9')){ - $('#dropdown input[placeholder]').placeholder(); - } - $('#shareWith').focus(); + itemModel.fetch(); }, hideDropDown:function(callback) { OC.Share.currentShares = null; @@ -648,256 +419,10 @@ OC.Share={ } }); }, - addShareWith:function(shareType, shareWith, shareWithDisplayName, permissions, possiblePermissions, mailSend, collection) { - var shareItem = { - share_type: shareType, - share_with: shareWith, - share_with_displayname: shareWithDisplayName, - permissions: permissions - }; - if (shareType === OC.Share.SHARE_TYPE_GROUP) { - shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'group') + ')'; - } - if (shareType === OC.Share.SHARE_TYPE_REMOTE) { - shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'remote') + ')'; - } - if (!OC.Share.itemShares[shareType]) { - OC.Share.itemShares[shareType] = []; - } - OC.Share.itemShares[shareType].push(shareWith); - if (collection) { - if (collection.item_type == 'file' || collection.item_type == 'folder') { - var item = collection.path; - } else { - var item = collection.item_source; - } - var collectionList = $('#shareWithList li').filterAttr('data-collection', item); - if (collectionList.length > 0) { - $(collectionList).append(', '+shareWithDisplayName); - } else { - var html = '<li style="clear: both;" data-collection="'+item+'">'+t('core', 'Shared in {item} with {user}', {'item': item, user: shareWithDisplayName})+'</li>'; - $('#shareWithList').prepend(html); - } - } else { - var editChecked = createChecked = updateChecked = deleteChecked = shareChecked = ''; - if (permissions & OC.PERMISSION_CREATE) { - createChecked = 'checked="checked"'; - editChecked = 'checked="checked"'; - } - if (permissions & OC.PERMISSION_UPDATE) { - updateChecked = 'checked="checked"'; - editChecked = 'checked="checked"'; - } - if (permissions & OC.PERMISSION_DELETE) { - deleteChecked = 'checked="checked"'; - editChecked = 'checked="checked"'; - } - if (permissions & OC.PERMISSION_SHARE) { - shareChecked = 'checked="checked"'; - } - var html = '<li style="clear: both;" data-share-type="'+escapeHTML(shareType)+'" data-share-with="'+escapeHTML(shareWith)+'" title="' + escapeHTML(shareWith) + '">'; - var showCrudsButton; - html += '<a href="#" class="unshare"><img class="svg" alt="'+t('core', 'Unshare')+'" title="'+t('core', 'Unshare')+'" src="'+OC.imagePath('core', 'actions/delete')+'"/></a>'; - if (oc_config.enable_avatars === true) { - html += '<div class="avatar"></div>'; - } - html += '<span class="username">' + escapeHTML(shareWithDisplayName) + '</span>'; - var mailNotificationEnabled = $('input:hidden[name=mailNotificationEnabled]').val(); - if (mailNotificationEnabled === 'yes' && shareType !== OC.Share.SHARE_TYPE_REMOTE) { - var checked = ''; - if (mailSend === '1') { - checked = 'checked'; - } - 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 += '<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 += '<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 += '<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 += '<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 += '<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>'; - html = $(html).appendTo('#shareWithList'); - if (oc_config.enable_avatars === true) { - if (shareType === OC.Share.SHARE_TYPE_USER) { - html.find('.avatar').avatar(escapeHTML(shareWith), 32); - } else { - //Add sharetype to generate different seed if there is a group and use with the same name - html.find('.avatar').imageplaceholder(escapeHTML(shareWith) + ' ' + shareType); - } - } - // insert cruds button into last label element - var lastLabel = html.find('>label:last'); - if (lastLabel.exists()){ - lastLabel.append(showCrudsButton); - } - else{ - html.find('.cruds').before(showCrudsButton); - } - if (!OC.Share.currentShares[shareType]) { - OC.Share.currentShares[shareType] = []; - } - OC.Share.currentShares[shareType].push(shareItem); - } - }, - showLink:function(token, password, itemSource) { - OC.Share.itemShares[OC.Share.SHARE_TYPE_LINK] = true; - $('#linkCheckbox').attr('checked', true); - - //check itemType - var linkSharetype=$('#dropdown').data('item-type'); - - if (! token) { - //fallback to pre token link - var filename = $('tr').filterAttr('data-id', String(itemSource)).data('file'); - var type = $('tr').filterAttr('data-id', String(itemSource)).data('type'); - if ($('#dir').val() == '/') { - var file = $('#dir').val() + filename; - } else { - var file = $('#dir').val() + '/' + filename; - } - file = '/'+OC.currentUser+'/files'+file; - // TODO: use oc webroot ? - var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service=files&'+type+'='+encodeURIComponent(file); - } else { - //TODO add path param when showing a link to file in a subfolder of a public link share - var service=''; - if(linkSharetype === 'folder' || linkSharetype === 'file'){ - service='files'; - }else{ - service=linkSharetype; - } - - // TODO: use oc webroot ? - if (service !== 'files') { - var link = parent.location.protocol+'//'+location.host+OC.linkTo('', 'public.php')+'?service='+service+'&t='+token; - } else { - var link = parent.location.protocol+'//'+location.host+OC.generateUrl('/s/')+token; - } - } - $('#linkText').val(link); - $('#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').slideDown(OC.menuSpeed); - $('#showPassword').attr('checked', true); - $('#linkPassText').attr('placeholder', '**********'); - } - $('#expiration').show(); - $('#emailPrivateLink #email').show(); - $('#emailPrivateLink #emailButton').show(); - $('#allowPublicUploadWrapper').show(); - }, - hideLink:function() { - $('#linkText').slideUp(OC.menuSpeed); - $('#defaultExpireMessage').hide(); - $('#showPassword').hide(); - $('#showPassword+label').hide(); - $('#linkPass').slideUp(OC.menuSpeed); - $('#emailPrivateLink #email').hide(); - $('#emailPrivateLink #emailButton').hide(); - $('#allowPublicUploadWrapper').hide(); - }, dirname:function(path) { return path.replace(/\\/g,'/').replace(/\/[^\/]*$/, ''); - }, - /** - * Parses a string to an valid integer (unix timestamp) - * @param time - * @returns {*} - * @internal Only used to work around a bug in the backend - */ - _parseTime: function(time) { - if (_.isString(time)) { - // skip empty strings and hex values - if (time === '' || (time.length > 1 && time[0] === '0' && time[1] === 'x')) { - return null; - } - time = parseInt(time, 10); - if(isNaN(time)) { - time = null; - } - } - return time; - }, - /** - * Displays the expiration date field - * - * @param {Date} date current expiration date - * @param {int} [shareTime] share timestamp in seconds, defaults to now - */ - showExpirationDate:function(date, shareTime) { - var now = new Date(); - // min date should always be the next day - var minDate = new Date(); - minDate.setDate(minDate.getDate()+1); - var datePickerOptions = { - minDate: minDate, - maxDate: null - }; - // TODO: hack: backend returns string instead of integer - shareTime = OC.Share._parseTime(shareTime); - if (_.isNumber(shareTime)) { - shareTime = new Date(shareTime * 1000); - } - if (!shareTime) { - shareTime = now; - } - $('#expirationCheckbox').attr('checked', true); - $('#expirationDate').val(date); - $('#expirationDate').slideDown(OC.menuSpeed); - $('#expirationDate').css('display','block'); - $('#expirationDate').datepicker({ - dateFormat : 'dd-mm-yy' - }); - if (oc_appconfig.core.defaultExpireDateEnforced) { - $('#expirationCheckbox').attr('disabled', true); - shareTime = OC.Util.stripTime(shareTime).getTime(); - // max date is share date + X days - datePickerOptions.maxDate = new Date(shareTime + oc_appconfig.core.defaultExpireDate * 24 * 3600 * 1000); - } - if(oc_appconfig.core.defaultExpireDateEnabled) { - $('#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; } -}; +}); $(document).ready(function() { @@ -915,403 +440,16 @@ $(document).ready(function() { minDate : minDate }); } - $(document).on('click', 'a.share', function(event) { - event.stopPropagation(); - if ($(this).data('item-type') !== undefined && $(this).data('item') !== undefined) { - var itemType = $(this).data('item-type'); - var itemSource = $(this).data('item'); - var appendTo = $(this).parent().parent(); - var link = false; - var possiblePermissions = $(this).data('possible-permissions'); - if ($(this).data('link') !== undefined && $(this).data('link') == true) { - link = true; - } - if (OC.Share.droppedDown) { - if (itemSource != $('#dropdown').data('item')) { - OC.Share.hideDropDown(function () { - OC.Share.showDropDown(itemType, itemSource, appendTo, link, possiblePermissions); - }); - } else { - OC.Share.hideDropDown(); - } - } else { - OC.Share.showDropDown(itemType, itemSource, appendTo, link, possiblePermissions); - } - } - }); $(this).click(function(event) { var target = $(event.target); var isMatched = !target.is('.drop, .ui-datepicker-next, .ui-datepicker-prev, .ui-icon') && !target.closest('#ui-datepicker-div').length && !target.closest('.ui-autocomplete').length; - if (OC.Share.droppedDown && isMatched && $('#dropdown').has(event.target).length === 0) { + if (OC.Share && OC.Share.droppedDown && isMatched && $('#dropdown').has(event.target).length === 0) { OC.Share.hideDropDown(); } }); - $(document).on('click', '#dropdown .showCruds', function() { - $(this).closest('li').find('.cruds').toggle(); - return false; - }); - - $(document).on('click', '#dropdown .unshare', function() { - var $li = $(this).closest('li'); - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - var shareType = $li.data('share-type'); - var shareWith = $li.attr('data-share-with'); - var $button = $(this); - - if (!$button.is('a')) { - $button = $button.closest('a'); - } - - if ($button.hasClass('icon-loading-small')) { - // deletion in progress - return false; - } - $button.empty().addClass('icon-loading-small'); - - OC.Share.unshare(itemType, itemSource, shareType, shareWith, function() { - $li.remove(); - var index = OC.Share.itemShares[shareType].indexOf(shareWith); - OC.Share.itemShares[shareType].splice(index, 1); - // updated list of shares - OC.Share.currentShares[shareType].splice(index, 1); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); - OC.Share.updateIcon(itemType, itemSource); - if (typeof OC.Share.statuses[itemSource] === 'undefined') { - $('#expiration').slideUp(OC.menuSpeed); - } - }); - - return false; - }); - - $(document).on('change', '#dropdown .permissions', function() { - var li = $(this).closest('li'); - if ($(this).attr('name') == 'edit') { - var checkboxes = $('.permissions', li); - var checked = $(this).is(':checked'); - // Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck - $(checkboxes).filter('input[name="create"]').attr('checked', checked); - $(checkboxes).filter('input[name="update"]').attr('checked', checked); - $(checkboxes).filter('input[name="delete"]').attr('checked', checked); - } else { - var checkboxes = $('.permissions', li); - // Uncheck Edit if Create, Update, and Delete are not checked - if (!$(this).is(':checked') - && !$(checkboxes).filter('input[name="create"]').is(':checked') - && !$(checkboxes).filter('input[name="update"]').is(':checked') - && !$(checkboxes).filter('input[name="delete"]').is(':checked')) - { - $(checkboxes).filter('input[name="edit"]').attr('checked', false); - // Check Edit if Create, Update, or Delete is checked - } else if (($(this).attr('name') == 'create' - || $(this).attr('name') == 'update' - || $(this).attr('name') == 'delete')) - { - $(checkboxes).filter('input[name="edit"]').attr('checked', true); - } - } - var permissions = OC.PERMISSION_READ; - $(checkboxes).filter(':not(input[name="edit"])').filter(':checked').each(function(index, checkbox) { - permissions |= $(checkbox).data('permissions'); - }); - OC.Share.setPermissions($('#dropdown').data('item-type'), - $('#dropdown').data('item-source'), - li.data('share-type'), - li.attr('data-share-with'), - permissions); - }); - - $(document).on('change', '#dropdown #linkCheckbox', function() { - var $dropDown = $('#dropdown'); - var itemType = $dropDown.data('item-type'); - var itemSource = $dropDown.data('item-source'); - var itemSourceName = $dropDown.data('item-source-name'); - var $loading = $dropDown.find('#link .icon-loading-small'); - var $button = $(this); - - if (!$loading.hasClass('hidden')) { - // already in progress - return false; - } - - 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 = ''; - // Create a link - if (oc_appconfig.core.enforcePasswordForPublicLink === false) { - expireDateString = OC.Share.getDefaultExpirationDate(); - $loading.removeClass('hidden'); - $button.addClass('hidden'); - $button.prop('disabled', true); - - OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', OC.PERMISSION_READ, itemSourceName, expireDateString, function(data) { - $loading.addClass('hidden'); - $button.removeClass('hidden'); - $button.prop('disabled', false); - OC.Share.showLink(data.token, null, itemSource); - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); - OC.Share.updateIcon(itemType, itemSource); - }); - } else { - $('#linkPass').slideToggle(OC.menuSpeed); - // TODO drop with IE8 drop - if($('html').hasClass('ie8')) { - $('#linkPassText').attr('placeholder', null); - $('#linkPassText').val(''); - } - $('#linkPassText').focus(); - } - if (expireDateString !== '') { - OC.Share.showExpirationDate(expireDateString); - } - } else { - // Delete private link - OC.Share.hideLink(); - $('#expiration').slideUp(OC.menuSpeed); - if ($('#linkText').val() !== '') { - $loading.removeClass('hidden'); - $button.addClass('hidden'); - $button.prop('disabled', true); - OC.Share.unshare(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', function() { - $loading.addClass('hidden'); - $button.removeClass('hidden'); - $button.prop('disabled', false); - OC.Share.itemShares[OC.Share.SHARE_TYPE_LINK] = false; - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); - OC.Share.updateIcon(itemType, itemSource); - if (typeof OC.Share.statuses[itemSource] === 'undefined') { - $('#expiration').slideUp(OC.menuSpeed); - } - }); - } - } - }); - - $(document).on('click', '#dropdown #linkText', function() { - $(this).focus(); - $(this).select(); - }); - - // Handle the Allow Public Upload Checkbox - $(document).on('click', '#sharingDialogAllowPublicUpload', function() { - - // Gather data - var $dropDown = $('#dropdown'); - var allowPublicUpload = $(this).is(':checked'); - var itemType = $dropDown.data('item-type'); - var itemSource = $dropDown.data('item-source'); - var itemSourceName = $dropDown.data('item-source-name'); - var expirationDate = ''; - if ($('#expirationCheckbox').is(':checked') === true) { - expirationDate = $( "#expirationDate" ).val(); - } - var permissions = 0; - var $button = $(this); - var $loading = $dropDown.find('#allowPublicUploadWrapper .icon-loading-small'); - - if (!$loading.hasClass('hidden')) { - // already in progress - return false; - } - - // Calculate permissions - if (allowPublicUpload) { - permissions = OC.PERMISSION_UPDATE + OC.PERMISSION_CREATE + OC.PERMISSION_READ; - } else { - permissions = OC.PERMISSION_READ; - } - - // Update the share information - $button.addClass('hidden'); - $button.prop('disabled', true); - $loading.removeClass('hidden'); - OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', permissions, itemSourceName, expirationDate, function(data) { - $loading.addClass('hidden'); - $button.removeClass('hidden'); - $button.prop('disabled', false); - }); - }); - - $(document).on('click', '#dropdown #showPassword', function() { - $('#linkPass').slideToggle(OC.menuSpeed); - if (!$('#showPassword').is(':checked') ) { - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - var itemSourceName = $('#dropdown').data('item-source-name'); - var allowPublicUpload = $('#sharingDialogAllowPublicUpload').is(':checked'); - var permissions = 0; - var $loading = $('#showPassword .icon-loading-small'); - - // Calculate permissions - if (allowPublicUpload) { - permissions = OC.PERMISSION_UPDATE + OC.PERMISSION_CREATE + OC.PERMISSION_READ; - } else { - permissions = OC.PERMISSION_READ; - } - - $loading.removeClass('hidden'); - OC.Share.share(itemType, itemSource, OC.Share.SHARE_TYPE_LINK, '', permissions, itemSourceName).then(function() { - $loading.addClass('hidden'); - $('#linkPassText').attr('placeholder', t('core', 'Choose a password for the public link')); - }); - } else { - $('#linkPassText').focus(); - } - }); - - $(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'); - var itemSource = dropDown.data('item-source'); - var itemSourceName = $('#dropdown').data('item-source-name'); - var permissions = 0; - var $loading = dropDown.find('#linkPass .icon-loading-small'); - - // Calculate permissions - if (allowPublicUpload) { - permissions = OC.PERMISSION_UPDATE + OC.PERMISSION_CREATE + OC.PERMISSION_READ; - } else { - 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, expireDateString, function(data) { - $loading.addClass('hidden'); - linkPassText.val(''); - linkPassText.attr('placeholder', t('core', 'Password protected')); - - if (oc_appconfig.core.enforcePasswordForPublicLink) { - OC.Share.showLink(data.token, "password set", itemSource); - OC.Share.updateIcon(itemType, itemSource); - } - $('#dropdown').trigger(new $.Event('sharesChanged', {shares: OC.Share.currentShares})); - }, function(result) { - $loading.addClass('hidden'); - linkPassText.val(''); - linkPassText.attr('placeholder', result.data.message); - }); - - if (expireDateString !== '') { - OC.Share.showExpirationDate(expireDateString); - } - } - }); - - $(document).on('click', '#dropdown #expirationCheckbox', function() { - if (this.checked) { - OC.Share.showExpirationDate(''); - } else { - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'setExpirationDate', itemType: itemType, itemSource: itemSource, date: '' }, function(result) { - if (!result || result.status !== 'success') { - OC.dialogs.alert(t('core', 'Error unsetting expiration date'), t('core', 'Error')); - } - $('#expirationDate').slideUp(OC.menuSpeed); - if (oc_appconfig.core.defaultExpireDateEnforced === false) { - $('#defaultExpireMessage').slideDown(OC.menuSpeed); - } - }); - } - }); - - $(document).on('change', '#dropdown #expirationDate', function() { - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - - $(this).tipsy('hide'); - $(this).removeClass('error'); - - $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'setExpirationDate', itemType: itemType, itemSource: itemSource, date: $(this).val() }, function(result) { - if (!result || result.status !== 'success') { - var expirationDateField = $('#dropdown #expirationDate'); - if (!result.data.message) { - expirationDateField.attr('original-title', t('core', 'Error setting expiration date')); - } else { - expirationDateField.attr('original-title', result.data.message); - } - expirationDateField.tipsy({gravity: 'n'}); - expirationDateField.tipsy('show'); - expirationDateField.addClass('error'); - } else { - if (oc_appconfig.core.defaultExpireDateEnforced === 'no') { - $('#defaultExpireMessage').slideUp(OC.menuSpeed); - } - } - }); - }); - - - $(document).on('submit', '#dropdown #emailPrivateLink', function(event) { - event.preventDefault(); - var link = $('#linkText').val(); - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - var file = $('tr').filterAttr('data-id', String(itemSource)).data('file'); - var email = $('#email').val(); - var expirationDate = ''; - if ( $('#expirationCheckbox').is(':checked') === true ) { - expirationDate = $( "#expirationDate" ).val(); - } - if (email != '') { - $('#email').prop('disabled', true); - $('#email').val(t('core', 'Sending ...')); - $('#emailButton').prop('disabled', true); - - $.post(OC.filePath('core', 'ajax', 'share.php'), { action: 'email', toaddress: email, link: link, itemType: itemType, itemSource: itemSource, file: file, expiration: expirationDate}, - function(result) { - $('#email').prop('disabled', false); - $('#emailButton').prop('disabled', false); - if (result && result.status == 'success') { - $('#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')); - } - }); - } - }); - - $(document).on('click', '#dropdown input[name=mailNotification]', function() { - var $li = $(this).closest('li'); - var itemType = $('#dropdown').data('item-type'); - var itemSource = $('#dropdown').data('item-source'); - var action = ''; - if (this.checked) { - action = 'informRecipients'; - } else { - action = 'informRecipientsDisabled'; - } - - var shareType = $li.data('share-type'); - var shareWith = $li.attr('data-share-with'); - - $.post(OC.filePath('core', 'ajax', 'share.php'), {action: action, recipient: shareWith, shareType: shareType, itemSource: itemSource, itemType: itemType}, function(result) { - if (result.status !== 'success') { - OC.dialogs.alert(t('core', result.data.message), t('core', 'Warning')); - } - }); - -}); }); diff --git a/core/js/shareconfigmodel.js b/core/js/shareconfigmodel.js new file mode 100644 index 00000000000..8729698d136 --- /dev/null +++ b/core/js/shareconfigmodel.js @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + OC.Share.Types = {}; + } + + // FIXME: the config model should populate its own model attributes based on + // the old DOM-based config + var ShareConfigModel = OC.Backbone.Model.extend({ + defaults: { + publicUploadEnabled: false, + enforcePasswordForPublicLink: oc_appconfig.core.enforcePasswordForPublicLink, + isDefaultExpireDateEnforced: oc_appconfig.core.defaultExpireDateEnforced === true, + isDefaultExpireDateEnabled: oc_appconfig.core.defaultExpireDateEnabled === true, + isRemoteShareAllowed: oc_appconfig.core.remoteShareAllowed, + defaultExpireDate: oc_appconfig.core.defaultExpireDate, + isResharingAllowed: oc_appconfig.core.resharingAllowed + }, + + /** + * @returns {boolean} + */ + areAvatarsEnabled: function() { + return oc_config.enable_avatars === true; + }, + + /** + * @returns {boolean} + */ + isPublicUploadEnabled: function() { + var publicUploadEnabled = $('#filestable').data('allow-public-upload'); + return publicUploadEnabled === 'yes'; + }, + + /** + * @returns {boolean} + */ + isMailPublicNotificationEnabled: function() { + return $('input:hidden[name=mailPublicNotificationEnabled]').val() === 'yes'; + }, + + /** + * @returns {boolean} + */ + isShareWithLinkAllowed: function() { + return $('#allowShareWithLink').val() === 'yes'; + }, + + /** + * @returns {string} + */ + getFederatedShareDocLink: function() { + return oc_appconfig.core.federatedCloudShareDoc; + }, + + getDefaultExpirationDateString: function () { + var expireDateString = ''; + if (this.get('isDefaultExpireDateEnabled')) { + var date = new Date().getTime(); + var expireAfterMs = this.get('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; + } + }); + + + OC.Share.ShareConfigModel = ShareConfigModel; +})(); diff --git a/core/js/sharedialogexpirationview.js b/core/js/sharedialogexpirationview.js new file mode 100644 index 00000000000..3fba4b135d9 --- /dev/null +++ b/core/js/sharedialogexpirationview.js @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE = + // currently expiration is only effective for link share. + // this is about to change in future. Therefore this is not included + // in the LinkShareView to ease reusing it in future. Then, + // modifications (getting rid of IDs) are still necessary. + '{{#if isLinkShare}}' + + '<input type="checkbox" name="expirationCheckbox" class="expirationCheckbox" id="expirationCheckbox" value="1" ' + + '{{#if isExpirationSet}}checked="checked"{{/if}} {{#if disableCheckbox}}disabled="disabled"{{/if}} />' + + '<label for="expirationCheckbox">{{setExpirationLabel}}</label>' + + '<div class="expirationDateContainer {{#unless isExpirationSet}}hidden{{/unless}}">' + + ' <label for="expirationDate" class="hidden-visually" value="{{expirationDate}}">{{expirationLabel}}</label>' + + ' <input id="expirationDate" class="datepicker" type="text" placeholder="{{expirationDatePlaceholder}}" value="{{expirationValue}}" />' + + '</div>' + + ' {{#if isExpirationEnforced}}' + + // originally the expire message was shown when a default date was set, however it never had text + '<em id="defaultExpireMessage">{{defaultExpireMessage}}</em>' + + ' {{/if}}' + + '{{/if}}' + ; + + /** + * @class OCA.Share.ShareDialogExpirationView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the expiration part in the GUI of the share dialogue + * + */ + var ShareDialogExpirationView = OC.Backbone.View.extend({ + /** @type {string} **/ + id: 'shareDialogLinkShare', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {Function} **/ + _template: undefined, + + /** @type {boolean} **/ + showLink: true, + + className: 'hidden', + + events: { + 'change .expirationCheckbox': '_onToggleExpiration', + 'change .datepicker': '_onChangeExpirationDate' + }, + + initialize: function(options) { + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + + var view = this; + this.configModel.on('change:isDefaultExpireDateEnforced', function() { + view.render(); + }); + + this.model.on('change:itemType', function() { + view.render(); + }); + + this.model.on('change:linkShare', function() { + view.render(); + }); + }, + + _onToggleExpiration: function(event) { + var $checkbox = $(event.target); + var state = $checkbox.prop('checked'); + // TODO: slide animation + this.$el.find('.expirationDateContainer').toggleClass('hidden', !state); + if (!state) { + // discard expiration date + this.model.setExpirationDate(''); + this.model.saveLinkShare(); + } + }, + + _onChangeExpirationDate: function(event) { + var $target = $(event.target); + $target.tooltip('hide'); + $target.removeClass('error'); + + this.model.setExpirationDate($target.val()); + this.model.saveLinkShare(null, { + error: function(model, message) { + if (!message) { + $target.attr('title', t('core', 'Error setting expiration date')); + } else { + $target.attr('title', message); + } + $target.tooltip({gravity: 'n'}); + $target.tooltip('show'); + $target.addClass('error'); + } + }); + }, + + render: function() { + var defaultExpireMessage = ''; + var defaultExpireDays = this.configModel.get('defaultExpireDate'); + var isExpirationEnforced = this.configModel.get('isDefaultExpireDateEnforced'); + + if( (this.model.isFolder() || this.model.isFile()) + && isExpirationEnforced) { + defaultExpireMessage = t( + 'core', + 'The public link will expire no later than {days} days after it is created', + {'days': defaultExpireDays } + ); + } + + var isExpirationSet = !!this.model.get('linkShare').expiration || isExpirationEnforced; + + var expirationTemplate = this.template(); + this.$el.html(expirationTemplate({ + setExpirationLabel: t('core', 'Set expiration date'), + expirationLabel: t('core', 'Expiration'), + expirationDatePlaceholder: t('core', 'Expiration date'), + defaultExpireMessage: defaultExpireMessage, + isLinkShare: this.model.get('linkShare').isLinkShare, + isExpirationSet: isExpirationSet, + isExpirationEnforced: isExpirationEnforced, + disableCheckbox: isExpirationEnforced && isExpirationSet, + expirationValue: this.model.get('linkShare').expiration + })); + + // what if there is another date picker on that page? + var minDate = new Date(); + var maxDate = null; + // min date should always be the next day + minDate.setDate(minDate.getDate()+1); + + if(isExpirationSet) { + if(isExpirationEnforced) { + // TODO: hack: backend returns string instead of integer + var shareTime = this.model.get('linkShare').stime; + if (_.isNumber(shareTime)) { + shareTime = new Date(shareTime * 1000); + } + if (!shareTime) { + shareTime = new Date(); // now + } + shareTime = OC.Util.stripTime(shareTime).getTime(); + maxDate = new Date(shareTime + defaultExpireDays * 24 * 3600 * 1000); + } + } + $.datepicker.setDefaults({ + minDate: minDate, + maxDate: maxDate + }); + + this.$el.find('.datepicker').datepicker({dateFormat : 'dd-mm-yy'}); + + this.delegateEvents(); + + return this; + }, + + /** + * @returns {Function} from Handlebars + * @private + */ + template: function () { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template; + } + + }); + + OC.Share.ShareDialogExpirationView = ShareDialogExpirationView; + +})(); diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js new file mode 100644 index 00000000000..ab591b9c6e8 --- /dev/null +++ b/core/js/sharedialoglinkshareview.js @@ -0,0 +1,298 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE = + '{{#if shareAllowed}}' + + '<span class="icon-loading-small hidden"></span>' + + '<input type="checkbox" name="linkCheckbox" id="linkCheckbox" value="1" {{#if isLinkShare}}checked="checked"{{/if}} /><label for="linkCheckbox">{{linkShareLabel}}</label>' + + '<br />' + + '<label for="linkText" class="hidden-visually">{{urlLabel}}</label>' + + '<input id="linkText" {{#unless isLinkShare}}class="hidden"{{/unless}} type="text" readonly="readonly" value="{{shareLinkURL}}" />' + + ' {{#if showPasswordCheckBox}}' + + '<input type="checkbox" name="showPassword" id="showPassword" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" /><label for="showPassword">{{enablePasswordLabel}}</label>' + + ' {{/if}}' + + '<div id="linkPass" {{#unless isPasswordSet}}class="hidden"{{/unless}}>' + + ' <label for="linkPassText" class="hidden-visually">{{passwordLabel}}</label>' + + ' <input id="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" />' + + ' <span class="icon-loading-small hidden"></span>' + + '</div>' + + ' {{#if publicUpload}}' + + '<div id="allowPublicUploadWrapper">' + + ' <span class="icon-loading-small hidden"></span>' + + ' <input type="checkbox" value="1" name="allowPublicUpload" id="sharingDialogAllowPublicUpload" {{{publicUploadChecked}}} />' + + '<label for="sharingDialogAllowPublicUpload">{{publicUploadLabel}}</label>' + + '</div>' + + ' {{/if}}' + + ' {{#if mailPublicNotificationEnabled}}' + + '<form id="emailPrivateLink" class="emailPrivateLinkForm">' + + ' <input id="email" value="" placeholder="{{mailPrivatePlaceholder}}" type="text" />' + + ' <input id="emailButton" type="submit" value="{{mailButtonText}}" />' + + '</form>' + + ' {{/if}}' + + '{{else}}' + + '<input id="shareWith" type="text" placeholder="{{noSharingPlaceholder}}" disabled="disabled"/>' + + '{{/if}}' + ; + + /** + * @class OCA.Share.ShareDialogLinkShareView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the GUI of the share dialogue + * + */ + var ShareDialogLinkShareView = OC.Backbone.View.extend({ + /** @type {string} **/ + id: 'shareDialogLinkShare', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {Function} **/ + _template: undefined, + + /** @type {boolean} **/ + showLink: true, + + events: { + 'submit .emailPrivateLinkForm': '_onEmailPrivateLink' + }, + + initialize: function(options) { + var view = this; + + this.model.on('change:permissions', function() { + view.render(); + }); + + this.model.on('change:itemType', function() { + view.render(); + }); + + this.model.on('change:allowPublicUploadStatus', function() { + view.render(); + }); + + this.model.on('change:linkShare', function() { + view.render(); + }); + + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + + _.bindAll(this, 'onLinkCheckBoxChange', 'onPasswordEntered', + 'onShowPasswordClick', 'onAllowPublicUploadChange'); + }, + + onLinkCheckBoxChange: function() { + var $checkBox = this.$el.find('#linkCheckbox'); + var $loading = $checkBox.siblings('.icon-loading-small'); + if(!$loading.hasClass('hidden')) { + return false; + } + + if($checkBox.is(':checked')) { + if(this.configModel.get('enforcePasswordForPublicLink') === false) { + $loading.removeClass('hidden'); + // this will create it + this.model.saveLinkShare(); + } else { + this.$el.find('#linkPass').slideToggle(OC.menuSpeed); + // TODO drop with IE8 drop + if($('html').hasClass('ie8')) { + this.$el.find('#linkPassText').attr('placeholder', null); + this.$el.find('#linkPassText').val(''); + } + this.$el.find('#linkPassText').focus(); + } + } else { + this.model.removeLinkShare(); + } + }, + + onLinkTextClick: function() { + this.focus(); + this.select(); + }, + + onShowPasswordClick: function() { + this.$el.find('#linkPass').slideToggle(OC.menuSpeed); + if(!this.$el.find('#showPassword').is(':checked')) { + this.model.setPassword(''); + this.model.saveLinkShare(); + } else { + this.$el.find('#linkPassText').focus(); + } + }, + + onPasswordEntered: function() { + var password = this.$el.find('#linkPassText').val(); + if(password === '') { + return; + } + + this.$el.find('#linkPass .icon-loading-small') + .removeClass('hidden') + .addClass('inlineblock'); + + this.model.setPassword(password); + this.model.saveLinkShare(); + }, + + onAllowPublicUploadChange: function() { + this.$el.find('#sharingDialogAllowPublicUpload') + .siblings('.icon-loading-small').removeClass('hidden').addClass('inlineblock'); + this.model.setPublicUpload(this.$el.find('#sharingDialogAllowPublicUpload').is(':checked')); + this.model.saveLinkShare(); + }, + + _onEmailPrivateLink: function(event) { + event.preventDefault(); + + var $emailField = this.$el.find('#email'); + var $emailButton = this.$el.find('#emailButton'); + var email = this.$el.find('#email').val(); + if (email !== '') { + $emailField.prop('disabled', true); + $emailButton.prop('disabled', true); + $emailField.val(t('core', 'Sending ...')); + this.model.sendEmailPrivateLink(email).then(function() { + $emailField.css('font-weight', 'bold').val(t('core','Email sent')); + setTimeout(function() { + $emailField.css('font-weight', 'normal').val(''); + $emailField.prop('disabled', false); + $emailButton.prop('disabled', false); + }, 2000); + }); + } + return false; + }, + + render: function() { + var linkShareTemplate = this.template(); + + if( !this.model.sharePermissionPossible() + || !this.showLink + || !this.configModel.isShareWithLinkAllowed()) + { + this.$el.html(linkShareTemplate({ + shareAllowed: false, + noSharingPlaceholder: t('core', 'Resharing is not allowed') + })); + return this; + } + + var publicUpload = + this.model.isFolder() + && this.model.createPermissionPossible() + && this.configModel.isPublicUploadEnabled(); + + var publicUploadChecked = ''; + if(this.model.isPublicUploadAllowed()) { + publicUploadChecked = 'checked="checked"'; + } + + var isLinkShare = this.model.get('linkShare').isLinkShare; + var isPasswordSet = !!this.model.get('linkShare').password; + var showPasswordCheckBox = isLinkShare + && ( !this.configModel.get('enforcePasswordForPublicLink') + || !this.model.get('linkShare').password); + + this.$el.html(linkShareTemplate({ + shareAllowed: true, + isLinkShare: isLinkShare, + shareLinkURL: this.model.get('linkShare').link, + linkShareLabel: t('core', 'Share link'), + urlLabel: t('core', 'Link'), + enablePasswordLabel: t('core', 'Password protect'), + passwordLabel: t('core', 'Password'), + passwordPlaceholder: isPasswordSet ? '**********' : t('core', 'Choose a password for the public link'), + isPasswordSet: isPasswordSet, + showPasswordCheckBox: showPasswordCheckBox, + publicUpload: publicUpload && isLinkShare, + publicUploadChecked: publicUploadChecked, + publicUploadLabel: t('core', 'Allow editing'), + mailPublicNotificationEnabled: isLinkShare && this.configModel.isMailPublicNotificationEnabled(), + mailPrivatePlaceholder: t('core', 'Email link to person'), + mailButtonText: t('core', 'Send') + })); + + // TODO: move this to delegate events instead + this.$el.find('#linkCheckbox').click(this.onLinkCheckBoxChange); + this.$el.find('#sharingDialogAllowPublicUpload').change(this.onAllowPublicUploadChange); + this.$el.find('#linkText').click(this.onLinkTextClick); + this.$el.find('#showPassword').click(this.onShowPasswordClick); + this.$el.find('#linkPassText').focusout(this.onPasswordEntered); + var view = this; + this.$el.find('#linkPassText').keyup(function(event) { + if(event.keyCode == 13) { + view.onPasswordEntered(); + } + }); + + var $emailField = this.$el.find('#email'); + if (isLinkShare && $emailField.length !== 0) { + $emailField.autocomplete({ + minLength: 1, + source: function (search, response) { + $.get( + OC.generateUrl('core/ajax/share.php'), { + fetch: 'getShareWithEmail', + search: search.term + }, function(result) { + if (result.status == 'success' && result.data.length > 0) { + response(result.data); + } + }); + }, + select: function( event, item ) { + $emailField.val(item.item.email); + return false; + } + }) + .data("ui-autocomplete")._renderItem = function( ul, item ) { + return $('<li>') + .append('<a>' + escapeHTML(item.displayname) + "<br>" + escapeHTML(item.email) + '</a>' ) + .appendTo( ul ); + }; + } + + this.delegateEvents(); + + return this; + }, + + /** + * @returns {Function} from Handlebars + * @private + */ + template: function () { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template; + } + + }); + + OC.Share.ShareDialogLinkShareView = ShareDialogLinkShareView; + +})(); diff --git a/core/js/sharedialogresharerinfoview.js b/core/js/sharedialogresharerinfoview.js new file mode 100644 index 00000000000..600e2ecbf56 --- /dev/null +++ b/core/js/sharedialogresharerinfoview.js @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE = + '<span class="reshare">' + + ' {{#if avatarEnabled}}' + + ' <div class="avatar" data-userName="{{reshareOwner}}"></div>' + + ' {{/if}}' + + ' {{sharedByText}}' + + '</span><br/>' + ; + + /** + * @class OCA.Share.ShareDialogView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the GUI of the share dialogue + * + */ + var ShareDialogResharerInfoView = OC.Backbone.View.extend({ + /** @type {string} **/ + id: 'shareDialogResharerInfo', + + /** @type {string} **/ + tagName: 'div', + + /** @type {string} **/ + className: 'reshare', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {Function} **/ + _template: undefined, + + initialize: function(options) { + var view = this; + + this.model.on('change:reshare', function() { + view.render(); + }); + + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + }, + + render: function() { + if (!this.model.hasReshare() + || this.model.getReshareOwner() === OC.currentUser) + { + this.$el.empty(); + return this; + } + + var reshareTemplate = this.template(); + var ownerDisplayName = this.model.getReshareOwnerDisplayname(); + var sharedByText = ''; + if (this.model.getReshareType() === OC.Share.SHARE_TYPE_GROUP) { + sharedByText = t( + 'core', + 'Shared with you and the group {group} by {owner}', + { + group: this.model.getReshareWith(), + owner: ownerDisplayName + } + ); + } else { + sharedByText = t( + 'core', + 'Shared with you by {owner}', + { owner: ownerDisplayName } + ); + } + + this.$el.html(reshareTemplate({ + avatarEnabled: this.configModel.areAvatarsEnabled(), + reshareOwner: this.model.getReshareOwner(), + sharedByText: sharedByText + })); + + if(this.configModel.areAvatarsEnabled()) { + this.$el.find('.avatar').each(function() { + var $this = $(this); + $this.avatar($this.data('username'), 32); + }); + } + + return this; + }, + + /** + * @returns {Function} from Handlebars + * @private + */ + template: function () { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template; + } + + }); + + OC.Share.ShareDialogResharerInfoView = ShareDialogResharerInfoView; + +})(); diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js new file mode 100644 index 00000000000..d2c45bb08b1 --- /dev/null +++ b/core/js/sharedialogshareelistview.js @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if (!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE = + '<ul id="shareWithList">' + + '{{#each sharees}}' + + ' {{#if isCollection}}' + + ' <li data-collection="{{collectionID}}">{{text}}</li>' + + ' {{/if}}' + + ' {{#unless isCollection}}' + + ' <li data-share-type="{{shareType}}" data-share-with="{{shareWith}}" title="{{shareWith}}">' + + ' <a href="#" class="unshare"><img class="svg" alt="{{unshareLabel}}" title="{{unshareLabel}}" src="{{unshareImage}}" /></a>' + + ' {{#if avatarEnabled}}' + + ' <div class="avatar {{#if modSeed}}imageplaceholderseed{{/if}}" data-username="{{shareWith}}" {{#if modSeed}}data-seed="{{shareWith}} {{shareType}}"{{/if}}></div>' + + ' {{/if}}' + + ' <span class="username">{{shareWithDisplayName}}</span>' + + ' {{#if mailPublicNotificationEnabled}} {{#unless isRemoteShare}}' + + ' <input id="mail-{{shareWith}}" type="checkbox" name="mailNotification" class="mailNotification" {{#if wasMailSent}}checked="checked"{{/if}} />' + + ' <label for="mail-{{shareWith}}">{{notifyByMailLabel}}</label>' + + ' {{/unless}} {{/if}}' + + ' {{#if isResharingAllowed}} {{#if sharePermissionPossible}} {{#unless isRemoteShare}}' + + ' <input id="canShare-{{shareWith}}" type="checkbox" name="share" class="permissions" {{#if hasSharePermission}}checked="checked"{{/if}} data-permissions="{{sharePermission}}" />' + + ' <label for="canShare-{{shareWith}}">{{canShareLabel}}</label>' + + ' {{/unless}} {{/if}} {{/if}}' + + ' {{#if editPermissionPossible}}' + + ' <input id="canEdit-{{shareWith}}" type="checkbox" name="edit" class="permissions" {{#if hasEditPermission}}checked="checked"{{/if}} />' + + ' <label for="canEdit-{{shareWith}}">{{canEditLabel}}</label>' + + ' {{/if}}' + + ' {{#unless isRemoteShare}}' + + ' <a href="#" class="showCruds"><img class="svg" alt="{{crudsLabel}}" src="{{triangleSImage}}"/></a>' + + ' <div class="cruds hidden">' + + ' {{#if createPermissionPossible}}' + + ' <input id="canCreate-{{shareWith}}" type="checkbox" name="create" class="permissions" {{#if hasCreatePermission}}checked="checked"{{/if}} data-permissions="{{createPermission}}"/>' + + ' <label for="canCreate-{{shareWith}}">{{createPermissionLabel}}</label>' + + ' {{/if}}' + + ' {{#if updatePermissionPossible}}' + + ' <input id="canUpdate-{{shareWith}}" type="checkbox" name="update" class="permissions" {{#if hasUpdatePermission}}checked="checked"{{/if}} data-permissions="{{updatePermission}}"/>' + + ' <label for="canUpdate-{{shareWith}}">{{updatePermissionLabel}}</label>' + + ' {{/if}}' + + ' {{#if deletePermissionPossible}} {{#unless isRemoteShare}}' + + ' <input id="canDelete-{{shareWith}}" type="checkbox" name="delete" class="permissions" {{#if hasDeletePermission}}checked="checked"{{/if}} data-permissions="{{deletePermission}}"/>' + + ' <label for="canDelete-{{shareWith}}">{{deletePermissionLabel}}</label>' + + ' {{/unless}} {{/if}}' + + ' </div>' + + ' {{/unless}}' + + ' </li>' + + ' {{/unless}}' + + '{{/each}}' + + '</ul>' + ; + + /** + * @class OCA.Share.ShareDialogShareeListView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the sharee list part in the GUI of the share dialogue + * + */ + var ShareDialogShareeListView = OC.Backbone.View.extend({ + /** @type {string} **/ + id: 'shareDialogLinkShare', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {Function} **/ + _template: undefined, + + /** @type {boolean} **/ + showLink: true, + + /** @type {object} **/ + _collections: {}, + + events: { + 'click .unshare': 'onUnshare', + 'click .permissions': 'onPermissionChange', + 'click .showCruds': 'onCrudsToggle', + 'click .mailNotification': 'onSendMailNotification' + }, + + initialize: function(options) { + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + + var view = this; + this.model.on('change:shares', function() { + view.render(); + }); + }, + + processCollectionShare: function(shareIndex) { + var type = this.model.getCollectionType(shareIndex); + var id = this.model.getCollectionPath(shareIndex); + if(type !== 'file' && type !== 'folder') { + id = this.model.getCollectionSource(shareIndex); + } + var displayName = this.model.getShareWithDisplayName(shareIndex); + if(!_.isUndefined(this._collections[id])) { + this._collections[id].text = this._collections[id].text + ", " + displayName; + } else { + this._collections[id] = {}; + this._collections[id].text = t('core', 'Shared in {item} with {user}', {'item': id, user: displayName}); + this._collections[id].id = id; + this._collections[id].isCollection = true; + } + }, + + /** + * + * @param {OC.Share.Types.ShareInfo} shareInfo + * @returns {object} + */ + getShareeObject: function(shareIndex) { + var shareWith = this.model.getShareWith(shareIndex); + var shareWithDisplayName = this.model.getShareWithDisplayName(shareIndex); + var shareType = this.model.getShareType(shareIndex); + + var hasPermissionOverride = {}; + if (shareType === OC.Share.SHARE_TYPE_GROUP) { + shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'group') + ')'; + } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) { + shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'remote') + ')'; + hasPermissionOverride = { + createPermissionPossible: true, + updatePermissionPossible: true + }; + } + + return _.extend(hasPermissionOverride, { + hasSharePermission: this.model.hasSharePermission(shareIndex), + hasEditPermission: this.model.hasEditPermission(shareIndex), + hasCreatePermission: this.model.hasCreatePermission(shareIndex), + hasUpdatePermission: this.model.hasUpdatePermission(shareIndex), + hasDeletePermission: this.model.hasDeletePermission(shareIndex), + wasMailSent: this.model.notificationMailWasSent(shareIndex), + shareWith: shareWith, + shareWithDisplayName: shareWithDisplayName, + shareType: shareType, + modSeed: shareType !== OC.Share.SHARE_TYPE_USER, + isRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE + }); + }, + + getShareeList: function() { + var universal = { + avatarEnabled: this.configModel.areAvatarsEnabled(), + mailPublicNotificationEnabled: this.configModel.isMailPublicNotificationEnabled(), + notifyByMailLabel: t('core', 'notify by email'), + unshareLabel: t('core', 'Unshare'), + unshareImage: OC.imagePath('core', 'actions/delete'), + canShareLabel: t('core', 'can share'), + canEditLabel: t('core', 'can edit'), + createPermissionLabel: t('core', 'create'), + updatePermissionLabel: t('core', 'change'), + deletePermissionLabel: t('core', 'delete'), + crudsLabel: t('core', 'access control'), + triangleSImage: OC.imagePath('core', 'actions/triangle-s'), + isResharingAllowed: this.configModel.get('isResharingAllowed'), + sharePermissionPossible: this.model.sharePermissionPossible(), + editPermissionPossible: this.model.editPermissionPossible(), + createPermissionPossible: this.model.createPermissionPossible(), + updatePermissionPossible: this.model.updatePermissionPossible(), + deletePermissionPossible: this.model.deletePermissionPossible(), + sharePermission: OC.PERMISSION_SHARE, + createPermission: OC.PERMISSION_CREATE, + updatePermission: OC.PERMISSION_UPDATE, + deletePermission: OC.PERMISSION_DELETE + }; + + this._collections = {}; + + if(!this.model.hasUserShares()) { + return []; + } + + var shares = this.model.get('shares'); + var list = []; + for(var index = 0; index < shares.length; index++) { + if(this.model.isCollection(index)) { + this.processCollectionShare(index); + } else { + // first empty {} is necessary, otherwise we get in trouble + // with references + list.push(_.extend({}, universal, this.getShareeObject(index))); + } + } + list = _.union(_.values(this._collections), list); + + return list; + }, + + render: function() { + var shareeListTemplate = this.template(); + this.$el.html(shareeListTemplate({ + sharees: this.getShareeList() + })); + + if(this.configModel.areAvatarsEnabled()) { + this.$el.find('.avatar').each(function() { + var $this = $(this); + if ($this.hasClass('imageplaceholderseed')) { + $this.css({width: 32, height: 32}); + $this.imageplaceholder($this.data('seed')); + } else { + $this.avatar($this.data('username'), 32); + } + }); + } + + this.delegateEvents(); + + return this; + }, + + /** + * @returns {Function} from Handlebars + * @private + */ + template: function () { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + return this._template; + }, + + onUnshare: function(event) { + var $element = $(event.target); + + if($element.hasClass('icon-loading-small')) { + // in process + return; + } + $element.empty().addClass('icon-loading-small'); + + var $li = $element.closest('li'); + var shareType = $li.data('share-type'); + var shareWith = $li.attr('data-share-with'); + + this.model.removeShare(shareType, shareWith); + + return false; + }, + + onPermissionChange: function(event) { + var $element = $(event.target); + var $li = $element.closest('li'); + var shareType = $li.data('share-type'); + var shareWith = $li.attr('data-share-with'); + + // adjust checkbox states + var $checkboxes = $('.permissions', $li).not('input[name="edit"]').not('input[name="share"]'); + var checked; + if ($element.attr('name') === 'edit') { + checked = $element.is(':checked'); + // Check/uncheck Create, Update, and Delete checkboxes if Edit is checked/unck + $($checkboxes).attr('checked', checked); + } else { + var numberChecked = $checkboxes.filter(':checked').length; + checked = numberChecked > 0; + $('input[name="edit"]', $li).attr('checked', checked); + } + + var permissions = OC.PERMISSION_READ; + $('.permissions', $li).not('input[name="edit"]').filter(':checked').each(function(index, checkbox) { + permissions |= $(checkbox).data('permissions'); + }); + + this.model.setPermissions(shareType, shareWith, permissions); + }, + + onCrudsToggle: function(event) { + var $target = $(event.target); + $target.closest('li').find('.cruds').toggleClass('hidden'); + return false; + }, + + onSendMailNotification: function(event) { + var $target = $(event.target); + var $li = $(event.target).closest('li'); + var shareType = $li.data('share-type'); + var shareWith = $li.attr('data-share-with'); + + this.model.sendNotificationForShare(shareType, shareWith, $target.is(':checked')); + } + }); + + OC.Share.ShareDialogShareeListView = ShareDialogShareeListView; + +})(); diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js new file mode 100644 index 00000000000..2b61dab3ceb --- /dev/null +++ b/core/js/sharedialogview.js @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if(!OC.Share) { + OC.Share = {}; + } + + var TEMPLATE_BASE = + '<div class="resharerInfoView"></div>' + + '{{#if isSharingAllowed}}' + + '<label for="shareWith" class="hidden-visually">{{shareLabel}}</label>' + + '<div class="oneline">' + + ' <input id="shareWith" type="text" placeholder="{{sharePlaceholder}}" />' + + ' <span class="shareWithLoading icon-loading-small hidden"></span>'+ + '{{{remoteShareInfo}}}' + + '</div>' + + '{{/if}}' + + '<div class="shareeListView"></div>' + + '<div class="linkShareView"></div>' + + '<div class="expirationView"></div>' + ; + + var TEMPLATE_REMOTE_SHARE_INFO = + '<a target="_blank" class="icon-info svg shareWithRemoteInfo hasTooltip" href="{{docLink}}" ' + + 'title="{{tooltip}}"></a>'; + + /** + * @class OCA.Share.ShareDialogView + * @member {OC.Share.ShareItemModel} model + * @member {jQuery} $el + * @memberof OCA.Sharing + * @classdesc + * + * Represents the GUI of the share dialogue + * + */ + var ShareDialogView = OC.Backbone.View.extend({ + /** @type {Object} **/ + _templates: {}, + + /** @type {boolean} **/ + _showLink: true, + + /** @type {string} **/ + tagName: 'div', + + /** @type {OC.Share.ShareConfigModel} **/ + configModel: undefined, + + /** @type {object} **/ + resharerInfoView: undefined, + + /** @type {object} **/ + linkShareView: undefined, + + /** @type {object} **/ + expirationView: undefined, + + /** @type {object} **/ + shareeListView: undefined, + + initialize: function(options) { + var view = this; + + this.model.on('fetchError', function() { + OC.Notification.showTemporary(t('core', 'Share details could not be loaded for this item.')); + }); + + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } else { + throw 'missing OC.Share.ShareConfigModel'; + } + + this.configModel.on('change:isRemoteShareAllowed', function() { + view.render(); + }); + this.model.on('change:permissions', function() { + view.render(); + }); + + var subViewOptions = { + model: this.model, + configModel: this.configModel + }; + + var subViews = { + resharerInfoView: 'ShareDialogResharerInfoView', + linkShareView: 'ShareDialogLinkShareView', + expirationView: 'ShareDialogExpirationView', + shareeListView: 'ShareDialogShareeListView' + }; + + for(var name in subViews) { + var className = subViews[name]; + this[name] = _.isUndefined(options[name]) + ? new OC.Share[className](subViewOptions) + : options[name]; + } + + _.bindAll(this, 'autocompleteHandler', '_onSelectRecipient'); + }, + + autocompleteHandler: function (search, response) { + var view = this; + var $loading = this.$el.find('.shareWithLoading'); + $loading.removeClass('hidden'); + $loading.addClass('inlineblock'); + $.get(OC.filePath('core', 'ajax', 'share.php'), { + fetch: 'getShareWith', + search: search.term.trim(), + limit: 200, + itemShares: OC.Share.itemShares, + itemType: view.model.get('itemType') + }, function (result) { + $loading.addClass('hidden'); + $loading.removeClass('inlineblock'); + if (result.status == 'success' && result.data.length > 0) { + $("#shareWith").autocomplete("option", "autoFocus", true); + response(result.data); + } else { + response(); + } + }).fail(function () { + $loading.addClass('hidden'); + $loading.removeClass('inlineblock'); + OC.Notification.show(t('core', 'An error occured. Please try again')); + window.setTimeout(OC.Notification.hide, 5000); + }); + }, + + autocompleteRenderItem: function(ul, item) { + var insert = $("<a>"); + var text = item.label; + if (item.value.shareType === OC.Share.SHARE_TYPE_GROUP) { + text = text + ' ('+t('core', 'group')+')'; + } else if (item.value.shareType === OC.Share.SHARE_TYPE_REMOTE) { + text = text + ' ('+t('core', 'remote')+')'; + } + insert.text(text); + if(item.value.shareType === OC.Share.SHARE_TYPE_GROUP) { + insert = insert.wrapInner('<strong></strong>'); + } + return $("<li>") + .addClass((item.value.shareType === OC.Share.SHARE_TYPE_GROUP) ? 'group' : 'user') + .append(insert) + .appendTo(ul); + }, + + _onSelectRecipient: function(e, s) { + e.preventDefault(); + $(e.target).val(''); + this.model.addShare(s.item.value); + }, + + render: function() { + var baseTemplate = this._getTemplate('base', TEMPLATE_BASE); + + this.$el.html(baseTemplate({ + shareLabel: t('core', 'Share'), + sharePlaceholder: this._renderSharePlaceholderPart(), + remoteShareInfo: this._renderRemoteShareInfoPart(), + isSharingAllowed: this.model.sharePermissionPossible() + })); + + var $shareField = this.$el.find('#shareWith'); + if ($shareField.length) { + $shareField.autocomplete({ + minLength: 2, + delay: 750, + source: this.autocompleteHandler, + select: this._onSelectRecipient + }).data('ui-autocomplete')._renderItem = this.autocompleteRenderItem; + } + + this.resharerInfoView.$el = this.$el.find('.resharerInfoView'); + this.resharerInfoView.render(); + + this.linkShareView.$el = this.$el.find('.linkShareView'); + this.linkShareView.render(); + + this.expirationView.$el = this.$el.find('.expirationView'); + this.expirationView.render(); + + this.shareeListView.$el = this.$el.find('.shareeListView'); + this.shareeListView.render(); + + this.$el.find('.hasTooltip').tooltip(); + + return this; + }, + + /** + * sets whether share by link should be displayed or not. Default is + * true. + * + * @param {bool} showLink + */ + setShowLink: function(showLink) { + this._showLink = (typeof showLink === 'boolean') ? showLink : true; + this.linkShareView.showLink = this._showLink; + }, + + _renderRemoteShareInfoPart: function() { + var remoteShareInfo = ''; + if(this.configModel.get('isRemoteShareAllowed')) { + var infoTemplate = this._getRemoteShareInfoTemplate(); + remoteShareInfo = infoTemplate({ + docLink: this.configModel.getFederatedShareDocLink(), + tooltip: t('core', 'Share with people on other ownClouds using the syntax username@example.com/owncloud') + }); + } + + return remoteShareInfo; + }, + + _renderSharePlaceholderPart: function () { + var sharePlaceholder = t('core', 'Share with users or groups …'); + if (this.configModel.get('isRemoteShareAllowed')) { + sharePlaceholder = t('core', 'Share with users, groups or remote users …'); + } + return sharePlaceholder; + }, + + /** + * + * @param {string} key - an identifier for the template + * @param {string} template - the HTML to be compiled by Handlebars + * @returns {Function} from Handlebars + * @private + */ + _getTemplate: function (key, template) { + if (!this._templates[key]) { + this._templates[key] = Handlebars.compile(template); + } + return this._templates[key]; + }, + + /** + * returns the info template for remote sharing + * + * @returns {Function} + * @private + */ + _getRemoteShareInfoTemplate: function() { + return this._getTemplate('remoteShareInfo', TEMPLATE_REMOTE_SHARE_INFO); + } + }); + + OC.Share.ShareDialogView = ShareDialogView; + +})(); diff --git a/core/js/shareitemmodel.js b/core/js/shareitemmodel.js new file mode 100644 index 00000000000..ff0d3a6d800 --- /dev/null +++ b/core/js/shareitemmodel.js @@ -0,0 +1,750 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + if(!OC.Share) { + OC.Share = {}; + OC.Share.Types = {}; + } + + /** + * @typedef {object} OC.Share.Types.LinkShareInfo + * @property {bool} isLinkShare + * @property {string} token + * @property {string|null} password + * @property {string} link + * @property {number} permissions + * @property {Date} expiration + * @property {number} stime share time + */ + + /** + * @typedef {object} OC.Share.Types.Collection + * @property {string} item_type + * @property {string} path + * @property {string} item_source TODO: verify + */ + + /** + * @typedef {object} OC.Share.Types.Reshare + * @property {string} uid_owner + * @property {number} share_type + * @property {string} share_with + * @property {string} displayname_owner + * @property {number} permissions + */ + + /** + * @typedef {object} OC.Share.Types.ShareInfo + * @property {number} share_type + * @property {number} permissions + * @property {number} file_source optional + * @property {number} item_source + * @property {string} token + * @property {string} share_with + * @property {string} share_with_displayname + * @property {string} share_mail_send + * @property {OC.Share.Types.Collection|undefined} collection + * @property {Date} expiration optional? + * @property {number} stime optional? + */ + + /** + * @typedef {object} OC.Share.Types.ShareItemInfo + * @property {OC.Share.Types.Reshare} reshare + * @property {OC.Share.Types.ShareInfo[]} shares + * @property {OC.Share.Types.LinkShareInfo|undefined} linkShare + */ + + /** + * @class OCA.Share.ShareItemModel + * @classdesc + * + * Represents the GUI of the share dialogue + * + * // FIXME: use OC Share API once #17143 is done + * + * // TODO: this really should be a collection of share item models instead, + * where the link share is one of them + */ + var ShareItemModel = OC.Backbone.Model.extend({ + initialize: function(attributes, options) { + if(!_.isUndefined(options.configModel)) { + this.configModel = options.configModel; + } + if(!_.isUndefined(options.fileInfoModel)) { + /** @type {OC.Files.FileInfo} **/ + this.fileInfoModel = options.fileInfoModel; + } + + _.bindAll(this, 'addShare'); + }, + + defaults: { + allowPublicUploadStatus: false, + permissions: 0, + linkShare: {} + }, + + /** + * Saves the current link share information. + * + * This will trigger an ajax call and refetch the model afterwards. + * + * TODO: this should be a separate model + */ + saveLinkShare: function(attributes, options) { + var model = this; + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + + // TODO: use backbone's default value mechanism once this is a separate model + var requiredAttributes = [ + { name: 'password', defaultValue: '' }, + { name: 'permissions', defaultValue: OC.PERMISSION_READ }, + { name: 'expiration', defaultValue: this.configModel.getDefaultExpirationDateString() } + ]; + + attributes = attributes || {}; + + // get attributes from the model and fill in with default values + _.each(requiredAttributes, function(attribute) { + // a provided options overrides a present value of the link + // share. If neither is given, the default value is used. + if(_.isUndefined(attribute[attribute.name])) { + attributes[attribute.name] = attribute.defaultValue; + var currentValue = model.get('linkShare')[attribute.name]; + if(!_.isUndefined(currentValue)) { + attributes[attribute.name] = currentValue; + } + } + }); + + OC.Share.share( + itemType, + itemSource, + OC.Share.SHARE_TYPE_LINK, + attributes.password, + attributes.permissions, + this.fileInfoModel.get('name'), + attributes.expiration, + function(result) { + if (!result || result.status !== 'success') { + model.fetch({ + success: function() { + if (options && _.isFunction(options.success)) { + options.success(model); + } + } + }); + } else { + if (options && _.isFunction(options.error)) { + options.error(model); + } + } + }, + function(result) { + var msg = t('core', 'Error'); + if (result.data && result.data.message) { + msg = result.data.message; + } + + if (options && _.isFunction(options.error)) { + options.error(model, msg); + } else { + OC.dialogs.alert(msg, t('core', 'Error while sharing')); + } + } + ); + }, + + removeLinkShare: function() { + this.removeShare(OC.Share.SHARE_TYPE_LINK, ''); + }, + + /** + * Sets the public upload flag + * + * @param {bool} allow whether public upload is allowed + */ + setPublicUpload: function(allow) { + var permissions = OC.PERMISSION_READ; + if(allow) { + permissions = OC.PERMISSION_UPDATE | OC.PERMISSION_CREATE | OC.PERMISSION_READ; + } + + this.get('linkShare').permissions = permissions; + }, + + /** + * Sets the expiration date of the public link + * + * @param {string} expiration expiration date + */ + setExpirationDate: function(expiration) { + this.get('linkShare').expiration = expiration; + }, + + /** + * Set password of the public link share + * + * @param {string} password + */ + setPassword: function(password) { + this.get('linkShare').password = password; + }, + + addShare: function(attributes, options) { + var shareType = attributes.shareType; + var shareWith = attributes.shareWith; + var fileName = this.fileInfoModel.get('name'); + options = options || {}; + + // Default permissions are Edit (CRUD) and Share + // Check if these permissions are possible + var permissions = OC.PERMISSION_READ; + if (shareType === OC.Share.SHARE_TYPE_REMOTE) { + permissions = OC.PERMISSION_CREATE | OC.PERMISSION_UPDATE | OC.PERMISSION_READ; + } else { + if (this.updatePermissionPossible()) { + permissions = permissions | OC.PERMISSION_UPDATE; + } + if (this.createPermissionPossible()) { + permissions = permissions | OC.PERMISSION_CREATE; + } + if (this.deletePermissionPossible()) { + permissions = permissions | OC.PERMISSION_DELETE; + } + if (this.configModel.get('isResharingAllowed') && (this.sharePermissionPossible())) { + permissions = permissions | OC.PERMISSION_SHARE; + } + } + + var model = this; + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + OC.Share.share(itemType, itemSource, shareType, shareWith, permissions, fileName, options.expiration, function() { + model.fetch(); + }); + }, + + setPermissions: function(shareType, shareWith, permissions) { + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + + // TODO: in the future, only set the permissions on the model but don't save directly + OC.Share.setPermissions(itemType, itemSource, shareType, shareWith, permissions); + }, + + removeShare: function(shareType, shareWith) { + var model = this; + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + + OC.Share.unshare(itemType, itemSource, shareType, shareWith, function() { + model.fetch(); + }); + }, + + /** + * @returns {boolean} + */ + isPublicUploadAllowed: function() { + return this.get('allowPublicUploadStatus'); + }, + + /** + * @returns {boolean} + */ + isFolder: function() { + return this.get('itemType') === 'folder'; + }, + + /** + * @returns {boolean} + */ + isFile: function() { + return this.get('itemType') === 'file'; + }, + + /** + * whether this item has reshare information + * @returns {boolean} + */ + hasReshare: function() { + var reshare = this.get('reshare'); + return _.isObject(reshare) && !_.isUndefined(reshare.uid_owner); + }, + + /** + * whether this item has user share information + * @returns {boolean} + */ + hasUserShares: function() { + var shares = this.get('shares'); + return _.isArray(shares) && shares.length > 0; + }, + + /** + * Returns whether this item has a link share + * + * @return {bool} true if a link share exists, false otherwise + */ + hasLinkShare: function() { + var linkShare = this.get('linkShare'); + if (linkShare && linkShare.isLinkShare) { + return true; + } + return false; + }, + + /** + * @param {number} shareIndex + * @returns {string} + */ + getCollectionType: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } else if(_.isUndefined(share.collection)) { + throw "Share is not a collection"; + } + + return share.collection.item_type; + }, + + /** + * @param {number} shareIndex + * @returns {string} + */ + getCollectionPath: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } else if(_.isUndefined(share.collection)) { + throw "Share is not a collection"; + } + + return share.collection.path; + }, + + /** + * @param {number} shareIndex + * @returns {string} + */ + getCollectionSource: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } else if(_.isUndefined(share.collection)) { + throw "Share is not a collection"; + } + + return share.collection.item_source; + }, + + /** + * @param {number} shareIndex + * @returns {boolean} + */ + isCollection: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + if(_.isUndefined(share.collection)) { + return false; + } + return true; + }, + + + /** + * @returns {string} + */ + getReshareOwner: function() { + return this.get('reshare').uid_owner; + }, + + /** + * @returns {string} + */ + getReshareOwnerDisplayname: function() { + return this.get('reshare').displayname_owner; + }, + + /** + * @returns {string} + */ + getReshareWith: function() { + return this.get('reshare').share_with; + }, + + /** + * @returns {number} + */ + getReshareType: function() { + return this.get('reshare').share_type; + }, + + /** + * @param shareIndex + * @returns {string} + */ + getShareWith: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.share_with; + }, + + /** + * @param shareIndex + * @returns {string} + */ + getShareWithDisplayName: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.share_with_displayname; + }, + + getShareType: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.share_type; + }, + + /** + * whether a share from shares has the requested permission + * + * @param {number} shareIndex + * @param {number} permission + * @returns {boolean} + * @private + */ + _shareHasPermission: function(shareIndex, permission) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + if( share.share_type === OC.Share.SHARE_TYPE_REMOTE + && ( permission === OC.PERMISSION_SHARE + || permission === OC.PERMISSION_DELETE)) + { + return false; + } + return (share.permissions & permission) === permission; + }, + + notificationMailWasSent: function(shareIndex) { + /** @type OC.Share.Types.ShareInfo **/ + var share = this.get('shares')[shareIndex]; + if(!_.isObject(share)) { + throw "Unknown Share"; + } + return share.share_mail_send === '1'; + }, + + /** + * Sends an email notification for the given share + * + * @param {int} shareType share type + * @param {string} shareWith recipient + * @param {bool} state whether to set the notification flag or remove it + */ + sendNotificationForShare: function(shareType, shareWith, state) { + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + + return $.post( + OC.generateUrl('core/ajax/share.php'), + { + action: state ? 'informRecipients' : 'informRecipientsDisabled', + recipient: shareWith, + shareType: shareType, + itemSource: itemSource, + itemType: itemType + }, + function(result) { + if (result.status !== 'success') { + // FIXME: a model should not show dialogs + OC.dialogs.alert(t('core', result.data.message), t('core', 'Warning')); + } + } + ); + }, + + /** + * Send the link share information by email + * + * @param {string} recipientEmail recipient email address + */ + sendEmailPrivateLink: function(recipientEmail) { + var itemType = this.get('itemType'); + var itemSource = this.get('itemSource'); + var linkShare = this.get('linkShare'); + + return $.post( + OC.generateUrl('core/ajax/share.php'), { + action: 'email', + toaddress: recipientEmail, + link: linkShare.link, + itemType: itemType, + itemSource: itemSource, + file: this.fileInfoModel.get('name'), + expiration: linkShare.expiration || '' + }, + function(result) { + if (!result || result.status !== 'success') { + // FIXME: a model should not show dialogs + OC.dialogs.alert(result.data.message, t('core', 'Error while sending notification')); + } + }); + }, + + /** + * @returns {boolean} + */ + sharePermissionPossible: function() { + return (this.get('permissions') & OC.PERMISSION_SHARE) === OC.PERMISSION_SHARE; + }, + + /** + * @param {number} shareIndex + * @returns {boolean} + */ + hasSharePermission: function(shareIndex) { + return this._shareHasPermission(shareIndex, OC.PERMISSION_SHARE); + }, + + /** + * @returns {boolean} + */ + createPermissionPossible: function() { + return (this.get('permissions') & OC.PERMISSION_CREATE) === OC.PERMISSION_CREATE; + }, + + /** + * @param {number} shareIndex + * @returns {boolean} + */ + hasCreatePermission: function(shareIndex) { + return this._shareHasPermission(shareIndex, OC.PERMISSION_CREATE); + }, + + /** + * @returns {boolean} + */ + updatePermissionPossible: function() { + return (this.get('permissions') & OC.PERMISSION_UPDATE) === OC.PERMISSION_UPDATE; + }, + + /** + * @param {number} shareIndex + * @returns {boolean} + */ + hasUpdatePermission: function(shareIndex) { + return this._shareHasPermission(shareIndex, OC.PERMISSION_UPDATE); + }, + + /** + * @returns {boolean} + */ + deletePermissionPossible: function() { + return (this.get('permissions') & OC.PERMISSION_DELETE) === OC.PERMISSION_DELETE; + }, + + /** + * @param {number} shareIndex + * @returns {boolean} + */ + hasDeletePermission: function(shareIndex) { + return this._shareHasPermission(shareIndex, OC.PERMISSION_DELETE); + }, + + /** + * @returns {boolean} + */ + editPermissionPossible: function() { + return this.createPermissionPossible() + || this.updatePermissionPossible() + || this.deletePermissionPossible(); + }, + + /** + * @returns {boolean} + */ + hasEditPermission: function(shareIndex) { + return this.hasCreatePermission(shareIndex) + || this.hasUpdatePermission(shareIndex) + || this.hasDeletePermission(shareIndex); + }, + + fetch: function() { + var model = this; + OC.Share.loadItem(this.get('itemType'), this.get('itemSource'), function(data) { + model.set(model.parse(data)); + }); + }, + + /** + * Updates OC.Share.itemShares and OC.Share.statuses. + * + * This is required in case the user navigates away and comes back, + * the share statuses from the old arrays are still used to fill in the icons + * in the file list. + */ + _legacyFillCurrentShares: function(shares) { + var fileId = this.fileInfoModel.get('id'); + if (!shares || !shares.length) { + delete OC.Share.statuses[fileId]; + return; + } + + var currentShareStatus = OC.Share.statuses[fileId]; + if (!currentShareStatus) { + currentShareStatus = {link: false}; + OC.Share.statuses[fileId] = currentShareStatus; + } + currentShareStatus.link = false; + + OC.Share.currentShares = {}; + OC.Share.itemShares = []; + _.each(shares, + /** + * @param {OC.Share.Types.ShareInfo} share + */ + function(share) { + if (share.share_type === OC.Share.SHARE_TYPE_LINK) { + OC.Share.itemShares[share.share_type] = true; + currentShareStatus.link = true; + } else { + if (!OC.Share.itemShares[share.share_type]) { + OC.Share.itemShares[share.share_type] = []; + } + OC.Share.itemShares[share.share_type].push(share.share_with); + } + } + ); + }, + + parse: function(data) { + if(data === false) { + console.warn('no data was returned'); + trigger('fetchError'); + return {}; + } + + var permissions = this.get('possiblePermissions'); + if(!_.isUndefined(data.reshare) && !_.isUndefined(data.reshare.permissions) && data.reshare.uid_owner !== OC.currentUser) { + permissions = permissions & data.reshare.permissions; + } + + var allowPublicUploadStatus = false; + if(!_.isUndefined(data.shares)) { + $.each(data.shares, function (key, value) { + if (value.share_type === OC.Share.SHARE_TYPE_LINK) { + allowPublicUploadStatus = (value.permissions & OC.PERMISSION_CREATE) ? true : false; + return true; + } + }); + } + + /** @type {OC.Share.Types.ShareInfo[]} **/ + var shares = _.toArray(data.shares); + this._legacyFillCurrentShares(shares); + + var linkShare = { isLinkShare: false }; + // filter out the share by link + shares = _.reject(shares, + /** + * @param {OC.Share.Types.ShareInfo} share + */ + function(share) { + var isShareLink = + share.share_type === OC.Share.SHARE_TYPE_LINK + && ( share.file_source === this.get('itemSource') + || share.item_source === this.get('itemSource')); + + if (isShareLink) { + var link = window.location.protocol + '//' + window.location.host; + if (!share.token) { + // pre-token link + var fullPath = this.fileInfoModel.get('path') + '/' + + this.fileInfoModel.get('name'); + var location = '/' + OC.currentUser + '/files' + fullPath; + var type = this.fileInfoModel.isDirectory() ? 'folder' : 'file'; + link += OC.linkTo('', 'public.php') + '?service=files&' + + type + '=' + encodeURIComponent(location); + } else { + link += OC.generateUrl('/s/') + share.token; + } + linkShare = { + isLinkShare: true, + token: share.token, + password: share.share_with, + link: link, + permissions: share.permissions, + // currently expiration is only effective for link shares. + expiration: share.expiration, + stime: share.stime + }; + + return share; + } + }, + this + ); + + return { + reshare: data.reshare, + shares: shares, + linkShare: linkShare, + permissions: permissions, + allowPublicUploadStatus: allowPublicUploadStatus + }; + }, + + /** + * Parses a string to an valid integer (unix timestamp) + * @param time + * @returns {*} + * @internal Only used to work around a bug in the backend + */ + _parseTime: function(time) { + if (_.isString(time)) { + // skip empty strings and hex values + if (time === '' || (time.length > 1 && time[0] === '0' && time[1] === 'x')) { + return null; + } + time = parseInt(time, 10); + if(isNaN(time)) { + time = null; + } + } + return time; + } + }); + + OC.Share.ShareItemModel = ShareItemModel; +})(); diff --git a/core/js/tests/specs/shareSpec.js b/core/js/tests/specs/shareSpec.js index 5a59a117d77..9e80f4fe19d 100644 --- a/core/js/tests/specs/shareSpec.js +++ b/core/js/tests/specs/shareSpec.js @@ -21,1090 +21,6 @@ /* global oc_appconfig */ describe('OC.Share tests', function() { - describe('dropdown', function() { - var $container; - var oldAppConfig; - var loadItemStub; - var autocompleteStub; - var oldEnableAvatars; - var avatarStub; - var placeholderStub; - var oldCurrentUser; - - beforeEach(function() { - $('#testArea').append($('<div id="shareContainer"></div>')); - // horrible parameters - $('#testArea').append('<input id="allowShareWithLink" type="hidden" value="yes">'); - $('#testArea').append('<input id="mailPublicNotificationEnabled" name="mailPublicNotificationEnabled" type="hidden" value="yes">'); - $container = $('#shareContainer'); - /* jshint camelcase:false */ - oldAppConfig = _.extend({}, oc_appconfig.core); - oc_appconfig.core.enforcePasswordForPublicLink = false; - - loadItemStub = sinon.stub(OC.Share, 'loadItem'); - loadItemStub.returns({ - reshare: [], - shares: [] - }); - - autocompleteStub = sinon.stub($.fn, 'autocomplete', function() { - // dummy container with the expected attributes - if (!$(this).length) { - // simulate the real autocomplete that returns - // nothing at all when no element is specified - // (and potentially break stuff) - return null; - } - var $el = $('<div></div>').data('ui-autocomplete', {}); - return $el; - }); - - oldEnableAvatars = oc_config.enable_avatars; - 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(); - - autocompleteStub.restore(); - avatarStub.restore(); - placeholderStub.restore(); - oc_config.enable_avatars = oldEnableAvatars; - $('#dropdown').remove(); - }); - it('calls loadItem with the correct arguments', function() { - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - expect(loadItemStub.calledOnce).toEqual(true); - expect(loadItemStub.calledWith('file', 123)).toEqual(true); - }); - it('shows the dropdown with default values', function() { - var $el; - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - $el = $container.find('#dropdown'); - expect($el.length).toEqual(1); - expect($el.attr('data-item-type')).toEqual('file'); - expect($el.attr('data-item-source')).toEqual('123'); - // TODO: expect that other parts are rendered correctly - }); - 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( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - expect($('#dropdown #linkCheckbox').length).toEqual(1); - }); - it('does not show share with link checkbox when not allowed', function() { - $('#allowShareWithLink').val('no'); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - 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: [], - /* jshint camelcase: false */ - shares: [{ - displayname_owner: 'root', - expiration: null, - file_source: 123, - file_target: '/folder', - id: 20, - item_source: '123', - item_type: 'folder', - mail_send: '0', - parent: null, - path: '/folder', - permissions: OC.PERMISSION_READ, - share_type: OC.Share.SHARE_TYPE_LINK, - share_with: null, - stime: 1403884258, - storage: 1, - token: 'tehtoken', - uid_owner: 'root' - }] - }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'folder' - ); - expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); - // this is how the OC.Share class does it... - var link = parent.location.protocol + '//' + location.host + - OC.generateUrl('/s/') + 'tehtoken'; - expect($('#dropdown #linkText').val()).toEqual(link); - }); - it('does not show populated link share when a link share exists for a different file', function() { - loadItemStub.returns({ - reshare: [], - /* jshint camelcase: false */ - shares: [{ - displayname_owner: 'root', - expiration: null, - file_source: 123, - file_target: '/folder', - id: 20, - item_source: '123', - item_type: 'folder', - mail_send: '0', - parent: null, - path: '/folder', - permissions: OC.PERMISSION_READ, - share_type: OC.Share.SHARE_TYPE_LINK, - share_with: null, - stime: 1403884258, - storage: 1, - token: 'tehtoken', - uid_owner: 'root' - }] - }); - OC.Share.showDropDown( - 'file', - 456, // another file - $container, - true, - 31, - 'folder' - ); - expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(false); - }); - it('shows correct link share when a nest link share exists along with parent one', function() { - loadItemStub.returns({ - reshare: [], - /* jshint camelcase: false */ - shares: [{ - displayname_owner: 'root', - expiration: null, - file_source: 123, - file_target: '/folder', - id: 20, - item_source: '123', - item_type: 'file', - mail_send: '0', - parent: null, - path: '/folder', - permissions: OC.PERMISSION_READ, - share_type: OC.Share.SHARE_TYPE_LINK, - share_with: null, - stime: 1403884258, - storage: 1, - token: 'tehtoken', - uid_owner: 'root' - }, { - displayname_owner: 'root', - expiration: null, - file_source: 456, - file_target: '/file_in_folder.txt', - id: 21, - item_source: '456', - item_type: 'file', - mail_send: '0', - parent: null, - path: '/folder/file_in_folder.txt', - permissions: OC.PERMISSION_READ, - share_type: OC.Share.SHARE_TYPE_LINK, - share_with: null, - stime: 1403884509, - storage: 1, - token: 'anothertoken', - uid_owner: 'root' - }] - }); - - // parent one - OC.Share.showDropDown( - 'folder', - 123, - $container, - true, - 31, - 'folder' - ); - expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); - // this is how the OC.Share class does it... - var link = parent.location.protocol + '//' + location.host + - OC.generateUrl('/s/') + 'tehtoken'; - expect($('#dropdown #linkText').val()).toEqual(link); - - // nested one - OC.Share.showDropDown( - 'file', - 456, - $container, - true, - 31, - 'file_in_folder.txt' - ); - expect($('#dropdown #linkCheckbox').prop('checked')).toEqual(true); - // this is how the OC.Share class does it... - link = parent.location.protocol + '//' + location.host + - OC.generateUrl('/s/') + 'anothertoken'; - expect($('#dropdown #linkText').val()).toEqual(link); - }); - describe('expiration date', function() { - var shareData; - var shareItem; - var clock; - var expectedMinDate; - - function showDropDown() { - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'folder' - ); - } - - beforeEach(function() { - // pick a fake date - clock = sinon.useFakeTimers(new Date(2014, 0, 20, 14, 0, 0).getTime()); - expectedMinDate = new Date(2014, 0, 21, 14, 0, 0); - shareItem = { - displayname_owner: 'root', - expiration: null, - file_source: 123, - file_target: '/folder', - id: 20, - item_source: '123', - item_type: 'folder', - mail_send: '0', - parent: null, - path: '/folder', - permissions: OC.PERMISSION_READ, - share_type: OC.Share.SHARE_TYPE_LINK, - share_with: null, - stime: 1403884258, - storage: 1, - token: 'tehtoken', - uid_owner: 'root' - }; - shareData = { - reshare: [], - shares: [] - }; - loadItemStub.returns(shareData); - oc_appconfig.core.defaultExpireDate = 7; - oc_appconfig.core.enforcePasswordForPublicLink = false; - oc_appconfig.core.defaultExpireDateEnabled = false; - oc_appconfig.core.defaultExpireDateEnforced = false; - }); - afterEach(function() { - clock.restore(); - }); - - it('does not check expiration date checkbox when no date was set', function() { - shareItem.expiration = null; - shareData.shares.push(shareItem); - showDropDown(); - expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(false); - expect($('#dropdown #expirationDate').val()).toEqual(''); - }); - it('does not check expiration date checkbox for new share', function() { - showDropDown(); - expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(false); - expect($('#dropdown #expirationDate').val()).toEqual(''); - }); - it('checks expiration date checkbox and populates field when expiration date was set', function() { - shareItem.expiration = 1234; - shareData.shares.push(shareItem); - showDropDown(); - expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(true); - expect($('#dropdown #expirationDate').val()).toEqual('1234'); - }); - it('sets default date when default date setting is enabled', function() { - /* jshint camelcase:false */ - oc_appconfig.core.defaultExpireDateEnabled = true; - showDropDown(); - $('#dropdown [name=linkCheckbox]').click(); - // enabled by default - 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 allowed - $('#dropdown [name=expirationCheckbox]').click(); - expect($('#dropdown [name=expirationCheckbox]').prop('checked')).toEqual(false); - }); - it('enforces default date when enforced date setting is enabled', function() { - /* jshint camelcase:false */ - oc_appconfig.core.defaultExpireDateEnabled = true; - oc_appconfig.core.defaultExpireDateEnforced = true; - showDropDown(); - $('#dropdown [name=linkCheckbox]').click(); - 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('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(); - expect($('#emailPrivateLink').length).toEqual(1); - }); - it('not renders email form when sending emails is disabled', function() { - $('input[name=mailPublicNotificationEnabled]').val('no'); - showDropDown(); - expect($('#emailPrivateLink').length).toEqual(0); - }); - it('sets picker minDate to today and no maxDate by default', function() { - showDropDown(); - $('#dropdown [name=linkCheckbox]').click(); - $('#dropdown [name=expirationCheckbox]').click(); - expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); - expect($.datepicker._defaults.maxDate).toEqual(null); - }); - it('limits the date range to X days after share time when enforced', function() { - /* jshint camelcase:false */ - oc_appconfig.core.defaultExpireDateEnabled = true; - oc_appconfig.core.defaultExpireDateEnforced = true; - showDropDown(); - $('#dropdown [name=linkCheckbox]').click(); - expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); - expect($.datepicker._defaults.maxDate).toEqual(new Date(2014, 0, 27, 0, 0, 0, 0)); - }); - it('limits the date range to X days after share time when enforced, even when redisplayed the next days', function() { - // item exists, was created two days ago - shareItem.expiration = '2014-1-27'; - // share time has time component but must be stripped later - shareItem.stime = new Date(2014, 0, 20, 11, 0, 25).getTime() / 1000; - shareData.shares.push(shareItem); - /* jshint camelcase:false */ - oc_appconfig.core.defaultExpireDateEnabled = true; - oc_appconfig.core.defaultExpireDateEnforced = true; - showDropDown(); - expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); - expect($.datepicker._defaults.maxDate).toEqual(new Date(2014, 0, 27, 0, 0, 0, 0)); - }); - }); - }); - describe('check for avatar', function() { - beforeEach(function() { - loadItemStub.returns({ - reshare: { - share_type: OC.Share.SHARE_TYPE_USER, - uid_owner: 'owner', - displayname_owner: 'Owner', - permissions: 31 - }, - shares: [{ - id: 100, - item_source: 123, - permissions: 31, - share_type: OC.Share.SHARE_TYPE_USER, - share_with: 'user1', - share_with_displayname: 'User One' - },{ - id: 101, - item_source: 123, - permissions: 31, - share_type: OC.Share.SHARE_TYPE_GROUP, - share_with: 'group', - share_with_displayname: 'group' - },{ - id: 102, - item_source: 123, - permissions: 31, - share_type: OC.Share.SHARE_TYPE_REMOTE, - share_with: 'foo@bar.com/baz', - share_with_displayname: 'foo@bar.com/baz' - - }] - }); - }); - - describe('avatars enabled', function() { - beforeEach(function() { - oc_config.enable_avatars = true; - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - }); - - afterEach(function() { - oc_config.enable_avatars = false; - }); - - it('test correct function calls', function() { - expect(avatarStub.calledTwice).toEqual(true); - expect(placeholderStub.calledTwice).toEqual(true); - expect($('#shareWithList').children().length).toEqual(3); - expect($('.avatar').length).toEqual(4); - }); - - it('test avatar owner', function() { - var args = avatarStub.getCall(0).args; - expect(args.length).toEqual(2); - expect(args[0]).toEqual('owner'); - }); - - it('test avatar user', function() { - var args = avatarStub.getCall(1).args; - expect(args.length).toEqual(2); - expect(args[0]).toEqual('user1'); - }); - - it('test avatar for groups', function() { - var args = placeholderStub.getCall(0).args; - expect(args.length).toEqual(1); - expect(args[0]).toEqual('group ' + OC.Share.SHARE_TYPE_GROUP); - }); - - it('test avatar for remotes', function() { - var args = placeholderStub.getCall(1).args; - expect(args.length).toEqual(1); - expect(args[0]).toEqual('foo@bar.com/baz ' + OC.Share.SHARE_TYPE_REMOTE); - }); - }); - - describe('avatars disabled', function() { - beforeEach(function() { - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - }); - - it('no avatar classes', function() { - expect($('.avatar').length).toEqual(0); - expect(avatarStub.callCount).toEqual(0); - expect(placeholderStub.callCount).toEqual(0); - }); - }); - }); - describe('"sharesChanged" event', function() { - var autocompleteOptions; - var handler; - beforeEach(function() { - handler = sinon.stub(); - loadItemStub.returns({ - reshare: [], - shares: [{ - id: 100, - item_source: 123, - permissions: 31, - share_type: OC.Share.SHARE_TYPE_USER, - share_with: 'user1', - share_with_displayname: 'User One' - }] - }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - 31, - 'shared_file_name.txt' - ); - $('#dropdown').on('sharesChanged', handler); - autocompleteOptions = autocompleteStub.getCall(0).args[0]; - }); - afterEach(function() { - autocompleteOptions = null; - handler = null; - }); - it('triggers "sharesChanged" event when adding shares', function() { - // simulate autocomplete selection - autocompleteOptions.select(new $.Event('select'), { - item: { - label: 'User Two', - value: { - shareType: OC.Share.SHARE_TYPE_USER, - shareWith: 'user2' - } - } - }); - fakeServer.requests[0].respond( - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({status: 'success'}) - ); - expect(handler.calledOnce).toEqual(true); - var shares = handler.getCall(0).args[0].shares; - expect(shares).toBeDefined(); - expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); - expect(shares[OC.Share.SHARE_TYPE_USER][1].share_with_displayname).toEqual('User Two'); - expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - }); - it('triggers "sharesChanged" event when deleting shares', function() { - $('#dropdown .unshare:eq(0)').click(); - fakeServer.requests[0].respond( - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({status: 'success'}) - ); - expect(handler.calledOnce).toEqual(true); - var shares = handler.getCall(0).args[0].shares; - expect(shares).toBeDefined(); - expect(shares[OC.Share.SHARE_TYPE_USER]).toEqual([]); - expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - }); - it('triggers "sharesChanged" event when toggling link share', function() { - // simulate autocomplete selection - $('#dropdown #linkCheckbox').click(); - fakeServer.requests[0].respond( - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({status: 'success', data: { token: 'abc' }}) - ); - expect(handler.calledOnce).toEqual(true); - var shares = handler.getCall(0).args[0].shares; - expect(shares).toBeDefined(); - expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); - expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - - handler.reset(); - - // uncheck checkbox - $('#dropdown #linkCheckbox').click(); - fakeServer.requests[1].respond( - 200, - { 'Content-Type': 'application/json' }, - JSON.stringify({status: 'success'}) - ); - - expect(handler.calledOnce).toEqual(true); - shares = handler.getCall(0).args[0].shares; - expect(shares).toBeDefined(); - expect(shares[OC.Share.SHARE_TYPE_USER][0].share_with_displayname).toEqual('User One'); - expect(shares[OC.Share.SHARE_TYPE_GROUP]).not.toBeDefined(); - }); - }); - describe('share permissions', function() { - beforeEach(function() { - oc_appconfig.core.resharingAllowed = true; - }); - - /** - * Tests sharing with the given possible permissions - * - * @param {int} possiblePermissions - * @return {int} permissions sent to the server - */ - function testWithPermissions(possiblePermissions) { - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - possiblePermissions, - 'shared_file_name.txt' - ); - var autocompleteOptions = autocompleteStub.getCall(0).args[0]; - // simulate autocomplete selection - autocompleteOptions.select(new $.Event('select'), { - item: { - label: 'User Two', - value: { - shareType: OC.Share.SHARE_TYPE_USER, - shareWith: 'user2' - } - } - }); - autocompleteStub.reset(); - var requestBody = OC.parseQueryString(_.last(fakeServer.requests).requestBody); - return parseInt(requestBody.permissions, 10); - } - - describe('regular sharing', function() { - it('shares with given permissions with default config', function() { - loadItemStub.returns({ - reshare: [], - shares: [] - }); - expect( - testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) - ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE); - expect( - testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_SHARE) - ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_SHARE); - }); - it('removes share permission when not allowed', function() { - oc_appconfig.core.resharingAllowed = false; - loadItemStub.returns({ - reshare: [], - shares: [] - }); - expect( - testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) - ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE); - }); - it('automatically adds READ permission even when not specified', function() { - oc_appconfig.core.resharingAllowed = false; - loadItemStub.returns({ - reshare: [], - shares: [] - }); - expect( - testWithPermissions(OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) - ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_UPDATE); - }); - it('does not show sharing options when sharing not allowed', function() { - loadItemStub.returns({ - reshare: [], - shares: [] - }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - OC.PERMISSION_READ, - 'shared_file_name.txt' - ); - expect($('#dropdown #shareWithList').length).toEqual(0); - }); - }); - describe('resharing', function() { - it('shares with given permissions when original share had all permissions', function() { - loadItemStub.returns({ - reshare: { - permissions: OC.PERMISSION_ALL - }, - shares: [] - }); - expect( - testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) - ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE); - }); - it('reduces reshare permissions to the ones from the original share', function() { - 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' - ); - // no resharing allowed - expect($('#dropdown #shareWithList').length).toEqual(0); - }); - it('reduces reshare permissions to possible permissions', function() { - loadItemStub.returns({ - reshare: { - permissions: OC.PERMISSION_ALL, - uid_owner: 'user1' - }, - shares: [] - }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - OC.PERMISSION_READ, - 'shared_file_name.txt' - ); - // no resharing allowed - expect($('#dropdown #shareWithList').length).toEqual(0); - }); - it('does not show sharing options when resharing not allowed', function() { - loadItemStub.returns({ - reshare: { - permissions: OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_DELETE, - uid_owner: 'user1' - }, - shares: [] - }); - OC.Share.showDropDown( - 'file', - 123, - $container, - true, - OC.PERMISSION_ALL, - 'shared_file_name.txt' - ); - 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); - }); - }); - }); - }); describe('markFileAsShared', function() { var $file; var tipsyStub; @@ -1316,21 +232,5 @@ describe('OC.Share tests', function() { }); }); }); - describe('OC.Share utils', function() { - it('parseTime should properly parse strings', function() { - - _.each([ - [ '123456', 123456], - [ 123456 , 123456], - ['0123456', 123456], - ['abcdefg', null], - ['0x12345', null], - [ '', null], - ], function(value) { - expect(OC.Share._parseTime(value[0])).toEqual(value[1]); - }); - - }); - }); }); diff --git a/core/js/tests/specs/sharedialogviewSpec.js b/core/js/tests/specs/sharedialogviewSpec.js new file mode 100644 index 00000000000..de6f9944094 --- /dev/null +++ b/core/js/tests/specs/sharedialogviewSpec.js @@ -0,0 +1,582 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@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/>. +* +*/ + +/* global oc_appconfig */ +describe('OC.Share.ShareDialogView', function() { + var $container; + var oldAppConfig; + var autocompleteStub; + var oldEnableAvatars; + var avatarStub; + var placeholderStub; + var oldCurrentUser; + + var fetchStub; + + var configModel; + var shareModel; + var fileInfoModel; + var dialog; + + beforeEach(function() { + // horrible parameters + $('#testArea').append('<input id="allowShareWithLink" type="hidden" value="yes">'); + $('#testArea').append('<input id="mailPublicNotificationEnabled" name="mailPublicNotificationEnabled" type="hidden" value="yes">'); + $container = $('#shareContainer'); + /* jshint camelcase:false */ + oldAppConfig = _.extend({}, oc_appconfig.core); + oc_appconfig.core.enforcePasswordForPublicLink = false; + + fetchStub = sinon.stub(OC.Share.ShareItemModel.prototype, 'fetch'); + + fileInfoModel = new OCA.Files.FileInfoModel({ + id: 123, + name: 'shared_file_name.txt', + path: '/subdir', + size: 100, + mimetype: 'text/plain', + permissions: 31, + sharePermissions: 31 + }); + + var attributes = { + itemType: fileInfoModel.isDirectory() ? 'folder' : 'file', + itemSource: fileInfoModel.get('id'), + possiblePermissions: 31, + permissions: 31 + }; + configModel = new OC.Share.ShareConfigModel({ + enforcePasswordForPublicLink: false, + isResharingAllowed: true, + enforcePasswordForPublicLink: false, + isDefaultExpireDateEnabled: false, + isDefaultExpireDateEnforced: false, + defaultExpireDate: 7 + }); + shareModel = new OC.Share.ShareItemModel(attributes, { + configModel: configModel, + fileInfoModel: fileInfoModel + }); + dialog = new OC.Share.ShareDialogView({ + configModel: configModel, + model: shareModel + }); + + // triggers rendering + shareModel.set({ + shares: [], + linkShare: {isLinkShare: false} + }); + + autocompleteStub = sinon.stub($.fn, 'autocomplete', function() { + // dummy container with the expected attributes + if (!$(this).length) { + // simulate the real autocomplete that returns + // nothing at all when no element is specified + // (and potentially break stuff) + return null; + } + var $el = $('<div></div>').data('ui-autocomplete', {}); + return $el; + }); + + oldEnableAvatars = oc_config.enable_avatars; + 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; + + fetchStub.restore(); + + autocompleteStub.restore(); + avatarStub.restore(); + placeholderStub.restore(); + oc_config.enable_avatars = oldEnableAvatars; + }); + 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'); + + dialog.render(); + + // Toggle linkshare + dialog.$el.find('[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 + dialog.$el.find('[name=showPassword]').click(); + dialog.$el.find('#linkPassText').focus(); + dialog.$el.find('#linkPassText').val('foo'); + dialog.$el.find('#linkPassText').focusout(); + + expect(fakeServer.requests[1].method).toEqual('POST'); + var body = OC.parseQueryString(fakeServer.requests[1].requestBody); + expect(body.shareWith).toEqual('foo'); + + fetchStub.reset(); + + // Set password response + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect(fetchStub.calledOnce).toEqual(true); + // fetching the model will rerender the view + dialog.render(); + + expect(dialog.$el.find('#linkPassText').val()).toEqual(''); + expect(dialog.$el.find('#linkPassText').attr('placeholder')).toEqual('**********'); + }); + it('update password on enter', function() { + $('#allowShareWithLink').val('yes'); + + dialog.render(); + + // Toggle linkshare + dialog.$el.find('[name=linkCheckbox]').click(); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + // Enable password and enter password + dialog.$el.find('[name=showPassword]').click(); + dialog.$el.find('#linkPassText').focus(); + dialog.$el.find('#linkPassText').val('foo'); + dialog.$el.find('#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'); + + fetchStub.reset(); + + // Set password response + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect(fetchStub.calledOnce).toEqual(true); + // fetching the model will rerender the view + dialog.render(); + + expect(dialog.$el.find('#linkPassText').val()).toEqual(''); + expect(dialog.$el.find('#linkPassText').attr('placeholder')).toEqual('**********'); + }); + it('shows share with link checkbox when allowed', function() { + $('#allowShareWithLink').val('yes'); + + dialog.render(); + + expect(dialog.$el.find('#linkCheckbox').length).toEqual(1); + }); + it('does not show share with link checkbox when not allowed', function() { + $('#allowShareWithLink').val('no'); + + dialog.render(); + + expect(dialog.$el.find('#linkCheckbox').length).toEqual(0); + }); + it('shows populated link share when a link share exists', function() { + // this is how the OC.Share class does it... + var link = parent.location.protocol + '//' + location.host + + OC.generateUrl('/s/') + 'tehtoken'; + shareModel.set('linkShare', { + isLinkShare: true, + token: 'tehtoken', + link: link, + expiration: '', + permissions: OC.PERMISSION_READ, + stime: 1403884258, + }); + + dialog.render(); + + expect(dialog.$el.find('#linkCheckbox').prop('checked')).toEqual(true); + expect(dialog.$el.find('#linkText').val()).toEqual(link); + }); + describe('expiration date', function() { + var shareData; + var shareItem; + var clock; + var expectedMinDate; + + beforeEach(function() { + // pick a fake date + clock = sinon.useFakeTimers(new Date(2014, 0, 20, 14, 0, 0).getTime()); + expectedMinDate = new Date(2014, 0, 21, 14, 0, 0); + + configModel.set({ + enforcePasswordForPublicLink: false, + isDefaultExpireDateEnabled: false, + isDefaultExpireDateEnforced: false, + defaultExpireDate: 7 + }); + + shareModel.set('linkShare', { + isLinkShare: true, + token: 'tehtoken', + permissions: OC.PERMISSION_READ, + expiration: null + }); + }); + afterEach(function() { + clock.restore(); + }); + + it('does not check expiration date checkbox when no date was set', function() { + shareModel.get('linkShare').expiration = null; + dialog.render(); + + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(false); + expect(dialog.$el.find('#expirationDate').val()).toEqual(''); + }); + it('does not check expiration date checkbox for new share', function() { + dialog.render(); + + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(false); + expect(dialog.$el.find('#expirationDate').val()).toEqual(''); + }); + it('checks expiration date checkbox and populates field when expiration date was set', function() { + shareModel.get('linkShare').expiration = 1234; + dialog.render(); + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + expect(dialog.$el.find('#expirationDate').val()).toEqual('1234'); + }); + it('sets default date when default date setting is enabled', function() { + configModel.set('isDefaultExpireDateEnabled', true); + dialog.render(); + dialog.$el.find('[name=linkCheckbox]').click(); + // here fetch would be called and the server returns the expiration date + shareModel.get('linkShare').expiration = '2014-1-27 00:00:00'; + dialog.render(); + + // enabled by default + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + // TODO: those zeros must go... + expect(dialog.$el.find('#expirationDate').val()).toEqual('2014-1-27 00:00:00'); + + // disabling is allowed + dialog.$el.find('[name=expirationCheckbox]').click(); + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(false); + }); + it('enforces default date when enforced date setting is enabled', function() { + configModel.set({ + isDefaultExpireDateEnabled: true, + isDefaultExpireDateEnforced: true + }); + dialog.render(); + dialog.$el.find('[name=linkCheckbox]').click(); + // here fetch would be called and the server returns the expiration date + shareModel.get('linkShare').expiration = '2014-1-27 00:00:00'; + dialog.render(); + + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + // TODO: those zeros must go... + expect(dialog.$el.find('#expirationDate').val()).toEqual('2014-1-27 00:00:00'); + + // disabling is not allowed + expect(dialog.$el.find('[name=expirationCheckbox]').prop('disabled')).toEqual(true); + dialog.$el.find('[name=expirationCheckbox]').click(); + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + }); + it('enforces default date when enforced date setting is enabled and password is enforced', function() { + configModel.set({ + enforcePasswordForPublicLink: true, + isDefaultExpireDateEnabled: true, + isDefaultExpireDateEnforced: true + }); + dialog.render(); + dialog.$el.find('[name=linkCheckbox]').click(); + // here fetch would be called and the server returns the expiration date + shareModel.get('linkShare').expiration = '2014-1-27 00:00:00'; + dialog.render(); + + //Enter password + dialog.$el.find('#linkPassText').val('foo'); + dialog.$el.find('#linkPassText').trigger(new $.Event('keyup', {keyCode: 13})); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({data: {token: 'xyz'}, status: 'success'}) + ); + + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + // TODO: those zeros must go... + expect(dialog.$el.find('#expirationDate').val()).toEqual('2014-1-27 00:00:00'); + + // disabling is not allowed + expect(dialog.$el.find('[name=expirationCheckbox]').prop('disabled')).toEqual(true); + dialog.$el.find('[name=expirationCheckbox]').click(); + expect(dialog.$el.find('[name=expirationCheckbox]').prop('checked')).toEqual(true); + }); + it('displayes email form when sending emails is enabled', function() { + $('input[name=mailPublicNotificationEnabled]').val('yes'); + dialog.render(); + expect(dialog.$('#emailPrivateLink').length).toEqual(1); + }); + it('not renders email form when sending emails is disabled', function() { + $('input[name=mailPublicNotificationEnabled]').val('no'); + dialog.render(); + expect(dialog.$('#emailPrivateLink').length).toEqual(0); + }); + it('sets picker minDate to today and no maxDate by default', function() { + dialog.render(); + dialog.$el.find('[name=linkCheckbox]').click(); + dialog.$el.find('[name=expirationCheckbox]').click(); + expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); + expect($.datepicker._defaults.maxDate).toEqual(null); + }); + it('limits the date range to X days after share time when enforced', function() { + configModel.set({ + isDefaultExpireDateEnabled: true, + isDefaultExpireDateEnforced: true + }); + dialog.render(); + dialog.$el.find('[name=linkCheckbox]').click(); + expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); + expect($.datepicker._defaults.maxDate).toEqual(new Date(2014, 0, 27, 0, 0, 0, 0)); + }); + it('limits the date range to X days after share time when enforced, even when redisplayed the next days', function() { + // item exists, was created two days ago + var shareItem = shareModel.get('linkShare'); + shareItem.expiration = '2014-1-27'; + // share time has time component but must be stripped later + shareItem.stime = new Date(2014, 0, 20, 11, 0, 25).getTime() / 1000; + configModel.set({ + isDefaultExpireDateEnabled: true, + isDefaultExpireDateEnforced: true + }); + dialog.render(); + expect($.datepicker._defaults.minDate).toEqual(expectedMinDate); + expect($.datepicker._defaults.maxDate).toEqual(new Date(2014, 0, 27, 0, 0, 0, 0)); + }); + }); + }); + describe('check for avatar', function() { + beforeEach(function() { + shareModel.set({ + reshare: { + share_type: OC.Share.SHARE_TYPE_USER, + uid_owner: 'owner', + displayname_owner: 'Owner', + permissions: 31 + }, + shares: [{ + id: 100, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_USER, + share_with: 'user1', + share_with_displayname: 'User One' + },{ + id: 101, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_GROUP, + share_with: 'group', + share_with_displayname: 'group' + },{ + id: 102, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_REMOTE, + share_with: 'foo@bar.com/baz', + share_with_displayname: 'foo@bar.com/baz' + + }] + }); + }); + + describe('avatars enabled', function() { + beforeEach(function() { + oc_config.enable_avatars = true; + avatarStub.reset(); + dialog.render(); + }); + + afterEach(function() { + oc_config.enable_avatars = false; + }); + + it('test correct function calls', function() { + expect(avatarStub.calledTwice).toEqual(true); + expect(placeholderStub.calledTwice).toEqual(true); + expect(dialog.$('#shareWithList').children().length).toEqual(3); + expect(dialog.$('.avatar').length).toEqual(4); + }); + + it('test avatar owner', function() { + var args = avatarStub.getCall(0).args; + expect(args.length).toEqual(2); + expect(args[0]).toEqual('owner'); + }); + + it('test avatar user', function() { + var args = avatarStub.getCall(1).args; + expect(args.length).toEqual(2); + expect(args[0]).toEqual('user1'); + }); + + it('test avatar for groups', function() { + var args = placeholderStub.getCall(0).args; + expect(args.length).toEqual(1); + expect(args[0]).toEqual('group ' + OC.Share.SHARE_TYPE_GROUP); + }); + + it('test avatar for remotes', function() { + var args = placeholderStub.getCall(1).args; + expect(args.length).toEqual(1); + expect(args[0]).toEqual('foo@bar.com/baz ' + OC.Share.SHARE_TYPE_REMOTE); + }); + }); + + describe('avatars disabled', function() { + beforeEach(function() { + dialog.render(); + }); + + it('no avatar classes', function() { + expect($('.avatar').length).toEqual(0); + expect(avatarStub.callCount).toEqual(0); + expect(placeholderStub.callCount).toEqual(0); + }); + }); + }); + describe('share permissions', function() { + beforeEach(function() { + oc_appconfig.core.resharingAllowed = true; + }); + + /** + * Tests sharing with the given possible permissions + * + * @param {int} possiblePermissions + * @return {int} permissions sent to the server + */ + function testWithPermissions(possiblePermissions) { + shareModel.set({ + permissions: possiblePermissions, + possiblePermissions: possiblePermissions + }); + dialog.render(); + var autocompleteOptions = autocompleteStub.getCall(0).args[0]; + // simulate autocomplete selection + autocompleteOptions.select(new $.Event('select'), { + item: { + label: 'User Two', + value: { + shareType: OC.Share.SHARE_TYPE_USER, + shareWith: 'user2' + } + } + }); + autocompleteStub.reset(); + var requestBody = OC.parseQueryString(_.last(fakeServer.requests).requestBody); + return parseInt(requestBody.permissions, 10); + } + + describe('regular sharing', function() { + it('shares with given permissions with default config', function() { + shareModel.set({ + reshare: {}, + shares: [] + }); + expect( + testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) + ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE); + expect( + testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_SHARE) + ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_SHARE); + }); + it('removes share permission when not allowed', function() { + configModel.set('isResharingAllowed', false); + shareModel.set({ + reshare: {}, + shares: [] + }); + expect( + testWithPermissions(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) + ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE); + }); + it('automatically adds READ permission even when not specified', function() { + configModel.set('isResharingAllowed', false); + shareModel.set({ + reshare: {}, + shares: [] + }); + expect( + testWithPermissions(OC.PERMISSION_UPDATE | OC.PERMISSION_SHARE) + ).toEqual(OC.PERMISSION_READ | OC.PERMISSION_UPDATE | OC.PERMISSION_UPDATE); + }); + it('does not show sharing options when sharing not allowed', function() { + shareModel.set({ + reshare: {}, + shares: [], + permissions: OC.PERMISSION_READ + }); + dialog.render(); + expect(dialog.$el.find('#shareWith').prop('disabled')).toEqual(true); + }); + it('shows reshare owner', function() { + shareModel.set({ + reshare: { + uid_owner: 'user1' + }, + shares: [], + permissions: OC.PERMISSION_READ + }); + dialog.render(); + expect(dialog.$el.find('.resharerInfoView .reshare').length).toEqual(1); + }); + it('does not show reshare owner if owner is current user', function() { + shareModel.set({ + reshare: { + uid_owner: OC.currentUser + }, + shares: [], + permissions: OC.PERMISSION_READ + }); + dialog.render(); + expect(dialog.$el.find('.resharerInfoView .reshare').length).toEqual(0); + }); + }); + }); +}); + diff --git a/core/js/tests/specs/shareitemmodelSpec.js b/core/js/tests/specs/shareitemmodelSpec.js new file mode 100644 index 00000000000..c1d820052e2 --- /dev/null +++ b/core/js/tests/specs/shareitemmodelSpec.js @@ -0,0 +1,283 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@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/>. +* +*/ + +/* global oc_appconfig */ +describe('OC.Share.ShareItemModel', function() { + var loadItemStub; + var fileInfoModel, configModel, model; + var oldCurrentUser; + + beforeEach(function() { + oldCurrentUser = OC.currentUser; + + loadItemStub = sinon.stub(OC.Share, 'loadItem'); + + fileInfoModel = new OCA.Files.FileInfoModel({ + id: 123, + name: 'shared_file_name.txt', + path: '/subdir', + size: 100, + mimetype: 'text/plain', + permissions: 31, + sharePermissions: 31 + }); + + var attributes = { + itemType: fileInfoModel.isDirectory() ? 'folder' : 'file', + itemSource: fileInfoModel.get('id'), + possiblePermissions: fileInfoModel.get('sharePermissions') + }; + configModel = new OC.Share.ShareConfigModel(); + model = new OC.Share.ShareItemModel(attributes, { + configModel: configModel, + fileInfoModel: fileInfoModel + }); + }); + afterEach(function() { + loadItemStub.restore(); + OC.currentUser = oldCurrentUser; + }); + + describe('Fetching and parsing', function() { + it('fetching calls loadItem with the correct arguments', function() { + model.fetch(); + + expect(loadItemStub.calledOnce).toEqual(true); + expect(loadItemStub.calledWith('file', 123)).toEqual(true); + }); + it('populates attributes with parsed response', function() { + loadItemStub.yields({ + /* jshint camelcase: false */ + reshare: { + share_type: OC.Share.SHARE_TYPE_USER, + uid_owner: 'owner', + displayname_owner: 'Owner', + permissions: 31 + }, + shares: [{ + id: 100, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_USER, + share_with: 'user1', + share_with_displayname: 'User One' + }, { + id: 101, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_GROUP, + share_with: 'group', + share_with_displayname: 'group' + }, { + id: 102, + item_source: 123, + permissions: 31, + share_type: OC.Share.SHARE_TYPE_REMOTE, + share_with: 'foo@bar.com/baz', + share_with_displayname: 'foo@bar.com/baz' + + }, { + displayname_owner: 'root', + expiration: null, + file_source: 123, + file_target: '/folder', + id: 20, + item_source: '123', + item_type: 'folder', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }] + }); + model.fetch(); + + var shares = model.get('shares'); + expect(shares.length).toEqual(3); + expect(shares[0].id).toEqual(100); + expect(shares[0].permissions).toEqual(31); + expect(shares[0].share_type).toEqual(OC.Share.SHARE_TYPE_USER); + expect(shares[0].share_with).toEqual('user1'); + expect(shares[0].share_with_displayname).toEqual('User One'); + + var linkShare = model.get('linkShare'); + expect(linkShare.isLinkShare).toEqual(true); + + // TODO: check more attributes + }); + it('does not parse link share when for a different file', function() { + loadItemStub.yields({ + reshare: [], + /* jshint camelcase: false */ + shares: [{ + displayname_owner: 'root', + expiration: null, + file_source: 456, + file_target: '/folder', + id: 20, + item_source: '456', + item_type: 'folder', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }] + }); + + model.fetch(); + + var shares = model.get('shares'); + // remaining share appears in this list + expect(shares.length).toEqual(1); + + var linkShare = model.get('linkShare'); + expect(linkShare.isLinkShare).toEqual(false); + }); + it('parses correct link share when a nested link share exists along with parent one', function() { + loadItemStub.yields({ + reshare: [], + /* jshint camelcase: false */ + shares: [{ + displayname_owner: 'root', + expiration: 1111, + file_source: 123, + file_target: '/folder', + id: 20, + item_source: '123', + item_type: 'file', + mail_send: '0', + parent: null, + path: '/folder', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884258, + storage: 1, + token: 'tehtoken', + uid_owner: 'root' + }, { + displayname_owner: 'root', + expiration: 2222, + file_source: 456, + file_target: '/file_in_folder.txt', + id: 21, + item_source: '456', + item_type: 'file', + mail_send: '0', + parent: null, + path: '/folder/file_in_folder.txt', + permissions: OC.PERMISSION_READ, + share_type: OC.Share.SHARE_TYPE_LINK, + share_with: null, + stime: 1403884509, + storage: 1, + token: 'anothertoken', + uid_owner: 'root' + }] + }); + + model.fetch(); + + var shares = model.get('shares'); + // the parent share remains in the list + expect(shares.length).toEqual(1); + + var linkShare = model.get('linkShare'); + expect(linkShare.isLinkShare).toEqual(true); + expect(linkShare.token).toEqual('tehtoken'); + + // TODO: check child too + }); + it('reduces reshare permissions to the ones from the original share', function() { + loadItemStub.yields({ + reshare: { + permissions: OC.PERMISSION_READ, + uid_owner: 'user1' + }, + shares: [] + }); + model.fetch(); + + // no resharing allowed + expect(model.get('permissions')).toEqual(OC.PERMISSION_READ); + }); + it('reduces reshare permissions to possible permissions', function() { + loadItemStub.yields({ + reshare: { + permissions: OC.PERMISSION_ALL, + uid_owner: 'user1' + }, + shares: [] + }); + + model.set('possiblePermissions', OC.PERMISSION_READ); + model.fetch(); + + // no resharing allowed + expect(model.get('permissions')).toEqual(OC.PERMISSION_READ); + }); + it('allows owner to share their own share when they are also the recipient', function() { + OC.currentUser = 'user1'; + loadItemStub.yields({ + reshare: { + permissions: OC.PERMISSION_READ, + uid_owner: 'user1' + }, + shares: [] + }); + + model.fetch(); + + // sharing still allowed + expect(model.get('permissions') & OC.PERMISSION_SHARE).toEqual(OC.PERMISSION_SHARE); + }); + }); + + describe('Util', function() { + it('parseTime should properly parse strings', function() { + + _.each([ + [ '123456', 123456], + [ 123456 , 123456], + ['0123456', 123456], + ['abcdefg', null], + ['0x12345', null], + [ '', null], + ], function(value) { + expect(OC.Share.ShareItemModel.prototype._parseTime(value[0])).toEqual(value[1]); + }); + + }); + }); +}); + diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js index a6f0448d1a5..6bc1ed26add 100644 --- a/core/l10n/af_ZA.js +++ b/core/l10n/af_ZA.js @@ -60,28 +60,26 @@ OC.L10N.register( "Error while sharing" : "Deel veroorsaak fout", "Error while unsharing" : "Deel terugneem veroorsaak fout", "Error while changing permissions" : "Fout met verandering van regte", - "Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}", - "Shared with you by {owner}" : "Met jou gedeel deur {owner}", - "Share" : "Deel", + "Error setting expiration date" : "Fout met opstel van verval datum", + "Set expiration date" : "Stel verval datum", + "Expiration date" : "Verval datum", + "Sending ..." : "Stuur ...", + "Email sent" : "E-pos gestuur", + "Resharing is not allowed" : "Herdeling is nie toegelaat nie ", "Password protect" : "Beskerm met Wagwoord", "Password" : "Wagwoord", "Email link to person" : "E-pos aan persoon", "Send" : "Stuur", - "Set expiration date" : "Stel verval datum", - "Expiration date" : "Verval datum", - "group" : "groep", - "Resharing is not allowed" : "Herdeling is nie toegelaat nie ", + "Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}", + "Shared with you by {owner}" : "Met jou gedeel deur {owner}", "Shared in {item} with {user}" : "Gedeel in {item} met {user}", + "group" : "groep", "Unshare" : "Deel terug neem", "can edit" : "kan wysig", - "access control" : "toegang beheer", "create" : "skep", "delete" : "uitvee", - "Password protected" : "Beskerm met wagwoord", - "Error unsetting expiration date" : "Fout met skrapping van verval datum", - "Error setting expiration date" : "Fout met opstel van verval datum", - "Sending ..." : "Stuur ...", - "Email sent" : "E-pos gestuur", + "access control" : "toegang beheer", + "Share" : "Deel", "Warning" : "Waarskuwing", "The object type is not specified." : "Hierdie objek tipe is nie gespesifiseer nie.", "Add" : "Voeg by", diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json index d5b747b5a32..b8e7eb39b43 100644 --- a/core/l10n/af_ZA.json +++ b/core/l10n/af_ZA.json @@ -58,28 +58,26 @@ "Error while sharing" : "Deel veroorsaak fout", "Error while unsharing" : "Deel terugneem veroorsaak fout", "Error while changing permissions" : "Fout met verandering van regte", - "Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}", - "Shared with you by {owner}" : "Met jou gedeel deur {owner}", - "Share" : "Deel", + "Error setting expiration date" : "Fout met opstel van verval datum", + "Set expiration date" : "Stel verval datum", + "Expiration date" : "Verval datum", + "Sending ..." : "Stuur ...", + "Email sent" : "E-pos gestuur", + "Resharing is not allowed" : "Herdeling is nie toegelaat nie ", "Password protect" : "Beskerm met Wagwoord", "Password" : "Wagwoord", "Email link to person" : "E-pos aan persoon", "Send" : "Stuur", - "Set expiration date" : "Stel verval datum", - "Expiration date" : "Verval datum", - "group" : "groep", - "Resharing is not allowed" : "Herdeling is nie toegelaat nie ", + "Shared with you and the group {group} by {owner}" : "Met jou en die groep {group} gedeel deur {owner}", + "Shared with you by {owner}" : "Met jou gedeel deur {owner}", "Shared in {item} with {user}" : "Gedeel in {item} met {user}", + "group" : "groep", "Unshare" : "Deel terug neem", "can edit" : "kan wysig", - "access control" : "toegang beheer", "create" : "skep", "delete" : "uitvee", - "Password protected" : "Beskerm met wagwoord", - "Error unsetting expiration date" : "Fout met skrapping van verval datum", - "Error setting expiration date" : "Fout met opstel van verval datum", - "Sending ..." : "Stuur ...", - "Email sent" : "E-pos gestuur", + "access control" : "toegang beheer", + "Share" : "Deel", "Warning" : "Waarskuwing", "The object type is not specified." : "Hierdie objek tipe is nie gespesifiseer nie.", "Add" : "Voeg by", diff --git a/core/l10n/ar.js b/core/l10n/ar.js index e4bde6b47ed..a0ef7db8521 100644 --- a/core/l10n/ar.js +++ b/core/l10n/ar.js @@ -68,9 +68,13 @@ OC.L10N.register( "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}", - "Share" : "شارك", + "Error setting expiration date" : "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية", + "Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية", + "Expiration" : "إنتهاء", + "Expiration date" : "تاريخ إنتهاء الصلاحية", + "Sending ..." : "جاري الارسال ...", + "Email sent" : "تم ارسال البريد الالكتروني", + "Resharing is not allowed" : "لا يسمح بعملية إعادة المشاركة", "Share link" : "شارك الرابط", "Link" : "الرابط", "Password protect" : "حماية كلمة السر", @@ -79,27 +83,20 @@ OC.L10N.register( "Allow editing" : "السماح بالتعديلات", "Email link to person" : "ارسل الرابط بالبريد الى صديق", "Send" : "أرسل", - "Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية", - "Expiration" : "إنتهاء", - "Expiration date" : "تاريخ إنتهاء الصلاحية", - "Adding user..." : "إضافة مستخدم", + "Shared with you and the group {group} by {owner}" : "شورك معك ومع المجموعة {group} من قبل {owner}", + "Shared with you by {owner}" : "شورك معك من قبل {owner}", + "Shared in {item} with {user}" : "شورك في {item} مع {user}", "group" : "مجموعة", "remote" : "عن بعد", - "Resharing is not allowed" : "لا يسمح بعملية إعادة المشاركة", - "Shared in {item} with {user}" : "شورك في {item} مع {user}", - "Unshare" : "إلغاء مشاركة", "notify by email" : "الإشعار عن طريق البريد", + "Unshare" : "إلغاء مشاركة", "can share" : "يمكن المشاركة", "can edit" : "التحرير مسموح", - "access control" : "ضبط الوصول", "create" : "إنشاء", "change" : "تغيير", "delete" : "حذف", - "Password protected" : "محمي بكلمة السر", - "Error unsetting expiration date" : "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية", - "Error setting expiration date" : "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية", - "Sending ..." : "جاري الارسال ...", - "Email sent" : "تم ارسال البريد الالكتروني", + "access control" : "ضبط الوصول", + "Share" : "شارك", "Warning" : "تحذير", "The object type is not specified." : "نوع العنصر غير محدد.", "Enter new" : "إدخال جديد", @@ -130,6 +127,7 @@ OC.L10N.register( "Finish setup" : "انهاء التعديلات", "Log out" : "الخروج", "Search" : "البحث", + "Log in" : "أدخل", "remember" : "تذكر", "Alternative Logins" : "اسماء دخول بديلة" }, diff --git a/core/l10n/ar.json b/core/l10n/ar.json index 90168479a9b..5ac8003fb4c 100644 --- a/core/l10n/ar.json +++ b/core/l10n/ar.json @@ -66,9 +66,13 @@ "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}", - "Share" : "شارك", + "Error setting expiration date" : "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية", + "Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية", + "Expiration" : "إنتهاء", + "Expiration date" : "تاريخ إنتهاء الصلاحية", + "Sending ..." : "جاري الارسال ...", + "Email sent" : "تم ارسال البريد الالكتروني", + "Resharing is not allowed" : "لا يسمح بعملية إعادة المشاركة", "Share link" : "شارك الرابط", "Link" : "الرابط", "Password protect" : "حماية كلمة السر", @@ -77,27 +81,20 @@ "Allow editing" : "السماح بالتعديلات", "Email link to person" : "ارسل الرابط بالبريد الى صديق", "Send" : "أرسل", - "Set expiration date" : "تعيين تاريخ إنتهاء الصلاحية", - "Expiration" : "إنتهاء", - "Expiration date" : "تاريخ إنتهاء الصلاحية", - "Adding user..." : "إضافة مستخدم", + "Shared with you and the group {group} by {owner}" : "شورك معك ومع المجموعة {group} من قبل {owner}", + "Shared with you by {owner}" : "شورك معك من قبل {owner}", + "Shared in {item} with {user}" : "شورك في {item} مع {user}", "group" : "مجموعة", "remote" : "عن بعد", - "Resharing is not allowed" : "لا يسمح بعملية إعادة المشاركة", - "Shared in {item} with {user}" : "شورك في {item} مع {user}", - "Unshare" : "إلغاء مشاركة", "notify by email" : "الإشعار عن طريق البريد", + "Unshare" : "إلغاء مشاركة", "can share" : "يمكن المشاركة", "can edit" : "التحرير مسموح", - "access control" : "ضبط الوصول", "create" : "إنشاء", "change" : "تغيير", "delete" : "حذف", - "Password protected" : "محمي بكلمة السر", - "Error unsetting expiration date" : "حصل خطأ عند عملية إزالة تاريخ إنتهاء الصلاحية", - "Error setting expiration date" : "حصل خطأ عند عملية تعيين تاريخ إنتهاء الصلاحية", - "Sending ..." : "جاري الارسال ...", - "Email sent" : "تم ارسال البريد الالكتروني", + "access control" : "ضبط الوصول", + "Share" : "شارك", "Warning" : "تحذير", "The object type is not specified." : "نوع العنصر غير محدد.", "Enter new" : "إدخال جديد", @@ -128,6 +125,7 @@ "Finish setup" : "انهاء التعديلات", "Log out" : "الخروج", "Search" : "البحث", + "Log in" : "أدخل", "remember" : "تذكر", "Alternative Logins" : "اسماء دخول بديلة" },"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" diff --git a/core/l10n/ast.js b/core/l10n/ast.js index 675b3bd00a1..1e02a7ca37c 100644 --- a/core/l10n/ast.js +++ b/core/l10n/ast.js @@ -86,34 +86,32 @@ OC.L10N.register( "Error while sharing" : "Fallu mientres la compartición", "Error while unsharing" : "Fallu mientres se dexaba de compartir", "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" : "Compartir", - "Share link" : "Compartir enllaz", + "Error setting expiration date" : "Fallu afitando la fecha de caducidá", "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", + "Set expiration date" : "Afitar la data de caducidá", + "Expiration" : "Caducidá", + "Expiration date" : "Data de caducidá", + "Sending ..." : "Unviando ...", + "Email sent" : "Corréu unviáu", + "Resharing is not allowed" : "Recompartir nun ta permitíu", + "Share link" : "Compartir enllaz", "Password protect" : "Protexer con contraseña", "Password" : "Contraseña", "Choose a password for the public link" : "Escueyi una contraseña pal enllaz públicu", "Email link to person" : "Enllaz de corréu-e a la persona", "Send" : "Unviar", - "Set expiration date" : "Afitar la data de caducidá", - "Expiration" : "Caducidá", - "Expiration date" : "Data de caducidá", - "group" : "grupu", - "Resharing is not allowed" : "Recompartir nun ta permitíu", + "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}", "Shared in {item} with {user}" : "Compartíu en {item} con {user}", - "Unshare" : "Dexar de compartir", + "group" : "grupu", "notify by email" : "notificar per corréu", + "Unshare" : "Dexar de compartir", "can share" : "pue compartir", "can edit" : "pue editar", - "access control" : "control d'accesu", "create" : "crear", "delete" : "desaniciar", - "Password protected" : "Contraseña protexida", - "Error unsetting expiration date" : "Fallu desafitando la data de caducidá", - "Error setting expiration date" : "Fallu afitando la fecha de caducidá", - "Sending ..." : "Unviando ...", - "Email sent" : "Corréu unviáu", + "access control" : "control d'accesu", + "Share" : "Compartir", "Warning" : "Avisu", "The object type is not specified." : "El tipu d'oxetu nun ta especificáu.", "Enter new" : "Introducir nueva", @@ -168,6 +166,7 @@ OC.L10N.register( "Search" : "Guetar", "Server side authentication failed!" : "Falló l'autenticación nel sirvidor!", "Please contact your administrator." : "Por favor, contauta col to alministrador", + "Log in" : "Aniciar sesión", "remember" : "recordar", "Alternative Logins" : "Anicios de sesión alternativos", "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>" : "Hola, ¿qué hai?,<br><br>namái déxamos dicite que %s compartió <strong>%s</strong> contigo.\n<br><a href=\"%s\">¡Velu!</a><br><br>", diff --git a/core/l10n/ast.json b/core/l10n/ast.json index 5479fb6a524..636960d6496 100644 --- a/core/l10n/ast.json +++ b/core/l10n/ast.json @@ -84,34 +84,32 @@ "Error while sharing" : "Fallu mientres la compartición", "Error while unsharing" : "Fallu mientres se dexaba de compartir", "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" : "Compartir", - "Share link" : "Compartir enllaz", + "Error setting expiration date" : "Fallu afitando la fecha de caducidá", "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", + "Set expiration date" : "Afitar la data de caducidá", + "Expiration" : "Caducidá", + "Expiration date" : "Data de caducidá", + "Sending ..." : "Unviando ...", + "Email sent" : "Corréu unviáu", + "Resharing is not allowed" : "Recompartir nun ta permitíu", + "Share link" : "Compartir enllaz", "Password protect" : "Protexer con contraseña", "Password" : "Contraseña", "Choose a password for the public link" : "Escueyi una contraseña pal enllaz públicu", "Email link to person" : "Enllaz de corréu-e a la persona", "Send" : "Unviar", - "Set expiration date" : "Afitar la data de caducidá", - "Expiration" : "Caducidá", - "Expiration date" : "Data de caducidá", - "group" : "grupu", - "Resharing is not allowed" : "Recompartir nun ta permitíu", + "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}", "Shared in {item} with {user}" : "Compartíu en {item} con {user}", - "Unshare" : "Dexar de compartir", + "group" : "grupu", "notify by email" : "notificar per corréu", + "Unshare" : "Dexar de compartir", "can share" : "pue compartir", "can edit" : "pue editar", - "access control" : "control d'accesu", "create" : "crear", "delete" : "desaniciar", - "Password protected" : "Contraseña protexida", - "Error unsetting expiration date" : "Fallu desafitando la data de caducidá", - "Error setting expiration date" : "Fallu afitando la fecha de caducidá", - "Sending ..." : "Unviando ...", - "Email sent" : "Corréu unviáu", + "access control" : "control d'accesu", + "Share" : "Compartir", "Warning" : "Avisu", "The object type is not specified." : "El tipu d'oxetu nun ta especificáu.", "Enter new" : "Introducir nueva", @@ -166,6 +164,7 @@ "Search" : "Guetar", "Server side authentication failed!" : "Falló l'autenticación nel sirvidor!", "Please contact your administrator." : "Por favor, contauta col to alministrador", + "Log in" : "Aniciar sesión", "remember" : "recordar", "Alternative Logins" : "Anicios de sesión alternativos", "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>" : "Hola, ¿qué hai?,<br><br>namái déxamos dicite que %s compartió <strong>%s</strong> contigo.\n<br><a href=\"%s\">¡Velu!</a><br><br>", diff --git a/core/l10n/az.js b/core/l10n/az.js index 29e643c665a..647c1f3c273 100644 --- a/core/l10n/az.js +++ b/core/l10n/az.js @@ -60,17 +60,17 @@ OC.L10N.register( "Good password" : "Yaxşı şifrə", "Strong password" : "Çətin şifrə", "Error" : "Səhv", - "Share" : "Yayımla", + "Expiration" : "Vaxtın bitməsi", + "Email sent" : "Məktub göndərildi", "Share link" : "Linki yayımla", "Password" : "Şifrə", "Send" : "Göndər", - "Expiration" : "Vaxtın bitməsi", "group" : "qrup", "Unshare" : "Paylaşımı durdur", "can share" : "yayımlaya bilərsiniz", "can edit" : "dəyişmək olar", "delete" : "sil", - "Email sent" : "Məktub göndərildi", + "Share" : "Yayımla", "Warning" : "Xəbərdarlıq", "Delete" : "Sil", "Add" : "Əlavə etmək", @@ -83,6 +83,7 @@ OC.L10N.register( "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ış", + "Log in" : "Giriş", "You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.", "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." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir." }, diff --git a/core/l10n/az.json b/core/l10n/az.json index 6827838c944..a49a9528230 100644 --- a/core/l10n/az.json +++ b/core/l10n/az.json @@ -58,17 +58,17 @@ "Good password" : "Yaxşı şifrə", "Strong password" : "Çətin şifrə", "Error" : "Səhv", - "Share" : "Yayımla", + "Expiration" : "Vaxtın bitməsi", + "Email sent" : "Məktub göndərildi", "Share link" : "Linki yayımla", "Password" : "Şifrə", "Send" : "Göndər", - "Expiration" : "Vaxtın bitməsi", "group" : "qrup", "Unshare" : "Paylaşımı durdur", "can share" : "yayımlaya bilərsiniz", "can edit" : "dəyişmək olar", "delete" : "sil", - "Email sent" : "Məktub göndərildi", + "Share" : "Yayımla", "Warning" : "Xəbərdarlıq", "Delete" : "Sil", "Add" : "Əlavə etmək", @@ -81,6 +81,7 @@ "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ış", + "Log in" : "Giriş", "You are accessing the server from an untrusted domain." : "Siz serverə inamsız domain-dən girməyə çalışırsız.", "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." : "Xahiş olunur inzibatçı ilə əlaqə saxlayasınız. Eger siz bu xidmətin inzibatçısısınizsa, \"trusted_domain\" configini config/config.php faylinda düzgün qeyd edin. Config nüsxəsi config/config.sample.php faylında qeyd edilmişdir." },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js index e7914ca5714..dd8610428f2 100644 --- a/core/l10n/bg_BG.js +++ b/core/l10n/bg_BG.js @@ -95,11 +95,15 @@ OC.L10N.register( "Error while sharing" : "Грешка при споделяне", "Error while unsharing" : "Грешка при премахване на споделянето", "Error while changing permissions" : "Грешка при промяна на привилегиите", - "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", - "Shared with you by {owner}" : "Споделено с Вас от {owner}.", - "Share" : "Споделяне", - "Share link" : "Връзка за споделяне", + "Error setting expiration date" : "Грешка при настройване на датата за изтичане", "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.", + "Set expiration date" : "Задаване на дата на изтичане", + "Expiration" : "Изтичане", + "Expiration date" : "Дата на изтичане", + "Sending ..." : "Изпращане ...", + "Email sent" : "Електронната поща е изпратена", + "Resharing is not allowed" : "Повторно споделяне не е разрешено.", + "Share link" : "Връзка за споделяне", "Link" : "Връзка", "Password protect" : "Защитено с парола", "Password" : "Парола", @@ -107,27 +111,20 @@ OC.L10N.register( "Allow editing" : "Позволяване на редактиране", "Email link to person" : "Имейл връзка към човек", "Send" : "Изпращане", - "Set expiration date" : "Задаване на дата на изтичане", - "Expiration" : "Изтичане", - "Expiration date" : "Дата на изтичане", - "Adding user..." : "Добавяне на потребител...", + "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", + "Shared with you by {owner}" : "Споделено с Вас от {owner}.", + "Shared in {item} with {user}" : "Споделено в {item} с {user}.", "group" : "група", "remote" : "отдалечен", - "Resharing is not allowed" : "Повторно споделяне не е разрешено.", - "Shared in {item} with {user}" : "Споделено в {item} с {user}.", - "Unshare" : "Премахване на споделяне", "notify by email" : "уведомяване по електронна поща", + "Unshare" : "Премахване на споделяне", "can share" : "може да споделя", "can edit" : "може да променя", - "access control" : "контрол на достъпа", "create" : "създаване", "change" : "промяна", "delete" : "изтриване", - "Password protected" : "Защитено с парола", - "Error unsetting expiration date" : "Грешка при премахване на дата на изтичане", - "Error setting expiration date" : "Грешка при настройване на датата за изтичане", - "Sending ..." : "Изпращане ...", - "Email sent" : "Електронната поща е изпратена", + "access control" : "контрол на достъпа", + "Share" : "Споделяне", "Warning" : "Предупреждение", "The object type is not specified." : "Видът на обекта не е избран.", "Enter new" : "Въвеждане на нов", diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json index 271cb44435b..91a9704f7ef 100644 --- a/core/l10n/bg_BG.json +++ b/core/l10n/bg_BG.json @@ -93,11 +93,15 @@ "Error while sharing" : "Грешка при споделяне", "Error while unsharing" : "Грешка при премахване на споделянето", "Error while changing permissions" : "Грешка при промяна на привилегиите", - "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", - "Shared with you by {owner}" : "Споделено с Вас от {owner}.", - "Share" : "Споделяне", - "Share link" : "Връзка за споделяне", + "Error setting expiration date" : "Грешка при настройване на датата за изтичане", "The public link will expire no later than {days} days after it is created" : "Общодостъпната връзка ще изтече не по-късно от {days} дни след създаването ѝ.", + "Set expiration date" : "Задаване на дата на изтичане", + "Expiration" : "Изтичане", + "Expiration date" : "Дата на изтичане", + "Sending ..." : "Изпращане ...", + "Email sent" : "Електронната поща е изпратена", + "Resharing is not allowed" : "Повторно споделяне не е разрешено.", + "Share link" : "Връзка за споделяне", "Link" : "Връзка", "Password protect" : "Защитено с парола", "Password" : "Парола", @@ -105,27 +109,20 @@ "Allow editing" : "Позволяване на редактиране", "Email link to person" : "Имейл връзка към човек", "Send" : "Изпращане", - "Set expiration date" : "Задаване на дата на изтичане", - "Expiration" : "Изтичане", - "Expiration date" : "Дата на изтичане", - "Adding user..." : "Добавяне на потребител...", + "Shared with you and the group {group} by {owner}" : "Споделено от {owner} с Вас и групата {group} .", + "Shared with you by {owner}" : "Споделено с Вас от {owner}.", + "Shared in {item} with {user}" : "Споделено в {item} с {user}.", "group" : "група", "remote" : "отдалечен", - "Resharing is not allowed" : "Повторно споделяне не е разрешено.", - "Shared in {item} with {user}" : "Споделено в {item} с {user}.", - "Unshare" : "Премахване на споделяне", "notify by email" : "уведомяване по електронна поща", + "Unshare" : "Премахване на споделяне", "can share" : "може да споделя", "can edit" : "може да променя", - "access control" : "контрол на достъпа", "create" : "създаване", "change" : "промяна", "delete" : "изтриване", - "Password protected" : "Защитено с парола", - "Error unsetting expiration date" : "Грешка при премахване на дата на изтичане", - "Error setting expiration date" : "Грешка при настройване на датата за изтичане", - "Sending ..." : "Изпращане ...", - "Email sent" : "Електронната поща е изпратена", + "access control" : "контрол на достъпа", + "Share" : "Споделяне", "Warning" : "Предупреждение", "The object type is not specified." : "Видът на обекта не е избран.", "Enter new" : "Въвеждане на нов", diff --git a/core/l10n/bn_BD.js b/core/l10n/bn_BD.js index d9bce487f45..98eb0da6414 100644 --- a/core/l10n/bn_BD.js +++ b/core/l10n/bn_BD.js @@ -65,30 +65,28 @@ OC.L10N.register( "Error while sharing" : "ভাগাভাগি করতে সমস্যা দেখা দিয়েছে ", "Error while unsharing" : "ভাগাভাগি বাতিল করতে সমস্যা দেখা দিয়েছে", "Error while changing permissions" : "অনুমতিসমূহ পরিবর্তন করতে সমস্যা দেখা দিয়েছে", - "Shared with you and the group {group} by {owner}" : "{owner} আপনার এবং {group} গোষ্ঠীর সাথে ভাগাভাগি করেছেন", - "Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন", - "Share" : "ভাগাভাগি কর", + "Error setting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা দেখা দিয়েছে", + "Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন", + "Expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ", + "Sending ..." : "পাঠানো হচ্ছে......", + "Email sent" : "ই-মেইল পাঠানো হয়েছে", + "Resharing is not allowed" : "পূনঃরায় ভাগাভাগি অনুমোদিত নয়", "Share link" : "লিংক ভাগাভাগি করেন", "Password protect" : "কূটশব্দ সুরক্ষিত", "Password" : "কূটশব্দ", "Email link to person" : "ব্যক্তির সাথে ই-মেইল যুক্ত কর", "Send" : "পাঠাও", - "Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন", - "Expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ", - "group" : "দল", - "Resharing is not allowed" : "পূনঃরায় ভাগাভাগি অনুমোদিত নয়", + "Shared with you and the group {group} by {owner}" : "{owner} আপনার এবং {group} গোষ্ঠীর সাথে ভাগাভাগি করেছেন", + "Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন", "Shared in {item} with {user}" : "{user} এর সাথে {item} ভাগাভাগি করা হয়েছে", + "group" : "দল", "Unshare" : "ভাগাভাগি বাতিল ", "can share" : "ভাগাভাগি করেত পারেন", "can edit" : "সম্পাদনা করতে পারবেন", - "access control" : "অধিগম্যতা নিয়ন্ত্রণ", "create" : "তৈরী করুন", "delete" : "মুছে ফেল", - "Password protected" : "কূটশব্দদ্বারা সুরক্ষিত", - "Error unsetting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা দেখা দিয়েছে", - "Error setting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা দেখা দিয়েছে", - "Sending ..." : "পাঠানো হচ্ছে......", - "Email sent" : "ই-মেইল পাঠানো হয়েছে", + "access control" : "অধিগম্যতা নিয়ন্ত্রণ", + "Share" : "ভাগাভাগি কর", "Warning" : "সতর্কবাণী", "The object type is not specified." : "অবজেক্টের ধরণটি সুনির্দিষ্ট নয়।", "Enter new" : "নতুন লিখুন", @@ -125,6 +123,7 @@ OC.L10N.register( "Finishing …" : "সম্পন্ন হচ্ছে....", "Log out" : "প্রস্থান", "Search" : "অনুসন্ধান", + "Log in" : "প্রবেশ", "remember" : "মনে রাখ", "Alternative Logins" : "বিকল্প লগইন" }, diff --git a/core/l10n/bn_BD.json b/core/l10n/bn_BD.json index 8474fa61f1c..f1f2cf05ca3 100644 --- a/core/l10n/bn_BD.json +++ b/core/l10n/bn_BD.json @@ -63,30 +63,28 @@ "Error while sharing" : "ভাগাভাগি করতে সমস্যা দেখা দিয়েছে ", "Error while unsharing" : "ভাগাভাগি বাতিল করতে সমস্যা দেখা দিয়েছে", "Error while changing permissions" : "অনুমতিসমূহ পরিবর্তন করতে সমস্যা দেখা দিয়েছে", - "Shared with you and the group {group} by {owner}" : "{owner} আপনার এবং {group} গোষ্ঠীর সাথে ভাগাভাগি করেছেন", - "Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন", - "Share" : "ভাগাভাগি কর", + "Error setting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা দেখা দিয়েছে", + "Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন", + "Expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ", + "Sending ..." : "পাঠানো হচ্ছে......", + "Email sent" : "ই-মেইল পাঠানো হয়েছে", + "Resharing is not allowed" : "পূনঃরায় ভাগাভাগি অনুমোদিত নয়", "Share link" : "লিংক ভাগাভাগি করেন", "Password protect" : "কূটশব্দ সুরক্ষিত", "Password" : "কূটশব্দ", "Email link to person" : "ব্যক্তির সাথে ই-মেইল যুক্ত কর", "Send" : "পাঠাও", - "Set expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করুন", - "Expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ", - "group" : "দল", - "Resharing is not allowed" : "পূনঃরায় ভাগাভাগি অনুমোদিত নয়", + "Shared with you and the group {group} by {owner}" : "{owner} আপনার এবং {group} গোষ্ঠীর সাথে ভাগাভাগি করেছেন", + "Shared with you by {owner}" : "{owner} আপনার সাথে ভাগাভাগি করেছেন", "Shared in {item} with {user}" : "{user} এর সাথে {item} ভাগাভাগি করা হয়েছে", + "group" : "দল", "Unshare" : "ভাগাভাগি বাতিল ", "can share" : "ভাগাভাগি করেত পারেন", "can edit" : "সম্পাদনা করতে পারবেন", - "access control" : "অধিগম্যতা নিয়ন্ত্রণ", "create" : "তৈরী করুন", "delete" : "মুছে ফেল", - "Password protected" : "কূটশব্দদ্বারা সুরক্ষিত", - "Error unsetting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ বাতিল করতে সমস্যা দেখা দিয়েছে", - "Error setting expiration date" : "মেয়াদোত্তীর্ণ হওয়ার তারিখ নির্ধারণ করতে সমস্যা দেখা দিয়েছে", - "Sending ..." : "পাঠানো হচ্ছে......", - "Email sent" : "ই-মেইল পাঠানো হয়েছে", + "access control" : "অধিগম্যতা নিয়ন্ত্রণ", + "Share" : "ভাগাভাগি কর", "Warning" : "সতর্কবাণী", "The object type is not specified." : "অবজেক্টের ধরণটি সুনির্দিষ্ট নয়।", "Enter new" : "নতুন লিখুন", @@ -123,6 +121,7 @@ "Finishing …" : "সম্পন্ন হচ্ছে....", "Log out" : "প্রস্থান", "Search" : "অনুসন্ধান", + "Log in" : "প্রবেশ", "remember" : "মনে রাখ", "Alternative Logins" : "বিকল্প লগইন" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/bs.js b/core/l10n/bs.js index f237de9d8ce..8948dba8ccf 100644 --- a/core/l10n/bs.js +++ b/core/l10n/bs.js @@ -86,11 +86,15 @@ OC.L10N.register( "Error while sharing" : "Greška pri dijeljenju", "Error while unsharing" : "Ggreška pri prestanku dijeljenja", "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" : "Podijeli", - "Share link" : "Podijelite vezu", + "Error setting expiration date" : "Pogrešno postavljanje datuma isteka", "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", + "Set expiration date" : "Postavite datum isteka", + "Expiration" : "Istek", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "E-pošta poslana", + "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", + "Share link" : "Podijelite vezu", "Link" : "Veza", "Password protect" : "Zaštitita lozinkom", "Password" : "Lozinka", @@ -98,27 +102,20 @@ OC.L10N.register( "Allow editing" : "Dozvolite izmjenu", "Email link to person" : "Pošaljite osobi vezu e-poštom", "Send" : "Pošalji", - "Set expiration date" : "Postavite datum isteka", - "Expiration" : "Istek", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}", "group" : "grupa", "remote" : "daljinski", - "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", - "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}", - "Unshare" : "Prestani dijeliti", "notify by email" : "Obavijesti e-poštom", + "Unshare" : "Prestani dijeliti", "can share" : "može dijeliti", "can edit" : "moće mijenjati", - "access control" : "Kontrola pristupa", "create" : "kreiraj", "change" : "izmjeni", "delete" : "izbriši", - "Password protected" : "Zaštićeno lozinkom", - "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka", - "Error setting expiration date" : "Pogrešno postavljanje datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "E-pošta poslana", + "access control" : "Kontrola pristupa", + "Share" : "Podijeli", "Warning" : "Upozorenje", "The object type is not specified." : "Vrsta objekta nije određena.", "Enter new" : "Unesi novi", @@ -189,6 +186,7 @@ OC.L10N.register( "Search" : "Potraži", "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!", "Please contact your administrator." : "Molim kontaktirajte svog administratora.", + "Log in" : "Prijava", "remember" : "zapamti", "Alternative Logins" : "Alternativne Prijave", "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>" : "Hej, <br><br> upravo vam javljam da je %s s vama podijelio <strong>%s</strong>.<br><a href=\"%s\">Pogledajte!</a><br><br>", diff --git a/core/l10n/bs.json b/core/l10n/bs.json index c4f7962b14e..ffe9bab69da 100644 --- a/core/l10n/bs.json +++ b/core/l10n/bs.json @@ -84,11 +84,15 @@ "Error while sharing" : "Greška pri dijeljenju", "Error while unsharing" : "Ggreška pri prestanku dijeljenja", "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" : "Podijeli", - "Share link" : "Podijelite vezu", + "Error setting expiration date" : "Pogrešno postavljanje datuma isteka", "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", + "Set expiration date" : "Postavite datum isteka", + "Expiration" : "Istek", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "E-pošta poslana", + "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", + "Share link" : "Podijelite vezu", "Link" : "Veza", "Password protect" : "Zaštitita lozinkom", "Password" : "Lozinka", @@ -96,27 +100,20 @@ "Allow editing" : "Dozvolite izmjenu", "Email link to person" : "Pošaljite osobi vezu e-poštom", "Send" : "Pošalji", - "Set expiration date" : "Postavite datum isteka", - "Expiration" : "Istek", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}", "group" : "grupa", "remote" : "daljinski", - "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", - "Shared in {item} with {user}" : "Podijeljeno u {item} s {user}", - "Unshare" : "Prestani dijeliti", "notify by email" : "Obavijesti e-poštom", + "Unshare" : "Prestani dijeliti", "can share" : "može dijeliti", "can edit" : "moće mijenjati", - "access control" : "Kontrola pristupa", "create" : "kreiraj", "change" : "izmjeni", "delete" : "izbriši", - "Password protected" : "Zaštićeno lozinkom", - "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka", - "Error setting expiration date" : "Pogrešno postavljanje datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "E-pošta poslana", + "access control" : "Kontrola pristupa", + "Share" : "Podijeli", "Warning" : "Upozorenje", "The object type is not specified." : "Vrsta objekta nije određena.", "Enter new" : "Unesi novi", @@ -187,6 +184,7 @@ "Search" : "Potraži", "Server side authentication failed!" : "Autentikacija na strani servera nije uspjela!", "Please contact your administrator." : "Molim kontaktirajte svog administratora.", + "Log in" : "Prijava", "remember" : "zapamti", "Alternative Logins" : "Alternativne Prijave", "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>" : "Hej, <br><br> upravo vam javljam da je %s s vama podijelio <strong>%s</strong>.<br><a href=\"%s\">Pogledajte!</a><br><br>", diff --git a/core/l10n/ca.js b/core/l10n/ca.js index 1fa4f12a3e3..4fdce762dc5 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -113,14 +113,15 @@ OC.L10N.register( "Error while sharing" : "Error en compartir", "Error while unsharing" : "Error en deixar de compartir", "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 users or groups …" : "Comparteix amb usuaris o grups ...", - "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", - "Share" : "Comparteix", - "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ó", + "Error setting expiration date" : "Error en establir la data de venciment", "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", + "Set expiration date" : "Estableix la data de venciment", + "Expiration" : "Expiració", + "Expiration date" : "Data de venciment", + "Sending ..." : "Enviant...", + "Email sent" : "El correu electrónic s'ha enviat", + "Resharing is not allowed" : "No es permet compartir de nou", + "Share link" : "Enllaç de compartició", "Link" : "Enllaç", "Password protect" : "Protegir amb contrasenya", "Password" : "Contrasenya", @@ -128,28 +129,24 @@ OC.L10N.register( "Allow editing" : "Permetre edició", "Email link to person" : "Enllaç per correu electrónic amb la persona", "Send" : "Envia", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartit en {item} amb {user}", "group" : "grup", "remote" : "remot", - "Resharing is not allowed" : "No es permet compartir de nou", - "Shared in {item} with {user}" : "Compartit en {item} amb {user}", - "Unshare" : "Deixa de compartir", "notify by email" : "notifica per correu electrònic", + "Unshare" : "Deixa de compartir", "can share" : "pot compartir", "can edit" : "pot editar", - "access control" : "control d'accés", "create" : "crea", "change" : "cambi", "delete" : "elimina", - "Password protected" : "Protegeix amb contrasenya", - "Error unsetting expiration date" : "Error en eliminar la data de venciment", - "Error setting expiration date" : "Error en establir la data de venciment", - "Sending ..." : "Enviant...", - "Email sent" : "El correu electrónic s'ha enviat", + "access control" : "control d'accés", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", + "Share" : "Comparteix", + "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 with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", "Warning" : "Avís", "The object type is not specified." : "No s'ha especificat el tipus d'objecte.", "Enter new" : "Escriu nou", diff --git a/core/l10n/ca.json b/core/l10n/ca.json index 55962a25362..4d147db52f4 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -111,14 +111,15 @@ "Error while sharing" : "Error en compartir", "Error while unsharing" : "Error en deixar de compartir", "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 users or groups …" : "Comparteix amb usuaris o grups ...", - "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", - "Share" : "Comparteix", - "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ó", + "Error setting expiration date" : "Error en establir la data de venciment", "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", + "Set expiration date" : "Estableix la data de venciment", + "Expiration" : "Expiració", + "Expiration date" : "Data de venciment", + "Sending ..." : "Enviant...", + "Email sent" : "El correu electrónic s'ha enviat", + "Resharing is not allowed" : "No es permet compartir de nou", + "Share link" : "Enllaç de compartició", "Link" : "Enllaç", "Password protect" : "Protegir amb contrasenya", "Password" : "Contrasenya", @@ -126,28 +127,24 @@ "Allow editing" : "Permetre edició", "Email link to person" : "Enllaç per correu electrónic amb la persona", "Send" : "Envia", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartit en {item} amb {user}", "group" : "grup", "remote" : "remot", - "Resharing is not allowed" : "No es permet compartir de nou", - "Shared in {item} with {user}" : "Compartit en {item} amb {user}", - "Unshare" : "Deixa de compartir", "notify by email" : "notifica per correu electrònic", + "Unshare" : "Deixa de compartir", "can share" : "pot compartir", "can edit" : "pot editar", - "access control" : "control d'accés", "create" : "crea", "change" : "cambi", "delete" : "elimina", - "Password protected" : "Protegeix amb contrasenya", - "Error unsetting expiration date" : "Error en eliminar la data de venciment", - "Error setting expiration date" : "Error en establir la data de venciment", - "Sending ..." : "Enviant...", - "Email sent" : "El correu electrónic s'ha enviat", + "access control" : "control d'accés", + "An error occured. Please try again" : "Va ocórrer un error. Per favor, intenta-ho de nou", + "Share" : "Comparteix", + "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 with users or groups …" : "Comparteix amb usuaris o grups ...", + "Share with users, groups or remote users …" : "Comparteix amb usuaris, grups o usuaris remots ...", "Warning" : "Avís", "The object type is not specified." : "No s'ha especificat el tipus d'objecte.", "Enter new" : "Escriu nou", diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 0ee3a06e45f..ac1d9631c53 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -115,14 +115,15 @@ OC.L10N.register( "Error while sharing" : "Chyba při sdílení", "Error while unsharing" : "Chyba při rušení sdílení", "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 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" : "Sdílet", - "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", + "Error setting expiration date" : "Chyba při nastavení data vypršení platnosti", "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í", + "Set expiration date" : "Nastavit datum vypršení platnosti", + "Expiration" : "Konec platnosti", + "Expiration date" : "Datum vypršení platnosti", + "Sending ..." : "Odesílám ...", + "Email sent" : "Email odeslán", + "Resharing is not allowed" : "Sdílení již sdílené položky není povoleno", + "Share link" : "Sdílet odkaz", "Link" : "Odkaz", "Password protect" : "Chránit heslem", "Password" : "Heslo", @@ -130,28 +131,24 @@ OC.L10N.register( "Allow editing" : "Povolit úpravy", "Email link to person" : "Odeslat osobě odkaz emailem", "Send" : "Odeslat", - "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...", + "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}", + "Shared in {item} with {user}" : "Sdíleno v {item} s {user}", "group" : "skupina", "remote" : "vzdálený", - "Resharing is not allowed" : "Sdílení již sdílené položky není povoleno", - "Shared in {item} with {user}" : "Sdíleno v {item} s {user}", - "Unshare" : "Zrušit sdílení", "notify by email" : "upozornit emailem", + "Unshare" : "Zrušit sdílení", "can share" : "může sdílet", "can edit" : "lze upravovat", - "access control" : "řízení přístupu", "create" : "vytvořit", "change" : "změnit", "delete" : "smazat", - "Password protected" : "Chráněno heslem", - "Error unsetting expiration date" : "Chyba při odstraňování data vypršení platnosti", - "Error setting expiration date" : "Chyba při nastavení data vypršení platnosti", - "Sending ..." : "Odesílám ...", - "Email sent" : "Email odeslán", + "access control" : "řízení přístupu", + "An error occured. Please try again" : "Nastala chyba. Prosím zkuste to znovu", + "Share" : "Sdílet", + "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 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", "Warning" : "Varování", "The object type is not specified." : "Není určen typ objektu.", "Enter new" : "Zadat nový", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index 1c38e7cc152..78c0e61d0b8 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -113,14 +113,15 @@ "Error while sharing" : "Chyba při sdílení", "Error while unsharing" : "Chyba při rušení sdílení", "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 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" : "Sdílet", - "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", + "Error setting expiration date" : "Chyba při nastavení data vypršení platnosti", "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í", + "Set expiration date" : "Nastavit datum vypršení platnosti", + "Expiration" : "Konec platnosti", + "Expiration date" : "Datum vypršení platnosti", + "Sending ..." : "Odesílám ...", + "Email sent" : "Email odeslán", + "Resharing is not allowed" : "Sdílení již sdílené položky není povoleno", + "Share link" : "Sdílet odkaz", "Link" : "Odkaz", "Password protect" : "Chránit heslem", "Password" : "Heslo", @@ -128,28 +129,24 @@ "Allow editing" : "Povolit úpravy", "Email link to person" : "Odeslat osobě odkaz emailem", "Send" : "Odeslat", - "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...", + "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}", + "Shared in {item} with {user}" : "Sdíleno v {item} s {user}", "group" : "skupina", "remote" : "vzdálený", - "Resharing is not allowed" : "Sdílení již sdílené položky není povoleno", - "Shared in {item} with {user}" : "Sdíleno v {item} s {user}", - "Unshare" : "Zrušit sdílení", "notify by email" : "upozornit emailem", + "Unshare" : "Zrušit sdílení", "can share" : "může sdílet", "can edit" : "lze upravovat", - "access control" : "řízení přístupu", "create" : "vytvořit", "change" : "změnit", "delete" : "smazat", - "Password protected" : "Chráněno heslem", - "Error unsetting expiration date" : "Chyba při odstraňování data vypršení platnosti", - "Error setting expiration date" : "Chyba při nastavení data vypršení platnosti", - "Sending ..." : "Odesílám ...", - "Email sent" : "Email odeslán", + "access control" : "řízení přístupu", + "An error occured. Please try again" : "Nastala chyba. Prosím zkuste to znovu", + "Share" : "Sdílet", + "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 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", "Warning" : "Varování", "The object type is not specified." : "Není určen typ objektu.", "Enter new" : "Zadat nový", diff --git a/core/l10n/cy_GB.js b/core/l10n/cy_GB.js index 27df5177fff..ffea08840c1 100644 --- a/core/l10n/cy_GB.js +++ b/core/l10n/cy_GB.js @@ -51,28 +51,26 @@ OC.L10N.register( "Error while sharing" : "Gwall wrth rannu", "Error while unsharing" : "Gwall wrth ddad-rannu", "Error while changing permissions" : "Gwall wrth newid caniatâd", - "Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}", - "Shared with you by {owner}" : "Rhannwyd â chi gan {owner}", - "Share" : "Rhannu", + "Error setting expiration date" : "Gwall wrth osod dyddiad dod i ben", + "Set expiration date" : "Gosod dyddiad dod i ben", + "Expiration date" : "Dyddiad dod i ben", + "Sending ..." : "Yn anfon ...", + "Email sent" : "Anfonwyd yr e-bost", + "Resharing is not allowed" : "Does dim hawl ail-rannu", "Password protect" : "Diogelu cyfrinair", "Password" : "Cyfrinair", "Email link to person" : "E-bostio dolen at berson", "Send" : "Anfon", - "Set expiration date" : "Gosod dyddiad dod i ben", - "Expiration date" : "Dyddiad dod i ben", - "group" : "grŵp", - "Resharing is not allowed" : "Does dim hawl ail-rannu", + "Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}", + "Shared with you by {owner}" : "Rhannwyd â chi gan {owner}", "Shared in {item} with {user}" : "Rhannwyd yn {item} â {user}", + "group" : "grŵp", "Unshare" : "Dad-rannu", "can edit" : "yn gallu golygu", - "access control" : "rheolaeth mynediad", "create" : "creu", "delete" : "dileu", - "Password protected" : "Diogelwyd â chyfrinair", - "Error unsetting expiration date" : "Gwall wrth ddad-osod dyddiad dod i ben", - "Error setting expiration date" : "Gwall wrth osod dyddiad dod i ben", - "Sending ..." : "Yn anfon ...", - "Email sent" : "Anfonwyd yr e-bost", + "access control" : "rheolaeth mynediad", + "Share" : "Rhannu", "Warning" : "Rhybudd", "The object type is not specified." : "Nid yw'r math o wrthrych wedi cael ei nodi.", "Delete" : "Dileu", diff --git a/core/l10n/cy_GB.json b/core/l10n/cy_GB.json index 37f1aefb527..e5f4dae203d 100644 --- a/core/l10n/cy_GB.json +++ b/core/l10n/cy_GB.json @@ -49,28 +49,26 @@ "Error while sharing" : "Gwall wrth rannu", "Error while unsharing" : "Gwall wrth ddad-rannu", "Error while changing permissions" : "Gwall wrth newid caniatâd", - "Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}", - "Shared with you by {owner}" : "Rhannwyd â chi gan {owner}", - "Share" : "Rhannu", + "Error setting expiration date" : "Gwall wrth osod dyddiad dod i ben", + "Set expiration date" : "Gosod dyddiad dod i ben", + "Expiration date" : "Dyddiad dod i ben", + "Sending ..." : "Yn anfon ...", + "Email sent" : "Anfonwyd yr e-bost", + "Resharing is not allowed" : "Does dim hawl ail-rannu", "Password protect" : "Diogelu cyfrinair", "Password" : "Cyfrinair", "Email link to person" : "E-bostio dolen at berson", "Send" : "Anfon", - "Set expiration date" : "Gosod dyddiad dod i ben", - "Expiration date" : "Dyddiad dod i ben", - "group" : "grŵp", - "Resharing is not allowed" : "Does dim hawl ail-rannu", + "Shared with you and the group {group} by {owner}" : "Rhannwyd â chi a'r grŵp {group} gan {owner}", + "Shared with you by {owner}" : "Rhannwyd â chi gan {owner}", "Shared in {item} with {user}" : "Rhannwyd yn {item} â {user}", + "group" : "grŵp", "Unshare" : "Dad-rannu", "can edit" : "yn gallu golygu", - "access control" : "rheolaeth mynediad", "create" : "creu", "delete" : "dileu", - "Password protected" : "Diogelwyd â chyfrinair", - "Error unsetting expiration date" : "Gwall wrth ddad-osod dyddiad dod i ben", - "Error setting expiration date" : "Gwall wrth osod dyddiad dod i ben", - "Sending ..." : "Yn anfon ...", - "Email sent" : "Anfonwyd yr e-bost", + "access control" : "rheolaeth mynediad", + "Share" : "Rhannu", "Warning" : "Rhybudd", "The object type is not specified." : "Nid yw'r math o wrthrych wedi cael ei nodi.", "Delete" : "Dileu", diff --git a/core/l10n/da.js b/core/l10n/da.js index c8684b3483c..5461275fb8e 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Fejl under deling", "Error while unsharing" : "Fejl under annullering af deling", "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 users or groups …" : "Del med brugere eller grupper", - "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", - "Share" : "Del", - "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", + "Error setting expiration date" : "Fejl under sætning af udløbsdato", "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", + "Set expiration date" : "Vælg udløbsdato", + "Expiration" : "Udløb", + "Expiration date" : "Udløbsdato", + "Sending ..." : "Sender ...", + "Email sent" : "E-mail afsendt", + "Resharing is not allowed" : "Videredeling ikke tilladt", + "Share link" : "Del link", "Link" : "Link", "Password protect" : "Beskyt med adgangskode", "Password" : "Adgangskode", @@ -131,29 +132,27 @@ OC.L10N.register( "Allow editing" : "Tillad redigering", "Email link to person" : "E-mail link til person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Delt i {item} med {user}", "group" : "gruppe", "remote" : "ekstern", - "Resharing is not allowed" : "Videredeling ikke tilladt", - "Shared in {item} with {user}" : "Delt i {item} med {user}", - "Unshare" : "Fjern deling", "notify by email" : "Giv besked med mail", + "Unshare" : "Fjern deling", "can share" : "kan dele", "can edit" : "kan redigere", - "access control" : "Adgangskontrol", "create" : "opret", "change" : "tilpas", "delete" : "slet", - "Password protected" : "Beskyttet med adgangskode", - "Error unsetting expiration date" : "Fejl ved fjernelse af udløbsdato", - "Error setting expiration date" : "Fejl under sætning af udløbsdato", - "Sending ..." : "Sender ...", - "Email sent" : "E-mail afsendt", + "access control" : "Adgangskontrol", + "Share details could not be loaded for this item." : "Detaljer for deling kunne ikke indlæses for dette element.", + "An error occured. Please try again" : "Der skete en fejl. Prøv venligst igen", + "Share" : "Del", + "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 with users or groups …" : "Del med brugere eller grupper", + "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", "Warning" : "Advarsel", + "Error while sending notification" : "Fejl ved afsendelse af notifikation", "The object type is not specified." : "Objekttypen er ikke angivet.", "Enter new" : "Indtast nyt", "Delete" : "Slet", diff --git a/core/l10n/da.json b/core/l10n/da.json index 067d5e6914d..adf9fb314d5 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -114,14 +114,15 @@ "Error while sharing" : "Fejl under deling", "Error while unsharing" : "Fejl under annullering af deling", "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 users or groups …" : "Del med brugere eller grupper", - "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", - "Share" : "Del", - "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", + "Error setting expiration date" : "Fejl under sætning af udløbsdato", "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", + "Set expiration date" : "Vælg udløbsdato", + "Expiration" : "Udløb", + "Expiration date" : "Udløbsdato", + "Sending ..." : "Sender ...", + "Email sent" : "E-mail afsendt", + "Resharing is not allowed" : "Videredeling ikke tilladt", + "Share link" : "Del link", "Link" : "Link", "Password protect" : "Beskyt med adgangskode", "Password" : "Adgangskode", @@ -129,29 +130,27 @@ "Allow editing" : "Tillad redigering", "Email link to person" : "E-mail link til person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Delt i {item} med {user}", "group" : "gruppe", "remote" : "ekstern", - "Resharing is not allowed" : "Videredeling ikke tilladt", - "Shared in {item} with {user}" : "Delt i {item} med {user}", - "Unshare" : "Fjern deling", "notify by email" : "Giv besked med mail", + "Unshare" : "Fjern deling", "can share" : "kan dele", "can edit" : "kan redigere", - "access control" : "Adgangskontrol", "create" : "opret", "change" : "tilpas", "delete" : "slet", - "Password protected" : "Beskyttet med adgangskode", - "Error unsetting expiration date" : "Fejl ved fjernelse af udløbsdato", - "Error setting expiration date" : "Fejl under sætning af udløbsdato", - "Sending ..." : "Sender ...", - "Email sent" : "E-mail afsendt", + "access control" : "Adgangskontrol", + "Share details could not be loaded for this item." : "Detaljer for deling kunne ikke indlæses for dette element.", + "An error occured. Please try again" : "Der skete en fejl. Prøv venligst igen", + "Share" : "Del", + "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 with users or groups …" : "Del med brugere eller grupper", + "Share with users, groups or remote users …" : "Del med brugere, grupper eller eksterne brugere...", "Warning" : "Advarsel", + "Error while sending notification" : "Fejl ved afsendelse af notifikation", "The object type is not specified." : "Objekttypen er ikke angivet.", "Enter new" : "Indtast nyt", "Delete" : "Slet", diff --git a/core/l10n/de.js b/core/l10n/de.js index 495ea72c710..3b307547244 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -106,14 +106,15 @@ OC.L10N.register( "Error while sharing" : "Fehler beim Teilen", "Error while unsharing" : "Fehler beim Aufheben der Freigabe", "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 users or groups …" : "Mit Benutzern oder Gruppen teilen…", - "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", - "Share" : "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", + "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "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", + "Set expiration date" : "Setze ein Ablaufdatum", + "Expiration" : "Ablaufdatum", + "Expiration date" : "Ablaufdatum", + "Sending ..." : "Senden…", + "Email sent" : "E-Mail wurde verschickt", + "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", + "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", "Password" : "Passwort", @@ -121,28 +122,24 @@ OC.L10N.register( "Allow editing" : "Bearbeitung erlauben", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", - "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…", + "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", + "Shared in {item} with {user}" : "Für {user} in {item} freigegeben", "group" : "Gruppe", "remote" : "Entfernte Freigabe", - "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", - "Shared in {item} with {user}" : "Für {user} in {item} freigegeben", - "Unshare" : "Freigabe aufheben", "notify by email" : "per E-Mail benachrichtigen", + "Unshare" : "Freigabe aufheben", "can share" : "kann teilen", "can edit" : "kann bearbeiten", - "access control" : "Zugriffskontrolle", "create" : "erstellen", "change" : "Ändern", "delete" : "löschen", - "Password protected" : "Durch ein Passwort geschützt", - "Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums", - "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", - "Sending ..." : "Senden…", - "Email sent" : "E-Mail wurde verschickt", + "access control" : "Zugriffskontrolle", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", + "Share" : "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 with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", "Warning" : "Warnung", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", diff --git a/core/l10n/de.json b/core/l10n/de.json index fc826c7fde2..4784f7f1979 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -104,14 +104,15 @@ "Error while sharing" : "Fehler beim Teilen", "Error while unsharing" : "Fehler beim Aufheben der Freigabe", "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 users or groups …" : "Mit Benutzern oder Gruppen teilen…", - "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", - "Share" : "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", + "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "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", + "Set expiration date" : "Setze ein Ablaufdatum", + "Expiration" : "Ablaufdatum", + "Expiration date" : "Ablaufdatum", + "Sending ..." : "Senden…", + "Email sent" : "E-Mail wurde verschickt", + "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", + "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", "Password" : "Passwort", @@ -119,28 +120,24 @@ "Allow editing" : "Bearbeitung erlauben", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", - "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…", + "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", + "Shared in {item} with {user}" : "Für {user} in {item} freigegeben", "group" : "Gruppe", "remote" : "Entfernte Freigabe", - "Resharing is not allowed" : "Weiterverteilen ist nicht erlaubt", - "Shared in {item} with {user}" : "Für {user} in {item} freigegeben", - "Unshare" : "Freigabe aufheben", "notify by email" : "per E-Mail benachrichtigen", + "Unshare" : "Freigabe aufheben", "can share" : "kann teilen", "can edit" : "kann bearbeiten", - "access control" : "Zugriffskontrolle", "create" : "erstellen", "change" : "Ändern", "delete" : "löschen", - "Password protected" : "Durch ein Passwort geschützt", - "Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums", - "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", - "Sending ..." : "Senden…", - "Email sent" : "E-Mail wurde verschickt", + "access control" : "Zugriffskontrolle", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuche es noch einmal", + "Share" : "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 with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", "Warning" : "Warnung", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", diff --git a/core/l10n/de_AT.js b/core/l10n/de_AT.js index 716851f53b6..b41c1547953 100644 --- a/core/l10n/de_AT.js +++ b/core/l10n/de_AT.js @@ -45,7 +45,6 @@ OC.L10N.register( "Cancel" : "Abbrechen", "Continue" : "Weiter", "Error" : "Fehler", - "Share" : "Freigeben", "Share link" : "Link teilen", "Password" : "Passwort", "Send" : "Senden", @@ -53,6 +52,7 @@ OC.L10N.register( "Unshare" : "Teilung zurücknehmen", "can share" : "Kann teilen", "can edit" : "kann bearbeiten", + "Share" : "Freigeben", "Delete" : "Löschen", "Add" : "Hinzufügen", "Personal" : "Persönlich", diff --git a/core/l10n/de_AT.json b/core/l10n/de_AT.json index a0798f9a826..4e3b9669c16 100644 --- a/core/l10n/de_AT.json +++ b/core/l10n/de_AT.json @@ -43,7 +43,6 @@ "Cancel" : "Abbrechen", "Continue" : "Weiter", "Error" : "Fehler", - "Share" : "Freigeben", "Share link" : "Link teilen", "Password" : "Passwort", "Send" : "Senden", @@ -51,6 +50,7 @@ "Unshare" : "Teilung zurücknehmen", "can share" : "Kann teilen", "can edit" : "kann bearbeiten", + "Share" : "Freigeben", "Delete" : "Löschen", "Add" : "Hinzufügen", "Personal" : "Persönlich", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 0a4689261a6..369936d0c92 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -114,14 +114,15 @@ OC.L10N.register( "Error while sharing" : "Fehler beim Teilen", "Error while unsharing" : "Fehler beim Aufheben der Freigabe", "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 users or groups …" : "Mit Benutzern oder Gruppen teilen…", - "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", - "Share" : "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", + "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "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", + "Set expiration date" : "Ein Ablaufdatum setzen", + "Expiration" : "Ablaufdatum", + "Expiration date" : "Ablaufdatum", + "Sending ..." : "Senden…", + "Email sent" : "E-Mail gesendet", + "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", + "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", "Password" : "Passwort", @@ -129,28 +130,24 @@ OC.L10N.register( "Allow editing" : "Bearbeitung erlauben", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", - "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…", + "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.", + "Shared in {item} with {user}" : "Freigegeben in {item} von {user}", "group" : "Gruppe", "remote" : "Entfernte Freigabe", - "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", - "Shared in {item} with {user}" : "Freigegeben in {item} von {user}", - "Unshare" : "Freigabe aufheben", "notify by email" : "per E-Mail benachrichtigen", + "Unshare" : "Freigabe aufheben", "can share" : "kann teilen", "can edit" : "kann bearbeiten", - "access control" : "Zugriffskontrolle", "create" : "erstellen", "change" : "Ändern", "delete" : "löschen", - "Password protected" : "Passwortgeschützt", - "Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums", - "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", - "Sending ..." : "Senden…", - "Email sent" : "E-Mail gesendet", + "access control" : "Zugriffskontrolle", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", + "Share" : "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 with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", "Warning" : "Warnung", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index a5f2d5857e3..8f0d3fa8465 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -112,14 +112,15 @@ "Error while sharing" : "Fehler beim Teilen", "Error while unsharing" : "Fehler beim Aufheben der Freigabe", "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 users or groups …" : "Mit Benutzern oder Gruppen teilen…", - "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", - "Share" : "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", + "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", "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", + "Set expiration date" : "Ein Ablaufdatum setzen", + "Expiration" : "Ablaufdatum", + "Expiration date" : "Ablaufdatum", + "Sending ..." : "Senden…", + "Email sent" : "E-Mail gesendet", + "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", + "Share link" : "Link teilen", "Link" : "Link", "Password protect" : "Passwortschutz", "Password" : "Passwort", @@ -127,28 +128,24 @@ "Allow editing" : "Bearbeitung erlauben", "Email link to person" : "Link per E-Mail verschicken", "Send" : "Senden", - "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…", + "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.", + "Shared in {item} with {user}" : "Freigegeben in {item} von {user}", "group" : "Gruppe", "remote" : "Entfernte Freigabe", - "Resharing is not allowed" : "Das Weiterverteilen ist nicht erlaubt", - "Shared in {item} with {user}" : "Freigegeben in {item} von {user}", - "Unshare" : "Freigabe aufheben", "notify by email" : "per E-Mail benachrichtigen", + "Unshare" : "Freigabe aufheben", "can share" : "kann teilen", "can edit" : "kann bearbeiten", - "access control" : "Zugriffskontrolle", "create" : "erstellen", "change" : "Ändern", "delete" : "löschen", - "Password protected" : "Passwortgeschützt", - "Error unsetting expiration date" : "Fehler beim Entfernen des Ablaufdatums", - "Error setting expiration date" : "Fehler beim Setzen des Ablaufdatums", - "Sending ..." : "Senden…", - "Email sent" : "E-Mail gesendet", + "access control" : "Zugriffskontrolle", + "An error occured. Please try again" : "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es noch einmal", + "Share" : "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 with users or groups …" : "Mit Benutzern oder Gruppen teilen…", + "Share with users, groups or remote users …" : "Mit Benutzern, Gruppen oder entfernten Benutzern teilen…", "Warning" : "Warnung", "The object type is not specified." : "Der Objekttyp ist nicht angegeben.", "Enter new" : "Neuen eingeben", diff --git a/core/l10n/el.js b/core/l10n/el.js index 28e9763e13c..3b739d06b52 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -116,14 +116,15 @@ OC.L10N.register( "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}", - "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", - "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", - "Share" : "Διαμοιρασμός", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", - "Share link" : "Διαμοιρασμός συνδέσμου", + "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης", "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του", + "Set expiration date" : "Ορισμός ημ. λήξης", + "Expiration" : "Λήξη", + "Expiration date" : "Ημερομηνία λήξης", + "Sending ..." : "Αποστολή...", + "Email sent" : "Το Email απεστάλη ", + "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται", + "Share link" : "Διαμοιρασμός συνδέσμου", "Link" : "Σύνδεσμος", "Password protect" : "Προστασία συνθηματικού", "Password" : "Συνθηματικό", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Επιτρέπεται η επεξεργασία", "Email link to person" : "Αποστολή συνδέσμου με email ", "Send" : "Αποστολή", - "Set expiration date" : "Ορισμός ημ. λήξης", - "Expiration" : "Λήξη", - "Expiration date" : "Ημερομηνία λήξης", - "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", - "Adding user..." : "Προσθήκη χρήστη ...", + "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", + "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", + "Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}", "group" : "ομάδα", "remote" : "απομακρυσμένα", - "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται", - "Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}", - "Unshare" : "Διακοπή διαμοιρασμού", "notify by email" : "ειδοποίηση με email", + "Unshare" : "Διακοπή διαμοιρασμού", "can share" : "δυνατότητα διαμοιρασμού", "can edit" : "δυνατότητα αλλαγής", - "access control" : "έλεγχος πρόσβασης", "create" : "δημιουργία", "change" : "αλλαγή", "delete" : "διαγραφή", - "Password protected" : "Προστασία με συνθηματικό", - "Error unsetting expiration date" : "Σφάλμα κατά την διαγραφή της ημ. λήξης", - "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης", - "Sending ..." : "Αποστολή...", - "Email sent" : "Το Email απεστάλη ", + "access control" : "έλεγχος πρόσβασης", + "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", + "Share" : "Διαμοιρασμός", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", + "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", + "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", "Warning" : "Προειδοποίηση", "The object type is not specified." : "Δεν καθορίστηκε ο τύπος του αντικειμένου.", "Enter new" : "Εισαγωγή νέου", diff --git a/core/l10n/el.json b/core/l10n/el.json index 6c68066738a..9900d8f568c 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -114,14 +114,15 @@ "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}", - "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", - "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", - "Share" : "Διαμοιρασμός", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", - "Share link" : "Διαμοιρασμός συνδέσμου", + "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης", "The public link will expire no later than {days} days after it is created" : "Ο δημόσιος σύνδεσμος θα απενεργοποιηθεί το πολύ {days} ημέρες μετά την δημιουργία του", + "Set expiration date" : "Ορισμός ημ. λήξης", + "Expiration" : "Λήξη", + "Expiration date" : "Ημερομηνία λήξης", + "Sending ..." : "Αποστολή...", + "Email sent" : "Το Email απεστάλη ", + "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται", + "Share link" : "Διαμοιρασμός συνδέσμου", "Link" : "Σύνδεσμος", "Password protect" : "Προστασία συνθηματικού", "Password" : "Συνθηματικό", @@ -129,28 +130,24 @@ "Allow editing" : "Επιτρέπεται η επεξεργασία", "Email link to person" : "Αποστολή συνδέσμου με email ", "Send" : "Αποστολή", - "Set expiration date" : "Ορισμός ημ. λήξης", - "Expiration" : "Λήξη", - "Expiration date" : "Ημερομηνία λήξης", - "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", - "Adding user..." : "Προσθήκη χρήστη ...", + "Shared with you and the group {group} by {owner}" : "Διαμοιράστηκε με σας και με την ομάδα {group} του {owner}", + "Shared with you by {owner}" : "Διαμοιράστηκε με σας από τον {owner}", + "Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}", "group" : "ομάδα", "remote" : "απομακρυσμένα", - "Resharing is not allowed" : "Ξαναμοιρασμός δεν επιτρέπεται", - "Shared in {item} with {user}" : "Διαμοιρασμός του {item} με τον {user}", - "Unshare" : "Διακοπή διαμοιρασμού", "notify by email" : "ειδοποίηση με email", + "Unshare" : "Διακοπή διαμοιρασμού", "can share" : "δυνατότητα διαμοιρασμού", "can edit" : "δυνατότητα αλλαγής", - "access control" : "έλεγχος πρόσβασης", "create" : "δημιουργία", "change" : "αλλαγή", "delete" : "διαγραφή", - "Password protected" : "Προστασία με συνθηματικό", - "Error unsetting expiration date" : "Σφάλμα κατά την διαγραφή της ημ. λήξης", - "Error setting expiration date" : "Σφάλμα κατά τον ορισμό ημ. λήξης", - "Sending ..." : "Αποστολή...", - "Email sent" : "Το Email απεστάλη ", + "access control" : "έλεγχος πρόσβασης", + "An error occured. Please try again" : "Ένα σφάλμα προέκυψε. Παρακαλώ προσπαθήστε ξανά", + "Share" : "Διαμοιρασμός", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Διαμοιρασμός με άτομα σε άλλα ownClouds χρησιμοποιώντας την σύνταξη username@example.com/owncloud", + "Share with users or groups …" : "Διαμοιρασμός με χρήστες ή ομάδες ...", + "Share with users, groups or remote users …" : "Διαμοιρασμός με χρήστες, ομάδες ή απομακρυσμένους χρήστες ...", "Warning" : "Προειδοποίηση", "The object type is not specified." : "Δεν καθορίστηκε ο τύπος του αντικειμένου.", "Enter new" : "Εισαγωγή νέου", diff --git a/core/l10n/en_GB.js b/core/l10n/en_GB.js index e3760b6f2bc..ced4272c1d8 100644 --- a/core/l10n/en_GB.js +++ b/core/l10n/en_GB.js @@ -100,14 +100,15 @@ OC.L10N.register( "Error while sharing" : "Error whilst sharing", "Error while unsharing" : "Error whilst unsharing", "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 users or groups …" : "Share with users or groups …", - "Share with users, groups or remote users …" : "Share with users, groups or remote users …", - "Share" : "Share", - "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", + "Error setting expiration date" : "Error setting expiration date", "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", + "Set expiration date" : "Set expiration date", + "Expiration" : "Expiration", + "Expiration date" : "Expiration date", + "Sending ..." : "Sending ...", + "Email sent" : "Email sent", + "Resharing is not allowed" : "Resharing is not allowed", + "Share link" : "Share link", "Link" : "Link", "Password protect" : "Password protect", "Password" : "Password", @@ -115,28 +116,24 @@ OC.L10N.register( "Allow editing" : "Allow editing", "Email link to person" : "Email link to person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Shared in {item} with {user}", "group" : "group", "remote" : "remote", - "Resharing is not allowed" : "Resharing is not allowed", - "Shared in {item} with {user}" : "Shared in {item} with {user}", - "Unshare" : "Unshare", "notify by email" : "notify by email", + "Unshare" : "Unshare", "can share" : "can share", "can edit" : "can edit", - "access control" : "access control", "create" : "create", "change" : "change", "delete" : "delete", - "Password protected" : "Password protected", - "Error unsetting expiration date" : "Error unsetting expiration date", - "Error setting expiration date" : "Error setting expiration date", - "Sending ..." : "Sending ...", - "Email sent" : "Email sent", + "access control" : "access control", + "An error occured. Please try again" : "An error occured. Please try again", + "Share" : "Share", + "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 with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", "Warning" : "Warning", "The object type is not specified." : "The object type is not specified.", "Enter new" : "Enter new", @@ -230,6 +227,7 @@ OC.L10N.register( "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.", + "Log in" : "Log in", "remember" : "remember", "Alternative Logins" : "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>" : "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>", diff --git a/core/l10n/en_GB.json b/core/l10n/en_GB.json index 4c76d47111e..7bea74e4359 100644 --- a/core/l10n/en_GB.json +++ b/core/l10n/en_GB.json @@ -98,14 +98,15 @@ "Error while sharing" : "Error whilst sharing", "Error while unsharing" : "Error whilst unsharing", "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 users or groups …" : "Share with users or groups …", - "Share with users, groups or remote users …" : "Share with users, groups or remote users …", - "Share" : "Share", - "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", + "Error setting expiration date" : "Error setting expiration date", "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", + "Set expiration date" : "Set expiration date", + "Expiration" : "Expiration", + "Expiration date" : "Expiration date", + "Sending ..." : "Sending ...", + "Email sent" : "Email sent", + "Resharing is not allowed" : "Resharing is not allowed", + "Share link" : "Share link", "Link" : "Link", "Password protect" : "Password protect", "Password" : "Password", @@ -113,28 +114,24 @@ "Allow editing" : "Allow editing", "Email link to person" : "Email link to person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Shared in {item} with {user}", "group" : "group", "remote" : "remote", - "Resharing is not allowed" : "Resharing is not allowed", - "Shared in {item} with {user}" : "Shared in {item} with {user}", - "Unshare" : "Unshare", "notify by email" : "notify by email", + "Unshare" : "Unshare", "can share" : "can share", "can edit" : "can edit", - "access control" : "access control", "create" : "create", "change" : "change", "delete" : "delete", - "Password protected" : "Password protected", - "Error unsetting expiration date" : "Error unsetting expiration date", - "Error setting expiration date" : "Error setting expiration date", - "Sending ..." : "Sending ...", - "Email sent" : "Email sent", + "access control" : "access control", + "An error occured. Please try again" : "An error occured. Please try again", + "Share" : "Share", + "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 with users or groups …" : "Share with users or groups …", + "Share with users, groups or remote users …" : "Share with users, groups or remote users …", "Warning" : "Warning", "The object type is not specified." : "The object type is not specified.", "Enter new" : "Enter new", @@ -228,6 +225,7 @@ "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.", + "Log in" : "Log in", "remember" : "remember", "Alternative Logins" : "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>" : "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>", diff --git a/core/l10n/eo.js b/core/l10n/eo.js index eee2a354958..8ecd740bc7e 100644 --- a/core/l10n/eo.js +++ b/core/l10n/eo.js @@ -66,32 +66,30 @@ OC.L10N.register( "Error while sharing" : "Eraro dum kunhavigo", "Error while unsharing" : "Eraro dum malkunhavigo", "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" : "Kunhavigi", + "Error setting expiration date" : "Eraro dum agordado de limdato", + "Set expiration date" : "Agordi limdaton", + "Expiration" : "Eksvalidiĝo", + "Expiration date" : "Limdato", + "Sending ..." : "Sendante...", + "Email sent" : "La retpoŝtaĵo sendiĝis", + "Resharing is not allowed" : "Rekunhavigo ne permesatas", "Share link" : "Konhavigi ligilon", "Password protect" : "Protekti per pasvorto", "Password" : "Pasvorto", "Email link to person" : "Retpoŝti la ligilon al ulo", "Send" : "Sendi", - "Set expiration date" : "Agordi limdaton", - "Expiration" : "Eksvalidiĝo", - "Expiration date" : "Limdato", - "group" : "grupo", - "Resharing is not allowed" : "Rekunhavigo ne permesatas", + "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}", "Shared in {item} with {user}" : "Kunhavigita en {item} kun {user}", - "Unshare" : "Malkunhavigi", + "group" : "grupo", "notify by email" : "avizi per retpoŝto", + "Unshare" : "Malkunhavigi", "can share" : "kunhavebla", "can edit" : "povas redakti", - "access control" : "alirkontrolo", "create" : "krei", "delete" : "forigi", - "Password protected" : "Protektita per pasvorto", - "Error unsetting expiration date" : "Eraro dum malagordado de limdato", - "Error setting expiration date" : "Eraro dum agordado de limdato", - "Sending ..." : "Sendante...", - "Email sent" : "La retpoŝtaĵo sendiĝis", + "access control" : "alirkontrolo", + "Share" : "Kunhavigi", "Warning" : "Averto", "The object type is not specified." : "Ne indikiĝis tipo de la objekto.", "Enter new" : "Enigu novan", diff --git a/core/l10n/eo.json b/core/l10n/eo.json index fb1ad500032..ddce56a528d 100644 --- a/core/l10n/eo.json +++ b/core/l10n/eo.json @@ -64,32 +64,30 @@ "Error while sharing" : "Eraro dum kunhavigo", "Error while unsharing" : "Eraro dum malkunhavigo", "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" : "Kunhavigi", + "Error setting expiration date" : "Eraro dum agordado de limdato", + "Set expiration date" : "Agordi limdaton", + "Expiration" : "Eksvalidiĝo", + "Expiration date" : "Limdato", + "Sending ..." : "Sendante...", + "Email sent" : "La retpoŝtaĵo sendiĝis", + "Resharing is not allowed" : "Rekunhavigo ne permesatas", "Share link" : "Konhavigi ligilon", "Password protect" : "Protekti per pasvorto", "Password" : "Pasvorto", "Email link to person" : "Retpoŝti la ligilon al ulo", "Send" : "Sendi", - "Set expiration date" : "Agordi limdaton", - "Expiration" : "Eksvalidiĝo", - "Expiration date" : "Limdato", - "group" : "grupo", - "Resharing is not allowed" : "Rekunhavigo ne permesatas", + "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}", "Shared in {item} with {user}" : "Kunhavigita en {item} kun {user}", - "Unshare" : "Malkunhavigi", + "group" : "grupo", "notify by email" : "avizi per retpoŝto", + "Unshare" : "Malkunhavigi", "can share" : "kunhavebla", "can edit" : "povas redakti", - "access control" : "alirkontrolo", "create" : "krei", "delete" : "forigi", - "Password protected" : "Protektita per pasvorto", - "Error unsetting expiration date" : "Eraro dum malagordado de limdato", - "Error setting expiration date" : "Eraro dum agordado de limdato", - "Sending ..." : "Sendante...", - "Email sent" : "La retpoŝtaĵo sendiĝis", + "access control" : "alirkontrolo", + "Share" : "Kunhavigi", "Warning" : "Averto", "The object type is not specified." : "Ne indikiĝis tipo de la objekto.", "Enter new" : "Enigu novan", diff --git a/core/l10n/es.js b/core/l10n/es.js index d525319995a..ea606905e7d 100644 --- a/core/l10n/es.js +++ b/core/l10n/es.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error al dejar de compartir", "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 users or groups …" : "Compartir con usuarios o grupos ...", - "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos...", - "Share" : "Compartir", - "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", + "Error setting expiration date" : "Error estableciendo fecha de caducidad", "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ó", + "Set expiration date" : "Establecer fecha de caducidad", + "Expiration" : "Expira en:", + "Expiration date" : "Fecha de caducidad", + "Sending ..." : "Enviando...", + "Email sent" : "Correo electrónico enviado", + "Resharing is not allowed" : "No se permite compartir de nuevo", + "Share link" : "Enlace compartido", "Link" : "Enlace", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Permitir edición", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartido en {item} con {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "No se permite compartir de nuevo", - "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", "notify by email" : "notificar por correo electrónico", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "puede editar", - "access control" : "control de acceso", "create" : "crear", "change" : "cambio", "delete" : "eliminar", - "Password protected" : "Protegido con contraseña", - "Error unsetting expiration date" : "Error eliminando fecha de caducidad", - "Error setting expiration date" : "Error estableciendo fecha de caducidad", - "Sending ..." : "Enviando...", - "Email sent" : "Correo electrónico enviado", + "access control" : "control de acceso", + "An error occured. Please try again" : "Un error ocurrió. Por favor reinténtelo nuevamente.", + "Share" : "Compartir", + "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 with users or groups …" : "Compartir con usuarios o grupos ...", + "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos...", "Warning" : "Precaución", "The object type is not specified." : "El tipo de objeto no está especificado.", "Enter new" : "Ingresar nueva", @@ -248,6 +245,7 @@ OC.L10N.register( "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.", + "Log in" : "Ingresar", "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?", "remember" : "recordar", "Alternative Logins" : "Inicios de sesión alternativos", diff --git a/core/l10n/es.json b/core/l10n/es.json index 6deffb731fb..ec5b80a3e82 100644 --- a/core/l10n/es.json +++ b/core/l10n/es.json @@ -114,14 +114,15 @@ "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error al dejar de compartir", "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 users or groups …" : "Compartir con usuarios o grupos ...", - "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos...", - "Share" : "Compartir", - "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", + "Error setting expiration date" : "Error estableciendo fecha de caducidad", "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ó", + "Set expiration date" : "Establecer fecha de caducidad", + "Expiration" : "Expira en:", + "Expiration date" : "Fecha de caducidad", + "Sending ..." : "Enviando...", + "Email sent" : "Correo electrónico enviado", + "Resharing is not allowed" : "No se permite compartir de nuevo", + "Share link" : "Enlace compartido", "Link" : "Enlace", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", @@ -129,28 +130,24 @@ "Allow editing" : "Permitir edición", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartido en {item} con {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "No se permite compartir de nuevo", - "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", "notify by email" : "notificar por correo electrónico", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "puede editar", - "access control" : "control de acceso", "create" : "crear", "change" : "cambio", "delete" : "eliminar", - "Password protected" : "Protegido con contraseña", - "Error unsetting expiration date" : "Error eliminando fecha de caducidad", - "Error setting expiration date" : "Error estableciendo fecha de caducidad", - "Sending ..." : "Enviando...", - "Email sent" : "Correo electrónico enviado", + "access control" : "control de acceso", + "An error occured. Please try again" : "Un error ocurrió. Por favor reinténtelo nuevamente.", + "Share" : "Compartir", + "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 with users or groups …" : "Compartir con usuarios o grupos ...", + "Share with users, groups or remote users …" : "Comparte con usuarios, grupos o usuarios remotos...", "Warning" : "Precaución", "The object type is not specified." : "El tipo de objeto no está especificado.", "Enter new" : "Ingresar nueva", @@ -246,6 +243,7 @@ "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.", + "Log in" : "Ingresar", "Wrong password. Reset it?" : "Contraseña incorrecta. ¿Restablecerla?", "remember" : "recordar", "Alternative Logins" : "Inicios de sesión alternativos", diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js index bddadc44c1a..0a82908e2ee 100644 --- a/core/l10n/es_AR.js +++ b/core/l10n/es_AR.js @@ -76,32 +76,30 @@ OC.L10N.register( "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error en al dejar de compartir", "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" : "Compartir", + "Error setting expiration date" : "Error al asignar fecha de vencimiento", + "Set expiration date" : "Asignar fecha de vencimiento", + "Expiration" : "Vencimiento", + "Expiration date" : "Fecha de vencimiento", + "Sending ..." : "Mandando...", + "Email sent" : "e-mail mandado", + "Resharing is not allowed" : "No se permite volver a compartir", "Share link" : "Compartir vínculo", "Password protect" : "Proteger con contraseña ", "Password" : "Contraseña", "Email link to person" : "Enviar el enlace por e-mail.", "Send" : "Mandar", - "Set expiration date" : "Asignar fecha de vencimiento", - "Expiration" : "Vencimiento", - "Expiration date" : "Fecha de vencimiento", - "group" : "grupo", - "Resharing is not allowed" : "No se permite volver a compartir", + "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}", "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", + "group" : "grupo", "notify by email" : "notificar por correo", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "podés editar", - "access control" : "control de acceso", "create" : "crear", "delete" : "borrar", - "Password protected" : "Protegido por contraseña", - "Error unsetting expiration date" : "Error al remover la fecha de vencimiento", - "Error setting expiration date" : "Error al asignar fecha de vencimiento", - "Sending ..." : "Mandando...", - "Email sent" : "e-mail mandado", + "access control" : "control de acceso", + "Share" : "Compartir", "Warning" : "Atención", "The object type is not specified." : "El tipo de objeto no está especificado. ", "Enter new" : "Entrar nuevo", diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json index 93a5b815740..804167f4af4 100644 --- a/core/l10n/es_AR.json +++ b/core/l10n/es_AR.json @@ -74,32 +74,30 @@ "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error en al dejar de compartir", "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" : "Compartir", + "Error setting expiration date" : "Error al asignar fecha de vencimiento", + "Set expiration date" : "Asignar fecha de vencimiento", + "Expiration" : "Vencimiento", + "Expiration date" : "Fecha de vencimiento", + "Sending ..." : "Mandando...", + "Email sent" : "e-mail mandado", + "Resharing is not allowed" : "No se permite volver a compartir", "Share link" : "Compartir vínculo", "Password protect" : "Proteger con contraseña ", "Password" : "Contraseña", "Email link to person" : "Enviar el enlace por e-mail.", "Send" : "Mandar", - "Set expiration date" : "Asignar fecha de vencimiento", - "Expiration" : "Vencimiento", - "Expiration date" : "Fecha de vencimiento", - "group" : "grupo", - "Resharing is not allowed" : "No se permite volver a compartir", + "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}", "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", + "group" : "grupo", "notify by email" : "notificar por correo", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "podés editar", - "access control" : "control de acceso", "create" : "crear", "delete" : "borrar", - "Password protected" : "Protegido por contraseña", - "Error unsetting expiration date" : "Error al remover la fecha de vencimiento", - "Error setting expiration date" : "Error al asignar fecha de vencimiento", - "Sending ..." : "Mandando...", - "Email sent" : "e-mail mandado", + "access control" : "control de acceso", + "Share" : "Compartir", "Warning" : "Atención", "The object type is not specified." : "El tipo de objeto no está especificado. ", "Enter new" : "Entrar nuevo", diff --git a/core/l10n/es_CL.js b/core/l10n/es_CL.js index 3558448c964..23e151199a7 100644 --- a/core/l10n/es_CL.js +++ b/core/l10n/es_CL.js @@ -33,8 +33,8 @@ OC.L10N.register( "Error while sharing" : "Ocurrió un error mientras compartía", "Error while unsharing" : "Ocurrió un error mientras dejaba de compartir", "Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos", - "Share" : "Compartir", "Password" : "Clave", + "Share" : "Compartir", "The object type is not specified." : "El tipo de objeto no está especificado.", "Personal" : "Personal", "Users" : "Usuarios", diff --git a/core/l10n/es_CL.json b/core/l10n/es_CL.json index d1fc84c7e34..dd7bb617e64 100644 --- a/core/l10n/es_CL.json +++ b/core/l10n/es_CL.json @@ -31,8 +31,8 @@ "Error while sharing" : "Ocurrió un error mientras compartía", "Error while unsharing" : "Ocurrió un error mientras dejaba de compartir", "Error while changing permissions" : "Ocurrió un error mientras se cambiaban los permisos", - "Share" : "Compartir", "Password" : "Clave", + "Share" : "Compartir", "The object type is not specified." : "El tipo de objeto no está especificado.", "Personal" : "Personal", "Users" : "Usuarios", diff --git a/core/l10n/es_MX.js b/core/l10n/es_MX.js index 7c4ca4a2d61..81113221e66 100644 --- a/core/l10n/es_MX.js +++ b/core/l10n/es_MX.js @@ -70,32 +70,30 @@ OC.L10N.register( "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error al dejar de compartir", "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" : "Compartir", + "Error setting expiration date" : "Error estableciendo fecha de caducidad", + "Set expiration date" : "Establecer fecha de caducidad", + "Expiration" : "Caducidad", + "Expiration date" : "Fecha de caducidad", + "Sending ..." : "Enviando...", + "Email sent" : "Correo electrónico enviado", + "Resharing is not allowed" : "No se permite compartir de nuevo", "Share link" : "Enlace compartido", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", - "Set expiration date" : "Establecer fecha de caducidad", - "Expiration" : "Caducidad", - "Expiration date" : "Fecha de caducidad", - "group" : "grupo", - "Resharing is not allowed" : "No se permite compartir de nuevo", + "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}", "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", + "group" : "grupo", "notify by email" : "notificar al usuario por correo electrónico", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "puede editar", - "access control" : "control de acceso", "create" : "crear", "delete" : "eliminar", - "Password protected" : "Protegido con contraseña", - "Error unsetting expiration date" : "Error eliminando fecha de caducidad", - "Error setting expiration date" : "Error estableciendo fecha de caducidad", - "Sending ..." : "Enviando...", - "Email sent" : "Correo electrónico enviado", + "access control" : "control de acceso", + "Share" : "Compartir", "Warning" : "Precaución", "The object type is not specified." : "El tipo de objeto no está especificado.", "Enter new" : "Ingresar nueva", @@ -143,6 +141,7 @@ OC.L10N.register( "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", "Please contact your administrator." : "Por favor, contacte con el administrador.", + "Log in" : "Entrar", "remember" : "recordar", "Alternative Logins" : "Accesos Alternativos", "This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.", diff --git a/core/l10n/es_MX.json b/core/l10n/es_MX.json index 45b55e8f283..978274222fe 100644 --- a/core/l10n/es_MX.json +++ b/core/l10n/es_MX.json @@ -68,32 +68,30 @@ "Error while sharing" : "Error al compartir", "Error while unsharing" : "Error al dejar de compartir", "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" : "Compartir", + "Error setting expiration date" : "Error estableciendo fecha de caducidad", + "Set expiration date" : "Establecer fecha de caducidad", + "Expiration" : "Caducidad", + "Expiration date" : "Fecha de caducidad", + "Sending ..." : "Enviando...", + "Email sent" : "Correo electrónico enviado", + "Resharing is not allowed" : "No se permite compartir de nuevo", "Share link" : "Enlace compartido", "Password protect" : "Protección con contraseña", "Password" : "Contraseña", "Email link to person" : "Enviar enlace por correo electrónico a una persona", "Send" : "Enviar", - "Set expiration date" : "Establecer fecha de caducidad", - "Expiration" : "Caducidad", - "Expiration date" : "Fecha de caducidad", - "group" : "grupo", - "Resharing is not allowed" : "No se permite compartir de nuevo", + "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}", "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Dejar de compartir", + "group" : "grupo", "notify by email" : "notificar al usuario por correo electrónico", + "Unshare" : "Dejar de compartir", "can share" : "puede compartir", "can edit" : "puede editar", - "access control" : "control de acceso", "create" : "crear", "delete" : "eliminar", - "Password protected" : "Protegido con contraseña", - "Error unsetting expiration date" : "Error eliminando fecha de caducidad", - "Error setting expiration date" : "Error estableciendo fecha de caducidad", - "Sending ..." : "Enviando...", - "Email sent" : "Correo electrónico enviado", + "access control" : "control de acceso", + "Share" : "Compartir", "Warning" : "Precaución", "The object type is not specified." : "El tipo de objeto no está especificado.", "Enter new" : "Ingresar nueva", @@ -141,6 +139,7 @@ "Search" : "Buscar", "Server side authentication failed!" : "La autenticación a fallado en el servidor.", "Please contact your administrator." : "Por favor, contacte con el administrador.", + "Log in" : "Entrar", "remember" : "recordar", "Alternative Logins" : "Accesos Alternativos", "This ownCloud instance is currently in single user mode." : "Esta instalación de ownCloud se encuentra en modo de usuario único.", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index 7395970563e..1c49deff6ca 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -105,13 +105,15 @@ OC.L10N.register( "Error while sharing" : "Viga jagamisel", "Error while unsharing" : "Viga jagamise lõpetamisel", "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 users or groups …" : "Jaga kasutajate või gruppidega ...", - "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", - "Share" : "Jaga", - "Share link" : "Jaga linki", + "Error setting expiration date" : "Viga aegumise kuupäeva määramisel", "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", + "Set expiration date" : "Määra aegumise kuupäev", + "Expiration" : "Aegumine", + "Expiration date" : "Aegumise kuupäev", + "Sending ..." : "Saatmine ...", + "Email sent" : "E-kiri on saadetud", + "Resharing is not allowed" : "Edasijagamine pole lubatud", + "Share link" : "Jaga linki", "Link" : "Link", "Password protect" : "Parooliga kaitstud", "Password" : "Parool", @@ -119,27 +121,22 @@ OC.L10N.register( "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", + "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt", + "Shared with you by {owner}" : "Sinuga jagas {owner}", "Shared in {item} with {user}" : "Jagatud {item} kasutajaga {user}", - "Unshare" : "Lõpeta jagamine", + "group" : "grupp", "notify by email" : "teavita e-postiga", + "Unshare" : "Lõpeta jagamine", "can share" : "saab jagada", "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", - "Error setting expiration date" : "Viga aegumise kuupäeva määramisel", - "Sending ..." : "Saatmine ...", - "Email sent" : "E-kiri on saadetud", + "access control" : "ligipääsukontroll", + "An error occured. Please try again" : "Tekkis tõrge. Palun proovi uuesti", + "Share" : "Jaga", + "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 ...", "Warning" : "Hoiatus", "The object type is not specified." : "Objekti tüüp pole määratletud.", "Enter new" : "Sisesta uus", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index 43a04a5ddce..9e11b84d86e 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -103,13 +103,15 @@ "Error while sharing" : "Viga jagamisel", "Error while unsharing" : "Viga jagamise lõpetamisel", "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 users or groups …" : "Jaga kasutajate või gruppidega ...", - "Share with users, groups or remote users …" : "Jaga kasutajate, gruppide või eemal olevate kasutajatega ...", - "Share" : "Jaga", - "Share link" : "Jaga linki", + "Error setting expiration date" : "Viga aegumise kuupäeva määramisel", "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", + "Set expiration date" : "Määra aegumise kuupäev", + "Expiration" : "Aegumine", + "Expiration date" : "Aegumise kuupäev", + "Sending ..." : "Saatmine ...", + "Email sent" : "E-kiri on saadetud", + "Resharing is not allowed" : "Edasijagamine pole lubatud", + "Share link" : "Jaga linki", "Link" : "Link", "Password protect" : "Parooliga kaitstud", "Password" : "Parool", @@ -117,27 +119,22 @@ "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", + "Shared with you and the group {group} by {owner}" : "Jagatud sinu ja {group} grupiga {owner} poolt", + "Shared with you by {owner}" : "Sinuga jagas {owner}", "Shared in {item} with {user}" : "Jagatud {item} kasutajaga {user}", - "Unshare" : "Lõpeta jagamine", + "group" : "grupp", "notify by email" : "teavita e-postiga", + "Unshare" : "Lõpeta jagamine", "can share" : "saab jagada", "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", - "Error setting expiration date" : "Viga aegumise kuupäeva määramisel", - "Sending ..." : "Saatmine ...", - "Email sent" : "E-kiri on saadetud", + "access control" : "ligipääsukontroll", + "An error occured. Please try again" : "Tekkis tõrge. Palun proovi uuesti", + "Share" : "Jaga", + "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 ...", "Warning" : "Hoiatus", "The object type is not specified." : "Objekti tüüp pole määratletud.", "Enter new" : "Sisesta uus", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index 88b75072356..a0d4650a4ae 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -88,11 +88,15 @@ OC.L10N.register( "Error while sharing" : "Errore bat egon da elkarbanatzean", "Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean", "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" : "Elkarbanatu", - "Share link" : "Elkarbanatu lotura", + "Error setting expiration date" : "Errore bat egon da muga data ezartzean", "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.", + "Set expiration date" : "Ezarri muga data", + "Expiration" : "Iraungitzea", + "Expiration date" : "Muga data", + "Sending ..." : "Bidaltzen ...", + "Email sent" : "Eposta bidalia", + "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", + "Share link" : "Elkarbanatu lotura", "Link" : "Esteka", "Password protect" : "Babestu pasahitzarekin", "Password" : "Pasahitza", @@ -100,27 +104,20 @@ OC.L10N.register( "Allow editing" : "Baimendu editatzea", "Email link to person" : "Postaz bidali lotura ", "Send" : "Bidali", - "Set expiration date" : "Ezarri muga data", - "Expiration" : "Iraungitzea", - "Expiration date" : "Muga data", - "Adding user..." : "Erabiltzailea gehitzen...", + "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", + "Shared in {item} with {user}" : "{user}ekin {item}-n elkarbanatuta", "group" : "taldea", "remote" : "urrunekoa", - "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", - "Shared in {item} with {user}" : "{user}ekin {item}-n elkarbanatuta", - "Unshare" : "Ez elkarbanatu", "notify by email" : "jakinarazi eposta bidez", + "Unshare" : "Ez elkarbanatu", "can share" : "elkarbana dezake", "can edit" : "editatu dezake", - "access control" : "sarrera kontrola", "create" : "sortu", "change" : "aldatu", "delete" : "ezabatu", - "Password protected" : "Pasahitzarekin babestuta", - "Error unsetting expiration date" : "Errorea izan da muga data kentzean", - "Error setting expiration date" : "Errore bat egon da muga data ezartzean", - "Sending ..." : "Bidaltzen ...", - "Email sent" : "Eposta bidalia", + "access control" : "sarrera kontrola", + "Share" : "Elkarbanatu", "Warning" : "Abisua", "The object type is not specified." : "Objetu mota ez dago zehaztuta.", "Enter new" : "Sartu berria", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index 51143f24767..e4ccdd8584c 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -86,11 +86,15 @@ "Error while sharing" : "Errore bat egon da elkarbanatzean", "Error while unsharing" : "Errore bat egon da elkarbanaketa desegitean", "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" : "Elkarbanatu", - "Share link" : "Elkarbanatu lotura", + "Error setting expiration date" : "Errore bat egon da muga data ezartzean", "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.", + "Set expiration date" : "Ezarri muga data", + "Expiration" : "Iraungitzea", + "Expiration date" : "Muga data", + "Sending ..." : "Bidaltzen ...", + "Email sent" : "Eposta bidalia", + "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", + "Share link" : "Elkarbanatu lotura", "Link" : "Esteka", "Password protect" : "Babestu pasahitzarekin", "Password" : "Pasahitza", @@ -98,27 +102,20 @@ "Allow editing" : "Baimendu editatzea", "Email link to person" : "Postaz bidali lotura ", "Send" : "Bidali", - "Set expiration date" : "Ezarri muga data", - "Expiration" : "Iraungitzea", - "Expiration date" : "Muga data", - "Adding user..." : "Erabiltzailea gehitzen...", + "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", + "Shared in {item} with {user}" : "{user}ekin {item}-n elkarbanatuta", "group" : "taldea", "remote" : "urrunekoa", - "Resharing is not allowed" : "Berriz elkarbanatzea ez dago baimendua", - "Shared in {item} with {user}" : "{user}ekin {item}-n elkarbanatuta", - "Unshare" : "Ez elkarbanatu", "notify by email" : "jakinarazi eposta bidez", + "Unshare" : "Ez elkarbanatu", "can share" : "elkarbana dezake", "can edit" : "editatu dezake", - "access control" : "sarrera kontrola", "create" : "sortu", "change" : "aldatu", "delete" : "ezabatu", - "Password protected" : "Pasahitzarekin babestuta", - "Error unsetting expiration date" : "Errorea izan da muga data kentzean", - "Error setting expiration date" : "Errore bat egon da muga data ezartzean", - "Sending ..." : "Bidaltzen ...", - "Email sent" : "Eposta bidalia", + "access control" : "sarrera kontrola", + "Share" : "Elkarbanatu", "Warning" : "Abisua", "The object type is not specified." : "Objetu mota ez dago zehaztuta.", "Enter new" : "Sartu berria", diff --git a/core/l10n/fa.js b/core/l10n/fa.js index 12bdd37eaba..b7312046777 100644 --- a/core/l10n/fa.js +++ b/core/l10n/fa.js @@ -79,32 +79,30 @@ OC.L10N.register( "Error while sharing" : "خطا درحال به اشتراک گذاشتن", "Error while unsharing" : "خطا درحال لغو اشتراک", "Error while changing permissions" : "خطا در حال تغییر مجوز", - "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", - "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", - "Share" : "اشتراکگذاری", + "Error setting expiration date" : "خطا در تنظیم تاریخ انقضا", + "Set expiration date" : "تنظیم تاریخ انقضا", + "Expiration" : "تاریخ انقضا", + "Expiration date" : "تاریخ انقضا", + "Sending ..." : "درحال ارسال ...", + "Email sent" : "ایمیل ارسال شد", + "Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد", "Share link" : "اشتراک گذاشتن لینک", "Password protect" : "نگهداری کردن رمز عبور", "Password" : "گذرواژه", "Email link to person" : "پیوند ایمیل برای شخص.", "Send" : "ارسال", - "Set expiration date" : "تنظیم تاریخ انقضا", - "Expiration" : "تاریخ انقضا", - "Expiration date" : "تاریخ انقضا", - "group" : "گروه", - "Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد", + "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", + "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", "Shared in {item} with {user}" : "به اشتراک گذاشته شده در {بخش} با {کاربر}", - "Unshare" : "لغو اشتراک", + "group" : "گروه", "notify by email" : "دریافت هشدار از طریق ایمیل", + "Unshare" : "لغو اشتراک", "can share" : "قابل به اشتراک گذاری", "can edit" : "می توان ویرایش کرد", - "access control" : "کنترل دسترسی", "create" : "ایجاد", "delete" : "پاک کردن", - "Password protected" : "نگهداری از رمز عبور", - "Error unsetting expiration date" : "خطا در تنظیم نکردن تاریخ انقضا ", - "Error setting expiration date" : "خطا در تنظیم تاریخ انقضا", - "Sending ..." : "درحال ارسال ...", - "Email sent" : "ایمیل ارسال شد", + "access control" : "کنترل دسترسی", + "Share" : "اشتراکگذاری", "Warning" : "اخطار", "The object type is not specified." : "نوع شی تعیین نشده است.", "Enter new" : "مورد جدید را وارد کنید", @@ -145,6 +143,7 @@ OC.L10N.register( "Finishing …" : "در حال اتمام ...", "Log out" : "خروج", "Search" : "جستوجو", + "Log in" : "ورود", "remember" : "بیاد آوری", "Alternative Logins" : "ورود متناوب", "Thank you for your patience." : "از صبر شما متشکریم", diff --git a/core/l10n/fa.json b/core/l10n/fa.json index 22a8e2eb0f5..5ec3ad5ee0e 100644 --- a/core/l10n/fa.json +++ b/core/l10n/fa.json @@ -77,32 +77,30 @@ "Error while sharing" : "خطا درحال به اشتراک گذاشتن", "Error while unsharing" : "خطا درحال لغو اشتراک", "Error while changing permissions" : "خطا در حال تغییر مجوز", - "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", - "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", - "Share" : "اشتراکگذاری", + "Error setting expiration date" : "خطا در تنظیم تاریخ انقضا", + "Set expiration date" : "تنظیم تاریخ انقضا", + "Expiration" : "تاریخ انقضا", + "Expiration date" : "تاریخ انقضا", + "Sending ..." : "درحال ارسال ...", + "Email sent" : "ایمیل ارسال شد", + "Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد", "Share link" : "اشتراک گذاشتن لینک", "Password protect" : "نگهداری کردن رمز عبور", "Password" : "گذرواژه", "Email link to person" : "پیوند ایمیل برای شخص.", "Send" : "ارسال", - "Set expiration date" : "تنظیم تاریخ انقضا", - "Expiration" : "تاریخ انقضا", - "Expiration date" : "تاریخ انقضا", - "group" : "گروه", - "Resharing is not allowed" : "اشتراک گذاری مجدد مجاز نمی باشد", + "Shared with you and the group {group} by {owner}" : "به اشتراک گذاشته شده با شما و گروه {گروه} توسط {دارنده}", + "Shared with you by {owner}" : "به اشتراک گذاشته شده با شما توسط { دارنده}", "Shared in {item} with {user}" : "به اشتراک گذاشته شده در {بخش} با {کاربر}", - "Unshare" : "لغو اشتراک", + "group" : "گروه", "notify by email" : "دریافت هشدار از طریق ایمیل", + "Unshare" : "لغو اشتراک", "can share" : "قابل به اشتراک گذاری", "can edit" : "می توان ویرایش کرد", - "access control" : "کنترل دسترسی", "create" : "ایجاد", "delete" : "پاک کردن", - "Password protected" : "نگهداری از رمز عبور", - "Error unsetting expiration date" : "خطا در تنظیم نکردن تاریخ انقضا ", - "Error setting expiration date" : "خطا در تنظیم تاریخ انقضا", - "Sending ..." : "درحال ارسال ...", - "Email sent" : "ایمیل ارسال شد", + "access control" : "کنترل دسترسی", + "Share" : "اشتراکگذاری", "Warning" : "اخطار", "The object type is not specified." : "نوع شی تعیین نشده است.", "Enter new" : "مورد جدید را وارد کنید", @@ -143,6 +141,7 @@ "Finishing …" : "در حال اتمام ...", "Log out" : "خروج", "Search" : "جستوجو", + "Log in" : "ورود", "remember" : "بیاد آوری", "Alternative Logins" : "ورود متناوب", "Thank you for your patience." : "از صبر شما متشکریم", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index 2c3c3c49617..826305c9b5a 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Virhe jaettaessa", "Error while unsharing" : "Virhe jakoa peruttaessa", "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 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" : "Jaa", - "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", + "Error setting expiration date" : "Virhe päättymispäivää asettaessa", "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", + "Set expiration date" : "Aseta päättymispäivä", + "Expiration" : "Erääntyminen", + "Expiration date" : "Päättymispäivä", + "Sending ..." : "Lähetetään...", + "Email sent" : "Sähköposti lähetetty", + "Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu", + "Share link" : "Jaa linkki", "Link" : "Linkki", "Password protect" : "Suojaa salasanalla", "Password" : "Salasana", @@ -131,29 +132,27 @@ OC.L10N.register( "Allow editing" : "Salli muokkaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", - "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ä...", + "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", + "Shared in {item} with {user}" : "{item} on jaettu {user} kanssa", "group" : "ryhmä", "remote" : "etä", - "Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu", - "Shared in {item} with {user}" : "{item} on jaettu {user} kanssa", - "Unshare" : "Peru jakaminen", "notify by email" : "ilmoita sähköpostitse", + "Unshare" : "Peru jakaminen", "can share" : "jaa", "can edit" : "voi muokata", - "access control" : "Pääsyn hallinta", "create" : "luo", "change" : "muuta", "delete" : "poista", - "Password protected" : "Salasanasuojattu", - "Error unsetting expiration date" : "Virhe purettaessa eräpäivää", - "Error setting expiration date" : "Virhe päättymispäivää asettaessa", - "Sending ..." : "Lähetetään...", - "Email sent" : "Sähköposti lähetetty", + "access control" : "Pääsyn hallinta", + "Share details could not be loaded for this item." : "Tämän kohteen jakamistietoja ei voitu ladata.", + "An error occured. Please try again" : "Tapahtui virhe. Yritä myöhemmin uudestaan", + "Share" : "Jaa", + "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 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…", "Warning" : "Varoitus", + "Error while sending notification" : "Virhe ilmoitusta lähettäessä", "The object type is not specified." : "The object type is not specified.", "Enter new" : "Kirjoita uusi", "Delete" : "Poista", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index e0ac2410747..c8a37ae2ef1 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -114,14 +114,15 @@ "Error while sharing" : "Virhe jaettaessa", "Error while unsharing" : "Virhe jakoa peruttaessa", "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 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" : "Jaa", - "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", + "Error setting expiration date" : "Virhe päättymispäivää asettaessa", "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", + "Set expiration date" : "Aseta päättymispäivä", + "Expiration" : "Erääntyminen", + "Expiration date" : "Päättymispäivä", + "Sending ..." : "Lähetetään...", + "Email sent" : "Sähköposti lähetetty", + "Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu", + "Share link" : "Jaa linkki", "Link" : "Linkki", "Password protect" : "Suojaa salasanalla", "Password" : "Salasana", @@ -129,29 +130,27 @@ "Allow editing" : "Salli muokkaus", "Email link to person" : "Lähetä linkki sähköpostitse", "Send" : "Lähetä", - "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ä...", + "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", + "Shared in {item} with {user}" : "{item} on jaettu {user} kanssa", "group" : "ryhmä", "remote" : "etä", - "Resharing is not allowed" : "Jakaminen uudelleen ei ole salittu", - "Shared in {item} with {user}" : "{item} on jaettu {user} kanssa", - "Unshare" : "Peru jakaminen", "notify by email" : "ilmoita sähköpostitse", + "Unshare" : "Peru jakaminen", "can share" : "jaa", "can edit" : "voi muokata", - "access control" : "Pääsyn hallinta", "create" : "luo", "change" : "muuta", "delete" : "poista", - "Password protected" : "Salasanasuojattu", - "Error unsetting expiration date" : "Virhe purettaessa eräpäivää", - "Error setting expiration date" : "Virhe päättymispäivää asettaessa", - "Sending ..." : "Lähetetään...", - "Email sent" : "Sähköposti lähetetty", + "access control" : "Pääsyn hallinta", + "Share details could not be loaded for this item." : "Tämän kohteen jakamistietoja ei voitu ladata.", + "An error occured. Please try again" : "Tapahtui virhe. Yritä myöhemmin uudestaan", + "Share" : "Jaa", + "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 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…", "Warning" : "Varoitus", + "Error while sending notification" : "Virhe ilmoitusta lähettäessä", "The object type is not specified." : "The object type is not specified.", "Enter new" : "Kirjoita uusi", "Delete" : "Poista", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 27bea200a63..3335924e5e1 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Erreur lors de la mise en partage", "Error while unsharing" : "Erreur lors de l'annulation du partage", "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 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" : "Partager", - "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", + "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration", "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.", + "Set expiration date" : "Spécifier une date d'expiration", + "Expiration" : "Expiration", + "Expiration date" : "Date d'expiration", + "Sending ..." : "Envoi…", + "Email sent" : "Courriel envoyé", + "Resharing is not allowed" : "Le repartage n'est pas autorisé", + "Share link" : "Partager par lien public", "Link" : "Lien", "Password protect" : "Protéger par un mot de passe", "Password" : "Mot de passe", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Permettre la modification", "Email link to person" : "Envoyer le lien par courriel", "Send" : "Envoyer", - "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...", + "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}", + "Shared in {item} with {user}" : "Partagé dans {item} avec {user}", "group" : "groupe", "remote" : "distant", - "Resharing is not allowed" : "Le repartage n'est pas autorisé", - "Shared in {item} with {user}" : "Partagé dans {item} avec {user}", - "Unshare" : "Ne plus partager", "notify by email" : "notifier par courriel", + "Unshare" : "Ne plus partager", "can share" : "peut partager", "can edit" : "peut modifier", - "access control" : "contrôle d'accès", "create" : "créer", "change" : "modification", "delete" : "supprimer", - "Password protected" : "Protégé par mot de passe", - "Error unsetting expiration date" : "Erreur lors de la suppression de la date d'expiration", - "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration", - "Sending ..." : "Envoi…", - "Email sent" : "Courriel envoyé", + "access control" : "contrôle d'accès", + "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", + "Share" : "Partager", + "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 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", "Warning" : "Attention", "The object type is not specified." : "Le type d'objet n'est pas spécifié.", "Enter new" : "Saisir un nouveau", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index ac12a4673d5..225146cfb73 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -114,14 +114,15 @@ "Error while sharing" : "Erreur lors de la mise en partage", "Error while unsharing" : "Erreur lors de l'annulation du partage", "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 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" : "Partager", - "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", + "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration", "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.", + "Set expiration date" : "Spécifier une date d'expiration", + "Expiration" : "Expiration", + "Expiration date" : "Date d'expiration", + "Sending ..." : "Envoi…", + "Email sent" : "Courriel envoyé", + "Resharing is not allowed" : "Le repartage n'est pas autorisé", + "Share link" : "Partager par lien public", "Link" : "Lien", "Password protect" : "Protéger par un mot de passe", "Password" : "Mot de passe", @@ -129,28 +130,24 @@ "Allow editing" : "Permettre la modification", "Email link to person" : "Envoyer le lien par courriel", "Send" : "Envoyer", - "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...", + "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}", + "Shared in {item} with {user}" : "Partagé dans {item} avec {user}", "group" : "groupe", "remote" : "distant", - "Resharing is not allowed" : "Le repartage n'est pas autorisé", - "Shared in {item} with {user}" : "Partagé dans {item} avec {user}", - "Unshare" : "Ne plus partager", "notify by email" : "notifier par courriel", + "Unshare" : "Ne plus partager", "can share" : "peut partager", "can edit" : "peut modifier", - "access control" : "contrôle d'accès", "create" : "créer", "change" : "modification", "delete" : "supprimer", - "Password protected" : "Protégé par mot de passe", - "Error unsetting expiration date" : "Erreur lors de la suppression de la date d'expiration", - "Error setting expiration date" : "Erreur lors de la spécification de la date d'expiration", - "Sending ..." : "Envoi…", - "Email sent" : "Courriel envoyé", + "access control" : "contrôle d'accès", + "An error occured. Please try again" : "Une erreur est survenue. Merci de réessayer", + "Share" : "Partager", + "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 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", "Warning" : "Attention", "The object type is not specified." : "Le type d'objet n'est pas spécifié.", "Enter new" : "Saisir un nouveau", diff --git a/core/l10n/gl.js b/core/l10n/gl.js index 583931d5068..8cff0f073d6 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -112,14 +112,15 @@ OC.L10N.register( "Error while sharing" : "Produciuse un erro ao compartir", "Error while unsharing" : "Produciuse un erro ao deixar de compartir", "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 users or groups …" : "Compartir con usuarios ou grupos ...", - "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", - "Share" : "Compartir", - "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", + "Error setting expiration date" : "Produciuse un erro ao definir a data de caducidade", "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", + "Set expiration date" : "Definir a data de caducidade", + "Expiration" : "Caducidade", + "Expiration date" : "Data de caducidade", + "Sending ..." : "Enviando...", + "Email sent" : "Correo enviado", + "Resharing is not allowed" : "Non se permite volver compartir", + "Share link" : "Ligazón para compartir", "Link" : "Ligazón", "Password protect" : "Protexido con contrasinal", "Password" : "Contrasinal", @@ -127,28 +128,24 @@ OC.L10N.register( "Allow editing" : "Permitir a edición", "Email link to person" : "Enviar ligazón por correo", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartido en {item} con {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Non se permite volver compartir", - "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Deixar de compartir", "notify by email" : "notificar por correo", + "Unshare" : "Deixar de compartir", "can share" : "pode compartir", "can edit" : "pode editar", - "access control" : "control de acceso", "create" : "crear", "change" : "cambio", "delete" : "eliminar", - "Password protected" : "Protexido con contrasinal", - "Error unsetting expiration date" : "Produciuse un erro ao retirar a data de caducidade", - "Error setting expiration date" : "Produciuse un erro ao definir a data de caducidade", - "Sending ..." : "Enviando...", - "Email sent" : "Correo enviado", + "access control" : "control de acceso", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", + "Share" : "Compartir", + "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 with users or groups …" : "Compartir con usuarios ou grupos ...", + "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", "Warning" : "Aviso", "The object type is not specified." : "Non se especificou o tipo de obxecto.", "Enter new" : "Introduza o novo", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index 7d33ed6cc76..9ce7bf5c34b 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -110,14 +110,15 @@ "Error while sharing" : "Produciuse un erro ao compartir", "Error while unsharing" : "Produciuse un erro ao deixar de compartir", "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 users or groups …" : "Compartir con usuarios ou grupos ...", - "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", - "Share" : "Compartir", - "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", + "Error setting expiration date" : "Produciuse un erro ao definir a data de caducidade", "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", + "Set expiration date" : "Definir a data de caducidade", + "Expiration" : "Caducidade", + "Expiration date" : "Data de caducidade", + "Sending ..." : "Enviando...", + "Email sent" : "Correo enviado", + "Resharing is not allowed" : "Non se permite volver compartir", + "Share link" : "Ligazón para compartir", "Link" : "Ligazón", "Password protect" : "Protexido con contrasinal", "Password" : "Contrasinal", @@ -125,28 +126,24 @@ "Allow editing" : "Permitir a edición", "Email link to person" : "Enviar ligazón por correo", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartido en {item} con {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Non se permite volver compartir", - "Shared in {item} with {user}" : "Compartido en {item} con {user}", - "Unshare" : "Deixar de compartir", "notify by email" : "notificar por correo", + "Unshare" : "Deixar de compartir", "can share" : "pode compartir", "can edit" : "pode editar", - "access control" : "control de acceso", "create" : "crear", "change" : "cambio", "delete" : "eliminar", - "Password protected" : "Protexido con contrasinal", - "Error unsetting expiration date" : "Produciuse un erro ao retirar a data de caducidade", - "Error setting expiration date" : "Produciuse un erro ao definir a data de caducidade", - "Sending ..." : "Enviando...", - "Email sent" : "Correo enviado", + "access control" : "control de acceso", + "An error occured. Please try again" : "Produciuse un erro, ténteo de novo", + "Share" : "Compartir", + "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 with users or groups …" : "Compartir con usuarios ou grupos ...", + "Share with users, groups or remote users …" : "Compartir con usuarios, grupos ou usuarios remotos ...", "Warning" : "Aviso", "The object type is not specified." : "Non se especificou o tipo de obxecto.", "Enter new" : "Introduza o novo", diff --git a/core/l10n/he.js b/core/l10n/he.js index 3285a569d34..c590e0c530e 100644 --- a/core/l10n/he.js +++ b/core/l10n/he.js @@ -52,30 +52,28 @@ OC.L10N.register( "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}", - "Share" : "שתף", + "Error setting expiration date" : "אירעה שגיאה בעת הגדרת תאריך התפוגה", + "Set expiration date" : "הגדרת תאריך תפוגה", + "Expiration date" : "תאריך התפוגה", + "Sending ..." : "מתבצעת שליחה ...", + "Email sent" : "הודעת הדוא״ל נשלחה", + "Resharing is not allowed" : "אסור לעשות שיתוף מחדש", "Share link" : "קישור לשיתוף", "Password protect" : "הגנה בססמה", "Password" : "סיסמא", "Email link to person" : "שליחת קישור בדוא״ל למשתמש", "Send" : "שליחה", - "Set expiration date" : "הגדרת תאריך תפוגה", - "Expiration date" : "תאריך התפוגה", - "group" : "קבוצה", - "Resharing is not allowed" : "אסור לעשות שיתוף מחדש", + "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}", + "Shared with you by {owner}" : "שותף אתך על ידי {owner}", "Shared in {item} with {user}" : "שותף תחת {item} עם {user}", + "group" : "קבוצה", "Unshare" : "הסר שיתוף", "can share" : "ניתן לשתף", "can edit" : "ניתן לערוך", - "access control" : "בקרת גישה", "create" : "יצירה", "delete" : "מחיקה", - "Password protected" : "מוגן בססמה", - "Error unsetting expiration date" : "אירעה שגיאה בביטול תאריך התפוגה", - "Error setting expiration date" : "אירעה שגיאה בעת הגדרת תאריך התפוגה", - "Sending ..." : "מתבצעת שליחה ...", - "Email sent" : "הודעת הדוא״ל נשלחה", + "access control" : "בקרת גישה", + "Share" : "שתף", "Warning" : "אזהרה", "The object type is not specified." : "סוג הפריט לא צוין.", "Delete" : "מחיקה", diff --git a/core/l10n/he.json b/core/l10n/he.json index 5db9f156d09..38cf01d285d 100644 --- a/core/l10n/he.json +++ b/core/l10n/he.json @@ -50,30 +50,28 @@ "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}", - "Share" : "שתף", + "Error setting expiration date" : "אירעה שגיאה בעת הגדרת תאריך התפוגה", + "Set expiration date" : "הגדרת תאריך תפוגה", + "Expiration date" : "תאריך התפוגה", + "Sending ..." : "מתבצעת שליחה ...", + "Email sent" : "הודעת הדוא״ל נשלחה", + "Resharing is not allowed" : "אסור לעשות שיתוף מחדש", "Share link" : "קישור לשיתוף", "Password protect" : "הגנה בססמה", "Password" : "סיסמא", "Email link to person" : "שליחת קישור בדוא״ל למשתמש", "Send" : "שליחה", - "Set expiration date" : "הגדרת תאריך תפוגה", - "Expiration date" : "תאריך התפוגה", - "group" : "קבוצה", - "Resharing is not allowed" : "אסור לעשות שיתוף מחדש", + "Shared with you and the group {group} by {owner}" : "שותף אתך ועם הקבוצה {group} שבבעלות {owner}", + "Shared with you by {owner}" : "שותף אתך על ידי {owner}", "Shared in {item} with {user}" : "שותף תחת {item} עם {user}", + "group" : "קבוצה", "Unshare" : "הסר שיתוף", "can share" : "ניתן לשתף", "can edit" : "ניתן לערוך", - "access control" : "בקרת גישה", "create" : "יצירה", "delete" : "מחיקה", - "Password protected" : "מוגן בססמה", - "Error unsetting expiration date" : "אירעה שגיאה בביטול תאריך התפוגה", - "Error setting expiration date" : "אירעה שגיאה בעת הגדרת תאריך התפוגה", - "Sending ..." : "מתבצעת שליחה ...", - "Email sent" : "הודעת הדוא״ל נשלחה", + "access control" : "בקרת גישה", + "Share" : "שתף", "Warning" : "אזהרה", "The object type is not specified." : "סוג הפריט לא צוין.", "Delete" : "מחיקה", diff --git a/core/l10n/hi.js b/core/l10n/hi.js index 48b726945a2..263af6c2806 100644 --- a/core/l10n/hi.js +++ b/core/l10n/hi.js @@ -24,11 +24,11 @@ OC.L10N.register( "Saving..." : "सहेज रहे हैं...", "Cancel" : "रद्द करें ", "Error" : "त्रुटि", - "Share" : "साझा करें", - "Password" : "पासवर्ड", - "Send" : "भेजें", "Sending ..." : "भेजा जा रहा है", "Email sent" : "ईमेल भेज दिया गया है ", + "Password" : "पासवर्ड", + "Send" : "भेजें", + "Share" : "साझा करें", "Warning" : "चेतावनी ", "Add" : "डाले", "Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}", diff --git a/core/l10n/hi.json b/core/l10n/hi.json index 68a5ec96d2b..c9b53efee16 100644 --- a/core/l10n/hi.json +++ b/core/l10n/hi.json @@ -22,11 +22,11 @@ "Saving..." : "सहेज रहे हैं...", "Cancel" : "रद्द करें ", "Error" : "त्रुटि", - "Share" : "साझा करें", - "Password" : "पासवर्ड", - "Send" : "भेजें", "Sending ..." : "भेजा जा रहा है", "Email sent" : "ईमेल भेज दिया गया है ", + "Password" : "पासवर्ड", + "Send" : "भेजें", + "Share" : "साझा करें", "Warning" : "चेतावनी ", "Add" : "डाले", "Use the following link to reset your password: {link}" : "आगे दिये गये लिंक का उपयोग पासवर्ड बदलने के लिये किजीये: {link}", diff --git a/core/l10n/hr.js b/core/l10n/hr.js index 44d9fab7740..f891532b283 100644 --- a/core/l10n/hr.js +++ b/core/l10n/hr.js @@ -88,11 +88,15 @@ OC.L10N.register( "Error while sharing" : "Pogreška pri dijeljenju", "Error while unsharing" : "Pogreška pri prestanku dijeljenja", "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" : "Podijelite", - "Share link" : "Podijelite vezu", + "Error setting expiration date" : "Pogrešno učitavanje postavke datuma isteka", "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", + "Set expiration date" : "Odredite datum isteka", + "Expiration" : "Istjeće", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "E-pošta poslana", + "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", + "Share link" : "Podijelite vezu", "Link" : "Poveznica", "Password protect" : "Zaštititi lozinkom", "Password" : "Lozinka", @@ -100,27 +104,20 @@ OC.L10N.register( "Allow editing" : "Omogući uređivanje", "Email link to person" : "Pošaljite osobi vezu e-poštom", "Send" : "Pošaljite", - "Set expiration date" : "Odredite datum isteka", - "Expiration" : "Istjeće", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Podijeljeno u {item} sa {user}", "group" : "Grupa", "remote" : "na daljinu", - "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", - "Shared in {item} with {user}" : "Podijeljeno u {item} sa {user}", - "Unshare" : "Prestanite dijeliti", "notify by email" : "Obavijestite e-poštom", + "Unshare" : "Prestanite dijeliti", "can share" : "Dijeljenje moguće", "can edit" : "Uređivanje moguće", - "access control" : "Kontrola pristupa", "create" : "Kreirajte", "change" : "promijeni", "delete" : "Izbrišite", - "Password protected" : "Lozinka zaštićena", - "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka", - "Error setting expiration date" : "Pogrešno učitavanje postavke datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "E-pošta poslana", + "access control" : "Kontrola pristupa", + "Share" : "Podijelite", "Warning" : "Upozorenje", "The object type is not specified." : "Vrsta objekta nije specificirana.", "Enter new" : "Unesite novi", diff --git a/core/l10n/hr.json b/core/l10n/hr.json index 7a6ce98346f..3b4404dacb5 100644 --- a/core/l10n/hr.json +++ b/core/l10n/hr.json @@ -86,11 +86,15 @@ "Error while sharing" : "Pogreška pri dijeljenju", "Error while unsharing" : "Pogreška pri prestanku dijeljenja", "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" : "Podijelite", - "Share link" : "Podijelite vezu", + "Error setting expiration date" : "Pogrešno učitavanje postavke datuma isteka", "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", + "Set expiration date" : "Odredite datum isteka", + "Expiration" : "Istjeće", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "E-pošta poslana", + "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", + "Share link" : "Podijelite vezu", "Link" : "Poveznica", "Password protect" : "Zaštititi lozinkom", "Password" : "Lozinka", @@ -98,27 +102,20 @@ "Allow editing" : "Omogući uređivanje", "Email link to person" : "Pošaljite osobi vezu e-poštom", "Send" : "Pošaljite", - "Set expiration date" : "Odredite datum isteka", - "Expiration" : "Istjeće", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Podijeljeno u {item} sa {user}", "group" : "Grupa", "remote" : "na daljinu", - "Resharing is not allowed" : "Ponovno dijeljenje nije dopušteno", - "Shared in {item} with {user}" : "Podijeljeno u {item} sa {user}", - "Unshare" : "Prestanite dijeliti", "notify by email" : "Obavijestite e-poštom", + "Unshare" : "Prestanite dijeliti", "can share" : "Dijeljenje moguće", "can edit" : "Uređivanje moguće", - "access control" : "Kontrola pristupa", "create" : "Kreirajte", "change" : "promijeni", "delete" : "Izbrišite", - "Password protected" : "Lozinka zaštićena", - "Error unsetting expiration date" : "Pogrešno uklanjanje postavke datuma isteka", - "Error setting expiration date" : "Pogrešno učitavanje postavke datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "E-pošta poslana", + "access control" : "Kontrola pristupa", + "Share" : "Podijelite", "Warning" : "Upozorenje", "The object type is not specified." : "Vrsta objekta nije specificirana.", "Enter new" : "Unesite novi", diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index 7be9e243e88..3f2a73d0c99 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -115,14 +115,15 @@ OC.L10N.register( "Error while sharing" : "Nem sikerült létrehozni a megosztást", "Error while unsharing" : "Nem sikerült visszavonni a megosztást", "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 users or groups …" : "Megosztás felhasználókkal vagy csoportokkal ...", - "Share with users, groups or remote users …" : "Megosztás felhasználókkal, csoportokkal vagy távoli felhasználókkal ...", - "Share" : "Megosztás", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasznalo@példa.com/owncloud", - "Share link" : "Megosztás hivatkozással", + "Error setting expiration date" : "Nem sikerült a lejárati időt beállítani", "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", + "Set expiration date" : "Legyen lejárati idő", + "Expiration" : "Lejárat", + "Expiration date" : "A lejárati idő", + "Sending ..." : "Küldés ...", + "Email sent" : "Az e-mailt elküldtük", + "Resharing is not allowed" : "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal", + "Share link" : "Megosztás hivatkozással", "Link" : "Link", "Password protect" : "Jelszóval is védem", "Password" : "Jelszó", @@ -130,28 +131,24 @@ OC.L10N.register( "Allow editing" : "Szerkesztés engedélyezése", "Email link to person" : "Email címre küldjük el", "Send" : "Küldjük el", - "Set expiration date" : "Legyen lejárati idő", - "Expiration" : "Lejárat", - "Expiration date" : "A lejárati idő", - "An error occured. Please try again" : "Hiba történt. Kérjük, próbáld újra!", - "Adding user..." : "Felhasználó hozzáadása...", + "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}", + "Shared in {item} with {user}" : "Megosztva {item}-ben {user}-rel", "group" : "csoport", "remote" : "távoli", - "Resharing is not allowed" : "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal", - "Shared in {item} with {user}" : "Megosztva {item}-ben {user}-rel", - "Unshare" : "A megosztás visszavonása", "notify by email" : "e-mail értesítés", + "Unshare" : "A megosztás visszavonása", "can share" : "megosztható", "can edit" : "módosíthat", - "access control" : "jogosultság", "create" : "létrehoz", "change" : "változtatás", "delete" : "töröl", - "Password protected" : "Jelszóval van védve", - "Error unsetting expiration date" : "Nem sikerült a lejárati időt törölni", - "Error setting expiration date" : "Nem sikerült a lejárati időt beállítani", - "Sending ..." : "Küldés ...", - "Email sent" : "Az e-mailt elküldtük", + "access control" : "jogosultság", + "An error occured. Please try again" : "Hiba történt. Kérjük, próbáld újra!", + "Share" : "Megosztás", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasznalo@példa.com/owncloud", + "Share with users or groups …" : "Megosztás felhasználókkal vagy csoportokkal ...", + "Share with users, groups or remote users …" : "Megosztás felhasználókkal, csoportokkal vagy távoli felhasználókkal ...", "Warning" : "Figyelmeztetés", "The object type is not specified." : "Az objektum típusa nincs megadva.", "Enter new" : "Új beírása", diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index 63447a4038a..0f5376c947a 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -113,14 +113,15 @@ "Error while sharing" : "Nem sikerült létrehozni a megosztást", "Error while unsharing" : "Nem sikerült visszavonni a megosztást", "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 users or groups …" : "Megosztás felhasználókkal vagy csoportokkal ...", - "Share with users, groups or remote users …" : "Megosztás felhasználókkal, csoportokkal vagy távoli felhasználókkal ...", - "Share" : "Megosztás", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasznalo@példa.com/owncloud", - "Share link" : "Megosztás hivatkozással", + "Error setting expiration date" : "Nem sikerült a lejárati időt beállítani", "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", + "Set expiration date" : "Legyen lejárati idő", + "Expiration" : "Lejárat", + "Expiration date" : "A lejárati idő", + "Sending ..." : "Küldés ...", + "Email sent" : "Az e-mailt elküldtük", + "Resharing is not allowed" : "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal", + "Share link" : "Megosztás hivatkozással", "Link" : "Link", "Password protect" : "Jelszóval is védem", "Password" : "Jelszó", @@ -128,28 +129,24 @@ "Allow editing" : "Szerkesztés engedélyezése", "Email link to person" : "Email címre küldjük el", "Send" : "Küldjük el", - "Set expiration date" : "Legyen lejárati idő", - "Expiration" : "Lejárat", - "Expiration date" : "A lejárati idő", - "An error occured. Please try again" : "Hiba történt. Kérjük, próbáld újra!", - "Adding user..." : "Felhasználó hozzáadása...", + "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}", + "Shared in {item} with {user}" : "Megosztva {item}-ben {user}-rel", "group" : "csoport", "remote" : "távoli", - "Resharing is not allowed" : "Ezt az állományt csak a tulajdonosa oszthatja meg másokkal", - "Shared in {item} with {user}" : "Megosztva {item}-ben {user}-rel", - "Unshare" : "A megosztás visszavonása", "notify by email" : "e-mail értesítés", + "Unshare" : "A megosztás visszavonása", "can share" : "megosztható", "can edit" : "módosíthat", - "access control" : "jogosultság", "create" : "létrehoz", "change" : "változtatás", "delete" : "töröl", - "Password protected" : "Jelszóval van védve", - "Error unsetting expiration date" : "Nem sikerült a lejárati időt törölni", - "Error setting expiration date" : "Nem sikerült a lejárati időt beállítani", - "Sending ..." : "Küldés ...", - "Email sent" : "Az e-mailt elküldtük", + "access control" : "jogosultság", + "An error occured. Please try again" : "Hiba történt. Kérjük, próbáld újra!", + "Share" : "Megosztás", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Megosztás más ownCloud szerverekkel, a következő formátum használatával felhasznalo@példa.com/owncloud", + "Share with users or groups …" : "Megosztás felhasználókkal vagy csoportokkal ...", + "Share with users, groups or remote users …" : "Megosztás felhasználókkal, csoportokkal vagy távoli felhasználókkal ...", "Warning" : "Figyelmeztetés", "The object type is not specified." : "Az objektum típusa nincs megadva.", "Enter new" : "Új beírása", diff --git a/core/l10n/ia.js b/core/l10n/ia.js index 15842447aa8..536affe6060 100644 --- a/core/l10n/ia.js +++ b/core/l10n/ia.js @@ -79,33 +79,30 @@ OC.L10N.register( "Error while sharing" : "Error quando on compartiva", "Error while unsharing" : "Error quando on levava le compartir", "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" : "Compartir", + "Error setting expiration date" : "Error quando on fixava le data de expiration", + "Set expiration date" : "Fixa data de expiration", + "Expiration date" : "Data de expiration", + "Sending ..." : "Inviante ...", + "Email sent" : "Message de e-posta inviate", + "Resharing is not allowed" : "Il non es permittite compartir plus que un vice", "Share link" : "Compartir ligamine", "Password protect" : "Protegite per contrasigno", "Password" : "Contrasigno", "Choose a password for the public link" : "Selige un contrasigno pro le ligamine public", "Email link to person" : "Ligamine de e-posta a persona", "Send" : "Invia", - "Set expiration date" : "Fixa data de expiration", - "Expiration date" : "Data de expiration", - "Adding user..." : "Addente usator...", - "group" : "gruppo", - "Resharing is not allowed" : "Il non es permittite compartir plus que un vice", + "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} ", "Shared in {item} with {user}" : "Compartite in {item} con {user}", - "Unshare" : "Leva compartir", + "group" : "gruppo", "notify by email" : "notificar per message de e-posta", + "Unshare" : "Leva compartir", "can share" : "pote compartir", "can edit" : "pote modificar", - "access control" : "controlo de accesso", "create" : "crear", "delete" : "deler", - "Password protected" : "Proteger con contrasigno", - "Error unsetting expiration date" : "Error quando on levava le data de expiration", - "Error setting expiration date" : "Error quando on fixava le data de expiration", - "Sending ..." : "Inviante ...", - "Email sent" : "Message de e-posta inviate", + "access control" : "controlo de accesso", + "Share" : "Compartir", "Warning" : "Aviso", "The object type is not specified." : "Le typo de objecto non es specificate", "Enter new" : "Inserta nove", @@ -156,6 +153,7 @@ OC.L10N.register( "Search" : "Cercar", "Server side authentication failed!" : "Il falleva authentication de latere servitor!", "Please contact your administrator." : "Pro favor continge tu administrator.", + "Log in" : "Aperir session", "remember" : "memora", "Alternative Logins" : "Accessos de autorisation alternative", "Thank you for your patience." : "Gratias pro tu patientia.", diff --git a/core/l10n/ia.json b/core/l10n/ia.json index 649e667bdcb..165d62ba61a 100644 --- a/core/l10n/ia.json +++ b/core/l10n/ia.json @@ -77,33 +77,30 @@ "Error while sharing" : "Error quando on compartiva", "Error while unsharing" : "Error quando on levava le compartir", "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" : "Compartir", + "Error setting expiration date" : "Error quando on fixava le data de expiration", + "Set expiration date" : "Fixa data de expiration", + "Expiration date" : "Data de expiration", + "Sending ..." : "Inviante ...", + "Email sent" : "Message de e-posta inviate", + "Resharing is not allowed" : "Il non es permittite compartir plus que un vice", "Share link" : "Compartir ligamine", "Password protect" : "Protegite per contrasigno", "Password" : "Contrasigno", "Choose a password for the public link" : "Selige un contrasigno pro le ligamine public", "Email link to person" : "Ligamine de e-posta a persona", "Send" : "Invia", - "Set expiration date" : "Fixa data de expiration", - "Expiration date" : "Data de expiration", - "Adding user..." : "Addente usator...", - "group" : "gruppo", - "Resharing is not allowed" : "Il non es permittite compartir plus que un vice", + "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} ", "Shared in {item} with {user}" : "Compartite in {item} con {user}", - "Unshare" : "Leva compartir", + "group" : "gruppo", "notify by email" : "notificar per message de e-posta", + "Unshare" : "Leva compartir", "can share" : "pote compartir", "can edit" : "pote modificar", - "access control" : "controlo de accesso", "create" : "crear", "delete" : "deler", - "Password protected" : "Proteger con contrasigno", - "Error unsetting expiration date" : "Error quando on levava le data de expiration", - "Error setting expiration date" : "Error quando on fixava le data de expiration", - "Sending ..." : "Inviante ...", - "Email sent" : "Message de e-posta inviate", + "access control" : "controlo de accesso", + "Share" : "Compartir", "Warning" : "Aviso", "The object type is not specified." : "Le typo de objecto non es specificate", "Enter new" : "Inserta nove", @@ -154,6 +151,7 @@ "Search" : "Cercar", "Server side authentication failed!" : "Il falleva authentication de latere servitor!", "Please contact your administrator." : "Pro favor continge tu administrator.", + "Log in" : "Aperir session", "remember" : "memora", "Alternative Logins" : "Accessos de autorisation alternative", "Thank you for your patience." : "Gratias pro tu patientia.", diff --git a/core/l10n/id.js b/core/l10n/id.js index 0540b9ae0bd..c722b4a7b7e 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Kesalahan saat membagikan", "Error while unsharing" : "Kesalahan saat membatalkan pembagian", "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 users or groups …" : "Bagikan dengan pengguna atau grup ...", - "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", - "Share" : "Bagikan", - "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", + "Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa", "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", + "Set expiration date" : "Atur tanggal kedaluwarsa", + "Expiration" : "Kedaluwarsa", + "Expiration date" : "Tanggal kedaluwarsa", + "Sending ..." : "Mengirim ...", + "Email sent" : "Email terkirim", + "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", + "Share link" : "Bagikan tautan", "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Password" : "Sandi", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Izinkan penyuntingan", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", - "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...", + "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}", + "Shared in {item} with {user}" : "Dibagikan dalam {item} dengan {user}", "group" : "grup", "remote" : "remote", - "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", - "Shared in {item} with {user}" : "Dibagikan dalam {item} dengan {user}", - "Unshare" : "Batalkan berbagi", "notify by email" : "notifikasi via email", + "Unshare" : "Batalkan berbagi", "can share" : "dapat berbagi", "can edit" : "dapat sunting", - "access control" : "kontrol akses", "create" : "buat", "change" : "ubah", "delete" : "hapus", - "Password protected" : "Sandi dilindungi", - "Error unsetting expiration date" : "Kesalahan saat menghapus tanggal kedaluwarsa", - "Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa", - "Sending ..." : "Mengirim ...", - "Email sent" : "Email terkirim", + "access control" : "kontrol akses", + "An error occured. Please try again" : "Terjadi masalah. Mohon coba kembali", + "Share" : "Bagikan", + "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 with users or groups …" : "Bagikan dengan pengguna atau grup ...", + "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", "Warning" : "Peringatan", "The object type is not specified." : "Tipe objek tidak ditentukan.", "Enter new" : "Masukkan baru", @@ -248,6 +245,7 @@ OC.L10N.register( "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.", + "Log in" : "Masuk", "Wrong password. Reset it?" : "Sandi salah. Atur ulang?", "remember" : "selalu masuk", "Alternative Logins" : "Cara Alternatif untuk Masuk", diff --git a/core/l10n/id.json b/core/l10n/id.json index d03ae4ae4ec..ecc2c2b0f6e 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -114,14 +114,15 @@ "Error while sharing" : "Kesalahan saat membagikan", "Error while unsharing" : "Kesalahan saat membatalkan pembagian", "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 users or groups …" : "Bagikan dengan pengguna atau grup ...", - "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", - "Share" : "Bagikan", - "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", + "Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa", "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", + "Set expiration date" : "Atur tanggal kedaluwarsa", + "Expiration" : "Kedaluwarsa", + "Expiration date" : "Tanggal kedaluwarsa", + "Sending ..." : "Mengirim ...", + "Email sent" : "Email terkirim", + "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", + "Share link" : "Bagikan tautan", "Link" : "Tautan", "Password protect" : "Lindungi dengan sandi", "Password" : "Sandi", @@ -129,28 +130,24 @@ "Allow editing" : "Izinkan penyuntingan", "Email link to person" : "Emailkan tautan ini ke orang", "Send" : "Kirim", - "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...", + "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}", + "Shared in {item} with {user}" : "Dibagikan dalam {item} dengan {user}", "group" : "grup", "remote" : "remote", - "Resharing is not allowed" : "Berbagi ulang tidak diizinkan", - "Shared in {item} with {user}" : "Dibagikan dalam {item} dengan {user}", - "Unshare" : "Batalkan berbagi", "notify by email" : "notifikasi via email", + "Unshare" : "Batalkan berbagi", "can share" : "dapat berbagi", "can edit" : "dapat sunting", - "access control" : "kontrol akses", "create" : "buat", "change" : "ubah", "delete" : "hapus", - "Password protected" : "Sandi dilindungi", - "Error unsetting expiration date" : "Kesalahan saat menghapus tanggal kedaluwarsa", - "Error setting expiration date" : "Kesalahan saat mengatur tanggal kedaluwarsa", - "Sending ..." : "Mengirim ...", - "Email sent" : "Email terkirim", + "access control" : "kontrol akses", + "An error occured. Please try again" : "Terjadi masalah. Mohon coba kembali", + "Share" : "Bagikan", + "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 with users or groups …" : "Bagikan dengan pengguna atau grup ...", + "Share with users, groups or remote users …" : "Bagikan dengan pengguna, grup atau pengguna remote ...", "Warning" : "Peringatan", "The object type is not specified." : "Tipe objek tidak ditentukan.", "Enter new" : "Masukkan baru", @@ -246,6 +243,7 @@ "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.", + "Log in" : "Masuk", "Wrong password. Reset it?" : "Sandi salah. Atur ulang?", "remember" : "selalu masuk", "Alternative Logins" : "Cara Alternatif untuk Masuk", diff --git a/core/l10n/is.js b/core/l10n/is.js index 64cc78ea048..5dcb543b1e4 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Villa við deilingu", "Error while unsharing" : "Villa við að hætta deilingu", "Error while changing permissions" : "Villa við að breyta aðgangsheimildum", - "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", - "Shared with you by {owner}" : "Deilt með þér af {owner}", - "Share with users or groups …" : "Deila með notendum eða hópum ...", - "Share with users, groups or remote users …" : "Deila með notendum, hópa eða ytri notendum ...", - "Share" : "Deila", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólk í öðrum ownClouds með skipuninni username@example.com/owncloud", - "Share link" : "Deila hlekk", + "Error setting expiration date" : "Villa við að setja gildistíma", "The public link will expire no later than {days} days after it is created" : "Almennings hlekkur rennur út eigi síðar en {days} daga eftir að hann er búinn til", + "Set expiration date" : "Setja gildistíma", + "Expiration" : "Rennurút", + "Expiration date" : "Gildir til", + "Sending ..." : "Sendi ...", + "Email sent" : "Tölvupóstur sendur", + "Resharing is not allowed" : "Endurdeiling er ekki leyfð", + "Share link" : "Deila hlekk", "Link" : "Hlekkur", "Password protect" : "Verja með lykilorði", "Password" : "Lykilorð", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Leyfa breytingar", "Email link to person" : "Senda vefhlekk í tölvupóstu til notenda", "Send" : "Senda", - "Set expiration date" : "Setja gildistíma", - "Expiration" : "Rennurút", - "Expiration date" : "Gildir til", - "An error occured. Please try again" : "Villa kom upp. Vinsamlegast reyndu aftur", - "Adding user..." : "Bæta við notanda...", + "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", + "Shared with you by {owner}" : "Deilt með þér af {owner}", + "Shared in {item} with {user}" : "Deilt með {item} ásamt {user}", "group" : "hópur", "remote" : "fjarlægur", - "Resharing is not allowed" : "Endurdeiling er ekki leyfð", - "Shared in {item} with {user}" : "Deilt með {item} ásamt {user}", - "Unshare" : "Hætta deilingu", "notify by email" : "tilkynna með tölvupósti", + "Unshare" : "Hætta deilingu", "can share" : "getur deilt", "can edit" : "getur breytt", - "access control" : "aðgangsstýring", "create" : "mynda", "change" : "breyta", "delete" : "eyða", - "Password protected" : "Verja með lykilorði", - "Error unsetting expiration date" : "Villa við að aftengja gildistíma", - "Error setting expiration date" : "Villa við að setja gildistíma", - "Sending ..." : "Sendi ...", - "Email sent" : "Tölvupóstur sendur", + "access control" : "aðgangsstýring", + "An error occured. Please try again" : "Villa kom upp. Vinsamlegast reyndu aftur", + "Share" : "Deila", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólk í öðrum ownClouds með skipuninni username@example.com/owncloud", + "Share with users or groups …" : "Deila með notendum eða hópum ...", + "Share with users, groups or remote users …" : "Deila með notendum, hópa eða ytri notendum ...", "Warning" : "Aðvörun", "The object type is not specified." : "Tegund ekki tilgreind", "Enter new" : "Sláðu inn nýtt", diff --git a/core/l10n/is.json b/core/l10n/is.json index b6255b1764e..f1238959ebf 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -114,14 +114,15 @@ "Error while sharing" : "Villa við deilingu", "Error while unsharing" : "Villa við að hætta deilingu", "Error while changing permissions" : "Villa við að breyta aðgangsheimildum", - "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", - "Shared with you by {owner}" : "Deilt með þér af {owner}", - "Share with users or groups …" : "Deila með notendum eða hópum ...", - "Share with users, groups or remote users …" : "Deila með notendum, hópa eða ytri notendum ...", - "Share" : "Deila", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólk í öðrum ownClouds með skipuninni username@example.com/owncloud", - "Share link" : "Deila hlekk", + "Error setting expiration date" : "Villa við að setja gildistíma", "The public link will expire no later than {days} days after it is created" : "Almennings hlekkur rennur út eigi síðar en {days} daga eftir að hann er búinn til", + "Set expiration date" : "Setja gildistíma", + "Expiration" : "Rennurút", + "Expiration date" : "Gildir til", + "Sending ..." : "Sendi ...", + "Email sent" : "Tölvupóstur sendur", + "Resharing is not allowed" : "Endurdeiling er ekki leyfð", + "Share link" : "Deila hlekk", "Link" : "Hlekkur", "Password protect" : "Verja með lykilorði", "Password" : "Lykilorð", @@ -129,28 +130,24 @@ "Allow editing" : "Leyfa breytingar", "Email link to person" : "Senda vefhlekk í tölvupóstu til notenda", "Send" : "Senda", - "Set expiration date" : "Setja gildistíma", - "Expiration" : "Rennurút", - "Expiration date" : "Gildir til", - "An error occured. Please try again" : "Villa kom upp. Vinsamlegast reyndu aftur", - "Adding user..." : "Bæta við notanda...", + "Shared with you and the group {group} by {owner}" : "Deilt með þér og hópnum {group} af {owner}", + "Shared with you by {owner}" : "Deilt með þér af {owner}", + "Shared in {item} with {user}" : "Deilt með {item} ásamt {user}", "group" : "hópur", "remote" : "fjarlægur", - "Resharing is not allowed" : "Endurdeiling er ekki leyfð", - "Shared in {item} with {user}" : "Deilt með {item} ásamt {user}", - "Unshare" : "Hætta deilingu", "notify by email" : "tilkynna með tölvupósti", + "Unshare" : "Hætta deilingu", "can share" : "getur deilt", "can edit" : "getur breytt", - "access control" : "aðgangsstýring", "create" : "mynda", "change" : "breyta", "delete" : "eyða", - "Password protected" : "Verja með lykilorði", - "Error unsetting expiration date" : "Villa við að aftengja gildistíma", - "Error setting expiration date" : "Villa við að setja gildistíma", - "Sending ..." : "Sendi ...", - "Email sent" : "Tölvupóstur sendur", + "access control" : "aðgangsstýring", + "An error occured. Please try again" : "Villa kom upp. Vinsamlegast reyndu aftur", + "Share" : "Deila", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Deila með fólk í öðrum ownClouds með skipuninni username@example.com/owncloud", + "Share with users or groups …" : "Deila með notendum eða hópum ...", + "Share with users, groups or remote users …" : "Deila með notendum, hópa eða ytri notendum ...", "Warning" : "Aðvörun", "The object type is not specified." : "Tegund ekki tilgreind", "Enter new" : "Sláðu inn nýtt", diff --git a/core/l10n/it.js b/core/l10n/it.js index 3b540014655..48fdf0e9b0c 100644 --- a/core/l10n/it.js +++ b/core/l10n/it.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Errore durante la condivisione", "Error while unsharing" : "Errore durante la rimozione della condivisione", "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 users or groups …" : "Condividi con utenti o gruppi...", - "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", - "Share" : "Condividi", - "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", + "Error setting expiration date" : "Errore durante l'impostazione della data di scadenza", "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", + "Set expiration date" : "Imposta data di scadenza", + "Expiration" : "Scadenza", + "Expiration date" : "Data di scadenza", + "Sending ..." : "Invio in corso...", + "Email sent" : "Messaggio inviato", + "Resharing is not allowed" : "La ri-condivisione non è consentita", + "Share link" : "Condividi collegamento", "Link" : "Collegamento", "Password protect" : "Proteggi con password", "Password" : "Password", @@ -131,29 +132,27 @@ OC.L10N.register( "Allow editing" : "Consenti la modifica", "Email link to person" : "Invia collegamento via email", "Send" : "Invia", - "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...", + "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}", + "Shared in {item} with {user}" : "Condiviso in {item} con {user}", "group" : "gruppo", "remote" : "remota", - "Resharing is not allowed" : "La ri-condivisione non è consentita", - "Shared in {item} with {user}" : "Condiviso in {item} con {user}", - "Unshare" : "Rimuovi condivisione", "notify by email" : "notifica tramite email", + "Unshare" : "Rimuovi condivisione", "can share" : "può condividere", "can edit" : "può modificare", - "access control" : "controllo d'accesso", "create" : "creare", "change" : "cambia", "delete" : "elimina", - "Password protected" : "Protetta da password", - "Error unsetting expiration date" : "Errore durante la rimozione della data di scadenza", - "Error setting expiration date" : "Errore durante l'impostazione della data di scadenza", - "Sending ..." : "Invio in corso...", - "Email sent" : "Messaggio inviato", + "access control" : "controllo d'accesso", + "Share details could not be loaded for this item." : "I dettagli della condivisione non possono essere caricati per questo elemento.", + "An error occured. Please try again" : "Si è verificato un errore. Prova ancora", + "Share" : "Condividi", + "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 with users or groups …" : "Condividi con utenti o gruppi...", + "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", "Warning" : "Avviso", + "Error while sending notification" : "Errore durante l'invio della notifica", "The object type is not specified." : "Il tipo di oggetto non è specificato.", "Enter new" : "Inserisci nuovo", "Delete" : "Elimina", @@ -248,6 +247,7 @@ OC.L10N.register( "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.", + "Log in" : "Accedi", "Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?", "remember" : "ricorda", "Alternative Logins" : "Accessi alternativi", diff --git a/core/l10n/it.json b/core/l10n/it.json index 30543ce8a6e..bedb6b8aa66 100644 --- a/core/l10n/it.json +++ b/core/l10n/it.json @@ -114,14 +114,15 @@ "Error while sharing" : "Errore durante la condivisione", "Error while unsharing" : "Errore durante la rimozione della condivisione", "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 users or groups …" : "Condividi con utenti o gruppi...", - "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", - "Share" : "Condividi", - "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", + "Error setting expiration date" : "Errore durante l'impostazione della data di scadenza", "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", + "Set expiration date" : "Imposta data di scadenza", + "Expiration" : "Scadenza", + "Expiration date" : "Data di scadenza", + "Sending ..." : "Invio in corso...", + "Email sent" : "Messaggio inviato", + "Resharing is not allowed" : "La ri-condivisione non è consentita", + "Share link" : "Condividi collegamento", "Link" : "Collegamento", "Password protect" : "Proteggi con password", "Password" : "Password", @@ -129,29 +130,27 @@ "Allow editing" : "Consenti la modifica", "Email link to person" : "Invia collegamento via email", "Send" : "Invia", - "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...", + "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}", + "Shared in {item} with {user}" : "Condiviso in {item} con {user}", "group" : "gruppo", "remote" : "remota", - "Resharing is not allowed" : "La ri-condivisione non è consentita", - "Shared in {item} with {user}" : "Condiviso in {item} con {user}", - "Unshare" : "Rimuovi condivisione", "notify by email" : "notifica tramite email", + "Unshare" : "Rimuovi condivisione", "can share" : "può condividere", "can edit" : "può modificare", - "access control" : "controllo d'accesso", "create" : "creare", "change" : "cambia", "delete" : "elimina", - "Password protected" : "Protetta da password", - "Error unsetting expiration date" : "Errore durante la rimozione della data di scadenza", - "Error setting expiration date" : "Errore durante l'impostazione della data di scadenza", - "Sending ..." : "Invio in corso...", - "Email sent" : "Messaggio inviato", + "access control" : "controllo d'accesso", + "Share details could not be loaded for this item." : "I dettagli della condivisione non possono essere caricati per questo elemento.", + "An error occured. Please try again" : "Si è verificato un errore. Prova ancora", + "Share" : "Condividi", + "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 with users or groups …" : "Condividi con utenti o gruppi...", + "Share with users, groups or remote users …" : "Condividi con utenti, gruppi o utenti remoti...", "Warning" : "Avviso", + "Error while sending notification" : "Errore durante l'invio della notifica", "The object type is not specified." : "Il tipo di oggetto non è specificato.", "Enter new" : "Inserisci nuovo", "Delete" : "Elimina", @@ -246,6 +245,7 @@ "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.", + "Log in" : "Accedi", "Wrong password. Reset it?" : "Password errata. Vuoi reimpostarla?", "remember" : "ricorda", "Alternative Logins" : "Accessi alternativi", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index 9c8d681f379..53bfc2ebc65 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -114,14 +114,15 @@ OC.L10N.register( "Error while sharing" : "共有でエラー発生", "Error while unsharing" : "共有解除でエラー発生", "Error while changing permissions" : "権限変更でエラー発生", - "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", - "Shared with you by {owner}" : "{owner} と共有中", - "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", - "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", - "Share" : "共有", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", - "Share link" : "URLで共有", + "Error setting expiration date" : "有効期限の設定でエラー発生", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", + "Set expiration date" : "有効期限を設定", + "Expiration" : "期限切れ", + "Expiration date" : "有効期限", + "Sending ..." : "送信中...", + "Email sent" : "メールを送信しました", + "Resharing is not allowed" : "再共有は許可されていません", + "Share link" : "URLで共有", "Link" : "リンク", "Password protect" : "パスワード保護を有効化", "Password" : "パスワード", @@ -129,28 +130,24 @@ OC.L10N.register( "Allow editing" : "編集許可", "Email link to person" : "メールリンク", "Send" : "送信", - "Set expiration date" : "有効期限を設定", - "Expiration" : "期限切れ", - "Expiration date" : "有効期限", - "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", - "Adding user..." : "ユーザーを追加しています...", + "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", + "Shared with you by {owner}" : "{owner} と共有中", + "Shared in {item} with {user}" : "{item} 内で {user} と共有中", "group" : "グループ", "remote" : "リモート", - "Resharing is not allowed" : "再共有は許可されていません", - "Shared in {item} with {user}" : "{item} 内で {user} と共有中", - "Unshare" : "共有解除", "notify by email" : "メールで通知", + "Unshare" : "共有解除", "can share" : "共有可", "can edit" : "編集を許可", - "access control" : "アクセス権限", "create" : "作成", "change" : "更新", "delete" : "削除", - "Password protected" : "パスワード保護", - "Error unsetting expiration date" : "有効期限の未設定エラー", - "Error setting expiration date" : "有効期限の設定でエラー発生", - "Sending ..." : "送信中...", - "Email sent" : "メールを送信しました", + "access control" : "アクセス権限", + "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", + "Share" : "共有", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", + "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", + "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", "Warning" : "警告", "The object type is not specified." : "オブジェクトタイプが指定されていません。", "Enter new" : "新規に入力", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index ad18b1f98ed..a0591f119f9 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -112,14 +112,15 @@ "Error while sharing" : "共有でエラー発生", "Error while unsharing" : "共有解除でエラー発生", "Error while changing permissions" : "権限変更でエラー発生", - "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", - "Shared with you by {owner}" : "{owner} と共有中", - "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", - "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", - "Share" : "共有", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", - "Share link" : "URLで共有", + "Error setting expiration date" : "有効期限の設定でエラー発生", "The public link will expire no later than {days} days after it is created" : "URLによる共有は、作成してから {days} 日以内に有効期限切れになります", + "Set expiration date" : "有効期限を設定", + "Expiration" : "期限切れ", + "Expiration date" : "有効期限", + "Sending ..." : "送信中...", + "Email sent" : "メールを送信しました", + "Resharing is not allowed" : "再共有は許可されていません", + "Share link" : "URLで共有", "Link" : "リンク", "Password protect" : "パスワード保護を有効化", "Password" : "パスワード", @@ -127,28 +128,24 @@ "Allow editing" : "編集許可", "Email link to person" : "メールリンク", "Send" : "送信", - "Set expiration date" : "有効期限を設定", - "Expiration" : "期限切れ", - "Expiration date" : "有効期限", - "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", - "Adding user..." : "ユーザーを追加しています...", + "Shared with you and the group {group} by {owner}" : "あなたと {owner} のグループ {group} で共有中", + "Shared with you by {owner}" : "{owner} と共有中", + "Shared in {item} with {user}" : "{item} 内で {user} と共有中", "group" : "グループ", "remote" : "リモート", - "Resharing is not allowed" : "再共有は許可されていません", - "Shared in {item} with {user}" : "{item} 内で {user} と共有中", - "Unshare" : "共有解除", "notify by email" : "メールで通知", + "Unshare" : "共有解除", "can share" : "共有可", "can edit" : "編集を許可", - "access control" : "アクセス権限", "create" : "作成", "change" : "更新", "delete" : "削除", - "Password protected" : "パスワード保護", - "Error unsetting expiration date" : "有効期限の未設定エラー", - "Error setting expiration date" : "有効期限の設定でエラー発生", - "Sending ..." : "送信中...", - "Email sent" : "メールを送信しました", + "access control" : "アクセス権限", + "An error occured. Please try again" : "エラーが発生しました。もう一度トライしてください。", + "Share" : "共有", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "次の形式で指定して他のownCloudのユーザーと、共有", + "Share with users or groups …" : "ユーザーもしくはグループと共有 ...", + "Share with users, groups or remote users …" : "ユーザー、グループもしくはリモートユーザーと共有 ...", "Warning" : "警告", "The object type is not specified." : "オブジェクトタイプが指定されていません。", "Enter new" : "新規に入力", diff --git a/core/l10n/ka_GE.js b/core/l10n/ka_GE.js index d6ae525c861..6fda99450a0 100644 --- a/core/l10n/ka_GE.js +++ b/core/l10n/ka_GE.js @@ -52,29 +52,27 @@ OC.L10N.register( "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}–ის მიერ", - "Share" : "გაზიარება", - "Password protect" : "პაროლით დაცვა", - "Password" : "პაროლი", - "Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა", - "Send" : "გაგზავნა", + "Error setting expiration date" : "შეცდომა ვადის გასვლის მითითების დროს", "Set expiration date" : "მიუთითე ვადის გასვლის დრო", "Expiration" : "ვადის გასვლის დრო", "Expiration date" : "ვადის გასვლის დრო", - "group" : "ჯგუფი", + "Sending ..." : "გაგზავნა ....", + "Email sent" : "იმეილი გაიგზავნა", "Resharing is not allowed" : "მეორეჯერ გაზიარება არ არის დაშვებული", + "Password protect" : "პაროლით დაცვა", + "Password" : "პაროლი", + "Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა", + "Send" : "გაგზავნა", + "Shared with you and the group {group} by {owner}" : "გაზიარდა თქვენთვის და ჯგუფისთვის {group}, {owner}–ის მიერ", + "Shared with you by {owner}" : "გაზიარდა თქვენთვის {owner}–ის მიერ", "Shared in {item} with {user}" : "გაზიარდა {item}–ში {user}–ის მიერ", + "group" : "ჯგუფი", "Unshare" : "გაუზიარებადი", "can edit" : "შეგიძლია შეცვლა", - "access control" : "დაშვების კონტროლი", "create" : "შექმნა", "delete" : "წაშლა", - "Password protected" : "პაროლით დაცული", - "Error unsetting expiration date" : "შეცდომა ვადის გასვლის მოხსნის დროს", - "Error setting expiration date" : "შეცდომა ვადის გასვლის მითითების დროს", - "Sending ..." : "გაგზავნა ....", - "Email sent" : "იმეილი გაიგზავნა", + "access control" : "დაშვების კონტროლი", + "Share" : "გაზიარება", "Warning" : "გაფრთხილება", "The object type is not specified." : "ობიექტის ტიპი არ არის მითითებული.", "Delete" : "წაშლა", diff --git a/core/l10n/ka_GE.json b/core/l10n/ka_GE.json index 85fecffe0c0..f7cb23adc60 100644 --- a/core/l10n/ka_GE.json +++ b/core/l10n/ka_GE.json @@ -50,29 +50,27 @@ "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}–ის მიერ", - "Share" : "გაზიარება", - "Password protect" : "პაროლით დაცვა", - "Password" : "პაროლი", - "Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა", - "Send" : "გაგზავნა", + "Error setting expiration date" : "შეცდომა ვადის გასვლის მითითების დროს", "Set expiration date" : "მიუთითე ვადის გასვლის დრო", "Expiration" : "ვადის გასვლის დრო", "Expiration date" : "ვადის გასვლის დრო", - "group" : "ჯგუფი", + "Sending ..." : "გაგზავნა ....", + "Email sent" : "იმეილი გაიგზავნა", "Resharing is not allowed" : "მეორეჯერ გაზიარება არ არის დაშვებული", + "Password protect" : "პაროლით დაცვა", + "Password" : "პაროლი", + "Email link to person" : "ლინკის პიროვნების იმეილზე გაგზავნა", + "Send" : "გაგზავნა", + "Shared with you and the group {group} by {owner}" : "გაზიარდა თქვენთვის და ჯგუფისთვის {group}, {owner}–ის მიერ", + "Shared with you by {owner}" : "გაზიარდა თქვენთვის {owner}–ის მიერ", "Shared in {item} with {user}" : "გაზიარდა {item}–ში {user}–ის მიერ", + "group" : "ჯგუფი", "Unshare" : "გაუზიარებადი", "can edit" : "შეგიძლია შეცვლა", - "access control" : "დაშვების კონტროლი", "create" : "შექმნა", "delete" : "წაშლა", - "Password protected" : "პაროლით დაცული", - "Error unsetting expiration date" : "შეცდომა ვადის გასვლის მოხსნის დროს", - "Error setting expiration date" : "შეცდომა ვადის გასვლის მითითების დროს", - "Sending ..." : "გაგზავნა ....", - "Email sent" : "იმეილი გაიგზავნა", + "access control" : "დაშვების კონტროლი", + "Share" : "გაზიარება", "Warning" : "გაფრთხილება", "The object type is not specified." : "ობიექტის ტიპი არ არის მითითებული.", "Delete" : "წაშლა", diff --git a/core/l10n/km.js b/core/l10n/km.js index b2d3fa069e8..b9a676b12ce 100644 --- a/core/l10n/km.js +++ b/core/l10n/km.js @@ -63,26 +63,25 @@ OC.L10N.register( "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}", - "Share" : "ចែករំលែក", - "Password protect" : "ការពារដោយពាក្យសម្ងាត់", - "Password" : "ពាក្យសម្ងាត់", - "Send" : "ផ្ញើ", "Set expiration date" : "កំណត់ពេលផុតកំណត់", "Expiration date" : "ពេលផុតកំណត់", - "group" : "ក្រុម", + "Sending ..." : "កំពុងផ្ញើ ...", + "Email sent" : "បានផ្ញើអ៊ីមែល", "Resharing is not allowed" : "មិនអនុញ្ញាតឲ្យមានការចែករំលែកឡើងវិញ", + "Password protect" : "ការពារដោយពាក្យសម្ងាត់", + "Password" : "ពាក្យសម្ងាត់", + "Send" : "ផ្ញើ", + "Shared with you and the group {group} by {owner}" : "បានចែករំលែកជាមួយអ្នក និងក្រុម {group} ដោយ {owner}", + "Shared with you by {owner}" : "បានចែករំលែកជាមួយអ្នកដោយ {owner}", "Shared in {item} with {user}" : "បានចែករំលែកក្នុង {item} ជាមួយ {user}", + "group" : "ក្រុម", "Unshare" : "លែងចែករំលែក", "can share" : "អាចចែករំលែក", "can edit" : "អាចកែប្រែ", - "access control" : "សិទ្ធិបញ្ជា", "create" : "បង្កើត", "delete" : "លុប", - "Password protected" : "បានការពារដោយពាក្យសម្ងាត់", - "Sending ..." : "កំពុងផ្ញើ ...", - "Email sent" : "បានផ្ញើអ៊ីមែល", + "access control" : "សិទ្ធិបញ្ជា", + "Share" : "ចែករំលែក", "Warning" : "បម្រាម", "The object type is not specified." : "មិនបានកំណត់ប្រភេទវត្ថុ។", "Delete" : "លុប", @@ -109,6 +108,7 @@ OC.L10N.register( "Finishing …" : "កំពុងបញ្ចប់ ...", "Log out" : "ចាកចេញ", "Search" : "ស្វែងរក", + "Log in" : "ចូល", "remember" : "ចងចាំ", "Alternative Logins" : "ការចូលជំនួស" }, diff --git a/core/l10n/km.json b/core/l10n/km.json index b8307fb08de..5815f6cd91d 100644 --- a/core/l10n/km.json +++ b/core/l10n/km.json @@ -61,26 +61,25 @@ "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}", - "Share" : "ចែករំលែក", - "Password protect" : "ការពារដោយពាក្យសម្ងាត់", - "Password" : "ពាក្យសម្ងាត់", - "Send" : "ផ្ញើ", "Set expiration date" : "កំណត់ពេលផុតកំណត់", "Expiration date" : "ពេលផុតកំណត់", - "group" : "ក្រុម", + "Sending ..." : "កំពុងផ្ញើ ...", + "Email sent" : "បានផ្ញើអ៊ីមែល", "Resharing is not allowed" : "មិនអនុញ្ញាតឲ្យមានការចែករំលែកឡើងវិញ", + "Password protect" : "ការពារដោយពាក្យសម្ងាត់", + "Password" : "ពាក្យសម្ងាត់", + "Send" : "ផ្ញើ", + "Shared with you and the group {group} by {owner}" : "បានចែករំលែកជាមួយអ្នក និងក្រុម {group} ដោយ {owner}", + "Shared with you by {owner}" : "បានចែករំលែកជាមួយអ្នកដោយ {owner}", "Shared in {item} with {user}" : "បានចែករំលែកក្នុង {item} ជាមួយ {user}", + "group" : "ក្រុម", "Unshare" : "លែងចែករំលែក", "can share" : "អាចចែករំលែក", "can edit" : "អាចកែប្រែ", - "access control" : "សិទ្ធិបញ្ជា", "create" : "បង្កើត", "delete" : "លុប", - "Password protected" : "បានការពារដោយពាក្យសម្ងាត់", - "Sending ..." : "កំពុងផ្ញើ ...", - "Email sent" : "បានផ្ញើអ៊ីមែល", + "access control" : "សិទ្ធិបញ្ជា", + "Share" : "ចែករំលែក", "Warning" : "បម្រាម", "The object type is not specified." : "មិនបានកំណត់ប្រភេទវត្ថុ។", "Delete" : "លុប", @@ -107,6 +106,7 @@ "Finishing …" : "កំពុងបញ្ចប់ ...", "Log out" : "ចាកចេញ", "Search" : "ស្វែងរក", + "Log in" : "ចូល", "remember" : "ចងចាំ", "Alternative Logins" : "ការចូលជំនួស" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/core/l10n/kn.js b/core/l10n/kn.js index d4743271ae8..eedf9576b5f 100644 --- a/core/l10n/kn.js +++ b/core/l10n/kn.js @@ -65,11 +65,15 @@ OC.L10N.register( "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} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", - "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", - "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", + "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ", "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ", + "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ", + "Expiration" : "ಮುಕ್ತಾಯ", + "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ", + "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", + "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ", + "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ", + "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", "Password protect" : "ಗುಪ್ತಪದ ರಕ್ಷಿಸಿಕೂಳ್ಲಿ", "Password" : "ಗುಪ್ತಪದ", @@ -77,27 +81,20 @@ OC.L10N.register( "Allow editing" : "ಸಂಪಾದನೆಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡಿ", "Email link to person" : "ಬಳಕೆದಾರನ ಇ-ಅಂಚೆಯ ಸಂಪರ್ಕಕೊಂಡಿ", "Send" : "ಕಳುಹಿಸಿ", - "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ", - "Expiration" : "ಮುಕ್ತಾಯ", - "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ", - "Adding user..." : "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ ...", + "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", + "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", + "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ", "group" : "ಗುಂಪು", "remote" : "ಆಚೆಯ", - "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ", - "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ", - "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "notify by email" : "ಇ-ಅಂಚೆ ಮೂಲಕ ತಿಳಿಸಲು", + "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "can share" : "ಹಂಚಿಕೊಳ್ಳಬಹುದು", "can edit" : "ಸಂಪಾದಿಸಬಹುದು", - "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ", "create" : "ಸೃಷ್ಟಿಸು", "change" : "ಬದಲಾವಣೆ", "delete" : "ಅಳಿಸಿ", - "Password protected" : "ಗುಪ್ತಪದದಿಂದ ರಕ್ಷಿಸಲಾಗಿದೆ", - "Error unsetting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಹಿಂಪಡೆಯುವಲಿ್ಲ ದೋಷ", - "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ", - "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", - "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ", + "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ", + "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", "Warning" : "ಎಚ್ಚರಿಕೆ", "The object type is not specified." : "ವಸ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ.", "Enter new" : "ಹೊಸ ನಮೂದನೆ", diff --git a/core/l10n/kn.json b/core/l10n/kn.json index 0522fbd957c..8529456f28b 100644 --- a/core/l10n/kn.json +++ b/core/l10n/kn.json @@ -63,11 +63,15 @@ "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} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", - "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", - "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", + "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ", "The public link will expire no later than {days} days after it is created" : "ರಚನೆಯಾದ {days} ದಿನಗಳ ನಂತರ ಈ ಸಾರ್ವಜನಿಕ ಸಂಪರ್ಕ ಕೊಂಡಿ ಅಂತ್ಯಗೊಳ್ಳಲಿದೆ", + "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ", + "Expiration" : "ಮುಕ್ತಾಯ", + "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ", + "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", + "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ", + "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ", + "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", "Link" : "ಸಂಪರ್ಕ ಕೊಂಡಿ", "Password protect" : "ಗುಪ್ತಪದ ರಕ್ಷಿಸಿಕೂಳ್ಲಿ", "Password" : "ಗುಪ್ತಪದ", @@ -75,27 +79,20 @@ "Allow editing" : "ಸಂಪಾದನೆಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡಿ", "Email link to person" : "ಬಳಕೆದಾರನ ಇ-ಅಂಚೆಯ ಸಂಪರ್ಕಕೊಂಡಿ", "Send" : "ಕಳುಹಿಸಿ", - "Set expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸಿ", - "Expiration" : "ಮುಕ್ತಾಯ", - "Expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕ", - "Adding user..." : "ಬಳಕೆದಾರನನ್ನು ಸೇರಿಸಲಾಗುತ್ತಿದೆ ...", + "Shared with you and the group {group} by {owner}" : "ನಿಮಗೆ ಮತ್ತು {group} ಗುಂಪಿನೂಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", + "Shared with you by {owner}" : "ನಿಮ್ಮೊಂದಿಗೆ {owner} ಹಂಚಿಕೊಂಡಿದ್ದಾರೆ", + "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ", "group" : "ಗುಂಪು", "remote" : "ಆಚೆಯ", - "Resharing is not allowed" : "ಮರುಹಂಚಿಕೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ", - "Shared in {item} with {user}" : "{user} ಜೊತೆ {item} ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ", - "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "notify by email" : "ಇ-ಅಂಚೆ ಮೂಲಕ ತಿಳಿಸಲು", + "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", "can share" : "ಹಂಚಿಕೊಳ್ಳಬಹುದು", "can edit" : "ಸಂಪಾದಿಸಬಹುದು", - "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ", "create" : "ಸೃಷ್ಟಿಸು", "change" : "ಬದಲಾವಣೆ", "delete" : "ಅಳಿಸಿ", - "Password protected" : "ಗುಪ್ತಪದದಿಂದ ರಕ್ಷಿಸಲಾಗಿದೆ", - "Error unsetting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಹಿಂಪಡೆಯುವಲಿ್ಲ ದೋಷ", - "Error setting expiration date" : "ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ನಿರ್ದರಿಸುವಲ್ಲಿ ದೋಷ", - "Sending ..." : "ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ ...", - "Email sent" : "ಇ-ಅಂಚೆ ಕಳುಹಿಸಲಾಗಿದೆ", + "access control" : "ಪ್ರವೇಶ ನಿಯಂತ್ರಣ", + "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", "Warning" : "ಎಚ್ಚರಿಕೆ", "The object type is not specified." : "ವಸ್ತು ಮಾದರಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿಲ್ಲ.", "Enter new" : "ಹೊಸ ನಮೂದನೆ", diff --git a/core/l10n/ko.js b/core/l10n/ko.js index 56fe67b553b..c6ebf5e502f 100644 --- a/core/l10n/ko.js +++ b/core/l10n/ko.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "공유하는 중 오류 발생", "Error while unsharing" : "공유 해제하는 중 오류 발생", "Error while changing permissions" : "권한 변경하는 중 오류 발생", - "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", - "Shared with you by {owner}" : "{owner} 님이 공유 중", - "Share with users or groups …" : "사용자 및 그룹과 공유...", - "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", - "Share" : "공유", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", - "Share link" : "링크 공유", + "Error setting expiration date" : "만료 날짜 설정 오류", "The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다", + "Set expiration date" : "만료 날짜 설정", + "Expiration" : "만료", + "Expiration date" : "만료 날짜", + "Sending ..." : "전송 중...", + "Email sent" : "이메일 발송됨", + "Resharing is not allowed" : "다시 공유할 수 없습니다", + "Share link" : "링크 공유", "Link" : "링크", "Password protect" : "암호 보호", "Password" : "암호", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "편집 허용", "Email link to person" : "이메일 주소", "Send" : "전송", - "Set expiration date" : "만료 날짜 설정", - "Expiration" : "만료", - "Expiration date" : "만료 날짜", - "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", - "Adding user..." : "사용자 추가 중...", + "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", + "Shared with you by {owner}" : "{owner} 님이 공유 중", + "Shared in {item} with {user}" : "{user} 님과 {item}에서 공유 중", "group" : "그룹", "remote" : "원격", - "Resharing is not allowed" : "다시 공유할 수 없습니다", - "Shared in {item} with {user}" : "{user} 님과 {item}에서 공유 중", - "Unshare" : "공유 해제", "notify by email" : "이메일로 알림", + "Unshare" : "공유 해제", "can share" : "공유 가능", "can edit" : "편집 가능", - "access control" : "접근 제어", "create" : "생성", "change" : "변경", "delete" : "삭제", - "Password protected" : "암호로 보호됨", - "Error unsetting expiration date" : "만료 날짜 해제 오류", - "Error setting expiration date" : "만료 날짜 설정 오류", - "Sending ..." : "전송 중...", - "Email sent" : "이메일 발송됨", + "access control" : "접근 제어", + "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", + "Share" : "공유", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", + "Share with users or groups …" : "사용자 및 그룹과 공유...", + "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", "Warning" : "경고", "The object type is not specified." : "객체 유형이 지정되지 않았습니다.", "Enter new" : "새로운 값 입력", diff --git a/core/l10n/ko.json b/core/l10n/ko.json index 1e1f427ecb4..5bbb99e89dd 100644 --- a/core/l10n/ko.json +++ b/core/l10n/ko.json @@ -114,14 +114,15 @@ "Error while sharing" : "공유하는 중 오류 발생", "Error while unsharing" : "공유 해제하는 중 오류 발생", "Error while changing permissions" : "권한 변경하는 중 오류 발생", - "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", - "Shared with you by {owner}" : "{owner} 님이 공유 중", - "Share with users or groups …" : "사용자 및 그룹과 공유...", - "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", - "Share" : "공유", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", - "Share link" : "링크 공유", + "Error setting expiration date" : "만료 날짜 설정 오류", "The public link will expire no later than {days} days after it is created" : "공개 링크를 만든 후 최대 {days}일까지 유지됩니다", + "Set expiration date" : "만료 날짜 설정", + "Expiration" : "만료", + "Expiration date" : "만료 날짜", + "Sending ..." : "전송 중...", + "Email sent" : "이메일 발송됨", + "Resharing is not allowed" : "다시 공유할 수 없습니다", + "Share link" : "링크 공유", "Link" : "링크", "Password protect" : "암호 보호", "Password" : "암호", @@ -129,28 +130,24 @@ "Allow editing" : "편집 허용", "Email link to person" : "이메일 주소", "Send" : "전송", - "Set expiration date" : "만료 날짜 설정", - "Expiration" : "만료", - "Expiration date" : "만료 날짜", - "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", - "Adding user..." : "사용자 추가 중...", + "Shared with you and the group {group} by {owner}" : "{owner} 님이 여러분 및 그룹 {group}와(과) 공유 중", + "Shared with you by {owner}" : "{owner} 님이 공유 중", + "Shared in {item} with {user}" : "{user} 님과 {item}에서 공유 중", "group" : "그룹", "remote" : "원격", - "Resharing is not allowed" : "다시 공유할 수 없습니다", - "Shared in {item} with {user}" : "{user} 님과 {item}에서 공유 중", - "Unshare" : "공유 해제", "notify by email" : "이메일로 알림", + "Unshare" : "공유 해제", "can share" : "공유 가능", "can edit" : "편집 가능", - "access control" : "접근 제어", "create" : "생성", "change" : "변경", "delete" : "삭제", - "Password protected" : "암호로 보호됨", - "Error unsetting expiration date" : "만료 날짜 해제 오류", - "Error setting expiration date" : "만료 날짜 설정 오류", - "Sending ..." : "전송 중...", - "Email sent" : "이메일 발송됨", + "access control" : "접근 제어", + "An error occured. Please try again" : "오류가 발생하였습니다. 다시 시도하십시오.", + "Share" : "공유", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "username@example.com/owncloud 형식으로 다른 ownCloud 사용자와 공유할 수 있습니다", + "Share with users or groups …" : "사용자 및 그룹과 공유...", + "Share with users, groups or remote users …" : "사용자, 그룹 및 원격 사용자와 공유...", "Warning" : "경고", "The object type is not specified." : "객체 유형이 지정되지 않았습니다.", "Enter new" : "새로운 값 입력", diff --git a/core/l10n/ku_IQ.js b/core/l10n/ku_IQ.js index 033c0952f00..066e7c365bc 100644 --- a/core/l10n/ku_IQ.js +++ b/core/l10n/ku_IQ.js @@ -8,8 +8,8 @@ OC.L10N.register( "Ok" : "باشە", "Cancel" : "لابردن", "Error" : "ههڵه", - "Share" : "هاوبەشی کردن", "Password" : "وشەی تێپەربو", + "Share" : "هاوبەشی کردن", "Warning" : "ئاگاداری", "Add" : "زیادکردن", "New password" : "وشەی نهێنی نوێ", diff --git a/core/l10n/ku_IQ.json b/core/l10n/ku_IQ.json index 3acb06de048..601ad30d303 100644 --- a/core/l10n/ku_IQ.json +++ b/core/l10n/ku_IQ.json @@ -6,8 +6,8 @@ "Ok" : "باشە", "Cancel" : "لابردن", "Error" : "ههڵه", - "Share" : "هاوبەشی کردن", "Password" : "وشەی تێپەربو", + "Share" : "هاوبەشی کردن", "Warning" : "ئاگاداری", "Add" : "زیادکردن", "New password" : "وشەی نهێنی نوێ", diff --git a/core/l10n/lb.js b/core/l10n/lb.js index 4fa998c42f7..bcb7299962a 100644 --- a/core/l10n/lb.js +++ b/core/l10n/lb.js @@ -61,31 +61,29 @@ OC.L10N.register( "Error while sharing" : "Feeler beim Deelen", "Error while unsharing" : "Feeler beim Annuléiere vum Deelen", "Error while changing permissions" : "Feeler beim Ännere vun de Rechter", - "Shared with you and the group {group} by {owner}" : "Gedeelt mat dir an der Grupp {group} vum {owner}", - "Shared with you by {owner}" : "Gedeelt mat dir vum {owner}", - "Share" : "Deelen", + "Error setting expiration date" : "Feeler beim Setze vum Verfallsdatum", + "Set expiration date" : "Verfallsdatum setzen", + "Expiration date" : "Verfallsdatum", + "Sending ..." : "Gëtt geschéckt...", + "Email sent" : "Email geschéckt", + "Resharing is not allowed" : "Weiderdeelen ass net erlaabt", "Share link" : "Link deelen", "Password protect" : "Passwuertgeschützt", "Password" : "Passwuert", "Email link to person" : "Link enger Persoun mailen", "Send" : "Schécken", - "Set expiration date" : "Verfallsdatum setzen", - "Expiration date" : "Verfallsdatum", - "group" : "Grupp", - "Resharing is not allowed" : "Weiderdeelen ass net erlaabt", + "Shared with you and the group {group} by {owner}" : "Gedeelt mat dir an der Grupp {group} vum {owner}", + "Shared with you by {owner}" : "Gedeelt mat dir vum {owner}", "Shared in {item} with {user}" : "Gedeelt an {item} mat {user}", - "Unshare" : "Net méi deelen", + "group" : "Grupp", "notify by email" : "via e-mail Bescheed ginn", + "Unshare" : "Net méi deelen", "can share" : "kann deelen", "can edit" : "kann änneren", - "access control" : "Zougrëffskontroll", "create" : "erstellen", "delete" : "läschen", - "Password protected" : "Passwuertgeschützt", - "Error unsetting expiration date" : "Feeler beim Läsche vum Verfallsdatum", - "Error setting expiration date" : "Feeler beim Setze vum Verfallsdatum", - "Sending ..." : "Gëtt geschéckt...", - "Email sent" : "Email geschéckt", + "access control" : "Zougrëffskontroll", + "Share" : "Deelen", "Warning" : "Warnung", "The object type is not specified." : "Den Typ vum Object ass net uginn.", "Enter new" : "Gëff nei an", diff --git a/core/l10n/lb.json b/core/l10n/lb.json index 0a201c98f1c..1a20e751fd8 100644 --- a/core/l10n/lb.json +++ b/core/l10n/lb.json @@ -59,31 +59,29 @@ "Error while sharing" : "Feeler beim Deelen", "Error while unsharing" : "Feeler beim Annuléiere vum Deelen", "Error while changing permissions" : "Feeler beim Ännere vun de Rechter", - "Shared with you and the group {group} by {owner}" : "Gedeelt mat dir an der Grupp {group} vum {owner}", - "Shared with you by {owner}" : "Gedeelt mat dir vum {owner}", - "Share" : "Deelen", + "Error setting expiration date" : "Feeler beim Setze vum Verfallsdatum", + "Set expiration date" : "Verfallsdatum setzen", + "Expiration date" : "Verfallsdatum", + "Sending ..." : "Gëtt geschéckt...", + "Email sent" : "Email geschéckt", + "Resharing is not allowed" : "Weiderdeelen ass net erlaabt", "Share link" : "Link deelen", "Password protect" : "Passwuertgeschützt", "Password" : "Passwuert", "Email link to person" : "Link enger Persoun mailen", "Send" : "Schécken", - "Set expiration date" : "Verfallsdatum setzen", - "Expiration date" : "Verfallsdatum", - "group" : "Grupp", - "Resharing is not allowed" : "Weiderdeelen ass net erlaabt", + "Shared with you and the group {group} by {owner}" : "Gedeelt mat dir an der Grupp {group} vum {owner}", + "Shared with you by {owner}" : "Gedeelt mat dir vum {owner}", "Shared in {item} with {user}" : "Gedeelt an {item} mat {user}", - "Unshare" : "Net méi deelen", + "group" : "Grupp", "notify by email" : "via e-mail Bescheed ginn", + "Unshare" : "Net méi deelen", "can share" : "kann deelen", "can edit" : "kann änneren", - "access control" : "Zougrëffskontroll", "create" : "erstellen", "delete" : "läschen", - "Password protected" : "Passwuertgeschützt", - "Error unsetting expiration date" : "Feeler beim Läsche vum Verfallsdatum", - "Error setting expiration date" : "Feeler beim Setze vum Verfallsdatum", - "Sending ..." : "Gëtt geschéckt...", - "Email sent" : "Email geschéckt", + "access control" : "Zougrëffskontroll", + "Share" : "Deelen", "Warning" : "Warnung", "The object type is not specified." : "Den Typ vum Object ass net uginn.", "Enter new" : "Gëff nei an", diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js index f36b66dcf52..d0a464b1a54 100644 --- a/core/l10n/lt_LT.js +++ b/core/l10n/lt_LT.js @@ -72,35 +72,33 @@ OC.L10N.register( "Error while sharing" : "Klaida, dalijimosi metu", "Error while unsharing" : "Klaida, kai atšaukiamas dalijimasis", "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" : "Dalintis", + "Error setting expiration date" : "Klaida nustatant galiojimo laiką", + "Set expiration date" : "Nustatykite galiojimo laiką", + "Expiration" : "Galiojimo laikas", + "Expiration date" : "Galiojimo laikas", + "Sending ..." : "Siunčiama...", + "Email sent" : "Laiškas išsiųstas", + "Resharing is not allowed" : "Dalijinasis išnaujo negalimas", "Share link" : "Dalintis nuoroda", "Link" : "Nuoroda", "Password protect" : "Apsaugotas slaptažodžiu", "Password" : "Slaptažodis", "Email link to person" : "Nusiųsti nuorodą paštu", "Send" : "Siųsti", - "Set expiration date" : "Nustatykite galiojimo laiką", - "Expiration" : "Galiojimo laikas", - "Expiration date" : "Galiojimo laikas", + "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}", + "Shared in {item} with {user}" : "Pasidalino {item} su {user}", "group" : "grupė", "remote" : "nutolęs", - "Resharing is not allowed" : "Dalijinasis išnaujo negalimas", - "Shared in {item} with {user}" : "Pasidalino {item} su {user}", - "Unshare" : "Nebesidalinti", "notify by email" : "pranešti el. paštu", + "Unshare" : "Nebesidalinti", "can share" : "gali dalintis", "can edit" : "gali redaguoti", - "access control" : "priėjimo kontrolė", "create" : "sukurti", "change" : "keisti", "delete" : "ištrinti", - "Password protected" : "Apsaugota slaptažodžiu", - "Error unsetting expiration date" : "Klaida nuimant galiojimo laiką", - "Error setting expiration date" : "Klaida nustatant galiojimo laiką", - "Sending ..." : "Siunčiama...", - "Email sent" : "Laiškas išsiųstas", + "access control" : "priėjimo kontrolė", + "Share" : "Dalintis", "Warning" : "Įspėjimas", "The object type is not specified." : "Objekto tipas nenurodytas.", "Enter new" : "Įveskite naują", diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json index 5261b7ee070..dbedb34be2d 100644 --- a/core/l10n/lt_LT.json +++ b/core/l10n/lt_LT.json @@ -70,35 +70,33 @@ "Error while sharing" : "Klaida, dalijimosi metu", "Error while unsharing" : "Klaida, kai atšaukiamas dalijimasis", "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" : "Dalintis", + "Error setting expiration date" : "Klaida nustatant galiojimo laiką", + "Set expiration date" : "Nustatykite galiojimo laiką", + "Expiration" : "Galiojimo laikas", + "Expiration date" : "Galiojimo laikas", + "Sending ..." : "Siunčiama...", + "Email sent" : "Laiškas išsiųstas", + "Resharing is not allowed" : "Dalijinasis išnaujo negalimas", "Share link" : "Dalintis nuoroda", "Link" : "Nuoroda", "Password protect" : "Apsaugotas slaptažodžiu", "Password" : "Slaptažodis", "Email link to person" : "Nusiųsti nuorodą paštu", "Send" : "Siųsti", - "Set expiration date" : "Nustatykite galiojimo laiką", - "Expiration" : "Galiojimo laikas", - "Expiration date" : "Galiojimo laikas", + "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}", + "Shared in {item} with {user}" : "Pasidalino {item} su {user}", "group" : "grupė", "remote" : "nutolęs", - "Resharing is not allowed" : "Dalijinasis išnaujo negalimas", - "Shared in {item} with {user}" : "Pasidalino {item} su {user}", - "Unshare" : "Nebesidalinti", "notify by email" : "pranešti el. paštu", + "Unshare" : "Nebesidalinti", "can share" : "gali dalintis", "can edit" : "gali redaguoti", - "access control" : "priėjimo kontrolė", "create" : "sukurti", "change" : "keisti", "delete" : "ištrinti", - "Password protected" : "Apsaugota slaptažodžiu", - "Error unsetting expiration date" : "Klaida nuimant galiojimo laiką", - "Error setting expiration date" : "Klaida nustatant galiojimo laiką", - "Sending ..." : "Siunčiama...", - "Email sent" : "Laiškas išsiųstas", + "access control" : "priėjimo kontrolė", + "Share" : "Dalintis", "Warning" : "Įspėjimas", "The object type is not specified." : "Objekto tipas nenurodytas.", "Enter new" : "Įveskite naują", diff --git a/core/l10n/lv.js b/core/l10n/lv.js index d7905ef30a7..54beb6a107b 100644 --- a/core/l10n/lv.js +++ b/core/l10n/lv.js @@ -67,29 +67,27 @@ OC.L10N.register( "Error while sharing" : "Kļūda, daloties", "Error while unsharing" : "Kļūda, beidzot dalīties", "Error while changing permissions" : "Kļūda, mainot atļaujas", - "Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}", - "Shared with you by {owner}" : "{owner} dalījās ar jums", - "Share" : "Dalīties", + "Error setting expiration date" : "Kļūda, iestatot termiņa datumu", + "Set expiration date" : "Iestaties termiņa datumu", + "Expiration date" : "Termiņa datums", + "Sending ..." : "Sūta...", + "Email sent" : "Vēstule nosūtīta", + "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta", "Password protect" : "Aizsargāt ar paroli", "Password" : "Parole", "Email link to person" : "Sūtīt saiti personai pa e-pastu", "Send" : "Sūtīt", - "Set expiration date" : "Iestaties termiņa datumu", - "Expiration date" : "Termiņa datums", - "group" : "grupa", - "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta", + "Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}", + "Shared with you by {owner}" : "{owner} dalījās ar jums", "Shared in {item} with {user}" : "Dalījās ar {item} ar {user}", + "group" : "grupa", "Unshare" : "Pārtraukt dalīšanos", "can share" : "Var dalīties", "can edit" : "var rediģēt", - "access control" : "piekļuves vadība", "create" : "izveidot", "delete" : "dzēst", - "Password protected" : "Aizsargāts ar paroli", - "Error unsetting expiration date" : "Kļūda, noņemot termiņa datumu", - "Error setting expiration date" : "Kļūda, iestatot termiņa datumu", - "Sending ..." : "Sūta...", - "Email sent" : "Vēstule nosūtīta", + "access control" : "piekļuves vadība", + "Share" : "Dalīties", "Warning" : "Brīdinājums", "The object type is not specified." : "Nav norādīts objekta tips.", "Delete" : "Dzēst", diff --git a/core/l10n/lv.json b/core/l10n/lv.json index 49188f77e89..b874c1f4008 100644 --- a/core/l10n/lv.json +++ b/core/l10n/lv.json @@ -65,29 +65,27 @@ "Error while sharing" : "Kļūda, daloties", "Error while unsharing" : "Kļūda, beidzot dalīties", "Error while changing permissions" : "Kļūda, mainot atļaujas", - "Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}", - "Shared with you by {owner}" : "{owner} dalījās ar jums", - "Share" : "Dalīties", + "Error setting expiration date" : "Kļūda, iestatot termiņa datumu", + "Set expiration date" : "Iestaties termiņa datumu", + "Expiration date" : "Termiņa datums", + "Sending ..." : "Sūta...", + "Email sent" : "Vēstule nosūtīta", + "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta", "Password protect" : "Aizsargāt ar paroli", "Password" : "Parole", "Email link to person" : "Sūtīt saiti personai pa e-pastu", "Send" : "Sūtīt", - "Set expiration date" : "Iestaties termiņa datumu", - "Expiration date" : "Termiņa datums", - "group" : "grupa", - "Resharing is not allowed" : "Atkārtota dalīšanās nav atļauta", + "Shared with you and the group {group} by {owner}" : "{owner} dalījās ar jums un grupu {group}", + "Shared with you by {owner}" : "{owner} dalījās ar jums", "Shared in {item} with {user}" : "Dalījās ar {item} ar {user}", + "group" : "grupa", "Unshare" : "Pārtraukt dalīšanos", "can share" : "Var dalīties", "can edit" : "var rediģēt", - "access control" : "piekļuves vadība", "create" : "izveidot", "delete" : "dzēst", - "Password protected" : "Aizsargāts ar paroli", - "Error unsetting expiration date" : "Kļūda, noņemot termiņa datumu", - "Error setting expiration date" : "Kļūda, iestatot termiņa datumu", - "Sending ..." : "Sūta...", - "Email sent" : "Vēstule nosūtīta", + "access control" : "piekļuves vadība", + "Share" : "Dalīties", "Warning" : "Brīdinājums", "The object type is not specified." : "Nav norādīts objekta tips.", "Delete" : "Dzēst", diff --git a/core/l10n/mk.js b/core/l10n/mk.js index e960bb4b7f6..26d0f8f2152 100644 --- a/core/l10n/mk.js +++ b/core/l10n/mk.js @@ -98,34 +98,32 @@ OC.L10N.register( "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}", - "Share with users or groups …" : "Сподели со корисници или групи ...", - "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", - "Share" : "Сподели", + "Error setting expiration date" : "Грешка при поставување на рок на траење", + "Set expiration date" : "Постави рок на траење", + "Expiration" : "Истекување", + "Expiration date" : "Рок на траење", + "Sending ..." : "Праќање...", + "Email sent" : "Е-порака пратена", + "Resharing is not allowed" : "Повторно споделување не е дозволено", "Share link" : "Сподели ја врската", "Password protect" : "Заштити со лозинка", "Password" : "Лозинка", "Email link to person" : "Прати врска по е-пошта на личност", "Send" : "Прати", - "Set expiration date" : "Постави рок на траење", - "Expiration" : "Истекување", - "Expiration date" : "Рок на траење", - "group" : "група", - "Resharing is not allowed" : "Повторно споделување не е дозволено", + "Shared with you and the group {group} by {owner}" : "Споделено со Вас и групата {group} од {owner}", + "Shared with you by {owner}" : "Споделено со Вас од {owner}", "Shared in {item} with {user}" : "Споделено во {item} со {user}", - "Unshare" : "Не споделувај", + "group" : "група", "notify by email" : "извести преку електронска пошта", + "Unshare" : "Не споделувај", "can share" : "може да споделува", "can edit" : "може да се измени", - "access control" : "контрола на пристап", "create" : "креирај", "delete" : "избриши", - "Password protected" : "Заштитено со лозинка", - "Error unsetting expiration date" : "Грешка при тргање на рокот на траење", - "Error setting expiration date" : "Грешка при поставување на рок на траење", - "Sending ..." : "Праќање...", - "Email sent" : "Е-порака пратена", + "access control" : "контрола на пристап", + "Share" : "Сподели", + "Share with users or groups …" : "Сподели со корисници или групи ...", + "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", "Warning" : "Предупредување", "The object type is not specified." : "Не е специфициран типот на објект.", "Enter new" : "Внеси нов", diff --git a/core/l10n/mk.json b/core/l10n/mk.json index 722af208b2c..60dfe4305c7 100644 --- a/core/l10n/mk.json +++ b/core/l10n/mk.json @@ -96,34 +96,32 @@ "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}", - "Share with users or groups …" : "Сподели со корисници или групи ...", - "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", - "Share" : "Сподели", + "Error setting expiration date" : "Грешка при поставување на рок на траење", + "Set expiration date" : "Постави рок на траење", + "Expiration" : "Истекување", + "Expiration date" : "Рок на траење", + "Sending ..." : "Праќање...", + "Email sent" : "Е-порака пратена", + "Resharing is not allowed" : "Повторно споделување не е дозволено", "Share link" : "Сподели ја врската", "Password protect" : "Заштити со лозинка", "Password" : "Лозинка", "Email link to person" : "Прати врска по е-пошта на личност", "Send" : "Прати", - "Set expiration date" : "Постави рок на траење", - "Expiration" : "Истекување", - "Expiration date" : "Рок на траење", - "group" : "група", - "Resharing is not allowed" : "Повторно споделување не е дозволено", + "Shared with you and the group {group} by {owner}" : "Споделено со Вас и групата {group} од {owner}", + "Shared with you by {owner}" : "Споделено со Вас од {owner}", "Shared in {item} with {user}" : "Споделено во {item} со {user}", - "Unshare" : "Не споделувај", + "group" : "група", "notify by email" : "извести преку електронска пошта", + "Unshare" : "Не споделувај", "can share" : "може да споделува", "can edit" : "може да се измени", - "access control" : "контрола на пристап", "create" : "креирај", "delete" : "избриши", - "Password protected" : "Заштитено со лозинка", - "Error unsetting expiration date" : "Грешка при тргање на рокот на траење", - "Error setting expiration date" : "Грешка при поставување на рок на траење", - "Sending ..." : "Праќање...", - "Email sent" : "Е-порака пратена", + "access control" : "контрола на пристап", + "Share" : "Сподели", + "Share with users or groups …" : "Сподели со корисници или групи ...", + "Share with users, groups or remote users …" : "Споделено со корисници, групи или оддалечени корисници ...", "Warning" : "Предупредување", "The object type is not specified." : "Не е специфициран типот на објект.", "Enter new" : "Внеси нов", diff --git a/core/l10n/mn.js b/core/l10n/mn.js index bc1ffe9f8bd..50455e72e6f 100644 --- a/core/l10n/mn.js +++ b/core/l10n/mn.js @@ -9,8 +9,8 @@ OC.L10N.register( "Friday" : "Баасан", "Saturday" : "Бямба", "Settings" : "Тохиргоо", - "Share" : "Түгээх", "Password" : "Нууц үг", + "Share" : "Түгээх", "Username" : "Хэрэглэгчийн нэр" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/mn.json b/core/l10n/mn.json index 02a523dc003..ebf73090f9a 100644 --- a/core/l10n/mn.json +++ b/core/l10n/mn.json @@ -7,8 +7,8 @@ "Friday" : "Баасан", "Saturday" : "Бямба", "Settings" : "Тохиргоо", - "Share" : "Түгээх", "Password" : "Нууц үг", + "Share" : "Түгээх", "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 cd2c54abf4a..e3149592767 100644 --- a/core/l10n/ms_MY.js +++ b/core/l10n/ms_MY.js @@ -46,12 +46,12 @@ OC.L10N.register( "Ok" : "Ok", "Cancel" : "Batal", "Error" : "Ralat", - "Share" : "Kongsi", "Password" : "Kata laluan", "Send" : "Hantar", "group" : "kumpulan", "can share" : "boleh berkongsi", "can edit" : "boleh mengubah", + "Share" : "Kongsi", "Warning" : "Amaran", "Delete" : "Padam", "Add" : "Tambah", @@ -75,6 +75,7 @@ OC.L10N.register( "Finish setup" : "Setup selesai", "Log out" : "Log keluar", "Search" : "Cari", + "Log in" : "Log masuk", "remember" : "ingat" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/ms_MY.json b/core/l10n/ms_MY.json index 7e8fa3e0856..8ac3b4eebe2 100644 --- a/core/l10n/ms_MY.json +++ b/core/l10n/ms_MY.json @@ -44,12 +44,12 @@ "Ok" : "Ok", "Cancel" : "Batal", "Error" : "Ralat", - "Share" : "Kongsi", "Password" : "Kata laluan", "Send" : "Hantar", "group" : "kumpulan", "can share" : "boleh berkongsi", "can edit" : "boleh mengubah", + "Share" : "Kongsi", "Warning" : "Amaran", "Delete" : "Padam", "Add" : "Tambah", @@ -73,6 +73,7 @@ "Finish setup" : "Setup selesai", "Log out" : "Log keluar", "Search" : "Cari", + "Log in" : "Log masuk", "remember" : "ingat" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/my_MM.js b/core/l10n/my_MM.js index a885e55a228..564eaebeeec 100644 --- a/core/l10n/my_MM.js +++ b/core/l10n/my_MM.js @@ -18,14 +18,13 @@ OC.L10N.register( "Choose" : "ရွေးချယ်", "Ok" : "အိုကေ", "Cancel" : "ပယ်ဖျက်မည်", - "Password" : "စကားဝှက်", "Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်", "Expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်", "Resharing is not allowed" : "ပြန်လည်ဝေမျှခြင်းခွင့်မပြုပါ", + "Password" : "စကားဝှက်", "can edit" : "ပြင်ဆင်နိုင်", "create" : "ဖန်တီးမည်", "delete" : "ဖျက်မည်", - "Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်", "Add" : "ပေါင်းထည့်", "New password" : "စကားဝှက်အသစ်", "Users" : "သုံးစွဲသူ", @@ -39,6 +38,7 @@ OC.L10N.register( "Database password" : "Database စကားဝှက်", "Database name" : "Database အမည်", "Finish setup" : "တပ်ဆင်ခြင်းပြီးပါပြီ။", + "Log in" : "ဝင်ရောက်ရန်", "remember" : "မှတ်မိစေသည်" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/my_MM.json b/core/l10n/my_MM.json index a505042f7e1..6840d924488 100644 --- a/core/l10n/my_MM.json +++ b/core/l10n/my_MM.json @@ -16,14 +16,13 @@ "Choose" : "ရွေးချယ်", "Ok" : "အိုကေ", "Cancel" : "ပယ်ဖျက်မည်", - "Password" : "စကားဝှက်", "Set expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်သတ်မှတ်မည်", "Expiration date" : "သက်တမ်းကုန်ဆုံးမည့်ရက်", "Resharing is not allowed" : "ပြန်လည်ဝေမျှခြင်းခွင့်မပြုပါ", + "Password" : "စကားဝှက်", "can edit" : "ပြင်ဆင်နိုင်", "create" : "ဖန်တီးမည်", "delete" : "ဖျက်မည်", - "Password protected" : "စကားဝှက်ဖြင့်ကာကွယ်ထားသည်", "Add" : "ပေါင်းထည့်", "New password" : "စကားဝှက်အသစ်", "Users" : "သုံးစွဲသူ", @@ -37,6 +36,7 @@ "Database password" : "Database စကားဝှက်", "Database name" : "Database အမည်", "Finish setup" : "တပ်ဆင်ခြင်းပြီးပါပြီ။", + "Log in" : "ဝင်ရောက်ရန်", "remember" : "မှတ်မိစေသည်" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index 2dc995b2a98..d95186a94db 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Feil under deling", "Error while unsharing" : "Feil ved oppheving av deling", "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 users or groups …" : "Del med brukere eller grupper ...", - "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", - "Share" : "Del", - "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", + "Error setting expiration date" : "Kan ikke sette utløpsdato", "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", + "Set expiration date" : "Sett utløpsdato", + "Expiration" : "Utløpsdato", + "Expiration date" : "Utløpsdato", + "Sending ..." : "Sender...", + "Email sent" : "E-post sendt", + "Resharing is not allowed" : "Videre deling er ikke tillatt", + "Share link" : "Del lenke", "Link" : "Lenke", "Password protect" : "Passordbeskyttet", "Password" : "Passord", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Tillat redigering", "Email link to person" : "Email lenke til person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Delt i {item} med {user}", "group" : "gruppe", "remote" : "ekstern", - "Resharing is not allowed" : "Videre deling er ikke tillatt", - "Shared in {item} with {user}" : "Delt i {item} med {user}", - "Unshare" : "Avslutt deling", "notify by email" : "Varsle på email", + "Unshare" : "Avslutt deling", "can share" : "kan dele", "can edit" : "kan endre", - "access control" : "tilgangskontroll", "create" : "opprette", "change" : "endre", "delete" : "slette", - "Password protected" : "Passordbeskyttet", - "Error unsetting expiration date" : "Feil ved nullstilling av utløpsdato", - "Error setting expiration date" : "Kan ikke sette utløpsdato", - "Sending ..." : "Sender...", - "Email sent" : "E-post sendt", + "access control" : "tilgangskontroll", + "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen", + "Share" : "Del", + "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 with users or groups …" : "Del med brukere eller grupper ...", + "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", "Warning" : "Advarsel", "The object type is not specified." : "Objekttypen er ikke spesifisert.", "Enter new" : "Oppgi ny", diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 528913e424a..0bde814c095 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -114,14 +114,15 @@ "Error while sharing" : "Feil under deling", "Error while unsharing" : "Feil ved oppheving av deling", "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 users or groups …" : "Del med brukere eller grupper ...", - "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", - "Share" : "Del", - "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", + "Error setting expiration date" : "Kan ikke sette utløpsdato", "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", + "Set expiration date" : "Sett utløpsdato", + "Expiration" : "Utløpsdato", + "Expiration date" : "Utløpsdato", + "Sending ..." : "Sender...", + "Email sent" : "E-post sendt", + "Resharing is not allowed" : "Videre deling er ikke tillatt", + "Share link" : "Del lenke", "Link" : "Lenke", "Password protect" : "Passordbeskyttet", "Password" : "Passord", @@ -129,28 +130,24 @@ "Allow editing" : "Tillat redigering", "Email link to person" : "Email lenke til person", "Send" : "Send", - "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...", + "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}", + "Shared in {item} with {user}" : "Delt i {item} med {user}", "group" : "gruppe", "remote" : "ekstern", - "Resharing is not allowed" : "Videre deling er ikke tillatt", - "Shared in {item} with {user}" : "Delt i {item} med {user}", - "Unshare" : "Avslutt deling", "notify by email" : "Varsle på email", + "Unshare" : "Avslutt deling", "can share" : "kan dele", "can edit" : "kan endre", - "access control" : "tilgangskontroll", "create" : "opprette", "change" : "endre", "delete" : "slette", - "Password protected" : "Passordbeskyttet", - "Error unsetting expiration date" : "Feil ved nullstilling av utløpsdato", - "Error setting expiration date" : "Kan ikke sette utløpsdato", - "Sending ..." : "Sender...", - "Email sent" : "E-post sendt", + "access control" : "tilgangskontroll", + "An error occured. Please try again" : "Det oppstod en feil. Prøv igjen", + "Share" : "Del", + "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 with users or groups …" : "Del med brukere eller grupper ...", + "Share with users, groups or remote users …" : "Del med brukere, grupper eller eksterne brukere ...", "Warning" : "Advarsel", "The object type is not specified." : "Objekttypen er ikke spesifisert.", "Enter new" : "Oppgi ny", diff --git a/core/l10n/nl.js b/core/l10n/nl.js index b7606ec84cb..0b12185cae4 100644 --- a/core/l10n/nl.js +++ b/core/l10n/nl.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Fout tijdens het delen", "Error while unsharing" : "Fout tijdens het stoppen met delen", "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 users or groups …" : "Delen met gebruikers of groepen ...", - "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", - "Share" : "Delen", - "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", + "Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum", "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", + "Set expiration date" : "Stel vervaldatum in", + "Expiration" : "Vervaltermijn", + "Expiration date" : "Vervaldatum", + "Sending ..." : "Versturen ...", + "Email sent" : "E-mail verzonden", + "Resharing is not allowed" : "Verder delen is niet toegestaan", + "Share link" : "Deel link", "Link" : "Link", "Password protect" : "Wachtwoord beveiligd", "Password" : "Wachtwoord", @@ -131,29 +132,27 @@ OC.L10N.register( "Allow editing" : "Toestaan bewerken", "Email link to person" : "E-mail link naar persoon", "Send" : "Versturen", - "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...", + "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}", + "Shared in {item} with {user}" : "Gedeeld in {item} met {user}", "group" : "groep", "remote" : "extern", - "Resharing is not allowed" : "Verder delen is niet toegestaan", - "Shared in {item} with {user}" : "Gedeeld in {item} met {user}", - "Unshare" : "Stop met delen", "notify by email" : "melden per e-mail", + "Unshare" : "Stop met delen", "can share" : "kan delen", "can edit" : "kan wijzigen", - "access control" : "toegangscontrole", "create" : "creëer", "change" : "wijzig", "delete" : "verwijderen", - "Password protected" : "Wachtwoord beveiligd", - "Error unsetting expiration date" : "Fout tijdens het verwijderen van de vervaldatum", - "Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum", - "Sending ..." : "Versturen ...", - "Email sent" : "E-mail verzonden", + "access control" : "toegangscontrole", + "Share details could not be loaded for this item." : "Details van shares voor dit object konden niet worden geladen.", + "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw", + "Share" : "Delen", + "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 with users or groups …" : "Delen met gebruikers of groepen ...", + "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", "Warning" : "Waarschuwing", + "Error while sending notification" : "Fout bij versturen melding", "The object type is not specified." : "Het object type is niet gespecificeerd.", "Enter new" : "Opgeven nieuw", "Delete" : "Verwijder", @@ -248,6 +247,7 @@ OC.L10N.register( "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.", + "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", "remember" : "onthoud gegevens", "Alternative Logins" : "Alternatieve inlogs", diff --git a/core/l10n/nl.json b/core/l10n/nl.json index 1a3b8a40ad6..7a9765d8c3a 100644 --- a/core/l10n/nl.json +++ b/core/l10n/nl.json @@ -114,14 +114,15 @@ "Error while sharing" : "Fout tijdens het delen", "Error while unsharing" : "Fout tijdens het stoppen met delen", "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 users or groups …" : "Delen met gebruikers of groepen ...", - "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", - "Share" : "Delen", - "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", + "Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum", "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", + "Set expiration date" : "Stel vervaldatum in", + "Expiration" : "Vervaltermijn", + "Expiration date" : "Vervaldatum", + "Sending ..." : "Versturen ...", + "Email sent" : "E-mail verzonden", + "Resharing is not allowed" : "Verder delen is niet toegestaan", + "Share link" : "Deel link", "Link" : "Link", "Password protect" : "Wachtwoord beveiligd", "Password" : "Wachtwoord", @@ -129,29 +130,27 @@ "Allow editing" : "Toestaan bewerken", "Email link to person" : "E-mail link naar persoon", "Send" : "Versturen", - "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...", + "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}", + "Shared in {item} with {user}" : "Gedeeld in {item} met {user}", "group" : "groep", "remote" : "extern", - "Resharing is not allowed" : "Verder delen is niet toegestaan", - "Shared in {item} with {user}" : "Gedeeld in {item} met {user}", - "Unshare" : "Stop met delen", "notify by email" : "melden per e-mail", + "Unshare" : "Stop met delen", "can share" : "kan delen", "can edit" : "kan wijzigen", - "access control" : "toegangscontrole", "create" : "creëer", "change" : "wijzig", "delete" : "verwijderen", - "Password protected" : "Wachtwoord beveiligd", - "Error unsetting expiration date" : "Fout tijdens het verwijderen van de vervaldatum", - "Error setting expiration date" : "Fout tijdens het instellen van de vervaldatum", - "Sending ..." : "Versturen ...", - "Email sent" : "E-mail verzonden", + "access control" : "toegangscontrole", + "Share details could not be loaded for this item." : "Details van shares voor dit object konden niet worden geladen.", + "An error occured. Please try again" : "Er trad een fout op. Probeer het opnieuw", + "Share" : "Delen", + "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 with users or groups …" : "Delen met gebruikers of groepen ...", + "Share with users, groups or remote users …" : "Delen met gebruikers, groepen of externe gebruikers ...", "Warning" : "Waarschuwing", + "Error while sending notification" : "Fout bij versturen melding", "The object type is not specified." : "Het object type is niet gespecificeerd.", "Enter new" : "Opgeven nieuw", "Delete" : "Verwijder", @@ -246,6 +245,7 @@ "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.", + "Log in" : "Meld u aan", "Wrong password. Reset it?" : "Onjuist wachtwoord. Resetten?", "remember" : "onthoud gegevens", "Alternative Logins" : "Alternatieve inlogs", diff --git a/core/l10n/nn_NO.js b/core/l10n/nn_NO.js index 7466a7d9a96..dce6076578d 100644 --- a/core/l10n/nn_NO.js +++ b/core/l10n/nn_NO.js @@ -73,31 +73,29 @@ OC.L10N.register( "Error while sharing" : "Feil ved deling", "Error while unsharing" : "Feil ved udeling", "Error while changing permissions" : "Feil ved endring av tillatingar", - "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppa {group} av {owner}", - "Shared with you by {owner}" : "Delt med deg av {owner}", - "Share" : "Del", + "Error setting expiration date" : "Klarte ikkje setja utløpsdato", + "Set expiration date" : "Set utløpsdato", + "Expiration date" : "Utløpsdato", + "Sending ..." : "Sender …", + "Email sent" : "E-post sendt", + "Resharing is not allowed" : "Vidaredeling er ikkje tillate", "Share link" : "Del lenkje", "Password protect" : "Passordvern", "Password" : "Passord", "Choose a password for the public link" : "Vel eit passord for den offentlege lenkja", "Email link to person" : "Send lenkja over e-post", "Send" : "Send", - "Set expiration date" : "Set utløpsdato", - "Expiration date" : "Utløpsdato", - "group" : "gruppe", - "Resharing is not allowed" : "Vidaredeling er ikkje tillate", + "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppa {group} av {owner}", + "Shared with you by {owner}" : "Delt med deg av {owner}", "Shared in {item} with {user}" : "Delt i {item} med {brukar}", + "group" : "gruppe", "Unshare" : "Udel", "can share" : "kan dela", "can edit" : "kan endra", - "access control" : "tilgangskontroll", "create" : "lag", "delete" : "slett", - "Password protected" : "Passordverna", - "Error unsetting expiration date" : "Klarte ikkje fjerna utløpsdato", - "Error setting expiration date" : "Klarte ikkje setja utløpsdato", - "Sending ..." : "Sender …", - "Email sent" : "E-post sendt", + "access control" : "tilgangskontroll", + "Share" : "Del", "Warning" : "Åtvaring", "The object type is not specified." : "Objekttypen er ikkje spesifisert.", "Delete" : "Slett", @@ -127,6 +125,7 @@ OC.L10N.register( "Finish setup" : "Fullfør oppsettet", "Log out" : "Logg ut", "Search" : "Søk", + "Log in" : "Logg inn", "remember" : "hugs", "Alternative Logins" : "Alternative innloggingar" }, diff --git a/core/l10n/nn_NO.json b/core/l10n/nn_NO.json index ae90139ddca..1f6883b3361 100644 --- a/core/l10n/nn_NO.json +++ b/core/l10n/nn_NO.json @@ -71,31 +71,29 @@ "Error while sharing" : "Feil ved deling", "Error while unsharing" : "Feil ved udeling", "Error while changing permissions" : "Feil ved endring av tillatingar", - "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppa {group} av {owner}", - "Shared with you by {owner}" : "Delt med deg av {owner}", - "Share" : "Del", + "Error setting expiration date" : "Klarte ikkje setja utløpsdato", + "Set expiration date" : "Set utløpsdato", + "Expiration date" : "Utløpsdato", + "Sending ..." : "Sender …", + "Email sent" : "E-post sendt", + "Resharing is not allowed" : "Vidaredeling er ikkje tillate", "Share link" : "Del lenkje", "Password protect" : "Passordvern", "Password" : "Passord", "Choose a password for the public link" : "Vel eit passord for den offentlege lenkja", "Email link to person" : "Send lenkja over e-post", "Send" : "Send", - "Set expiration date" : "Set utløpsdato", - "Expiration date" : "Utløpsdato", - "group" : "gruppe", - "Resharing is not allowed" : "Vidaredeling er ikkje tillate", + "Shared with you and the group {group} by {owner}" : "Delt med deg og gruppa {group} av {owner}", + "Shared with you by {owner}" : "Delt med deg av {owner}", "Shared in {item} with {user}" : "Delt i {item} med {brukar}", + "group" : "gruppe", "Unshare" : "Udel", "can share" : "kan dela", "can edit" : "kan endra", - "access control" : "tilgangskontroll", "create" : "lag", "delete" : "slett", - "Password protected" : "Passordverna", - "Error unsetting expiration date" : "Klarte ikkje fjerna utløpsdato", - "Error setting expiration date" : "Klarte ikkje setja utløpsdato", - "Sending ..." : "Sender …", - "Email sent" : "E-post sendt", + "access control" : "tilgangskontroll", + "Share" : "Del", "Warning" : "Åtvaring", "The object type is not specified." : "Objekttypen er ikkje spesifisert.", "Delete" : "Slett", @@ -125,6 +123,7 @@ "Finish setup" : "Fullfør oppsettet", "Log out" : "Logg ut", "Search" : "Søk", + "Log in" : "Logg inn", "remember" : "hugs", "Alternative Logins" : "Alternative innloggingar" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/oc.js b/core/l10n/oc.js index 910f5a2265e..07cd7897afd 100644 --- a/core/l10n/oc.js +++ b/core/l10n/oc.js @@ -100,14 +100,15 @@ OC.L10N.register( "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" : "Partejar", - "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", + "Error setting expiration date" : "Error al moment de l'especificacion de la data d'expiracion", "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.", + "Set expiration date" : "Especificar una data d'expiracion", + "Expiration" : "Expiracion", + "Expiration date" : "Data d'expiracion", + "Sending ..." : "Mandadís…", + "Email sent" : "Corrièl mandat", + "Resharing is not allowed" : "Lo repartiment es pas autorizat", + "Share link" : "Partejar per ligam public", "Link" : "Ligam", "Password protect" : "Protegir per un senhal", "Password" : "Senhal", @@ -115,28 +116,24 @@ OC.L10N.register( "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...", + "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}", + "Shared in {item} with {user}" : "Partejat dins {item} amb {user}", "group" : "grop", "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", + "Unshare" : "Partejar pas mai", "can share" : "pòt partejar", "can edit" : "pòt modificar", - "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", + "access control" : "contraròtle d'accès", + "An error occured. Please try again" : "Una error s'es produsida. Mercé d'ensajar tornamai", + "Share" : "Partejar", + "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 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", "Warning" : "Atencion", "The object type is not specified." : "Lo tipe d'objècte es pas especificat.", "Enter new" : "Picar un novèl", @@ -229,6 +226,7 @@ OC.L10N.register( "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.", + "Log in" : "Connexion", "remember" : "se remembrar de ieu", "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>", diff --git a/core/l10n/oc.json b/core/l10n/oc.json index 6c859cd0c7a..a67f4970175 100644 --- a/core/l10n/oc.json +++ b/core/l10n/oc.json @@ -98,14 +98,15 @@ "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" : "Partejar", - "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", + "Error setting expiration date" : "Error al moment de l'especificacion de la data d'expiracion", "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.", + "Set expiration date" : "Especificar una data d'expiracion", + "Expiration" : "Expiracion", + "Expiration date" : "Data d'expiracion", + "Sending ..." : "Mandadís…", + "Email sent" : "Corrièl mandat", + "Resharing is not allowed" : "Lo repartiment es pas autorizat", + "Share link" : "Partejar per ligam public", "Link" : "Ligam", "Password protect" : "Protegir per un senhal", "Password" : "Senhal", @@ -113,28 +114,24 @@ "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...", + "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}", + "Shared in {item} with {user}" : "Partejat dins {item} amb {user}", "group" : "grop", "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", + "Unshare" : "Partejar pas mai", "can share" : "pòt partejar", "can edit" : "pòt modificar", - "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", + "access control" : "contraròtle d'accès", + "An error occured. Please try again" : "Una error s'es produsida. Mercé d'ensajar tornamai", + "Share" : "Partejar", + "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 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", "Warning" : "Atencion", "The object type is not specified." : "Lo tipe d'objècte es pas especificat.", "Enter new" : "Picar un novèl", @@ -227,6 +224,7 @@ "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.", + "Log in" : "Connexion", "remember" : "se remembrar de ieu", "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>", diff --git a/core/l10n/pa.js b/core/l10n/pa.js index 2fbfabce1b5..ec3e48920f5 100644 --- a/core/l10n/pa.js +++ b/core/l10n/pa.js @@ -28,9 +28,9 @@ OC.L10N.register( "Ok" : "ਠੀਕ ਹੈ", "Cancel" : "ਰੱਦ ਕਰੋ", "Error" : "ਗਲ", - "Share" : "ਸਾਂਝਾ ਕਰੋ", "Password" : "ਪਾਸਵਰ", "Send" : "ਭੇਜੋ", + "Share" : "ਸਾਂਝਾ ਕਰੋ", "Warning" : "ਚੇਤਾਵਨੀ", "Delete" : "ਹਟਾਓ", "Username" : "ਯੂਜ਼ਰ-ਨਾਂ", diff --git a/core/l10n/pa.json b/core/l10n/pa.json index 037c1d94822..853b3a5d86f 100644 --- a/core/l10n/pa.json +++ b/core/l10n/pa.json @@ -26,9 +26,9 @@ "Ok" : "ਠੀਕ ਹੈ", "Cancel" : "ਰੱਦ ਕਰੋ", "Error" : "ਗਲ", - "Share" : "ਸਾਂਝਾ ਕਰੋ", "Password" : "ਪਾਸਵਰ", "Send" : "ਭੇਜੋ", + "Share" : "ਸਾਂਝਾ ਕਰੋ", "Warning" : "ਚੇਤਾਵਨੀ", "Delete" : "ਹਟਾਓ", "Username" : "ਯੂਜ਼ਰ-ਨਾਂ", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index 3eda4c2ed9d..75190fcdb36 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -92,12 +92,15 @@ OC.L10N.register( "Error while sharing" : "Błąd podczas współdzielenia", "Error while unsharing" : "Błąd podczas zatrzymywania współdzielenia", "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 users or groups …" : "Współdziel z użytkownikami lub grupami", - "Share" : "Udostępnij", - "Share link" : "Udostępnij link", + "Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia", "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", + "Set expiration date" : "Ustaw datę wygaśnięcia", + "Expiration" : "Wygaśnięcie", + "Expiration date" : "Data wygaśnięcia", + "Sending ..." : "Wysyłanie...", + "Email sent" : "E-mail wysłany", + "Resharing is not allowed" : "Współdzielenie nie jest możliwe", + "Share link" : "Udostępnij link", "Link" : "Odnośnik", "Password protect" : "Zabezpiecz hasłem", "Password" : "Hasło", @@ -105,27 +108,21 @@ OC.L10N.register( "Allow editing" : "Pozwól na edycję", "Email link to person" : "Wyślij osobie odnośnik poprzez e-mail", "Send" : "Wyślij", - "Set expiration date" : "Ustaw datę wygaśnięcia", - "Expiration" : "Wygaśnięcie", - "Expiration date" : "Data wygaśnięcia", - "Adding user..." : "Dodawanie użytkownika...", + "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}", + "Shared in {item} with {user}" : "Współdzielone w {item} z {user}", "group" : "grupa", "remote" : "zdalny", - "Resharing is not allowed" : "Współdzielenie nie jest możliwe", - "Shared in {item} with {user}" : "Współdzielone w {item} z {user}", - "Unshare" : "Zatrzymaj współdzielenie", "notify by email" : "powiadom przez emaila", + "Unshare" : "Zatrzymaj współdzielenie", "can share" : "może współdzielić", "can edit" : "może edytować", - "access control" : "kontrola dostępu", "create" : "utwórz", "change" : "zmiany", "delete" : "usuń", - "Password protected" : "Zabezpieczone hasłem", - "Error unsetting expiration date" : "Błąd podczas usuwania daty wygaśnięcia", - "Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia", - "Sending ..." : "Wysyłanie...", - "Email sent" : "E-mail wysłany", + "access control" : "kontrola dostępu", + "Share" : "Udostępnij", + "Share with users or groups …" : "Współdziel z użytkownikami lub grupami", "Warning" : "Ostrzeżenie", "The object type is not specified." : "Nie określono typu obiektu.", "Enter new" : "Wpisz nowy", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 94001147b74..69a036f69a0 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -90,12 +90,15 @@ "Error while sharing" : "Błąd podczas współdzielenia", "Error while unsharing" : "Błąd podczas zatrzymywania współdzielenia", "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 users or groups …" : "Współdziel z użytkownikami lub grupami", - "Share" : "Udostępnij", - "Share link" : "Udostępnij link", + "Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia", "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", + "Set expiration date" : "Ustaw datę wygaśnięcia", + "Expiration" : "Wygaśnięcie", + "Expiration date" : "Data wygaśnięcia", + "Sending ..." : "Wysyłanie...", + "Email sent" : "E-mail wysłany", + "Resharing is not allowed" : "Współdzielenie nie jest możliwe", + "Share link" : "Udostępnij link", "Link" : "Odnośnik", "Password protect" : "Zabezpiecz hasłem", "Password" : "Hasło", @@ -103,27 +106,21 @@ "Allow editing" : "Pozwól na edycję", "Email link to person" : "Wyślij osobie odnośnik poprzez e-mail", "Send" : "Wyślij", - "Set expiration date" : "Ustaw datę wygaśnięcia", - "Expiration" : "Wygaśnięcie", - "Expiration date" : "Data wygaśnięcia", - "Adding user..." : "Dodawanie użytkownika...", + "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}", + "Shared in {item} with {user}" : "Współdzielone w {item} z {user}", "group" : "grupa", "remote" : "zdalny", - "Resharing is not allowed" : "Współdzielenie nie jest możliwe", - "Shared in {item} with {user}" : "Współdzielone w {item} z {user}", - "Unshare" : "Zatrzymaj współdzielenie", "notify by email" : "powiadom przez emaila", + "Unshare" : "Zatrzymaj współdzielenie", "can share" : "może współdzielić", "can edit" : "może edytować", - "access control" : "kontrola dostępu", "create" : "utwórz", "change" : "zmiany", "delete" : "usuń", - "Password protected" : "Zabezpieczone hasłem", - "Error unsetting expiration date" : "Błąd podczas usuwania daty wygaśnięcia", - "Error setting expiration date" : "Błąd podczas ustawiania daty wygaśnięcia", - "Sending ..." : "Wysyłanie...", - "Email sent" : "E-mail wysłany", + "access control" : "kontrola dostępu", + "Share" : "Udostępnij", + "Share with users or groups …" : "Współdziel z użytkownikami lub grupami", "Warning" : "Ostrzeżenie", "The object type is not specified." : "Nie określono typu obiektu.", "Enter new" : "Wpisz nowy", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index 8f1a2878aaa..2cf6224b9a9 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Erro ao compartilhar", "Error while unsharing" : "Erro ao descompartilhar", "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 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" : "Compartilhar", - "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", + "Error setting expiration date" : "Erro ao definir data de expiração", "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", + "Set expiration date" : "Definir data de expiração", + "Expiration" : "Expiração", + "Expiration date" : "Data de expiração", + "Sending ..." : "Enviando ...", + "Email sent" : "E-mail enviado", + "Resharing is not allowed" : "Não é permitido re-compartilhar", + "Share link" : "Compartilhar link", "Link" : "Link", "Password protect" : "Proteger com senha", "Password" : "Senha", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Permitir edição", "Email link to person" : "Enviar link por e-mail", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartilhado em {item} com {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Não é permitido re-compartilhar", - "Shared in {item} with {user}" : "Compartilhado em {item} com {user}", - "Unshare" : "Descompartilhar", "notify by email" : "notificar por e-mail", + "Unshare" : "Descompartilhar", "can share" : "pode compartilhar", "can edit" : "pode editar", - "access control" : "controle de acesso", "create" : "criar", "change" : "mudança", "delete" : "remover", - "Password protected" : "Protegido com senha", - "Error unsetting expiration date" : "Erro ao remover data de expiração", - "Error setting expiration date" : "Erro ao definir data de expiração", - "Sending ..." : "Enviando ...", - "Email sent" : "E-mail enviado", + "access control" : "controle de acesso", + "An error occured. Please try again" : "Ocorreu um erro. Por favor tente novamente", + "Share" : "Compartilhar", + "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 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 ...", "Warning" : "Aviso", "The object type is not specified." : "O tipo de objeto não foi especificado.", "Enter new" : "Entrar uma nova", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index d07686e7bdd..5e3b723c3c4 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -114,14 +114,15 @@ "Error while sharing" : "Erro ao compartilhar", "Error while unsharing" : "Erro ao descompartilhar", "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 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" : "Compartilhar", - "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", + "Error setting expiration date" : "Erro ao definir data de expiração", "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", + "Set expiration date" : "Definir data de expiração", + "Expiration" : "Expiração", + "Expiration date" : "Data de expiração", + "Sending ..." : "Enviando ...", + "Email sent" : "E-mail enviado", + "Resharing is not allowed" : "Não é permitido re-compartilhar", + "Share link" : "Compartilhar link", "Link" : "Link", "Password protect" : "Proteger com senha", "Password" : "Senha", @@ -129,28 +130,24 @@ "Allow editing" : "Permitir edição", "Email link to person" : "Enviar link por e-mail", "Send" : "Enviar", - "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...", + "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}", + "Shared in {item} with {user}" : "Compartilhado em {item} com {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Não é permitido re-compartilhar", - "Shared in {item} with {user}" : "Compartilhado em {item} com {user}", - "Unshare" : "Descompartilhar", "notify by email" : "notificar por e-mail", + "Unshare" : "Descompartilhar", "can share" : "pode compartilhar", "can edit" : "pode editar", - "access control" : "controle de acesso", "create" : "criar", "change" : "mudança", "delete" : "remover", - "Password protected" : "Protegido com senha", - "Error unsetting expiration date" : "Erro ao remover data de expiração", - "Error setting expiration date" : "Erro ao definir data de expiração", - "Sending ..." : "Enviando ...", - "Email sent" : "E-mail enviado", + "access control" : "controle de acesso", + "An error occured. Please try again" : "Ocorreu um erro. Por favor tente novamente", + "Share" : "Compartilhar", + "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 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 ...", "Warning" : "Aviso", "The object type is not specified." : "O tipo de objeto não foi especificado.", "Enter new" : "Entrar uma nova", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index a5c899a5986..0db31437384 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -103,21 +103,26 @@ OC.L10N.register( "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>.", + "/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 é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na <a href=\"{docLink}\">documentação</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é <a href=\"{phpLink}\">suportada pelo PHP</a>. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«", "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 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.", + "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á a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.", "Shared" : "Partilhado", "Shared with {recipients}" : "Partilhado com {recipients}", "Error" : "Erro", "Error while sharing" : "Erro ao partilhar", "Error while unsharing" : "Erro ao remover a partilha", "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 users or groups …" : "Partilhar com utilizadores ou grupos...", - "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", - "Share" : "Compartilhar", - "Share link" : "Compartilhar hiperligação", + "Error setting expiration date" : "Erro ao aplicar a data de expiraçã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", + "Set expiration date" : "Definir a data de expiração", + "Expiration" : "Data de expiração", + "Expiration date" : "Data de expiração", + "Sending ..." : "A Enviar...", + "Email sent" : "Mensagem enviada", + "Resharing is not allowed" : "Não é permitido partilhar de novo", + "Share link" : "Compartilhar hiperligação", "Link" : "Hiperligação", "Password protect" : "Proteger com Palavra-passe", "Password" : "Palavra-passe", @@ -125,28 +130,24 @@ OC.L10N.register( "Allow editing" : "Permitir edição", "Email link to person" : "Enviar a hiperligação para a pessoa", "Send" : "Enviar", - "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 ...", + "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}", + "Shared in {item} with {user}" : "Partilhado em {item} com {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Não é permitido partilhar de novo", - "Shared in {item} with {user}" : "Partilhado em {item} com {user}", - "Unshare" : "Cancelar partilha", "notify by email" : "Notificar por correio eletrónico", + "Unshare" : "Cancelar partilha", "can share" : "pode partilhar", "can edit" : "pode editar", - "access control" : "controlo de acesso", "create" : "criar", "change" : "alterar", "delete" : "apagar", - "Password protected" : "Protegido com Palavra-passe", - "Error unsetting expiration date" : "Erro ao retirar a data de expiração", - "Error setting expiration date" : "Erro ao aplicar a data de expiração", - "Sending ..." : "A Enviar...", - "Email sent" : "Mensagem enviada", + "access control" : "controlo de acesso", + "An error occured. Please try again" : "Ocorreu um erro. Por favor, tente de novo", + "Share" : "Compartilhar", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhe com as pessoas nas outras ownClouds utilizando a sintaxe username@example.com/owncloud", + "Share with users or groups …" : "Partilhar com utilizadores ou grupos...", + "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", "Warning" : "Aviso", "The object type is not specified." : "O tipo de objeto não está especificado.", "Enter new" : "Introduza novo", diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index 736490eb273..64b67ce8856 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -101,21 +101,26 @@ "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>.", + "/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 é legível pelo PHP, o que é altamente desanimador por motivos de segurança. Pode ser encontrada mais informação na <a href=\"{docLink}\">documentação</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "A sua versão ({version}) do PHP já não é <a href=\"{phpLink}\">suportada pelo PHP</a>. Nós encorajamos-lo a atualizar a sua versão do PHP para aproveitar o desempenho e as atualizações de segurança fornecidas pelo PHP.´«", "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 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.", + "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á a aceder a este site via HTTP. Nós recomendamos vivamente que configure o seu servidor para requerer a utilização de HTTPS, em vez do que está descrito nas nossas <a href=\"{docUrl}\">dicas de segurança</a>.", "Shared" : "Partilhado", "Shared with {recipients}" : "Partilhado com {recipients}", "Error" : "Erro", "Error while sharing" : "Erro ao partilhar", "Error while unsharing" : "Erro ao remover a partilha", "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 users or groups …" : "Partilhar com utilizadores ou grupos...", - "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", - "Share" : "Compartilhar", - "Share link" : "Compartilhar hiperligação", + "Error setting expiration date" : "Erro ao aplicar a data de expiraçã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", + "Set expiration date" : "Definir a data de expiração", + "Expiration" : "Data de expiração", + "Expiration date" : "Data de expiração", + "Sending ..." : "A Enviar...", + "Email sent" : "Mensagem enviada", + "Resharing is not allowed" : "Não é permitido partilhar de novo", + "Share link" : "Compartilhar hiperligação", "Link" : "Hiperligação", "Password protect" : "Proteger com Palavra-passe", "Password" : "Palavra-passe", @@ -123,28 +128,24 @@ "Allow editing" : "Permitir edição", "Email link to person" : "Enviar a hiperligação para a pessoa", "Send" : "Enviar", - "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 ...", + "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}", + "Shared in {item} with {user}" : "Partilhado em {item} com {user}", "group" : "grupo", "remote" : "remoto", - "Resharing is not allowed" : "Não é permitido partilhar de novo", - "Shared in {item} with {user}" : "Partilhado em {item} com {user}", - "Unshare" : "Cancelar partilha", "notify by email" : "Notificar por correio eletrónico", + "Unshare" : "Cancelar partilha", "can share" : "pode partilhar", "can edit" : "pode editar", - "access control" : "controlo de acesso", "create" : "criar", "change" : "alterar", "delete" : "apagar", - "Password protected" : "Protegido com Palavra-passe", - "Error unsetting expiration date" : "Erro ao retirar a data de expiração", - "Error setting expiration date" : "Erro ao aplicar a data de expiração", - "Sending ..." : "A Enviar...", - "Email sent" : "Mensagem enviada", + "access control" : "controlo de acesso", + "An error occured. Please try again" : "Ocorreu um erro. Por favor, tente de novo", + "Share" : "Compartilhar", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Compartilhe com as pessoas nas outras ownClouds utilizando a sintaxe username@example.com/owncloud", + "Share with users or groups …" : "Partilhar com utilizadores ou grupos...", + "Share with users, groups or remote users …" : "Partilhar com utilizadores, grupos ou utilizadores remotos...", "Warning" : "Aviso", "The object type is not specified." : "O tipo de objeto não está especificado.", "Enter new" : "Introduza novo", diff --git a/core/l10n/ro.js b/core/l10n/ro.js index 054c5fcb187..051f85db9b8 100644 --- a/core/l10n/ro.js +++ b/core/l10n/ro.js @@ -81,36 +81,34 @@ OC.L10N.register( "Error while sharing" : "Eroare la partajare", "Error while unsharing" : "Eroare la anularea partajării", "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" : "Partajează", - "Share link" : "Share link", + "Error setting expiration date" : "Eroare la specificarea datei de expirare", "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", + "Set expiration date" : "Specifică data expirării", + "Expiration" : "Expira", + "Expiration date" : "Data expirării", + "Sending ..." : "Se expediază...", + "Email sent" : "Mesajul a fost expediat", + "Resharing is not allowed" : "Repartajarea nu este permisă", + "Share link" : "Share link", "Link" : "Legătură", "Password protect" : "Protejare cu parolă", "Password" : "Parolă", "Allow editing" : "Permite editarea", "Email link to person" : "Expediază legătura prin poșta electronică", "Send" : "Expediază", - "Set expiration date" : "Specifică data expirării", - "Expiration" : "Expira", - "Expiration date" : "Data expirării", - "group" : "grup", - "Resharing is not allowed" : "Repartajarea nu este permisă", + "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}", "Shared in {item} with {user}" : "Distribuie in {item} si {user}", - "Unshare" : "Anulare partajare", + "group" : "grup", "notify by email" : "notifică prin email", + "Unshare" : "Anulare partajare", "can share" : "se poate partaja", "can edit" : "poate edita", - "access control" : "control acces", "create" : "creare", "change" : "modifică", "delete" : "ștergere", - "Password protected" : "Protejare cu parolă", - "Error unsetting expiration date" : "Eroare la anularea datei de expirare", - "Error setting expiration date" : "Eroare la specificarea datei de expirare", - "Sending ..." : "Se expediază...", - "Email sent" : "Mesajul a fost expediat", + "access control" : "control acces", + "Share" : "Partajează", "Warning" : "Atenție", "The object type is not specified." : "Tipul obiectului nu este specificat.", "Enter new" : "Introducere nou", @@ -148,6 +146,7 @@ OC.L10N.register( "Finish setup" : "Finalizează instalarea", "Log out" : "Ieșire", "Search" : "Căutare", + "Log in" : "Autentificare", "remember" : "amintește", "Alternative Logins" : "Conectări alternative", "Thank you for your patience." : "Îți mulțumim pentru răbrade.", diff --git a/core/l10n/ro.json b/core/l10n/ro.json index 41f9e9ab0f1..db2280b78f1 100644 --- a/core/l10n/ro.json +++ b/core/l10n/ro.json @@ -79,36 +79,34 @@ "Error while sharing" : "Eroare la partajare", "Error while unsharing" : "Eroare la anularea partajării", "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" : "Partajează", - "Share link" : "Share link", + "Error setting expiration date" : "Eroare la specificarea datei de expirare", "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", + "Set expiration date" : "Specifică data expirării", + "Expiration" : "Expira", + "Expiration date" : "Data expirării", + "Sending ..." : "Se expediază...", + "Email sent" : "Mesajul a fost expediat", + "Resharing is not allowed" : "Repartajarea nu este permisă", + "Share link" : "Share link", "Link" : "Legătură", "Password protect" : "Protejare cu parolă", "Password" : "Parolă", "Allow editing" : "Permite editarea", "Email link to person" : "Expediază legătura prin poșta electronică", "Send" : "Expediază", - "Set expiration date" : "Specifică data expirării", - "Expiration" : "Expira", - "Expiration date" : "Data expirării", - "group" : "grup", - "Resharing is not allowed" : "Repartajarea nu este permisă", + "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}", "Shared in {item} with {user}" : "Distribuie in {item} si {user}", - "Unshare" : "Anulare partajare", + "group" : "grup", "notify by email" : "notifică prin email", + "Unshare" : "Anulare partajare", "can share" : "se poate partaja", "can edit" : "poate edita", - "access control" : "control acces", "create" : "creare", "change" : "modifică", "delete" : "ștergere", - "Password protected" : "Protejare cu parolă", - "Error unsetting expiration date" : "Eroare la anularea datei de expirare", - "Error setting expiration date" : "Eroare la specificarea datei de expirare", - "Sending ..." : "Se expediază...", - "Email sent" : "Mesajul a fost expediat", + "access control" : "control acces", + "Share" : "Partajează", "Warning" : "Atenție", "The object type is not specified." : "Tipul obiectului nu este specificat.", "Enter new" : "Introducere nou", @@ -146,6 +144,7 @@ "Finish setup" : "Finalizează instalarea", "Log out" : "Ieșire", "Search" : "Căutare", + "Log in" : "Autentificare", "remember" : "amintește", "Alternative Logins" : "Conectări alternative", "Thank you for your patience." : "Îți mulțumim pentru răbrade.", diff --git a/core/l10n/ru.js b/core/l10n/ru.js index 5b114a933fc..40019986dcc 100644 --- a/core/l10n/ru.js +++ b/core/l10n/ru.js @@ -107,14 +107,15 @@ OC.L10N.register( "Error while sharing" : "При попытке поделиться произошла ошибка", "Error while unsharing" : "При закрытии доступа произошла ошибка", "Error while changing permissions" : "При изменении прав доступа произошла ошибка", - "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", - "Shared with you by {owner}" : "С вами поделился {owner} ", - "Share with users or groups …" : "Поделиться с пользователями или группами ...", - "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", - "Share" : "Поделиться", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", - "Share link" : "Поделиться ссылкой", + "Error setting expiration date" : "Ошибка при установке срока доступа", "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания", + "Set expiration date" : "Установить срок действия", + "Expiration" : "Срок действия", + "Expiration date" : "Дата окончания", + "Sending ..." : "Отправляется ...", + "Email sent" : "Письмо отправлено", + "Resharing is not allowed" : "Повторное открытие доступа запрещено", + "Share link" : "Поделиться ссылкой", "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Password" : "Пароль", @@ -122,28 +123,24 @@ OC.L10N.register( "Allow editing" : "Разрешить редактирование", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", - "Set expiration date" : "Установить срок действия", - "Expiration" : "Срок действия", - "Expiration date" : "Дата окончания", - "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", - "Adding user..." : "Добавляем пользователя...", + "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", + "Shared with you by {owner}" : "С вами поделился {owner} ", + "Shared in {item} with {user}" : "Общий доступ в {item} для {user}", "group" : "группа", "remote" : "удаленный", - "Resharing is not allowed" : "Повторное открытие доступа запрещено", - "Shared in {item} with {user}" : "Общий доступ в {item} для {user}", - "Unshare" : "Закрыть доступ", "notify by email" : "уведомить по почте", + "Unshare" : "Закрыть доступ", "can share" : "может делиться с другими", "can edit" : "может редактировать", - "access control" : "контроль доступа", "create" : "создать", "change" : "изменить", "delete" : "удалить", - "Password protected" : "Защищено паролем", - "Error unsetting expiration date" : "Ошибка при отмене срока доступа", - "Error setting expiration date" : "Ошибка при установке срока доступа", - "Sending ..." : "Отправляется ...", - "Email sent" : "Письмо отправлено", + "access control" : "контроль доступа", + "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", + "Share" : "Поделиться", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", + "Share with users or groups …" : "Поделиться с пользователями или группами ...", + "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", "Warning" : "Предупреждение", "The object type is not specified." : "Тип объекта не указан", "Enter new" : "Ввести новое", @@ -238,6 +235,7 @@ OC.L10N.register( "Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.", "An internal error occured." : "Произошла внутренняя ошибка", "Please try again or contact your administrator." : "Пожалуйста попробуйте ещё раз или свяжитесь с вашим администратором", + "Log in" : "Войти", "Wrong password. Reset it?" : "Неправильный пароль. Сбросить его?", "remember" : "запомнить", "Alternative Logins" : "Альтернативные имена пользователя", diff --git a/core/l10n/ru.json b/core/l10n/ru.json index b9b2bc4e1ce..25c4313bd17 100644 --- a/core/l10n/ru.json +++ b/core/l10n/ru.json @@ -105,14 +105,15 @@ "Error while sharing" : "При попытке поделиться произошла ошибка", "Error while unsharing" : "При закрытии доступа произошла ошибка", "Error while changing permissions" : "При изменении прав доступа произошла ошибка", - "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", - "Shared with you by {owner}" : "С вами поделился {owner} ", - "Share with users or groups …" : "Поделиться с пользователями или группами ...", - "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", - "Share" : "Поделиться", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", - "Share link" : "Поделиться ссылкой", + "Error setting expiration date" : "Ошибка при установке срока доступа", "The public link will expire no later than {days} days after it is created" : "Срок действия публичной ссылки истекает не позже чем через {days} дней после её создания", + "Set expiration date" : "Установить срок действия", + "Expiration" : "Срок действия", + "Expiration date" : "Дата окончания", + "Sending ..." : "Отправляется ...", + "Email sent" : "Письмо отправлено", + "Resharing is not allowed" : "Повторное открытие доступа запрещено", + "Share link" : "Поделиться ссылкой", "Link" : "Ссылка", "Password protect" : "Защитить паролем", "Password" : "Пароль", @@ -120,28 +121,24 @@ "Allow editing" : "Разрешить редактирование", "Email link to person" : "Отправить ссылку по электронной почте", "Send" : "Отправить", - "Set expiration date" : "Установить срок действия", - "Expiration" : "Срок действия", - "Expiration date" : "Дата окончания", - "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", - "Adding user..." : "Добавляем пользователя...", + "Shared with you and the group {group} by {owner}" : "{owner} поделился с вами и группой {group} ", + "Shared with you by {owner}" : "С вами поделился {owner} ", + "Shared in {item} with {user}" : "Общий доступ в {item} для {user}", "group" : "группа", "remote" : "удаленный", - "Resharing is not allowed" : "Повторное открытие доступа запрещено", - "Shared in {item} with {user}" : "Общий доступ в {item} для {user}", - "Unshare" : "Закрыть доступ", "notify by email" : "уведомить по почте", + "Unshare" : "Закрыть доступ", "can share" : "может делиться с другими", "can edit" : "может редактировать", - "access control" : "контроль доступа", "create" : "создать", "change" : "изменить", "delete" : "удалить", - "Password protected" : "Защищено паролем", - "Error unsetting expiration date" : "Ошибка при отмене срока доступа", - "Error setting expiration date" : "Ошибка при установке срока доступа", - "Sending ..." : "Отправляется ...", - "Email sent" : "Письмо отправлено", + "access control" : "контроль доступа", + "An error occured. Please try again" : "Произошла ошибка. Попробуйте ещё раз", + "Share" : "Поделиться", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделиться с людьми на других серверах ownCloud используя синтакс username@example.com/owncloud", + "Share with users or groups …" : "Поделиться с пользователями или группами ...", + "Share with users, groups or remote users …" : "Поделиться с пользователями, группами или удаленными пользователями ...", "Warning" : "Предупреждение", "The object type is not specified." : "Тип объекта не указан", "Enter new" : "Ввести новое", @@ -236,6 +233,7 @@ "Please contact your administrator." : "Пожалуйста, свяжитесь с вашим администратором.", "An internal error occured." : "Произошла внутренняя ошибка", "Please try again or contact your administrator." : "Пожалуйста попробуйте ещё раз или свяжитесь с вашим администратором", + "Log in" : "Войти", "Wrong password. Reset it?" : "Неправильный пароль. Сбросить его?", "remember" : "запомнить", "Alternative Logins" : "Альтернативные имена пользователя", diff --git a/core/l10n/si_LK.js b/core/l10n/si_LK.js index 9be2cb088a6..dfdc037fb5a 100644 --- a/core/l10n/si_LK.js +++ b/core/l10n/si_LK.js @@ -47,20 +47,18 @@ OC.L10N.register( "Ok" : "හරි", "Cancel" : "එපා", "Error" : "දෝෂයක්", - "Share" : "බෙදා හදා ගන්න", - "Password protect" : "මුර පදයකින් ආරක්ශාකරන්න", - "Password" : "මුර පදය", + "Error setting expiration date" : "කල් ඉකුත් දිනය ස්ථාපනය කිරීමේ දෝෂයක්", "Set expiration date" : "කල් ඉකුත් විමේ දිනය දමන්න", "Expiration date" : "කල් ඉකුත් විමේ දිනය", + "Password protect" : "මුර පදයකින් ආරක්ශාකරන්න", + "Password" : "මුර පදය", "group" : "කණ්ඩායම", "Unshare" : "නොබෙදු", "can edit" : "සංස්කරණය කළ හැක", - "access control" : "ප්රවේශ පාලනය", "create" : "සදන්න", "delete" : "මකන්න", - "Password protected" : "මුර පදයකින් ආරක්ශාකර ඇත", - "Error unsetting expiration date" : "කල් ඉකුත් දිනය ඉවත් කිරීමේ දෝෂයක්", - "Error setting expiration date" : "කල් ඉකුත් දිනය ස්ථාපනය කිරීමේ දෝෂයක්", + "access control" : "ප්රවේශ පාලනය", + "Share" : "බෙදා හදා ගන්න", "Warning" : "අවවාදය", "Delete" : "මකා දමන්න", "Add" : "එකතු කරන්න", diff --git a/core/l10n/si_LK.json b/core/l10n/si_LK.json index 7626f55acb1..62387a67e3f 100644 --- a/core/l10n/si_LK.json +++ b/core/l10n/si_LK.json @@ -45,20 +45,18 @@ "Ok" : "හරි", "Cancel" : "එපා", "Error" : "දෝෂයක්", - "Share" : "බෙදා හදා ගන්න", - "Password protect" : "මුර පදයකින් ආරක්ශාකරන්න", - "Password" : "මුර පදය", + "Error setting expiration date" : "කල් ඉකුත් දිනය ස්ථාපනය කිරීමේ දෝෂයක්", "Set expiration date" : "කල් ඉකුත් විමේ දිනය දමන්න", "Expiration date" : "කල් ඉකුත් විමේ දිනය", + "Password protect" : "මුර පදයකින් ආරක්ශාකරන්න", + "Password" : "මුර පදය", "group" : "කණ්ඩායම", "Unshare" : "නොබෙදු", "can edit" : "සංස්කරණය කළ හැක", - "access control" : "ප්රවේශ පාලනය", "create" : "සදන්න", "delete" : "මකන්න", - "Password protected" : "මුර පදයකින් ආරක්ශාකර ඇත", - "Error unsetting expiration date" : "කල් ඉකුත් දිනය ඉවත් කිරීමේ දෝෂයක්", - "Error setting expiration date" : "කල් ඉකුත් දිනය ස්ථාපනය කිරීමේ දෝෂයක්", + "access control" : "ප්රවේශ පාලනය", + "Share" : "බෙදා හදා ගන්න", "Warning" : "අවවාදය", "Delete" : "මකා දමන්න", "Add" : "එකතු කරන්න", diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index 2953bc7e0c6..075694831e2 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -34,6 +34,13 @@ OC.L10N.register( "Thu." : "Štv.", "Fri." : "Pia.", "Sat." : "Sob.", + "Su" : "Ne", + "Mo" : "Po", + "Tu" : "Ut", + "We" : "St", + "Th" : "Št", + "Fr" : "Pi", + "Sa" : "So", "January" : "Január", "February" : "Február", "March" : "Marec", @@ -98,13 +105,15 @@ OC.L10N.register( "Error while sharing" : "Chyba počas zdieľania", "Error while unsharing" : "Chyba počas ukončenia zdieľania", "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 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" : "Zdieľať", - "Share link" : "Zdieľať linku", + "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie", "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í", + "Set expiration date" : "Nastaviť dátum expirácie", + "Expiration" : "Koniec platnosti", + "Expiration date" : "Dátum expirácie", + "Sending ..." : "Odosielam ...", + "Email sent" : "Email odoslaný", + "Resharing is not allowed" : "Zdieľanie už zdieľanej položky nie je povolené", + "Share link" : "Zdieľať linku", "Link" : "Odkaz", "Password protect" : "Chrániť heslom", "Password" : "Heslo", @@ -112,28 +121,23 @@ OC.L10N.register( "Allow editing" : "Povoliť úpravy", "Email link to person" : "Odoslať odkaz emailom", "Send" : "Odoslať", - "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...", + "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}", + "Shared in {item} with {user}" : "Zdieľané v {item} s {user}", "group" : "skupina", "remote" : "vzdialený", - "Resharing is not allowed" : "Zdieľanie už zdieľanej položky nie je povolené", - "Shared in {item} with {user}" : "Zdieľané v {item} s {user}", - "Unshare" : "Zrušiť zdieľanie", "notify by email" : "informovať emailom", + "Unshare" : "Zrušiť zdieľanie", "can share" : "môže zdieľať", "can edit" : "môže upraviť", - "access control" : "prístupové práva", "create" : "vytvoriť", "change" : "zmeniť", "delete" : "vymazať", - "Password protected" : "Chránené heslom", - "Error unsetting expiration date" : "Chyba pri odstraňovaní dátumu expirácie", - "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie", - "Sending ..." : "Odosielam ...", - "Email sent" : "Email odoslaný", + "access control" : "prístupové práva", + "An error occured. Please try again" : "Nastala chyba. Skúste to znovu", + "Share" : "Zdieľať", + "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 ...", "Warning" : "Varovanie", "The object type is not specified." : "Nešpecifikovaný typ objektu.", "Enter new" : "Zadať nový", @@ -228,6 +232,7 @@ OC.L10N.register( "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.", "Log in" : "Prihlásiť sa", + "Wrong password. Reset it?" : "Chybné heslo. Chcete ho obnoviť?", "remember" : "zapamätať", "Alternative Logins" : "Alternatívne prihlásenie", "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>" : "Dobrý deň,<br><br>Používateľ %s zdieľa s vami súbor, alebo priečinok s názvom »%s«.<br><a href=\"%s\">Pre zobrazenie kliknite na túto linku!</a><br><br>", @@ -239,6 +244,7 @@ OC.L10N.register( "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." : "Kontaktujte správcu. Ak ste správcom tejto inštancie, nakonfigurujte správne nastavenie \"trusted_domain\" v config/config.php. Vzorová konfigurácia je uvedená v 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." : "V závislosti na konfigurácii, vám môže byť ako správcovi umožnené použitie tlačidla nižšie pre označenie tejto domény ako dôveryhodnej.", "Add \"%s\" as trusted domain" : "Pridať \"%s\" ako dôveryhodnú doménu", + "%s will be updated to version %s" : "%s bude zaktualizovaný na verziu %s.", "The theme %s has been disabled." : "Téma %s bola zakázaná.", "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", diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index f39e14ed02a..c9ab6cfacc3 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -32,6 +32,13 @@ "Thu." : "Štv.", "Fri." : "Pia.", "Sat." : "Sob.", + "Su" : "Ne", + "Mo" : "Po", + "Tu" : "Ut", + "We" : "St", + "Th" : "Št", + "Fr" : "Pi", + "Sa" : "So", "January" : "Január", "February" : "Február", "March" : "Marec", @@ -96,13 +103,15 @@ "Error while sharing" : "Chyba počas zdieľania", "Error while unsharing" : "Chyba počas ukončenia zdieľania", "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 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" : "Zdieľať", - "Share link" : "Zdieľať linku", + "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie", "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í", + "Set expiration date" : "Nastaviť dátum expirácie", + "Expiration" : "Koniec platnosti", + "Expiration date" : "Dátum expirácie", + "Sending ..." : "Odosielam ...", + "Email sent" : "Email odoslaný", + "Resharing is not allowed" : "Zdieľanie už zdieľanej položky nie je povolené", + "Share link" : "Zdieľať linku", "Link" : "Odkaz", "Password protect" : "Chrániť heslom", "Password" : "Heslo", @@ -110,28 +119,23 @@ "Allow editing" : "Povoliť úpravy", "Email link to person" : "Odoslať odkaz emailom", "Send" : "Odoslať", - "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...", + "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}", + "Shared in {item} with {user}" : "Zdieľané v {item} s {user}", "group" : "skupina", "remote" : "vzdialený", - "Resharing is not allowed" : "Zdieľanie už zdieľanej položky nie je povolené", - "Shared in {item} with {user}" : "Zdieľané v {item} s {user}", - "Unshare" : "Zrušiť zdieľanie", "notify by email" : "informovať emailom", + "Unshare" : "Zrušiť zdieľanie", "can share" : "môže zdieľať", "can edit" : "môže upraviť", - "access control" : "prístupové práva", "create" : "vytvoriť", "change" : "zmeniť", "delete" : "vymazať", - "Password protected" : "Chránené heslom", - "Error unsetting expiration date" : "Chyba pri odstraňovaní dátumu expirácie", - "Error setting expiration date" : "Chyba pri nastavení dátumu expirácie", - "Sending ..." : "Odosielam ...", - "Email sent" : "Email odoslaný", + "access control" : "prístupové práva", + "An error occured. Please try again" : "Nastala chyba. Skúste to znovu", + "Share" : "Zdieľať", + "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 ...", "Warning" : "Varovanie", "The object type is not specified." : "Nešpecifikovaný typ objektu.", "Enter new" : "Zadať nový", @@ -226,6 +230,7 @@ "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.", "Log in" : "Prihlásiť sa", + "Wrong password. Reset it?" : "Chybné heslo. Chcete ho obnoviť?", "remember" : "zapamätať", "Alternative Logins" : "Alternatívne prihlásenie", "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>" : "Dobrý deň,<br><br>Používateľ %s zdieľa s vami súbor, alebo priečinok s názvom »%s«.<br><a href=\"%s\">Pre zobrazenie kliknite na túto linku!</a><br><br>", @@ -237,6 +242,7 @@ "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." : "Kontaktujte správcu. Ak ste správcom tejto inštancie, nakonfigurujte správne nastavenie \"trusted_domain\" v config/config.php. Vzorová konfigurácia je uvedená v 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." : "V závislosti na konfigurácii, vám môže byť ako správcovi umožnené použitie tlačidla nižšie pre označenie tejto domény ako dôveryhodnej.", "Add \"%s\" as trusted domain" : "Pridať \"%s\" ako dôveryhodnú doménu", + "%s will be updated to version %s" : "%s bude zaktualizovaný na verziu %s.", "The theme %s has been disabled." : "Téma %s bola zakázaná.", "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", diff --git a/core/l10n/sl.js b/core/l10n/sl.js index cc7633c0623..b0edc70f232 100644 --- a/core/l10n/sl.js +++ b/core/l10n/sl.js @@ -89,11 +89,15 @@ OC.L10N.register( "Error while sharing" : "Napaka med souporabo", "Error while unsharing" : "Napaka med odstranjevanjem souporabe", "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" : "Souporaba", - "Share link" : "Povezava za prejem", + "Error setting expiration date" : "Napaka nastavljanja datuma preteka", "The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.", + "Set expiration date" : "Nastavi datum preteka", + "Expiration" : "Datum preteka", + "Expiration date" : "Datum preteka", + "Sending ..." : "Pošiljanje ...", + "Email sent" : "Elektronska pošta je poslana", + "Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena", + "Share link" : "Povezava za prejem", "Link" : "Povezava", "Password protect" : "Zaščiti z geslom", "Password" : "Geslo", @@ -101,27 +105,20 @@ OC.L10N.register( "Allow editing" : "Dovoli urejanje", "Email link to person" : "Posreduj povezavo po elektronski pošti", "Send" : "Pošlji", - "Set expiration date" : "Nastavi datum preteka", - "Expiration" : "Datum preteka", - "Expiration date" : "Datum preteka", - "Adding user..." : "Dodajanje uporabnika ...", + "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}.", + "Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}", "group" : "skupina", "remote" : "oddaljeno", - "Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena", - "Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}", - "Unshare" : "Prekliči souporabo", "notify by email" : "obvesti po elektronski pošti", + "Unshare" : "Prekliči souporabo", "can share" : "lahko omogoči souporabo", "can edit" : "lahko ureja", - "access control" : "nadzor dostopa", "create" : "ustvari", "change" : "sprememba", "delete" : "izbriše", - "Password protected" : "Zaščiteno z geslom", - "Error unsetting expiration date" : "Napaka brisanja datuma preteka", - "Error setting expiration date" : "Napaka nastavljanja datuma preteka", - "Sending ..." : "Pošiljanje ...", - "Email sent" : "Elektronska pošta je poslana", + "access control" : "nadzor dostopa", + "Share" : "Souporaba", "Warning" : "Opozorilo", "The object type is not specified." : "Vrsta predmeta ni podana.", "Enter new" : "Vnesite novo", @@ -200,6 +197,7 @@ OC.L10N.register( "Search" : "Poišči", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", "Please contact your administrator." : "Stopite v stik s skrbnikom sistema.", + "Log in" : "Prijava", "remember" : "zapomni si", "Alternative Logins" : "Druge prijavne možnosti", "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>" : "Pozdravljeni,<br><br>uporabnik %s vam je omogočil souporabo <strong>%s</strong>.<br><a href=\"%s\">Oglejte si vsebino!</a><br><br>", diff --git a/core/l10n/sl.json b/core/l10n/sl.json index 96945519caa..5e720949dd1 100644 --- a/core/l10n/sl.json +++ b/core/l10n/sl.json @@ -87,11 +87,15 @@ "Error while sharing" : "Napaka med souporabo", "Error while unsharing" : "Napaka med odstranjevanjem souporabe", "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" : "Souporaba", - "Share link" : "Povezava za prejem", + "Error setting expiration date" : "Napaka nastavljanja datuma preteka", "The public link will expire no later than {days} days after it is created" : "Javna povezava bo potekla {days} dni po ustvarjanju.", + "Set expiration date" : "Nastavi datum preteka", + "Expiration" : "Datum preteka", + "Expiration date" : "Datum preteka", + "Sending ..." : "Pošiljanje ...", + "Email sent" : "Elektronska pošta je poslana", + "Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena", + "Share link" : "Povezava za prejem", "Link" : "Povezava", "Password protect" : "Zaščiti z geslom", "Password" : "Geslo", @@ -99,27 +103,20 @@ "Allow editing" : "Dovoli urejanje", "Email link to person" : "Posreduj povezavo po elektronski pošti", "Send" : "Pošlji", - "Set expiration date" : "Nastavi datum preteka", - "Expiration" : "Datum preteka", - "Expiration date" : "Datum preteka", - "Adding user..." : "Dodajanje uporabnika ...", + "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}.", + "Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}", "group" : "skupina", "remote" : "oddaljeno", - "Resharing is not allowed" : "Nadaljnja souporaba ni dovoljena", - "Shared in {item} with {user}" : "V souporabi v {item} z uporabnikom {user}", - "Unshare" : "Prekliči souporabo", "notify by email" : "obvesti po elektronski pošti", + "Unshare" : "Prekliči souporabo", "can share" : "lahko omogoči souporabo", "can edit" : "lahko ureja", - "access control" : "nadzor dostopa", "create" : "ustvari", "change" : "sprememba", "delete" : "izbriše", - "Password protected" : "Zaščiteno z geslom", - "Error unsetting expiration date" : "Napaka brisanja datuma preteka", - "Error setting expiration date" : "Napaka nastavljanja datuma preteka", - "Sending ..." : "Pošiljanje ...", - "Email sent" : "Elektronska pošta je poslana", + "access control" : "nadzor dostopa", + "Share" : "Souporaba", "Warning" : "Opozorilo", "The object type is not specified." : "Vrsta predmeta ni podana.", "Enter new" : "Vnesite novo", @@ -198,6 +195,7 @@ "Search" : "Poišči", "Server side authentication failed!" : "Overitev s strežnika je spodletela!", "Please contact your administrator." : "Stopite v stik s skrbnikom sistema.", + "Log in" : "Prijava", "remember" : "zapomni si", "Alternative Logins" : "Druge prijavne možnosti", "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>" : "Pozdravljeni,<br><br>uporabnik %s vam je omogočil souporabo <strong>%s</strong>.<br><a href=\"%s\">Oglejte si vsebino!</a><br><br>", diff --git a/core/l10n/sq.js b/core/l10n/sq.js index 8e5eda15f06..70633586661 100644 --- a/core/l10n/sq.js +++ b/core/l10n/sq.js @@ -87,35 +87,32 @@ OC.L10N.register( "Error while sharing" : "Veprim i gabuar gjatë ndarjes", "Error while unsharing" : "Veprim i gabuar gjatë heqjes së ndarjes", "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" : "Nda", - "Share link" : "Ndaje lidhjen", + "Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit", "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", + "Set expiration date" : "Cakto datën e përfundimit", + "Expiration" : "Data e skadimit", + "Expiration date" : "Data e përfundimit", + "Sending ..." : "Duke dërguar...", + "Email sent" : "Email-i u dërgua", + "Resharing is not allowed" : "Rindarja nuk lejohet", + "Share link" : "Ndaje lidhjen", "Password protect" : "Mbro me kod", "Password" : "Kodi", "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike", "Email link to person" : "Dërgo email me lidhjen", "Send" : "Dërgo", - "Set expiration date" : "Cakto datën e përfundimit", - "Expiration" : "Data e skadimit", - "Expiration date" : "Data e përfundimit", - "Adding user..." : "Duke shtuar përdoruesin ...", - "group" : "grupi", - "Resharing is not allowed" : "Rindarja nuk lejohet", + "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}", "Shared in {item} with {user}" : "Ndarë në {item} me {user}", - "Unshare" : "Hiq ndarjen", + "group" : "grupi", "notify by email" : "njofto me email", + "Unshare" : "Hiq ndarjen", "can share" : "mund të ndajnë", "can edit" : "mund të ndryshosh", - "access control" : "kontrollimi i hyrjeve", "create" : "krijo", "delete" : "elimino", - "Password protected" : "Mbrojtur me kod", - "Error unsetting expiration date" : "Veprim i gabuar gjatë heqjes së datës së përfundimit", - "Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit", - "Sending ..." : "Duke dërguar...", - "Email sent" : "Email-i u dërgua", + "access control" : "kontrollimi i hyrjeve", + "Share" : "Nda", "Warning" : "Kujdes", "The object type is not specified." : "Nuk është specifikuar tipi i objektit.", "Enter new" : "Jep të re", @@ -190,6 +187,7 @@ OC.L10N.register( "Search" : "Kërko", "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!", "Please contact your administrator." : "Ju lutem kontaktoni administratorin.", + "Log in" : "Hyrje", "remember" : "kujto", "Alternative Logins" : "Hyrje alternative", "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>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>", diff --git a/core/l10n/sq.json b/core/l10n/sq.json index 24d73ab8228..70351a75482 100644 --- a/core/l10n/sq.json +++ b/core/l10n/sq.json @@ -85,35 +85,32 @@ "Error while sharing" : "Veprim i gabuar gjatë ndarjes", "Error while unsharing" : "Veprim i gabuar gjatë heqjes së ndarjes", "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" : "Nda", - "Share link" : "Ndaje lidhjen", + "Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit", "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", + "Set expiration date" : "Cakto datën e përfundimit", + "Expiration" : "Data e skadimit", + "Expiration date" : "Data e përfundimit", + "Sending ..." : "Duke dërguar...", + "Email sent" : "Email-i u dërgua", + "Resharing is not allowed" : "Rindarja nuk lejohet", + "Share link" : "Ndaje lidhjen", "Password protect" : "Mbro me kod", "Password" : "Kodi", "Choose a password for the public link" : "Zgjidhni një fjalëkalim për lidhjen publike", "Email link to person" : "Dërgo email me lidhjen", "Send" : "Dërgo", - "Set expiration date" : "Cakto datën e përfundimit", - "Expiration" : "Data e skadimit", - "Expiration date" : "Data e përfundimit", - "Adding user..." : "Duke shtuar përdoruesin ...", - "group" : "grupi", - "Resharing is not allowed" : "Rindarja nuk lejohet", + "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}", "Shared in {item} with {user}" : "Ndarë në {item} me {user}", - "Unshare" : "Hiq ndarjen", + "group" : "grupi", "notify by email" : "njofto me email", + "Unshare" : "Hiq ndarjen", "can share" : "mund të ndajnë", "can edit" : "mund të ndryshosh", - "access control" : "kontrollimi i hyrjeve", "create" : "krijo", "delete" : "elimino", - "Password protected" : "Mbrojtur me kod", - "Error unsetting expiration date" : "Veprim i gabuar gjatë heqjes së datës së përfundimit", - "Error setting expiration date" : "Veprim i gabuar gjatë caktimit të datës së përfundimit", - "Sending ..." : "Duke dërguar...", - "Email sent" : "Email-i u dërgua", + "access control" : "kontrollimi i hyrjeve", + "Share" : "Nda", "Warning" : "Kujdes", "The object type is not specified." : "Nuk është specifikuar tipi i objektit.", "Enter new" : "Jep të re", @@ -188,6 +185,7 @@ "Search" : "Kërko", "Server side authentication failed!" : "Verifikimi në krahun e serverit dështoi!", "Please contact your administrator." : "Ju lutem kontaktoni administratorin.", + "Log in" : "Hyrje", "remember" : "kujto", "Alternative Logins" : "Hyrje alternative", "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>" : "Tungjatjeta,<br><br>dëshirojmë t'ju njoftojmë se %s ka ndarë <strong>%s</strong> me ju.<br><a href=\"%s\">Klikoni këtu për ta shikuar!</a><br>", diff --git a/core/l10n/sr.js b/core/l10n/sr.js index ac11270c8bf..820b32ad61e 100644 --- a/core/l10n/sr.js +++ b/core/l10n/sr.js @@ -102,14 +102,15 @@ OC.L10N.register( "Error while sharing" : "Грешка при дељењу", "Error while unsharing" : "Грешка при укидању дељења", "Error while changing permissions" : "Грешка при измени дозвола", - "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", - "Shared with you by {owner}" : "{owner} дели са вама", - "Share with users or groups …" : "Дели са корисницима или групама...", - "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", - "Share" : "Дели", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", - "Share link" : "Веза дељења", + "Error setting expiration date" : "Грешка при постављању датума истека", "The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања", + "Set expiration date" : "Постави датум истека", + "Expiration" : "Истиче", + "Expiration date" : "Датум истека", + "Sending ..." : "Шаљем...", + "Email sent" : "Порука је послата", + "Resharing is not allowed" : "Поновно дељење није дозвољено", + "Share link" : "Веза дељења", "Link" : "Веза", "Password protect" : "Заштићено лозинком", "Password" : "Лозинка", @@ -117,28 +118,24 @@ OC.L10N.register( "Allow editing" : "Дозволи уређивање", "Email link to person" : "Пошаљи е-поштом", "Send" : "Пошаљи", - "Set expiration date" : "Постави датум истека", - "Expiration" : "Истиче", - "Expiration date" : "Датум истека", - "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", - "Adding user..." : "Додајем корисника...", + "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", + "Shared with you by {owner}" : "{owner} дели са вама", + "Shared in {item} with {user}" : "Подељено унутар {item} са корисником {user}", "group" : "група", "remote" : "удаљени", - "Resharing is not allowed" : "Поновно дељење није дозвољено", - "Shared in {item} with {user}" : "Подељено унутар {item} са корисником {user}", - "Unshare" : "Укини дељење", "notify by email" : "обавести е-поштом", + "Unshare" : "Укини дељење", "can share" : "може да дели", "can edit" : "може да мења", - "access control" : "права приступа", "create" : "направи", "change" : "измени", "delete" : "обриши", - "Password protected" : "Заштићено лозинком", - "Error unsetting expiration date" : "Грешка при поништавању датума истека", - "Error setting expiration date" : "Грешка при постављању датума истека", - "Sending ..." : "Шаљем...", - "Email sent" : "Порука је послата", + "access control" : "права приступа", + "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", + "Share" : "Дели", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", + "Share with users or groups …" : "Дели са корисницима или групама...", + "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", "Warning" : "Упозорење", "The object type is not specified." : "Тип објекта није наведен.", "Enter new" : "Унесите нови", @@ -233,6 +230,7 @@ OC.L10N.register( "Please contact your administrator." : "Контактирајте вашег администратора.", "An internal error occured." : "Дошло је до интерне грешке.", "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", + "Log in" : "Пријава", "remember" : "упамти", "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>", diff --git a/core/l10n/sr.json b/core/l10n/sr.json index ceee884de1b..2607a8ba79b 100644 --- a/core/l10n/sr.json +++ b/core/l10n/sr.json @@ -100,14 +100,15 @@ "Error while sharing" : "Грешка при дељењу", "Error while unsharing" : "Грешка при укидању дељења", "Error while changing permissions" : "Грешка при измени дозвола", - "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", - "Shared with you by {owner}" : "{owner} дели са вама", - "Share with users or groups …" : "Дели са корисницима или групама...", - "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", - "Share" : "Дели", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", - "Share link" : "Веза дељења", + "Error setting expiration date" : "Грешка при постављању датума истека", "The public link will expire no later than {days} days after it is created" : "Јавна веза ће престати да важи {days} дана након стварања", + "Set expiration date" : "Постави датум истека", + "Expiration" : "Истиче", + "Expiration date" : "Датум истека", + "Sending ..." : "Шаљем...", + "Email sent" : "Порука је послата", + "Resharing is not allowed" : "Поновно дељење није дозвољено", + "Share link" : "Веза дељења", "Link" : "Веза", "Password protect" : "Заштићено лозинком", "Password" : "Лозинка", @@ -115,28 +116,24 @@ "Allow editing" : "Дозволи уређивање", "Email link to person" : "Пошаљи е-поштом", "Send" : "Пошаљи", - "Set expiration date" : "Постави датум истека", - "Expiration" : "Истиче", - "Expiration date" : "Датум истека", - "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", - "Adding user..." : "Додајем корисника...", + "Shared with you and the group {group} by {owner}" : "{owner} дели са вама и са групом {group}.", + "Shared with you by {owner}" : "{owner} дели са вама", + "Shared in {item} with {user}" : "Подељено унутар {item} са корисником {user}", "group" : "група", "remote" : "удаљени", - "Resharing is not allowed" : "Поновно дељење није дозвољено", - "Shared in {item} with {user}" : "Подељено унутар {item} са корисником {user}", - "Unshare" : "Укини дељење", "notify by email" : "обавести е-поштом", + "Unshare" : "Укини дељење", "can share" : "може да дели", "can edit" : "може да мења", - "access control" : "права приступа", "create" : "направи", "change" : "измени", "delete" : "обриши", - "Password protected" : "Заштићено лозинком", - "Error unsetting expiration date" : "Грешка при поништавању датума истека", - "Error setting expiration date" : "Грешка при постављању датума истека", - "Sending ..." : "Шаљем...", - "Email sent" : "Порука је послата", + "access control" : "права приступа", + "An error occured. Please try again" : "Дошло је до грешке. Покушајте поново", + "Share" : "Дели", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поделите са људима у другим облацима користећи синтаксу корисничкоиме@сервер.com/owncloud", + "Share with users or groups …" : "Дели са корисницима или групама...", + "Share with users, groups or remote users …" : "Дели са корисницима, групама или удаљеним корисницима...", "Warning" : "Упозорење", "The object type is not specified." : "Тип објекта није наведен.", "Enter new" : "Унесите нови", @@ -231,6 +228,7 @@ "Please contact your administrator." : "Контактирајте вашег администратора.", "An internal error occured." : "Дошло је до интерне грешке.", "Please try again or contact your administrator." : "Покушајте поново или контактирајте вашег администратора.", + "Log in" : "Пријава", "remember" : "упамти", "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>", diff --git a/core/l10n/sr@latin.js b/core/l10n/sr@latin.js index 5108f16d996..276252e324f 100644 --- a/core/l10n/sr@latin.js +++ b/core/l10n/sr@latin.js @@ -88,11 +88,15 @@ OC.L10N.register( "Error while sharing" : "Greška pri deljenju", "Error while unsharing" : "Greška u uklanjanju deljenja", "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" : "Podeli", - "Share link" : "Podeli prečicu", + "Error setting expiration date" : "Greška u postavljanju datuma isteka", "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", + "Set expiration date" : "Datum isteka", + "Expiration" : "Isticanje", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "Email poslat", + "Resharing is not allowed" : "Dalje deljenje nije dozvoljeno", + "Share link" : "Podeli prečicu", "Link" : "Prečica", "Password protect" : "Zaštita lozinkom", "Password" : "Lozinka", @@ -100,27 +104,20 @@ OC.L10N.register( "Allow editing" : "Dozvoli uređivanje", "Email link to person" : "Pošalji link e-mailom", "Send" : "Pošalji", - "Set expiration date" : "Datum isteka", - "Expiration" : "Isticanje", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Deljeno u {item} sa {user}", "group" : "grupa", "remote" : "udaljeni", - "Resharing is not allowed" : "Dalje deljenje nije dozvoljeno", - "Shared in {item} with {user}" : "Deljeno u {item} sa {user}", - "Unshare" : "Ukljoni deljenje", "notify by email" : "obavesti Email-om", + "Unshare" : "Ukljoni deljenje", "can share" : "dozvoljeno deljenje", "can edit" : "dozvoljene izmene", - "access control" : "kontrola pristupa", "create" : "napravi", "change" : "izmeni", "delete" : "brisanje", - "Password protected" : "Zaštćeno lozinkom", - "Error unsetting expiration date" : "Greška u uklanjanju datuma isteka", - "Error setting expiration date" : "Greška u postavljanju datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "Email poslat", + "access control" : "kontrola pristupa", + "Share" : "Podeli", "Warning" : "Upozorenje", "The object type is not specified." : "Tip objekta nije zadan.", "Enter new" : "Unesite novi", @@ -196,6 +193,7 @@ OC.L10N.register( "Search" : "Traži", "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!", "Please contact your administrator." : "Molimo Vas da kontaktirate Vašeg administratora.", + "Log in" : "Prijavi se", "remember" : "upamti", "Alternative Logins" : "Alternativne prijave", "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>" : "Hej,<br><br>samo ti javljamo da je %s delio <strong>%s</strong> sa tobom.<br><a href=\"%s\">Pogledaj!</a><br><br>", diff --git a/core/l10n/sr@latin.json b/core/l10n/sr@latin.json index 5bc49c7e58a..03766ee0948 100644 --- a/core/l10n/sr@latin.json +++ b/core/l10n/sr@latin.json @@ -86,11 +86,15 @@ "Error while sharing" : "Greška pri deljenju", "Error while unsharing" : "Greška u uklanjanju deljenja", "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" : "Podeli", - "Share link" : "Podeli prečicu", + "Error setting expiration date" : "Greška u postavljanju datuma isteka", "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", + "Set expiration date" : "Datum isteka", + "Expiration" : "Isticanje", + "Expiration date" : "Datum isteka", + "Sending ..." : "Slanje...", + "Email sent" : "Email poslat", + "Resharing is not allowed" : "Dalje deljenje nije dozvoljeno", + "Share link" : "Podeli prečicu", "Link" : "Prečica", "Password protect" : "Zaštita lozinkom", "Password" : "Lozinka", @@ -98,27 +102,20 @@ "Allow editing" : "Dozvoli uređivanje", "Email link to person" : "Pošalji link e-mailom", "Send" : "Pošalji", - "Set expiration date" : "Datum isteka", - "Expiration" : "Isticanje", - "Expiration date" : "Datum isteka", - "Adding user..." : "Dodavanje korisnika...", + "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}", + "Shared in {item} with {user}" : "Deljeno u {item} sa {user}", "group" : "grupa", "remote" : "udaljeni", - "Resharing is not allowed" : "Dalje deljenje nije dozvoljeno", - "Shared in {item} with {user}" : "Deljeno u {item} sa {user}", - "Unshare" : "Ukljoni deljenje", "notify by email" : "obavesti Email-om", + "Unshare" : "Ukljoni deljenje", "can share" : "dozvoljeno deljenje", "can edit" : "dozvoljene izmene", - "access control" : "kontrola pristupa", "create" : "napravi", "change" : "izmeni", "delete" : "brisanje", - "Password protected" : "Zaštćeno lozinkom", - "Error unsetting expiration date" : "Greška u uklanjanju datuma isteka", - "Error setting expiration date" : "Greška u postavljanju datuma isteka", - "Sending ..." : "Slanje...", - "Email sent" : "Email poslat", + "access control" : "kontrola pristupa", + "Share" : "Podeli", "Warning" : "Upozorenje", "The object type is not specified." : "Tip objekta nije zadan.", "Enter new" : "Unesite novi", @@ -194,6 +191,7 @@ "Search" : "Traži", "Server side authentication failed!" : "Provera identiteta na stani servera nije uspela!", "Please contact your administrator." : "Molimo Vas da kontaktirate Vašeg administratora.", + "Log in" : "Prijavi se", "remember" : "upamti", "Alternative Logins" : "Alternativne prijave", "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>" : "Hej,<br><br>samo ti javljamo da je %s delio <strong>%s</strong> sa tobom.<br><a href=\"%s\">Pogledaj!</a><br><br>", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index 27c1255f65b..e2d5edf3f5d 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -88,11 +88,15 @@ OC.L10N.register( "Error while sharing" : "Fel vid delning", "Error while unsharing" : "Fel när delning skulle avslutas", "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" : "Dela", - "Share link" : "Dela länk", + "Error setting expiration date" : "Fel vid sättning av utgångsdatum", "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", + "Set expiration date" : "Sätt utgångsdatum", + "Expiration" : "Upphör", + "Expiration date" : "Utgångsdatum", + "Sending ..." : "Skickar ...", + "Email sent" : "E-post skickat", + "Resharing is not allowed" : "Dela vidare är inte tillåtet", + "Share link" : "Dela länk", "Link" : "Länk", "Password protect" : "Lösenordsskydda", "Password" : "Lösenord", @@ -100,27 +104,20 @@ OC.L10N.register( "Allow editing" : "Tillåt redigering", "Email link to person" : "E-posta länk till person", "Send" : "Skicka", - "Set expiration date" : "Sätt utgångsdatum", - "Expiration" : "Upphör", - "Expiration date" : "Utgångsdatum", - "Adding user..." : "Lägger till användare...", + "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}", + "Shared in {item} with {user}" : "Delad i {item} med {user}", "group" : "Grupp", "remote" : "fjärr", - "Resharing is not allowed" : "Dela vidare är inte tillåtet", - "Shared in {item} with {user}" : "Delad i {item} med {user}", - "Unshare" : "Sluta dela", "notify by email" : "informera via e-post", + "Unshare" : "Sluta dela", "can share" : "får dela", "can edit" : "kan redigera", - "access control" : "åtkomstkontroll", "create" : "skapa", "change" : "ändra", "delete" : "radera", - "Password protected" : "Lösenordsskyddad", - "Error unsetting expiration date" : "Fel vid borttagning av utgångsdatum", - "Error setting expiration date" : "Fel vid sättning av utgångsdatum", - "Sending ..." : "Skickar ...", - "Email sent" : "E-post skickat", + "access control" : "åtkomstkontroll", + "Share" : "Dela", "Warning" : "Varning", "The object type is not specified." : "Objekttypen är inte specificerad.", "Enter new" : "Skriv nytt", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index befc73dfc44..c25a4afc5e7 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -86,11 +86,15 @@ "Error while sharing" : "Fel vid delning", "Error while unsharing" : "Fel när delning skulle avslutas", "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" : "Dela", - "Share link" : "Dela länk", + "Error setting expiration date" : "Fel vid sättning av utgångsdatum", "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", + "Set expiration date" : "Sätt utgångsdatum", + "Expiration" : "Upphör", + "Expiration date" : "Utgångsdatum", + "Sending ..." : "Skickar ...", + "Email sent" : "E-post skickat", + "Resharing is not allowed" : "Dela vidare är inte tillåtet", + "Share link" : "Dela länk", "Link" : "Länk", "Password protect" : "Lösenordsskydda", "Password" : "Lösenord", @@ -98,27 +102,20 @@ "Allow editing" : "Tillåt redigering", "Email link to person" : "E-posta länk till person", "Send" : "Skicka", - "Set expiration date" : "Sätt utgångsdatum", - "Expiration" : "Upphör", - "Expiration date" : "Utgångsdatum", - "Adding user..." : "Lägger till användare...", + "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}", + "Shared in {item} with {user}" : "Delad i {item} med {user}", "group" : "Grupp", "remote" : "fjärr", - "Resharing is not allowed" : "Dela vidare är inte tillåtet", - "Shared in {item} with {user}" : "Delad i {item} med {user}", - "Unshare" : "Sluta dela", "notify by email" : "informera via e-post", + "Unshare" : "Sluta dela", "can share" : "får dela", "can edit" : "kan redigera", - "access control" : "åtkomstkontroll", "create" : "skapa", "change" : "ändra", "delete" : "radera", - "Password protected" : "Lösenordsskyddad", - "Error unsetting expiration date" : "Fel vid borttagning av utgångsdatum", - "Error setting expiration date" : "Fel vid sättning av utgångsdatum", - "Sending ..." : "Skickar ...", - "Email sent" : "E-post skickat", + "access control" : "åtkomstkontroll", + "Share" : "Dela", "Warning" : "Varning", "The object type is not specified." : "Objekttypen är inte specificerad.", "Enter new" : "Skriv nytt", diff --git a/core/l10n/ta_LK.js b/core/l10n/ta_LK.js index c58dea8366e..d10cea1833f 100644 --- a/core/l10n/ta_LK.js +++ b/core/l10n/ta_LK.js @@ -50,24 +50,22 @@ OC.L10N.register( "Error while sharing" : "பகிரும் போதான வழு", "Error while unsharing" : "பகிராமல் உள்ளப்போதான வழு", "Error while changing permissions" : "அனுமதிகள் மாறும்போதான வழு", - "Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}", - "Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}", - "Share" : "பகிர்வு", - "Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்", - "Password" : "கடவுச்சொல்", + "Error setting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடுவதில் வழு", "Set expiration date" : "காலாவதி தேதியை குறிப்பிடுக", "Expiration date" : "காலவதியாகும் திகதி", - "group" : "குழு", "Resharing is not allowed" : "மீள்பகிர்வதற்கு அனுமதி இல்லை ", + "Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்", + "Password" : "கடவுச்சொல்", + "Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}", + "Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}", "Shared in {item} with {user}" : "{பயனாளர்} உடன் {உருப்படி} பகிரப்பட்டுள்ளது", + "group" : "குழு", "Unshare" : "பகிரப்படாதது", "can edit" : "தொகுக்க முடியும்", - "access control" : "கட்டுப்பாடான அணுகல்", "create" : "உருவவாக்கல்", "delete" : "நீக்குக", - "Password protected" : "கடவுச்சொல் பாதுகாக்கப்பட்டது", - "Error unsetting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடாமைக்கான வழு", - "Error setting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடுவதில் வழு", + "access control" : "கட்டுப்பாடான அணுகல்", + "Share" : "பகிர்வு", "Warning" : "எச்சரிக்கை", "The object type is not specified." : "பொருள் வகை குறிப்பிடப்படவில்லை.", "Delete" : "நீக்குக", diff --git a/core/l10n/ta_LK.json b/core/l10n/ta_LK.json index 60ff565dbf2..1d19146d104 100644 --- a/core/l10n/ta_LK.json +++ b/core/l10n/ta_LK.json @@ -48,24 +48,22 @@ "Error while sharing" : "பகிரும் போதான வழு", "Error while unsharing" : "பகிராமல் உள்ளப்போதான வழு", "Error while changing permissions" : "அனுமதிகள் மாறும்போதான வழு", - "Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}", - "Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}", - "Share" : "பகிர்வு", - "Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்", - "Password" : "கடவுச்சொல்", + "Error setting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடுவதில் வழு", "Set expiration date" : "காலாவதி தேதியை குறிப்பிடுக", "Expiration date" : "காலவதியாகும் திகதி", - "group" : "குழு", "Resharing is not allowed" : "மீள்பகிர்வதற்கு அனுமதி இல்லை ", + "Password protect" : "கடவுச்சொல்லை பாதுகாத்தல்", + "Password" : "கடவுச்சொல்", + "Shared with you and the group {group} by {owner}" : "உங்களுடனும் குழுவுக்கிடையிலும் {குழு} பகிரப்பட்டுள்ளது {உரிமையாளர்}", + "Shared with you by {owner}" : "உங்களுடன் பகிரப்பட்டுள்ளது {உரிமையாளர்}", "Shared in {item} with {user}" : "{பயனாளர்} உடன் {உருப்படி} பகிரப்பட்டுள்ளது", + "group" : "குழு", "Unshare" : "பகிரப்படாதது", "can edit" : "தொகுக்க முடியும்", - "access control" : "கட்டுப்பாடான அணுகல்", "create" : "உருவவாக்கல்", "delete" : "நீக்குக", - "Password protected" : "கடவுச்சொல் பாதுகாக்கப்பட்டது", - "Error unsetting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடாமைக்கான வழு", - "Error setting expiration date" : "காலாவதியாகும் திகதியை குறிப்பிடுவதில் வழு", + "access control" : "கட்டுப்பாடான அணுகல்", + "Share" : "பகிர்வு", "Warning" : "எச்சரிக்கை", "The object type is not specified." : "பொருள் வகை குறிப்பிடப்படவில்லை.", "Delete" : "நீக்குக", diff --git a/core/l10n/te.js b/core/l10n/te.js index 423fb764b72..6169beff101 100644 --- a/core/l10n/te.js +++ b/core/l10n/te.js @@ -27,9 +27,9 @@ OC.L10N.register( "Cancel" : "రద్దుచేయి", "Continue" : "కొనసాగించు", "Error" : "పొరపాటు", + "Expiration date" : "కాలం చెల్లు తేదీ", "Password" : "సంకేతపదం", "Send" : "పంపించు", - "Expiration date" : "కాలం చెల్లు తేదీ", "delete" : "తొలగించు", "Warning" : "హెచ్చరిక", "Delete" : "తొలగించు", diff --git a/core/l10n/te.json b/core/l10n/te.json index cd7b0d9a93f..b09f286afbc 100644 --- a/core/l10n/te.json +++ b/core/l10n/te.json @@ -25,9 +25,9 @@ "Cancel" : "రద్దుచేయి", "Continue" : "కొనసాగించు", "Error" : "పొరపాటు", + "Expiration date" : "కాలం చెల్లు తేదీ", "Password" : "సంకేతపదం", "Send" : "పంపించు", - "Expiration date" : "కాలం చెల్లు తేదీ", "delete" : "తొలగించు", "Warning" : "హెచ్చరిక", "Delete" : "తొలగించు", diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index f72fa3ee38b..3ed34bc336d 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -116,14 +116,15 @@ OC.L10N.register( "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}", - "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", - "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", - "Share" : "แชร์", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", - "Share link" : "แชร์ลิงค์", + "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", "The public link will expire no later than {days} days after it is created" : "ลิงค์สาธารณะจะหมดอายุภายใน {days} วัน หลังจากที่มันถูกสร้างขึ้น", + "Set expiration date" : "กำหนดวันที่หมดอายุ", + "Expiration" : "การหมดอายุ", + "Expiration date" : "วันที่หมดอายุ", + "Sending ..." : "กำลังส่ง...", + "Email sent" : "ส่งอีเมล์แล้ว", + "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", + "Share link" : "แชร์ลิงค์", "Link" : "ลิงค์", "Password protect" : "รหัสผ่านป้องกัน", "Password" : "รหัสผ่าน", @@ -131,29 +132,27 @@ OC.L10N.register( "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", - "Set expiration date" : "กำหนดวันที่หมดอายุ", - "Expiration" : "การหมดอายุ", - "Expiration date" : "วันที่หมดอายุ", - "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", - "Adding user..." : "กำลังเพิ่มผู้ใช้ ...", + "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", + "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}", + "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", "group" : "กลุ่มผู้ใช้งาน", "remote" : "ระยะไกล", - "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", - "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", - "Unshare" : "ยกเลิกการแชร์", "notify by email" : "แจ้งเตือนทางอีเมล", + "Unshare" : "ยกเลิกการแชร์", "can share" : "สามารถแชร์ได้", "can edit" : "สามารถแก้ไข", - "access control" : "ควบคุมการเข้าถึง", "create" : "สร้าง", "change" : "เปลี่ยนแปลง", "delete" : "ลบ", - "Password protected" : "ใส่รหัสผ่านไว้", - "Error unsetting expiration date" : "เกิดข้อผิดพลาดขณะยกเลิกการตั้งค่าวันที่หมดอายุ", - "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", - "Sending ..." : "กำลังส่ง...", - "Email sent" : "ส่งอีเมล์แล้ว", + "access control" : "ควบคุมการเข้าถึง", + "Share details could not be loaded for this item." : "รายละเอียดการแชร์ไม่สามารถโหลดสำหรับรายการนี้", + "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", + "Share" : "แชร์", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", + "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", + "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", "Warning" : "คำเตือน", + "Error while sending notification" : "เกิดข้อผิดพลาดขณะกำลังส่งการแจ้งเตือน", "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ", "Enter new" : "ใส่ข้อมูลใหม่", "Delete" : "ลบ", diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index d808685898d..ecf02c36b4b 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -114,14 +114,15 @@ "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}", - "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", - "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", - "Share" : "แชร์", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", - "Share link" : "แชร์ลิงค์", + "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", "The public link will expire no later than {days} days after it is created" : "ลิงค์สาธารณะจะหมดอายุภายใน {days} วัน หลังจากที่มันถูกสร้างขึ้น", + "Set expiration date" : "กำหนดวันที่หมดอายุ", + "Expiration" : "การหมดอายุ", + "Expiration date" : "วันที่หมดอายุ", + "Sending ..." : "กำลังส่ง...", + "Email sent" : "ส่งอีเมล์แล้ว", + "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", + "Share link" : "แชร์ลิงค์", "Link" : "ลิงค์", "Password protect" : "รหัสผ่านป้องกัน", "Password" : "รหัสผ่าน", @@ -129,29 +130,27 @@ "Allow editing" : "อนุญาตให้แก้ไข", "Email link to person" : "ส่งลิงก์ให้ทางอีเมล", "Send" : "ส่ง", - "Set expiration date" : "กำหนดวันที่หมดอายุ", - "Expiration" : "การหมดอายุ", - "Expiration date" : "วันที่หมดอายุ", - "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", - "Adding user..." : "กำลังเพิ่มผู้ใช้ ...", + "Shared with you and the group {group} by {owner}" : "ได้แชร์ให้กับคุณ และกลุ่ม {group} โดย {owner}", + "Shared with you by {owner}" : "ถูกแชร์ให้กับคุณโดย {owner}", + "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", "group" : "กลุ่มผู้ใช้งาน", "remote" : "ระยะไกล", - "Resharing is not allowed" : "ไม่อนุญาตให้แชร์ข้อมูลที่ซ้ำกัน", - "Shared in {item} with {user}" : "ได้แชร์ {item} ให้กับ {user}", - "Unshare" : "ยกเลิกการแชร์", "notify by email" : "แจ้งเตือนทางอีเมล", + "Unshare" : "ยกเลิกการแชร์", "can share" : "สามารถแชร์ได้", "can edit" : "สามารถแก้ไข", - "access control" : "ควบคุมการเข้าถึง", "create" : "สร้าง", "change" : "เปลี่ยนแปลง", "delete" : "ลบ", - "Password protected" : "ใส่รหัสผ่านไว้", - "Error unsetting expiration date" : "เกิดข้อผิดพลาดขณะยกเลิกการตั้งค่าวันที่หมดอายุ", - "Error setting expiration date" : "เกิดข้อผิดพลาดในการตั้งค่าวันที่หมดอายุ", - "Sending ..." : "กำลังส่ง...", - "Email sent" : "ส่งอีเมล์แล้ว", + "access control" : "ควบคุมการเข้าถึง", + "Share details could not be loaded for this item." : "รายละเอียดการแชร์ไม่สามารถโหลดสำหรับรายการนี้", + "An error occured. Please try again" : "เกิดข้อผิดพลาด กรุณาลองอีกครั้ง", + "Share" : "แชร์", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "แชร์กับคนใน ownClouds อื่นๆ ที่ใช้ไวยากรณ์ username@example.com/owncloud ", + "Share with users or groups …" : "แชร์กับผู้ใช้หรือกลุ่ม ...", + "Share with users, groups or remote users …" : "แชร์กับผู้ใช้กลุ่มหรือผู้ใช้ระยะไกล ...", "Warning" : "คำเตือน", + "Error while sending notification" : "เกิดข้อผิดพลาดขณะกำลังส่งการแจ้งเตือน", "The object type is not specified." : "ชนิดของวัตถุยังไม่ได้รับการระบุ", "Enter new" : "ใส่ข้อมูลใหม่", "Delete" : "ลบ", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index c250f919892..075c7470f4e 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "Paylaşım sırasında hata", "Error while unsharing" : "Paylaşım iptal edilirken hata", "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 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" : "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ı", + "Error setting expiration date" : "Son kullanma tarihi ayarlama hatası", "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", + "Set expiration date" : "Son kullanma tarihini ayarla", + "Expiration" : "Bitiş", + "Expiration date" : "Son kullanım tarihi", + "Sending ..." : "Gönderiliyor...", + "Email sent" : "E-posta gönderildi", + "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", + "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", "Password protect" : "Parola koruması", "Password" : "Parola", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "Düzenlemeye izin ver", "Email link to person" : "Bağlantıyı e-posta ile gönder", "Send" : "Gönder", - "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...", + "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ı", + "Shared in {item} with {user}" : "{item} içinde {user} ile paylaşılanlar", "group" : "grup", "remote" : "uzak", - "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", - "Shared in {item} with {user}" : "{item} içinde {user} ile paylaşılanlar", - "Unshare" : "Paylaşmayı Kaldır", "notify by email" : "e-posta ile bildir", + "Unshare" : "Paylaşmayı Kaldır", "can share" : "paylaşabilir", "can edit" : "düzenleyebilir", - "access control" : "erişim kontrolü", "create" : "oluştur", "change" : "değiştir", "delete" : "sil", - "Password protected" : "Parola korumalı", - "Error unsetting expiration date" : "Son kullanma tarihi kaldırma hatası", - "Error setting expiration date" : "Son kullanma tarihi ayarlama hatası", - "Sending ..." : "Gönderiliyor...", - "Email sent" : "E-posta gönderildi", + "access control" : "erişim kontrolü", + "An error occured. Please try again" : "Bir hata oluştu. Lütfen yeniden deneyin", + "Share" : "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 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ş ...", "Warning" : "Uyarı", "The object type is not specified." : "Nesne türü belirtilmemiş.", "Enter new" : "Yeni girin", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 6fa7aa63c1e..9aa0942c957 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -114,14 +114,15 @@ "Error while sharing" : "Paylaşım sırasında hata", "Error while unsharing" : "Paylaşım iptal edilirken hata", "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 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" : "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ı", + "Error setting expiration date" : "Son kullanma tarihi ayarlama hatası", "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", + "Set expiration date" : "Son kullanma tarihini ayarla", + "Expiration" : "Bitiş", + "Expiration date" : "Son kullanım tarihi", + "Sending ..." : "Gönderiliyor...", + "Email sent" : "E-posta gönderildi", + "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", + "Share link" : "Paylaşma bağlantısı", "Link" : "Bağlantı", "Password protect" : "Parola koruması", "Password" : "Parola", @@ -129,28 +130,24 @@ "Allow editing" : "Düzenlemeye izin ver", "Email link to person" : "Bağlantıyı e-posta ile gönder", "Send" : "Gönder", - "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...", + "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ı", + "Shared in {item} with {user}" : "{item} içinde {user} ile paylaşılanlar", "group" : "grup", "remote" : "uzak", - "Resharing is not allowed" : "Tekrar paylaşmaya izin verilmiyor", - "Shared in {item} with {user}" : "{item} içinde {user} ile paylaşılanlar", - "Unshare" : "Paylaşmayı Kaldır", "notify by email" : "e-posta ile bildir", + "Unshare" : "Paylaşmayı Kaldır", "can share" : "paylaşabilir", "can edit" : "düzenleyebilir", - "access control" : "erişim kontrolü", "create" : "oluştur", "change" : "değiştir", "delete" : "sil", - "Password protected" : "Parola korumalı", - "Error unsetting expiration date" : "Son kullanma tarihi kaldırma hatası", - "Error setting expiration date" : "Son kullanma tarihi ayarlama hatası", - "Sending ..." : "Gönderiliyor...", - "Email sent" : "E-posta gönderildi", + "access control" : "erişim kontrolü", + "An error occured. Please try again" : "Bir hata oluştu. Lütfen yeniden deneyin", + "Share" : "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 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ş ...", "Warning" : "Uyarı", "The object type is not specified." : "Nesne türü belirtilmemiş.", "Enter new" : "Yeni girin", diff --git a/core/l10n/ug.js b/core/l10n/ug.js index 092a1a4c181..ae8b001ef37 100644 --- a/core/l10n/ug.js +++ b/core/l10n/ug.js @@ -46,12 +46,12 @@ OC.L10N.register( "Ok" : "جەزملە", "Cancel" : "ۋاز كەچ", "Error" : "خاتالىق", - "Share" : "ھەمبەھىر", "Password" : "ئىم", "Send" : "يوللا", "group" : "گۇرۇپپا", "Unshare" : "ھەمبەھىرلىمە", "delete" : "ئۆچۈر", + "Share" : "ھەمبەھىر", "Warning" : "ئاگاھلاندۇرۇش", "Delete" : "ئۆچۈر", "Add" : "قوش", diff --git a/core/l10n/ug.json b/core/l10n/ug.json index dff656d766c..f61d52d0d5a 100644 --- a/core/l10n/ug.json +++ b/core/l10n/ug.json @@ -44,12 +44,12 @@ "Ok" : "جەزملە", "Cancel" : "ۋاز كەچ", "Error" : "خاتالىق", - "Share" : "ھەمبەھىر", "Password" : "ئىم", "Send" : "يوللا", "group" : "گۇرۇپپا", "Unshare" : "ھەمبەھىرلىمە", "delete" : "ئۆچۈر", + "Share" : "ھەمبەھىر", "Warning" : "ئاگاھلاندۇرۇش", "Delete" : "ئۆچۈر", "Add" : "قوش", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index e73f854f5e1..f5c6ad86d9e 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -100,14 +100,15 @@ OC.L10N.register( "Error while sharing" : "Помилка під час публікації", "Error while unsharing" : "Помилка під час відміни публікації", "Error while changing permissions" : "Помилка при зміні повноважень", - "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", - "Shared with you by {owner}" : "{owner} опублікував для Вас", - "Share with users or groups …" : "Поширити серед користувачів або груп ...", - "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", - "Share" : "Поділитися", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", - "Share link" : "Поділитись посиланням", + "Error setting expiration date" : "Помилка при встановленні терміну дії", "The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення", + "Set expiration date" : "Встановити термін дії", + "Expiration" : "Закінчення", + "Expiration date" : "Термін дії", + "Sending ..." : "Надсилання...", + "Email sent" : "Лист надіслано", + "Resharing is not allowed" : "Пере-публікація не дозволяється", + "Share link" : "Поділитись посиланням", "Link" : "Посилання", "Password protect" : "Захистити паролем", "Password" : "Пароль", @@ -115,28 +116,24 @@ OC.L10N.register( "Allow editing" : "Дозволити редагування", "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", - "Set expiration date" : "Встановити термін дії", - "Expiration" : "Закінчення", - "Expiration date" : "Термін дії", - "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", - "Adding user..." : "Додавання користувача...", + "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", + "Shared with you by {owner}" : "{owner} опублікував для Вас", + "Shared in {item} with {user}" : "Опубліковано {item} для {user}", "group" : "група", "remote" : "Віддалений", - "Resharing is not allowed" : "Пере-публікація не дозволяється", - "Shared in {item} with {user}" : "Опубліковано {item} для {user}", - "Unshare" : "Закрити доступ", "notify by email" : "повідомити по Email", + "Unshare" : "Закрити доступ", "can share" : "може ділитися з іншими", "can edit" : "може редагувати", - "access control" : "контроль доступу", "create" : "створити", "change" : "змінити", "delete" : "видалити", - "Password protected" : "Захищено паролем", - "Error unsetting expiration date" : "Помилка при відміні терміну дії", - "Error setting expiration date" : "Помилка при встановленні терміну дії", - "Sending ..." : "Надсилання...", - "Email sent" : "Лист надіслано", + "access control" : "контроль доступу", + "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", + "Share" : "Поділитися", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", + "Share with users or groups …" : "Поширити серед користувачів або груп ...", + "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", "Warning" : "Попередження", "The object type is not specified." : "Не визначено тип об'єкту.", "Enter new" : "Введіть новий", diff --git a/core/l10n/uk.json b/core/l10n/uk.json index 09326dcf44e..1c12acf311e 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -98,14 +98,15 @@ "Error while sharing" : "Помилка під час публікації", "Error while unsharing" : "Помилка під час відміни публікації", "Error while changing permissions" : "Помилка при зміні повноважень", - "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", - "Shared with you by {owner}" : "{owner} опублікував для Вас", - "Share with users or groups …" : "Поширити серед користувачів або груп ...", - "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", - "Share" : "Поділитися", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", - "Share link" : "Поділитись посиланням", + "Error setting expiration date" : "Помилка при встановленні терміну дії", "The public link will expire no later than {days} days after it is created" : "Доступ до опублікованого посилання буде припинено не пізніше ніж через {days} днів з моменту створення", + "Set expiration date" : "Встановити термін дії", + "Expiration" : "Закінчення", + "Expiration date" : "Термін дії", + "Sending ..." : "Надсилання...", + "Email sent" : "Лист надіслано", + "Resharing is not allowed" : "Пере-публікація не дозволяється", + "Share link" : "Поділитись посиланням", "Link" : "Посилання", "Password protect" : "Захистити паролем", "Password" : "Пароль", @@ -113,28 +114,24 @@ "Allow editing" : "Дозволити редагування", "Email link to person" : "Надіслати посилання електронною поштою", "Send" : "Надіслати", - "Set expiration date" : "Встановити термін дії", - "Expiration" : "Закінчення", - "Expiration date" : "Термін дії", - "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", - "Adding user..." : "Додавання користувача...", + "Shared with you and the group {group} by {owner}" : " {owner} опублікував для Вас та для групи {group}", + "Shared with you by {owner}" : "{owner} опублікував для Вас", + "Shared in {item} with {user}" : "Опубліковано {item} для {user}", "group" : "група", "remote" : "Віддалений", - "Resharing is not allowed" : "Пере-публікація не дозволяється", - "Shared in {item} with {user}" : "Опубліковано {item} для {user}", - "Unshare" : "Закрити доступ", "notify by email" : "повідомити по Email", + "Unshare" : "Закрити доступ", "can share" : "може ділитися з іншими", "can edit" : "може редагувати", - "access control" : "контроль доступу", "create" : "створити", "change" : "змінити", "delete" : "видалити", - "Password protected" : "Захищено паролем", - "Error unsetting expiration date" : "Помилка при відміні терміну дії", - "Error setting expiration date" : "Помилка при встановленні терміну дії", - "Sending ..." : "Надсилання...", - "Email sent" : "Лист надіслано", + "access control" : "контроль доступу", + "An error occured. Please try again" : "Виникла помилка. Будь ласка, спробуйте ще раз", + "Share" : "Поділитися", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "Поширити серед людей інших ownCloud'ів, використовуючи синтаксис ім'я_користувача@файли.укр/owncloud", + "Share with users or groups …" : "Поширити серед користувачів або груп ...", + "Share with users, groups or remote users …" : "Поширити серед локальних чи віддалених користувачів або груп ...", "Warning" : "Попередження", "The object type is not specified." : "Не визначено тип об'єкту.", "Enter new" : "Введіть новий", diff --git a/core/l10n/ur_PK.js b/core/l10n/ur_PK.js index bae6b156867..58bc1695810 100644 --- a/core/l10n/ur_PK.js +++ b/core/l10n/ur_PK.js @@ -52,31 +52,29 @@ OC.L10N.register( "Error while sharing" : "اشتراک کے دوران خرابی ", "Error while unsharing" : "اشترک ختم کرنے کے دوران خرابی", "Error while changing permissions" : "اختیارات کو تبدیل کرنے کے دوران خرابی ", - "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", - "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", - "Share" : "اشتراک", + "Error setting expiration date" : "خرابی تصحیح تاریخ معیاد", + "Set expiration date" : "تاریخ معیاد سیٹ کریں", + "Expiration date" : "تاریخ معیاد", + "Sending ..." : "ارسال ہو رہا ھے", + "Email sent" : "ارسال شدہ ای میل ", + "Resharing is not allowed" : "دوبارہ اشتراک کی اجازت نہیں", "Share link" : "اشتراک لنک", "Password protect" : "محفوظ پاسورڈ", "Password" : "پاسورڈ", "Choose a password for the public link" : "عوامی لنک کے لئےپاس ورڈ منتخب کریں", "Email link to person" : "شحص کے لیے ای میل لنک", "Send" : "بھجیں", - "Set expiration date" : "تاریخ معیاد سیٹ کریں", - "Expiration date" : "تاریخ معیاد", - "group" : "مجموعہ", - "Resharing is not allowed" : "دوبارہ اشتراک کی اجازت نہیں", + "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", + "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", "Shared in {item} with {user}" : "شراکت میں {آئٹم}اور {مستخدم}", - "Unshare" : "شئیرنگ ختم کریں", + "group" : "مجموعہ", "notify by email" : "ای میل کے ذریعے مطلع کریں", + "Unshare" : "شئیرنگ ختم کریں", "can edit" : "تبدیل کر سکے ھیں", - "access control" : "اسیس کنٹرول", "create" : "نیا بنائیں", "delete" : "ختم کریں", - "Password protected" : "پاسورڈ سے محفوظ کیا گیا ہے", - "Error unsetting expiration date" : "خرابی غیر تصحیح تاریخ معیاد", - "Error setting expiration date" : "خرابی تصحیح تاریخ معیاد", - "Sending ..." : "ارسال ہو رہا ھے", - "Email sent" : "ارسال شدہ ای میل ", + "access control" : "اسیس کنٹرول", + "Share" : "اشتراک", "Warning" : "انتباہ", "The object type is not specified." : "اس چیز کی قسم کی وضاحت نہیں", "Enter new" : "جدید درج کریں", @@ -110,6 +108,7 @@ OC.L10N.register( "Finishing …" : "تکمیل ...", "Log out" : "لاگ آؤٹ", "Search" : "تلاش", + "Log in" : "لاگ ان", "remember" : "یاد رکھیں", "Alternative Logins" : "متبادل لاگ ان ", "Thank you for your patience." : "آپ کے صبر کا شکریہ" diff --git a/core/l10n/ur_PK.json b/core/l10n/ur_PK.json index b2166dfa3b1..037c35e29b0 100644 --- a/core/l10n/ur_PK.json +++ b/core/l10n/ur_PK.json @@ -50,31 +50,29 @@ "Error while sharing" : "اشتراک کے دوران خرابی ", "Error while unsharing" : "اشترک ختم کرنے کے دوران خرابی", "Error while changing permissions" : "اختیارات کو تبدیل کرنے کے دوران خرابی ", - "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", - "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", - "Share" : "اشتراک", + "Error setting expiration date" : "خرابی تصحیح تاریخ معیاد", + "Set expiration date" : "تاریخ معیاد سیٹ کریں", + "Expiration date" : "تاریخ معیاد", + "Sending ..." : "ارسال ہو رہا ھے", + "Email sent" : "ارسال شدہ ای میل ", + "Resharing is not allowed" : "دوبارہ اشتراک کی اجازت نہیں", "Share link" : "اشتراک لنک", "Password protect" : "محفوظ پاسورڈ", "Password" : "پاسورڈ", "Choose a password for the public link" : "عوامی لنک کے لئےپاس ورڈ منتخب کریں", "Email link to person" : "شحص کے لیے ای میل لنک", "Send" : "بھجیں", - "Set expiration date" : "تاریخ معیاد سیٹ کریں", - "Expiration date" : "تاریخ معیاد", - "group" : "مجموعہ", - "Resharing is not allowed" : "دوبارہ اشتراک کی اجازت نہیں", + "Shared with you and the group {group} by {owner}" : "آپ اور گروہ سے مشترق شدہ {گروہ } سے {مالک}", + "Shared with you by {owner}" : "اشتراک شدہ آپ سے{مالک}", "Shared in {item} with {user}" : "شراکت میں {آئٹم}اور {مستخدم}", - "Unshare" : "شئیرنگ ختم کریں", + "group" : "مجموعہ", "notify by email" : "ای میل کے ذریعے مطلع کریں", + "Unshare" : "شئیرنگ ختم کریں", "can edit" : "تبدیل کر سکے ھیں", - "access control" : "اسیس کنٹرول", "create" : "نیا بنائیں", "delete" : "ختم کریں", - "Password protected" : "پاسورڈ سے محفوظ کیا گیا ہے", - "Error unsetting expiration date" : "خرابی غیر تصحیح تاریخ معیاد", - "Error setting expiration date" : "خرابی تصحیح تاریخ معیاد", - "Sending ..." : "ارسال ہو رہا ھے", - "Email sent" : "ارسال شدہ ای میل ", + "access control" : "اسیس کنٹرول", + "Share" : "اشتراک", "Warning" : "انتباہ", "The object type is not specified." : "اس چیز کی قسم کی وضاحت نہیں", "Enter new" : "جدید درج کریں", @@ -108,6 +106,7 @@ "Finishing …" : "تکمیل ...", "Log out" : "لاگ آؤٹ", "Search" : "تلاش", + "Log in" : "لاگ ان", "remember" : "یاد رکھیں", "Alternative Logins" : "متبادل لاگ ان ", "Thank you for your patience." : "آپ کے صبر کا شکریہ" diff --git a/core/l10n/vi.js b/core/l10n/vi.js index 229a99b2c29..e22aaa2b4a7 100644 --- a/core/l10n/vi.js +++ b/core/l10n/vi.js @@ -71,31 +71,29 @@ OC.L10N.register( "Error while sharing" : "Lỗi trong quá trình chia sẻ", "Error while unsharing" : "Lỗi trong quá trình gỡ chia sẻ", "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" : "Chia sẻ", + "Error setting expiration date" : "Lỗi cấu hình ngày kết thúc", + "Set expiration date" : "Đặt ngày kết thúc", + "Expiration date" : "Ngày kết thúc", + "Sending ..." : "Đang gởi ...", + "Email sent" : "Email đã được gửi", + "Resharing is not allowed" : "Chia sẻ lại không được cho phép", "Share link" : "Chia sẻ liên kết", "Password protect" : "Mật khẩu bảo vệ", "Password" : "Mật khẩu", "Email link to person" : "Liên kết email tới cá nhân", "Send" : "Gởi", - "Set expiration date" : "Đặt ngày kết thúc", - "Expiration date" : "Ngày kết thúc", - "group" : "nhóm", - "Resharing is not allowed" : "Chia sẻ lại không được cho phép", + "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}", "Shared in {item} with {user}" : "Đã được chia sẽ trong {item} với {user}", - "Unshare" : "Bỏ chia sẻ", + "group" : "nhóm", "notify by email" : "Thông báo qua email", + "Unshare" : "Bỏ chia sẻ", "can share" : "có thể chia sẽ", "can edit" : "có thể chỉnh sửa", - "access control" : "quản lý truy cập", "create" : "tạo", "delete" : "xóa", - "Password protected" : "Mật khẩu bảo vệ", - "Error unsetting expiration date" : "Lỗi không thiết lập ngày kết thúc", - "Error setting expiration date" : "Lỗi cấu hình ngày kết thúc", - "Sending ..." : "Đang gởi ...", - "Email sent" : "Email đã được gửi", + "access control" : "quản lý truy cập", + "Share" : "Chia sẻ", "Warning" : "Cảnh báo", "The object type is not specified." : "Loại đối tượng không được chỉ định.", "Enter new" : "Nhập mới", diff --git a/core/l10n/vi.json b/core/l10n/vi.json index e2f6e5a7ecc..acf5e2de9ab 100644 --- a/core/l10n/vi.json +++ b/core/l10n/vi.json @@ -69,31 +69,29 @@ "Error while sharing" : "Lỗi trong quá trình chia sẻ", "Error while unsharing" : "Lỗi trong quá trình gỡ chia sẻ", "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" : "Chia sẻ", + "Error setting expiration date" : "Lỗi cấu hình ngày kết thúc", + "Set expiration date" : "Đặt ngày kết thúc", + "Expiration date" : "Ngày kết thúc", + "Sending ..." : "Đang gởi ...", + "Email sent" : "Email đã được gửi", + "Resharing is not allowed" : "Chia sẻ lại không được cho phép", "Share link" : "Chia sẻ liên kết", "Password protect" : "Mật khẩu bảo vệ", "Password" : "Mật khẩu", "Email link to person" : "Liên kết email tới cá nhân", "Send" : "Gởi", - "Set expiration date" : "Đặt ngày kết thúc", - "Expiration date" : "Ngày kết thúc", - "group" : "nhóm", - "Resharing is not allowed" : "Chia sẻ lại không được cho phép", + "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}", "Shared in {item} with {user}" : "Đã được chia sẽ trong {item} với {user}", - "Unshare" : "Bỏ chia sẻ", + "group" : "nhóm", "notify by email" : "Thông báo qua email", + "Unshare" : "Bỏ chia sẻ", "can share" : "có thể chia sẽ", "can edit" : "có thể chỉnh sửa", - "access control" : "quản lý truy cập", "create" : "tạo", "delete" : "xóa", - "Password protected" : "Mật khẩu bảo vệ", - "Error unsetting expiration date" : "Lỗi không thiết lập ngày kết thúc", - "Error setting expiration date" : "Lỗi cấu hình ngày kết thúc", - "Sending ..." : "Đang gởi ...", - "Email sent" : "Email đã được gửi", + "access control" : "quản lý truy cập", + "Share" : "Chia sẻ", "Warning" : "Cảnh báo", "The object type is not specified." : "Loại đối tượng không được chỉ định.", "Enter new" : "Nhập mới", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index e8f87ff5900..8b4a199c02c 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -116,14 +116,15 @@ OC.L10N.register( "Error while sharing" : "共享时出错", "Error while unsharing" : "取消共享时出错", "Error while changing permissions" : "修改权限时出错", - "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", - "Shared with you by {owner}" : "{owner} 与您共享", - "Share with users or groups …" : "分享给其他用户或组 ...", - "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", - "Share" : "分享", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", - "Share link" : "分享链接", + "Error setting expiration date" : "设置过期日期时出错", "The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效", + "Set expiration date" : "设置过期日期", + "Expiration" : "过期", + "Expiration date" : "过期日期", + "Sending ..." : "正在发送...", + "Email sent" : "邮件已发送", + "Resharing is not allowed" : "不允许二次共享", + "Share link" : "分享链接", "Link" : "链接", "Password protect" : "密码保护", "Password" : "密码", @@ -131,28 +132,24 @@ OC.L10N.register( "Allow editing" : "允许编辑", "Email link to person" : "发送链接到个人", "Send" : "发送", - "Set expiration date" : "设置过期日期", - "Expiration" : "过期", - "Expiration date" : "过期日期", - "An error occured. Please try again" : "发生了一个错误请重新尝试", - "Adding user..." : "添加用户中...", + "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", + "Shared with you by {owner}" : "{owner} 与您共享", + "Shared in {item} with {user}" : "在 {item} 与 {user} 共享。", "group" : "群组", "remote" : "远程", - "Resharing is not allowed" : "不允许二次共享", - "Shared in {item} with {user}" : "在 {item} 与 {user} 共享。", - "Unshare" : "取消共享", "notify by email" : "以邮件通知", + "Unshare" : "取消共享", "can share" : "可共享", "can edit" : "可以修改", - "access control" : "访问控制", "create" : "创建", "change" : "更改", "delete" : "删除", - "Password protected" : "密码已受保护", - "Error unsetting expiration date" : "取消设置过期日期时出错", - "Error setting expiration date" : "设置过期日期时出错", - "Sending ..." : "正在发送...", - "Email sent" : "邮件已发送", + "access control" : "访问控制", + "An error occured. Please try again" : "发生了一个错误请重新尝试", + "Share" : "分享", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", + "Share with users or groups …" : "分享给其他用户或组 ...", + "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", "Warning" : "警告", "The object type is not specified." : "未指定对象类型。", "Enter new" : "输入新...", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index 7bed1beaa9c..23d3fc19366 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -114,14 +114,15 @@ "Error while sharing" : "共享时出错", "Error while unsharing" : "取消共享时出错", "Error while changing permissions" : "修改权限时出错", - "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", - "Shared with you by {owner}" : "{owner} 与您共享", - "Share with users or groups …" : "分享给其他用户或组 ...", - "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", - "Share" : "分享", - "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", - "Share link" : "分享链接", + "Error setting expiration date" : "设置过期日期时出错", "The public link will expire no later than {days} days after it is created" : "这个共享链接将在创建后 {days} 天失效", + "Set expiration date" : "设置过期日期", + "Expiration" : "过期", + "Expiration date" : "过期日期", + "Sending ..." : "正在发送...", + "Email sent" : "邮件已发送", + "Resharing is not allowed" : "不允许二次共享", + "Share link" : "分享链接", "Link" : "链接", "Password protect" : "密码保护", "Password" : "密码", @@ -129,28 +130,24 @@ "Allow editing" : "允许编辑", "Email link to person" : "发送链接到个人", "Send" : "发送", - "Set expiration date" : "设置过期日期", - "Expiration" : "过期", - "Expiration date" : "过期日期", - "An error occured. Please try again" : "发生了一个错误请重新尝试", - "Adding user..." : "添加用户中...", + "Shared with you and the group {group} by {owner}" : "{owner} 共享给您及 {group} 组", + "Shared with you by {owner}" : "{owner} 与您共享", + "Shared in {item} with {user}" : "在 {item} 与 {user} 共享。", "group" : "群组", "remote" : "远程", - "Resharing is not allowed" : "不允许二次共享", - "Shared in {item} with {user}" : "在 {item} 与 {user} 共享。", - "Unshare" : "取消共享", "notify by email" : "以邮件通知", + "Unshare" : "取消共享", "can share" : "可共享", "can edit" : "可以修改", - "access control" : "访问控制", "create" : "创建", "change" : "更改", "delete" : "删除", - "Password protected" : "密码已受保护", - "Error unsetting expiration date" : "取消设置过期日期时出错", - "Error setting expiration date" : "设置过期日期时出错", - "Sending ..." : "正在发送...", - "Email sent" : "邮件已发送", + "access control" : "访问控制", + "An error occured. Please try again" : "发生了一个错误请重新尝试", + "Share" : "分享", + "Share with people on other ownClouds using the syntax username@example.com/owncloud" : "使用语法 username@example.com/owncloud 分享给其他 ownCloud 上的用户", + "Share with users or groups …" : "分享给其他用户或组 ...", + "Share with users, groups or remote users …" : "分享给其他用户、组或远程用户 ...", "Warning" : "警告", "The object type is not specified." : "未指定对象类型。", "Enter new" : "输入新...", diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js index 2766bd30007..571ab585cd5 100644 --- a/core/l10n/zh_HK.js +++ b/core/l10n/zh_HK.js @@ -32,21 +32,20 @@ OC.L10N.register( "Error while sharing" : "分享時發生錯誤", "Error while unsharing" : "取消分享時發生錯誤", "Error while changing permissions" : "更改權限時發生錯誤", - "Shared with you and the group {group} by {owner}" : "{owner}與你及群組的分享", - "Shared with you by {owner}" : "{owner}與你的分享", - "Share" : "分享", + "Set expiration date" : "設定分享期限", + "Expiration date" : "分享期限", + "Sending ..." : "發送中...", + "Email sent" : "郵件已傳", "Share link" : "分享連結", "Password protect" : "密碼保護", "Password" : "密碼", "Send" : "傳送", - "Set expiration date" : "設定分享期限", - "Expiration date" : "分享期限", + "Shared with you and the group {group} by {owner}" : "{owner}與你及群組的分享", + "Shared with you by {owner}" : "{owner}與你的分享", "Unshare" : "取消分享", "create" : "新增", "delete" : "刪除", - "Password protected" : "密碼保護", - "Sending ..." : "發送中...", - "Email sent" : "郵件已傳", + "Share" : "分享", "Warning" : "警告", "Delete" : "刪除", "Add" : "加入", diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json index 0029a47794e..d7aa79c78a7 100644 --- a/core/l10n/zh_HK.json +++ b/core/l10n/zh_HK.json @@ -30,21 +30,20 @@ "Error while sharing" : "分享時發生錯誤", "Error while unsharing" : "取消分享時發生錯誤", "Error while changing permissions" : "更改權限時發生錯誤", - "Shared with you and the group {group} by {owner}" : "{owner}與你及群組的分享", - "Shared with you by {owner}" : "{owner}與你的分享", - "Share" : "分享", + "Set expiration date" : "設定分享期限", + "Expiration date" : "分享期限", + "Sending ..." : "發送中...", + "Email sent" : "郵件已傳", "Share link" : "分享連結", "Password protect" : "密碼保護", "Password" : "密碼", "Send" : "傳送", - "Set expiration date" : "設定分享期限", - "Expiration date" : "分享期限", + "Shared with you and the group {group} by {owner}" : "{owner}與你及群組的分享", + "Shared with you by {owner}" : "{owner}與你的分享", "Unshare" : "取消分享", "create" : "新增", "delete" : "刪除", - "Password protected" : "密碼保護", - "Sending ..." : "發送中...", - "Email sent" : "郵件已傳", + "Share" : "分享", "Warning" : "警告", "Delete" : "刪除", "Add" : "加入", diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index beab7ca0e17..900c210d6b4 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -108,38 +108,35 @@ OC.L10N.register( "Error while sharing" : "分享時發生錯誤", "Error while unsharing" : "取消分享時發生錯誤", "Error while changing permissions" : "修改權限時發生錯誤", - "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", - "Shared with you by {owner}" : "{owner} 已經和您分享", - "Share" : "分享", - "Share link" : "分享連結", + "Error setting expiration date" : "設定到期日發生錯誤", "The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效", + "Set expiration date" : "指定到期日", + "Expiration" : "過期", + "Expiration date" : "到期日", + "Sending ..." : "正在傳送…", + "Email sent" : "Email 已寄出", + "Resharing is not allowed" : "不允許重新分享", + "Share link" : "分享連結", "Password protect" : "密碼保護", "Password" : "密碼", "Choose a password for the public link" : "為公開連結選一個密碼", "Email link to person" : "將連結 email 給別人", "Send" : "寄出", - "Set expiration date" : "指定到期日", - "Expiration" : "過期", - "Expiration date" : "到期日", - "An error occured. Please try again" : "發生錯誤,請重試", - "Adding user..." : "新增使用者……", + "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", + "Shared with you by {owner}" : "{owner} 已經和您分享", + "Shared in {item} with {user}" : "已和 {user} 分享 {item}", "group" : "群組", "remote" : "遠端", - "Resharing is not allowed" : "不允許重新分享", - "Shared in {item} with {user}" : "已和 {user} 分享 {item}", - "Unshare" : "取消分享", "notify by email" : "以 email 通知", + "Unshare" : "取消分享", "can share" : "可分享", "can edit" : "可編輯", - "access control" : "存取控制", "create" : "建立", "change" : "更動", "delete" : "刪除", - "Password protected" : "受密碼保護", - "Error unsetting expiration date" : "取消到期日設定失敗", - "Error setting expiration date" : "設定到期日發生錯誤", - "Sending ..." : "正在傳送…", - "Email sent" : "Email 已寄出", + "access control" : "存取控制", + "An error occured. Please try again" : "發生錯誤,請重試", + "Share" : "分享", "Warning" : "警告", "The object type is not specified." : "未指定物件類型", "Enter new" : "輸入新的", @@ -214,6 +211,7 @@ OC.L10N.register( "Please contact your administrator." : "請聯絡系統管理員。", "An internal error occured." : "發生內部錯誤", "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Log in" : "登入", "Wrong password. Reset it?" : "密碼錯誤,重設密碼?", "remember" : "記住", "Alternative Logins" : "其他登入方法", diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index 81af556d8f3..2e94ebb294b 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -106,38 +106,35 @@ "Error while sharing" : "分享時發生錯誤", "Error while unsharing" : "取消分享時發生錯誤", "Error while changing permissions" : "修改權限時發生錯誤", - "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", - "Shared with you by {owner}" : "{owner} 已經和您分享", - "Share" : "分享", - "Share link" : "分享連結", + "Error setting expiration date" : "設定到期日發生錯誤", "The public link will expire no later than {days} days after it is created" : "這個公開連結會在 {days} 天內失效", + "Set expiration date" : "指定到期日", + "Expiration" : "過期", + "Expiration date" : "到期日", + "Sending ..." : "正在傳送…", + "Email sent" : "Email 已寄出", + "Resharing is not allowed" : "不允許重新分享", + "Share link" : "分享連結", "Password protect" : "密碼保護", "Password" : "密碼", "Choose a password for the public link" : "為公開連結選一個密碼", "Email link to person" : "將連結 email 給別人", "Send" : "寄出", - "Set expiration date" : "指定到期日", - "Expiration" : "過期", - "Expiration date" : "到期日", - "An error occured. Please try again" : "發生錯誤,請重試", - "Adding user..." : "新增使用者……", + "Shared with you and the group {group} by {owner}" : "由 {owner} 分享給您和 {group}", + "Shared with you by {owner}" : "{owner} 已經和您分享", + "Shared in {item} with {user}" : "已和 {user} 分享 {item}", "group" : "群組", "remote" : "遠端", - "Resharing is not allowed" : "不允許重新分享", - "Shared in {item} with {user}" : "已和 {user} 分享 {item}", - "Unshare" : "取消分享", "notify by email" : "以 email 通知", + "Unshare" : "取消分享", "can share" : "可分享", "can edit" : "可編輯", - "access control" : "存取控制", "create" : "建立", "change" : "更動", "delete" : "刪除", - "Password protected" : "受密碼保護", - "Error unsetting expiration date" : "取消到期日設定失敗", - "Error setting expiration date" : "設定到期日發生錯誤", - "Sending ..." : "正在傳送…", - "Email sent" : "Email 已寄出", + "access control" : "存取控制", + "An error occured. Please try again" : "發生錯誤,請重試", + "Share" : "分享", "Warning" : "警告", "The object type is not specified." : "未指定物件類型", "Enter new" : "輸入新的", @@ -212,6 +209,7 @@ "Please contact your administrator." : "請聯絡系統管理員。", "An internal error occured." : "發生內部錯誤", "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Log in" : "登入", "Wrong password. Reset it?" : "密碼錯誤,重設密碼?", "remember" : "記住", "Alternative Logins" : "其他登入方法", diff --git a/core/register_command.php b/core/register_command.php index d3c04ad0671..114e115c491 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -58,6 +58,13 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { $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\Encryption\EncryptAll(\OC::$server->getEncryptionManager(), \OC::$server->getAppManager(), \OC::$server->getConfig(), new \Symfony\Component\Console\Helper\QuestionHelper())); + $application->add(new OC\Core\Command\Encryption\DecryptAll( + \OC::$server->getEncryptionManager(), + \OC::$server->getAppManager(), + \OC::$server->getConfig(), + new \OC\Encryption\DecryptAll(\OC::$server->getEncryptionManager(), \OC::$server->getUserManager(), new \OC\Files\View()), + new \Symfony\Component\Console\Helper\QuestionHelper()) + ); $application->add(new OC\Core\Command\Log\Manage(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Log\OwnCloud(\OC::$server->getConfig())); diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 0910047032d..4d9e3ae93d5 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -67,8 +67,10 @@ <?php if ($_['enableAvatars']): ?> <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=""> + <img alt="" width="32" height="32" + src="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 32]));?>" + srcset="<?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 64]));?> 2x, <?php p(\OC::$server->getURLGenerator()->linkToRoute('core.avatar.getAvatar', ['userId' => $_['user_uid'], 'size' => 128]));?> 4x" + > <?php endif; ?> </div> <?php endif; ?> diff --git a/core/templates/login.php b/core/templates/login.php index 513988876e1..08c7768a432 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -66,7 +66,7 @@ script('core', [ <?php endif; ?> <?php if ($_['rememberLoginAllowed'] === true) : ?> <div class="remember-login-container"> - <input type="checkbox" name="remember_login" value="1" id="remember_login"> + <input type="checkbox" name="remember_login" value="1" id="remember_login" class="white"> <label for="remember_login"><?php p($l->t('remember')); ?></label> </div> <?php endif; ?> diff --git a/lib/autoloader.php b/lib/autoloader.php index 41a040b3f54..8361f31b038 100644 --- a/lib/autoloader.php +++ b/lib/autoloader.php @@ -51,7 +51,9 @@ class Autoloader { * @param string[] $validRoots */ public function __construct(array $validRoots) { - $this->validRoots = $validRoots; + foreach ($validRoots as $root) { + $this->validRoots[$root] = true; + } } /** @@ -60,7 +62,8 @@ class Autoloader { * @param string $root */ public function addValidRoot($root) { - $this->validRoots[] = stream_resolve_include_path($root); + $root = stream_resolve_include_path($root); + $this->validRoots[$root] = true; } /** @@ -126,7 +129,7 @@ class Autoloader { } protected function isValidPath($fullPath) { - foreach ($this->validRoots as $root) { + foreach ($this->validRoots as $root => $true) { if (substr($fullPath, 0, strlen($root) + 1) === $root . '/') { return true; } diff --git a/lib/l10n/sk_SK.js b/lib/l10n/sk_SK.js index ca0beaf334a..49fabed436f 100644 --- a/lib/l10n/sk_SK.js +++ b/lib/l10n/sk_SK.js @@ -72,6 +72,7 @@ OC.L10N.register( "Set an admin username." : "Zadajte používateľské meno administrátora.", "Set an admin password." : "Zadajte heslo administrátora.", "Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s", + "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID", "%s shared »%s« with you" : "%s s vami zdieľa »%s«", "%s via %s" : "%s cez %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Zdieľanie %s zlyhalo, pretože backend nepodporuje typ zdieľania %i", diff --git a/lib/l10n/sk_SK.json b/lib/l10n/sk_SK.json index 65334f58988..4eea36cda2f 100644 --- a/lib/l10n/sk_SK.json +++ b/lib/l10n/sk_SK.json @@ -70,6 +70,7 @@ "Set an admin username." : "Zadajte používateľské meno administrátora.", "Set an admin password." : "Zadajte heslo administrátora.", "Can't create or write into the data directory %s" : "Nemožno vytvoriť alebo zapisovať do priečinka dát %s", + "Invalid Federated Cloud ID" : "Neplatné združené Cloud ID", "%s shared »%s« with you" : "%s s vami zdieľa »%s«", "%s via %s" : "%s cez %s", "Sharing %s failed, because the backend does not allow shares from type %i" : "Zdieľanie %s zlyhalo, pretože backend nepodporuje typ zdieľania %i", diff --git a/lib/l10n/tr.js b/lib/l10n/tr.js index 828b5a85569..93f2908a69f 100644 --- a/lib/l10n/tr.js +++ b/lib/l10n/tr.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "%s paylaşımı, %s kullanıcısı mevcut olmadığından başarısız oldu", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s paylaşımı, %s kullanıcısının %s üyeliklerinden birine sahip olmadığından başarısız oldu", "Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu", + "Sharing %s failed, because this item is already shared with user %s" : "%s paylaşımı başarısız oldu çünkü bu öge zaten %s kullanıcısı ile paylaşılıyor", "Sharing %s failed, because the group %s does not exist" : "%s paylaşımı, %s grubu mevcut olmadığından başarısız oldu", "Sharing %s failed, because %s is not a member of the group %s" : "%s paylaşımı, %s kullanıcısı %s grup üyesi olmadığından başarısız oldu", "You need to provide a password to create a public link, only protected links are allowed" : "Herkese açık bir bağlantı oluşturmak için bir parola belirtmeniz gerekiyor. Sadece korunmuş bağlantılara izin verilmektedir", diff --git a/lib/l10n/tr.json b/lib/l10n/tr.json index 13b63ee6f7d..bb3cd291e64 100644 --- a/lib/l10n/tr.json +++ b/lib/l10n/tr.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "%s paylaşımı, %s kullanıcısı mevcut olmadığından başarısız oldu", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "%s paylaşımı, %s kullanıcısının %s üyeliklerinden birine sahip olmadığından başarısız oldu", "Sharing %s failed, because this item is already shared with %s" : "%s paylaşımı, %s ile zaten paylaşıldığından dolayı başarısız oldu", + "Sharing %s failed, because this item is already shared with user %s" : "%s paylaşımı başarısız oldu çünkü bu öge zaten %s kullanıcısı ile paylaşılıyor", "Sharing %s failed, because the group %s does not exist" : "%s paylaşımı, %s grubu mevcut olmadığından başarısız oldu", "Sharing %s failed, because %s is not a member of the group %s" : "%s paylaşımı, %s kullanıcısı %s grup üyesi olmadığından başarısız oldu", "You need to provide a password to create a public link, only protected links are allowed" : "Herkese açık bir bağlantı oluşturmak için bir parola belirtmeniz gerekiyor. Sadece korunmuş bağlantılara izin verilmektedir", diff --git a/lib/private/app.php b/lib/private/app.php index e42fba525e4..368b3220b49 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -131,6 +131,7 @@ class OC_App { */ public static function loadApp($app, $checkUpgrade = true) { self::$loadedApps[] = $app; + \OC::$loader->addValidRoot(self::getAppPath($app)); // in case someone calls loadApp() directly if (is_file(self::getAppPath($app) . '/appinfo/app.php')) { \OC::$server->getEventLogger()->start('load_app_' . $app, 'Load app: ' . $app); if ($checkUpgrade and self::shouldUpgrade($app)) { diff --git a/lib/private/connector/sabre/listenerplugin.php b/lib/private/connector/sabre/listenerplugin.php new file mode 100644 index 00000000000..d0d40f4dc86 --- /dev/null +++ b/lib/private/connector/sabre/listenerplugin.php @@ -0,0 +1,58 @@ +<?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\Connector\Sabre; + +use Sabre\DAV\ServerPlugin; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; + +class ListenerPlugin extends ServerPlugin { + /** @var EventDispatcherInterface */ + protected $dispatcher; + + /** + * @param EventDispatcherInterface $dispatcher + */ + public function __construct(EventDispatcherInterface $dispatcher) { + $this->dispatcher = $dispatcher; + } + + /** + * This initialize the plugin + * + * @param \Sabre\DAV\Server $server + */ + public function initialize(\Sabre\DAV\Server $server) { + $server->on('beforeMethod', array($this, 'emitListener'), 15); + } + + /** + * This method is called before any HTTP method and returns http status code 503 + * in case the system is in maintenance mode. + * + * @return bool + */ + public function emitListener() { + $this->dispatcher->dispatch('OC\Connector\Sabre::beforeMethod'); + + return true; + } +} diff --git a/lib/private/connector/sabre/maintenanceplugin.php b/lib/private/connector/sabre/maintenanceplugin.php index 5b48abbc517..f886332418a 100644 --- a/lib/private/connector/sabre/maintenanceplugin.php +++ b/lib/private/connector/sabre/maintenanceplugin.php @@ -65,7 +65,7 @@ class MaintenancePlugin extends ServerPlugin { */ public function initialize(\Sabre\DAV\Server $server) { $this->server = $server; - $this->server->on('beforeMethod', array($this, 'checkMaintenanceMode'), 10); + $this->server->on('beforeMethod', array($this, 'checkMaintenanceMode'), 1); } /** diff --git a/lib/private/connector/sabre/serverfactory.php b/lib/private/connector/sabre/serverfactory.php index 86f60633541..54470b0b8aa 100644 --- a/lib/private/connector/sabre/serverfactory.php +++ b/lib/private/connector/sabre/serverfactory.php @@ -28,6 +28,7 @@ use OCP\ILogger; use OCP\ITagManager; use OCP\IUserSession; use Sabre\DAV\Auth\Backend\BackendInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class ServerFactory { public function __construct( @@ -36,7 +37,8 @@ class ServerFactory { IDBConnection $databaseConnection, IUserSession $userSession, IMountManager $mountManager, - ITagManager $tagManager + ITagManager $tagManager, + EventDispatcherInterface $dispatcher ) { $this->config = $config; $this->logger = $logger; @@ -44,6 +46,7 @@ class ServerFactory { $this->userSession = $userSession; $this->mountManager = $mountManager; $this->tagManager = $tagManager; + $this->dispatcher = $dispatcher; } /** @@ -63,14 +66,15 @@ class ServerFactory { // Load plugins $defaults = new \OC_Defaults(); + $server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin($this->config)); $server->addPlugin(new \OC\Connector\Sabre\BlockLegacyClientPlugin($this->config)); $server->addPlugin(new \Sabre\DAV\Auth\Plugin($authBackend, $defaults->getName())); // FIXME: The following line is a workaround for legacy components relying on being able to send a GET to / $server->addPlugin(new \OC\Connector\Sabre\DummyGetResponsePlugin()); $server->addPlugin(new \OC\Connector\Sabre\FilesPlugin($objectTree)); - $server->addPlugin(new \OC\Connector\Sabre\MaintenancePlugin($this->config)); $server->addPlugin(new \OC\Connector\Sabre\ExceptionLoggerPlugin('webdav', $this->logger)); $server->addPlugin(new \OC\Connector\Sabre\LockPlugin($objectTree)); + $server->addPlugin(new \OC\Connector\Sabre\ListenerPlugin($this->dispatcher)); // wait with registering these until auth is handled and the filesystem is setup $server->on('beforeMethod', function () use ($server, $objectTree, $viewCallBack) { diff --git a/lib/private/console/application.php b/lib/private/console/application.php index 7c709927219..edfb45c8577 100644 --- a/lib/private/console/application.php +++ b/lib/private/console/application.php @@ -55,7 +55,9 @@ class Application { if (!\OCP\Util::needUpgrade()) { OC_App::loadApps(); foreach (\OC::$server->getAppManager()->getInstalledApps() as $app) { - $file = OC_App::getAppPath($app) . '/appinfo/register_command.php'; + $appPath = \OC_App::getAppPath($app); + \OC::$loader->addValidRoot($appPath); + $file = $appPath . '/appinfo/register_command.php'; if (file_exists($file)) { require $file; } diff --git a/lib/private/encryption/decryptall.php b/lib/private/encryption/decryptall.php new file mode 100644 index 00000000000..e59be17886d --- /dev/null +++ b/lib/private/encryption/decryptall.php @@ -0,0 +1,268 @@ +<?php +/** + * @author Björn Schießle <schiessle@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\Encryption; + +use OC\Encryption\Exceptions\DecryptionFailedException; +use OC\Files\View; +use \OCP\Encryption\IEncryptionModule; +use OCP\IUserManager; +use Symfony\Component\Console\Helper\ProgressBar; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class DecryptAll { + + /** @var OutputInterface */ + protected $output; + + /** @var InputInterface */ + protected $input; + + /** @var Manager */ + protected $encryptionManager; + + /** @var IUserManager */ + protected $userManager; + + /** @var View */ + protected $rootView; + + /** @var array files which couldn't be decrypted */ + protected $failed; + + /** + * @param Manager $encryptionManager + * @param IUserManager $userManager + * @param View $rootView + */ + public function __construct( + Manager $encryptionManager, + IUserManager $userManager, + View $rootView + ) { + $this->encryptionManager = $encryptionManager; + $this->userManager = $userManager; + $this->rootView = $rootView; + $this->failed = []; + } + + /** + * start to decrypt all files + * + * @param InputInterface $input + * @param OutputInterface $output + * @param string $user which users data folder should be decrypted, default = all users + * @return bool + * @throws \Exception + */ + public function decryptAll(InputInterface $input, OutputInterface $output, $user = '') { + + $this->input = $input; + $this->output = $output; + + $this->output->writeln('prepare encryption modules...'); + if ($this->prepareEncryptionModules($user) === false) { + return false; + } + $this->output->writeln(' done.'); + + $this->decryptAllUsersFiles($user); + + if (empty($this->failed)) { + $this->output->writeln('all files could be decrypted successfully!'); + } else { + $this->output->writeln('Files for following users couldn\'t be decrypted, '); + $this->output->writeln('maybe the user is not set up in a way that supports this operation: '); + foreach ($this->failed as $uid => $paths) { + $this->output->writeln(' ' . $uid); + } + $this->output->writeln(''); + } + + return true; + } + + /** + * prepare encryption modules to perform the decrypt all function + * + * @param $user + * @return bool + */ + protected function prepareEncryptionModules($user) { + // prepare all encryption modules for decrypt all + $encryptionModules = $this->encryptionManager->getEncryptionModules(); + foreach ($encryptionModules as $moduleDesc) { + /** @var IEncryptionModule $module */ + $module = call_user_func($moduleDesc['callback']); + if ($module->prepareDecryptAll($this->input, $this->output, $user) === false) { + $this->output->writeln('Module "' . $moduleDesc['displayName'] . '" does not support the functionality to decrypt all files again or the initialization of the module failed!'); + return false; + } + } + + return true; + } + + /** + * iterate over all user and encrypt their files + * @param string $user which users files should be decrypted, default = all users + */ + protected function decryptAllUsersFiles($user = '') { + + $this->output->writeln("\n"); + + $userList = []; + if (empty($user)) { + + $fetchUsersProgress = new ProgressBar($this->output); + $fetchUsersProgress->setFormat(" %message% \n [%bar%]"); + $fetchUsersProgress->start(); + $fetchUsersProgress->setMessage("Fetch list of users..."); + $fetchUsersProgress->advance(); + + foreach ($this->userManager->getBackends() as $backend) { + $limit = 500; + $offset = 0; + do { + $users = $backend->getUsers('', $limit, $offset); + foreach ($users as $user) { + $userList[] = $user; + } + $offset += $limit; + $fetchUsersProgress->advance(); + } while (count($users) >= $limit); + $fetchUsersProgress->setMessage("Fetch list of users... finished"); + $fetchUsersProgress->finish(); + } + } else { + $userList[] = $user; + } + + $this->output->writeln("\n\n"); + + $progress = new ProgressBar($this->output); + $progress->setFormat(" %message% \n [%bar%]"); + $progress->start(); + $progress->setMessage("starting to decrypt files..."); + $progress->advance(); + + $numberOfUsers = count($userList); + $userNo = 1; + foreach ($userList as $uid) { + $userCount = "$uid ($userNo of $numberOfUsers)"; + $this->decryptUsersFiles($uid, $progress, $userCount); + $userNo++; + } + + $progress->setMessage("starting to decrypt files... finished"); + $progress->finish(); + + $this->output->writeln("\n\n"); + + } + + /** + * encrypt files from the given user + * + * @param string $uid + * @param ProgressBar $progress + * @param string $userCount + */ + protected function decryptUsersFiles($uid, ProgressBar $progress, $userCount) { + + $this->setupUserFS($uid); + $directories = array(); + $directories[] = '/' . $uid . '/files'; + + while($root = array_pop($directories)) { + $content = $this->rootView->getDirectoryContent($root); + foreach ($content as $file) { + $path = $root . '/' . $file['name']; + if ($this->rootView->is_dir($path)) { + $directories[] = $path; + continue; + } else { + try { + $progress->setMessage("decrypt files for user $userCount: $path"); + $progress->advance(); + if ($this->decryptFile($path) === false) { + $progress->setMessage("decrypt files for user $userCount: $path (already decrypted)"); + $progress->advance(); + } + } catch (\Exception $e) { + if (isset($this->failed[$uid])) { + $this->failed[$uid][] = $path; + } else { + $this->failed[$uid] = [$path]; + } + } + } + } + } + } + + /** + * encrypt file + * + * @param string $path + * @return bool + */ + protected function decryptFile($path) { + + $source = $path; + $target = $path . '.decrypted.' . $this->getTimestamp(); + + try { + $this->rootView->copy($source, $target); + $this->rootView->rename($target, $source); + } catch (DecryptionFailedException $e) { + if ($this->rootView->file_exists($target)) { + $this->rootView->unlink($target); + } + return false; + } + + return true; + } + + /** + * get current timestamp + * + * @return int + */ + protected function getTimestamp() { + return time(); + } + + + /** + * setup user file system + * + * @param string $uid + */ + protected function setupUserFS($uid) { + \OC_Util::tearDownFS(); + \OC_Util::setupFS($uid); + } + +} diff --git a/lib/private/files/cache/storage.php b/lib/private/files/cache/storage.php index a116e84b3f2..88ceb287fb9 100644 --- a/lib/private/files/cache/storage.php +++ b/lib/private/files/cache/storage.php @@ -142,7 +142,7 @@ class Storage { public function getAvailability() { if ($row = self::getStorageById($this->storageId)) { return [ - 'available' => ($row['available'] === 1), + 'available' => ((int)$row['available'] === 1), 'last_checked' => $row['last_checked'] ]; } else { diff --git a/lib/private/files/node/folder.php b/lib/private/files/node/folder.php index 042b515fea1..23004fc3527 100644 --- a/lib/private/files/node/folder.php +++ b/lib/private/files/node/folder.php @@ -25,7 +25,7 @@ namespace OC\Files\Node; -use OC\Files\Cache\Cache; +use OCP\Files\FileInfo; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; @@ -77,76 +77,15 @@ class Folder extends Node implements \OCP\Files\Folder { * @return Node[] */ public function getDirectoryListing() { - $result = array(); - - /** - * @var \OC\Files\Storage\Storage $storage - */ - list($storage, $internalPath) = $this->view->resolvePath($this->path); - if ($storage) { - $cache = $storage->getCache($internalPath); - - //trigger cache update check - $this->view->getFileInfo($this->path); - - $files = $cache->getFolderContents($internalPath); - } else { - $files = array(); - } - - //add a folder for any mountpoint in this directory and add the sizes of other mountpoints to the folders - $mounts = $this->root->getMountsIn($this->path); - $dirLength = strlen($this->path); - foreach ($mounts as $mount) { - $subStorage = $mount->getStorage(); - if ($subStorage) { - $subCache = $subStorage->getCache(''); + $folderContent = $this->view->getDirectoryContent($this->path); - if ($subCache->getStatus('') === Cache::NOT_FOUND) { - $subScanner = $subStorage->getScanner(''); - $subScanner->scanFile(''); - } - - $rootEntry = $subCache->get(''); - if ($rootEntry) { - $relativePath = trim(substr($mount->getMountPoint(), $dirLength), '/'); - if ($pos = strpos($relativePath, '/')) { - //mountpoint inside subfolder add size to the correct folder - $entryName = substr($relativePath, 0, $pos); - foreach ($files as &$entry) { - if ($entry['name'] === $entryName) { - if ($rootEntry['size'] >= 0) { - $entry['size'] += $rootEntry['size']; - } else { - $entry['size'] = -1; - } - } - } - } else { //mountpoint in this folder, add an entry for it - $rootEntry['name'] = $relativePath; - $rootEntry['storageObject'] = $subStorage; - - //remove any existing entry with the same name - foreach ($files as $i => $file) { - if ($file['name'] === $rootEntry['name']) { - $files[$i] = null; - break; - } - } - $files[] = $rootEntry; - } - } - } - } - - foreach ($files as $file) { - if ($file) { - $node = $this->createNode($this->path . '/' . $file['name'], $file); - $result[] = $node; + return array_map(function(FileInfo $info) { + if ($info->getMimetype() === 'httpd/unix-directory') { + return new Folder($this->root, $this->view, $info->getPath(), $info); + } else { + return new File($this->root, $this->view, $info->getPath(), $info); } - } - - return $result; + }, $folderContent); } /** diff --git a/lib/private/files/node/node.php b/lib/private/files/node/node.php index b9bd785de5c..943d12122e6 100644 --- a/lib/private/files/node/node.php +++ b/lib/private/files/node/node.php @@ -56,11 +56,13 @@ class Node implements \OCP\Files\Node { * @param \OC\Files\View $view * @param \OC\Files\Node\Root $root * @param string $path + * @param FileInfo $fileInfo */ - public function __construct($root, $view, $path) { + public function __construct($root, $view, $path, $fileInfo = null) { $this->view = $view; $this->root = $root; $this->path = $path; + $this->fileInfo = $fileInfo; } /** diff --git a/lib/private/notification/imanager.php b/lib/private/notification/imanager.php index 0cd92b33251..f4a5fb14e31 100644 --- a/lib/private/notification/imanager.php +++ b/lib/private/notification/imanager.php @@ -53,4 +53,10 @@ interface IManager extends IApp, INotifier { * @since 8.2.0 */ public function createNotification(); + + /** + * @return bool + * @since 8.2.0 + */ + public function hasNotifiers(); } diff --git a/lib/private/notification/manager.php b/lib/private/notification/manager.php index 9635925e38e..0d5bb9be514 100644 --- a/lib/private/notification/manager.php +++ b/lib/private/notification/manager.php @@ -113,6 +113,14 @@ class Manager implements IManager { } /** + * @return bool + * @since 8.2.0 + */ + public function hasNotifiers() { + return !empty($this->notifiersClosures); + } + + /** * @param INotification $notification * @return null * @throws \InvalidArgumentException When the notification is not valid diff --git a/lib/private/share/share.php b/lib/private/share/share.php index 6ad36d60fe8..802b146cfb6 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -83,6 +83,13 @@ class Share extends Constants { 'supportedFileExtensions' => $supportedFileExtensions ); if(count(self::$backendTypes) === 1) { + \OC_Util::addScript('core', 'shareconfigmodel'); + \OC_Util::addScript('core', 'shareitemmodel'); + \OC_Util::addScript('core', 'sharedialogresharerinfoview'); + \OC_Util::addScript('core', 'sharedialoglinkshareview'); + \OC_Util::addScript('core', 'sharedialogexpirationview'); + \OC_Util::addScript('core', 'sharedialogshareelistview'); + \OC_Util::addScript('core', 'sharedialogview'); \OC_Util::addScript('core', 'share'); \OC_Util::addStyle('core', 'share'); } diff --git a/lib/public/encryption/iencryptionmodule.php b/lib/public/encryption/iencryptionmodule.php index 0fa0dc570db..66cf1a80e0d 100644 --- a/lib/public/encryption/iencryptionmodule.php +++ b/lib/public/encryption/iencryptionmodule.php @@ -145,4 +145,15 @@ interface IEncryptionModule { */ public function encryptAll(InputInterface $input, OutputInterface $output); + /** + * prepare encryption module to decrypt all files + * + * @param InputInterface $input + * @param OutputInterface $output write some status information to the terminal during encryption + * @param $user (optional) for which the files should be decrypted, default = all users + * @return bool return false on failure or if it isn't supported by the module + * @since 8.2.0 + */ + public function prepareDecryptAll(InputInterface $input, OutputInterface $output, $user = ''); + } diff --git a/settings/l10n/da.js b/settings/l10n/da.js index 9a2adf5c2a2..61b012de4f7 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -30,7 +30,7 @@ OC.L10N.register( "Unable to change password" : "Kunne ikke ændre kodeord", "Enabled" : "Aktiveret", "Not enabled" : "Slået fra", - "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller Federated Cloud Sharing", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller sammensluttet Cloud deling", "Federated Cloud Sharing" : "Sammensluttet Cloud deling", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruger en forældet %s version (%s). Husk at opdatere dit styresystem ellers vil funktioner såsom %s ikke fungere pålideligt.", "A problem occurred, please check your log files (Error: %s)" : "Der opstod en fejl - tjek venligst dine logfiler (fejl: %s)", @@ -55,8 +55,8 @@ OC.L10N.register( "Email saved" : "E-mailadressen er gemt", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Add trusted domain" : "Tilføj et domæne som du har tillid til", - "Migration in progress. Please wait until the migration is finished" : "Overflytning er i gang. Vent venligst indtil overflytningen er afsluttet", - "Migration started …" : "Overflytning er påbegyndt...", + "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", + "Migration started …" : "Migrering er påbegyndt...", "Sending..." : "Sender...", "Official" : "Officiel", "Approved" : "Godkendt", @@ -64,7 +64,7 @@ OC.L10N.register( "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Officielt program er udviklet af ownCloud fællesskabet. Funktionerne spiller en central rolle i ownCloud og kan bruges i produktionsmiljøer.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkendte programmer er udviklet af betroet udviklere som har bestået en let sikkerheds gennemgang. De er aktivt vedligeholdt i et åben kode lager og udviklerne vurdere programmet til at være stabilt for normalt brug.", - "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer for egen risiko.", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer på eget ansvar.", "Update to %s" : "Opdatér til %s", "Please wait...." : "Vent venligst...", "Error while disabling app" : "Kunne ikke deaktivere app", @@ -77,7 +77,7 @@ OC.L10N.register( "Uninstalling ...." : "Afinstallerer...", "Error while uninstalling app" : "Fejl under afinstallering af app", "Uninstall" : "Afinstallér", - "An error occurred: {message}" : "En fejl opstod:{message}", + "An error occurred: {message}" : "Der opstod en fejl:{message}", "Select a profile picture" : "Vælg et profilbillede", "Very weak password" : "Meget svagt kodeord", "Weak password" : "Svagt kodeord", @@ -118,19 +118,22 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lader ikke til at være korrekt opsat til at forespørge miljøvariablerne i systemet. Testen med getenv(\"PATH\") returnerer blot et tomt svar.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Venligst undersøg <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php konfiguration noter og php konfiguration af din server, specielt når der bruges php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Din server kører på Microsoft Windows. Vi anbefaler stærkt at anvende Linux for en optimal brugeroplevelse.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Der er installeret %1$s med lavere end version %2$s - af hensyn til stabiliteten og ydelsen, så anbefaler vi at opdatere til en nyere %1$s-version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer er deaktiveret, dette kan føre til problemer med race betingelser. Aktiver 'filelocking.enabled \"i config.php for at undgå disse problemer. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information.", "System locale can not be set to a one which supports UTF-8." : "Systemets lokalitet kan ikke sættes til et der bruger UTF-8.", "This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:", + "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Dobbelttjek venligst <a target=\"_blank\" href=\"%s\">, og tjek om der er fejl eller advarsler i <a href=\"#log-section\">loggen</a>.", - "All checks passed." : "Alle tjek blev gennemført.", + "All checks passed." : "Alle tjek blev bestået.", "Open documentation" : "Åben dokumentation", "Allow apps to use the Share API" : "Tillad apps til at bruge Share API", "Allow users to share via link" : "Tillad brugere at dele via link", @@ -154,7 +157,7 @@ OC.L10N.register( "Use system's cron service to call the cron.php file every 15 minutes." : "Brug systemets cron service til at kalde cron.php hver 15. minut", "Enable server-side encryption" : "Slå kryptering til på serversiden", "Please read carefully before activating server-side encryption: " : "Læs venligst dette omhyggeligt, før der aktivere kryptering på serversiden:", - "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Kryptering på serversiden er en envejsproces. Når krypteringen slås til, så vil alle filer fremefter blive krypteret på serveren, og det vil ikke være muligt at slå kryptering fra efterfølgende", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Kryptering på serversiden er en envejsproces. Når krypteringen slås til, så vil alle filer fremover blive krypteret på serveren, og det vil ikke være muligt at slå kryptering fra efterfølgende", "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Enhver med priviligeret adgang til din ownCloud-server kan dekryptere dine filer, enten ved at opsnappe forespørgsler eller aflæse brugerkodeord, der bliver lagret i sessionsfiler med klartekst. Kryptering af serversiden beskytter derfor ikke mod ondsindede administratorer, men kan hjælpe til at beskytte dine data når de lagres hos eksterne værter.", "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Afhængig af det faktiske krypteringsmodul, så øges den generelle filstørrelse (med 35%% eller mere ved brug af standardmodulet)", "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Du bør jævnligt foretage sikkerhedskopiering af alle krypteringsnøgler, for at forhindre permanente tab af data (data/<user>/files_encryption and data/files_encryption)", @@ -162,9 +165,9 @@ OC.L10N.register( "Enable encryption" : "Slå kryptering til", "No encryption module loaded, please enable an encryption module in the app menu." : "Der er ikke indlæst et krypteringsmodul - slå venligst et krypteringsmodul til i app-menuen.", "Select default encryption module:" : "Vælg standardmodulet til kryptering:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Slå venligst \"Standardmodul til kryptering\" til, og kør \"occ encryption:migrate\"", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen.", - "Start migration" : "Påbegynd overflytning", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du skal immigrere dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Slå venligst \"Standardmodul til kryptering\" til, og kør \"occ encryption:migrate\"", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du skal immigrere dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen.", + "Start migration" : "Påbegynd immigrering", "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "Send mode" : "Tilstand for afsendelse", "Encryption" : "Kryptering", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 3ae0aeb173f..2f18fedf629 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -28,7 +28,7 @@ "Unable to change password" : "Kunne ikke ændre kodeord", "Enabled" : "Aktiveret", "Not enabled" : "Slået fra", - "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller Federated Cloud Sharing", + "installing and updating apps via the app store or Federated Cloud Sharing" : "installation og opdatering af apps via app-butikken eller sammensluttet Cloud deling", "Federated Cloud Sharing" : "Sammensluttet Cloud deling", "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL bruger en forældet %s version (%s). Husk at opdatere dit styresystem ellers vil funktioner såsom %s ikke fungere pålideligt.", "A problem occurred, please check your log files (Error: %s)" : "Der opstod en fejl - tjek venligst dine logfiler (fejl: %s)", @@ -53,8 +53,8 @@ "Email saved" : "E-mailadressen er gemt", "Are you really sure you want add \"{domain}\" as trusted domain?" : "Sikker på at du vil tilføje \"{domain}\" som et domæne du har tiilid til?", "Add trusted domain" : "Tilføj et domæne som du har tillid til", - "Migration in progress. Please wait until the migration is finished" : "Overflytning er i gang. Vent venligst indtil overflytningen er afsluttet", - "Migration started …" : "Overflytning er påbegyndt...", + "Migration in progress. Please wait until the migration is finished" : "Immigration er i gang. Vent venligst indtil overflytningen er afsluttet", + "Migration started …" : "Migrering er påbegyndt...", "Sending..." : "Sender...", "Official" : "Officiel", "Approved" : "Godkendt", @@ -62,7 +62,7 @@ "All" : "Alle", "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "Officielt program er udviklet af ownCloud fællesskabet. Funktionerne spiller en central rolle i ownCloud og kan bruges i produktionsmiljøer.", "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "Godkendte programmer er udviklet af betroet udviklere som har bestået en let sikkerheds gennemgang. De er aktivt vedligeholdt i et åben kode lager og udviklerne vurdere programmet til at være stabilt for normalt brug.", - "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer for egen risiko.", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Dette program er ikke kontrolleret for sikkerhedsproblemer, og er nyt eller kendt for at være ustabilt. Installer på eget ansvar.", "Update to %s" : "Opdatér til %s", "Please wait...." : "Vent venligst...", "Error while disabling app" : "Kunne ikke deaktivere app", @@ -75,7 +75,7 @@ "Uninstalling ...." : "Afinstallerer...", "Error while uninstalling app" : "Fejl under afinstallering af app", "Uninstall" : "Afinstallér", - "An error occurred: {message}" : "En fejl opstod:{message}", + "An error occurred: {message}" : "Der opstod en fejl:{message}", "Select a profile picture" : "Vælg et profilbillede", "Very weak password" : "Meget svagt kodeord", "Weak password" : "Svagt kodeord", @@ -116,19 +116,22 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lader ikke til at være korrekt opsat til at forespørge miljøvariablerne i systemet. Testen med getenv(\"PATH\") returnerer blot et tomt svar.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Venligst undersøg <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php konfiguration noter og php konfiguration af din server, specielt når der bruges php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Din server kører på Microsoft Windows. Vi anbefaler stærkt at anvende Linux for en optimal brugeroplevelse.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "Der er installeret %1$s med lavere end version %2$s - af hensyn til stabiliteten og ydelsen, så anbefaler vi at opdatere til en nyere %1$s-version.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP modulet 'fileinfo' mangler. Vi anbefaler stærkt at aktivere dette modul til at få de bedste resultater med mime-type detektion.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer er deaktiveret, dette kan føre til problemer med race betingelser. Aktiver 'filelocking.enabled \"i config.php for at undgå disse problemer. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information.", "System locale can not be set to a one which supports UTF-8." : "Systemets lokalitet kan ikke sættes til et der bruger UTF-8.", "This means that there might be problems with certain characters in file names." : "Det betyder at der kan være problemer med visse tegn i filnavne.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Vi anbefaler kraftigt, at du installerer den krævede pakke på dit system, for at understøtte følgende lokaliteter: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Hvis din installation ikke er installeret i roden af domænet, og bruger systemets cron, så kan der være problemer med URL-oprettelsen. For at undgå disse problemer, så angiv tilvalget \"overwrite.cli.url\" i din fil config.php til webrodens sti for din installation (foreslået værdi: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Det var ikke muligt at udføre cronjobbet via kommandolinjefladen CLI. Følgende tekniske fejl fremkom:", + "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transaktions låsning af filer bliver brugt af databasen som lås til backend, for den bedste ydelse tilrådes det at konfigurere memcache. Se <a target=\"_blank\" href=\"%s\">documentation ↗</a> for mere information", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Dobbelttjek venligst <a target=\"_blank\" href=\"%s\">, og tjek om der er fejl eller advarsler i <a href=\"#log-section\">loggen</a>.", - "All checks passed." : "Alle tjek blev gennemført.", + "All checks passed." : "Alle tjek blev bestået.", "Open documentation" : "Åben dokumentation", "Allow apps to use the Share API" : "Tillad apps til at bruge Share API", "Allow users to share via link" : "Tillad brugere at dele via link", @@ -152,7 +155,7 @@ "Use system's cron service to call the cron.php file every 15 minutes." : "Brug systemets cron service til at kalde cron.php hver 15. minut", "Enable server-side encryption" : "Slå kryptering til på serversiden", "Please read carefully before activating server-side encryption: " : "Læs venligst dette omhyggeligt, før der aktivere kryptering på serversiden:", - "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Kryptering på serversiden er en envejsproces. Når krypteringen slås til, så vil alle filer fremefter blive krypteret på serveren, og det vil ikke være muligt at slå kryptering fra efterfølgende", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Kryptering på serversiden er en envejsproces. Når krypteringen slås til, så vil alle filer fremover blive krypteret på serveren, og det vil ikke være muligt at slå kryptering fra efterfølgende", "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Enhver med priviligeret adgang til din ownCloud-server kan dekryptere dine filer, enten ved at opsnappe forespørgsler eller aflæse brugerkodeord, der bliver lagret i sessionsfiler med klartekst. Kryptering af serversiden beskytter derfor ikke mod ondsindede administratorer, men kan hjælpe til at beskytte dine data når de lagres hos eksterne værter.", "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Afhængig af det faktiske krypteringsmodul, så øges den generelle filstørrelse (med 35%% eller mere ved brug af standardmodulet)", "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Du bør jævnligt foretage sikkerhedskopiering af alle krypteringsnøgler, for at forhindre permanente tab af data (data/<user>/files_encryption and data/files_encryption)", @@ -160,9 +163,9 @@ "Enable encryption" : "Slå kryptering til", "No encryption module loaded, please enable an encryption module in the app menu." : "Der er ikke indlæst et krypteringsmodul - slå venligst et krypteringsmodul til i app-menuen.", "Select default encryption module:" : "Vælg standardmodulet til kryptering:", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Slå venligst \"Standardmodul til kryptering\" til, og kør \"occ encryption:migrate\"", - "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du skal overflytte dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen.", - "Start migration" : "Påbegynd overflytning", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "Du skal immigrere dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen. Slå venligst \"Standardmodul til kryptering\" til, og kør \"occ encryption:migrate\"", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "Du skal immigrere dine krypteringsnøgler fra den gamle kryptering (ownCloud <= 8.0) til den nye af slagsen.", + "Start migration" : "Påbegynd immigrering", "This is used for sending out notifications." : "Dette anvendes til udsendelse af notifikationer.", "Send mode" : "Tilstand for afsendelse", "Encryption" : "Kryptering", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index 45b214299e3..d2026810359 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -125,11 +125,13 @@ OC.L10N.register( "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Uw server draait op Microsoft Windows. We adviseren om een linux server te gebruiken voor een optimale gebruikerservaring.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s lager dan versie %2$s geïnstalleerd, voor betere stabiliteit en prestaties adviseren we bij te werken naar een nieuwere %1$s versie.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.", "This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", + "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a href='%s'>installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", "Open documentation" : "Open documentatie", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 04d4555116b..42c1dacf922 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -123,11 +123,13 @@ "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Uw server draait op Microsoft Windows. We adviseren om een linux server te gebruiken voor een optimale gebruikerservaring.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s lager dan versie %2$s geïnstalleerd, voor betere stabiliteit en prestaties adviseren we bij te werken naar een nieuwere %1$s versie.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "De PHP module 'fileinfo' ontbreekt. We adviseren met klem om deze module te activeren om de beste resultaten te bereiken voor mime-type detectie.", + "Transactional file locking is disabled, this might lead to issues with race conditions. Enable 'filelocking.enabled' in config.php to avoid these problems. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandlocking is gedeactiveerd, dat zou kunnen leiden tot versiebeheerproblemen. Schakel 'filelocking enabled' in config.php in om deze problemen te voorkomen. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "System locale can not be set to a one which supports UTF-8." : "De systeemtaal kan niet worden ingesteld op een taal die UTF-8 ondersteunt.", "This means that there might be problems with certain characters in file names." : "Dat betekent dat er problemen kunnen optreden met bepaalde tekens in bestandsnamen.", "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "We adviseren met klem om de noodzakelijke pakketten op uw systeem te installeren om een van de volgende talen te ondersteunen: %s.", "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Als uw installatie niet in de hoofddirectory van het domein staat, maar wel cron gebruikt, dan kunnen er problemen ontstaan bij het genereren van URL's. Om deze problemen te voorkomen zou u de \"overwrite.cli.url\" optie in config.php moeten instellen op het webroot pad van uw ownCloud (aanbevolen: \"%s\") ", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "het was niet mogelijk om de cronjob via CLI uit te voeren. De volgende technische problemen traden op:", + "Transactional file locking is using the database as locking backend, for best performance it's advised to configure a memcache for locking. See the <a target=\"_blank\" href=\"%s\">documentation ↗</a> for more information." : "Transactionele bestandslocking gebruikt de database als blokkeermechanisme. Voor de beste prestaties wordt geadviseerd om een memcache voor locking te configureren. Zie de <a target=\"_blank\" href=\"%s\">documentatie ↗</a> voor meer informatie.", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lees de <a href='%s'>installatie handleiding</a> goed door en controleer op fouten en waarschuwingen in de <a href=\"#log-section\">logging</a>.", "All checks passed." : "Alle checks geslaagd", "Open documentation" : "Open documentatie", diff --git a/settings/l10n/sk_SK.js b/settings/l10n/sk_SK.js index e9dc5c50621..766677af109 100644 --- a/settings/l10n/sk_SK.js +++ b/settings/l10n/sk_SK.js @@ -180,6 +180,7 @@ OC.L10N.register( "licensed" : "licencované", "Documentation:" : "Dokumentácia:", "User documentation" : "Príručka používateľa", + "Admin documentation" : "Príručka administrátora", "Show description …" : "Zobraziť popis …", "Hide description …" : "Skryť popis …", "This app cannot be installed because the following dependencies are not fulfilled:" : "Túto aplikáciu nemožno nainštalovať, pretože nie sú splnené nasledovné závislosti:", diff --git a/settings/l10n/sk_SK.json b/settings/l10n/sk_SK.json index c29355482a1..2169885795c 100644 --- a/settings/l10n/sk_SK.json +++ b/settings/l10n/sk_SK.json @@ -178,6 +178,7 @@ "licensed" : "licencované", "Documentation:" : "Dokumentácia:", "User documentation" : "Príručka používateľa", + "Admin documentation" : "Príručka administrátora", "Show description …" : "Zobraziť popis …", "Hide description …" : "Skryť popis …", "This app cannot be installed because the following dependencies are not fulfilled:" : "Túto aplikáciu nemožno nainštalovať, pretože nie sú splnené nasledovné závislosti:", diff --git a/tests/core/avatar/avatarcontrollertest.php b/tests/core/avatar/avatarcontrollertest.php index 9accd5181c6..e8fb977fae1 100644 --- a/tests/core/avatar/avatarcontrollertest.php +++ b/tests/core/avatar/avatarcontrollertest.php @@ -96,12 +96,8 @@ class AvatarControllerTest extends \Test\TestCase { // Configure userMock $this->userMock->method('getDisplayName')->willReturn($this->user); $this->userMock->method('getUID')->willReturn($this->user); - $this->container['UserManager'] - ->method('get') + $this->container['UserManager']->method('get') ->willReturnMap([[$this->user, $this->userMock]]); - $this->container['UserManager'] - ->method('userExists') - ->willReturnMap([[$this->user, true]]); $this->container['UserSession']->method('getUser')->willReturn($this->userMock); } @@ -124,10 +120,11 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch an avatar if a user has no avatar */ public function testGetAvatarNoAvatar() { - $this->container['UserManager']->expects($this->once())->method('userExists'); - $this->container['AvatarManager']->expects($this->once())->method('getAvatar')->willReturn($this->avatarMock); + $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); $response = $this->avatarController->getAvatar($this->user, 32); + //Comment out until JS is fixed + //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); $this->assertEquals(Http::STATUS_OK, $response->getStatus()); $this->assertEquals($this->user, $response->getData()['data']['displayname']); } @@ -136,11 +133,9 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch the user's avatar */ public function testGetAvatar() { - $this->container['UserManager']->expects($this->once())->method('userExists'); - $image = new Image(OC::$SERVERROOT.'/tests/data/testimage.jpg'); - $this->avatarMock->expects($this->once())->method('get')->willReturn($image); - $this->container['AvatarManager']->expects($this->once())->method('getAvatar')->willReturn($this->avatarMock); + $this->avatarMock->method('get')->willReturn($image); + $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); $response = $this->avatarController->getAvatar($this->user, 32); @@ -155,19 +150,21 @@ class AvatarControllerTest extends \Test\TestCase { * Fetch the avatar of a non-existing user */ public function testGetAvatarNoUser() { - $this->container['UserManager']->expects($this->once())->method('userExists'); + $this->avatarMock->method('get')->willReturn(null); + $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock); + $response = $this->avatarController->getAvatar($this->user . 'doesnotexist', 32); //Comment out until JS is fixed - $this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); - $this->assertEquals([], $response->getData()); + //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus()); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals('', $response->getData()['data']['displayname']); } /** * Make sure we get the correct size */ public function testGetAvatarSize() { - $this->container['UserManager']->expects($this->once())->method('userExists'); $this->avatarMock->expects($this->once()) ->method('get') ->with($this->equalTo(32)); @@ -181,7 +178,6 @@ class AvatarControllerTest extends \Test\TestCase { * We cannot get avatars that are 0 or negative */ public function testGetAvatarSizeMin() { - $this->container['UserManager']->expects($this->once())->method('userExists'); $this->avatarMock->expects($this->once()) ->method('get') ->with($this->equalTo(64)); @@ -195,7 +191,6 @@ class AvatarControllerTest extends \Test\TestCase { * We do not support avatars larger than 2048*2048 */ public function testGetAvatarSizeMax() { - $this->container['UserManager']->expects($this->once())->method('userExists'); $this->avatarMock->expects($this->once()) ->method('get') ->with($this->equalTo(2048)); diff --git a/tests/core/command/encryption/decryptalltest.php b/tests/core/command/encryption/decryptalltest.php new file mode 100644 index 00000000000..ef36d6d2827 --- /dev/null +++ b/tests/core/command/encryption/decryptalltest.php @@ -0,0 +1,215 @@ +<?php +/** + * @author Björn Schießle <schiessle@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 Tests\Core\Command\Encryption; + + +use OC\Core\Command\Encryption\DecryptAll; +use Test\TestCase; + +class DecryptAllTest extends TestCase { + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\IConfig */ + protected $config; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\Encryption\IManager */ + protected $encryptionManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\App\IAppManager */ + protected $appManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Input\InputInterface */ + protected $consoleInput; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Output\OutputInterface */ + protected $consoleOutput; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Helper\QuestionHelper */ + protected $questionHelper; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OC\Encryption\DecryptAll */ + protected $decryptAll; + + public function setUp() { + parent::setUp(); + + $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $this->encryptionManager = $this->getMockBuilder('OCP\Encryption\IManager') + ->disableOriginalConstructor() + ->getMock(); + $this->appManager = $this->getMockBuilder('OCP\App\IAppManager') + ->disableOriginalConstructor() + ->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor() + ->getMock(); + $this->decryptAll = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->disableOriginalConstructor()->getMock(); + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $this->config->expects($this->any()) + ->method('getSystemValue') + ->with('singleuser', false) + ->willReturn(false); + $this->appManager->expects($this->any()) + ->method('isEnabledForUser') + ->with('files_trashbin')->willReturn(true); + + } + + public function testConstructDesctruct() { + // on construct we enable single-user-mode and disable the trash bin + $this->config->expects($this->at(1)) + ->method('setSystemValue') + ->with('singleuser', true); + $this->appManager->expects($this->once()) + ->method('disableApp') + ->with('files_trashbin'); + + // on destruct wi disable single-user-mode again and enable the trash bin + $this->config->expects($this->at(2)) + ->method('setSystemValue') + ->with('singleuser', false); + $this->appManager->expects($this->once()) + ->method('enableApp') + ->with('files_trashbin'); + + $instance = new DecryptAll( + $this->encryptionManager, + $this->appManager, + $this->config, + $this->decryptAll, + $this->questionHelper + ); + + $this->assertTrue( + $this->invokePrivate($instance, 'wasTrashbinEnabled') + ); + + $this->assertFalse( + $this->invokePrivate($instance, 'wasSingleUserModeEnabled') + ); + } + + /** + * @dataProvider dataTestExecute + */ + public function testExecute($encryptionEnabled, $continue) { + + $instance = new DecryptAll( + $this->encryptionManager, + $this->appManager, + $this->config, + $this->decryptAll, + $this->questionHelper + ); + + $this->encryptionManager->expects($this->once()) + ->method('isEnabled') + ->willReturn($encryptionEnabled); + + $this->consoleInput->expects($this->any()) + ->method('getArgument') + ->with('user') + ->willReturn('user1'); + + if ($encryptionEnabled) { + $this->config->expects($this->at(0)) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'no'); + $this->questionHelper->expects($this->once()) + ->method('ask') + ->willReturn($continue); + if ($continue) { + $this->decryptAll->expects($this->once()) + ->method('decryptAll') + ->with($this->consoleInput, $this->consoleOutput, 'user1'); + } else { + $this->decryptAll->expects($this->never())->method('decryptAll'); + $this->config->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'yes'); + } + } else { + $this->config->expects($this->never())->method('setAppValue'); + $this->decryptAll->expects($this->never())->method('decryptAll'); + $this->questionHelper->expects($this->never())->method('ask'); + } + + $this->invokePrivate($instance, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function dataTestExecute() { + return [ + [true, true], + [true, false], + [false, true], + [false, false] + ]; + } + + /** + * @expectedException \Exception + */ + public function testExecuteFailure() { + $instance = new DecryptAll( + $this->encryptionManager, + $this->appManager, + $this->config, + $this->decryptAll, + $this->questionHelper + ); + + $this->config->expects($this->at(0)) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'no'); + + // make sure that we enable encryption again after a exception was thrown + $this->config->expects($this->at(1)) + ->method('setAppValue') + ->with('core', 'encryption_enabled', 'yes'); + + $this->encryptionManager->expects($this->once()) + ->method('isEnabled') + ->willReturn(true); + + $this->consoleInput->expects($this->any()) + ->method('getArgument') + ->with('user') + ->willReturn('user1'); + + $this->questionHelper->expects($this->once()) + ->method('ask') + ->willReturn(true); + + $this->decryptAll->expects($this->once()) + ->method('decryptAll') + ->with($this->consoleInput, $this->consoleOutput, 'user1') + ->willReturnCallback(function() { throw new \Exception(); }); + + $this->invokePrivate($instance, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + +} diff --git a/tests/core/command/encryption/encryptalltest.php b/tests/core/command/encryption/encryptalltest.php index 41edee6987c..9f7f7375044 100644 --- a/tests/core/command/encryption/encryptalltest.php +++ b/tests/core/command/encryption/encryptalltest.php @@ -81,9 +81,9 @@ class EncryptAllTest extends TestCase { $this->appManager->expects($this->once())->method('disableApp')->with('files_trashbin'); // enable single user mode to avoid that other user login during encryption // destructor should disable the single user mode again - $this->config->expects($this->once())->method('getSystemValue')->with('singleUser', false)->willReturn(false); - $this->config->expects($this->at(1))->method('setSystemValue')->with('singleUser', true); - $this->config->expects($this->at(2))->method('setSystemValue')->with('singleUser', false); + $this->config->expects($this->once())->method('getSystemValue')->with('singleuser', false)->willReturn(false); + $this->config->expects($this->at(1))->method('setSystemValue')->with('singleuser', true); + $this->config->expects($this->at(2))->method('setSystemValue')->with('singleuser', false); new EncryptAll($this->encryptionManager, $this->appManager, $this->config, $this->questionHelper); } diff --git a/tests/karma.config.js b/tests/karma.config.js index d3280b2939a..64a94ef230b 100644 --- a/tests/karma.config.js +++ b/tests/karma.config.js @@ -55,7 +55,8 @@ module.exports = function(config) { 'apps/files_sharing/js/sharedfilelist.js', 'apps/files_sharing/js/share.js', 'apps/files_sharing/js/external.js', - 'apps/files_sharing/js/public.js' + 'apps/files_sharing/js/public.js', + 'apps/files_sharing/js/sharetabview.js' ], testFiles: ['apps/files_sharing/tests/js/*.js'] }, diff --git a/tests/lib/connector/sabre/requesttest/downloadtest.php b/tests/lib/connector/sabre/requesttest/downloadtest.php new file mode 100644 index 00000000000..67dd9f52308 --- /dev/null +++ b/tests/lib/connector/sabre/requesttest/downloadtest.php @@ -0,0 +1,52 @@ +<?php +/** + * Copyright (c) 2015 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace Test\Connector\Sabre\RequestTest; + +use OCP\AppFramework\Http; +use OCP\Lock\ILockingProvider; + +class DownloadTest extends RequestTest { + public function testDownload() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $response = $this->request($view, $user, 'pass', 'GET', '/foo.txt'); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals(stream_get_contents($response->getBody()), 'bar'); + } + + /** + * @expectedException \OC\Connector\Sabre\Exception\FileLocked + */ + public function testDownloadWriteLocked() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $view->lockFile('/foo.txt', ILockingProvider::LOCK_EXCLUSIVE); + + $this->request($view, $user, 'pass', 'GET', '/foo.txt', 'asd'); + } + + public function testDownloadReadLocked() { + $user = $this->getUniqueID(); + $view = $this->setupUser($user, 'pass'); + + $view->file_put_contents('foo.txt', 'bar'); + + $view->lockFile('/foo.txt', ILockingProvider::LOCK_SHARED); + + $response = $this->request($view, $user, 'pass', 'GET', '/foo.txt', 'asd'); + $this->assertEquals(Http::STATUS_OK, $response->getStatus()); + $this->assertEquals(stream_get_contents($response->getBody()), 'bar'); + } +} diff --git a/tests/lib/connector/sabre/requesttest/requesttest.php b/tests/lib/connector/sabre/requesttest/requesttest.php index 7f33dcf817b..7afe2645037 100644 --- a/tests/lib/connector/sabre/requesttest/requesttest.php +++ b/tests/lib/connector/sabre/requesttest/requesttest.php @@ -45,7 +45,8 @@ abstract class RequestTest extends TestCase { \OC::$server->getDatabaseConnection(), \OC::$server->getUserSession(), \OC::$server->getMountManager(), - \OC::$server->getTagManager() + \OC::$server->getTagManager(), + \OC::$server->getEventDispatcher() ); } diff --git a/tests/lib/connector/sabre/requesttest/sapi.php b/tests/lib/connector/sabre/requesttest/sapi.php index 7072b8bd286..cda9fdb70f5 100644 --- a/tests/lib/connector/sabre/requesttest/sapi.php +++ b/tests/lib/connector/sabre/requesttest/sapi.php @@ -41,7 +41,15 @@ class Sapi { * @return void */ public function sendResponse(Response $response) { - $this->response = $response; + // we need to copy the body since we close the source stream + $copyStream = fopen('php://temp', 'r+'); + if (is_string($response->getBody())) { + fwrite($copyStream, $response->getBody()); + } else if (is_resource($response->getBody())) { + stream_copy_to_stream($response->getBody(), $copyStream); + } + rewind($copyStream); + $this->response = new Response($response->getStatus(), $response->getHeaders(), $copyStream); } /** diff --git a/tests/lib/encryption/decryptalltest.php b/tests/lib/encryption/decryptalltest.php new file mode 100644 index 00000000000..eb3bc721f86 --- /dev/null +++ b/tests/lib/encryption/decryptalltest.php @@ -0,0 +1,321 @@ +<?php +/** + * @author Björn Schießle <schiessle@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 Test\Encryption; + + +use OC\Encryption\DecryptAll; +use OC\Encryption\Exceptions\DecryptionFailedException; +use OC\Encryption\Manager; +use OC\Files\View; +use OCP\IUserManager; +use Test\TestCase; + +class DecryptAllTest extends TestCase { + + /** @var \PHPUnit_Framework_MockObject_MockObject | IUserManager */ + protected $userManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | Manager */ + protected $encryptionManager; + + /** @var \PHPUnit_Framework_MockObject_MockObject | View */ + protected $view; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Input\InputInterface */ + protected $inputInterface; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \Symfony\Component\Console\Output\OutputInterface */ + protected $outputInterface; + + /** @var \PHPUnit_Framework_MockObject_MockObject | \OCP\UserInterface */ + protected $userInterface; + + /** @var DecryptAll */ + protected $instance; + + public function setUp() { + parent::setUp(); + + $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor()->getMock(); + $this->encryptionManager = $this->getMockBuilder('OC\Encryption\Manager') + ->disableOriginalConstructor()->getMock(); + $this->view = $this->getMockBuilder('OC\Files\View') + ->disableOriginalConstructor()->getMock(); + $this->inputInterface = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface') + ->disableOriginalConstructor()->getMock(); + $this->outputInterface = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') + ->disableOriginalConstructor()->getMock(); + $this->userInterface = $this->getMockBuilder('OCP\UserInterface') + ->disableOriginalConstructor()->getMock(); + + $this->outputInterface->expects($this->any())->method('getFormatter') + ->willReturn($this->getMock('\Symfony\Component\Console\Formatter\OutputFormatterInterface')); + + $this->instance = new DecryptAll($this->encryptionManager, $this->userManager, $this->view); + + $this->invokePrivate($this->instance, 'input', [$this->inputInterface]); + $this->invokePrivate($this->instance, 'output', [$this->outputInterface]); + } + + /** + * @dataProvider dataTrueFalse + */ + public function testDecryptAll($prepareResult) { + + $user = 'user1'; + + /** @var DecryptAll | \PHPUnit_Framework_MockObject_MockObject | $instance */ + $instance = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->setConstructorArgs( + [ + $this->encryptionManager, + $this->userManager, + $this->view + ] + ) + ->setMethods(['prepareEncryptionModules', 'decryptAllUsersFiles']) + ->getMock(); + + $instance->expects($this->once()) + ->method('prepareEncryptionModules') + ->with($user) + ->willReturn($prepareResult); + + if ($prepareResult) { + $instance->expects($this->once()) + ->method('decryptAllUsersFiles') + ->with($user); + } else { + $instance->expects($this->never())->method('decryptAllUsersFiles'); + } + + $instance->decryptAll($this->inputInterface, $this->outputInterface, $user); + } + + public function dataTrueFalse() { + return [ + [true], + [false] + ]; + } + + /** + * @dataProvider dataTrueFalse + */ + public function testPrepareEncryptionModules($success) { + + $user = 'user1'; + + $dummyEncryptionModule = $this->getMockBuilder('OCP\Encryption\IEncryptionModule') + ->disableOriginalConstructor()->getMock(); + + $dummyEncryptionModule->expects($this->once()) + ->method('prepareDecryptAll') + ->with($this->inputInterface, $this->outputInterface, $user) + ->willReturn($success); + + $callback = function() use ($dummyEncryptionModule) {return $dummyEncryptionModule;}; + $moduleDescription = [ + 'id' => 'id', + 'displayName' => 'displayName', + 'callback' => $callback + ]; + + $this->encryptionManager->expects($this->once()) + ->method('getEncryptionModules') + ->willReturn([$moduleDescription]); + + $this->assertSame($success, + $this->invokePrivate($this->instance, 'prepareEncryptionModules', [$user]) + ); + } + + /** + * @dataProvider dataTestDecryptAllUsersFiles + */ + public function testDecryptAllUsersFiles($user) { + + /** @var DecryptAll | \PHPUnit_Framework_MockObject_MockObject | $instance */ + $instance = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->setConstructorArgs( + [ + $this->encryptionManager, + $this->userManager, + $this->view + ] + ) + ->setMethods(['decryptUsersFiles']) + ->getMock(); + + $this->invokePrivate($instance, 'input', [$this->inputInterface]); + $this->invokePrivate($instance, 'output', [$this->outputInterface]); + + if (empty($user)) { + $this->userManager->expects($this->once()) + ->method('getBackends') + ->willReturn([$this->userInterface]); + $this->userInterface->expects($this->any()) + ->method('getUsers') + ->willReturn(['user1', 'user2']); + $instance->expects($this->at(0)) + ->method('decryptUsersFiles') + ->with('user1'); + $instance->expects($this->at(1)) + ->method('decryptUsersFiles') + ->with('user2'); + } else { + $instance->expects($this->once()) + ->method('decryptUsersFiles') + ->with($user); + } + + $this->invokePrivate($instance, 'decryptAllUsersFiles', [$user]); + } + + public function dataTestDecryptAllUsersFiles() { + return [ + ['user1'], + [''] + ]; + } + + public function testDecryptUsersFiles() { + /** @var DecryptAll | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->setConstructorArgs( + [ + $this->encryptionManager, + $this->userManager, + $this->view + ] + ) + ->setMethods(['decryptFile']) + ->getMock(); + + $this->view->expects($this->at(0))->method('getDirectoryContent') + ->with('/user1/files')->willReturn( + [ + ['name' => 'foo', 'type'=>'dir'], + ['name' => 'bar', 'type'=>'file'], + ] + ); + + $this->view->expects($this->at(3))->method('getDirectoryContent') + ->with('/user1/files/foo')->willReturn( + [ + ['name' => 'subfile', 'type'=>'file'] + ] + ); + + $this->view->expects($this->any())->method('is_dir') + ->willReturnCallback( + function($path) { + if ($path === '/user1/files/foo') { + return true; + } + return false; + } + ); + + $instance->expects($this->at(0)) + ->method('decryptFile') + ->with('/user1/files/bar'); + $instance->expects($this->at(1)) + ->method('decryptFile') + ->with('/user1/files/foo/subfile'); + + $progressBar = $this->getMockBuilder('Symfony\Component\Console\Helper\ProgressBar') + ->disableOriginalConstructor()->getMock(); + + $this->invokePrivate($instance, 'decryptUsersFiles', ['user1', $progressBar, '']); + + } + + public function testDecryptFile() { + + $path = 'test.txt'; + + /** @var DecryptAll | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->setConstructorArgs( + [ + $this->encryptionManager, + $this->userManager, + $this->view + ] + ) + ->setMethods(['getTimestamp']) + ->getMock(); + + $instance->expects($this->any())->method('getTimestamp')->willReturn(42); + + $this->view->expects($this->once()) + ->method('copy') + ->with($path, $path . '.decrypted.42'); + $this->view->expects($this->once()) + ->method('rename') + ->with($path . '.decrypted.42', $path); + + $this->assertTrue( + $this->invokePrivate($instance, 'decryptFile', [$path]) + ); + } + + public function testDecryptFileFailure() { + $path = 'test.txt'; + + /** @var DecryptAll | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OC\Encryption\DecryptAll') + ->setConstructorArgs( + [ + $this->encryptionManager, + $this->userManager, + $this->view + ] + ) + ->setMethods(['getTimestamp']) + ->getMock(); + + $instance->expects($this->any())->method('getTimestamp')->willReturn(42); + + $this->view->expects($this->once()) + ->method('copy') + ->with($path, $path . '.decrypted.42') + ->willReturnCallback(function() { throw new DecryptionFailedException();}); + + $this->view->expects($this->never())->method('rename'); + $this->view->expects($this->once()) + ->method('file_exists') + ->with($path . '.decrypted.42') + ->willReturn(true); + $this->view->expects($this->once()) + ->method('unlink') + ->with($path . '.decrypted.42'); + + $this->assertFalse( + $this->invokePrivate($instance, 'decryptFile', [$path]) + ); + } + +} diff --git a/tests/lib/files/node/folder.php b/tests/lib/files/node/folder.php index 4a88e2acd36..96795cb02ef 100644 --- a/tests/lib/files/node/folder.php +++ b/tests/lib/files/node/folder.php @@ -143,38 +143,13 @@ class Folder extends \Test\TestCase { ->method('getUser') ->will($this->returnValue($this->user)); - /** - * @var \OC\Files\Storage\Storage | \PHPUnit_Framework_MockObject_MockObject $storage - */ - $storage = $this->getMock('\OC\Files\Storage\Storage'); - - $cache = $this->getMock('\OC\Files\Cache\Cache', array(), array('')); - $cache->expects($this->any()) - ->method('getStatus') - ->with('foo') - ->will($this->returnValue(Cache::COMPLETE)); - - $cache->expects($this->once()) - ->method('getFolderContents') - ->with('foo') - ->will($this->returnValue(array( - array('fileid' => 2, 'path' => '/bar/foo/asd', 'name' => 'asd', 'size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain'), - array('fileid' => 3, 'path' => '/bar/foo/qwerty', 'name' => 'qwerty', 'size' => 200, 'mtime' => 55, 'mimetype' => 'httpd/unix-directory') - ))); - - $root->expects($this->once()) - ->method('getMountsIn') - ->with('/bar/foo') - ->will($this->returnValue(array())); - - $storage->expects($this->any()) - ->method('getCache') - ->will($this->returnValue($cache)); - $view->expects($this->any()) - ->method('resolvePath') + ->method('getDirectoryContent') ->with('/bar/foo') - ->will($this->returnValue(array($storage, 'foo'))); + ->will($this->returnValue(array( + new FileInfo('/bar/foo/asd', null, 'foo/asd', ['fileid' => 2, 'path' => '/bar/foo/asd', 'name' => 'asd', 'size' => 100, 'mtime' => 50, 'mimetype' => 'text/plain'], null), + new FileInfo('/bar/foo/qwerty', null, 'foo/qwerty', ['fileid' => 3, 'path' => '/bar/foo/qwerty', 'name' => 'qwerty', 'size' => 200, 'mtime' => 55, 'mimetype' => 'httpd/unix-directory'], null) + ))); $node = new \OC\Files\Node\Folder($root, $view, '/bar/foo'); $children = $node->getDirectoryListing(); @@ -183,6 +158,8 @@ class Folder extends \Test\TestCase { $this->assertInstanceOf('\OC\Files\Node\Folder', $children[1]); $this->assertEquals('asd', $children[0]->getName()); $this->assertEquals('qwerty', $children[1]->getName()); + $this->assertEquals(2, $children[0]->getId()); + $this->assertEquals(3, $children[1]->getId()); } public function testGet() { diff --git a/tests/lib/files/storage/wrapper/encryption.php b/tests/lib/files/storage/wrapper/encryption.php index 36a5b288c64..44e910b901f 100644 --- a/tests/lib/files/storage/wrapper/encryption.php +++ b/tests/lib/files/storage/wrapper/encryption.php @@ -194,7 +194,7 @@ class Encryption extends \Test\Files\Storage\Storage { protected function buildMockModule() { $this->encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') ->disableOriginalConstructor() - ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize', 'isReadable', 'encryptAll']) + ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize', 'isReadable', 'encryptAll', 'prepareDecryptAll']) ->getMock(); $this->encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); diff --git a/tests/lib/files/stream/encryption.php b/tests/lib/files/stream/encryption.php index ed3b5b1b156..f9d8f076b63 100644 --- a/tests/lib/files/stream/encryption.php +++ b/tests/lib/files/stream/encryption.php @@ -305,7 +305,7 @@ class Encryption extends \Test\TestCase { protected function buildMockModule() { $encryptionModule = $this->getMockBuilder('\OCP\Encryption\IEncryptionModule') ->disableOriginalConstructor() - ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize', 'isReadable', 'encryptAll']) + ->setMethods(['getId', 'getDisplayName', 'begin', 'end', 'encrypt', 'decrypt', 'update', 'shouldEncrypt', 'getUnencryptedBlockSize', 'isReadable', 'encryptAll', 'prepareDecryptAll']) ->getMock(); $encryptionModule->expects($this->any())->method('getId')->willReturn('UNIT_TEST_MODULE'); diff --git a/version.php b/version.php index cfc4db82995..0f7fef95be4 100644 --- a/version.php +++ b/version.php @@ -23,12 +23,12 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version = [8, 2, 0, 5]; +$OC_Version = array(8, 2, 0, 5); // The human readable string $OC_VersionString = '8.2 pre alpha'; -$OC_VersionCanBeUpgradedFrom = [8, 1]; +$OC_VersionCanBeUpgradedFrom = array(8, 1); // The ownCloud channel $OC_Channel = 'git'; |