diff options
Diffstat (limited to 'apps')
90 files changed, 605 insertions, 222 deletions
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 24a7fd2ee47..49dd28517be 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -170,6 +170,12 @@ var FileList={ return; } FileList.setCurrentDir(targetDir, changeUrl); + $('#fileList').trigger( + jQuery.Event('changeDirectory', { + dir: targetDir, + previousDir: currentDir + } + )); FileList.reload(); }, linkTo: function(dir) { @@ -654,19 +660,19 @@ var FileList={ $('.summary .filesize').html(humanFileSize(fileSummary.totalSize)); // Show only what's necessary (may be hidden) - if ($dirInfo.html().charAt(0) === "0") { + if (fileSummary.totalDirs === 0) { $dirInfo.hide(); $connector.hide(); } else { $dirInfo.show(); } - if ($fileInfo.html().charAt(0) === "0") { + if (fileSummary.totalFiles === 0) { $fileInfo.hide(); $connector.hide(); } else { $fileInfo.show(); } - if ($dirInfo.html().charAt(0) !== "0" && $fileInfo.html().charAt(0) !== "0") { + if (fileSummary.totalDirs > 0 && fileSummary.totalFiles > 0) { $connector.show(); } } diff --git a/apps/files/js/files.js b/apps/files/js/files.js index 2947512ece5..fdaa3aa3342 100644 --- a/apps/files/js/files.js +++ b/apps/files/js/files.js @@ -636,7 +636,7 @@ function procesSelection() { if (selectedFiles.length>0) { selection += n('files', '%n file', '%n files', selectedFiles.length); } - $('#headerName>span.name').text(selection); + $('#headerName span.name').text(selection); $('#modified').text(''); $('table').addClass('multiselect'); } diff --git a/apps/files/l10n/pt_BR.php b/apps/files/l10n/pt_BR.php index 2e7c14acd9c..217e9f4599c 100644 --- a/apps/files/l10n/pt_BR.php +++ b/apps/files/l10n/pt_BR.php @@ -60,6 +60,7 @@ $TRANSLATIONS = array( "Name" => "Nome", "Size" => "Tamanho", "Modified" => "Modificado", +"Invalid folder name. Usage of 'Shared' is reserved." => "Nome da pasta inválido. Uso de 'Shared' é reservado.", "%s could not be renamed" => "%s não pode ser renomeado", "Upload" => "Upload", "File handling" => "Tratamento de Arquivo", diff --git a/apps/files/l10n/ru_RU.php b/apps/files/l10n/ru_RU.php index 3b69c96bcdd..3660b300c2b 100644 --- a/apps/files/l10n/ru_RU.php +++ b/apps/files/l10n/ru_RU.php @@ -8,6 +8,7 @@ $TRANSLATIONS = array( "_Uploading %n file_::_Uploading %n files_" => array("","",""), "Error" => "Ошибка", "Upload" => "Загрузка", +"Save" => "Сохранить", "Cancel upload" => "Отмена загрузки", "Download" => "Загрузка" ); diff --git a/apps/files/l10n/uz.php b/apps/files/l10n/uz.php new file mode 100644 index 00000000000..70ab6572ba4 --- /dev/null +++ b/apps/files/l10n/uz.php @@ -0,0 +1,7 @@ +<?php +$TRANSLATIONS = array( +"_%n folder_::_%n folders_" => array(""), +"_%n file_::_%n files_" => array(""), +"_Uploading %n file_::_Uploading %n files_" => array("") +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_encryption/l10n/pt_BR.php b/apps/files_encryption/l10n/pt_BR.php index fd3e7298bd5..b09b4367c4e 100644 --- a/apps/files_encryption/l10n/pt_BR.php +++ b/apps/files_encryption/l10n/pt_BR.php @@ -9,6 +9,7 @@ $TRANSLATIONS = array( "Private key password successfully updated." => "Senha de chave privada atualizada com sucesso.", "Could not update the private key password. Maybe the old password was not correct." => "Não foi possível atualizar a senha de chave privada. Talvez a senha antiga esteja incorreta.", "Encryption app not initialized! Maybe the encryption app was re-enabled during your session. Please try to log out and log back in to initialize the encryption app." => "Aplicativo de criptografia não foi inicializado! Talvez o aplicativo de criptografia tenha sido reativado durante essa sessão. Por favor, tente fazer logoff e login novamente para inicializar o aplicativo de criptografia.", +"Your private key is not valid! Likely your password was changed outside of %s (e.g. your corporate directory). You can update your private key password in your personal settings to recover access to your encrypted files." => "Sua chave privada não é válida! Provavelmente sua senha foi alterada fora de %s (por exemplo, seu diretório corporativo). Você pode atualizar sua senha de chave privada em suas configurações pessoais para recuperar o acesso a seus arquivos criptografados.", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." => "Este arquivo não pode ser decriptado, provavelmente este é um arquivo compartilhado. Poe favoe peça ao dono do arquivo para compartilha-lo com você.", "Unknown error please check your system settings or contact your administrator" => "Erro desconhecido, por favor verifique suas configurações ou faça contato com o administrador", "Missing requirements." => "Requisitos não encontrados.", diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php index 91dd08ec08d..314ac577b2f 100755 --- a/apps/files_encryption/lib/helper.php +++ b/apps/files_encryption/lib/helper.php @@ -157,6 +157,49 @@ class Helper { return $return; } + /** + * @brief Check if a path is a .part file + * @param string $path Path that may identify a .part file + * @return bool + */ + public static function isPartialFilePath($path) { + + $extension = pathinfo($path, PATHINFO_EXTENSION); + if ( $extension === 'part' || $extension === 'etmp') { + return true; + } else { + return false; + } + + } + + + /** + * @brief Remove .path extension from a file path + * @param string $path Path that may identify a .part file + * @return string File path without .part extension + * @note this is needed for reusing keys + */ + public static function stripPartialFileExtension($path) { + $extension = pathinfo($path, PATHINFO_EXTENSION); + + if ( $extension === 'part' || $extension === 'etmp') { + + $newLength = strlen($path) - 5; // 5 = strlen(".part") = strlen(".etmp") + $fPath = substr($path, 0, $newLength); + + // if path also contains a transaction id, we remove it too + $extension = pathinfo($fPath, PATHINFO_EXTENSION); + if(substr($extension, 0, 12) === 'ocTransferId') { // 12 = strlen("ocTransferId") + $newLength = strlen($fPath) - strlen($extension) -1; + $fPath = substr($fPath, 0, $newLength); + } + return $fPath; + + } else { + return $path; + } + } /** * @brief disable recovery diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php index 7143fcff0f6..6dadd12a62e 100755 --- a/apps/files_encryption/lib/keymanager.php +++ b/apps/files_encryption/lib/keymanager.php @@ -152,10 +152,10 @@ class Keymanager { } // try reusing key file if part file - if (self::isPartialFilePath($targetPath)) { + if (Helper::isPartialFilePath($targetPath)) { $result = $view->file_put_contents( - $basePath . '/' . self::fixPartialFilePath($targetPath) . '.key', $catfile); + $basePath . '/' . Helper::stripPartialFileExtension($targetPath) . '.key', $catfile); } else { @@ -170,48 +170,6 @@ class Keymanager { } /** - * @brief Remove .path extension from a file path - * @param string $path Path that may identify a .part file - * @return string File path without .part extension - * @note this is needed for reusing keys - */ - public static function fixPartialFilePath($path) { - - if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) { - - $newLength = strlen($path) - 5; - $fPath = substr($path, 0, $newLength); - - return $fPath; - - } else { - - return $path; - - } - - } - - /** - * @brief Check if a path is a .part file - * @param string $path Path that may identify a .part file - * @return bool - */ - public static function isPartialFilePath($path) { - - if (preg_match('/\.part$/', $path) || preg_match('/\.etmp$/', $path)) { - - return true; - - } else { - - return false; - - } - - } - - /** * @brief retrieve keyfile for an encrypted file * @param \OC_FilesystemView $view * @param $userId @@ -226,7 +184,7 @@ class Keymanager { $util = new Util($view, \OCP\User::getUser()); list($owner, $filename) = $util->getUidAndFilename($filePath); - $filename = self::fixPartialFilePath($filename); + $filename = Helper::stripPartialFileExtension($filename); $filePath_f = ltrim($filename, '/'); // in case of system wide mount points the keys are stored directly in the data directory @@ -385,8 +343,8 @@ class Keymanager { foreach ($shareKeys as $userId => $shareKey) { // try reusing key file if part file - if (self::isPartialFilePath($shareKeyPath)) { - $writePath = $basePath . '/' . self::fixPartialFilePath($shareKeyPath) . '.' . $userId . '.shareKey'; + if (Helper::isPartialFilePath($shareKeyPath)) { + $writePath = $basePath . '/' . Helper::stripPartialFileExtension($shareKeyPath) . '.' . $userId . '.shareKey'; } else { $writePath = $basePath . '/' . $shareKeyPath . '.' . $userId . '.shareKey'; } @@ -422,7 +380,7 @@ class Keymanager { $util = new Util($view, \OCP\User::getUser()); list($owner, $filename) = $util->getUidAndFilename($filePath); - $filename = self::fixPartialFilePath($filename); + $filename = Helper::stripPartialFileExtension($filename); // in case of system wide mount points the keys are stored directly in the data directory if ($util->isSystemWideMountPoint($filename)) { $shareKeyPath = '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey'; diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php index 6dc5c9ce1b8..e2bc8f6b163 100644 --- a/apps/files_encryption/lib/proxy.php +++ b/apps/files_encryption/lib/proxy.php @@ -342,7 +342,7 @@ class Proxy extends \OC_FileProxy { $fileInfo = false; // get file info from database/cache if not .part file - if (!Keymanager::isPartialFilePath($path)) { + if (!Helper::isPartialFilePath($path)) { $fileInfo = $view->getFileInfo($path); } @@ -353,7 +353,7 @@ class Proxy extends \OC_FileProxy { $fixSize = $util->getFileSize($path); $fileInfo['unencrypted_size'] = $fixSize; // put file info if not .part file - if (!Keymanager::isPartialFilePath($relativePath)) { + if (!Helper::isPartialFilePath($relativePath)) { $view->putFileInfo($path, $fileInfo); } } @@ -372,7 +372,7 @@ class Proxy extends \OC_FileProxy { $fileInfo['unencrypted_size'] = $size; // put file info if not .part file - if (!Keymanager::isPartialFilePath($relativePath)) { + if (!Helper::isPartialFilePath($relativePath)) { $view->putFileInfo($path, $fileInfo); } } diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php index 5e855abd973..f099a36d0c0 100644 --- a/apps/files_encryption/lib/util.php +++ b/apps/files_encryption/lib/util.php @@ -1145,10 +1145,7 @@ class Util { // Make sure that a share key is generated for the owner too list($owner, $ownerPath) = $this->getUidAndFilename($filePath); - $pathinfo = pathinfo($ownerPath); - if(array_key_exists('extension', $pathinfo) && $pathinfo['extension'] === 'part') { - $ownerPath = $pathinfo['dirname'] . '/' . $pathinfo['filename']; - } + $ownerPath = \OCA\Encryption\Helper::stripPartialFileExtension($ownerPath); $userIds = array(); if ($sharingEnabled) { diff --git a/apps/files_encryption/tests/helper.php b/apps/files_encryption/tests/helper.php new file mode 100644 index 00000000000..067fc763a95 --- /dev/null +++ b/apps/files_encryption/tests/helper.php @@ -0,0 +1,54 @@ +<?php +/** + * Copyright (c) 2013 Bjoern Schiessle <schiessle@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + + +require_once __DIR__ . '/../lib/helper.php'; + +use OCA\Encryption; + +/** + * Class Test_Encryption_Helper + */ +class Test_Encryption_Helper extends \PHPUnit_Framework_TestCase { + + /** + * @medium + */ + function testStripPartialFileExtension() { + + $partFilename = 'testfile.txt.part'; + $filename = 'testfile.txt'; + + $this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename)); + + $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename)); + + $this->assertFalse(Encryption\Helper::isPartialFilePath($filename)); + + $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename)); + } + + + /** + * @medium + */ + function testStripPartialFileExtensionWithTransferIdPath() { + + $partFilename = 'testfile.txt.ocTransferId643653835.part'; + $filename = 'testfile.txt'; + + $this->assertTrue(Encryption\Helper::isPartialFilePath($partFilename)); + + $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($partFilename)); + + $this->assertFalse(Encryption\Helper::isPartialFilePath($filename)); + + $this->assertEquals('testfile.txt', Encryption\Helper::stripPartialFileExtension($filename)); + } + +}
\ No newline at end of file diff --git a/apps/files_encryption/tests/keymanager.php b/apps/files_encryption/tests/keymanager.php index b2d200cca3e..ad6bbd3a7e9 100644 --- a/apps/files_encryption/tests/keymanager.php +++ b/apps/files_encryption/tests/keymanager.php @@ -191,23 +191,6 @@ class Test_Encryption_Keymanager extends \PHPUnit_Framework_TestCase { /** * @medium */ - function testFixPartialFilePath() { - - $partFilename = 'testfile.txt.part'; - $filename = 'testfile.txt'; - - $this->assertTrue(Encryption\Keymanager::isPartialFilePath($partFilename)); - - $this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($partFilename)); - - $this->assertFalse(Encryption\Keymanager::isPartialFilePath($filename)); - - $this->assertEquals('testfile.txt', Encryption\Keymanager::fixPartialFilePath($filename)); - } - - /** - * @medium - */ function testRecursiveDelShareKeys() { // generate filename diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index 257da89c84e..6141d832199 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -43,7 +43,7 @@ class Shared extends \OC\Files\Storage\Common { * @param string Shared target file path * @return Returns array with the keys path, permissions, and owner or false if not found */ - private function getFile($target) { + public function getFile($target) { if (!isset($this->files[$target])) { // Check for partial files if (pathinfo($target, PATHINFO_EXTENSION) === 'part') { @@ -66,7 +66,7 @@ class Shared extends \OC\Files\Storage\Common { * @param string Shared target file path * @return string source file path or false if not found */ - private function getSourcePath($target) { + public function getSourcePath($target) { $source = $this->getFile($target); if ($source) { if (!isset($source['fullPath'])) { diff --git a/apps/files_sharing/lib/watcher.php b/apps/files_sharing/lib/watcher.php index 6fdfc1db36d..c40cf6911b8 100644 --- a/apps/files_sharing/lib/watcher.php +++ b/apps/files_sharing/lib/watcher.php @@ -32,9 +32,32 @@ class Shared_Watcher extends Watcher { * @param string $path */ public function checkUpdate($path) { - if ($path != '') { - parent::checkUpdate($path); + if ($path != '' && parent::checkUpdate($path)) { + // since checkUpdate() has already updated the size of the subdirs, + // only apply the update to the owner's parent dirs + + // find last parent before reaching the shared storage root, + // which is the actual shared dir from the owner + $sepPos = strpos($path, '/'); + if ($sepPos > 0) { + $baseDir = substr($path, 0, $sepPos); + } else { + $baseDir = $path; + } + + // find the path relative to the data dir + $file = $this->storage->getFile($baseDir); + $view = new \OC\Files\View('/' . $file['fileOwner']); + + // find the owner's storage and path + list($storage, $internalPath) = $view->resolvePath($file['path']); + + // update the parent dirs' sizes in the owner's cache + $storage->getCache()->correctFolderSize(dirname($internalPath)); + + return true; } + return false; } /** diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php index 44fc4d8b7b3..1278e0c4d1f 100644 --- a/apps/files_sharing/tests/api.php +++ b/apps/files_sharing/tests/api.php @@ -20,90 +20,33 @@ * */ -require_once __DIR__ . '/../../../lib/base.php'; +require_once __DIR__ . '/base.php'; use OCA\Files\Share; /** * Class Test_Files_Sharing_Api */ -class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase { - - const TEST_FILES_SHARING_API_USER1 = "test-share-user1"; - const TEST_FILES_SHARING_API_USER2 = "test-share-user2"; - const TEST_FILES_SHARING_API_USER3 = "test-share-user3"; - - public $stateFilesEncryption; - public $filename; - public $data; - /** - * @var OC_FilesystemView - */ - public $view; - public $folder; - - public static function setUpBeforeClass() { - // reset backend - \OC_User::clearBackends(); - \OC_User::useBackend('database'); - - // clear share hooks - \OC_Hook::clear('OCP\\Share'); - \OC::registerShareHooks(); - \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); - - // create users - self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1, true); - self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, true); - self::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER3, true); - - } +class Test_Files_Sharing_Api extends Test_Files_Sharing_Base { function setUp() { - - //login as user1 - \Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1); - - $this->data = 'foobar'; - $this->view = new \OC_FilesystemView('/' . \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1 . '/files'); + parent::setUp(); $this->folder = '/folder_share_api_test'; $this->filename = 'share-api-test.txt'; - // remember files_encryption state - $this->stateFilesEncryption = \OC_App::isEnabled('files_encryption'); - - //we don't want to tests with app files_encryption enabled - \OC_App::disable('files_encryption'); - - - $this->assertTrue(!\OC_App::isEnabled('files_encryption')); - // save file with content $this->view->file_put_contents($this->filename, $this->data); $this->view->mkdir($this->folder); $this->view->file_put_contents($this->folder.'/'.$this->filename, $this->data); - } function tearDown() { $this->view->unlink($this->filename); $this->view->deleteAll($this->folder); - // reset app files_encryption - if ($this->stateFilesEncryption) { - \OC_App::enable('files_encryption'); - } else { - \OC_App::disable('files_encryption'); - } - } - - public static function tearDownAfterClass() { - // cleanup users - \OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1); - \OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); - \OC_User::deleteUser(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER3); + parent::tearDown(); } /** @@ -548,50 +491,4 @@ class Test_Files_Sharing_Api extends \PHPUnit_Framework_TestCase { $this->assertTrue(empty($itemsAfterDelete)); } - - /** - * @param $user - * @param bool $create - * @param bool $password - */ - private static function loginHelper($user, $create = false, $password = false) { - if ($create) { - \OC_User::createUser($user, $user); - } - - if ($password === false) { - $password = $user; - } - - \OC_Util::tearDownFS(); - \OC_User::setUserId(''); - \OC\Files\Filesystem::tearDown(); - \OC_Util::setupFS($user); - \OC_User::setUserId($user); - - $params['uid'] = $user; - $params['password'] = $password; - } - - /** - * @brief get some information from a given share - * @param int $shareID - * @return array with: item_source, share_type, share_with, item_type, permissions - */ - private function getShareFromId($shareID) { - $sql = 'SELECT `item_source`, `share_type`, `share_with`, `item_type`, `permissions` FROM `*PREFIX*share` WHERE `id` = ?'; - $args = array($shareID); - $query = \OCP\DB::prepare($sql); - $result = $query->execute($args); - - $share = Null; - - if ($result && $result->numRows() > 0) { - $share = $result->fetchRow(); - } - - return $share; - - } - } diff --git a/apps/files_sharing/tests/base.php b/apps/files_sharing/tests/base.php new file mode 100644 index 00000000000..689c80cb9e6 --- /dev/null +++ b/apps/files_sharing/tests/base.php @@ -0,0 +1,143 @@ +<?php +/** + * ownCloud + * + * @author Bjoern Schiessle + * @copyright 2013 Bjoern Schiessle <schiessle@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/>. + * + */ + +require_once __DIR__ . '/../../../lib/base.php'; + +use OCA\Files\Share; + +/** + * Class Test_Files_Sharing_Base + * + * Base class for sharing tests. + */ +abstract class Test_Files_Sharing_Base extends \PHPUnit_Framework_TestCase { + + const TEST_FILES_SHARING_API_USER1 = "test-share-user1"; + const TEST_FILES_SHARING_API_USER2 = "test-share-user2"; + const TEST_FILES_SHARING_API_USER3 = "test-share-user3"; + + public $stateFilesEncryption; + public $filename; + public $data; + /** + * @var OC_FilesystemView + */ + public $view; + public $folder; + + public static function setUpBeforeClass() { + // reset backend + \OC_User::clearBackends(); + \OC_User::useBackend('database'); + + // clear share hooks + \OC_Hook::clear('OCP\\Share'); + \OC::registerShareHooks(); + \OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup'); + + // create users + self::loginHelper(self::TEST_FILES_SHARING_API_USER1, true); + self::loginHelper(self::TEST_FILES_SHARING_API_USER2, true); + self::loginHelper(self::TEST_FILES_SHARING_API_USER3, true); + + } + + function setUp() { + + //login as user1 + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + + $this->data = 'foobar'; + $this->view = new \OC_FilesystemView('/' . self::TEST_FILES_SHARING_API_USER1 . '/files'); + // remember files_encryption state + $this->stateFilesEncryption = \OC_App::isEnabled('files_encryption'); + + //we don't want to tests with app files_encryption enabled + \OC_App::disable('files_encryption'); + + + $this->assertTrue(!\OC_App::isEnabled('files_encryption')); + } + + function tearDown() { + // reset app files_encryption + if ($this->stateFilesEncryption) { + \OC_App::enable('files_encryption'); + } else { + \OC_App::disable('files_encryption'); + } + } + + public static function tearDownAfterClass() { + + // cleanup users + \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER1); + \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER2); + \OC_User::deleteUser(self::TEST_FILES_SHARING_API_USER3); + } + + /** + * @param $user + * @param bool $create + * @param bool $password + */ + protected static function loginHelper($user, $create = false, $password = false) { + if ($create) { + \OC_User::createUser($user, $user); + } + + if ($password === false) { + $password = $user; + } + + \OC_Util::tearDownFS(); + \OC_User::setUserId(''); + \OC\Files\Filesystem::tearDown(); + \OC_Util::setupFS($user); + \OC_User::setUserId($user); + + $params['uid'] = $user; + $params['password'] = $password; + } + + /** + * @brief get some information from a given share + * @param int $shareID + * @return array with: item_source, share_type, share_with, item_type, permissions + */ + protected function getShareFromId($shareID) { + $sql = 'SELECT `item_source`, `share_type`, `share_with`, `item_type`, `permissions` FROM `*PREFIX*share` WHERE `id` = ?'; + $args = array($shareID); + $query = \OCP\DB::prepare($sql); + $result = $query->execute($args); + + $share = Null; + + if ($result && $result->numRows() > 0) { + $share = $result->fetchRow(); + } + + return $share; + + } + +} diff --git a/apps/files_sharing/tests/watcher.php b/apps/files_sharing/tests/watcher.php new file mode 100644 index 00000000000..1a9a54cbcf8 --- /dev/null +++ b/apps/files_sharing/tests/watcher.php @@ -0,0 +1,161 @@ +<?php +/** + * ownCloud + * + * @author Vincent Petry + * @copyright 2013 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/>. + * + */ +require_once __DIR__ . '/base.php'; + +class Test_Files_Sharing_Watcher extends Test_Files_Sharing_Base { + + function setUp() { + parent::setUp(); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + + // prepare user1's dir structure + $textData = "dummy file data\n"; + $this->view->mkdir('container'); + $this->view->mkdir('container/shareddir'); + $this->view->mkdir('container/shareddir/subdir'); + + list($this->ownerStorage, $internalPath) = $this->view->resolvePath(''); + $this->ownerCache = $this->ownerStorage->getCache(); + $this->ownerStorage->getScanner()->scan(''); + + // share "shareddir" with user2 + $fileinfo = $this->view->getFileInfo('container/shareddir'); + \OCP\Share::shareItem('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + self::TEST_FILES_SHARING_API_USER2, 31); + + // login as user2 + self::loginHelper(self::TEST_FILES_SHARING_API_USER2); + + // retrieve the shared storage + $secondView = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2); + list($this->sharedStorage, $internalPath) = $secondView->resolvePath('files/Shared/shareddir'); + $this->sharedCache = $this->sharedStorage->getCache(); + } + + function tearDown() { + $this->sharedCache->clear(); + + self::loginHelper(self::TEST_FILES_SHARING_API_USER1); + + $fileinfo = $this->view->getFileInfo('container/shareddir'); + \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + self::TEST_FILES_SHARING_API_USER2); + + $this->view->deleteAll('container'); + + $this->ownerCache->clear(); + + parent::tearDown(); + } + + /** + * Tests that writing a file using the shared storage will propagate the file + * size to the owner's parent folders. + */ + function testFolderSizePropagationToOwnerStorage() { + $initialSizes = self::getOwnerDirSizes('files/container/shareddir'); + + $textData = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $dataLen = strlen($textData); + $this->sharedCache->put('shareddir/bar.txt', array('storage_mtime' => 10)); + $this->sharedStorage->file_put_contents('shareddir/bar.txt', $textData); + $this->sharedCache->put('shareddir', array('storage_mtime' => 10)); + + // run the propagation code + $result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir'); + + $this->assertTrue($result); + + // the owner's parent dirs must have increase size + $newSizes = self::getOwnerDirSizes('files/container/shareddir'); + $this->assertEquals($initialSizes[''] + $dataLen, $newSizes['']); + $this->assertEquals($initialSizes['files'] + $dataLen, $newSizes['files']); + $this->assertEquals($initialSizes['files/container'] + $dataLen, $newSizes['files/container']); + $this->assertEquals($initialSizes['files/container/shareddir'] + $dataLen, $newSizes['files/container/shareddir']); + + // no more updates + $result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir'); + + $this->assertFalse($result); + } + + /** + * Tests that writing a file using the shared storage will propagate the file + * size to the owner's parent folders. + */ + function testSubFolderSizePropagationToOwnerStorage() { + $initialSizes = self::getOwnerDirSizes('files/container/shareddir/subdir'); + + $textData = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $dataLen = strlen($textData); + $this->sharedCache->put('shareddir/subdir/bar.txt', array('storage_mtime' => 10)); + $this->sharedStorage->file_put_contents('shareddir/subdir/bar.txt', $textData); + $this->sharedCache->put('shareddir/subdir', array('storage_mtime' => 10)); + + // run the propagation code + $result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir/subdir'); + + $this->assertTrue($result); + + // the owner's parent dirs must have increase size + $newSizes = self::getOwnerDirSizes('files/container/shareddir/subdir'); + $this->assertEquals($initialSizes[''] + $dataLen, $newSizes['']); + $this->assertEquals($initialSizes['files'] + $dataLen, $newSizes['files']); + $this->assertEquals($initialSizes['files/container'] + $dataLen, $newSizes['files/container']); + $this->assertEquals($initialSizes['files/container/shareddir'] + $dataLen, $newSizes['files/container/shareddir']); + $this->assertEquals($initialSizes['files/container/shareddir/subdir'] + $dataLen, $newSizes['files/container/shareddir/subdir']); + + // no more updates + $result = $this->sharedStorage->getWatcher()->checkUpdate('shareddir/subdir'); + + $this->assertFalse($result); + } + + function testNoUpdateOnRoot() { + // no updates when called for root path + $result = $this->sharedStorage->getWatcher()->checkUpdate(''); + + $this->assertFalse($result); + + // FIXME: for some reason when running this "naked" test, + // there will be remaining nonsensical entries in the + // database with a path "test-share-user1/container/..." + } + + /** + * Returns the sizes of the path and its parent dirs in a hash + * where the key is the path and the value is the size. + */ + function getOwnerDirSizes($path) { + $result = array(); + + while ($path != '' && $path != '' && $path != '.') { + $cachedData = $this->ownerCache->get($path); + $result[$path] = $cachedData['size']; + $path = dirname($path); + } + $cachedData = $this->ownerCache->get(''); + $result[''] = $cachedData['size']; + return $result; + } +} diff --git a/apps/files_trashbin/l10n/ms_MY.php b/apps/files_trashbin/l10n/ms_MY.php index 1972eba0318..e7721313918 100644 --- a/apps/files_trashbin/l10n/ms_MY.php +++ b/apps/files_trashbin/l10n/ms_MY.php @@ -1,7 +1,14 @@ <?php $TRANSLATIONS = array( +"Couldn't delete %s permanently" => "Tidak dapat menghapuskan %s secara kekal", +"Couldn't restore %s" => "Tidak dapat memulihkan %s", "Error" => "Ralat", +"restored" => "dipulihkan", +"Nothing in here. Your trash bin is empty!" => "Tiada apa disini. Tong sampah anda kosong!", "Name" => "Nama", -"Delete" => "Padam" +"Restore" => "Pulihkan", +"Deleted" => "Dihapuskan", +"Delete" => "Padam", +"Deleted Files" => "Fail Dihapus" ); $PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php index c79afdc0c2e..f419f515f1e 100644 --- a/apps/files_trashbin/lib/trashbin.php +++ b/apps/files_trashbin/lib/trashbin.php @@ -530,6 +530,7 @@ class Trashbin { $size += $view->filesize('/files_trashbin/files/' . $file); } $view->unlink('/files_trashbin/files/' . $file); + \OC_Hook::emit('\OCP\Trashbin', 'delete', array('path' => '/files_trashbin/files/' . $file)); $trashbinSize -= $size; self::setTrashbinSize($user, $trashbinSize); diff --git a/apps/files_versions/l10n/ms_MY.php b/apps/files_versions/l10n/ms_MY.php new file mode 100644 index 00000000000..513dff49b24 --- /dev/null +++ b/apps/files_versions/l10n/ms_MY.php @@ -0,0 +1,10 @@ +<?php +$TRANSLATIONS = array( +"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...", +"No other versions available" => "Tiada lagi versi lain", +"Restore" => "Pulihkan" +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php index 225611374a6..661e98b09d5 100644 --- a/apps/files_versions/lib/versions.php +++ b/apps/files_versions/lib/versions.php @@ -156,6 +156,7 @@ class Storage { } foreach ($versions as $v) { unlink($abs_path . $v['version']); + \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $abs_path . $v['version'])); $versionsSize -= $v['size']; } self::setVersionsSize($uid, $versionsSize); @@ -465,6 +466,7 @@ class Storage { while ($availableSpace < 0 && $i < $numOfVersions) { $version = current($allVersions); $versionsFileview->unlink($version['path'].'.v'.$version['version']); + \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version'])); $versionsSize -= $version['size']; $availableSpace += $version['size']; next($allVersions); @@ -515,6 +517,7 @@ class Storage { if ($version['version'] > $nextVersion) { //distance between two version too small, delete version $versionsFileview->unlink($version['path'] . '.v' . $version['version']); + \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'] . '.v' . $version['version'])); $size += $version['size']; unset($allVersions[$key]); // update array with all versions } else { diff --git a/apps/user_ldap/l10n/ar.php b/apps/user_ldap/l10n/ar.php index 47ec9db7909..2b0cbbd75a5 100644 --- a/apps/user_ldap/l10n/ar.php +++ b/apps/user_ldap/l10n/ar.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Select groups" => "إختر مجموعة", "_%s group found_::_%s groups found_" => array("","","","","",""), "_%s user found_::_%s users found_" => array("","","","","",""), +"Save" => "حفظ", "Help" => "المساعدة", "Host" => "المضيف", "Password" => "كلمة المرور", diff --git a/apps/user_ldap/l10n/bg_BG.php b/apps/user_ldap/l10n/bg_BG.php index c236e57e0ec..588f6d448b4 100644 --- a/apps/user_ldap/l10n/bg_BG.php +++ b/apps/user_ldap/l10n/bg_BG.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "Грешка", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Запис", "Help" => "Помощ", "Password" => "Парола" ); diff --git a/apps/user_ldap/l10n/bn_BD.php b/apps/user_ldap/l10n/bn_BD.php index 517ce90096c..01b93a1f42e 100644 --- a/apps/user_ldap/l10n/bn_BD.php +++ b/apps/user_ldap/l10n/bn_BD.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "সমস্যা", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "সংরক্ষণ", "Help" => "সহায়িকা", "Host" => "হোস্ট", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL আবশ্যক না হলে আপনি এই প্রটোকলটি মুছে ফেলতে পারেন । এরপর শুরু করুন এটা দিয়ে ldaps://", diff --git a/apps/user_ldap/l10n/bs.php b/apps/user_ldap/l10n/bs.php index 1116aa8242b..7a64be44e0d 100644 --- a/apps/user_ldap/l10n/bs.php +++ b/apps/user_ldap/l10n/bs.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( "_%s group found_::_%s groups found_" => array("","",""), -"_%s user found_::_%s users found_" => array("","","") +"_%s user found_::_%s users found_" => array("","",""), +"Save" => "Spasi" ); $PLURAL_FORMS = "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/user_ldap/l10n/ca.php b/apps/user_ldap/l10n/ca.php index 46fb7db9036..2c5358d6c77 100644 --- a/apps/user_ldap/l10n/ca.php +++ b/apps/user_ldap/l10n/ca.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("S'ha trobat %s usuari","S'han trobat %s usuaris"), "Invalid Host" => "Ordinador central no vàlid", "Could not find the desired feature" => "La característica desitjada no s'ha trobat", +"Save" => "Desa", "Test Configuration" => "Comprovació de la configuració", "Help" => "Ajuda", "Limit the access to %s to groups meeting this criteria:" => "Limita l'accés a %s grups que compleixin amb el criteri:", diff --git a/apps/user_ldap/l10n/cs_CZ.php b/apps/user_ldap/l10n/cs_CZ.php index 9f496d1d0b2..8c90789251a 100644 --- a/apps/user_ldap/l10n/cs_CZ.php +++ b/apps/user_ldap/l10n/cs_CZ.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Potvrdit smazání", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Uložit", "Test Configuration" => "Vyzkoušet nastavení", "Help" => "Nápověda", "Add Server Configuration" => "Přidat nastavení serveru", diff --git a/apps/user_ldap/l10n/cy_GB.php b/apps/user_ldap/l10n/cy_GB.php index ef85b47fc05..65a78432c75 100644 --- a/apps/user_ldap/l10n/cy_GB.php +++ b/apps/user_ldap/l10n/cy_GB.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Gwall", "_%s group found_::_%s groups found_" => array("","","",""), "_%s user found_::_%s users found_" => array("","","",""), +"Save" => "Cadw", "Help" => "Cymorth", "Password" => "Cyfrinair" ); diff --git a/apps/user_ldap/l10n/da.php b/apps/user_ldap/l10n/da.php index d27317f0cd2..c35e8561442 100644 --- a/apps/user_ldap/l10n/da.php +++ b/apps/user_ldap/l10n/da.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Bekræft Sletning", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Gem", "Test Configuration" => "Test Konfiguration", "Help" => "Hjælp", "Add Server Configuration" => "Tilføj Server Konfiguration", diff --git a/apps/user_ldap/l10n/de.php b/apps/user_ldap/l10n/de.php index ec1f87abbcc..15eefd842c2 100644 --- a/apps/user_ldap/l10n/de.php +++ b/apps/user_ldap/l10n/de.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s Benutzer gefunden","%s Benutzer gefunden"), "Invalid Host" => "Ungültiger Host", "Could not find the desired feature" => "Konnte die gewünschte Funktion nicht finden", +"Save" => "Speichern", "Test Configuration" => "Testkonfiguration", "Help" => "Hilfe", "Limit the access to %s to groups meeting this criteria:" => "Beschränke den Zugriff auf %s auf Gruppen, die die folgenden Kriterien erfüllen:", diff --git a/apps/user_ldap/l10n/de_CH.php b/apps/user_ldap/l10n/de_CH.php index c447f17a9ab..58660840be4 100644 --- a/apps/user_ldap/l10n/de_CH.php +++ b/apps/user_ldap/l10n/de_CH.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Löschung bestätigen", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Speichern", "Test Configuration" => "Testkonfiguration", "Help" => "Hilfe", "Add Server Configuration" => "Serverkonfiguration hinzufügen", diff --git a/apps/user_ldap/l10n/de_DE.php b/apps/user_ldap/l10n/de_DE.php index e719b449f27..0da5307d935 100644 --- a/apps/user_ldap/l10n/de_DE.php +++ b/apps/user_ldap/l10n/de_DE.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s Benutzer gefunden","%s Benutzer gefunden"), "Invalid Host" => "Ungültiger Host", "Could not find the desired feature" => "Konnte die gewünschte Funktion nicht finden", +"Save" => "Speichern", "Test Configuration" => "Testkonfiguration", "Help" => "Hilfe", "Limit the access to %s to groups meeting this criteria:" => "Beschränke den Zugriff auf %s auf Gruppen, die die folgenden Kriterien erfüllen:", diff --git a/apps/user_ldap/l10n/el.php b/apps/user_ldap/l10n/el.php index c72281b678b..2cd93a4f07f 100644 --- a/apps/user_ldap/l10n/el.php +++ b/apps/user_ldap/l10n/el.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Επιβεβαίωση Διαγραφής", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Αποθήκευση", "Test Configuration" => "Δοκιμαστικες ρυθμισεις", "Help" => "Βοήθεια", "Add Server Configuration" => "Προσθήκη Ρυθμίσεων Διακομιστή", diff --git a/apps/user_ldap/l10n/en_GB.php b/apps/user_ldap/l10n/en_GB.php index c582d56a896..325256bc8c2 100644 --- a/apps/user_ldap/l10n/en_GB.php +++ b/apps/user_ldap/l10n/en_GB.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s user found","%s users found"), "Invalid Host" => "Invalid Host", "Could not find the desired feature" => "Could not find the desired feature", +"Save" => "Save", "Test Configuration" => "Test Configuration", "Help" => "Help", "Limit the access to %s to groups meeting this criteria:" => "Limit the access to %s to groups meeting this criteria:", diff --git a/apps/user_ldap/l10n/eo.php b/apps/user_ldap/l10n/eo.php index 727c39e3009..92521d08029 100644 --- a/apps/user_ldap/l10n/eo.php +++ b/apps/user_ldap/l10n/eo.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "_%s group found_::_%s groups found_" => array("%s grupo troviĝis","%s grupoj troviĝis"), "_%s user found_::_%s users found_" => array("%s uzanto troviĝis","%s uzanto troviĝis"), "Invalid Host" => "Nevalida gastigo", +"Save" => "Konservi", "Test Configuration" => "Provi agordon", "Help" => "Helpo", "only those object classes:" => "nur tiuj objektoklasoj:", diff --git a/apps/user_ldap/l10n/es.php b/apps/user_ldap/l10n/es.php index 325b94c6f8a..804cc9e4f16 100644 --- a/apps/user_ldap/l10n/es.php +++ b/apps/user_ldap/l10n/es.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("Usuario %s encontrado","Usuarios %s encontrados"), "Invalid Host" => "Host inválido", "Could not find the desired feature" => "No se puede encontrar la función deseada.", +"Save" => "Guardar", "Test Configuration" => "Configuración de prueba", "Help" => "Ayuda", "Limit the access to %s to groups meeting this criteria:" => "Limitar el acceso a %s a los grupos que cumplan este criterio:", diff --git a/apps/user_ldap/l10n/es_AR.php b/apps/user_ldap/l10n/es_AR.php index 156b881413a..76fe0491241 100644 --- a/apps/user_ldap/l10n/es_AR.php +++ b/apps/user_ldap/l10n/es_AR.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Confirmar borrado", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Guardar", "Test Configuration" => "Probar configuración", "Help" => "Ayuda", "Add Server Configuration" => "Añadir Configuración del Servidor", diff --git a/apps/user_ldap/l10n/et_EE.php b/apps/user_ldap/l10n/et_EE.php index b0f4ae5c0fe..cf19b062dff 100644 --- a/apps/user_ldap/l10n/et_EE.php +++ b/apps/user_ldap/l10n/et_EE.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s kasutaja leitud","%s kasutajat leitud"), "Invalid Host" => "Vigane server", "Could not find the desired feature" => "Ei suuda leida soovitud funktsioonaalsust", +"Save" => "Salvesta", "Test Configuration" => "Testi seadistust", "Help" => "Abiinfo", "Limit the access to %s to groups meeting this criteria:" => "Piira ligipääs %s grupile, mis sobivad kriteeriumiga:", diff --git a/apps/user_ldap/l10n/eu.php b/apps/user_ldap/l10n/eu.php index 1d85f7d70e7..980c5c43242 100644 --- a/apps/user_ldap/l10n/eu.php +++ b/apps/user_ldap/l10n/eu.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Baieztatu Ezabatzea", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Gorde", "Test Configuration" => "Egiaztatu Konfigurazioa", "Help" => "Laguntza", "Add Server Configuration" => "Gehitu Zerbitzariaren Konfigurazioa", diff --git a/apps/user_ldap/l10n/fa.php b/apps/user_ldap/l10n/fa.php index 7c37b8bf760..fb9267bbc88 100644 --- a/apps/user_ldap/l10n/fa.php +++ b/apps/user_ldap/l10n/fa.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "تایید حذف", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "ذخیره", "Test Configuration" => "امتحان پیکربندی", "Help" => "راهنما", "Add Server Configuration" => "افزودن پیکربندی سرور", diff --git a/apps/user_ldap/l10n/fi_FI.php b/apps/user_ldap/l10n/fi_FI.php index 4137973de68..63a8578db49 100644 --- a/apps/user_ldap/l10n/fi_FI.php +++ b/apps/user_ldap/l10n/fi_FI.php @@ -11,6 +11,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Vahvista poisto", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Tallenna", "Help" => "Ohje", "Host" => "Isäntä", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Voit jättää protokollan määrittämättä, paitsi kun vaadit SSL:ää. Aloita silloin ldaps://", diff --git a/apps/user_ldap/l10n/fr.php b/apps/user_ldap/l10n/fr.php index b8f34a4837e..d53f78eb36f 100644 --- a/apps/user_ldap/l10n/fr.php +++ b/apps/user_ldap/l10n/fr.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s utilisateur trouvé","%s utilisateurs trouvés"), "Invalid Host" => "Hôte invalide", "Could not find the desired feature" => "Impossible de trouver la fonction souhaitée", +"Save" => "Sauvegarder", "Test Configuration" => "Tester la configuration", "Help" => "Aide", "Limit the access to %s to groups meeting this criteria:" => "Limiter l'accès à %s aux groupes respectant ce critère :", diff --git a/apps/user_ldap/l10n/gl.php b/apps/user_ldap/l10n/gl.php index 86341469117..6d7f8e334be 100644 --- a/apps/user_ldap/l10n/gl.php +++ b/apps/user_ldap/l10n/gl.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("Atopouse %s usuario","Atopáronse %s usuarios"), "Invalid Host" => "Máquina incorrecta", "Could not find the desired feature" => "Non foi posíbel atopar a función desexada", +"Save" => "Gardar", "Test Configuration" => "Probar a configuración", "Help" => "Axuda", "Limit the access to %s to groups meeting this criteria:" => "Limitar o acceso a %s aos grupos que coincidan con estes criterios:", diff --git a/apps/user_ldap/l10n/he.php b/apps/user_ldap/l10n/he.php index 17261be266b..6f838cb5d9b 100644 --- a/apps/user_ldap/l10n/he.php +++ b/apps/user_ldap/l10n/he.php @@ -10,6 +10,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "אישור המחיקה", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "שמירה", "Help" => "עזרה", "Add Server Configuration" => "הוספת הגדרות השרת", "Host" => "מארח", diff --git a/apps/user_ldap/l10n/hi.php b/apps/user_ldap/l10n/hi.php index ea41a19bfab..386134547eb 100644 --- a/apps/user_ldap/l10n/hi.php +++ b/apps/user_ldap/l10n/hi.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "त्रुटि", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "सहेजें", "Help" => "सहयोग", "Password" => "पासवर्ड" ); diff --git a/apps/user_ldap/l10n/hr.php b/apps/user_ldap/l10n/hr.php index d8023c5b43b..b28175994eb 100644 --- a/apps/user_ldap/l10n/hr.php +++ b/apps/user_ldap/l10n/hr.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "Greška", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Snimi", "Help" => "Pomoć", "Password" => "Lozinka", "Back" => "Natrag" diff --git a/apps/user_ldap/l10n/hu_HU.php b/apps/user_ldap/l10n/hu_HU.php index 92f2b5d5674..498221632f0 100644 --- a/apps/user_ldap/l10n/hu_HU.php +++ b/apps/user_ldap/l10n/hu_HU.php @@ -26,6 +26,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s felhasználó van","%s felhasználó van"), "Invalid Host" => "Érvénytelen gépnév", "Could not find the desired feature" => "A kívánt funkció nem található", +"Save" => "Mentés", "Test Configuration" => "A beállítások tesztelése", "Help" => "Súgó", "Limit the access to %s to groups meeting this criteria:" => "Korlátozzuk %s elérését a következő feltételeknek megfelelő csoportokra:", diff --git a/apps/user_ldap/l10n/hy.php b/apps/user_ldap/l10n/hy.php index 3a1e002311c..805020b059c 100644 --- a/apps/user_ldap/l10n/hy.php +++ b/apps/user_ldap/l10n/hy.php @@ -1,6 +1,7 @@ <?php $TRANSLATIONS = array( "_%s group found_::_%s groups found_" => array("",""), -"_%s user found_::_%s users found_" => array("","") +"_%s user found_::_%s users found_" => array("",""), +"Save" => "Պահպանել" ); $PLURAL_FORMS = "nplurals=2; plural=(n != 1);"; diff --git a/apps/user_ldap/l10n/ia.php b/apps/user_ldap/l10n/ia.php index ced826ac6d8..4a23d5860c4 100644 --- a/apps/user_ldap/l10n/ia.php +++ b/apps/user_ldap/l10n/ia.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "Error", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Salveguardar", "Help" => "Adjuta", "Password" => "Contrasigno", "Back" => "Retro" diff --git a/apps/user_ldap/l10n/id.php b/apps/user_ldap/l10n/id.php index 3e8d47ef801..11e43d22206 100644 --- a/apps/user_ldap/l10n/id.php +++ b/apps/user_ldap/l10n/id.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Konfirmasi Penghapusan", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "Simpan", "Test Configuration" => "Uji Konfigurasi", "Help" => "Bantuan", "Add Server Configuration" => "Tambah Konfigurasi Server", diff --git a/apps/user_ldap/l10n/is.php b/apps/user_ldap/l10n/is.php index 0fdd6ca9c43..e146c93cb81 100644 --- a/apps/user_ldap/l10n/is.php +++ b/apps/user_ldap/l10n/is.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Villa", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Vista", "Test Configuration" => "Prúfa uppsetningu", "Help" => "Hjálp", "Host" => "Netþjónn", diff --git a/apps/user_ldap/l10n/it.php b/apps/user_ldap/l10n/it.php index 9825832f3d8..97ca14e0a85 100644 --- a/apps/user_ldap/l10n/it.php +++ b/apps/user_ldap/l10n/it.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s utente trovato","%s utenti trovati"), "Invalid Host" => "Host non valido", "Could not find the desired feature" => "Impossibile trovare la funzionalità desiderata", +"Save" => "Salva", "Test Configuration" => "Prova configurazione", "Help" => "Aiuto", "Limit the access to %s to groups meeting this criteria:" => "Limita l'accesso a %s ai gruppi che verificano questi criteri:", diff --git a/apps/user_ldap/l10n/ja_JP.php b/apps/user_ldap/l10n/ja_JP.php index 34bcbb22149..1c94743af49 100644 --- a/apps/user_ldap/l10n/ja_JP.php +++ b/apps/user_ldap/l10n/ja_JP.php @@ -26,6 +26,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s ユーザが見つかりました"), "Invalid Host" => "無効なホスト", "Could not find the desired feature" => "望ましい機能は見つかりませんでした", +"Save" => "保存", "Test Configuration" => "設定をテスト", "Help" => "ヘルプ", "Limit the access to %s to groups meeting this criteria:" => "この基準に合致するグループに %s へのアクセスを制限:", diff --git a/apps/user_ldap/l10n/ka_GE.php b/apps/user_ldap/l10n/ka_GE.php index 6d79e80c15a..33483681044 100644 --- a/apps/user_ldap/l10n/ka_GE.php +++ b/apps/user_ldap/l10n/ka_GE.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "წაშლის დადასტურება", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "შენახვა", "Test Configuration" => "კავშირის ტესტირება", "Help" => "დახმარება", "Add Server Configuration" => "სერვერის პარამეტრების დამატება", diff --git a/apps/user_ldap/l10n/ko.php b/apps/user_ldap/l10n/ko.php index a9dedd26716..423f094e239 100644 --- a/apps/user_ldap/l10n/ko.php +++ b/apps/user_ldap/l10n/ko.php @@ -8,6 +8,7 @@ $TRANSLATIONS = array( "Connection test failed" => "연결 시험 실패", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "저장", "Help" => "도움말", "Host" => "호스트", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL을 사용하는 경우가 아니라면 프로토콜을 입력하지 않아도 됩니다. SSL을 사용하려면 ldaps://를 입력하십시오.", diff --git a/apps/user_ldap/l10n/ku_IQ.php b/apps/user_ldap/l10n/ku_IQ.php index 6e84a546a55..7d3b22f8494 100644 --- a/apps/user_ldap/l10n/ku_IQ.php +++ b/apps/user_ldap/l10n/ku_IQ.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "ههڵه", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "پاشکهوتکردن", "Help" => "یارمەتی", "Password" => "وشەی تێپەربو" ); diff --git a/apps/user_ldap/l10n/lb.php b/apps/user_ldap/l10n/lb.php index 906b26cf24f..c6fdc003548 100644 --- a/apps/user_ldap/l10n/lb.php +++ b/apps/user_ldap/l10n/lb.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Fehler", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Späicheren", "Help" => "Hëllef", "Host" => "Host", "Password" => "Passwuert", diff --git a/apps/user_ldap/l10n/lt_LT.php b/apps/user_ldap/l10n/lt_LT.php index ee8bb28425c..4e5a562d7fd 100644 --- a/apps/user_ldap/l10n/lt_LT.php +++ b/apps/user_ldap/l10n/lt_LT.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Patvirtinkite trynimą", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Išsaugoti", "Test Configuration" => "Bandyti konfigūraciją", "Help" => "Pagalba", "Add Server Configuration" => "Pridėti serverio konfigūraciją", diff --git a/apps/user_ldap/l10n/lv.php b/apps/user_ldap/l10n/lv.php index 7ab2210f79d..0cbf7415d33 100644 --- a/apps/user_ldap/l10n/lv.php +++ b/apps/user_ldap/l10n/lv.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Apstiprināt dzēšanu", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Saglabāt", "Test Configuration" => "Testa konfigurācija", "Help" => "Palīdzība", "Add Server Configuration" => "Pievienot servera konfigurāciju", diff --git a/apps/user_ldap/l10n/mk.php b/apps/user_ldap/l10n/mk.php index 4b8055324d6..fcbc01f137b 100644 --- a/apps/user_ldap/l10n/mk.php +++ b/apps/user_ldap/l10n/mk.php @@ -1,12 +1,19 @@ <?php $TRANSLATIONS = array( "Deletion failed" => "Бришењето е неуспешно", +"Keep settings?" => "Да ги сочувам нагодувањата?", +"Cannot add server configuration" => "Не можам да ја додадам конфигурацијата на серверот", "Error" => "Грешка", +"Connection test succeeded" => "Тестот за поврзување е успешен", +"Connection test failed" => "Тестот за поврзување не е успешен", +"Confirm Deletion" => "Потврдете го бришењето", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Сними", "Help" => "Помош", "Host" => "Домаќин", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Може да го скокнете протколот освен ако не ви треба SSL. Тогаш ставете ldaps://", +"Port" => "Порта", "Password" => "Лозинка", "Back" => "Назад", "Continue" => "Продолжи" diff --git a/apps/user_ldap/l10n/ms_MY.php b/apps/user_ldap/l10n/ms_MY.php index b6a8ede78ee..7010e8a8f50 100644 --- a/apps/user_ldap/l10n/ms_MY.php +++ b/apps/user_ldap/l10n/ms_MY.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Ralat", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "Simpan", "Help" => "Bantuan", "Password" => "Kata laluan", "Back" => "Kembali" diff --git a/apps/user_ldap/l10n/nb_NO.php b/apps/user_ldap/l10n/nb_NO.php index 6d3c7e6aa42..42ff76f04a0 100644 --- a/apps/user_ldap/l10n/nb_NO.php +++ b/apps/user_ldap/l10n/nb_NO.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Bekreft sletting", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Lagre", "Help" => "Hjelp", "Add Server Configuration" => "Legg til tjener-konfigurasjon", "Host" => "Tjener", diff --git a/apps/user_ldap/l10n/nl.php b/apps/user_ldap/l10n/nl.php index e6bedce683c..9acd9c088c8 100644 --- a/apps/user_ldap/l10n/nl.php +++ b/apps/user_ldap/l10n/nl.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s gebruiker gevonden","%s gebruikers gevonden"), "Invalid Host" => "Ongeldige server", "Could not find the desired feature" => "Kon de gewenste functie niet vinden", +"Save" => "Bewaren", "Test Configuration" => "Test configuratie", "Help" => "Help", "Limit the access to %s to groups meeting this criteria:" => "Beperk toegang tot %s tot groepen die voldoen aan deze criteria:", diff --git a/apps/user_ldap/l10n/nn_NO.php b/apps/user_ldap/l10n/nn_NO.php index be2ce476137..c8b7ec091b6 100644 --- a/apps/user_ldap/l10n/nn_NO.php +++ b/apps/user_ldap/l10n/nn_NO.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Select groups" => "Vel grupper", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Lagra", "Help" => "Hjelp", "Host" => "Tenar", "Password" => "Passord", diff --git a/apps/user_ldap/l10n/oc.php b/apps/user_ldap/l10n/oc.php index 4bffe766a0b..3b3e8365a65 100644 --- a/apps/user_ldap/l10n/oc.php +++ b/apps/user_ldap/l10n/oc.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Error", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Enregistra", "Help" => "Ajuda", "Password" => "Senhal" ); diff --git a/apps/user_ldap/l10n/pl.php b/apps/user_ldap/l10n/pl.php index 39e43c0a6d1..945f72e0537 100644 --- a/apps/user_ldap/l10n/pl.php +++ b/apps/user_ldap/l10n/pl.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Potwierdź usunięcie", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Zapisz", "Test Configuration" => "Konfiguracja testowa", "Help" => "Pomoc", "Add Server Configuration" => "Dodaj konfigurację servera", diff --git a/apps/user_ldap/l10n/pt_BR.php b/apps/user_ldap/l10n/pt_BR.php index f30fe35b15b..cf047b2c88c 100644 --- a/apps/user_ldap/l10n/pt_BR.php +++ b/apps/user_ldap/l10n/pt_BR.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Failed to delete the server configuration" => "Falha ao deletar a configuração do servidor", "The configuration is valid and the connection could be established!" => "A configuração é válida e a conexão foi estabelecida!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "A configuração é válida, mas o Bind falhou. Confira as configurações do servidor e as credenciais.", +"The configuration is invalid. Please have a look at the logs for further details." => "Configuração inválida. Por favor, dê uma olhada nos logs para mais detalhes.", "No action specified" => "Nenhuma ação especificada", "No configuration specified" => "Nenhuma configuração especificada", "No data specified" => "Não há dados especificados", @@ -26,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("usuário %s encontrado","usuários %s encontrados"), "Invalid Host" => "Host inválido", "Could not find the desired feature" => "Não foi possível encontrar a função desejada", +"Save" => "Guardar", "Test Configuration" => "Teste de Configuração", "Help" => "Ajuda", "Limit the access to %s to groups meeting this criteria:" => "Limitar o acesso a %s para grupos que coincidam com estes critérios:", diff --git a/apps/user_ldap/l10n/pt_PT.php b/apps/user_ldap/l10n/pt_PT.php index b9332990088..78516929e1a 100644 --- a/apps/user_ldap/l10n/pt_PT.php +++ b/apps/user_ldap/l10n/pt_PT.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Confirmar a operação de apagar", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Guardar", "Test Configuration" => "Testar a configuração", "Help" => "Ajuda", "Add Server Configuration" => "Adicionar configurações do servidor", diff --git a/apps/user_ldap/l10n/ro.php b/apps/user_ldap/l10n/ro.php index 9454aa52465..34c1809ca11 100644 --- a/apps/user_ldap/l10n/ro.php +++ b/apps/user_ldap/l10n/ro.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Error" => "Eroare", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Salvează", "Help" => "Ajutor", "Host" => "Gazdă", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Puteți omite protocolul, decât dacă folosiți SSL. Atunci se începe cu ldaps://", diff --git a/apps/user_ldap/l10n/ru.php b/apps/user_ldap/l10n/ru.php index f75f23f2784..f908fa3cc70 100644 --- a/apps/user_ldap/l10n/ru.php +++ b/apps/user_ldap/l10n/ru.php @@ -1,10 +1,10 @@ <?php $TRANSLATIONS = array( -"Failed to clear the mappings." => "Не удалось очистить соотвествия.", +"Failed to clear the mappings." => "Не удалось очистить соответствия.", "Failed to delete the server configuration" => "Не удалось удалить конфигурацию сервера", "The configuration is valid and the connection could be established!" => "Конфигурация правильная и подключение может быть установлено!", "The configuration is valid, but the Bind failed. Please check the server settings and credentials." => "Конфигурация верна, но операция подключения завершилась неудачно. Пожалуйста, проверьте настройки сервера и учетные данные.", -"The configuration is invalid. Please have a look at the logs for further details." => "Конфигурация не выполнена. Пожалуйста, просмотрите логи для уточнения деталей", +"The configuration is invalid. Please have a look at the logs for further details." => "Конфигурация недействительна. Пожалуйста, просмотрите логи для уточнения деталей.", "No action specified" => "Действие не указано", "No configuration specified" => "Конфигурация не создана", "No data specified" => "Нет данных", @@ -16,60 +16,61 @@ $TRANSLATIONS = array( "mappings cleared" => "Соответствия очищены", "Success" => "Успешно", "Error" => "Ошибка", -"Select groups" => "Выбрать группы", -"Select object classes" => "Выберите классы объекта", +"Select groups" => "Выберите группы", +"Select object classes" => "Выберите объектные классы", "Select attributes" => "Выберите атрибуты", "Connection test succeeded" => "Проверка соединения удалась", "Connection test failed" => "Проверка соединения не удалась", "Do you really want to delete the current Server Configuration?" => "Вы действительно хотите удалить существующую конфигурацию сервера?", "Confirm Deletion" => "Подтверждение удаления", -"_%s group found_::_%s groups found_" => array("%s гурппа найдена","%s группы найдены","%s групп найдено"), +"_%s group found_::_%s groups found_" => array("%s группа найдена","%s группы найдены","%s групп найдено"), "_%s user found_::_%s users found_" => array("%s пользователь найден","%s пользователя найдено","%s пользователей найдено"), "Invalid Host" => "Неверный сервер", "Could not find the desired feature" => "Не могу найти требуемой функциональности", -"Test Configuration" => "Тестовая конфигурация", +"Save" => "Сохранить", +"Test Configuration" => "Проверить конфигурацию", "Help" => "Помощь", -"Limit the access to %s to groups meeting this criteria:" => "Ограничить доступ к %s группам удовлетворяющим этому критерию:", -"only those object classes:" => "только эти классы объекта", +"Limit the access to %s to groups meeting this criteria:" => "Ограничить доступ к %s группам, удовлетворяющим этому критерию:", +"only those object classes:" => "только эти объектные классы", "only from those groups:" => "только из этих групп", "Edit raw filter instead" => "Редактировать исходный фильтр", "Raw LDAP filter" => "Исходный LDAP фильтр", -"The filter specifies which LDAP groups shall have access to the %s instance." => "Этот фильтр определяет какие LDAP группы должны иметь доступ к %s.", +"The filter specifies which LDAP groups shall have access to the %s instance." => "Этот фильтр определяет, какие LDAP группы должны иметь доступ к %s.", "groups found" => "групп найдено", -"What attribute shall be used as login name:" => "Какой аттибут должен быть использован для логина:", +"What attribute shall be used as login name:" => "Какой атрибут должен быть использован для логина:", "LDAP Username:" => "Имя пользователя LDAP", "LDAP Email Address:" => "LDAP адрес электронной почты:", -"Other Attributes:" => "Другие аттрибуты:", +"Other Attributes:" => "Другие атрибуты:", "Add Server Configuration" => "Добавить конфигурацию сервера", "Host" => "Сервер", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можно опустить протокол, за исключением того, когда вам требуется SSL. Тогда начните с ldaps :/ /", "Port" => "Порт", "User DN" => "DN пользователя", -"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN-клиента пользователя, с которым связывают должно быть заполнено, например, uid=агент, dc=пример, dc=com. Для анонимного доступа, оставьте DN и пароль пустыми.", +"The DN of the client user with which the bind shall be done, e.g. uid=agent,dc=example,dc=com. For anonymous access, leave DN and Password empty." => "DN пользователя, под которым выполняется подключение, например, uid=agent,dc=example,dc=com. Для анонимного доступа оставьте DN и пароль пустыми.", "Password" => "Пароль", "For anonymous access, leave DN and Password empty." => "Для анонимного доступа оставьте DN и пароль пустыми.", -"One Base DN per line" => "По одному базовому DN в строке.", +"One Base DN per line" => "По одной базе поиска (Base DN) в строке.", "You can specify Base DN for users and groups in the Advanced tab" => "Вы можете задать Base DN для пользователей и групп на вкладке \"Расширенное\"", -"Limit the access to %s to users meeting this criteria:" => "Ограничить доступ к %s пользователям удовлетворяющим этому критерию:", -"The filter specifies which LDAP users shall have access to the %s instance." => "Этот фильтр указывает какие LDAP пользователи должны иметь доступ к %s.", +"Limit the access to %s to users meeting this criteria:" => "Ограничить доступ к %s пользователям, удовлетворяющим этому критерию:", +"The filter specifies which LDAP users shall have access to the %s instance." => "Этот фильтр указывает, какие пользователи LDAP должны иметь доступ к %s.", "users found" => "пользователей найдено", "Back" => "Назад", "Continue" => "Продолжить", -"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth не совместимы. Вы можете наблюдать некорректное поведение. Пожалуйста попросите Вашего системного администратора отключить одно из них.", +"<b>Warning:</b> Apps user_ldap and user_webdavauth are incompatible. You may experience unexpected behavior. Please ask your system administrator to disable one of them." => "<b>Предупреждение:</b> Приложения user_ldap и user_webdavauth несовместимы. Вы можете наблюдать некорректное поведение. Пожалуйста, попросите вашего системного администратора отключить одно из них.", "<b>Warning:</b> The PHP LDAP module is not installed, the backend will not work. Please ask your system administrator to install it." => "<b>Внимание:</b> Модуль LDAP для PHP не установлен, бэкенд не будет работать. Пожалуйста, попросите вашего системного администратора его установить. ", "Connection Settings" => "Настройки подключения", "Configuration Active" => "Конфигурация активна", "When unchecked, this configuration will be skipped." => "Когда галочка снята, эта конфигурация будет пропущена.", -"User Login Filter" => "Фильтр входа пользователей", +"User Login Filter" => "Фильтр учетных записей", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" => "Определяет фильтр для применения при попытке входа. %%uid заменяет имя пользователя при входе в систему. Например: \"uid=%%uid\"", "Backup (Replica) Host" => "Адрес резервного сервера", "Give an optional backup host. It must be a replica of the main LDAP/AD server." => "Укажите дополнительный резервный сервер. Он должен быть репликой главного LDAP/AD сервера.", "Backup (Replica) Port" => "Порт резервного сервера", -"Disable Main Server" => "Отключение главного сервера", -"Only connect to the replica server." => "Только подключение к серверу реплик.", +"Disable Main Server" => "Отключить главный сервер", +"Only connect to the replica server." => "Подключаться только к серверу-реплике.", "Case insensitve LDAP server (Windows)" => "Нечувствительный к регистру сервер LDAP (Windows)", "Turn off SSL certificate validation." => "Отключить проверку сертификата SSL.", -"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер сертификат SSL сервера LDAP.", +"Not recommended, use it for testing only! If connection only works with this option, import the LDAP server's SSL certificate in your %s server." => "Не рекомендуется, используйте только в режиме тестирования! Если соединение работает только с этой опцией, импортируйте на ваш %s сервер SSL-сертификат сервера LDAP.", "Cache Time-To-Live" => "Кэш времени жизни", "in seconds. A change empties the cache." => "в секундах. Изменение очистит кэш.", "Directory Settings" => "Настройки каталога", @@ -77,8 +78,8 @@ $TRANSLATIONS = array( "The LDAP attribute to use to generate the user's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени пользователя.", "Base User Tree" => "База пользовательского дерева", "One User Base DN per line" => "По одной базовому DN пользователей в строке.", -"User Search Attributes" => "Поисковые атрибуты пользователя", -"Optional; one attribute per line" => "Опционально; один атрибут на линию", +"User Search Attributes" => "Атрибуты поиска пользоватетелей", +"Optional; one attribute per line" => "Опционально; один атрибут в строке", "Group Display Name Field" => "Поле отображаемого имени группы", "The LDAP attribute to use to generate the groups's display name." => "Атрибут LDAP, который используется для генерации отображаемого имени группы.", "Base Group Tree" => "База группового дерева", @@ -86,21 +87,21 @@ $TRANSLATIONS = array( "Group Search Attributes" => "Атрибуты поиска для группы", "Group-Member association" => "Ассоциация Группа-Участник", "Special Attributes" => "Специальные атрибуты", -"Quota Field" => "Поле квота", +"Quota Field" => "Поле квоты", "Quota Default" => "Квота по умолчанию", "in bytes" => "в байтах", -"Email Field" => "Поле адресса эллектронной почты", -"User Home Folder Naming Rule" => "Правило именования Домашней Папки Пользователя", -"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте имя пользователя пустым (по умолчанию). Иначе укажите атрибут LDAP/AD.", +"Email Field" => "Поле адреса электронной почты", +"User Home Folder Naming Rule" => "Правило именования домашней папки пользователя", +"Leave empty for user name (default). Otherwise, specify an LDAP/AD attribute." => "Оставьте пустым для использования имени пользователя (по умолчанию). Иначе укажите атрибут LDAP/AD.", "Internal Username" => "Внутреннее имя пользователя", -"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "По-умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по-умолчанию для папки пользователя в ownCloud. Оно также портом для удаленных ссылок, к примеру, для всех сервисов *DAV. С помощию данной настройки можно изменить поведение по-умолчанию. Чтобы достичь поведения, как было настроено до изменения, ownCloud 5 выводит атрибут имени пользователя в этом поле. Оставьте его пустым для режима по-умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", -"Internal Username Attribute:" => "Аттрибут для внутреннего имени:", +"By default the internal username will be created from the UUID attribute. It makes sure that the username is unique and characters do not need to be converted. The internal username has the restriction that only these characters are allowed: [ a-zA-Z0-9_.@- ]. Other characters are replaced with their ASCII correspondence or simply omitted. On collisions a number will be added/increased. The internal username is used to identify a user internally. It is also the default name for the user home folder. It is also a part of remote URLs, for instance for all *DAV services. With this setting, the default behavior can be overridden. To achieve a similar behavior as before ownCloud 5 enter the user display name attribute in the following field. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users." => "По умолчанию внутреннее имя пользователя будет создано из атрибута UUID. Таким образом имя пользователя становится уникальным и не требует конвертации символов. Внутреннее имя пользователя может состоять только из следующих символов: [ a-zA-Z0-9_.@- ]. Остальные символы замещаются соответствиями из таблицы ASCII или же просто пропускаются. При совпадении к имени будет добавлено или увеличено число. Внутреннее имя пользователя используется для внутренней идентификации пользователя. Также оно является именем по умолчанию для папки пользователя в ownCloud. Оно также является частью URL, к примеру, для всех сервисов *DAV. С помощью данной настройки можно изменить поведение по умолчанию. Чтобы достичь поведения, как было до ownCloud 5, введите атрибут отображаемого имени пользователя в этом поле. Оставьте его пустым для режима по умолчанию. Изменения будут иметь эффект только для новых подключенных (добавленных) пользователей LDAP.", +"Internal Username Attribute:" => "Атрибут для внутреннего имени:", "Override UUID detection" => "Переопределить нахождение UUID", -"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "По-умолчанию, ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также, на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по-умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", -"UUID Attribute for Users:" => "UUID Аттрибуты для Пользователей:", -"UUID Attribute for Groups:" => "UUID Аттрибуты для Групп:", +"By default, the UUID attribute is automatically detected. The UUID attribute is used to doubtlessly identify LDAP users and groups. Also, the internal username will be created based on the UUID, if not specified otherwise above. You can override the setting and pass an attribute of your choice. You must make sure that the attribute of your choice can be fetched for both users and groups and it is unique. Leave it empty for default behavior. Changes will have effect only on newly mapped (added) LDAP users and groups." => "По умолчанию ownCloud определяет атрибут UUID автоматически. Этот атрибут используется для того, чтобы достоверно индентифицировать пользователей и группы LDAP. Также на основании атрибута UUID создается внутреннее имя пользователя, если выше не указано иначе. Вы можете переопределить эту настройку и указать свой атрибут по выбору. Вы должны удостовериться, что выбранный вами атрибут может быть выбран для пользователей и групп, а также то, что он уникальный. Оставьте поле пустым для поведения по умолчанию. Изменения вступят в силу только для новых подключенных (добавленных) пользователей и групп LDAP.", +"UUID Attribute for Users:" => "UUID-атрибуты для пользователей:", +"UUID Attribute for Groups:" => "UUID-атрибуты для групп:", "Username-LDAP User Mapping" => "Соответствия Имя-Пользователь LDAP", -"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется доменное имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если доменное имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP подключения! Ни в коем случае не рекомендуется сбрасывать привязки если система уже находится в эксплуатации, только на этапе тестирования.", +"Usernames are used to store and assign (meta) data. In order to precisely identify and recognize users, each LDAP user will have a internal username. This requires a mapping from username to LDAP user. The created username is mapped to the UUID of the LDAP user. Additionally the DN is cached as well to reduce LDAP interaction, but it is not used for identification. If the DN changes, the changes will be found. The internal username is used all over. Clearing the mappings will have leftovers everywhere. Clearing the mappings is not configuration sensitive, it affects all LDAP configurations! Never clear the mappings in a production environment, only in a testing or experimental stage." => "ownCloud использует имена пользователей для хранения и назначения метаданных. Для точной идентификации и распознавания пользователей, каждый пользователь LDAP будет иметь свое внутреннее имя пользователя. Это требует привязки имени пользователя ownCloud к пользователю LDAP. При создании имя пользователя назначается идентификатору UUID пользователя LDAP. Помимо этого кешируется различающееся имя (DN) для уменьшения числа обращений к LDAP, однако оно не используется для идентификации. Если различающееся имя было изменено, об этом станет известно ownCloud. Внутреннее имя ownCloud используется повсеместно в ownCloud. После сброса привязок в базе могут сохраниться остатки старой информации. Сброс привязок не привязан к конфигурации, он повлияет на все LDAP-подключения! Ни в коем случае не рекомендуется сбрасывать привязки, если система уже находится в эксплуатации, только на этапе тестирования.", "Clear Username-LDAP User Mapping" => "Очистить соответствия Имя-Пользователь LDAP", "Clear Groupname-LDAP Group Mapping" => "Очистить соответствия Группа-Группа LDAP" ); diff --git a/apps/user_ldap/l10n/ru_RU.php b/apps/user_ldap/l10n/ru_RU.php index ca3bfec61bd..696e44a5bb5 100644 --- a/apps/user_ldap/l10n/ru_RU.php +++ b/apps/user_ldap/l10n/ru_RU.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Select groups" => "Выбрать группы", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Сохранить", "Help" => "Помощь", "Password" => "Пароль", "Back" => "Назад" diff --git a/apps/user_ldap/l10n/si_LK.php b/apps/user_ldap/l10n/si_LK.php index 9b427d13bb1..1672daf7eb4 100644 --- a/apps/user_ldap/l10n/si_LK.php +++ b/apps/user_ldap/l10n/si_LK.php @@ -5,6 +5,7 @@ $TRANSLATIONS = array( "Error" => "දෝෂයක්", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "සුරකින්න", "Help" => "උදව්", "Host" => "සත්කාරකය", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "SSL අවශ්යය වන විට පමණක් හැර, අන් අවස්ථාවන්හිදී ප්රොටොකෝලය අත් හැරිය හැක. භාවිතා කරන විට ldaps:// ලෙස ආරම්භ කරන්න", diff --git a/apps/user_ldap/l10n/sk_SK.php b/apps/user_ldap/l10n/sk_SK.php index c716dbb8d11..5367abca9a8 100644 --- a/apps/user_ldap/l10n/sk_SK.php +++ b/apps/user_ldap/l10n/sk_SK.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Potvrdiť vymazanie", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Uložiť", "Test Configuration" => "Test nastavenia", "Help" => "Pomoc", "Add Server Configuration" => "Pridať nastavenia servera.", diff --git a/apps/user_ldap/l10n/sl.php b/apps/user_ldap/l10n/sl.php index 381d13a911a..7eefc34e433 100644 --- a/apps/user_ldap/l10n/sl.php +++ b/apps/user_ldap/l10n/sl.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Potrdi brisanje", "_%s group found_::_%s groups found_" => array("","","",""), "_%s user found_::_%s users found_" => array("","","",""), +"Save" => "Shrani", "Test Configuration" => "Preizkusne nastavitve", "Help" => "Pomoč", "Add Server Configuration" => "Dodaj nastavitve strežnika", diff --git a/apps/user_ldap/l10n/sq.php b/apps/user_ldap/l10n/sq.php index 322b56acbb8..ed19a49363e 100644 --- a/apps/user_ldap/l10n/sq.php +++ b/apps/user_ldap/l10n/sq.php @@ -17,6 +17,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Konfirmoni Fshirjen", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "Ruaj", "Test Configuration" => "Provoni konfigurimet", "Help" => "Ndihmë", "Add Server Configuration" => "Shtoni konfigurimet e serverit", diff --git a/apps/user_ldap/l10n/sr.php b/apps/user_ldap/l10n/sr.php index d79f6bf93f1..f44730e71a1 100644 --- a/apps/user_ldap/l10n/sr.php +++ b/apps/user_ldap/l10n/sr.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "Грешка", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Сачувај", "Help" => "Помоћ", "Host" => "Домаћин", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Можете да изоставите протокол, осим ако захтевате SSL. У том случају почните са ldaps://.", diff --git a/apps/user_ldap/l10n/sr@latin.php b/apps/user_ldap/l10n/sr@latin.php index 91e88b65381..e3023996ad3 100644 --- a/apps/user_ldap/l10n/sr@latin.php +++ b/apps/user_ldap/l10n/sr@latin.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "Greška", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Snimi", "Help" => "Pomoć", "Password" => "Lozinka" ); diff --git a/apps/user_ldap/l10n/sv.php b/apps/user_ldap/l10n/sv.php index 072ed3b7d82..2a1a6e46e03 100644 --- a/apps/user_ldap/l10n/sv.php +++ b/apps/user_ldap/l10n/sv.php @@ -26,6 +26,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s användare hittad","%s användare hittade"), "Invalid Host" => "Felaktig Host", "Could not find the desired feature" => "Det gick inte hitta den önskade funktionen", +"Save" => "Spara", "Test Configuration" => "Testa konfigurationen", "Help" => "Hjälp", "Limit the access to %s to groups meeting this criteria:" => "Begränsa åtkomsten till %s till grupper som möter följande kriterie:", diff --git a/apps/user_ldap/l10n/ta_LK.php b/apps/user_ldap/l10n/ta_LK.php index 30e59cb8374..c7efcf05894 100644 --- a/apps/user_ldap/l10n/ta_LK.php +++ b/apps/user_ldap/l10n/ta_LK.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "வழு", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "சேமிக்க ", "Help" => "உதவி", "Host" => "ஓம்புனர்", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "நீங்கள் SSL சேவையை தவிர உடன்படு வரைமுறையை தவிர்க்க முடியும். பிறகு ldaps:.// உடன் ஆரம்பிக்கவும்", diff --git a/apps/user_ldap/l10n/te.php b/apps/user_ldap/l10n/te.php index 734f200cf9c..ad3ffb1c5e8 100644 --- a/apps/user_ldap/l10n/te.php +++ b/apps/user_ldap/l10n/te.php @@ -3,6 +3,7 @@ $TRANSLATIONS = array( "Error" => "పొరపాటు", "_%s group found_::_%s groups found_" => array("",""), "_%s user found_::_%s users found_" => array("",""), +"Save" => "భద్రపరచు", "Help" => "సహాయం", "Password" => "సంకేతపదం" ); diff --git a/apps/user_ldap/l10n/th_TH.php b/apps/user_ldap/l10n/th_TH.php index 9835a6f7a3b..344015002db 100644 --- a/apps/user_ldap/l10n/th_TH.php +++ b/apps/user_ldap/l10n/th_TH.php @@ -15,6 +15,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "ยืนยันการลบทิ้ง", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "บันทึก", "Help" => "ช่วยเหลือ", "Add Server Configuration" => "เพิ่มการกำหนดค่าเซิร์ฟเวอร์", "Host" => "โฮสต์", diff --git a/apps/user_ldap/l10n/tr.php b/apps/user_ldap/l10n/tr.php index 79f8b876600..80fd5705772 100644 --- a/apps/user_ldap/l10n/tr.php +++ b/apps/user_ldap/l10n/tr.php @@ -27,6 +27,7 @@ $TRANSLATIONS = array( "_%s user found_::_%s users found_" => array("%s kullanıcı bulundu","%s kullanıcı bulundu"), "Invalid Host" => "Geçersiz Makine", "Could not find the desired feature" => "İstenen özellik bulunamadı", +"Save" => "Kaydet", "Test Configuration" => "Test Yapılandırması", "Help" => "Yardım", "Limit the access to %s to groups meeting this criteria:" => "%s erişimini, şu kriterle eşleşen gruplara sınırla:", diff --git a/apps/user_ldap/l10n/ug.php b/apps/user_ldap/l10n/ug.php index 0ca11c6120b..2b991501cbb 100644 --- a/apps/user_ldap/l10n/ug.php +++ b/apps/user_ldap/l10n/ug.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "خاتالىق", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "ساقلا", "Help" => "ياردەم", "Host" => "باش ئاپپارات", "Port" => "ئېغىز", diff --git a/apps/user_ldap/l10n/uk.php b/apps/user_ldap/l10n/uk.php index 6d3d57f946c..ed0a9c3407f 100644 --- a/apps/user_ldap/l10n/uk.php +++ b/apps/user_ldap/l10n/uk.php @@ -16,6 +16,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "Підтвердіть Видалення", "_%s group found_::_%s groups found_" => array("","",""), "_%s user found_::_%s users found_" => array("","",""), +"Save" => "Зберегти", "Test Configuration" => "Тестове налаштування", "Help" => "Допомога", "Add Server Configuration" => "Додати налаштування Сервера", diff --git a/apps/user_ldap/l10n/uz.php b/apps/user_ldap/l10n/uz.php new file mode 100644 index 00000000000..bba52d53a1a --- /dev/null +++ b/apps/user_ldap/l10n/uz.php @@ -0,0 +1,6 @@ +<?php +$TRANSLATIONS = array( +"_%s group found_::_%s groups found_" => array(""), +"_%s user found_::_%s users found_" => array("") +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; diff --git a/apps/user_ldap/l10n/vi.php b/apps/user_ldap/l10n/vi.php index 49347b12518..803101ef583 100644 --- a/apps/user_ldap/l10n/vi.php +++ b/apps/user_ldap/l10n/vi.php @@ -6,6 +6,7 @@ $TRANSLATIONS = array( "Select groups" => "Chọn nhóm", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "Lưu", "Help" => "Giúp đỡ", "Host" => "Máy chủ", "You can omit the protocol, except you require SSL. Then start with ldaps://" => "Bạn có thể bỏ qua các giao thức, ngoại trừ SSL. Sau đó bắt đầu với ldaps://", diff --git a/apps/user_ldap/l10n/zh_CN.php b/apps/user_ldap/l10n/zh_CN.php index cfe60f20fb5..edc02471def 100644 --- a/apps/user_ldap/l10n/zh_CN.php +++ b/apps/user_ldap/l10n/zh_CN.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "确认删除", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "保存", "Test Configuration" => "测试配置", "Help" => "帮助", "Add Server Configuration" => "添加服务器配置", diff --git a/apps/user_ldap/l10n/zh_HK.php b/apps/user_ldap/l10n/zh_HK.php index 222f7c7b3ca..cb504b17463 100644 --- a/apps/user_ldap/l10n/zh_HK.php +++ b/apps/user_ldap/l10n/zh_HK.php @@ -4,6 +4,7 @@ $TRANSLATIONS = array( "Error" => "錯誤", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "儲存", "Help" => "幫助", "Port" => "連接埠", "Password" => "密碼" diff --git a/apps/user_ldap/l10n/zh_TW.php b/apps/user_ldap/l10n/zh_TW.php index 0cf3827dd48..8687a0c87d8 100644 --- a/apps/user_ldap/l10n/zh_TW.php +++ b/apps/user_ldap/l10n/zh_TW.php @@ -18,6 +18,7 @@ $TRANSLATIONS = array( "Confirm Deletion" => "確認刪除", "_%s group found_::_%s groups found_" => array(""), "_%s user found_::_%s users found_" => array(""), +"Save" => "儲存", "Test Configuration" => "測試此設定", "Help" => "說明", "Add Server Configuration" => "新增伺服器設定", diff --git a/apps/user_webdavauth/l10n/ms_MY.php b/apps/user_webdavauth/l10n/ms_MY.php new file mode 100644 index 00000000000..a9266aa56ca --- /dev/null +++ b/apps/user_webdavauth/l10n/ms_MY.php @@ -0,0 +1,7 @@ +<?php +$TRANSLATIONS = array( +"WebDAV Authentication" => "Pengesahan ", +"Address: " => "Alamat:", +"The user credentials will be sent to this address. This plugin checks the response and will interpret the HTTP statuscodes 401 and 403 as invalid credentials, and all other responses as valid credentials." => "Butiran pengguna akan dihantar ke alamat ini. Plugin ini memeriksa maklum balas dan akan mentafsir kod status HTTP 401 dan 403 sebagai butiran tidak sah, dan semua maklum balas lain sebagai butiran yang sah." +); +$PLURAL_FORMS = "nplurals=1; plural=0;"; |